@matter/node 0.17.4 → 0.17.5-alpha.0-20260702-a2cd6f764
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/dist/cjs/behavior/context/ActionContext.d.ts +1 -1
- package/dist/cjs/behavior/state/validation/FabricIndexSentinel.d.ts +3 -2
- package/dist/cjs/behavior/state/validation/FabricIndexSentinel.d.ts.map +1 -1
- package/dist/cjs/behavior/state/validation/FabricIndexSentinel.js.map +1 -1
- package/dist/cjs/behavior/supervision/ValueSupervisor.d.ts +3 -2
- package/dist/cjs/behavior/supervision/ValueSupervisor.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.js +13 -9
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.js.map +1 -1
- package/dist/cjs/behavior/system/software-update/SoftwareUpdateManager.js +1 -1
- package/dist/cjs/behavior/system/software-update/SoftwareUpdateManager.js.map +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.d.ts +40 -2
- package/dist/cjs/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.js +102 -5
- package/dist/cjs/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.d.ts +29 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.d.ts.map +1 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.js +34 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.js.map +6 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingClient.d.ts +17 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingClient.d.ts.map +1 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingClient.js +34 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingClient.js.map +6 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingServer.d.ts +17 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingServer.d.ts.map +1 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingServer.js +32 -0
- package/dist/cjs/behaviors/ambient-context-sensing/AmbientContextSensingServer.js.map +6 -0
- package/dist/cjs/behaviors/ambient-context-sensing/index.d.ts +10 -0
- package/dist/cjs/behaviors/ambient-context-sensing/index.d.ts.map +1 -0
- package/dist/cjs/behaviors/ambient-context-sensing/index.js +26 -0
- package/dist/cjs/behaviors/ambient-context-sensing/index.js.map +6 -0
- package/dist/cjs/behaviors/basic-information/BasicInformationServer.d.ts +24 -0
- package/dist/cjs/behaviors/basic-information/BasicInformationServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/basic-information/BasicInformationServer.js +44 -0
- package/dist/cjs/behaviors/basic-information/BasicInformationServer.js.map +1 -1
- package/dist/cjs/behaviors/boolean-state/BooleanStateBehavior.d.ts +3 -0
- package/dist/cjs/behaviors/boolean-state/BooleanStateBehavior.d.ts.map +1 -1
- package/dist/cjs/behaviors/boolean-state/BooleanStateBehavior.js.map +1 -1
- package/dist/cjs/behaviors/boolean-state/BooleanStateServer.d.ts +7 -3
- package/dist/cjs/behaviors/boolean-state/BooleanStateServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/boolean-state/BooleanStateServer.js +6 -2
- package/dist/cjs/behaviors/boolean-state/BooleanStateServer.js.map +1 -1
- package/dist/cjs/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.d.ts +23 -0
- package/dist/cjs/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.js +36 -0
- package/dist/cjs/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.js.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -1
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.js +1 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts +15 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +52 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementBehavior.d.ts +3 -0
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementBehavior.d.ts.map +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementBehavior.js.map +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.d.ts +22 -3
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js +80 -7
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
- package/dist/cjs/behaviors/groupcast/GroupcastBehavior.d.ts +28 -0
- package/dist/cjs/behaviors/groupcast/GroupcastBehavior.d.ts.map +1 -0
- package/dist/cjs/behaviors/groupcast/GroupcastBehavior.js +34 -0
- package/dist/cjs/behaviors/groupcast/GroupcastBehavior.js.map +6 -0
- package/dist/cjs/behaviors/groupcast/GroupcastClient.d.ts +17 -0
- package/dist/cjs/behaviors/groupcast/GroupcastClient.d.ts.map +1 -0
- package/dist/cjs/behaviors/groupcast/GroupcastClient.js +34 -0
- package/dist/cjs/behaviors/groupcast/GroupcastClient.js.map +6 -0
- package/dist/cjs/behaviors/groupcast/GroupcastInterface.d.ts +34 -0
- package/dist/cjs/behaviors/groupcast/GroupcastInterface.d.ts.map +1 -0
- package/dist/cjs/behaviors/groupcast/GroupcastInterface.js +22 -0
- package/dist/cjs/behaviors/groupcast/GroupcastInterface.js.map +6 -0
- package/dist/cjs/behaviors/groupcast/GroupcastServer.d.ts +58 -0
- package/dist/cjs/behaviors/groupcast/GroupcastServer.d.ts.map +1 -0
- package/dist/cjs/behaviors/groupcast/GroupcastServer.js +510 -0
- package/dist/cjs/behaviors/groupcast/GroupcastServer.js.map +6 -0
- package/dist/cjs/behaviors/groupcast/index.d.ts +10 -0
- package/dist/cjs/behaviors/groupcast/index.d.ts.map +1 -0
- package/dist/cjs/behaviors/groupcast/index.js +26 -0
- package/dist/cjs/behaviors/groupcast/index.js.map +6 -0
- package/dist/cjs/behaviors/groups/GroupsServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/groups/GroupsServer.js +22 -0
- package/dist/cjs/behaviors/groups/GroupsServer.js.map +1 -1
- package/dist/cjs/behaviors/index.d.ts +3 -0
- package/dist/cjs/behaviors/index.d.ts.map +1 -1
- package/dist/cjs/behaviors/index.js +3 -0
- package/dist/cjs/behaviors/index.js.map +1 -1
- package/dist/cjs/behaviors/level-control/LevelControlServer.d.ts +1 -1
- package/dist/cjs/behaviors/level-control/LevelControlServer.js +1 -1
- package/dist/cjs/behaviors/occupancy-sensing/OccupancySensingServer.d.ts +2 -0
- package/dist/cjs/behaviors/occupancy-sensing/OccupancySensingServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/occupancy-sensing/OccupancySensingServer.js +10 -0
- package/dist/cjs/behaviors/occupancy-sensing/OccupancySensingServer.js.map +1 -1
- package/dist/cjs/behaviors/operational-credentials/VendorIdVerification.d.ts +2 -2
- package/dist/cjs/behaviors/ota-software-update-provider/OtaSoftwareUpdateProviderServer.js +1 -1
- package/dist/cjs/behaviors/ota-software-update-provider/OtaSoftwareUpdateProviderServer.js.map +1 -1
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmBehavior.d.ts +29 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmBehavior.d.ts.map +1 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmBehavior.js +34 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmBehavior.js.map +6 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmClient.d.ts +17 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmClient.d.ts.map +1 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmClient.js +34 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmClient.js.map +6 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmServer.d.ts +16 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmServer.d.ts.map +1 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmServer.js +32 -0
- package/dist/cjs/behaviors/temperature-alarm/TemperatureAlarmServer.js.map +6 -0
- package/dist/cjs/behaviors/temperature-alarm/index.d.ts +10 -0
- package/dist/cjs/behaviors/temperature-alarm/index.d.ts.map +1 -0
- package/dist/cjs/behaviors/temperature-alarm/index.js +26 -0
- package/dist/cjs/behaviors/temperature-alarm/index.js.map +6 -0
- package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts +2 -0
- package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.d.ts +63 -1
- package/dist/cjs/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.js +134 -0
- package/dist/cjs/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.js.map +2 -2
- package/dist/cjs/devices/air-purifier.d.ts +1 -1
- package/dist/cjs/devices/air-quality-sensor.d.ts +1 -1
- package/dist/cjs/devices/audio-doorbell.d.ts +1 -1
- package/dist/cjs/devices/basic-video-player.d.ts +1 -1
- package/dist/cjs/devices/battery-storage.d.ts +1 -1
- package/dist/cjs/devices/camera-controller.d.ts +1 -1
- package/dist/cjs/devices/camera.d.ts +1 -1
- package/dist/cjs/devices/casting-video-client.d.ts +1 -1
- package/dist/cjs/devices/casting-video-player.d.ts +1 -1
- package/dist/cjs/devices/chime.d.ts +1 -1
- package/dist/cjs/devices/closure-controller.d.ts +1 -8
- package/dist/cjs/devices/closure-controller.d.ts.map +1 -1
- package/dist/cjs/devices/closure-controller.js +1 -3
- package/dist/cjs/devices/closure-controller.js.map +2 -2
- package/dist/cjs/devices/closure-panel.d.ts +1 -1
- package/dist/cjs/devices/closure.d.ts +1 -1
- package/dist/cjs/devices/color-dimmer-switch.d.ts +1 -1
- package/dist/cjs/devices/color-temperature-light.d.ts +1 -1
- package/dist/cjs/devices/contact-sensor.d.ts +1 -1
- package/dist/cjs/devices/content-app.d.ts +1 -1
- package/dist/cjs/devices/control-bridge.d.ts +1 -1
- package/dist/cjs/devices/cook-surface.d.ts +1 -1
- package/dist/cjs/devices/cooktop.d.ts +1 -1
- package/dist/cjs/devices/dimmable-light.d.ts +1 -1
- package/dist/cjs/devices/dimmable-plug-in-unit.d.ts +1 -1
- package/dist/cjs/devices/dimmer-switch.d.ts +1 -1
- package/dist/cjs/devices/dishwasher.d.ts +1 -1
- package/dist/cjs/devices/door-lock-controller.d.ts +1 -1
- package/dist/cjs/devices/door-lock.d.ts +1 -1
- package/dist/cjs/devices/doorbell.d.ts +1 -1
- package/dist/cjs/devices/electrical-energy-tariff.d.ts +1 -1
- package/dist/cjs/devices/electrical-meter.d.ts +1 -1
- package/dist/cjs/devices/electrical-utility-meter.d.ts +1 -1
- package/dist/cjs/devices/energy-evse.d.ts +1 -1
- package/dist/cjs/devices/extended-color-light.d.ts +1 -1
- package/dist/cjs/devices/extractor-hood.d.ts +1 -1
- package/dist/cjs/devices/fan.d.ts +1 -1
- package/dist/cjs/devices/floodlight-camera.d.ts +1 -1
- package/dist/cjs/devices/flow-sensor.d.ts +1 -1
- package/dist/cjs/devices/generic-switch.d.ts +1 -1
- package/dist/cjs/devices/heat-pump.d.ts +1 -1
- package/dist/cjs/devices/humidity-sensor.d.ts +1 -1
- package/dist/cjs/devices/intercom.d.ts +1 -1
- package/dist/cjs/devices/irrigation-system.d.ts +1 -1
- package/dist/cjs/devices/laundry-dryer.d.ts +1 -1
- package/dist/cjs/devices/laundry-washer.d.ts +1 -1
- package/dist/cjs/devices/light-sensor.d.ts +1 -1
- package/dist/cjs/devices/meter-reference-point.d.ts +1 -1
- package/dist/cjs/devices/microwave-oven.d.ts +1 -1
- package/dist/cjs/devices/mode-select.d.ts +1 -1
- package/dist/cjs/devices/mounted-dimmable-load-control.d.ts +1 -1
- package/dist/cjs/devices/mounted-on-off-control.d.ts +1 -1
- package/dist/cjs/devices/network-infrastructure-manager.d.ts +2 -2
- package/dist/cjs/devices/occupancy-sensor.d.ts +1 -1
- package/dist/cjs/devices/on-off-light-switch.d.ts +1 -1
- package/dist/cjs/devices/on-off-light.d.ts +1 -1
- package/dist/cjs/devices/on-off-plug-in-unit.d.ts +1 -1
- package/dist/cjs/devices/on-off-sensor.d.ts +1 -1
- package/dist/cjs/devices/oven.d.ts +1 -1
- package/dist/cjs/devices/pressure-sensor.d.ts +1 -1
- package/dist/cjs/devices/pump-controller.d.ts +1 -1
- package/dist/cjs/devices/pump.d.ts +1 -1
- package/dist/cjs/devices/rain-sensor.d.ts +14 -6
- package/dist/cjs/devices/rain-sensor.d.ts.map +1 -1
- package/dist/cjs/devices/rain-sensor.js +1 -1
- package/dist/cjs/devices/refrigerator.d.ts +11 -2
- package/dist/cjs/devices/refrigerator.d.ts.map +1 -1
- package/dist/cjs/devices/refrigerator.js +5 -2
- package/dist/cjs/devices/refrigerator.js.map +2 -2
- package/dist/cjs/devices/robotic-vacuum-cleaner.d.ts +1 -1
- package/dist/cjs/devices/room-air-conditioner.d.ts +1 -1
- package/dist/cjs/devices/smoke-co-alarm.d.ts +1 -1
- package/dist/cjs/devices/snapshot-camera.d.ts +1 -1
- package/dist/cjs/devices/soil-sensor.d.ts +1 -1
- package/dist/cjs/devices/solar-power.d.ts +1 -1
- package/dist/cjs/devices/speaker.d.ts +1 -1
- package/dist/cjs/devices/temperature-controlled-cabinet.d.ts +10 -2
- package/dist/cjs/devices/temperature-controlled-cabinet.d.ts.map +1 -1
- package/dist/cjs/devices/temperature-controlled-cabinet.js +5 -2
- package/dist/cjs/devices/temperature-controlled-cabinet.js.map +2 -2
- package/dist/cjs/devices/temperature-sensor.d.ts +1 -1
- package/dist/cjs/devices/thermostat-controller.d.ts +1 -1
- package/dist/cjs/devices/thermostat.d.ts +9 -2
- package/dist/cjs/devices/thermostat.d.ts.map +1 -1
- package/dist/cjs/devices/thermostat.js +5 -2
- package/dist/cjs/devices/thermostat.js.map +2 -2
- package/dist/cjs/devices/thread-border-router.d.ts +1 -1
- package/dist/cjs/devices/video-doorbell.d.ts +1 -1
- package/dist/cjs/devices/video-remote-control.d.ts +1 -1
- package/dist/cjs/devices/water-freeze-detector.d.ts +14 -6
- package/dist/cjs/devices/water-freeze-detector.d.ts.map +1 -1
- package/dist/cjs/devices/water-freeze-detector.js +1 -1
- package/dist/cjs/devices/water-heater.d.ts +5 -1
- package/dist/cjs/devices/water-heater.d.ts.map +1 -1
- package/dist/cjs/devices/water-leak-detector.d.ts +14 -6
- package/dist/cjs/devices/water-leak-detector.d.ts.map +1 -1
- package/dist/cjs/devices/water-leak-detector.js +1 -1
- package/dist/cjs/devices/water-valve.d.ts +1 -1
- package/dist/cjs/devices/window-covering-controller.d.ts +1 -1
- package/dist/cjs/devices/window-covering.d.ts +1 -1
- package/dist/cjs/endpoint/properties/EndpointLifecycle.d.ts +5 -0
- package/dist/cjs/endpoint/properties/EndpointLifecycle.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/EndpointLifecycle.js +8 -0
- package/dist/cjs/endpoint/properties/EndpointLifecycle.js.map +1 -1
- package/dist/cjs/endpoints/aggregator.d.ts +1 -1
- package/dist/cjs/endpoints/bridged-node.d.ts +1 -1
- package/dist/cjs/endpoints/device-energy-management.d.ts +1 -1
- package/dist/cjs/endpoints/electrical-sensor.d.ts +1 -1
- package/dist/cjs/endpoints/joint-fabric-administrator.d.ts +1 -1
- package/dist/cjs/endpoints/ota-provider.d.ts +1 -1
- package/dist/cjs/endpoints/ota-requestor.d.ts +1 -1
- package/dist/cjs/endpoints/power-source.d.ts +1 -1
- package/dist/cjs/endpoints/root.d.ts +1 -1
- package/dist/cjs/endpoints/secondary-network-interface.d.ts +1 -1
- package/dist/cjs/node/ServerNode.d.ts +1 -1
- package/dist/cjs/node/ServerNode.js +1 -1
- package/dist/cjs/node/client/Peers.d.ts.map +1 -1
- package/dist/cjs/node/client/Peers.js +12 -0
- package/dist/cjs/node/client/Peers.js.map +1 -1
- package/dist/cjs/node/integration/ProtocolService.js +1 -1
- package/dist/cjs/node/paths/AttributePath.d.ts +3 -3
- package/dist/cjs/node/paths/BasePath.d.ts +4 -4
- package/dist/cjs/node/paths/CommandPath.d.ts +1 -1
- package/dist/cjs/node/paths/EventPath.d.ts +1 -1
- package/dist/cjs/node/server/InteractionServer.d.ts +7 -0
- package/dist/cjs/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/cjs/node/server/InteractionServer.js +83 -5
- package/dist/cjs/node/server/InteractionServer.js.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.d.ts +1 -0
- package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/tags/ClosureCabinetTag.d.ts +1 -1
- package/dist/cjs/tags/ClosureCoveringTag.d.ts +1 -1
- package/dist/cjs/tags/ClosurePanelTag.d.ts +1 -1
- package/dist/cjs/tags/ClosureTag.d.ts +1 -1
- package/dist/cjs/tags/ClosureWindowTag.d.ts +1 -1
- package/dist/cjs/tags/CommodityTariffChronologyTag.d.ts +1 -1
- package/dist/cjs/tags/CommodityTariffCommodityTag.d.ts +1 -1
- package/dist/cjs/tags/CommodityTariffFlowTag.d.ts +1 -1
- package/dist/cjs/tags/CommonAreaNamespaceTag.d.ts +1 -1
- package/dist/cjs/tags/CommonClosureTag.d.ts +1 -1
- package/dist/cjs/tags/CommonCompassDirectionTag.d.ts +1 -1
- package/dist/cjs/tags/CommonCompassLocationTag.d.ts +1 -1
- package/dist/cjs/tags/CommonDirectionTag.d.ts +1 -1
- package/dist/cjs/tags/CommonLandmarkNamespaceTag.d.ts +1 -1
- package/dist/cjs/tags/CommonLevelTag.d.ts +1 -1
- package/dist/cjs/tags/CommonLocationTag.d.ts +1 -1
- package/dist/cjs/tags/CommonNumberTag.d.ts +1 -1
- package/dist/cjs/tags/CommonPositionTag.d.ts +1 -1
- package/dist/cjs/tags/CommonRelativePositionTag.d.ts +1 -1
- package/dist/cjs/tags/ElectricalMeasurementTag.d.ts +1 -1
- package/dist/cjs/tags/IdentifiedHumanActivityTag.d.ts +89 -0
- package/dist/cjs/tags/IdentifiedHumanActivityTag.d.ts.map +1 -0
- package/dist/cjs/tags/IdentifiedHumanActivityTag.js +75 -0
- package/dist/cjs/tags/IdentifiedHumanActivityTag.js.map +6 -0
- package/dist/cjs/tags/IdentifiedObjectTag.d.ts +123 -0
- package/dist/cjs/tags/IdentifiedObjectTag.d.ts.map +1 -0
- package/dist/cjs/tags/IdentifiedObjectTag.js +87 -0
- package/dist/cjs/tags/IdentifiedObjectTag.js.map +6 -0
- package/dist/cjs/tags/IdentifiedSoundTag.d.ts +176 -0
- package/dist/cjs/tags/IdentifiedSoundTag.d.ts.map +1 -0
- package/dist/cjs/tags/IdentifiedSoundTag.js +123 -0
- package/dist/cjs/tags/IdentifiedSoundTag.js.map +6 -0
- package/dist/cjs/tags/LaundryTag.d.ts +1 -1
- package/dist/cjs/tags/PowerSourceTag.d.ts +5 -5
- package/dist/cjs/tags/PowerSourceTag.js +4 -4
- package/dist/cjs/tags/RefrigeratorTag.d.ts +1 -1
- package/dist/cjs/tags/RoomAirConditionerTag.d.ts +1 -1
- package/dist/cjs/tags/SwitchesTag.d.ts +2 -2
- package/dist/cjs/tags/SwitchesTag.js +1 -1
- package/dist/cjs/tags/index.d.ts +3 -0
- package/dist/cjs/tags/index.d.ts.map +1 -1
- package/dist/cjs/tags/index.js +3 -0
- package/dist/cjs/tags/index.js.map +1 -1
- package/dist/esm/behavior/context/ActionContext.d.ts +1 -1
- package/dist/esm/behavior/state/validation/FabricIndexSentinel.d.ts +3 -2
- package/dist/esm/behavior/state/validation/FabricIndexSentinel.d.ts.map +1 -1
- package/dist/esm/behavior/state/validation/FabricIndexSentinel.js.map +1 -1
- package/dist/esm/behavior/supervision/ValueSupervisor.d.ts +3 -2
- package/dist/esm/behavior/supervision/ValueSupervisor.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/ServerGroupNetworking.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/ServerGroupNetworking.js +13 -9
- package/dist/esm/behavior/system/network/ServerGroupNetworking.js.map +1 -1
- package/dist/esm/behavior/system/software-update/SoftwareUpdateManager.js +1 -1
- package/dist/esm/behavior/system/software-update/SoftwareUpdateManager.js.map +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.d.ts +40 -2
- package/dist/esm/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.js +110 -6
- package/dist/esm/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.d.ts +29 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.d.ts.map +1 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.js +14 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.js.map +6 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingClient.d.ts +17 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingClient.d.ts.map +1 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingClient.js +14 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingClient.js.map +6 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingServer.d.ts +17 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingServer.d.ts.map +1 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingServer.js +12 -0
- package/dist/esm/behaviors/ambient-context-sensing/AmbientContextSensingServer.js.map +6 -0
- package/dist/esm/behaviors/ambient-context-sensing/index.d.ts +10 -0
- package/dist/esm/behaviors/ambient-context-sensing/index.d.ts.map +1 -0
- package/dist/esm/behaviors/ambient-context-sensing/index.js +9 -0
- package/dist/esm/behaviors/ambient-context-sensing/index.js.map +6 -0
- package/dist/esm/behaviors/basic-information/BasicInformationServer.d.ts +24 -0
- package/dist/esm/behaviors/basic-information/BasicInformationServer.d.ts.map +1 -1
- package/dist/esm/behaviors/basic-information/BasicInformationServer.js +44 -0
- package/dist/esm/behaviors/basic-information/BasicInformationServer.js.map +1 -1
- package/dist/esm/behaviors/boolean-state/BooleanStateBehavior.d.ts +3 -0
- package/dist/esm/behaviors/boolean-state/BooleanStateBehavior.d.ts.map +1 -1
- package/dist/esm/behaviors/boolean-state/BooleanStateBehavior.js.map +1 -1
- package/dist/esm/behaviors/boolean-state/BooleanStateServer.d.ts +7 -3
- package/dist/esm/behaviors/boolean-state/BooleanStateServer.d.ts.map +1 -1
- package/dist/esm/behaviors/boolean-state/BooleanStateServer.js +6 -2
- package/dist/esm/behaviors/boolean-state/BooleanStateServer.js.map +1 -1
- package/dist/esm/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.d.ts +23 -0
- package/dist/esm/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.d.ts.map +1 -1
- package/dist/esm/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.js +36 -0
- package/dist/esm/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.js.map +1 -1
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -1
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.js +1 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts +15 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +57 -4
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementBehavior.d.ts +3 -0
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementBehavior.d.ts.map +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementBehavior.js.map +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.d.ts +22 -3
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js +80 -7
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
- package/dist/esm/behaviors/groupcast/GroupcastBehavior.d.ts +28 -0
- package/dist/esm/behaviors/groupcast/GroupcastBehavior.d.ts.map +1 -0
- package/dist/esm/behaviors/groupcast/GroupcastBehavior.js +14 -0
- package/dist/esm/behaviors/groupcast/GroupcastBehavior.js.map +6 -0
- package/dist/esm/behaviors/groupcast/GroupcastClient.d.ts +17 -0
- package/dist/esm/behaviors/groupcast/GroupcastClient.d.ts.map +1 -0
- package/dist/esm/behaviors/groupcast/GroupcastClient.js +14 -0
- package/dist/esm/behaviors/groupcast/GroupcastClient.js.map +6 -0
- package/dist/esm/behaviors/groupcast/GroupcastInterface.d.ts +34 -0
- package/dist/esm/behaviors/groupcast/GroupcastInterface.d.ts.map +1 -0
- package/dist/esm/behaviors/groupcast/GroupcastInterface.js +6 -0
- package/dist/esm/behaviors/groupcast/GroupcastInterface.js.map +6 -0
- package/dist/esm/behaviors/groupcast/GroupcastServer.d.ts +58 -0
- package/dist/esm/behaviors/groupcast/GroupcastServer.d.ts.map +1 -0
- package/dist/esm/behaviors/groupcast/GroupcastServer.js +495 -0
- package/dist/esm/behaviors/groupcast/GroupcastServer.js.map +6 -0
- package/dist/esm/behaviors/groupcast/index.d.ts +10 -0
- package/dist/esm/behaviors/groupcast/index.d.ts.map +1 -0
- package/dist/esm/behaviors/groupcast/index.js +9 -0
- package/dist/esm/behaviors/groupcast/index.js.map +6 -0
- package/dist/esm/behaviors/groups/GroupsServer.d.ts.map +1 -1
- package/dist/esm/behaviors/groups/GroupsServer.js +22 -0
- package/dist/esm/behaviors/groups/GroupsServer.js.map +1 -1
- package/dist/esm/behaviors/index.d.ts +3 -0
- package/dist/esm/behaviors/index.d.ts.map +1 -1
- package/dist/esm/behaviors/index.js +3 -0
- package/dist/esm/behaviors/index.js.map +1 -1
- package/dist/esm/behaviors/level-control/LevelControlServer.d.ts +1 -1
- package/dist/esm/behaviors/level-control/LevelControlServer.js +1 -1
- package/dist/esm/behaviors/occupancy-sensing/OccupancySensingServer.d.ts +2 -0
- package/dist/esm/behaviors/occupancy-sensing/OccupancySensingServer.d.ts.map +1 -1
- package/dist/esm/behaviors/occupancy-sensing/OccupancySensingServer.js +10 -0
- package/dist/esm/behaviors/occupancy-sensing/OccupancySensingServer.js.map +1 -1
- package/dist/esm/behaviors/operational-credentials/VendorIdVerification.d.ts +2 -2
- package/dist/esm/behaviors/ota-software-update-provider/OtaSoftwareUpdateProviderServer.js +1 -1
- package/dist/esm/behaviors/ota-software-update-provider/OtaSoftwareUpdateProviderServer.js.map +1 -1
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmBehavior.d.ts +29 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmBehavior.d.ts.map +1 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmBehavior.js +14 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmBehavior.js.map +6 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmClient.d.ts +17 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmClient.d.ts.map +1 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmClient.js +14 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmClient.js.map +6 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmServer.d.ts +16 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmServer.d.ts.map +1 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmServer.js +12 -0
- package/dist/esm/behaviors/temperature-alarm/TemperatureAlarmServer.js.map +6 -0
- package/dist/esm/behaviors/temperature-alarm/index.d.ts +10 -0
- package/dist/esm/behaviors/temperature-alarm/index.d.ts.map +1 -0
- package/dist/esm/behaviors/temperature-alarm/index.js +9 -0
- package/dist/esm/behaviors/temperature-alarm/index.js.map +6 -0
- package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts +2 -0
- package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
- package/dist/esm/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.d.ts +63 -1
- package/dist/esm/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.d.ts.map +1 -1
- package/dist/esm/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.js +134 -0
- package/dist/esm/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.js.map +2 -2
- package/dist/esm/devices/air-purifier.d.ts +1 -1
- package/dist/esm/devices/air-quality-sensor.d.ts +1 -1
- package/dist/esm/devices/audio-doorbell.d.ts +1 -1
- package/dist/esm/devices/basic-video-player.d.ts +1 -1
- package/dist/esm/devices/battery-storage.d.ts +1 -1
- package/dist/esm/devices/camera-controller.d.ts +1 -1
- package/dist/esm/devices/camera.d.ts +1 -1
- package/dist/esm/devices/casting-video-client.d.ts +1 -1
- package/dist/esm/devices/casting-video-player.d.ts +1 -1
- package/dist/esm/devices/chime.d.ts +1 -1
- package/dist/esm/devices/closure-controller.d.ts +1 -8
- package/dist/esm/devices/closure-controller.d.ts.map +1 -1
- package/dist/esm/devices/closure-controller.js +1 -3
- package/dist/esm/devices/closure-controller.js.map +1 -1
- package/dist/esm/devices/closure-panel.d.ts +1 -1
- package/dist/esm/devices/closure.d.ts +1 -1
- package/dist/esm/devices/color-dimmer-switch.d.ts +1 -1
- package/dist/esm/devices/color-temperature-light.d.ts +1 -1
- package/dist/esm/devices/contact-sensor.d.ts +1 -1
- package/dist/esm/devices/content-app.d.ts +1 -1
- package/dist/esm/devices/control-bridge.d.ts +1 -1
- package/dist/esm/devices/cook-surface.d.ts +1 -1
- package/dist/esm/devices/cooktop.d.ts +1 -1
- package/dist/esm/devices/dimmable-light.d.ts +1 -1
- package/dist/esm/devices/dimmable-plug-in-unit.d.ts +1 -1
- package/dist/esm/devices/dimmer-switch.d.ts +1 -1
- package/dist/esm/devices/dishwasher.d.ts +1 -1
- package/dist/esm/devices/door-lock-controller.d.ts +1 -1
- package/dist/esm/devices/door-lock.d.ts +1 -1
- package/dist/esm/devices/doorbell.d.ts +1 -1
- package/dist/esm/devices/electrical-energy-tariff.d.ts +1 -1
- package/dist/esm/devices/electrical-meter.d.ts +1 -1
- package/dist/esm/devices/electrical-utility-meter.d.ts +1 -1
- package/dist/esm/devices/energy-evse.d.ts +1 -1
- package/dist/esm/devices/extended-color-light.d.ts +1 -1
- package/dist/esm/devices/extractor-hood.d.ts +1 -1
- package/dist/esm/devices/fan.d.ts +1 -1
- package/dist/esm/devices/floodlight-camera.d.ts +1 -1
- package/dist/esm/devices/flow-sensor.d.ts +1 -1
- package/dist/esm/devices/generic-switch.d.ts +1 -1
- package/dist/esm/devices/heat-pump.d.ts +1 -1
- package/dist/esm/devices/humidity-sensor.d.ts +1 -1
- package/dist/esm/devices/intercom.d.ts +1 -1
- package/dist/esm/devices/irrigation-system.d.ts +1 -1
- package/dist/esm/devices/laundry-dryer.d.ts +1 -1
- package/dist/esm/devices/laundry-washer.d.ts +1 -1
- package/dist/esm/devices/light-sensor.d.ts +1 -1
- package/dist/esm/devices/meter-reference-point.d.ts +1 -1
- package/dist/esm/devices/microwave-oven.d.ts +1 -1
- package/dist/esm/devices/mode-select.d.ts +1 -1
- package/dist/esm/devices/mounted-dimmable-load-control.d.ts +1 -1
- package/dist/esm/devices/mounted-on-off-control.d.ts +1 -1
- package/dist/esm/devices/network-infrastructure-manager.d.ts +2 -2
- package/dist/esm/devices/occupancy-sensor.d.ts +1 -1
- package/dist/esm/devices/on-off-light-switch.d.ts +1 -1
- package/dist/esm/devices/on-off-light.d.ts +1 -1
- package/dist/esm/devices/on-off-plug-in-unit.d.ts +1 -1
- package/dist/esm/devices/on-off-sensor.d.ts +1 -1
- package/dist/esm/devices/oven.d.ts +1 -1
- package/dist/esm/devices/pressure-sensor.d.ts +1 -1
- package/dist/esm/devices/pump-controller.d.ts +1 -1
- package/dist/esm/devices/pump.d.ts +1 -1
- package/dist/esm/devices/rain-sensor.d.ts +14 -6
- package/dist/esm/devices/rain-sensor.d.ts.map +1 -1
- package/dist/esm/devices/rain-sensor.js +1 -1
- package/dist/esm/devices/refrigerator.d.ts +11 -2
- package/dist/esm/devices/refrigerator.d.ts.map +1 -1
- package/dist/esm/devices/refrigerator.js +7 -2
- package/dist/esm/devices/refrigerator.js.map +1 -1
- package/dist/esm/devices/robotic-vacuum-cleaner.d.ts +1 -1
- package/dist/esm/devices/room-air-conditioner.d.ts +1 -1
- package/dist/esm/devices/smoke-co-alarm.d.ts +1 -1
- package/dist/esm/devices/snapshot-camera.d.ts +1 -1
- package/dist/esm/devices/soil-sensor.d.ts +1 -1
- package/dist/esm/devices/solar-power.d.ts +1 -1
- package/dist/esm/devices/speaker.d.ts +1 -1
- package/dist/esm/devices/temperature-controlled-cabinet.d.ts +10 -2
- package/dist/esm/devices/temperature-controlled-cabinet.d.ts.map +1 -1
- package/dist/esm/devices/temperature-controlled-cabinet.js +7 -2
- package/dist/esm/devices/temperature-controlled-cabinet.js.map +1 -1
- package/dist/esm/devices/temperature-sensor.d.ts +1 -1
- package/dist/esm/devices/thermostat-controller.d.ts +1 -1
- package/dist/esm/devices/thermostat.d.ts +9 -2
- package/dist/esm/devices/thermostat.d.ts.map +1 -1
- package/dist/esm/devices/thermostat.js +7 -2
- package/dist/esm/devices/thermostat.js.map +1 -1
- package/dist/esm/devices/thread-border-router.d.ts +1 -1
- package/dist/esm/devices/video-doorbell.d.ts +1 -1
- package/dist/esm/devices/video-remote-control.d.ts +1 -1
- package/dist/esm/devices/water-freeze-detector.d.ts +14 -6
- package/dist/esm/devices/water-freeze-detector.d.ts.map +1 -1
- package/dist/esm/devices/water-freeze-detector.js +1 -1
- package/dist/esm/devices/water-heater.d.ts +5 -1
- package/dist/esm/devices/water-heater.d.ts.map +1 -1
- package/dist/esm/devices/water-leak-detector.d.ts +14 -6
- package/dist/esm/devices/water-leak-detector.d.ts.map +1 -1
- package/dist/esm/devices/water-leak-detector.js +1 -1
- package/dist/esm/devices/water-valve.d.ts +1 -1
- package/dist/esm/devices/window-covering-controller.d.ts +1 -1
- package/dist/esm/devices/window-covering.d.ts +1 -1
- package/dist/esm/endpoint/properties/EndpointLifecycle.d.ts +5 -0
- package/dist/esm/endpoint/properties/EndpointLifecycle.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/EndpointLifecycle.js +8 -0
- package/dist/esm/endpoint/properties/EndpointLifecycle.js.map +1 -1
- package/dist/esm/endpoints/aggregator.d.ts +1 -1
- package/dist/esm/endpoints/bridged-node.d.ts +1 -1
- package/dist/esm/endpoints/device-energy-management.d.ts +1 -1
- package/dist/esm/endpoints/electrical-sensor.d.ts +1 -1
- package/dist/esm/endpoints/joint-fabric-administrator.d.ts +1 -1
- package/dist/esm/endpoints/ota-provider.d.ts +1 -1
- package/dist/esm/endpoints/ota-requestor.d.ts +1 -1
- package/dist/esm/endpoints/power-source.d.ts +1 -1
- package/dist/esm/endpoints/root.d.ts +1 -1
- package/dist/esm/endpoints/secondary-network-interface.d.ts +1 -1
- package/dist/esm/node/ServerNode.d.ts +1 -1
- package/dist/esm/node/ServerNode.js +1 -1
- package/dist/esm/node/client/Peers.d.ts.map +1 -1
- package/dist/esm/node/client/Peers.js +12 -0
- package/dist/esm/node/client/Peers.js.map +1 -1
- package/dist/esm/node/integration/ProtocolService.js +1 -1
- package/dist/esm/node/paths/AttributePath.d.ts +3 -3
- package/dist/esm/node/paths/BasePath.d.ts +4 -4
- package/dist/esm/node/paths/CommandPath.d.ts +1 -1
- package/dist/esm/node/paths/EventPath.d.ts +1 -1
- package/dist/esm/node/server/InteractionServer.d.ts +7 -0
- package/dist/esm/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/esm/node/server/InteractionServer.js +84 -5
- package/dist/esm/node/server/InteractionServer.js.map +1 -1
- package/dist/esm/node/server/ServerSubscription.d.ts +1 -0
- package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/tags/ClosureCabinetTag.d.ts +1 -1
- package/dist/esm/tags/ClosureCoveringTag.d.ts +1 -1
- package/dist/esm/tags/ClosurePanelTag.d.ts +1 -1
- package/dist/esm/tags/ClosureTag.d.ts +1 -1
- package/dist/esm/tags/ClosureWindowTag.d.ts +1 -1
- package/dist/esm/tags/CommodityTariffChronologyTag.d.ts +1 -1
- package/dist/esm/tags/CommodityTariffCommodityTag.d.ts +1 -1
- package/dist/esm/tags/CommodityTariffFlowTag.d.ts +1 -1
- package/dist/esm/tags/CommonAreaNamespaceTag.d.ts +1 -1
- package/dist/esm/tags/CommonClosureTag.d.ts +1 -1
- package/dist/esm/tags/CommonCompassDirectionTag.d.ts +1 -1
- package/dist/esm/tags/CommonCompassLocationTag.d.ts +1 -1
- package/dist/esm/tags/CommonDirectionTag.d.ts +1 -1
- package/dist/esm/tags/CommonLandmarkNamespaceTag.d.ts +1 -1
- package/dist/esm/tags/CommonLevelTag.d.ts +1 -1
- package/dist/esm/tags/CommonLocationTag.d.ts +1 -1
- package/dist/esm/tags/CommonNumberTag.d.ts +1 -1
- package/dist/esm/tags/CommonPositionTag.d.ts +1 -1
- package/dist/esm/tags/CommonRelativePositionTag.d.ts +1 -1
- package/dist/esm/tags/ElectricalMeasurementTag.d.ts +1 -1
- package/dist/esm/tags/IdentifiedHumanActivityTag.d.ts +89 -0
- package/dist/esm/tags/IdentifiedHumanActivityTag.d.ts.map +1 -0
- package/dist/esm/tags/IdentifiedHumanActivityTag.js +55 -0
- package/dist/esm/tags/IdentifiedHumanActivityTag.js.map +6 -0
- package/dist/esm/tags/IdentifiedObjectTag.d.ts +123 -0
- package/dist/esm/tags/IdentifiedObjectTag.d.ts.map +1 -0
- package/dist/esm/tags/IdentifiedObjectTag.js +67 -0
- package/dist/esm/tags/IdentifiedObjectTag.js.map +6 -0
- package/dist/esm/tags/IdentifiedSoundTag.d.ts +176 -0
- package/dist/esm/tags/IdentifiedSoundTag.d.ts.map +1 -0
- package/dist/esm/tags/IdentifiedSoundTag.js +103 -0
- package/dist/esm/tags/IdentifiedSoundTag.js.map +6 -0
- package/dist/esm/tags/LaundryTag.d.ts +1 -1
- package/dist/esm/tags/PowerSourceTag.d.ts +5 -5
- package/dist/esm/tags/PowerSourceTag.js +4 -4
- package/dist/esm/tags/RefrigeratorTag.d.ts +1 -1
- package/dist/esm/tags/RoomAirConditionerTag.d.ts +1 -1
- package/dist/esm/tags/SwitchesTag.d.ts +2 -2
- package/dist/esm/tags/SwitchesTag.js +1 -1
- package/dist/esm/tags/index.d.ts +3 -0
- package/dist/esm/tags/index.d.ts.map +1 -1
- package/dist/esm/tags/index.js +3 -0
- package/dist/esm/tags/index.js.map +1 -1
- package/package.json +6 -6
- package/src/behavior/context/ActionContext.ts +1 -1
- package/src/behavior/state/validation/FabricIndexSentinel.ts +3 -2
- package/src/behavior/supervision/ValueSupervisor.ts +3 -2
- package/src/behavior/system/network/ServerGroupNetworking.ts +18 -9
- package/src/behavior/system/software-update/SoftwareUpdateManager.ts +1 -1
- package/src/behaviors/access-control/AccessControlServer.ts +153 -7
- package/src/behaviors/ambient-context-sensing/AmbientContextSensingBehavior.ts +27 -0
- package/src/behaviors/ambient-context-sensing/AmbientContextSensingClient.ts +16 -0
- package/src/behaviors/ambient-context-sensing/AmbientContextSensingServer.ts +18 -0
- package/src/behaviors/ambient-context-sensing/index.ts +11 -0
- package/src/behaviors/basic-information/BasicInformationServer.ts +62 -1
- package/src/behaviors/boolean-state/BooleanStateBehavior.ts +3 -0
- package/src/behaviors/boolean-state/BooleanStateServer.ts +10 -3
- package/src/behaviors/bridged-device-basic-information/BridgedDeviceBasicInformationServer.ts +55 -1
- package/src/behaviors/general-commissioning/ServerNodeFailsafeContext.ts +1 -1
- package/src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts +61 -3
- package/src/behaviors/group-key-management/GroupKeyManagementBehavior.ts +3 -0
- package/src/behaviors/group-key-management/GroupKeyManagementServer.ts +98 -8
- package/src/behaviors/groupcast/GroupcastBehavior.ts +24 -0
- package/src/behaviors/groupcast/GroupcastClient.ts +16 -0
- package/src/behaviors/groupcast/GroupcastInterface.ts +30 -0
- package/src/behaviors/groupcast/GroupcastServer.ts +665 -0
- package/src/behaviors/groupcast/index.ts +11 -0
- package/src/behaviors/groups/GroupsServer.ts +28 -1
- package/src/behaviors/index.ts +3 -0
- package/src/behaviors/level-control/LevelControlServer.ts +1 -1
- package/src/behaviors/occupancy-sensing/OccupancySensingServer.ts +14 -2
- package/src/behaviors/operational-credentials/VendorIdVerification.ts +2 -2
- package/src/behaviors/ota-software-update-provider/OtaSoftwareUpdateProviderServer.ts +1 -1
- package/src/behaviors/scenes-management/ScenesManagementServer.ts +1 -1
- package/src/behaviors/temperature-alarm/TemperatureAlarmBehavior.ts +27 -0
- package/src/behaviors/temperature-alarm/TemperatureAlarmClient.ts +16 -0
- package/src/behaviors/temperature-alarm/TemperatureAlarmServer.ts +17 -0
- package/src/behaviors/temperature-alarm/index.ts +11 -0
- package/src/behaviors/web-rtc-transport-requestor/WebRtcTransportRequestorServer.ts +183 -3
- package/src/devices/air-purifier.ts +1 -1
- package/src/devices/air-quality-sensor.ts +1 -1
- package/src/devices/audio-doorbell.ts +1 -1
- package/src/devices/basic-video-player.ts +1 -1
- package/src/devices/battery-storage.ts +1 -1
- package/src/devices/camera-controller.ts +1 -1
- package/src/devices/camera.ts +1 -1
- package/src/devices/casting-video-client.ts +1 -1
- package/src/devices/casting-video-player.ts +1 -1
- package/src/devices/chime.ts +1 -1
- package/src/devices/closure-controller.ts +2 -10
- package/src/devices/closure-panel.ts +1 -1
- package/src/devices/closure.ts +1 -1
- package/src/devices/color-dimmer-switch.ts +1 -1
- package/src/devices/color-temperature-light.ts +1 -1
- package/src/devices/contact-sensor.ts +1 -1
- package/src/devices/content-app.ts +1 -1
- package/src/devices/control-bridge.ts +1 -1
- package/src/devices/cook-surface.ts +1 -1
- package/src/devices/cooktop.ts +1 -1
- package/src/devices/dimmable-light.ts +1 -1
- package/src/devices/dimmable-plug-in-unit.ts +1 -1
- package/src/devices/dimmer-switch.ts +1 -1
- package/src/devices/dishwasher.ts +1 -1
- package/src/devices/door-lock-controller.ts +1 -1
- package/src/devices/door-lock.ts +1 -1
- package/src/devices/doorbell.ts +1 -1
- package/src/devices/electrical-energy-tariff.ts +1 -1
- package/src/devices/electrical-meter.ts +1 -1
- package/src/devices/electrical-utility-meter.ts +1 -1
- package/src/devices/energy-evse.ts +1 -1
- package/src/devices/extended-color-light.ts +1 -1
- package/src/devices/extractor-hood.ts +1 -1
- package/src/devices/fan.ts +1 -1
- package/src/devices/floodlight-camera.ts +1 -1
- package/src/devices/flow-sensor.ts +1 -1
- package/src/devices/generic-switch.ts +1 -1
- package/src/devices/heat-pump.ts +1 -1
- package/src/devices/humidity-sensor.ts +1 -1
- package/src/devices/intercom.ts +1 -1
- package/src/devices/irrigation-system.ts +1 -1
- package/src/devices/laundry-dryer.ts +1 -1
- package/src/devices/laundry-washer.ts +1 -1
- package/src/devices/light-sensor.ts +1 -1
- package/src/devices/meter-reference-point.ts +1 -1
- package/src/devices/microwave-oven.ts +1 -1
- package/src/devices/mode-select.ts +1 -1
- package/src/devices/mounted-dimmable-load-control.ts +1 -1
- package/src/devices/mounted-on-off-control.ts +1 -1
- package/src/devices/network-infrastructure-manager.ts +2 -2
- package/src/devices/occupancy-sensor.ts +1 -1
- package/src/devices/on-off-light-switch.ts +1 -1
- package/src/devices/on-off-light.ts +1 -1
- package/src/devices/on-off-plug-in-unit.ts +1 -1
- package/src/devices/on-off-sensor.ts +1 -1
- package/src/devices/oven.ts +1 -1
- package/src/devices/pressure-sensor.ts +1 -1
- package/src/devices/pump-controller.ts +1 -1
- package/src/devices/pump.ts +1 -1
- package/src/devices/rain-sensor.ts +2 -2
- package/src/devices/refrigerator.ts +16 -3
- package/src/devices/robotic-vacuum-cleaner.ts +1 -1
- package/src/devices/room-air-conditioner.ts +1 -1
- package/src/devices/smoke-co-alarm.ts +1 -1
- package/src/devices/snapshot-camera.ts +1 -1
- package/src/devices/soil-sensor.ts +1 -1
- package/src/devices/solar-power.ts +1 -1
- package/src/devices/speaker.ts +1 -1
- package/src/devices/temperature-controlled-cabinet.ts +14 -3
- package/src/devices/temperature-sensor.ts +1 -1
- package/src/devices/thermostat-controller.ts +1 -1
- package/src/devices/thermostat.ts +14 -3
- package/src/devices/thread-border-router.ts +1 -1
- package/src/devices/video-doorbell.ts +1 -1
- package/src/devices/video-remote-control.ts +1 -1
- package/src/devices/water-freeze-detector.ts +2 -2
- package/src/devices/water-heater.ts +1 -1
- package/src/devices/water-leak-detector.ts +2 -2
- package/src/devices/water-valve.ts +1 -1
- package/src/devices/window-covering-controller.ts +1 -1
- package/src/devices/window-covering.ts +1 -1
- package/src/endpoint/properties/EndpointLifecycle.ts +9 -0
- package/src/endpoints/aggregator.ts +1 -1
- package/src/endpoints/bridged-node.ts +1 -1
- package/src/endpoints/device-energy-management.ts +1 -1
- package/src/endpoints/electrical-sensor.ts +1 -1
- package/src/endpoints/joint-fabric-administrator.ts +1 -1
- package/src/endpoints/ota-provider.ts +1 -1
- package/src/endpoints/ota-requestor.ts +1 -1
- package/src/endpoints/power-source.ts +1 -1
- package/src/endpoints/root.ts +1 -1
- package/src/endpoints/secondary-network-interface.ts +1 -1
- package/src/node/ServerNode.ts +1 -1
- package/src/node/client/Peers.ts +15 -0
- package/src/node/integration/ProtocolService.ts +1 -1
- package/src/node/paths/AttributePath.ts +3 -3
- package/src/node/paths/BasePath.ts +4 -4
- package/src/node/paths/CommandPath.ts +1 -1
- package/src/node/paths/EventPath.ts +1 -1
- package/src/node/server/InteractionServer.ts +113 -6
- package/src/tags/ClosureCabinetTag.ts +1 -1
- package/src/tags/ClosureCoveringTag.ts +1 -1
- package/src/tags/ClosurePanelTag.ts +1 -1
- package/src/tags/ClosureTag.ts +1 -1
- package/src/tags/ClosureWindowTag.ts +1 -1
- package/src/tags/CommodityTariffChronologyTag.ts +1 -1
- package/src/tags/CommodityTariffCommodityTag.ts +1 -1
- package/src/tags/CommodityTariffFlowTag.ts +1 -1
- package/src/tags/CommonAreaNamespaceTag.ts +1 -1
- package/src/tags/CommonClosureTag.ts +1 -1
- package/src/tags/CommonCompassDirectionTag.ts +1 -1
- package/src/tags/CommonCompassLocationTag.ts +1 -1
- package/src/tags/CommonDirectionTag.ts +1 -1
- package/src/tags/CommonLandmarkNamespaceTag.ts +1 -1
- package/src/tags/CommonLevelTag.ts +1 -1
- package/src/tags/CommonLocationTag.ts +1 -1
- package/src/tags/CommonNumberTag.ts +1 -1
- package/src/tags/CommonPositionTag.ts +1 -1
- package/src/tags/CommonRelativePositionTag.ts +1 -1
- package/src/tags/ElectricalMeasurementTag.ts +1 -1
- package/src/tags/IdentifiedHumanActivityTag.ts +71 -0
- package/src/tags/IdentifiedObjectTag.ts +99 -0
- package/src/tags/IdentifiedSoundTag.ts +134 -0
- package/src/tags/LaundryTag.ts +1 -1
- package/src/tags/PowerSourceTag.ts +5 -5
- package/src/tags/RefrigeratorTag.ts +1 -1
- package/src/tags/RoomAirConditionerTag.ts +1 -1
- package/src/tags/SwitchesTag.ts +2 -2
- package/src/tags/index.ts +3 -0
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { AccessControlServer } from "#behaviors/access-control";
|
|
8
|
+
import { GroupKeyManagementServer } from "#behaviors/group-key-management";
|
|
9
|
+
import { NodeLifecycle } from "#node/NodeLifecycle.js";
|
|
10
|
+
import { Bytes, deepCopy, ImplementationError, Logger, ObservableValue, Seconds, Time, Timer } from "@matter/general";
|
|
11
|
+
import { AccessLevel, DataModelPath } from "@matter/model";
|
|
12
|
+
import {
|
|
13
|
+
AccessControl,
|
|
14
|
+
assertRemoteActor,
|
|
15
|
+
Fabric,
|
|
16
|
+
FabricManager,
|
|
17
|
+
GroupMessageEventInfo,
|
|
18
|
+
SessionManager,
|
|
19
|
+
} from "@matter/protocol";
|
|
20
|
+
import { EndpointNumber, FabricIndex, GroupId, NodeId, Status, StatusResponseError } from "@matter/types";
|
|
21
|
+
import { AccessControl as AccessControlTypes } from "@matter/types/clusters/access-control";
|
|
22
|
+
import { Groupcast } from "@matter/types/clusters/groupcast";
|
|
23
|
+
import { GroupcastBehavior } from "./GroupcastBehavior.js";
|
|
24
|
+
|
|
25
|
+
const logger = Logger.get("GroupcastServer");
|
|
26
|
+
|
|
27
|
+
/** Membership.KeySetId sentinel indicating the referenced key set no longer exists in GKM. */
|
|
28
|
+
const UNMAPPED_KEYSET_ID = 0xffff;
|
|
29
|
+
|
|
30
|
+
/** TODO: remove once the Groupcast cluster leaves provisional state in the Matter specification. */
|
|
31
|
+
const GROUPCAST_IS_PROVISIONAL = true;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This is the default server implementation of {@link GroupcastBehavior}.
|
|
35
|
+
*
|
|
36
|
+
* The Groupcast cluster is node-scoped and must be placed on the root endpoint.
|
|
37
|
+
* Use {@link GroupcastServer.with} to enable the desired features (e.g. "Listener", "Sender").
|
|
38
|
+
*
|
|
39
|
+
* Key behaviors:
|
|
40
|
+
* - Manages per-fabric group membership (persistent).
|
|
41
|
+
* - Drives {@link FabricGroups} with group-to-key-set mappings and multicast address policy.
|
|
42
|
+
* - Registers an {@link AccessControlServer.AuxAclObservable} to supply synthetic ACL entries for groups
|
|
43
|
+
* with `hasAuxiliaryAcl=true`. AccessControlServer calls back to collect entries when needed.
|
|
44
|
+
* - On first use by a fabric, marks the fabric as "GroupcastAdopted" in GKM, making GroupKeyMap read-only.
|
|
45
|
+
* - Migrates legacy group data from the Groups cluster on startup.
|
|
46
|
+
*/
|
|
47
|
+
export class GroupcastServer extends GroupcastBehavior {
|
|
48
|
+
declare internal: GroupcastServer.Internal;
|
|
49
|
+
|
|
50
|
+
/** Timer for GroupcastTesting auto-disable. */
|
|
51
|
+
#testingTimer?: Timer;
|
|
52
|
+
|
|
53
|
+
override initialize() {
|
|
54
|
+
// TODO: remove this guard once the Groupcast cluster leaves provisional state in the Matter specification
|
|
55
|
+
if (GROUPCAST_IS_PROVISIONAL) {
|
|
56
|
+
throw new ImplementationError(
|
|
57
|
+
"The Groupcast cluster is provisional in Matter 1.6. Do not add it to a node.",
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const lifecycle = this.endpoint.lifecycle as NodeLifecycle;
|
|
62
|
+
this.reactTo(lifecycle.online, this.#online);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async #online() {
|
|
66
|
+
// Register the aux ACL observable with AccessControlServer so it can subscribe for updates
|
|
67
|
+
this.agent.get(AccessControlServer).registerAuxAclProvider(this.internal.auxAcl);
|
|
68
|
+
|
|
69
|
+
const fabrics = this.env.get(FabricManager);
|
|
70
|
+
|
|
71
|
+
// Sync FabricGroups for all existing fabrics
|
|
72
|
+
for (const fabric of fabrics) {
|
|
73
|
+
this.#syncFabricGroups(fabric);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Migrate legacy Groups cluster data to Groupcast Membership
|
|
77
|
+
await this.#migrate();
|
|
78
|
+
|
|
79
|
+
// Reconcile key sets that may have been removed via GKM somehow
|
|
80
|
+
this.#reconcileUnmappedKeys();
|
|
81
|
+
|
|
82
|
+
// Update the derived state once after all sync/migration is done
|
|
83
|
+
this.#updateUsedMcastAddrCount();
|
|
84
|
+
this.#emitAuxAcl();
|
|
85
|
+
|
|
86
|
+
// Keep in sync as fabrics are added or removed
|
|
87
|
+
this.reactTo(fabrics.events.added, this.#handleFabricAdded);
|
|
88
|
+
this.reactTo(fabrics.events.deleted, this.#handleFabricDeleted);
|
|
89
|
+
|
|
90
|
+
// When GKM key sets are removed, groupKeyMap is also cleaned up — use that as trigger
|
|
91
|
+
// to reconcile membership entries whose key set no longer exists (mark as UNMAPPED_KEYSET_ID)
|
|
92
|
+
const gkmEvents = this.endpoint.eventsOf(GroupKeyManagementServer);
|
|
93
|
+
this.reactTo(gkmEvents.groupKeyMap$Changed, this.#reconcileUnmappedKeys);
|
|
94
|
+
|
|
95
|
+
// React to fabricUnderTest changes to dynamically subscribe/unsubscribe from group message events.
|
|
96
|
+
// While no fabric is under test, SessionManager.groupMessage emits are a no-op (no listeners).
|
|
97
|
+
this.reactTo(this.events.fabricUnderTest$Changed, this.#handleFabricUnderTestChanged);
|
|
98
|
+
if (this.state.fabricUnderTest !== FabricIndex.NO_FABRIC) {
|
|
99
|
+
this.#attachGroupMessageListener();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Check whether the current session has Admin privileges for this cluster/endpoint.
|
|
105
|
+
* Key and useAuxiliaryACL fields in Manage-access commands require Admin
|
|
106
|
+
* privilege to prevent privilege escalation.
|
|
107
|
+
*/
|
|
108
|
+
#requireAdmin() {
|
|
109
|
+
// Called only from handlers that already asserted remote actor, safe to narrow
|
|
110
|
+
const session = this.context as AccessControl.RemoteActorSession;
|
|
111
|
+
const location: AccessControl.Location = {
|
|
112
|
+
path: DataModelPath.none,
|
|
113
|
+
endpoint: this.endpoint.number,
|
|
114
|
+
cluster: GroupcastBehavior.cluster.id,
|
|
115
|
+
owningFabric: session.fabric,
|
|
116
|
+
};
|
|
117
|
+
if (session.authorityAt(AccessLevel.Administer, location) !== AccessControl.Authority.Granted) {
|
|
118
|
+
throw new StatusResponseError(
|
|
119
|
+
"Admin privilege required for key or ACL operations",
|
|
120
|
+
Status.UnsupportedAccess,
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
override async joinGroup(request: Groupcast.JoinGroupRequest) {
|
|
126
|
+
assertRemoteActor(this.context);
|
|
127
|
+
const fabricIndex = this.context.session.associatedFabric.fabricIndex;
|
|
128
|
+
const { groupId, endpoints, keySetId, key, useAuxiliaryAcl, replaceEndpoints, mcastAddrPolicy } = request;
|
|
129
|
+
|
|
130
|
+
// Validate groupId range
|
|
131
|
+
if (groupId < 1 || groupId > 0xfff7) {
|
|
132
|
+
throw new StatusResponseError("Invalid group ID", Status.ConstraintError);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Privilege escalation prevention: key and useAuxiliaryACL require Admin
|
|
136
|
+
if (key !== undefined || useAuxiliaryAcl !== undefined) {
|
|
137
|
+
this.#requireAdmin();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Validate endpoints: ep 0 (root) and ep > 0xFFFE are invalid per spec
|
|
141
|
+
for (const ep of endpoints) {
|
|
142
|
+
if (ep === 0 || ep > 0xfffe) {
|
|
143
|
+
throw new StatusResponseError(`Endpoint ${ep} is invalid`, Status.UnsupportedEndpoint);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// If LN-only (no SD feature), an empty endpoint list is not allowed
|
|
148
|
+
if (!this.features.sender && endpoints.length === 0) {
|
|
149
|
+
throw new StatusResponseError("Empty endpoint list requires Sender feature", Status.ConstraintError);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Validate multicast address policy: PerGroup requires PerGroupAddr feature
|
|
153
|
+
const policy = mcastAddrPolicy ?? Groupcast.MulticastAddrPolicy.IanaAddr;
|
|
154
|
+
if (policy === Groupcast.MulticastAddrPolicy.PerGroup && !this.features.perGroup) {
|
|
155
|
+
throw new StatusResponseError(
|
|
156
|
+
"PerGroup multicast policy requires PerGroupAddr feature",
|
|
157
|
+
Status.ConstraintError,
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
await this.#applyKeySet(fabricIndex, keySetId, key);
|
|
162
|
+
|
|
163
|
+
const membership = deepCopy(this.state.membership);
|
|
164
|
+
const existingIdx = membership.findIndex(m => m.groupId === groupId && m.fabricIndex === fabricIndex);
|
|
165
|
+
|
|
166
|
+
if (existingIdx >= 0) {
|
|
167
|
+
// Update existing group membership
|
|
168
|
+
const existing = membership[existingIdx];
|
|
169
|
+
const lnFields = this.features.listener
|
|
170
|
+
? {
|
|
171
|
+
endpoints: replaceEndpoints
|
|
172
|
+
? endpoints
|
|
173
|
+
: [...new Set([...(existing.endpoints ?? []), ...endpoints])],
|
|
174
|
+
hasAuxiliaryAcl: useAuxiliaryAcl ?? existing.hasAuxiliaryAcl,
|
|
175
|
+
}
|
|
176
|
+
: {};
|
|
177
|
+
membership[existingIdx] = {
|
|
178
|
+
...existing,
|
|
179
|
+
...lnFields,
|
|
180
|
+
keySetId,
|
|
181
|
+
mcastAddrPolicy: policy,
|
|
182
|
+
};
|
|
183
|
+
} else {
|
|
184
|
+
// New group: check capacity limits
|
|
185
|
+
const fabricMemberships = membership.filter(m => m.fabricIndex === fabricIndex);
|
|
186
|
+
const perFabricLimit = Math.floor(this.state.maxMembershipCount / 2);
|
|
187
|
+
if (fabricMemberships.length >= perFabricLimit) {
|
|
188
|
+
throw new StatusResponseError("Per-fabric membership limit reached", Status.ResourceExhausted);
|
|
189
|
+
}
|
|
190
|
+
if (membership.length >= this.state.maxMembershipCount) {
|
|
191
|
+
throw new StatusResponseError("Total membership limit reached", Status.ResourceExhausted);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Check MaxMcastAddrCount for new multicast address allocation
|
|
195
|
+
if (policy === Groupcast.MulticastAddrPolicy.PerGroup) {
|
|
196
|
+
const currentUsed = this.#computeUsedMcastAddrCount(membership);
|
|
197
|
+
if (currentUsed >= this.state.maxMcastAddrCount) {
|
|
198
|
+
throw new StatusResponseError("MaxMcastAddrCount limit reached", Status.ResourceExhausted);
|
|
199
|
+
}
|
|
200
|
+
} else if (policy === Groupcast.MulticastAddrPolicy.IanaAddr) {
|
|
201
|
+
// IanaAddr pool counts as 1 address; only check if pool not yet allocated
|
|
202
|
+
const hasIanaAddr = membership.some(m => m.mcastAddrPolicy === Groupcast.MulticastAddrPolicy.IanaAddr);
|
|
203
|
+
if (!hasIanaAddr) {
|
|
204
|
+
const currentUsed = this.#computeUsedMcastAddrCount(membership);
|
|
205
|
+
if (currentUsed >= this.state.maxMcastAddrCount) {
|
|
206
|
+
throw new StatusResponseError("MaxMcastAddrCount limit reached", Status.ResourceExhausted);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const lnFields = this.features.listener ? { endpoints, hasAuxiliaryAcl: useAuxiliaryAcl ?? false } : {};
|
|
212
|
+
membership.push({
|
|
213
|
+
groupId,
|
|
214
|
+
...lnFields,
|
|
215
|
+
keySetId,
|
|
216
|
+
mcastAddrPolicy: policy,
|
|
217
|
+
fabricIndex,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
this.state.membership = membership;
|
|
222
|
+
this.#updateUsedMcastAddrCount();
|
|
223
|
+
this.#syncFabricGroups(this.env.get(FabricManager).for(fabricIndex));
|
|
224
|
+
this.#emitAuxAcl();
|
|
225
|
+
|
|
226
|
+
/* Provisional in Matter 1.6.0:
|
|
227
|
+
const gkm = this.agent.get(GroupKeyManagementServer);
|
|
228
|
+
gkm.setGroupcastAdopted(fabricIndex, true);
|
|
229
|
+
*/
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
override leaveGroup(request: Groupcast.LeaveGroupRequest): Groupcast.LeaveGroupResponse {
|
|
233
|
+
assertRemoteActor(this.context);
|
|
234
|
+
const fabricIndex = this.context.session.associatedFabric.fabricIndex;
|
|
235
|
+
const { groupId, endpoints: requestedEndpoints } = request;
|
|
236
|
+
|
|
237
|
+
// GroupID 0 = wildcard: leave ALL groups for this fabric
|
|
238
|
+
if (groupId === GroupId.NO_GROUP_ID) {
|
|
239
|
+
const fabricMemberships = this.state.membership.filter(m => m.fabricIndex === fabricIndex);
|
|
240
|
+
if (fabricMemberships.length === 0) {
|
|
241
|
+
throw new StatusResponseError("No groups to leave", Status.NotFound);
|
|
242
|
+
}
|
|
243
|
+
this.state.membership = this.state.membership.filter(m => m.fabricIndex !== fabricIndex);
|
|
244
|
+
this.#updateUsedMcastAddrCount();
|
|
245
|
+
this.#syncFabricGroups(this.env.get(FabricManager).for(fabricIndex));
|
|
246
|
+
this.#emitAuxAcl();
|
|
247
|
+
return { groupId: GroupId.NO_GROUP_ID, endpoints: [] };
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const membership = deepCopy(this.state.membership);
|
|
251
|
+
const entryIdx = membership.findIndex(m => m.groupId === groupId && m.fabricIndex === fabricIndex);
|
|
252
|
+
|
|
253
|
+
if (entryIdx < 0) {
|
|
254
|
+
throw new StatusResponseError(`Group ${groupId} not found`, Status.NotFound);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const entry = membership[entryIdx];
|
|
258
|
+
let removedEndpoints: EndpointNumber[];
|
|
259
|
+
|
|
260
|
+
if (!requestedEndpoints || requestedEndpoints.length === 0) {
|
|
261
|
+
// No specific endpoints specified → remove entire entry
|
|
262
|
+
removedEndpoints = entry.endpoints ?? [];
|
|
263
|
+
membership.splice(entryIdx, 1);
|
|
264
|
+
} else {
|
|
265
|
+
const currentEndpoints = entry.endpoints ?? [];
|
|
266
|
+
removedEndpoints = requestedEndpoints.filter(ep => currentEndpoints.includes(ep));
|
|
267
|
+
const remainingEndpoints = currentEndpoints.filter(ep => !requestedEndpoints.includes(ep));
|
|
268
|
+
|
|
269
|
+
if (remainingEndpoints.length === 0) {
|
|
270
|
+
if (this.features.sender) {
|
|
271
|
+
// SD feature enabled: keep entry as sender-only (omit endpoints when LN absent)
|
|
272
|
+
const { endpoints: _omit, ...entryWithoutEndpoints } = entry;
|
|
273
|
+
membership[entryIdx] = this.features.listener ? { ...entry, endpoints: [] } : entryWithoutEndpoints;
|
|
274
|
+
} else {
|
|
275
|
+
// LN-only: remove the entry entirely
|
|
276
|
+
membership.splice(entryIdx, 1);
|
|
277
|
+
}
|
|
278
|
+
} else {
|
|
279
|
+
membership[entryIdx] = { ...entry, endpoints: remainingEndpoints };
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
this.state.membership = membership;
|
|
284
|
+
this.#updateUsedMcastAddrCount();
|
|
285
|
+
this.#syncFabricGroups(this.env.get(FabricManager).for(fabricIndex));
|
|
286
|
+
this.#emitAuxAcl();
|
|
287
|
+
|
|
288
|
+
return { groupId, endpoints: removedEndpoints };
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
override async updateGroupKey(request: Groupcast.UpdateGroupKeyRequest) {
|
|
292
|
+
assertRemoteActor(this.context);
|
|
293
|
+
const fabricIndex = this.context.session.associatedFabric.fabricIndex;
|
|
294
|
+
const { groupId, keySetId, key } = request;
|
|
295
|
+
|
|
296
|
+
// Privilege escalation prevention: key requires Admin
|
|
297
|
+
if (key !== undefined) {
|
|
298
|
+
this.#requireAdmin();
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const membership = deepCopy(this.state.membership);
|
|
302
|
+
const entryIdx = membership.findIndex(m => m.groupId === groupId && m.fabricIndex === fabricIndex);
|
|
303
|
+
|
|
304
|
+
if (entryIdx < 0) {
|
|
305
|
+
throw new StatusResponseError(`Group ${groupId} not found`, Status.NotFound);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
await this.#applyKeySet(fabricIndex, keySetId, key);
|
|
309
|
+
|
|
310
|
+
membership[entryIdx] = { ...membership[entryIdx], keySetId };
|
|
311
|
+
this.state.membership = membership;
|
|
312
|
+
this.#syncFabricGroups(this.env.get(FabricManager).for(fabricIndex));
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
configureAuxiliaryAcl(request: Groupcast.ConfigureAuxiliaryAclRequest) {
|
|
316
|
+
assertRemoteActor(this.context);
|
|
317
|
+
const fabricIndex = this.context.session.associatedFabric.fabricIndex;
|
|
318
|
+
const { groupId, useAuxiliaryAcl } = request;
|
|
319
|
+
|
|
320
|
+
const membership = deepCopy(this.state.membership);
|
|
321
|
+
const entryIdx = membership.findIndex(m => m.groupId === groupId && m.fabricIndex === fabricIndex);
|
|
322
|
+
|
|
323
|
+
if (entryIdx < 0) {
|
|
324
|
+
throw new StatusResponseError(`Group ${groupId} not found`, Status.NotFound);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
membership[entryIdx] = { ...membership[entryIdx], hasAuxiliaryAcl: useAuxiliaryAcl };
|
|
328
|
+
this.state.membership = membership;
|
|
329
|
+
this.#emitAuxAcl();
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
override groupcastTesting(request: Groupcast.GroupcastTestingRequest) {
|
|
333
|
+
assertRemoteActor(this.context);
|
|
334
|
+
const fabricIndex = this.context.session.associatedFabric.fabricIndex;
|
|
335
|
+
const { testOperation, durationSeconds } = request;
|
|
336
|
+
|
|
337
|
+
// Cancel any running auto-disable timer
|
|
338
|
+
if (this.#testingTimer) {
|
|
339
|
+
this.#testingTimer.stop();
|
|
340
|
+
this.#testingTimer = undefined;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
if (testOperation === Groupcast.GroupcastTesting.DisableTesting) {
|
|
344
|
+
this.state.fabricUnderTest = FabricIndex.NO_FABRIC;
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// Enable testing: set FabricUnderTest to the current fabric index
|
|
349
|
+
this.state.fabricUnderTest = fabricIndex;
|
|
350
|
+
|
|
351
|
+
// If durationSeconds is provided, auto-disable after that duration
|
|
352
|
+
if (durationSeconds !== undefined && durationSeconds > 0) {
|
|
353
|
+
this.#testingTimer = Time.getTimer(
|
|
354
|
+
`groupcast-testing-${fabricIndex}`,
|
|
355
|
+
Seconds(durationSeconds),
|
|
356
|
+
this.callback(this.#testingTimerExpired),
|
|
357
|
+
);
|
|
358
|
+
this.#testingTimer.start();
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
#testingTimerExpired() {
|
|
363
|
+
this.#testingTimer = undefined;
|
|
364
|
+
this.state.fabricUnderTest = FabricIndex.NO_FABRIC;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
#handleFabricUnderTestChanged(value: FabricIndex) {
|
|
368
|
+
if (value !== FabricIndex.NO_FABRIC) {
|
|
369
|
+
this.#attachGroupMessageListener();
|
|
370
|
+
} else {
|
|
371
|
+
this.#detachGroupMessageListener();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
#attachGroupMessageListener() {
|
|
376
|
+
if (this.internal.groupMessageHandler !== undefined) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const sessions = this.env.get(SessionManager);
|
|
380
|
+
// SessionManager.onGroupMessage fires after the dispatching action's context has exited, so
|
|
381
|
+
// wrap the handler with this.callback to acquire a fresh context for state/event access.
|
|
382
|
+
const handler = this.callback(this.#onGroupMessage);
|
|
383
|
+
sessions.onGroupMessage.on(handler);
|
|
384
|
+
this.internal.groupMessageHandler = handler;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
#detachGroupMessageListener() {
|
|
388
|
+
if (this.internal.groupMessageHandler === undefined) {
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
const sessions = this.env.get(SessionManager);
|
|
392
|
+
sessions.onGroupMessage.off(this.internal.groupMessageHandler);
|
|
393
|
+
this.internal.groupMessageHandler = undefined;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
#onGroupMessage(info: GroupMessageEventInfo) {
|
|
397
|
+
// Only emit for the fabric under test
|
|
398
|
+
if (info.fabric === undefined || info.fabric.fabricIndex !== this.state.fabricUnderTest) {
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
this.events.groupcastTesting?.emit(
|
|
402
|
+
{
|
|
403
|
+
groupId: info.groupId,
|
|
404
|
+
endpointId: info.endpointId,
|
|
405
|
+
clusterId: info.clusterId,
|
|
406
|
+
elementId: info.elementId,
|
|
407
|
+
accessAllowed: info.accessAllowed,
|
|
408
|
+
groupcastTestResult: info.result,
|
|
409
|
+
fabricIndex: info.fabric.fabricIndex,
|
|
410
|
+
},
|
|
411
|
+
this.context,
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/** Sync the FabricGroups instance for a fabric from the current Membership state. */
|
|
416
|
+
#handleFabricAdded(fabric: Fabric) {
|
|
417
|
+
this.#syncFabricGroups(fabric);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
#handleFabricDeleted(fabric: Fabric) {
|
|
421
|
+
this.#cleanupFabric(fabric.fabricIndex);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
#syncFabricGroups(fabric: Fabric) {
|
|
425
|
+
const fabricIndex = fabric.fabricIndex;
|
|
426
|
+
const fabricMemberships = this.state.membership.filter(m => m.fabricIndex === fabricIndex);
|
|
427
|
+
|
|
428
|
+
// Set per-group multicast address policies BEFORE updating groupKeyIdMap. The latter triggers
|
|
429
|
+
// ServerGroupNetworking to bind the multicast address via multicastAddressFor, which reads the
|
|
430
|
+
// policy map - so the policy must be in place first or it falls back to PerGroupId-derived.
|
|
431
|
+
for (const m of fabricMemberships) {
|
|
432
|
+
const policy = m.mcastAddrPolicy === Groupcast.MulticastAddrPolicy.PerGroup ? "perGroupId" : "ianaAddr";
|
|
433
|
+
fabric.groups.setGroupMulticastPolicy(m.groupId, policy);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// Rebuild group→keySet map
|
|
437
|
+
const groupKeyIdMap = new Map<GroupId, number>();
|
|
438
|
+
for (const m of fabricMemberships) {
|
|
439
|
+
groupKeyIdMap.set(m.groupId, m.keySetId);
|
|
440
|
+
}
|
|
441
|
+
fabric.groups.groupKeyIdMap = groupKeyIdMap;
|
|
442
|
+
|
|
443
|
+
// Mirror Membership mappings into GKM GroupKeyMap so the attribute read reflects them.
|
|
444
|
+
// Data dependency: Groupcast owns the group→keySet relationship; GroupKeyMap must reflect it.
|
|
445
|
+
// GKM's per-fabric cap (maxGroupsPerFabric) and Groupcast's per-fabric cap (floor(maxMembershipCount/2))
|
|
446
|
+
// must stay aligned so the mirror never exceeds the GKM validator.
|
|
447
|
+
const gkm = this.agent.get(GroupKeyManagementServer);
|
|
448
|
+
const otherFabricsMap = gkm.state.groupKeyMap.filter(e => e.fabricIndex !== fabricIndex);
|
|
449
|
+
const mappings = fabricMemberships
|
|
450
|
+
.filter(m => m.keySetId !== UNMAPPED_KEYSET_ID)
|
|
451
|
+
.map(m => ({ groupId: m.groupId, groupKeySetId: m.keySetId, fabricIndex }));
|
|
452
|
+
gkm.state.groupKeyMap = [...otherFabricsMap, ...mappings];
|
|
453
|
+
|
|
454
|
+
// Mirror Membership endpoints to GKM GroupTable (spec attribute) and FabricGroups.endpoints
|
|
455
|
+
// (runtime dispatch lookup used by InteractionServer for wildcard group commands).
|
|
456
|
+
const otherFabricsTable = gkm.state.groupTable.filter(e => e.fabricIndex !== fabricIndex);
|
|
457
|
+
const tableEntries = fabricMemberships
|
|
458
|
+
.filter(m => m.endpoints !== undefined && m.endpoints.length > 0)
|
|
459
|
+
.map(m => ({
|
|
460
|
+
groupId: m.groupId,
|
|
461
|
+
endpoints: [...m.endpoints!],
|
|
462
|
+
groupName: "",
|
|
463
|
+
fabricIndex,
|
|
464
|
+
}));
|
|
465
|
+
gkm.state.groupTable = [...otherFabricsTable, ...tableEntries];
|
|
466
|
+
|
|
467
|
+
const previousGroupIds = new Set(fabric.groups.endpoints.keys());
|
|
468
|
+
for (const m of fabricMemberships) {
|
|
469
|
+
const eps = m.endpoints ?? [];
|
|
470
|
+
if (eps.length > 0) {
|
|
471
|
+
fabric.groups.endpoints.set(m.groupId, [...eps]);
|
|
472
|
+
} else {
|
|
473
|
+
fabric.groups.endpoints.delete(m.groupId);
|
|
474
|
+
}
|
|
475
|
+
previousGroupIds.delete(m.groupId);
|
|
476
|
+
}
|
|
477
|
+
for (const gid of previousGroupIds) {
|
|
478
|
+
fabric.groups.endpoints.delete(gid);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/**
|
|
483
|
+
* Mark membership entries as unmapped (KeySetId=UNMAPPED_KEYSET_ID) when their referenced key set no longer exists in GKM.
|
|
484
|
+
* Runs at startup to reconcile state after potential GKM KeySetRemove operations.
|
|
485
|
+
*/
|
|
486
|
+
#reconcileUnmappedKeys() {
|
|
487
|
+
const gkmState = this.endpoint.stateOf(GroupKeyManagementServer);
|
|
488
|
+
const membership = this.state.membership;
|
|
489
|
+
let dirty = false;
|
|
490
|
+
|
|
491
|
+
for (const m of membership) {
|
|
492
|
+
if (m.keySetId !== UNMAPPED_KEYSET_ID && m.keySetId !== 0) {
|
|
493
|
+
const exists = gkmState.groupKeySets.some(
|
|
494
|
+
ks => ks.fabricIndex === m.fabricIndex && ks.groupKeySetId === m.keySetId,
|
|
495
|
+
);
|
|
496
|
+
if (!exists) {
|
|
497
|
+
m.keySetId = UNMAPPED_KEYSET_ID;
|
|
498
|
+
dirty = true;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
if (dirty) {
|
|
504
|
+
this.state.membership = [...membership];
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/**
|
|
509
|
+
* Validate and apply a key set for a group operation.
|
|
510
|
+
* If `key` is provided, validates and creates a new key set in GKM.
|
|
511
|
+
* Otherwise, validates that the key set already exists.
|
|
512
|
+
*/
|
|
513
|
+
async #applyKeySet(fabricIndex: FabricIndex, keySetId: number, key: Bytes | undefined) {
|
|
514
|
+
const gkm = this.agent.get(GroupKeyManagementServer);
|
|
515
|
+
if (key !== undefined) {
|
|
516
|
+
if (key.byteLength !== 16) {
|
|
517
|
+
throw new StatusResponseError("Key must be exactly 16 bytes", Status.ConstraintError);
|
|
518
|
+
}
|
|
519
|
+
if (gkm.validateKeySetId(fabricIndex, keySetId)) {
|
|
520
|
+
throw new StatusResponseError(`KeySet ${keySetId} already exists for fabric`, Status.AlreadyExists);
|
|
521
|
+
}
|
|
522
|
+
await gkm.createKeySetForGroupcast(this.env.get(FabricManager).for(fabricIndex), keySetId, Bytes.of(key));
|
|
523
|
+
} else {
|
|
524
|
+
if (!gkm.validateKeySetId(fabricIndex, keySetId)) {
|
|
525
|
+
throw new StatusResponseError(`KeySet ${keySetId} not found for fabric`, Status.NotFound);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
/** Recompute auxiliary ACL entries and emit them via the observable so AccessControlServer updates. */
|
|
531
|
+
#emitAuxAcl() {
|
|
532
|
+
if (!this.endpoint.behaviors.has(AccessControlServer)) return;
|
|
533
|
+
const entries: AccessControlTypes.AccessControlEntry[] = this.state.membership
|
|
534
|
+
.filter(m => m.hasAuxiliaryAcl)
|
|
535
|
+
.map(m => ({
|
|
536
|
+
privilege: AccessControlTypes.AccessControlEntryPrivilege.Operate,
|
|
537
|
+
authMode: AccessControlTypes.AccessControlEntryAuthMode.Group,
|
|
538
|
+
subjects: [NodeId(BigInt(m.groupId))],
|
|
539
|
+
targets:
|
|
540
|
+
m.endpoints?.map(ep => ({
|
|
541
|
+
cluster: null,
|
|
542
|
+
endpoint: ep,
|
|
543
|
+
deviceType: null,
|
|
544
|
+
})) ?? null,
|
|
545
|
+
auxiliaryType: AccessControlTypes.AccessControlAuxiliaryType.Groupcast,
|
|
546
|
+
fabricIndex: m.fabricIndex,
|
|
547
|
+
}));
|
|
548
|
+
|
|
549
|
+
this.internal.auxAcl.emit(entries, this.context);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* Compute UsedMcastAddrCount from a membership array:
|
|
554
|
+
* - Each PerGroup group contributes 1 unique address
|
|
555
|
+
* - All IanaAddr groups together share 1 address
|
|
556
|
+
*/
|
|
557
|
+
#computeUsedMcastAddrCount(membership: Groupcast.Membership[]): number {
|
|
558
|
+
const perGroupCount = membership.filter(
|
|
559
|
+
m => m.mcastAddrPolicy === Groupcast.MulticastAddrPolicy.PerGroup,
|
|
560
|
+
).length;
|
|
561
|
+
const hasIanaAddr = membership.some(m => m.mcastAddrPolicy === Groupcast.MulticastAddrPolicy.IanaAddr);
|
|
562
|
+
return perGroupCount + (hasIanaAddr ? 1 : 0);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
/** Recompute and update the UsedMcastAddrCount attribute. */
|
|
566
|
+
#updateUsedMcastAddrCount() {
|
|
567
|
+
this.state.usedMcastAddrCount = this.#computeUsedMcastAddrCount(this.state.membership);
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/** Remove all state for a departed fabric. */
|
|
571
|
+
#cleanupFabric(fabricIndex: FabricIndex) {
|
|
572
|
+
this.state.membership = this.state.membership.filter(m => m.fabricIndex !== fabricIndex);
|
|
573
|
+
this.#updateUsedMcastAddrCount();
|
|
574
|
+
this.#emitAuxAcl();
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Migrate legacy group data from the GKM groupTable into Groupcast Membership entries.
|
|
579
|
+
* Only migrates fabrics that have existing GKM groups but no Membership entries yet.
|
|
580
|
+
* Legacy groups are assigned PerGroup multicast policy for backwards compatibility.
|
|
581
|
+
*/
|
|
582
|
+
async #migrate() {
|
|
583
|
+
const fabrics = this.env.get(FabricManager);
|
|
584
|
+
const gkmState = this.endpoint.stateOf(GroupKeyManagementServer);
|
|
585
|
+
let migrated = false;
|
|
586
|
+
|
|
587
|
+
for (const fabric of fabrics) {
|
|
588
|
+
const fi = fabric.fabricIndex;
|
|
589
|
+
const hasMembership = this.state.membership.some(m => m.fabricIndex === fi);
|
|
590
|
+
if (hasMembership) continue; // already has Groupcast membership
|
|
591
|
+
|
|
592
|
+
const fabricGroups = gkmState.groupTable.filter(g => g.fabricIndex === fi);
|
|
593
|
+
if (fabricGroups.length === 0) continue; // no legacy groups
|
|
594
|
+
|
|
595
|
+
logger.info(`Migrating ${fabricGroups.length} legacy group(s) for fabric ${fi} to Groupcast`);
|
|
596
|
+
|
|
597
|
+
const newEntries: Groupcast.Membership[] = fabricGroups.map(group => {
|
|
598
|
+
const keyMapping = gkmState.groupKeyMap.find(m => m.fabricIndex === fi && m.groupId === group.groupId);
|
|
599
|
+
// Use PerGroup policy for legacy compat only if PGA feature is enabled
|
|
600
|
+
const mcastAddrPolicy = this.features.perGroup
|
|
601
|
+
? Groupcast.MulticastAddrPolicy.PerGroup
|
|
602
|
+
: Groupcast.MulticastAddrPolicy.IanaAddr;
|
|
603
|
+
const lnFields = this.features.listener
|
|
604
|
+
? {
|
|
605
|
+
endpoints: group.endpoints.filter(ep => ep !== EndpointNumber(0)),
|
|
606
|
+
hasAuxiliaryAcl: false,
|
|
607
|
+
}
|
|
608
|
+
: {};
|
|
609
|
+
return {
|
|
610
|
+
groupId: group.groupId,
|
|
611
|
+
...lnFields,
|
|
612
|
+
keySetId: keyMapping?.groupKeySetId ?? 0,
|
|
613
|
+
mcastAddrPolicy,
|
|
614
|
+
fabricIndex: fi,
|
|
615
|
+
};
|
|
616
|
+
});
|
|
617
|
+
|
|
618
|
+
this.state.membership = [...this.state.membership, ...newEntries];
|
|
619
|
+
this.#syncFabricGroups(fabric);
|
|
620
|
+
/* Provisional in Matter 1.6.0:
|
|
621
|
+
const gkm = this.agent.get(GroupKeyManagementServer);
|
|
622
|
+
gkm.setGroupcastAdopted(fi, true);
|
|
623
|
+
*/
|
|
624
|
+
migrated = true;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
if (migrated) {
|
|
628
|
+
this.#updateUsedMcastAddrCount();
|
|
629
|
+
logger.info("Groupcast migration complete");
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
override async [Symbol.asyncDispose]() {
|
|
634
|
+
this.#testingTimer?.stop();
|
|
635
|
+
this.#testingTimer = undefined;
|
|
636
|
+
this.#detachGroupMessageListener();
|
|
637
|
+
await super[Symbol.asyncDispose]?.();
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
export namespace GroupcastServer {
|
|
642
|
+
/** Non-persistent internal state for GroupcastServer. */
|
|
643
|
+
export class Internal {
|
|
644
|
+
/**
|
|
645
|
+
* Observable that holds all auxiliary ACL entries supplied by this cluster.
|
|
646
|
+
* AccessControlServer subscribes to this and rebuilds its ACL cache whenever it emits.
|
|
647
|
+
*/
|
|
648
|
+
auxAcl: AccessControlServer.AuxAclObservable = ObservableValue([]);
|
|
649
|
+
|
|
650
|
+
/** Active subscription handler on SessionManager.groupMessage while fabricUnderTest is set. */
|
|
651
|
+
groupMessageHandler?: (info: GroupMessageEventInfo) => void;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/** Default state overrides for GroupcastServer. */
|
|
655
|
+
export class State extends GroupcastBehavior.State {
|
|
656
|
+
/**
|
|
657
|
+
* Implementation-defined maximum membership count (min 10 per spec).
|
|
658
|
+
* Set to 2 * GKM.maxGroupsPerFabric (44) so per-fabric quota floor(44/2)=22 aligns exactly
|
|
659
|
+
* with GKM's per-fabric cap. Even number avoids spillover semantics.
|
|
660
|
+
*/
|
|
661
|
+
override maxMembershipCount = 44;
|
|
662
|
+
/** Implementation-defined maximum multicast address count (min 1 per spec). */
|
|
663
|
+
override maxMcastAddrCount = 44;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/*** THIS FILE WILL BE REGENERATED IF YOU DO NOT REMOVE THIS MESSAGE ***/
|
|
8
|
+
|
|
9
|
+
export * from "./GroupcastBehavior.js";
|
|
10
|
+
export * from "./GroupcastServer.js";
|
|
11
|
+
export * from "./GroupcastClient.js";
|