@matter/node 0.16.0-alpha.0-20251205-dfb1e1556 → 0.16.0-alpha.0-20251209-d6072d23e
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/Behavior.d.ts +5 -1
- package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
- package/dist/cjs/behavior/Behavior.js +15 -5
- package/dist/cjs/behavior/Behavior.js.map +1 -1
- package/dist/cjs/behavior/Events.d.ts +7 -7
- package/dist/cjs/behavior/Events.d.ts.map +1 -1
- package/dist/cjs/behavior/Events.js +1 -1
- package/dist/cjs/behavior/Events.js.map +1 -1
- package/dist/cjs/behavior/Transitions.d.ts +2 -3
- package/dist/cjs/behavior/Transitions.d.ts.map +1 -1
- package/dist/cjs/behavior/Transitions.js +1 -2
- package/dist/cjs/behavior/Transitions.js.map +1 -1
- package/dist/cjs/behavior/cluster/ClusterBehaviorType.js +2 -2
- package/dist/cjs/behavior/cluster/ClusterBehaviorType.js.map +1 -1
- package/dist/cjs/behavior/cluster/ClusterEvents.d.ts +1 -1
- package/dist/cjs/behavior/cluster/ClusterEvents.d.ts.map +1 -1
- package/dist/cjs/behavior/cluster/cluster-behavior-utils.js +1 -1
- package/dist/cjs/behavior/cluster/cluster-behavior-utils.js.map +1 -1
- package/dist/cjs/behavior/context/Contextual.js +1 -1
- package/dist/cjs/behavior/context/Contextual.js.map +1 -1
- package/dist/cjs/behavior/context/NodeActivity.d.ts +2 -4
- package/dist/cjs/behavior/context/NodeActivity.d.ts.map +1 -1
- package/dist/cjs/behavior/context/NodeActivity.js +4 -11
- package/dist/cjs/behavior/context/NodeActivity.js.map +1 -1
- package/dist/cjs/behavior/context/server/LocalActorContext.d.ts +2 -3
- package/dist/cjs/behavior/context/server/LocalActorContext.d.ts.map +1 -1
- package/dist/cjs/behavior/context/server/LocalActorContext.js +3 -3
- package/dist/cjs/behavior/context/server/LocalActorContext.js.map +1 -1
- package/dist/cjs/behavior/context/server/RemoteActorContext.d.ts +2 -6
- package/dist/cjs/behavior/context/server/RemoteActorContext.d.ts.map +1 -1
- package/dist/cjs/behavior/context/server/RemoteActorContext.js +20 -22
- package/dist/cjs/behavior/context/server/RemoteActorContext.js.map +1 -1
- package/dist/cjs/behavior/internal/BackingEvents.js +2 -2
- package/dist/cjs/behavior/internal/BackingEvents.js.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.d.ts +2 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.js +3 -0
- package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/cjs/behavior/internal/Reactors.d.ts.map +1 -1
- package/dist/cjs/behavior/internal/Reactors.js +2 -1
- package/dist/cjs/behavior/internal/Reactors.js.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.js +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/cjs/behavior/state/managed/Internal.js +2 -2
- package/dist/cjs/behavior/state/managed/Internal.js.map +1 -1
- package/dist/cjs/behavior/state/managed/values/BitmapManager.js +1 -1
- package/dist/cjs/behavior/state/managed/values/BitmapManager.js.map +1 -1
- package/dist/cjs/behavior/state/managed/values/StructManager.js +1 -1
- package/dist/cjs/behavior/state/managed/values/StructManager.js.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +6 -12
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts +3 -2
- package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningServer.js +3 -6
- package/dist/cjs/behavior/system/commissioning/CommissioningServer.js.map +1 -1
- package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts.map +1 -1
- package/dist/cjs/behavior/system/mqtt/MqttInterface.js +91 -30
- package/dist/cjs/behavior/system/mqtt/MqttInterface.js.map +1 -1
- package/dist/cjs/behavior/system/network/NetworkRuntime.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/NetworkRuntime.js +1 -3
- package/dist/cjs/behavior/system/network/NetworkRuntime.js.map +1 -1
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.js +2 -2
- package/dist/cjs/behavior/system/network/ServerGroupNetworking.js.map +1 -1
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js +152 -13
- package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js.map +2 -2
- package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts +3 -2
- package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts.map +1 -1
- package/dist/cjs/behavior/system/remote/RemoteInterface.js +69 -10
- package/dist/cjs/behavior/system/remote/RemoteInterface.js.map +1 -1
- package/dist/cjs/behavior/system/remote/api/Api.d.ts.map +1 -1
- package/dist/cjs/behavior/system/remote/api/Api.js +4 -3
- package/dist/cjs/behavior/system/remote/api/Api.js.map +1 -1
- package/dist/cjs/behavior/system/sessions/SessionsBehavior.js +2 -2
- package/dist/cjs/behavior/system/sessions/SessionsBehavior.js.map +1 -1
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js +14 -11
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
- package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -1
- package/dist/cjs/behavior/system/websocket/WebSocketInterface.js +12 -4
- package/dist/cjs/behavior/system/websocket/WebSocketInterface.js.map +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.js +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.js +65 -7
- package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.js.map +1 -1
- package/dist/cjs/behaviors/basic-information/BasicInformationServer.js +2 -2
- package/dist/cjs/behaviors/basic-information/BasicInformationServer.js.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js +12 -8
- package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +2 -3
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.js +2 -10
- package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.js.map +1 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +2 -2
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js +1 -1
- package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
- package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.d.ts +0 -1
- package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js +15 -14
- package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
- package/dist/cjs/behaviors/scenes-management/ScenesManagementServer.js +2 -2
- package/dist/cjs/behaviors/scenes-management/ScenesManagementServer.js.map +1 -1
- package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js +1 -1
- package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js.map +1 -1
- package/dist/cjs/behaviors/window-covering/WindowCoveringServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/window-covering/WindowCoveringServer.js +21 -8
- package/dist/cjs/behaviors/window-covering/WindowCoveringServer.js.map +1 -1
- package/dist/cjs/endpoint/Agent.js +1 -1
- package/dist/cjs/endpoint/Agent.js.map +1 -1
- package/dist/cjs/endpoint/Endpoint.d.ts +2 -1
- package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/cjs/endpoint/Endpoint.js +95 -8
- package/dist/cjs/endpoint/Endpoint.js.map +2 -2
- package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/Behaviors.js +11 -7
- package/dist/cjs/endpoint/properties/Behaviors.js.map +1 -1
- package/dist/cjs/endpoint/properties/Commands.js +1 -1
- package/dist/cjs/endpoint/properties/Commands.js.map +1 -1
- package/dist/cjs/endpoint/properties/EndpointLifecycle.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/EndpointLifecycle.js +3 -0
- package/dist/cjs/endpoint/properties/EndpointLifecycle.js.map +1 -1
- package/dist/cjs/node/ClientNode.d.ts.map +1 -1
- package/dist/cjs/node/ClientNode.js +2 -0
- package/dist/cjs/node/ClientNode.js.map +1 -1
- package/dist/cjs/node/Node.d.ts +2 -2
- package/dist/cjs/node/Node.d.ts.map +1 -1
- package/dist/cjs/node/Node.js +3 -2
- package/dist/cjs/node/Node.js.map +1 -1
- package/dist/cjs/node/ServerNode.d.ts.map +1 -1
- package/dist/cjs/node/ServerNode.js +54 -1
- package/dist/cjs/node/ServerNode.js.map +1 -1
- package/dist/cjs/node/client/ClientCommandMethod.d.ts.map +1 -1
- package/dist/cjs/node/client/ClientCommandMethod.js +26 -29
- package/dist/cjs/node/client/ClientCommandMethod.js.map +1 -1
- package/dist/cjs/node/client/NodePeerAddressStore.d.ts +3 -3
- package/dist/cjs/node/client/NodePeerAddressStore.d.ts.map +1 -1
- package/dist/cjs/node/client/NodePeerAddressStore.js.map +1 -1
- package/dist/cjs/node/client/PeerBehavior.js +1 -1
- package/dist/cjs/node/client/PeerBehavior.js.map +1 -1
- package/dist/cjs/node/client/Peers.d.ts.map +1 -1
- package/dist/cjs/node/client/Peers.js +14 -0
- package/dist/cjs/node/client/Peers.js.map +1 -1
- package/dist/cjs/node/integration/ProtocolService.d.ts.map +1 -1
- package/dist/cjs/node/integration/ProtocolService.js +3 -2
- package/dist/cjs/node/integration/ProtocolService.js.map +1 -1
- package/dist/cjs/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/cjs/node/server/InteractionServer.js +55 -50
- package/dist/cjs/node/server/InteractionServer.js.map +2 -2
- package/dist/cjs/node/server/ServerEnvironment.js +1 -1
- package/dist/cjs/node/server/ServerEnvironment.js.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.d.ts +61 -10
- package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.js +316 -157
- package/dist/cjs/node/server/ServerSubscription.js.map +2 -2
- package/dist/esm/behavior/Behavior.d.ts +5 -1
- package/dist/esm/behavior/Behavior.d.ts.map +1 -1
- package/dist/esm/behavior/Behavior.js +15 -5
- package/dist/esm/behavior/Behavior.js.map +1 -1
- package/dist/esm/behavior/Events.d.ts +7 -7
- package/dist/esm/behavior/Events.d.ts.map +1 -1
- package/dist/esm/behavior/Events.js +1 -1
- package/dist/esm/behavior/Events.js.map +1 -1
- package/dist/esm/behavior/Transitions.d.ts +2 -3
- package/dist/esm/behavior/Transitions.d.ts.map +1 -1
- package/dist/esm/behavior/Transitions.js +1 -2
- package/dist/esm/behavior/Transitions.js.map +1 -1
- package/dist/esm/behavior/cluster/ClusterBehaviorType.js +2 -2
- package/dist/esm/behavior/cluster/ClusterBehaviorType.js.map +1 -1
- package/dist/esm/behavior/cluster/ClusterEvents.d.ts +1 -1
- package/dist/esm/behavior/cluster/ClusterEvents.d.ts.map +1 -1
- package/dist/esm/behavior/cluster/cluster-behavior-utils.js +1 -1
- package/dist/esm/behavior/cluster/cluster-behavior-utils.js.map +1 -1
- package/dist/esm/behavior/context/Contextual.js +1 -1
- package/dist/esm/behavior/context/Contextual.js.map +1 -1
- package/dist/esm/behavior/context/NodeActivity.d.ts +2 -4
- package/dist/esm/behavior/context/NodeActivity.d.ts.map +1 -1
- package/dist/esm/behavior/context/NodeActivity.js +5 -12
- package/dist/esm/behavior/context/NodeActivity.js.map +1 -1
- package/dist/esm/behavior/context/server/LocalActorContext.d.ts +2 -3
- package/dist/esm/behavior/context/server/LocalActorContext.d.ts.map +1 -1
- package/dist/esm/behavior/context/server/LocalActorContext.js +5 -5
- package/dist/esm/behavior/context/server/LocalActorContext.js.map +1 -1
- package/dist/esm/behavior/context/server/RemoteActorContext.d.ts +2 -6
- package/dist/esm/behavior/context/server/RemoteActorContext.d.ts.map +1 -1
- package/dist/esm/behavior/context/server/RemoteActorContext.js +27 -24
- package/dist/esm/behavior/context/server/RemoteActorContext.js.map +1 -1
- package/dist/esm/behavior/internal/BackingEvents.js +2 -2
- package/dist/esm/behavior/internal/BackingEvents.js.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.d.ts +2 -1
- package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.js +4 -0
- package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/esm/behavior/internal/Reactors.d.ts.map +1 -1
- package/dist/esm/behavior/internal/Reactors.js +2 -1
- package/dist/esm/behavior/internal/Reactors.js.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.js +2 -1
- package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/esm/behavior/state/managed/Internal.js +2 -2
- package/dist/esm/behavior/state/managed/Internal.js.map +1 -1
- package/dist/esm/behavior/state/managed/values/BitmapManager.js +1 -1
- package/dist/esm/behavior/state/managed/values/BitmapManager.js.map +1 -1
- package/dist/esm/behavior/state/managed/values/StructManager.js +1 -1
- package/dist/esm/behavior/state/managed/values/StructManager.js.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningClient.js +7 -14
- package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts +3 -2
- package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningServer.js +3 -7
- package/dist/esm/behavior/system/commissioning/CommissioningServer.js.map +1 -1
- package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts.map +1 -1
- package/dist/esm/behavior/system/mqtt/MqttInterface.js +91 -30
- package/dist/esm/behavior/system/mqtt/MqttInterface.js.map +1 -1
- package/dist/esm/behavior/system/network/NetworkRuntime.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/NetworkRuntime.js +1 -3
- package/dist/esm/behavior/system/network/NetworkRuntime.js.map +1 -1
- package/dist/esm/behavior/system/network/ServerGroupNetworking.js +2 -2
- package/dist/esm/behavior/system/network/ServerGroupNetworking.js.map +1 -1
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.js +152 -14
- package/dist/esm/behavior/system/network/ServerNetworkRuntime.js.map +2 -2
- package/dist/esm/behavior/system/remote/RemoteInterface.d.ts +3 -2
- package/dist/esm/behavior/system/remote/RemoteInterface.d.ts.map +1 -1
- package/dist/esm/behavior/system/remote/RemoteInterface.js +76 -11
- package/dist/esm/behavior/system/remote/RemoteInterface.js.map +1 -1
- package/dist/esm/behavior/system/remote/api/Api.d.ts.map +1 -1
- package/dist/esm/behavior/system/remote/api/Api.js +4 -3
- package/dist/esm/behavior/system/remote/api/Api.js.map +1 -1
- package/dist/esm/behavior/system/sessions/SessionsBehavior.js +2 -2
- package/dist/esm/behavior/system/sessions/SessionsBehavior.js.map +1 -1
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js +17 -14
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
- package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -1
- package/dist/esm/behavior/system/websocket/WebSocketInterface.js +12 -4
- package/dist/esm/behavior/system/websocket/WebSocketInterface.js.map +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.js +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts.map +1 -1
- package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.js +66 -8
- package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.js.map +1 -1
- package/dist/esm/behaviors/basic-information/BasicInformationServer.js +2 -2
- package/dist/esm/behaviors/basic-information/BasicInformationServer.js.map +1 -1
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js +13 -9
- package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +2 -3
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.js +2 -10
- package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.js.map +1 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +2 -2
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js +1 -1
- package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
- package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.d.ts +0 -1
- package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
- package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js +15 -15
- package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
- package/dist/esm/behaviors/scenes-management/ScenesManagementServer.js +2 -2
- package/dist/esm/behaviors/scenes-management/ScenesManagementServer.js.map +1 -1
- package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js +1 -1
- package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js.map +1 -1
- package/dist/esm/behaviors/window-covering/WindowCoveringServer.d.ts.map +1 -1
- package/dist/esm/behaviors/window-covering/WindowCoveringServer.js +22 -9
- package/dist/esm/behaviors/window-covering/WindowCoveringServer.js.map +1 -1
- package/dist/esm/endpoint/Agent.js +1 -1
- package/dist/esm/endpoint/Agent.js.map +1 -1
- package/dist/esm/endpoint/Endpoint.d.ts +2 -1
- package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/esm/endpoint/Endpoint.js +96 -8
- package/dist/esm/endpoint/Endpoint.js.map +2 -2
- package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/Behaviors.js +11 -7
- package/dist/esm/endpoint/properties/Behaviors.js.map +1 -1
- package/dist/esm/endpoint/properties/Commands.js +1 -1
- package/dist/esm/endpoint/properties/Commands.js.map +1 -1
- package/dist/esm/endpoint/properties/EndpointLifecycle.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/EndpointLifecycle.js +3 -0
- package/dist/esm/endpoint/properties/EndpointLifecycle.js.map +1 -1
- package/dist/esm/node/ClientNode.d.ts.map +1 -1
- package/dist/esm/node/ClientNode.js +2 -0
- package/dist/esm/node/ClientNode.js.map +1 -1
- package/dist/esm/node/Node.d.ts +2 -2
- package/dist/esm/node/Node.d.ts.map +1 -1
- package/dist/esm/node/Node.js +5 -4
- package/dist/esm/node/Node.js.map +1 -1
- package/dist/esm/node/ServerNode.d.ts.map +1 -1
- package/dist/esm/node/ServerNode.js +54 -1
- package/dist/esm/node/ServerNode.js.map +1 -1
- package/dist/esm/node/client/ClientCommandMethod.d.ts.map +1 -1
- package/dist/esm/node/client/ClientCommandMethod.js +26 -29
- package/dist/esm/node/client/ClientCommandMethod.js.map +1 -1
- package/dist/esm/node/client/NodePeerAddressStore.d.ts +3 -3
- package/dist/esm/node/client/NodePeerAddressStore.d.ts.map +1 -1
- package/dist/esm/node/client/NodePeerAddressStore.js.map +1 -1
- package/dist/esm/node/client/PeerBehavior.js +1 -1
- package/dist/esm/node/client/PeerBehavior.js.map +1 -1
- package/dist/esm/node/client/Peers.d.ts.map +1 -1
- package/dist/esm/node/client/Peers.js +15 -1
- package/dist/esm/node/client/Peers.js.map +1 -1
- package/dist/esm/node/integration/ProtocolService.d.ts.map +1 -1
- package/dist/esm/node/integration/ProtocolService.js +4 -2
- package/dist/esm/node/integration/ProtocolService.js.map +1 -1
- package/dist/esm/node/server/InteractionServer.d.ts.map +1 -1
- package/dist/esm/node/server/InteractionServer.js +59 -51
- package/dist/esm/node/server/InteractionServer.js.map +2 -2
- package/dist/esm/node/server/ServerEnvironment.js +1 -1
- package/dist/esm/node/server/ServerEnvironment.js.map +1 -1
- package/dist/esm/node/server/ServerSubscription.d.ts +61 -10
- package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/node/server/ServerSubscription.js +321 -159
- package/dist/esm/node/server/ServerSubscription.js.map +2 -2
- package/package.json +7 -7
- package/src/behavior/Behavior.ts +12 -0
- package/src/behavior/Events.ts +12 -8
- package/src/behavior/Transitions.ts +3 -3
- package/src/behavior/cluster/ClusterBehaviorType.ts +2 -2
- package/src/behavior/cluster/ClusterEvents.ts +1 -1
- package/src/behavior/context/NodeActivity.ts +4 -13
- package/src/behavior/context/server/LocalActorContext.ts +6 -8
- package/src/behavior/context/server/RemoteActorContext.ts +34 -33
- package/src/behavior/internal/BehaviorBacking.ts +5 -0
- package/src/behavior/internal/Reactors.ts +1 -0
- package/src/behavior/state/managed/Datasource.ts +2 -1
- package/src/behavior/system/commissioning/CommissioningClient.ts +6 -13
- package/src/behavior/system/commissioning/CommissioningServer.ts +6 -8
- package/src/behavior/system/mqtt/MqttInterface.ts +6 -2
- package/src/behavior/system/network/NetworkRuntime.ts +1 -3
- package/src/behavior/system/network/ServerGroupNetworking.ts +2 -2
- package/src/behavior/system/network/ServerNetworkRuntime.ts +49 -15
- package/src/behavior/system/remote/RemoteInterface.ts +22 -4
- package/src/behavior/system/remote/api/Api.ts +4 -3
- package/src/behavior/system/sessions/SessionsBehavior.ts +2 -2
- package/src/behavior/system/subscriptions/SubscriptionsServer.ts +15 -13
- package/src/behavior/system/websocket/WebSocketInterface.ts +2 -1
- package/src/behaviors/access-control/AccessControlServer.ts +1 -1
- package/src/behaviors/administrator-commissioning/AdministratorCommissioningServer.ts +14 -7
- package/src/behaviors/basic-information/BasicInformationServer.ts +2 -2
- package/src/behaviors/general-commissioning/GeneralCommissioningServer.ts +14 -9
- package/src/behaviors/general-commissioning/ServerNodeFailsafeContext.ts +3 -15
- package/src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts +1 -1
- package/src/behaviors/group-key-management/GroupKeyManagementServer.ts +1 -1
- package/src/behaviors/operational-credentials/OperationalCredentialsServer.ts +22 -19
- package/src/behaviors/scenes-management/ScenesManagementServer.ts +1 -1
- package/src/behaviors/thermostat/AtomicWriteHandler.ts +1 -1
- package/src/behaviors/window-covering/WindowCoveringServer.ts +24 -9
- package/src/endpoint/Endpoint.ts +21 -4
- package/src/endpoint/properties/Behaviors.ts +11 -6
- package/src/endpoint/properties/Commands.ts +1 -1
- package/src/endpoint/properties/EndpointLifecycle.ts +4 -0
- package/src/node/ClientNode.ts +3 -0
- package/src/node/Node.ts +3 -2
- package/src/node/ServerNode.ts +1 -0
- package/src/node/client/ClientCommandMethod.ts +31 -38
- package/src/node/client/NodePeerAddressStore.ts +3 -3
- package/src/node/client/Peers.ts +19 -1
- package/src/node/integration/ProtocolService.ts +4 -2
- package/src/node/server/InteractionServer.ts +62 -51
- package/src/node/server/ServerEnvironment.ts +1 -1
- package/src/node/server/ServerSubscription.ts +225 -153
|
@@ -44,9 +44,7 @@ export abstract class NetworkRuntime {
|
|
|
44
44
|
async [Construction.destruct]() {
|
|
45
45
|
this.#abort();
|
|
46
46
|
const activity = this.#owner.env.get(NodeActivity);
|
|
47
|
-
|
|
48
|
-
await activity.inactive;
|
|
49
|
-
}
|
|
47
|
+
await activity.inactive;
|
|
50
48
|
|
|
51
49
|
try {
|
|
52
50
|
await this.stop();
|
|
@@ -48,7 +48,7 @@ export class ServerGroupNetworking {
|
|
|
48
48
|
this.#observers.on(fabrics.events.added, async fabric => this.#registerFabricGroupObserver(fabric));
|
|
49
49
|
|
|
50
50
|
// When fabric is deleted, we remove the group memberships
|
|
51
|
-
this.#observers.on(fabrics.events.
|
|
51
|
+
this.#observers.on(fabrics.events.deleting, async fabric => {
|
|
52
52
|
const fabricIndex = fabric.fabricIndex;
|
|
53
53
|
this.#observersForFabric(fabricIndex).close();
|
|
54
54
|
this.#fabricObservers.delete(fabricIndex);
|
|
@@ -64,7 +64,7 @@ export class ServerGroupNetworking {
|
|
|
64
64
|
this.#activeGroupMemberships.delete(fabricIndex);
|
|
65
65
|
});
|
|
66
66
|
|
|
67
|
-
this.#observers.on(fabrics.events.
|
|
67
|
+
this.#observers.on(fabrics.events.replaced, async fabric => {
|
|
68
68
|
const fabricIndex = fabric.fabricIndex;
|
|
69
69
|
|
|
70
70
|
this.#observersForFabric(fabricIndex).close();
|
|
@@ -24,7 +24,6 @@ import {
|
|
|
24
24
|
Advertiser,
|
|
25
25
|
Ble,
|
|
26
26
|
BleAdvertiser,
|
|
27
|
-
ChannelManager,
|
|
28
27
|
DeviceAdvertiser,
|
|
29
28
|
DeviceCommissioner,
|
|
30
29
|
ExchangeManager,
|
|
@@ -79,7 +78,10 @@ export class ServerNetworkRuntime extends NetworkRuntime {
|
|
|
79
78
|
get mdnsAdvertiser() {
|
|
80
79
|
if (!this.#mdnsAdvertiser) {
|
|
81
80
|
const port = this.owner.state.network.operationalPort;
|
|
82
|
-
const options =
|
|
81
|
+
const options = {
|
|
82
|
+
lifetime: this.construction,
|
|
83
|
+
...this.owner.state.commissioning.mdns,
|
|
84
|
+
};
|
|
83
85
|
const crypto = this.owner.env.get(Crypto);
|
|
84
86
|
const { server } = this.#services.get(MdnsService);
|
|
85
87
|
this.#mdnsAdvertiser = new MdnsAdvertiser(crypto, server, { ...options, port });
|
|
@@ -119,7 +121,10 @@ export class ServerNetworkRuntime extends NetworkRuntime {
|
|
|
119
121
|
protected get bleAdvertiser() {
|
|
120
122
|
if (this.#bleAdvertiser === undefined) {
|
|
121
123
|
const { peripheralInterface } = this.owner.env.get(Ble);
|
|
122
|
-
const options =
|
|
124
|
+
const options = {
|
|
125
|
+
lifetime: this.construction,
|
|
126
|
+
...this.owner.state.commissioning.ble,
|
|
127
|
+
};
|
|
123
128
|
this.#bleAdvertiser = new BleAdvertiser(peripheralInterface, options);
|
|
124
129
|
}
|
|
125
130
|
return this.#bleAdvertiser;
|
|
@@ -269,9 +274,6 @@ export class ServerNetworkRuntime extends NetworkRuntime {
|
|
|
269
274
|
await owner.act("start-network", agent => agent.load(ProductDescriptionServer));
|
|
270
275
|
|
|
271
276
|
// Apply settings to environmental components
|
|
272
|
-
env.get(ChannelManager).caseSessionsPerFabricAndNode =
|
|
273
|
-
// Note that this is "sessions per fabric and node", so we support more than indicated by capabilityMinima
|
|
274
|
-
owner.state.basicInformation.capabilityMinima.caseSessionsPerFabric;
|
|
275
277
|
env.get(SessionManager).sessionParameters = {
|
|
276
278
|
maxPathsPerInvoke: this.owner.state.basicInformation.maxPathsPerInvoke,
|
|
277
279
|
};
|
|
@@ -314,7 +316,11 @@ export class ServerNetworkRuntime extends NetworkRuntime {
|
|
|
314
316
|
|
|
315
317
|
const { env } = this.owner;
|
|
316
318
|
|
|
317
|
-
|
|
319
|
+
{
|
|
320
|
+
using _lifetime = this.construction.join("commissioner");
|
|
321
|
+
await env.close(DeviceCommissioner);
|
|
322
|
+
}
|
|
323
|
+
|
|
318
324
|
// Shutdown the Broadcaster if DeviceAdvertiser is not initialized
|
|
319
325
|
// We kick-off the Advertiser shutdown to prevent re-announces when removing sessions and wait a bit later
|
|
320
326
|
const advertisementShutdown = this.owner.env.has(DeviceAdvertiser)
|
|
@@ -322,21 +328,49 @@ export class ServerNetworkRuntime extends NetworkRuntime {
|
|
|
322
328
|
: this.#mdnsAdvertiser?.close();
|
|
323
329
|
this.#mdnsAdvertiser = undefined;
|
|
324
330
|
|
|
325
|
-
|
|
331
|
+
{
|
|
332
|
+
using _lifetime = this.construction.join("preparing");
|
|
333
|
+
await this.owner.prepareRuntimeShutdown();
|
|
334
|
+
}
|
|
326
335
|
|
|
327
336
|
this.#groupNetworking?.close();
|
|
328
337
|
this.#groupNetworking = undefined;
|
|
329
338
|
|
|
330
339
|
// Now all sessions are closed, so we wait for Advertiser to be gone
|
|
331
|
-
|
|
340
|
+
{
|
|
341
|
+
using _advertiser = this.construction.join("advertisement");
|
|
342
|
+
await advertisementShutdown;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
{
|
|
346
|
+
using _lifetime = this.construction.join("services");
|
|
347
|
+
await this.#services.close();
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
{
|
|
351
|
+
using _lifetime = this.construction.join("exchanges");
|
|
352
|
+
await env.close(ExchangeManager);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
{
|
|
356
|
+
using _lifetime = this.construction.join("protocols");
|
|
357
|
+
await env.close(SecureChannelProtocol);
|
|
358
|
+
}
|
|
332
359
|
|
|
333
|
-
|
|
360
|
+
{
|
|
361
|
+
using _lifetime = this.construction.join("transports");
|
|
362
|
+
await env.close(ConnectionlessTransportSet);
|
|
363
|
+
}
|
|
334
364
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
365
|
+
{
|
|
366
|
+
using _lifetime = this.construction.join("interactions");
|
|
367
|
+
await env.close(InteractionServer);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
{
|
|
371
|
+
using _lifetime = this.construction.join("peers");
|
|
372
|
+
await env.close(PeerSet);
|
|
373
|
+
}
|
|
340
374
|
}
|
|
341
375
|
|
|
342
376
|
async #initializeGroupNetworking() {
|
|
@@ -4,7 +4,16 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
Abort,
|
|
9
|
+
AppAddress,
|
|
10
|
+
BasicMultiplex,
|
|
11
|
+
decamelize,
|
|
12
|
+
ImplementationError,
|
|
13
|
+
Lifetime,
|
|
14
|
+
Logger,
|
|
15
|
+
Multiplex,
|
|
16
|
+
} from "#general";
|
|
8
17
|
import type { ServerNode } from "#node/ServerNode.js";
|
|
9
18
|
import { ApiPath } from "./api/ApiPath.js";
|
|
10
19
|
|
|
@@ -15,10 +24,11 @@ const logger = Logger.get("RemoteAdapter");
|
|
|
15
24
|
*/
|
|
16
25
|
export abstract class RemoteInterface {
|
|
17
26
|
#node: ServerNode;
|
|
27
|
+
#lifetime: Lifetime;
|
|
18
28
|
#address: AppAddress;
|
|
19
29
|
#abort = new Abort();
|
|
20
30
|
#root: ApiPath;
|
|
21
|
-
#workers
|
|
31
|
+
#workers: Multiplex;
|
|
22
32
|
|
|
23
33
|
constructor(node: ServerNode, address: AppAddress) {
|
|
24
34
|
if (address.appProtocol !== (this.constructor as unknown as RemoteInterface.Type).protocol) {
|
|
@@ -27,10 +37,16 @@ export abstract class RemoteInterface {
|
|
|
27
37
|
);
|
|
28
38
|
}
|
|
29
39
|
this.#node = node;
|
|
40
|
+
this.#lifetime = node.env.join(decamelize(this.constructor.name, " "));
|
|
41
|
+
this.#workers = new BasicMultiplex();
|
|
30
42
|
this.#address = address;
|
|
31
43
|
this.#root = new ApiPath(address);
|
|
32
44
|
}
|
|
33
45
|
|
|
46
|
+
join(...name: unknown[]) {
|
|
47
|
+
return this.#lifetime.join(...name);
|
|
48
|
+
}
|
|
49
|
+
|
|
34
50
|
get root() {
|
|
35
51
|
return this.#root;
|
|
36
52
|
}
|
|
@@ -75,6 +91,8 @@ export abstract class RemoteInterface {
|
|
|
75
91
|
return;
|
|
76
92
|
}
|
|
77
93
|
|
|
94
|
+
using _closing = this.#lifetime.closing();
|
|
95
|
+
|
|
78
96
|
this.#abort();
|
|
79
97
|
|
|
80
98
|
try {
|
|
@@ -92,8 +110,8 @@ export abstract class RemoteInterface {
|
|
|
92
110
|
}
|
|
93
111
|
}
|
|
94
112
|
|
|
95
|
-
protected addWorker(worker: Promise<void
|
|
96
|
-
this.#workers.add(worker
|
|
113
|
+
protected addWorker(worker: Promise<void>) {
|
|
114
|
+
this.#workers.add(worker);
|
|
97
115
|
}
|
|
98
116
|
|
|
99
117
|
static protocol = "";
|
|
@@ -8,6 +8,7 @@ import { Agent } from "#endpoint/Agent.js";
|
|
|
8
8
|
import { Abort, asError, Diagnostic, InternalError, Logger } from "#general";
|
|
9
9
|
import { Node } from "#node/Node.js";
|
|
10
10
|
import { ServerNode } from "#node/ServerNode.js";
|
|
11
|
+
import { Mark } from "#protocol";
|
|
11
12
|
import { StatusResponse, StatusResponseError } from "#types";
|
|
12
13
|
import { ApiPath } from "./ApiPath.js";
|
|
13
14
|
import { ApiResource } from "./ApiResource.js";
|
|
@@ -63,15 +64,15 @@ export namespace Api {
|
|
|
63
64
|
if (!logger) {
|
|
64
65
|
loggers.set(facility, (logger = Logger.get(facility)));
|
|
65
66
|
}
|
|
66
|
-
logger[level](Diagnostic.via(id
|
|
67
|
+
logger[level](Diagnostic.via(id || "(anon)"), message);
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
export function logRequest(facility: string, id: string | undefined, method: string, target: string) {
|
|
70
|
-
log("info", facility, id,
|
|
71
|
+
log("info", facility, id, Mark.INBOUND, Diagnostic.strong(method), target);
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
export function logResponse(facility: string, response: RemoteResponse) {
|
|
74
|
-
const message = Array<unknown>(
|
|
75
|
+
const message = Array<unknown>(Mark.OUTBOUND, RemoteResponse.describe(response));
|
|
75
76
|
let level: "error" | "info";
|
|
76
77
|
switch (response.kind) {
|
|
77
78
|
case "error":
|
|
@@ -30,11 +30,11 @@ export class SessionsBehavior extends Behavior {
|
|
|
30
30
|
|
|
31
31
|
#convertToExposedSession(session: NodeSession): SessionsBehavior.Session {
|
|
32
32
|
return {
|
|
33
|
-
name: session.
|
|
33
|
+
name: session.via,
|
|
34
34
|
nodeId: session.nodeId,
|
|
35
35
|
peerNodeId: session.peerNodeId,
|
|
36
36
|
fabric: session.fabric?.externalInformation,
|
|
37
|
-
isPeerActive: session.isPeerActive
|
|
37
|
+
isPeerActive: session.isPeerActive,
|
|
38
38
|
lastInteractionTimestamp: session.timestamp,
|
|
39
39
|
lastActiveTimestamp: session.activeTimestamp,
|
|
40
40
|
numberOfActiveSubscriptions: session.subscriptions.size,
|
|
@@ -9,12 +9,11 @@ import { DatatypeModel, FieldElement } from "#model";
|
|
|
9
9
|
import { InteractionServer, PeerSubscription } from "#node/server/InteractionServer.js";
|
|
10
10
|
import { ServerSubscription } from "#node/server/ServerSubscription.js";
|
|
11
11
|
import {
|
|
12
|
-
ChannelManager,
|
|
13
|
-
NoChannelError,
|
|
14
12
|
NodeDiscoveryType,
|
|
15
13
|
PeerAddress,
|
|
16
14
|
PeerAddressSet,
|
|
17
15
|
PeerSet,
|
|
16
|
+
SessionClosedError,
|
|
18
17
|
SessionManager,
|
|
19
18
|
Subscription,
|
|
20
19
|
} from "#protocol";
|
|
@@ -139,11 +138,11 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
139
138
|
if (this.state.persistenceEnabled === false || !(subscription instanceof ServerSubscription)) return;
|
|
140
139
|
|
|
141
140
|
const {
|
|
142
|
-
|
|
141
|
+
request: { attributeRequests, eventRequests, isFabricFiltered },
|
|
143
142
|
session,
|
|
144
143
|
maxInterval,
|
|
145
144
|
sendInterval,
|
|
146
|
-
id,
|
|
145
|
+
subscriptionId: id,
|
|
147
146
|
maxIntervalCeiling,
|
|
148
147
|
minIntervalFloor,
|
|
149
148
|
} = subscription;
|
|
@@ -153,11 +152,10 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
153
152
|
// TODO Remove when we store peer addresses also for operational nodes
|
|
154
153
|
let operationalAddress: ServerAddressUdp | undefined;
|
|
155
154
|
try {
|
|
156
|
-
|
|
157
|
-
operationalAddress = isIpNetworkChannel(channel) ? channel.networkAddress : undefined;
|
|
155
|
+
operationalAddress = isIpNetworkChannel(session.channel) ? session.channel.networkAddress : undefined;
|
|
158
156
|
} catch (error) {
|
|
159
157
|
// Can happen in edge cases, so better catch it and proceed without operational address
|
|
160
|
-
|
|
158
|
+
SessionClosedError.accept(error);
|
|
161
159
|
}
|
|
162
160
|
const peerSubscription: PeerSubscription = {
|
|
163
161
|
subscriptionId: id,
|
|
@@ -184,7 +182,7 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
184
182
|
|
|
185
183
|
#subscriptionCancelled(subscription: Subscription): MaybePromise {
|
|
186
184
|
if (subscription.isCanceledByPeer && this.state.persistenceEnabled !== false) {
|
|
187
|
-
const { id } = subscription;
|
|
185
|
+
const { subscriptionId: id } = subscription;
|
|
188
186
|
const subscriptionIndex = this.state.subscriptions.findIndex(({ subscriptionId }) => id === subscriptionId);
|
|
189
187
|
if (subscriptionIndex !== -1) {
|
|
190
188
|
return this.#removeSubscriptionIndex(subscriptionIndex);
|
|
@@ -230,8 +228,10 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
230
228
|
logger.debug(`Skip reestablishing former subscription to ${peerAddress}`);
|
|
231
229
|
continue;
|
|
232
230
|
}
|
|
233
|
-
logger.debug(
|
|
234
|
-
|
|
231
|
+
logger.debug(
|
|
232
|
+
`Try to reestablish former subscription ${Subscription.idStrOf(subscription)} to ${peerAddress}`,
|
|
233
|
+
);
|
|
234
|
+
if (sessions.maybeSessionFor(peerAddress) !== undefined) {
|
|
235
235
|
logger.debug(`We already have and existing session for peer ${peerAddress}`);
|
|
236
236
|
} else {
|
|
237
237
|
try {
|
|
@@ -254,10 +254,12 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
254
254
|
try {
|
|
255
255
|
if (peerStopList.has(peerAddress)) {
|
|
256
256
|
// To prevent concurrency issues, check again if there is a stop reason for this fabric
|
|
257
|
-
logger.debug(
|
|
257
|
+
logger.debug(
|
|
258
|
+
`Skip re-establishing former subscription ${Subscription.idStrOf(subscriptionId)} to ${peerAddress}`,
|
|
259
|
+
);
|
|
258
260
|
continue;
|
|
259
261
|
}
|
|
260
|
-
const session = sessions.
|
|
262
|
+
const session = sessions.maybeSessionFor(peerAddress);
|
|
261
263
|
if (session === undefined) {
|
|
262
264
|
peerStopList.add(peerAddress);
|
|
263
265
|
logger.debug(`Could not connect to peer ${peerAddress}`);
|
|
@@ -266,7 +268,7 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
266
268
|
await interactionServer.establishFormerSubscription(subscription, session);
|
|
267
269
|
} catch (error) {
|
|
268
270
|
logger.debug(
|
|
269
|
-
`Failed to re-establish former subscription ${subscriptionId} to ${peerAddress}`,
|
|
271
|
+
`Failed to re-establish former subscription ${Subscription.idStrOf(subscriptionId)} to ${peerAddress}`,
|
|
270
272
|
StatusResponseError.is(error)
|
|
271
273
|
? error.code === StatusCode.InvalidSubscription
|
|
272
274
|
? "Subscription no langer valid for peer"
|
|
@@ -116,10 +116,11 @@ export class WebSocketInterface extends RemoteInterface {
|
|
|
116
116
|
|
|
117
117
|
await send({ id: request.id, kind: "ok" });
|
|
118
118
|
|
|
119
|
-
this.addWorker(this.#handleSubscription(response.stream, send)
|
|
119
|
+
this.addWorker(this.#handleSubscription(response.stream, send));
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
async #handleSubscription(stream: LocalResponse.Stream, send: (message: LocalResponse) => Promise<void>) {
|
|
123
|
+
using _streaming = this.join("streaming");
|
|
123
124
|
for await (const update of stream) {
|
|
124
125
|
await send(update.js);
|
|
125
126
|
}
|
|
@@ -87,7 +87,7 @@ export class AccessControlServer extends AccessControlBehavior.with("Extension")
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// TODO handle delete fabric more generically later to remove fabric scoped data
|
|
90
|
-
this.reactTo(fabrics.events.
|
|
90
|
+
this.reactTo(fabrics.events.replaced, this.#updateFabricAcls);
|
|
91
91
|
this.reactTo(fabrics.events.added, this.#updateFabricAcls);
|
|
92
92
|
|
|
93
93
|
this.reactTo(this.events.interactionBegin, this.#handleInteractionBegin);
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import type { RemoteActorContext } from "#behavior/context/server/RemoteActorContext.js";
|
|
7
8
|
import { AdministratorCommissioning } from "#clusters/administrator-commissioning";
|
|
8
|
-
import { Duration, InternalError, Logger, Seconds, Time, Timer } from "#general";
|
|
9
|
+
import { Duration, InternalError, Logger, Seconds, Time, Timer, Worker } from "#general";
|
|
9
10
|
import { AccessLevel } from "#model";
|
|
10
11
|
import {
|
|
11
12
|
assertRemoteActor,
|
|
@@ -138,14 +139,14 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
|
|
|
138
139
|
);
|
|
139
140
|
}
|
|
140
141
|
|
|
141
|
-
logger.debug("Revoking commissioning window
|
|
142
|
+
logger.debug("Revoking commissioning window");
|
|
142
143
|
|
|
143
144
|
await this.#closeCommissioningWindow();
|
|
144
145
|
|
|
145
146
|
if (this.env.has(FailsafeContext)) {
|
|
146
147
|
const failsafeContext = this.env.get(FailsafeContext);
|
|
147
148
|
if (failsafeContext) {
|
|
148
|
-
await failsafeContext.close();
|
|
149
|
+
await failsafeContext.close((this.context as RemoteActorContext).exchange);
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
152
|
}
|
|
@@ -162,7 +163,7 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
|
|
|
162
163
|
// Should never happen, but let's make sure
|
|
163
164
|
throw new InternalError("Commissioning window already initialized.");
|
|
164
165
|
}
|
|
165
|
-
const actor = hasRemoteActor(this.context) ? this.context.session.
|
|
166
|
+
const actor = hasRemoteActor(this.context) ? this.context.session.via : "local actor";
|
|
166
167
|
logger.debug(`Commissioning window timer started for ${commissioningTimeout} seconds for ${actor}.`);
|
|
167
168
|
this.internal.commissioningWindowTimeout = Time.getTimer(
|
|
168
169
|
"Commissioning timeout",
|
|
@@ -181,10 +182,10 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
|
|
|
181
182
|
const removeCallback = this.callback(this.#fabricRemovedCallback);
|
|
182
183
|
|
|
183
184
|
this.internal.stopMonitoringFabricForRemoval = () => {
|
|
184
|
-
adminFabric.
|
|
185
|
+
adminFabric.deleting.off(removeCallback);
|
|
185
186
|
};
|
|
186
187
|
|
|
187
|
-
this.context.session.associatedFabric.
|
|
188
|
+
this.context.session.associatedFabric.deleting.on(removeCallback);
|
|
188
189
|
}
|
|
189
190
|
|
|
190
191
|
/**
|
|
@@ -236,6 +237,7 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
|
|
|
236
237
|
* Closes the commissioning window per the matter specification.
|
|
237
238
|
*/
|
|
238
239
|
async #closeCommissioningWindow() {
|
|
240
|
+
using _closing = this.lifetime.join("closing commissioning window");
|
|
239
241
|
await this.env.get(DeviceCommissioner).endCommissioning();
|
|
240
242
|
}
|
|
241
243
|
|
|
@@ -243,7 +245,12 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
|
|
|
243
245
|
* Close commissioning window on timeout when there's nobody to await the resulting promise
|
|
244
246
|
* */
|
|
245
247
|
#commissioningTimeout() {
|
|
246
|
-
this.env.runtime.add(
|
|
248
|
+
this.env.runtime.add(
|
|
249
|
+
Worker({
|
|
250
|
+
name: "closing commissioning window",
|
|
251
|
+
done: this.#closeCommissioningWindow(),
|
|
252
|
+
}),
|
|
253
|
+
);
|
|
247
254
|
}
|
|
248
255
|
|
|
249
256
|
/**
|
|
@@ -117,7 +117,7 @@ export class BasicInformationServer extends Base {
|
|
|
117
117
|
this.events.startUp.emit({ softwareVersion: this.state.softwareVersion }, this.context);
|
|
118
118
|
|
|
119
119
|
const fabricManager = this.env.get(FabricManager);
|
|
120
|
-
this.reactTo(fabricManager.events.
|
|
120
|
+
this.reactTo(fabricManager.events.leaving, this.#handleFabricLeave);
|
|
121
121
|
}
|
|
122
122
|
|
|
123
123
|
#goingOffline() {
|
|
@@ -128,7 +128,7 @@ export class BasicInformationServer extends Base {
|
|
|
128
128
|
this.events.reachableChanged?.emit({ reachableNewValue: reachable }, this.context);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
#
|
|
131
|
+
#handleFabricLeave({ fabricIndex }: Fabric) {
|
|
132
132
|
this.events.leave.emit({ fabricIndex }, this.context);
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import type { RemoteActorContext } from "#behavior/context/server/RemoteActorContext.js";
|
|
7
8
|
import { AdministratorCommissioningServer } from "#behaviors/administrator-commissioning";
|
|
8
9
|
import { BasicInformationServer } from "#behaviors/basic-information";
|
|
9
10
|
import { AdministratorCommissioning } from "#clusters/administrator-commissioning";
|
|
10
11
|
import { GeneralCommissioning } from "#clusters/general-commissioning";
|
|
11
|
-
import { Bytes, Diagnostic, Logger, MatterFlowError, MaybePromise, Seconds } from "#general";
|
|
12
|
+
import { Bytes, Diagnostic, hex, Logger, MatterFlowError, MaybePromise, Seconds } from "#general";
|
|
12
13
|
import type { ServerNode } from "#node/ServerNode.js";
|
|
13
14
|
import {
|
|
14
15
|
assertRemoteActor,
|
|
@@ -60,7 +61,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
|
|
|
60
61
|
) {
|
|
61
62
|
return;
|
|
62
63
|
}
|
|
63
|
-
logger.debug(`New PASE session
|
|
64
|
+
logger.debug(session.via, `New PASE session, arming failsafe for 60s`);
|
|
64
65
|
await this.#armFailSafe({ breadcrumb: this.state.breadcrumb, expiryLengthSeconds: 60 }, session);
|
|
65
66
|
}
|
|
66
67
|
|
|
@@ -68,7 +69,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
|
|
|
68
69
|
{ breadcrumb, expiryLengthSeconds }: GeneralCommissioning.ArmFailSafeRequest,
|
|
69
70
|
session: SecureSession,
|
|
70
71
|
) {
|
|
71
|
-
NodeSession.assert(session, "
|
|
72
|
+
NodeSession.assert(session, "Failsafe may only be armed on a secure session");
|
|
72
73
|
const commissioner = this.env.get(DeviceCommissioner);
|
|
73
74
|
|
|
74
75
|
try {
|
|
@@ -84,11 +85,15 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
|
|
|
84
85
|
!session.isPase
|
|
85
86
|
) {
|
|
86
87
|
// TODO - should this set status to Status.BusyWithOtherAdmin?
|
|
87
|
-
throw new MatterFlowError("
|
|
88
|
+
throw new MatterFlowError("Cannot arm failsafe using CASE while commissioning window is opened");
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
if (commissioner.isFailsafeArmed) {
|
|
91
|
-
await commissioner.failsafeContext.extend(
|
|
92
|
+
await commissioner.failsafeContext.extend(
|
|
93
|
+
session.fabric,
|
|
94
|
+
Seconds(expiryLengthSeconds),
|
|
95
|
+
(this.context as RemoteActorContext).exchange,
|
|
96
|
+
);
|
|
92
97
|
} else {
|
|
93
98
|
// If ExpiryLengthSeconds is 0 and the fail-safe timer was not armed, then this command invocation SHALL
|
|
94
99
|
// lead to a success response with no side effect against the fail-safe context.
|
|
@@ -118,7 +123,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
|
|
|
118
123
|
} catch (error) {
|
|
119
124
|
MatterFlowError.accept(error);
|
|
120
125
|
|
|
121
|
-
logger.debug(`Error while arming failSafe timer
|
|
126
|
+
logger.debug(`Error while arming failSafe timer:`, error);
|
|
122
127
|
return {
|
|
123
128
|
errorCode: GeneralCommissioning.CommissioningError.BusyWithOtherAdmin,
|
|
124
129
|
debugText: error.message,
|
|
@@ -226,13 +231,13 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
|
|
|
226
231
|
}
|
|
227
232
|
const failsafeContext = commissioner.failsafeContext;
|
|
228
233
|
|
|
229
|
-
SecureSession.assert(session, "
|
|
234
|
+
SecureSession.assert(session, "Commissioning may only complete on a secure session");
|
|
230
235
|
|
|
231
236
|
const timedFabric = failsafeContext.associatedFabric?.fabricIndex;
|
|
232
237
|
if (fabric.fabricIndex !== timedFabric) {
|
|
233
238
|
return {
|
|
234
239
|
errorCode: GeneralCommissioning.CommissioningError.InvalidAuthentication,
|
|
235
|
-
debugText: `Associated fabric ${fabric.fabricIndex} does not match
|
|
240
|
+
debugText: `Associated fabric index ${fabric.fabricIndex} does not match failsafe fabric index ${timedFabric}`,
|
|
236
241
|
};
|
|
237
242
|
}
|
|
238
243
|
|
|
@@ -252,7 +257,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
|
|
|
252
257
|
"Commissioned",
|
|
253
258
|
Diagnostic.dict({
|
|
254
259
|
fabric: `${Bytes.toHex(fabric.operationalId)} (#${fabric.fabricIndex})`,
|
|
255
|
-
node: fabric.nodeId
|
|
260
|
+
node: hex.fixed(fabric.nodeId, 16),
|
|
256
261
|
}),
|
|
257
262
|
);
|
|
258
263
|
|
|
@@ -8,7 +8,7 @@ import { NetworkCommissioningBehavior } from "#behaviors/network-commissioning";
|
|
|
8
8
|
import { Endpoint } from "#endpoint/Endpoint.js";
|
|
9
9
|
import { Immutable, Lifecycle, UnsupportedDependencyError } from "#general";
|
|
10
10
|
import type { ServerNode } from "#node/ServerNode.js";
|
|
11
|
-
import {
|
|
11
|
+
import { FabricManager, FailsafeContext, MessageExchange } from "#protocol";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* {@link FailsafeContext} for {@link ServerNode} API.
|
|
@@ -53,14 +53,8 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
|
|
|
53
53
|
* TODO - it's recommended to reset all state if commissioning bails; currently we perform mandatory restore
|
|
54
54
|
*/
|
|
55
55
|
override async storeEndpointState() {
|
|
56
|
-
// const opcreds = this.#node.state.operationalCredentials;
|
|
57
56
|
this.#storedState = {
|
|
58
57
|
networks: new Map(),
|
|
59
|
-
/*
|
|
60
|
-
nocs: opcreds.nocs.map(noc => ({ ...noc })),
|
|
61
|
-
fabrics: opcreds.fabrics.map(fabric => ({ ...fabric })),
|
|
62
|
-
trustedRootCertificates: [...opcreds.trustedRootCertificates],
|
|
63
|
-
*/
|
|
64
58
|
};
|
|
65
59
|
|
|
66
60
|
if (!this.#node.behaviors.has(NetworkCommissioningBehavior)) {
|
|
@@ -87,12 +81,6 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
|
|
|
87
81
|
});
|
|
88
82
|
}
|
|
89
83
|
|
|
90
|
-
override async revokeFabric(fabric: Fabric) {
|
|
91
|
-
await fabric.remove();
|
|
92
|
-
|
|
93
|
-
// await this.#restoreOperationalCredentials();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
84
|
override async restoreBreadcrumb() {
|
|
97
85
|
await this.#node.act(this.restoreBreadcrumb.name, async agent => {
|
|
98
86
|
const tx = agent.context.transaction;
|
|
@@ -102,7 +90,7 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
|
|
|
102
90
|
});
|
|
103
91
|
}
|
|
104
92
|
|
|
105
|
-
override async rollback() {
|
|
93
|
+
override async rollback(currentExchange?: MessageExchange) {
|
|
106
94
|
if (!this.fabricIndex && this.hasRootCert) {
|
|
107
95
|
// Update the fabric details if needed (like Trusted Root certificates) Only if fabric was not added because
|
|
108
96
|
// else all data gets updated anyway
|
|
@@ -116,7 +104,7 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
|
|
|
116
104
|
}
|
|
117
105
|
}
|
|
118
106
|
|
|
119
|
-
return super.rollback();
|
|
107
|
+
return super.rollback(currentExchange);
|
|
120
108
|
}
|
|
121
109
|
|
|
122
110
|
/*
|
|
@@ -308,7 +308,7 @@ export class GeneralDiagnosticsServer extends Base {
|
|
|
308
308
|
this.internal.lastTotalOperationalHoursTimer = Time.getPeriodicTimer(
|
|
309
309
|
"GeneralDiagnostics.operationalHours",
|
|
310
310
|
Minutes(5),
|
|
311
|
-
this.callback(this.#updateTotalOperationalHoursCounter),
|
|
311
|
+
this.callback(this.#updateTotalOperationalHoursCounter, { lock: true }),
|
|
312
312
|
).start();
|
|
313
313
|
|
|
314
314
|
await this.#updateNetworkList();
|
|
@@ -86,7 +86,7 @@ export class GroupKeyManagementServer extends GroupKeyManagementBehavior {
|
|
|
86
86
|
// Added fabric always have no groups, so no need to initialize anything on adding the fabric
|
|
87
87
|
|
|
88
88
|
// Fabric was updated, so basically newly created, so we need to reinitialize the group key sets
|
|
89
|
-
this.reactTo(fabrics.events.
|
|
89
|
+
this.reactTo(fabrics.events.replaced, this.#handleFabricUpdate);
|
|
90
90
|
|
|
91
91
|
// When we have group key sets, we need to ensure that they are initialized on the Fabric group manager
|
|
92
92
|
if (this.state.groupKeySets.length) {
|