@zwave-js/cc 14.3.9 → 15.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/cc/AlarmSensorCC.d.ts +139 -57
- package/build/cjs/cc/AlarmSensorCC.js.map +2 -2
- package/build/cjs/cc/AssociationCC.d.ts +178 -43
- package/build/cjs/cc/AssociationCC.js +0 -4
- package/build/cjs/cc/AssociationCC.js.map +2 -2
- package/build/cjs/cc/AssociationGroupInfoCC.d.ts +138 -38
- package/build/cjs/cc/AssociationGroupInfoCC.js.map +2 -2
- package/build/cjs/cc/BarrierOperatorCC.d.ts +275 -73
- package/build/cjs/cc/BarrierOperatorCC.js.map +2 -2
- package/build/cjs/cc/BasicCC.d.ts +316 -71
- package/build/cjs/cc/BasicCC.js.map +2 -2
- package/build/cjs/cc/BatteryCC.d.ts +759 -164
- package/build/cjs/cc/BatteryCC.js.map +2 -2
- package/build/cjs/cc/BinarySensorCC.d.ts +91 -26
- package/build/cjs/cc/BinarySensorCC.js.map +2 -2
- package/build/cjs/cc/BinarySwitchCC.d.ts +190 -38
- package/build/cjs/cc/BinarySwitchCC.js.map +2 -2
- package/build/cjs/cc/CRC16CC.d.ts +4 -8
- package/build/cjs/cc/CRC16CC.js +4 -27
- package/build/cjs/cc/CRC16CC.js.map +2 -2
- package/build/cjs/cc/CentralSceneCC.d.ts +272 -53
- package/build/cjs/cc/CentralSceneCC.js.map +2 -2
- package/build/cjs/cc/ClimateControlScheduleCC.d.ts +150 -37
- package/build/cjs/cc/ClimateControlScheduleCC.js.map +2 -2
- package/build/cjs/cc/ClockCC.d.ts +3 -3
- package/build/cjs/cc/ClockCC.js.map +2 -2
- package/build/cjs/cc/ColorSwitchCC.d.ts +423 -96
- package/build/cjs/cc/ColorSwitchCC.js.map +2 -2
- package/build/cjs/cc/ConfigurationCC._validateArgs.js +1 -1
- package/build/cjs/cc/ConfigurationCC._validateArgs.js.map +1 -1
- package/build/cjs/cc/ConfigurationCC.d.ts +101 -37
- package/build/cjs/cc/ConfigurationCC.js +0 -8
- package/build/cjs/cc/ConfigurationCC.js.map +2 -2
- package/build/cjs/cc/DeviceResetLocallyCC.d.ts +1 -1
- package/build/cjs/cc/DeviceResetLocallyCC.js.map +2 -2
- package/build/cjs/cc/DoorLockCC._validateArgs.js +1 -1
- package/build/cjs/cc/DoorLockCC._validateArgs.js.map +1 -1
- package/build/cjs/cc/DoorLockCC.d.ts +1731 -419
- package/build/cjs/cc/DoorLockCC.js.map +2 -2
- package/build/cjs/cc/DoorLockLoggingCC.d.ts +64 -12
- package/build/cjs/cc/DoorLockLoggingCC.js.map +2 -2
- package/build/cjs/cc/EnergyProductionCC.d.ts +29 -14
- package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
- package/build/cjs/cc/EntryControlCC.d.ts +308 -57
- package/build/cjs/cc/EntryControlCC.js.map +2 -2
- package/build/cjs/cc/FirmwareUpdateMetaDataCC._validateArgs.d.ts +2 -0
- package/build/cjs/cc/FirmwareUpdateMetaDataCC._validateArgs.js +26 -0
- package/build/cjs/cc/FirmwareUpdateMetaDataCC._validateArgs.js.map +1 -1
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +393 -67
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +155 -12
- package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlModeCC.d.ts +125 -27
- package/build/cjs/cc/HumidityControlModeCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +64 -18
- package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/HumidityControlSetpointCC.d.ts +116 -39
- package/build/cjs/cc/HumidityControlSetpointCC.js.map +2 -2
- package/build/cjs/cc/InclusionControllerCC.d.ts +4 -4
- package/build/cjs/cc/InclusionControllerCC.js.map +2 -2
- package/build/cjs/cc/IndicatorCC.d.ts +325 -83
- package/build/cjs/cc/IndicatorCC.js.map +2 -2
- package/build/cjs/cc/IrrigationCC.d.ts +2170 -683
- package/build/cjs/cc/IrrigationCC.js.map +2 -2
- package/build/cjs/cc/LanguageCC.d.ts +128 -26
- package/build/cjs/cc/LanguageCC.js.map +2 -2
- package/build/cjs/cc/LockCC.d.ts +64 -14
- package/build/cjs/cc/LockCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +2 -2
- package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
- package/build/cjs/cc/ManufacturerSpecificCC.d.ts +219 -57
- package/build/cjs/cc/ManufacturerSpecificCC.js.map +2 -2
- package/build/cjs/cc/MeterCC.d.ts +364 -89
- package/build/cjs/cc/MeterCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelAssociationCC.d.ts +138 -40
- package/build/cjs/cc/MultiChannelAssociationCC.js +0 -5
- package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
- package/build/cjs/cc/MultiChannelCC.d.ts +469 -99
- package/build/cjs/cc/MultiChannelCC.js +8 -72
- package/build/cjs/cc/MultiChannelCC.js.map +2 -2
- package/build/cjs/cc/MultiCommandCC.d.ts +4 -8
- package/build/cjs/cc/MultiCommandCC.js +4 -37
- package/build/cjs/cc/MultiCommandCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSensorCC.d.ts +118 -33
- package/build/cjs/cc/MultilevelSensorCC.js.map +2 -2
- package/build/cjs/cc/MultilevelSwitchCC.d.ts +490 -125
- package/build/cjs/cc/MultilevelSwitchCC.js.map +2 -2
- package/build/cjs/cc/NodeNamingCC.d.ts +128 -26
- package/build/cjs/cc/NodeNamingCC.js.map +2 -2
- package/build/cjs/cc/NotificationCC.d.ts +603 -161
- package/build/cjs/cc/NotificationCC.js +12 -1
- package/build/cjs/cc/NotificationCC.js.map +2 -2
- package/build/cjs/cc/PowerlevelCC.d.ts +6 -6
- package/build/cjs/cc/PowerlevelCC.js.map +2 -2
- package/build/cjs/cc/ProtectionCC.d.ts +496 -94
- package/build/cjs/cc/ProtectionCC.js.map +2 -2
- package/build/cjs/cc/SceneActivationCC.d.ts +127 -28
- package/build/cjs/cc/SceneActivationCC.js.map +2 -2
- package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +52 -25
- package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +2 -2
- package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +53 -25
- package/build/cjs/cc/SceneControllerConfigurationCC.js.map +2 -2
- package/build/cjs/cc/ScheduleEntryLockCC.d.ts +268 -64
- package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
- package/build/cjs/cc/Security2CC.d.ts +15 -21
- package/build/cjs/cc/Security2CC.js +35 -347
- package/build/cjs/cc/Security2CC.js.map +3 -3
- package/build/cjs/cc/SecurityCC.d.ts +12 -19
- package/build/cjs/cc/SecurityCC.js +12 -106
- package/build/cjs/cc/SecurityCC.js.map +2 -2
- package/build/cjs/cc/SoundSwitchCC.d.ts +253 -64
- package/build/cjs/cc/SoundSwitchCC.js.map +2 -2
- package/build/cjs/cc/SupervisionCC.d.ts +28 -16
- package/build/cjs/cc/SupervisionCC.js +4 -29
- package/build/cjs/cc/SupervisionCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanModeCC.d.ts +187 -38
- package/build/cjs/cc/ThermostatFanModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatFanStateCC.d.ts +64 -18
- package/build/cjs/cc/ThermostatFanStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatModeCC.d.ts +189 -40
- package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
- package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +65 -19
- package/build/cjs/cc/ThermostatOperatingStateCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetbackCC.d.ts +4 -4
- package/build/cjs/cc/ThermostatSetbackCC.js.map +2 -2
- package/build/cjs/cc/ThermostatSetpointCC.d.ts +116 -36
- package/build/cjs/cc/ThermostatSetpointCC.js.map +2 -2
- package/build/cjs/cc/TimeCC.d.ts +6 -6
- package/build/cjs/cc/TimeCC.js.map +2 -2
- package/build/cjs/cc/TimeParametersCC.d.ts +63 -12
- package/build/cjs/cc/TimeParametersCC.js.map +2 -2
- package/build/cjs/cc/TransportServiceCC.d.ts +7 -12
- package/build/cjs/cc/TransportServiceCC.js +3 -20
- package/build/cjs/cc/TransportServiceCC.js.map +2 -2
- package/build/cjs/cc/UserCodeCC._validateArgs.js +1 -1
- package/build/cjs/cc/UserCodeCC._validateArgs.js.map +1 -1
- package/build/cjs/cc/UserCodeCC.d.ts +931 -176
- package/build/cjs/cc/UserCodeCC.js.map +2 -2
- package/build/cjs/cc/VersionCC.d.ts +897 -185
- package/build/cjs/cc/VersionCC.js.map +2 -2
- package/build/cjs/cc/WakeUpCC.d.ts +190 -38
- package/build/cjs/cc/WakeUpCC.js.map +2 -2
- package/build/cjs/cc/WindowCoveringCC.d.ts +193 -103
- package/build/cjs/cc/WindowCoveringCC.js.map +2 -2
- package/build/cjs/cc/ZWavePlusCC.d.ts +311 -51
- package/build/cjs/cc/ZWavePlusCC.js.map +2 -2
- package/build/cjs/cc/ZWaveProtocolCC.d.ts +28 -28
- package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +4 -4
- package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +2 -2
- package/build/cjs/index.d.ts +1 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/index_browser.d.ts +9 -0
- package/build/cjs/index_browser.js +41 -1
- package/build/cjs/index_browser.js.map +2 -2
- package/build/cjs/lib/API.d.ts +7 -5
- package/build/cjs/lib/API.js +1 -1
- package/build/cjs/lib/API.js.map +2 -2
- package/build/cjs/lib/CommandClass.d.ts +10 -21
- package/build/cjs/lib/CommandClass.js +51 -106
- package/build/cjs/lib/CommandClass.js.map +3 -3
- package/build/cjs/lib/CommandClassDecorators.d.ts +1 -1
- package/build/cjs/lib/CommandClassDecorators.js +3 -3
- package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
- package/build/cjs/lib/Values.d.ts +2 -2
- package/build/cjs/lib/Values.js.map +2 -2
- package/build/cjs/lib/traits.d.ts +94 -0
- package/build/cjs/lib/traits.js +17 -0
- package/build/cjs/lib/traits.js.map +7 -0
- package/build/cjs/lib/utils.d.ts +2 -2
- package/build/cjs/lib/utils.js.map +2 -2
- package/build/esm/cc/AlarmSensorCC.d.ts +139 -57
- package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
- package/build/esm/cc/AlarmSensorCC.js +0 -1
- package/build/esm/cc/AlarmSensorCC.js.map +1 -1
- package/build/esm/cc/AssociationCC.d.ts +178 -43
- package/build/esm/cc/AssociationCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationCC.js +0 -13
- package/build/esm/cc/AssociationCC.js.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.d.ts +138 -38
- package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
- package/build/esm/cc/AssociationGroupInfoCC.js +0 -6
- package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.d.ts +275 -73
- package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
- package/build/esm/cc/BarrierOperatorCC.js +0 -3
- package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
- package/build/esm/cc/BasicCC.d.ts +316 -71
- package/build/esm/cc/BasicCC.d.ts.map +1 -1
- package/build/esm/cc/BasicCC.js +0 -2
- package/build/esm/cc/BasicCC.js.map +1 -1
- package/build/esm/cc/BatteryCC.d.ts +759 -164
- package/build/esm/cc/BatteryCC.d.ts.map +1 -1
- package/build/esm/cc/BatteryCC.js +1 -2
- package/build/esm/cc/BatteryCC.js.map +1 -1
- package/build/esm/cc/BinarySensorCC.d.ts +91 -26
- package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySensorCC.js +0 -3
- package/build/esm/cc/BinarySensorCC.js.map +1 -1
- package/build/esm/cc/BinarySwitchCC.d.ts +190 -38
- package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
- package/build/esm/cc/BinarySwitchCC.js +0 -2
- package/build/esm/cc/BinarySwitchCC.js.map +1 -1
- package/build/esm/cc/CRC16CC.d.ts +4 -8
- package/build/esm/cc/CRC16CC.d.ts.map +1 -1
- package/build/esm/cc/CRC16CC.js +4 -34
- package/build/esm/cc/CRC16CC.js.map +1 -1
- package/build/esm/cc/CentralSceneCC.d.ts +272 -53
- package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
- package/build/esm/cc/CentralSceneCC.js +0 -1
- package/build/esm/cc/CentralSceneCC.js.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.d.ts +150 -37
- package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
- package/build/esm/cc/ClimateControlScheduleCC.js +0 -3
- package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
- package/build/esm/cc/ClockCC.d.ts +3 -3
- package/build/esm/cc/ClockCC.d.ts.map +1 -1
- package/build/esm/cc/ClockCC.js +0 -1
- package/build/esm/cc/ClockCC.js.map +1 -1
- package/build/esm/cc/ColorSwitchCC.d.ts +423 -96
- package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/ColorSwitchCC.js +0 -6
- package/build/esm/cc/ColorSwitchCC.js.map +1 -1
- package/build/esm/cc/ConfigurationCC._validateArgs.js +1 -1
- package/build/esm/cc/ConfigurationCC._validateArgs.js.map +1 -1
- package/build/esm/cc/ConfigurationCC.d.ts +101 -37
- package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/ConfigurationCC.js +0 -25
- package/build/esm/cc/ConfigurationCC.js.map +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.d.ts +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
- package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
- package/build/esm/cc/DoorLockCC._validateArgs.js +1 -1
- package/build/esm/cc/DoorLockCC._validateArgs.js.map +1 -1
- package/build/esm/cc/DoorLockCC.d.ts +1731 -419
- package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockCC.js +0 -2
- package/build/esm/cc/DoorLockCC.js.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.d.ts +64 -12
- package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
- package/build/esm/cc/DoorLockLoggingCC.js +0 -1
- package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
- package/build/esm/cc/EnergyProductionCC.d.ts +29 -14
- package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
- package/build/esm/cc/EnergyProductionCC.js +0 -2
- package/build/esm/cc/EnergyProductionCC.js.map +1 -1
- package/build/esm/cc/EntryControlCC.d.ts +308 -57
- package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
- package/build/esm/cc/EntryControlCC.js +0 -1
- package/build/esm/cc/EntryControlCC.js.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.d.ts +2 -0
- package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.d.ts.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.js +20 -0
- package/build/esm/cc/FirmwareUpdateMetaDataCC._validateArgs.js.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +393 -67
- package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js +159 -34
- package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.d.ts +125 -27
- package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlModeCC.js +0 -1
- package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +64 -18
- package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.d.ts +116 -39
- package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/HumidityControlSetpointCC.js +0 -4
- package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
- package/build/esm/cc/InclusionControllerCC.d.ts +4 -4
- package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
- package/build/esm/cc/InclusionControllerCC.js +0 -2
- package/build/esm/cc/InclusionControllerCC.js.map +1 -1
- package/build/esm/cc/IndicatorCC.d.ts +325 -83
- package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
- package/build/esm/cc/IndicatorCC.js +0 -7
- package/build/esm/cc/IndicatorCC.js.map +1 -1
- package/build/esm/cc/IrrigationCC.d.ts +2170 -683
- package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
- package/build/esm/cc/IrrigationCC.js +0 -9
- package/build/esm/cc/IrrigationCC.js.map +1 -1
- package/build/esm/cc/LanguageCC.d.ts +128 -26
- package/build/esm/cc/LanguageCC.d.ts.map +1 -1
- package/build/esm/cc/LanguageCC.js +0 -1
- package/build/esm/cc/LanguageCC.js.map +1 -1
- package/build/esm/cc/LockCC.d.ts +64 -14
- package/build/esm/cc/LockCC.d.ts.map +1 -1
- package/build/esm/cc/LockCC.js +0 -1
- package/build/esm/cc/LockCC.js.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts +2 -2
- package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js +0 -1
- package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.d.ts +219 -57
- package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
- package/build/esm/cc/ManufacturerSpecificCC.js +0 -2
- package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
- package/build/esm/cc/MeterCC.d.ts +364 -89
- package/build/esm/cc/MeterCC.d.ts.map +1 -1
- package/build/esm/cc/MeterCC.js +0 -4
- package/build/esm/cc/MeterCC.js.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.d.ts +138 -40
- package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelAssociationCC.js +0 -16
- package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
- package/build/esm/cc/MultiChannelCC.d.ts +469 -99
- package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
- package/build/esm/cc/MultiChannelCC.js +8 -101
- package/build/esm/cc/MultiChannelCC.js.map +1 -1
- package/build/esm/cc/MultiCommandCC.d.ts +4 -8
- package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
- package/build/esm/cc/MultiCommandCC.js +4 -38
- package/build/esm/cc/MultiCommandCC.js.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.d.ts +118 -33
- package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSensorCC.js +0 -5
- package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.d.ts +490 -125
- package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/MultilevelSwitchCC.js +0 -4
- package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
- package/build/esm/cc/NodeNamingCC.d.ts +128 -26
- package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
- package/build/esm/cc/NodeNamingCC.js +0 -2
- package/build/esm/cc/NodeNamingCC.js.map +1 -1
- package/build/esm/cc/NotificationCC.d.ts +603 -161
- package/build/esm/cc/NotificationCC.d.ts.map +1 -1
- package/build/esm/cc/NotificationCC.js +18 -12
- package/build/esm/cc/NotificationCC.js.map +1 -1
- package/build/esm/cc/PowerlevelCC.d.ts +6 -6
- package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
- package/build/esm/cc/PowerlevelCC.js +0 -4
- package/build/esm/cc/PowerlevelCC.js.map +1 -1
- package/build/esm/cc/ProtectionCC.d.ts +496 -94
- package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
- package/build/esm/cc/ProtectionCC.js +0 -3
- package/build/esm/cc/ProtectionCC.js.map +1 -1
- package/build/esm/cc/SceneActivationCC.d.ts +127 -28
- package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActivationCC.js +0 -1
- package/build/esm/cc/SceneActivationCC.js.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +52 -25
- package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneActuatorConfigurationCC.js +0 -2
- package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts +53 -25
- package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
- package/build/esm/cc/SceneControllerConfigurationCC.js +0 -2
- package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.d.ts +268 -64
- package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
- package/build/esm/cc/ScheduleEntryLockCC.js +0 -14
- package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
- package/build/esm/cc/Security2CC.d.ts +15 -21
- package/build/esm/cc/Security2CC.d.ts.map +1 -1
- package/build/esm/cc/Security2CC.js +31 -475
- package/build/esm/cc/Security2CC.js.map +1 -1
- package/build/esm/cc/SecurityCC.d.ts +12 -19
- package/build/esm/cc/SecurityCC.d.ts.map +1 -1
- package/build/esm/cc/SecurityCC.js +13 -138
- package/build/esm/cc/SecurityCC.js.map +1 -1
- package/build/esm/cc/SoundSwitchCC.d.ts +253 -64
- package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
- package/build/esm/cc/SoundSwitchCC.js +0 -7
- package/build/esm/cc/SoundSwitchCC.js.map +1 -1
- package/build/esm/cc/SupervisionCC.d.ts +28 -16
- package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
- package/build/esm/cc/SupervisionCC.js +4 -34
- package/build/esm/cc/SupervisionCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.d.ts +187 -38
- package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanModeCC.js +0 -1
- package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.d.ts +64 -18
- package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatModeCC.d.ts +189 -40
- package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatModeCC.js +0 -3
- package/build/esm/cc/ThermostatModeCC.js.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.d.ts +65 -19
- package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.d.ts +4 -4
- package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetbackCC.js +0 -2
- package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.d.ts +116 -36
- package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
- package/build/esm/cc/ThermostatSetpointCC.js +0 -6
- package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
- package/build/esm/cc/TimeCC.d.ts +6 -6
- package/build/esm/cc/TimeCC.d.ts.map +1 -1
- package/build/esm/cc/TimeCC.js +0 -4
- package/build/esm/cc/TimeCC.js.map +1 -1
- package/build/esm/cc/TimeParametersCC.d.ts +63 -12
- package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
- package/build/esm/cc/TimeParametersCC.js +0 -1
- package/build/esm/cc/TimeParametersCC.js.map +1 -1
- package/build/esm/cc/TransportServiceCC.d.ts +7 -12
- package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
- package/build/esm/cc/TransportServiceCC.js +5 -38
- package/build/esm/cc/TransportServiceCC.js.map +1 -1
- package/build/esm/cc/UserCodeCC._validateArgs.js +1 -1
- package/build/esm/cc/UserCodeCC._validateArgs.js.map +1 -1
- package/build/esm/cc/UserCodeCC.d.ts +931 -176
- package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
- package/build/esm/cc/UserCodeCC.js +0 -12
- package/build/esm/cc/UserCodeCC.js.map +1 -1
- package/build/esm/cc/VersionCC.d.ts +897 -185
- package/build/esm/cc/VersionCC.d.ts.map +1 -1
- package/build/esm/cc/VersionCC.js +0 -4
- package/build/esm/cc/VersionCC.js.map +1 -1
- package/build/esm/cc/WakeUpCC.d.ts +190 -38
- package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
- package/build/esm/cc/WakeUpCC.js +0 -1
- package/build/esm/cc/WakeUpCC.js.map +1 -1
- package/build/esm/cc/WindowCoveringCC.d.ts +193 -103
- package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
- package/build/esm/cc/WindowCoveringCC.js +0 -5
- package/build/esm/cc/WindowCoveringCC.js.map +1 -1
- package/build/esm/cc/ZWavePlusCC.d.ts +311 -51
- package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
- package/build/esm/cc/ZWavePlusCC.js +0 -1
- package/build/esm/cc/ZWavePlusCC.js.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.d.ts +28 -28
- package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
- package/build/esm/cc/ZWaveProtocolCC.js +0 -27
- package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +4 -4
- package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js +0 -3
- package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.d.ts.map +1 -1
- package/build/esm/index_browser.d.ts +9 -0
- package/build/esm/index_browser.d.ts.map +1 -1
- package/build/esm/index_browser.js +8 -1
- package/build/esm/index_browser.js.map +1 -1
- package/build/esm/lib/API.d.ts +7 -5
- package/build/esm/lib/API.d.ts.map +1 -1
- package/build/esm/lib/API.js +1 -1
- package/build/esm/lib/API.js.map +1 -1
- package/build/esm/lib/CommandClass.d.ts +10 -21
- package/build/esm/lib/CommandClass.d.ts.map +1 -1
- package/build/esm/lib/CommandClass.js +8 -101
- package/build/esm/lib/CommandClass.js.map +1 -1
- package/build/esm/lib/CommandClassDecorators.d.ts +1 -1
- package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
- package/build/esm/lib/CommandClassDecorators.js +1 -1
- package/build/esm/lib/CommandClassDecorators.js.map +1 -1
- package/build/esm/lib/Values.d.ts +2 -2
- package/build/esm/lib/Values.d.ts.map +1 -1
- package/build/esm/lib/Values.js.map +1 -1
- package/build/esm/lib/traits.d.ts +94 -0
- package/build/esm/lib/traits.d.ts.map +1 -0
- package/build/esm/lib/traits.js +2 -0
- package/build/esm/lib/traits.js.map +1 -0
- package/build/esm/lib/utils.d.ts +2 -2
- package/build/esm/lib/utils.d.ts.map +1 -1
- package/build/esm/lib/utils.js.map +1 -1
- package/package.json +13 -13
|
@@ -155,98 +155,18 @@ function assertSecurityTX(ctx, destination) {
|
|
|
155
155
|
return ret;
|
|
156
156
|
}
|
|
157
157
|
__name(assertSecurityTX, "assertSecurityTX");
|
|
158
|
-
function
|
|
159
|
-
const decryptWithNonce = /* @__PURE__ */ __name((nonce) => {
|
|
160
|
-
const { keyCCM: key } = securityManager.getKeysForNode(sendingNodeId);
|
|
161
|
-
const iv = nonce;
|
|
162
|
-
return {
|
|
163
|
-
key,
|
|
164
|
-
iv,
|
|
165
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
166
|
-
...(0, import_core.decryptAES128CCMSync)(key, iv, ciphertext, authData, authTag)
|
|
167
|
-
};
|
|
168
|
-
}, "decryptWithNonce");
|
|
169
|
-
const getNonceAndDecrypt = /* @__PURE__ */ __name(() => {
|
|
170
|
-
const iv = securityManager.nextNonce(sendingNodeId);
|
|
171
|
-
return decryptWithNonce(iv);
|
|
172
|
-
}, "getNonceAndDecrypt");
|
|
173
|
-
if (spanState.type === import_core.SPANState.SPAN) {
|
|
174
|
-
if (
|
|
175
|
-
// The previous SPAN is still known, i.e. the node didn't send another command that was successfully decrypted
|
|
176
|
-
!!spanState.currentSPAN && spanState.currentSPAN.expires > (0, import_core.highResTimestamp)() && prevSequenceNumber != void 0 && curSequenceNumber === (prevSequenceNumber + 1 & 255) && !ctx.__internalIsMockNode
|
|
177
|
-
) {
|
|
178
|
-
const nonce = spanState.currentSPAN.nonce;
|
|
179
|
-
spanState.currentSPAN = void 0;
|
|
180
|
-
const result = decryptWithNonce(nonce);
|
|
181
|
-
if (result.authOK) {
|
|
182
|
-
return {
|
|
183
|
-
...result,
|
|
184
|
-
securityClass: spanState.securityClass
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
} else {
|
|
188
|
-
spanState.currentSPAN = void 0;
|
|
189
|
-
}
|
|
190
|
-
return {
|
|
191
|
-
...getNonceAndDecrypt(),
|
|
192
|
-
securityClass: spanState.securityClass
|
|
193
|
-
};
|
|
194
|
-
} else if (spanState.type === import_core.SPANState.LocalEI) {
|
|
195
|
-
const senderEI = getSenderEI(extensions);
|
|
196
|
-
if (!senderEI)
|
|
197
|
-
failNoSPAN();
|
|
198
|
-
const receiverEI = spanState.receiverEI;
|
|
199
|
-
const isBootstrappingNode = securityManager.tempKeys.has(sendingNodeId);
|
|
200
|
-
if (isBootstrappingNode) {
|
|
201
|
-
securityManager.initializeTempSPAN(sendingNodeId, senderEI, receiverEI);
|
|
202
|
-
const ret = getNonceAndDecrypt();
|
|
203
|
-
if (ret.authOK) {
|
|
204
|
-
return {
|
|
205
|
-
...ret,
|
|
206
|
-
securityClass: import_core.SecurityClass.Temporary
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
securityManager.setSPANState(sendingNodeId, spanState);
|
|
210
|
-
}
|
|
211
|
-
const possibleSecurityClasses = isBootstrappingNode ? [ctx.getHighestSecurityClass(sendingNodeId)] : import_core.securityClassOrder.filter((s) => ctx.hasSecurityClass(sendingNodeId, s) !== false);
|
|
212
|
-
for (const secClass of possibleSecurityClasses) {
|
|
213
|
-
if (!securityManager.hasKeysForSecurityClass(secClass)) {
|
|
214
|
-
continue;
|
|
215
|
-
}
|
|
216
|
-
securityManager.initializeSPAN(sendingNodeId, secClass, senderEI, receiverEI);
|
|
217
|
-
const ret = getNonceAndDecrypt();
|
|
218
|
-
if (ret.authOK) {
|
|
219
|
-
if (ctx.hasSecurityClass(sendingNodeId, secClass) === void 0) {
|
|
220
|
-
ctx.setSecurityClass(sendingNodeId, secClass, true);
|
|
221
|
-
}
|
|
222
|
-
return {
|
|
223
|
-
...ret,
|
|
224
|
-
securityClass: secClass
|
|
225
|
-
};
|
|
226
|
-
} else {
|
|
227
|
-
securityManager.setSPANState(sendingNodeId, spanState);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
return {
|
|
232
|
-
plaintext: new Uint8Array(),
|
|
233
|
-
authOK: false,
|
|
234
|
-
securityClass: void 0
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
__name(decryptSinglecastSync, "decryptSinglecastSync");
|
|
238
|
-
async function decryptSinglecastAsync(ctx, securityManager, sendingNodeId, curSequenceNumber, prevSequenceNumber, ciphertext, authData, authTag, spanState, extensions) {
|
|
158
|
+
async function decryptSinglecast(ctx, securityManager, sendingNodeId, curSequenceNumber, prevSequenceNumber, ciphertext, authData, authTag, spanState, extensions) {
|
|
239
159
|
const decryptWithNonce = /* @__PURE__ */ __name(async (nonce) => {
|
|
240
160
|
const { keyCCM: key } = securityManager.getKeysForNode(sendingNodeId);
|
|
241
161
|
const iv = nonce;
|
|
242
162
|
return {
|
|
243
163
|
key,
|
|
244
164
|
iv,
|
|
245
|
-
...await (0, import_core.
|
|
165
|
+
...await (0, import_core.decryptAES128CCM)(ciphertext, key, iv, authData, authTag)
|
|
246
166
|
};
|
|
247
167
|
}, "decryptWithNonce");
|
|
248
168
|
const getNonceAndDecrypt = /* @__PURE__ */ __name(async () => {
|
|
249
|
-
const iv = await securityManager.
|
|
169
|
+
const iv = await securityManager.nextNonce(sendingNodeId);
|
|
250
170
|
return decryptWithNonce(iv);
|
|
251
171
|
}, "getNonceAndDecrypt");
|
|
252
172
|
if (spanState.type === import_core.SPANState.SPAN) {
|
|
@@ -277,7 +197,7 @@ async function decryptSinglecastAsync(ctx, securityManager, sendingNodeId, curSe
|
|
|
277
197
|
const receiverEI = spanState.receiverEI;
|
|
278
198
|
const isBootstrappingNode = securityManager.tempKeys.has(sendingNodeId);
|
|
279
199
|
if (isBootstrappingNode) {
|
|
280
|
-
await securityManager.
|
|
200
|
+
await securityManager.initializeTempSPAN(sendingNodeId, senderEI, receiverEI);
|
|
281
201
|
const ret = await getNonceAndDecrypt();
|
|
282
202
|
if (ret.authOK) {
|
|
283
203
|
return {
|
|
@@ -292,7 +212,7 @@ async function decryptSinglecastAsync(ctx, securityManager, sendingNodeId, curSe
|
|
|
292
212
|
if (!securityManager.hasKeysForSecurityClass(secClass)) {
|
|
293
213
|
continue;
|
|
294
214
|
}
|
|
295
|
-
await securityManager.
|
|
215
|
+
await securityManager.initializeSPAN(sendingNodeId, secClass, senderEI, receiverEI);
|
|
296
216
|
const ret = await getNonceAndDecrypt();
|
|
297
217
|
if (ret.authOK) {
|
|
298
218
|
if (ctx.hasSecurityClass(sendingNodeId, secClass) === void 0) {
|
|
@@ -313,32 +233,19 @@ async function decryptSinglecastAsync(ctx, securityManager, sendingNodeId, curSe
|
|
|
313
233
|
securityClass: void 0
|
|
314
234
|
};
|
|
315
235
|
}
|
|
316
|
-
__name(
|
|
317
|
-
function
|
|
318
|
-
const iv = securityManager.nextPeerMPAN(sendingNodeId, groupId);
|
|
236
|
+
__name(decryptSinglecast, "decryptSinglecast");
|
|
237
|
+
async function decryptMulticast(sendingNodeId, securityManager, groupId, ciphertext, authData, authTag) {
|
|
238
|
+
const iv = await securityManager.nextPeerMPAN(sendingNodeId, groupId);
|
|
319
239
|
const { keyCCM: key } = securityManager.getKeysForNode(sendingNodeId);
|
|
320
240
|
return {
|
|
321
241
|
key,
|
|
322
242
|
iv,
|
|
323
|
-
|
|
324
|
-
...(0, import_core.decryptAES128CCMSync)(key, iv, ciphertext, authData, authTag),
|
|
243
|
+
...await (0, import_core.decryptAES128CCM)(ciphertext, key, iv, authData, authTag),
|
|
325
244
|
// The security class is irrelevant when decrypting multicast commands
|
|
326
245
|
securityClass: void 0
|
|
327
246
|
};
|
|
328
247
|
}
|
|
329
|
-
__name(
|
|
330
|
-
async function decryptMulticastAsync(sendingNodeId, securityManager, groupId, ciphertext, authData, authTag) {
|
|
331
|
-
const iv = await securityManager.nextPeerMPANAsync(sendingNodeId, groupId);
|
|
332
|
-
const { keyCCM: key } = securityManager.getKeysForNode(sendingNodeId);
|
|
333
|
-
return {
|
|
334
|
-
key,
|
|
335
|
-
iv,
|
|
336
|
-
...await (0, import_core.decryptAES128CCMAsync)(ciphertext, key, iv, authData, authTag),
|
|
337
|
-
// The security class is irrelevant when decrypting multicast commands
|
|
338
|
-
securityClass: void 0
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
__name(decryptMulticastAsync, "decryptMulticastAsync");
|
|
248
|
+
__name(decryptMulticast, "decryptMulticast");
|
|
342
249
|
function parseExtensions(buffer, wasEncrypted) {
|
|
343
250
|
const extensions = [];
|
|
344
251
|
let mustDiscardCommand = false;
|
|
@@ -448,7 +355,7 @@ let Security2CCAPI = (() => {
|
|
|
448
355
|
if (!securityManager) {
|
|
449
356
|
throw new import_core.ZWaveError(`Nonces can only be sent if secure communication is set up!`, import_core.ZWaveErrorCodes.Driver_NoSecurity);
|
|
450
357
|
}
|
|
451
|
-
const receiverEI = await securityManager.
|
|
358
|
+
const receiverEI = await securityManager.generateNonce(this.endpoint.nodeId);
|
|
452
359
|
const cc = new Security2CCNonceReport({
|
|
453
360
|
nodeId: this.endpoint.nodeId,
|
|
454
361
|
endpointIndex: this.endpoint.index,
|
|
@@ -998,152 +905,7 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
998
905
|
throw new import_core.ZWaveError("Multicast Security S2 encapsulation requires the MGRP extension", import_core.ZWaveErrorCodes.Security2CC_MissingExtension);
|
|
999
906
|
}
|
|
1000
907
|
}
|
|
1001
|
-
|
|
1002
|
-
static from(raw, ctx) {
|
|
1003
|
-
const securityManager = assertSecurityRX(ctx);
|
|
1004
|
-
(0, import_core.validatePayload)(raw.payload.length >= 2);
|
|
1005
|
-
const sequenceNumber = raw.payload[0];
|
|
1006
|
-
import_core.validatePayload.withReason("No security class granted")(ctx.getHighestSecurityClass(ctx.sourceNodeId) !== import_core.SecurityClass.None);
|
|
1007
|
-
const hasExtensions = !!(raw.payload[1] & 1);
|
|
1008
|
-
const hasEncryptedExtensions = !!(raw.payload[1] & 2);
|
|
1009
|
-
let offset = 2;
|
|
1010
|
-
const extensions = [];
|
|
1011
|
-
let mustDiscardCommand = false;
|
|
1012
|
-
if (hasExtensions) {
|
|
1013
|
-
const parseResult = parseExtensions(raw.payload.subarray(offset), false);
|
|
1014
|
-
extensions.push(...parseResult.extensions);
|
|
1015
|
-
offset += parseResult.bytesRead;
|
|
1016
|
-
mustDiscardCommand = parseResult.mustDiscardCommand;
|
|
1017
|
-
}
|
|
1018
|
-
const mcctx = (() => {
|
|
1019
|
-
const multicastGroupId = getMulticastGroupId(extensions);
|
|
1020
|
-
if (ctx.frameType === "multicast" || ctx.frameType === "broadcast") {
|
|
1021
|
-
if (multicastGroupId == void 0) {
|
|
1022
|
-
import_core.validatePayload.fail("Multicast frames without MGRP extension");
|
|
1023
|
-
}
|
|
1024
|
-
return {
|
|
1025
|
-
isMulticast: true,
|
|
1026
|
-
groupId: multicastGroupId
|
|
1027
|
-
};
|
|
1028
|
-
} else {
|
|
1029
|
-
return { isMulticast: false, groupId: multicastGroupId };
|
|
1030
|
-
}
|
|
1031
|
-
})();
|
|
1032
|
-
if (mustDiscardCommand) {
|
|
1033
|
-
if (mcctx.isMulticast) {
|
|
1034
|
-
securityManager.nextPeerMPAN(ctx.sourceNodeId, mcctx.groupId);
|
|
1035
|
-
} else {
|
|
1036
|
-
securityManager.nextNonce(ctx.sourceNodeId);
|
|
1037
|
-
}
|
|
1038
|
-
import_core.validatePayload.fail("Invalid S2 extension");
|
|
1039
|
-
}
|
|
1040
|
-
let prevSequenceNumber;
|
|
1041
|
-
let mpanState;
|
|
1042
|
-
if (mcctx.isMulticast) {
|
|
1043
|
-
mpanState = securityManager.getPeerMPAN(ctx.sourceNodeId, mcctx.groupId);
|
|
1044
|
-
} else {
|
|
1045
|
-
prevSequenceNumber = validateSequenceNumber(securityManager, ctx.sourceNodeId, sequenceNumber);
|
|
1046
|
-
if (mcctx.groupId == void 0) {
|
|
1047
|
-
securityManager.resetOutOfSyncMPANs(ctx.sourceNodeId);
|
|
1048
|
-
}
|
|
1049
|
-
}
|
|
1050
|
-
const unencryptedPayload = raw.payload.subarray(0, offset);
|
|
1051
|
-
const ciphertext = raw.payload.subarray(offset, -SECURITY_S2_AUTH_TAG_LENGTH);
|
|
1052
|
-
const authTag = raw.payload.subarray(-SECURITY_S2_AUTH_TAG_LENGTH);
|
|
1053
|
-
const messageLength = 2 + raw.payload.length;
|
|
1054
|
-
const authData = getAuthenticationData(ctx.sourceNodeId, getDestinationIDRX(ctx, extensions), ctx.homeId, messageLength, unencryptedPayload);
|
|
1055
|
-
let decrypt;
|
|
1056
|
-
if (mcctx.isMulticast) {
|
|
1057
|
-
if (mpanState?.type !== import_core.MPANState.MPAN) {
|
|
1058
|
-
securityManager.storePeerMPAN(ctx.sourceNodeId, mcctx.groupId, { type: import_core.MPANState.OutOfSync });
|
|
1059
|
-
failNoMPAN();
|
|
1060
|
-
}
|
|
1061
|
-
decrypt = /* @__PURE__ */ __name(() => (
|
|
1062
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
1063
|
-
decryptMulticastSync(ctx.sourceNodeId, securityManager, mcctx.groupId, ciphertext, authData, authTag)
|
|
1064
|
-
), "decrypt");
|
|
1065
|
-
} else {
|
|
1066
|
-
const spanState = securityManager.getSPANState(ctx.sourceNodeId);
|
|
1067
|
-
if (spanState.type === import_core.SPANState.None) {
|
|
1068
|
-
failNoSPAN();
|
|
1069
|
-
} else if (spanState.type === import_core.SPANState.RemoteEI) {
|
|
1070
|
-
failNoSPAN();
|
|
1071
|
-
}
|
|
1072
|
-
decrypt = /* @__PURE__ */ __name(() => (
|
|
1073
|
-
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
1074
|
-
decryptSinglecastSync(ctx, securityManager, ctx.sourceNodeId, sequenceNumber, prevSequenceNumber, ciphertext, authData, authTag, spanState, extensions)
|
|
1075
|
-
), "decrypt");
|
|
1076
|
-
}
|
|
1077
|
-
let plaintext;
|
|
1078
|
-
let authOK = false;
|
|
1079
|
-
let key;
|
|
1080
|
-
let iv;
|
|
1081
|
-
let decryptionSecurityClass;
|
|
1082
|
-
const decryptAttempts = mcctx.isMulticast ? MAX_DECRYPT_ATTEMPTS_MULTICAST : mcctx.groupId != void 0 ? MAX_DECRYPT_ATTEMPTS_SC_FOLLOWUP : MAX_DECRYPT_ATTEMPTS_SINGLECAST;
|
|
1083
|
-
for (let i = 0; i < decryptAttempts; i++) {
|
|
1084
|
-
({
|
|
1085
|
-
plaintext,
|
|
1086
|
-
authOK,
|
|
1087
|
-
key,
|
|
1088
|
-
iv,
|
|
1089
|
-
securityClass: decryptionSecurityClass
|
|
1090
|
-
} = decrypt());
|
|
1091
|
-
if (!!authOK && !!plaintext)
|
|
1092
|
-
break;
|
|
1093
|
-
if (!!getSenderEI(extensions))
|
|
1094
|
-
break;
|
|
1095
|
-
}
|
|
1096
|
-
if (!authOK || !plaintext) {
|
|
1097
|
-
if (mcctx.isMulticast) {
|
|
1098
|
-
securityManager.storePeerMPAN(ctx.sourceNodeId, mcctx.groupId, { type: import_core.MPANState.OutOfSync });
|
|
1099
|
-
import_core.validatePayload.fail(import_core.ZWaveErrorCodes.Security2CC_CannotDecodeMulticast);
|
|
1100
|
-
} else {
|
|
1101
|
-
import_core.validatePayload.fail(import_core.ZWaveErrorCodes.Security2CC_CannotDecode);
|
|
1102
|
-
}
|
|
1103
|
-
} else if (!mcctx.isMulticast && mcctx.groupId != void 0) {
|
|
1104
|
-
securityManager.tryIncrementPeerMPAN(ctx.sourceNodeId, mcctx.groupId);
|
|
1105
|
-
}
|
|
1106
|
-
const securityClass = decryptionSecurityClass;
|
|
1107
|
-
offset = 0;
|
|
1108
|
-
if (hasEncryptedExtensions) {
|
|
1109
|
-
const parseResult = parseExtensions(plaintext, true);
|
|
1110
|
-
extensions.push(...parseResult.extensions);
|
|
1111
|
-
offset += parseResult.bytesRead;
|
|
1112
|
-
mustDiscardCommand = parseResult.mustDiscardCommand;
|
|
1113
|
-
}
|
|
1114
|
-
if (mustDiscardCommand) {
|
|
1115
|
-
import_core.validatePayload.fail("Invalid extension");
|
|
1116
|
-
}
|
|
1117
|
-
if (!mcctx.isMulticast) {
|
|
1118
|
-
const mpanExtension = extensions.find((e) => e instanceof import_Extension.MPANExtension);
|
|
1119
|
-
if (mpanExtension) {
|
|
1120
|
-
securityManager.storePeerMPAN(ctx.sourceNodeId, mpanExtension.groupId, {
|
|
1121
|
-
type: import_core.MPANState.MPAN,
|
|
1122
|
-
currentMPAN: mpanExtension.innerMPANState
|
|
1123
|
-
});
|
|
1124
|
-
}
|
|
1125
|
-
}
|
|
1126
|
-
const decryptedCCBytes = plaintext.subarray(offset);
|
|
1127
|
-
let encapsulated;
|
|
1128
|
-
if (decryptedCCBytes.length > 0) {
|
|
1129
|
-
(0, import_core.validatePayload)(decryptedCCBytes.length >= 2);
|
|
1130
|
-
encapsulated = import_CommandClass.CommandClass.parse(decryptedCCBytes, ctx);
|
|
1131
|
-
}
|
|
1132
|
-
const ret = new Security2CCMessageEncapsulation2({
|
|
1133
|
-
nodeId: ctx.sourceNodeId,
|
|
1134
|
-
sequenceNumber,
|
|
1135
|
-
securityClass,
|
|
1136
|
-
extensions,
|
|
1137
|
-
encapsulated
|
|
1138
|
-
});
|
|
1139
|
-
ret.key = key;
|
|
1140
|
-
ret.iv = iv;
|
|
1141
|
-
ret.authData = authData;
|
|
1142
|
-
ret.authTag = authTag;
|
|
1143
|
-
ret.plaintext = decryptedCCBytes;
|
|
1144
|
-
return ret;
|
|
1145
|
-
}
|
|
1146
|
-
static async fromAsync(raw, ctx) {
|
|
908
|
+
static async from(raw, ctx) {
|
|
1147
909
|
const securityManager = assertSecurityRX(ctx);
|
|
1148
910
|
(0, import_core.validatePayload)(raw.payload.length >= 2);
|
|
1149
911
|
const sequenceNumber = raw.payload[0];
|
|
@@ -1175,9 +937,9 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1175
937
|
})();
|
|
1176
938
|
if (mustDiscardCommand) {
|
|
1177
939
|
if (mcctx.isMulticast) {
|
|
1178
|
-
await securityManager.
|
|
940
|
+
await securityManager.nextPeerMPAN(ctx.sourceNodeId, mcctx.groupId);
|
|
1179
941
|
} else {
|
|
1180
|
-
await securityManager.
|
|
942
|
+
await securityManager.nextNonce(ctx.sourceNodeId);
|
|
1181
943
|
}
|
|
1182
944
|
import_core.validatePayload.fail("Invalid S2 extension");
|
|
1183
945
|
}
|
|
@@ -1202,7 +964,7 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1202
964
|
securityManager.storePeerMPAN(ctx.sourceNodeId, mcctx.groupId, { type: import_core.MPANState.OutOfSync });
|
|
1203
965
|
failNoMPAN();
|
|
1204
966
|
}
|
|
1205
|
-
decrypt = /* @__PURE__ */ __name(() =>
|
|
967
|
+
decrypt = /* @__PURE__ */ __name(() => decryptMulticast(ctx.sourceNodeId, securityManager, mcctx.groupId, ciphertext, authData, authTag), "decrypt");
|
|
1206
968
|
} else {
|
|
1207
969
|
const spanState = securityManager.getSPANState(ctx.sourceNodeId);
|
|
1208
970
|
if (spanState.type === import_core.SPANState.None) {
|
|
@@ -1210,7 +972,7 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1210
972
|
} else if (spanState.type === import_core.SPANState.RemoteEI) {
|
|
1211
973
|
failNoSPAN();
|
|
1212
974
|
}
|
|
1213
|
-
decrypt = /* @__PURE__ */ __name(() =>
|
|
975
|
+
decrypt = /* @__PURE__ */ __name(() => decryptSinglecast(ctx, securityManager, ctx.sourceNodeId, sequenceNumber, prevSequenceNumber, ciphertext, authData, authTag, spanState, extensions), "decrypt");
|
|
1214
976
|
}
|
|
1215
977
|
let plaintext;
|
|
1216
978
|
let authOK = false;
|
|
@@ -1252,12 +1014,16 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1252
1014
|
if (mustDiscardCommand) {
|
|
1253
1015
|
import_core.validatePayload.fail("Invalid extension");
|
|
1254
1016
|
}
|
|
1017
|
+
const mpanExtension = extensions.find((e) => e instanceof import_Extension.MPANExtension);
|
|
1018
|
+
if (mcctx.groupId != void 0 && mpanExtension) {
|
|
1019
|
+
import_core.validatePayload.fail("Invalid combination of extensions");
|
|
1020
|
+
}
|
|
1255
1021
|
if (!mcctx.isMulticast) {
|
|
1256
|
-
const
|
|
1257
|
-
if (
|
|
1258
|
-
securityManager.storePeerMPAN(ctx.sourceNodeId,
|
|
1022
|
+
const mpanExtension2 = extensions.find((e) => e instanceof import_Extension.MPANExtension);
|
|
1023
|
+
if (mpanExtension2) {
|
|
1024
|
+
securityManager.storePeerMPAN(ctx.sourceNodeId, mpanExtension2.groupId, {
|
|
1259
1025
|
type: import_core.MPANState.MPAN,
|
|
1260
|
-
currentMPAN:
|
|
1026
|
+
currentMPAN: mpanExtension2.innerMPANState
|
|
1261
1027
|
});
|
|
1262
1028
|
}
|
|
1263
1029
|
}
|
|
@@ -1265,7 +1031,7 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1265
1031
|
let encapsulated;
|
|
1266
1032
|
if (decryptedCCBytes.length > 0) {
|
|
1267
1033
|
(0, import_core.validatePayload)(decryptedCCBytes.length >= 2);
|
|
1268
|
-
encapsulated = await import_CommandClass.CommandClass.
|
|
1034
|
+
encapsulated = await import_CommandClass.CommandClass.parse(decryptedCCBytes, ctx);
|
|
1269
1035
|
}
|
|
1270
1036
|
const ret = new Security2CCMessageEncapsulation2({
|
|
1271
1037
|
nodeId: ctx.sourceNodeId,
|
|
@@ -1318,36 +1084,7 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1318
1084
|
getMulticastGroupId() {
|
|
1319
1085
|
return getMulticastGroupId(this.extensions);
|
|
1320
1086
|
}
|
|
1321
|
-
|
|
1322
|
-
maybeAddSPANExtensionSync(ctx, securityManager) {
|
|
1323
|
-
if (!this.isSinglecast())
|
|
1324
|
-
return;
|
|
1325
|
-
const receiverNodeId = this.nodeId;
|
|
1326
|
-
const spanState = securityManager.getSPANState(receiverNodeId);
|
|
1327
|
-
if (spanState.type === import_core.SPANState.None || spanState.type === import_core.SPANState.LocalEI) {
|
|
1328
|
-
throw new import_core.ZWaveError(`Security S2 CC requires the receiver's nonce to be sent!`, import_core.ZWaveErrorCodes.Security2CC_NoSPAN);
|
|
1329
|
-
} else if (spanState.type === import_core.SPANState.RemoteEI) {
|
|
1330
|
-
const senderEI = securityManager.generateNonce(void 0);
|
|
1331
|
-
const receiverEI = spanState.receiverEI;
|
|
1332
|
-
if (this.securityClass == void 0 && securityManager.tempKeys.has(receiverNodeId)) {
|
|
1333
|
-
securityManager.initializeTempSPAN(receiverNodeId, senderEI, receiverEI);
|
|
1334
|
-
} else {
|
|
1335
|
-
const securityClass = this.securityClass ?? ctx.getHighestSecurityClass(receiverNodeId);
|
|
1336
|
-
if (securityClass == void 0) {
|
|
1337
|
-
throw new import_core.ZWaveError("No security class defined for this command!", import_core.ZWaveErrorCodes.Security2CC_NoSPAN);
|
|
1338
|
-
}
|
|
1339
|
-
securityManager.initializeSPAN(receiverNodeId, securityClass, senderEI, receiverEI);
|
|
1340
|
-
}
|
|
1341
|
-
let spanExtension = this.extensions.find((e) => e instanceof import_Extension.SPANExtension);
|
|
1342
|
-
if (spanExtension) {
|
|
1343
|
-
spanExtension.senderEI = senderEI;
|
|
1344
|
-
} else {
|
|
1345
|
-
spanExtension = new import_Extension.SPANExtension({ senderEI });
|
|
1346
|
-
this.extensions.push(spanExtension);
|
|
1347
|
-
}
|
|
1348
|
-
}
|
|
1349
|
-
}
|
|
1350
|
-
async maybeAddSPANExtensionAsync(ctx, securityManager) {
|
|
1087
|
+
async maybeAddSPANExtension(ctx, securityManager) {
|
|
1351
1088
|
if (!this.isSinglecast())
|
|
1352
1089
|
return;
|
|
1353
1090
|
const receiverNodeId = this.nodeId;
|
|
@@ -1355,16 +1092,16 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1355
1092
|
if (spanState.type === import_core.SPANState.None || spanState.type === import_core.SPANState.LocalEI) {
|
|
1356
1093
|
throw new import_core.ZWaveError(`Security S2 CC requires the receiver's nonce to be sent!`, import_core.ZWaveErrorCodes.Security2CC_NoSPAN);
|
|
1357
1094
|
} else if (spanState.type === import_core.SPANState.RemoteEI) {
|
|
1358
|
-
const senderEI = await securityManager.
|
|
1095
|
+
const senderEI = await securityManager.generateNonce(void 0);
|
|
1359
1096
|
const receiverEI = spanState.receiverEI;
|
|
1360
1097
|
if (this.securityClass == void 0 && securityManager.tempKeys.has(receiverNodeId)) {
|
|
1361
|
-
await securityManager.
|
|
1098
|
+
await securityManager.initializeTempSPAN(receiverNodeId, senderEI, receiverEI);
|
|
1362
1099
|
} else {
|
|
1363
1100
|
const securityClass = this.securityClass ?? ctx.getHighestSecurityClass(receiverNodeId);
|
|
1364
1101
|
if (securityClass == void 0) {
|
|
1365
1102
|
throw new import_core.ZWaveError("No security class defined for this command!", import_core.ZWaveErrorCodes.Security2CC_NoSPAN);
|
|
1366
1103
|
}
|
|
1367
|
-
await securityManager.
|
|
1104
|
+
await securityManager.initializeSPAN(receiverNodeId, securityClass, senderEI, receiverEI);
|
|
1368
1105
|
}
|
|
1369
1106
|
let spanExtension = this.extensions.find((e) => e instanceof import_Extension.SPANExtension);
|
|
1370
1107
|
if (spanExtension) {
|
|
@@ -1375,11 +1112,10 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1375
1112
|
}
|
|
1376
1113
|
}
|
|
1377
1114
|
}
|
|
1378
|
-
|
|
1379
|
-
serialize(ctx) {
|
|
1115
|
+
async serialize(ctx) {
|
|
1380
1116
|
const securityManager = assertSecurityTX(ctx, this.nodeId);
|
|
1381
1117
|
this.ensureSequenceNumber(securityManager);
|
|
1382
|
-
this.
|
|
1118
|
+
await this.maybeAddSPANExtension(ctx, securityManager);
|
|
1383
1119
|
const unencryptedExtensions = this.extensions.filter((e) => !e.isEncrypted());
|
|
1384
1120
|
const encryptedExtensions = this.extensions.filter((e) => e.isEncrypted());
|
|
1385
1121
|
const unencryptedPayload = import_safe2.Bytes.concat([
|
|
@@ -1389,7 +1125,7 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1389
1125
|
]),
|
|
1390
1126
|
...unencryptedExtensions.map((e, index) => e.serialize(index < unencryptedExtensions.length - 1))
|
|
1391
1127
|
]);
|
|
1392
|
-
const serializedCC = this.encapsulated?.serialize(ctx) ?? new import_safe2.Bytes();
|
|
1128
|
+
const serializedCC = await this.encapsulated?.serialize(ctx) ?? new import_safe2.Bytes();
|
|
1393
1129
|
const plaintextPayload = import_safe2.Bytes.concat([
|
|
1394
1130
|
...encryptedExtensions.map((e, index) => e.serialize(index < encryptedExtensions.length - 1)),
|
|
1395
1131
|
serializedCC
|
|
@@ -1400,18 +1136,18 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1400
1136
|
let key;
|
|
1401
1137
|
let iv;
|
|
1402
1138
|
if (this.isSinglecast()) {
|
|
1403
|
-
iv = securityManager.nextNonce(this.nodeId, true);
|
|
1139
|
+
iv = await securityManager.nextNonce(this.nodeId, true);
|
|
1404
1140
|
const { keyCCM } = (
|
|
1405
1141
|
// Prefer the overridden security class if it was given
|
|
1406
1142
|
this.securityClass != void 0 ? securityManager.getKeysForSecurityClass(this.securityClass) : securityManager.getKeysForNode(this.nodeId)
|
|
1407
1143
|
);
|
|
1408
1144
|
key = keyCCM;
|
|
1409
1145
|
} else {
|
|
1410
|
-
const keyAndIV = securityManager.getMulticastKeyAndIV(destinationTag);
|
|
1146
|
+
const keyAndIV = await securityManager.getMulticastKeyAndIV(destinationTag);
|
|
1411
1147
|
key = keyAndIV.key;
|
|
1412
1148
|
iv = keyAndIV.iv;
|
|
1413
1149
|
}
|
|
1414
|
-
const { ciphertext: ciphertextPayload, authTag } = (0, import_core.
|
|
1150
|
+
const { ciphertext: ciphertextPayload, authTag } = await (0, import_core.encryptAES128CCM)(plaintextPayload, key, iv, authData, SECURITY_S2_AUTH_TAG_LENGTH);
|
|
1415
1151
|
this.key = key;
|
|
1416
1152
|
this.iv = iv;
|
|
1417
1153
|
this.authData = authData;
|
|
@@ -1424,54 +1160,6 @@ let Security2CCMessageEncapsulation = (() => {
|
|
|
1424
1160
|
]);
|
|
1425
1161
|
return super.serialize(ctx);
|
|
1426
1162
|
}
|
|
1427
|
-
async serializeAsync(ctx) {
|
|
1428
|
-
const securityManager = assertSecurityTX(ctx, this.nodeId);
|
|
1429
|
-
this.ensureSequenceNumber(securityManager);
|
|
1430
|
-
await this.maybeAddSPANExtensionAsync(ctx, securityManager);
|
|
1431
|
-
const unencryptedExtensions = this.extensions.filter((e) => !e.isEncrypted());
|
|
1432
|
-
const encryptedExtensions = this.extensions.filter((e) => e.isEncrypted());
|
|
1433
|
-
const unencryptedPayload = import_safe2.Bytes.concat([
|
|
1434
|
-
import_safe2.Bytes.from([
|
|
1435
|
-
this.sequenceNumber,
|
|
1436
|
-
(encryptedExtensions.length > 0 ? 2 : 0) | (unencryptedExtensions.length > 0 ? 1 : 0)
|
|
1437
|
-
]),
|
|
1438
|
-
...unencryptedExtensions.map((e, index) => e.serialize(index < unencryptedExtensions.length - 1))
|
|
1439
|
-
]);
|
|
1440
|
-
const serializedCC = await this.encapsulated?.serializeAsync(ctx) ?? new import_safe2.Bytes();
|
|
1441
|
-
const plaintextPayload = import_safe2.Bytes.concat([
|
|
1442
|
-
...encryptedExtensions.map((e, index) => e.serialize(index < encryptedExtensions.length - 1)),
|
|
1443
|
-
serializedCC
|
|
1444
|
-
]);
|
|
1445
|
-
const destinationTag = getDestinationIDTX.call(this);
|
|
1446
|
-
const messageLength = this.computeEncapsulationOverhead() + serializedCC.length;
|
|
1447
|
-
const authData = getAuthenticationData(ctx.ownNodeId, destinationTag, ctx.homeId, messageLength, unencryptedPayload);
|
|
1448
|
-
let key;
|
|
1449
|
-
let iv;
|
|
1450
|
-
if (this.isSinglecast()) {
|
|
1451
|
-
iv = await securityManager.nextNonceAsync(this.nodeId, true);
|
|
1452
|
-
const { keyCCM } = (
|
|
1453
|
-
// Prefer the overridden security class if it was given
|
|
1454
|
-
this.securityClass != void 0 ? securityManager.getKeysForSecurityClass(this.securityClass) : securityManager.getKeysForNode(this.nodeId)
|
|
1455
|
-
);
|
|
1456
|
-
key = keyCCM;
|
|
1457
|
-
} else {
|
|
1458
|
-
const keyAndIV = await securityManager.getMulticastKeyAndIVAsync(destinationTag);
|
|
1459
|
-
key = keyAndIV.key;
|
|
1460
|
-
iv = keyAndIV.iv;
|
|
1461
|
-
}
|
|
1462
|
-
const { ciphertext: ciphertextPayload, authTag } = await (0, import_core.encryptAES128CCMAsync)(plaintextPayload, key, iv, authData, SECURITY_S2_AUTH_TAG_LENGTH);
|
|
1463
|
-
this.key = key;
|
|
1464
|
-
this.iv = iv;
|
|
1465
|
-
this.authData = authData;
|
|
1466
|
-
this.authTag = authTag;
|
|
1467
|
-
this.ciphertext = ciphertextPayload;
|
|
1468
|
-
this.payload = import_safe2.Bytes.concat([
|
|
1469
|
-
unencryptedPayload,
|
|
1470
|
-
ciphertextPayload,
|
|
1471
|
-
authTag
|
|
1472
|
-
]);
|
|
1473
|
-
return super.serializeAsync(ctx);
|
|
1474
|
-
}
|
|
1475
1163
|
computeEncapsulationOverhead() {
|
|
1476
1164
|
const extensionBytes = this.extensions.map((e) => e.computeLength()).reduce((a, b) => a + b, 0);
|
|
1477
1165
|
return super.computeEncapsulationOverhead() + 2 + SECURITY_S2_AUTH_TAG_LENGTH + extensionBytes;
|