@matter/node 0.16.0-alpha.0-20251004-92135c7df → 0.16.0-alpha.0-20251011-d8942d7d5
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 +4 -0
- package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
- package/dist/cjs/behavior/Behavior.js +7 -1
- package/dist/cjs/behavior/Behavior.js.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.js +67 -3
- package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.d.ts +4 -9
- package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.js +9 -12
- package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/cjs/behavior/state/managed/NameResolver.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/NameResolver.js.map +1 -1
- package/dist/cjs/behavior/state/managed/values/ValueCaster.d.ts +3 -2
- package/dist/cjs/behavior/state/managed/values/ValueCaster.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/values/ValueCaster.js +16 -3
- package/dist/cjs/behavior/state/managed/values/ValueCaster.js.map +1 -1
- package/dist/cjs/behavior/supervision/RootSupervisor.d.ts +4 -4
- package/dist/cjs/behavior/supervision/RootSupervisor.d.ts.map +1 -1
- package/dist/cjs/behavior/supervision/RootSupervisor.js +8 -10
- package/dist/cjs/behavior/supervision/RootSupervisor.js.map +1 -1
- package/dist/cjs/behavior/supervision/ValueSupervisor.d.ts +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts +12 -5
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +17 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningServer.js +2 -1
- package/dist/cjs/behavior/system/commissioning/CommissioningServer.js.map +1 -1
- package/dist/cjs/behavior/system/controller/ControllerBehavior.d.ts +7 -0
- package/dist/cjs/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
- package/dist/cjs/behavior/system/controller/ControllerBehavior.js +10 -4
- package/dist/cjs/behavior/system/controller/ControllerBehavior.js.map +1 -1
- package/dist/cjs/behavior/system/http/HttpInterface.d.ts +36 -0
- package/dist/cjs/behavior/system/http/HttpInterface.d.ts.map +1 -0
- package/dist/cjs/behavior/system/http/HttpInterface.js +282 -0
- package/dist/cjs/behavior/system/http/HttpInterface.js.map +6 -0
- package/dist/cjs/behavior/system/http/HttpServer.d.ts +30 -0
- package/dist/cjs/behavior/system/http/HttpServer.d.ts.map +1 -0
- package/dist/cjs/behavior/system/http/HttpServer.js +51 -0
- package/dist/cjs/behavior/system/http/HttpServer.js.map +6 -0
- package/dist/cjs/behavior/system/http/index.d.ts +8 -0
- package/dist/cjs/behavior/system/http/index.d.ts.map +1 -0
- package/dist/cjs/behavior/system/http/index.js +25 -0
- package/dist/cjs/behavior/system/http/index.js.map +6 -0
- package/dist/cjs/behavior/system/index/IndexBehavior.d.ts +4 -4
- package/dist/cjs/behavior/system/index/IndexBehavior.d.ts.map +1 -1
- package/dist/cjs/behavior/system/index/IndexBehavior.js +9 -4
- package/dist/cjs/behavior/system/index/IndexBehavior.js.map +1 -1
- package/dist/cjs/behavior/system/index.d.ts +4 -0
- package/dist/cjs/behavior/system/index.d.ts.map +1 -1
- package/dist/cjs/behavior/system/index.js +4 -0
- package/dist/cjs/behavior/system/index.js.map +1 -1
- package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts +22 -0
- package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts.map +1 -0
- package/dist/cjs/behavior/system/mqtt/MqttInterface.js +351 -0
- package/dist/cjs/behavior/system/mqtt/MqttInterface.js.map +6 -0
- package/dist/cjs/behavior/system/mqtt/MqttServer.d.ts +36 -0
- package/dist/cjs/behavior/system/mqtt/MqttServer.d.ts.map +1 -0
- package/dist/cjs/behavior/system/mqtt/MqttServer.js +55 -0
- package/dist/cjs/behavior/system/mqtt/MqttServer.js.map +6 -0
- package/dist/cjs/behavior/system/mqtt/index.d.ts +8 -0
- package/dist/cjs/behavior/system/mqtt/index.d.ts.map +1 -0
- package/dist/cjs/behavior/system/mqtt/index.js +25 -0
- package/dist/cjs/behavior/system/mqtt/index.js.map +6 -0
- package/dist/cjs/behavior/system/network/NetworkClient.d.ts +32 -3
- package/dist/cjs/behavior/system/network/NetworkClient.d.ts.map +1 -1
- package/dist/cjs/behavior/system/network/NetworkClient.js +100 -18
- package/dist/cjs/behavior/system/network/NetworkClient.js.map +1 -1
- package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.d.ts +2 -1
- package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.d.ts.map +1 -1
- package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.js +7 -5
- package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.js.map +1 -1
- package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts +41 -0
- package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/RemoteInterface.js +105 -0
- package/dist/cjs/behavior/system/remote/RemoteInterface.js.map +6 -0
- package/dist/cjs/behavior/system/remote/RemoteServer.d.ts +61 -0
- package/dist/cjs/behavior/system/remote/RemoteServer.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/RemoteServer.js +118 -0
- package/dist/cjs/behavior/system/remote/RemoteServer.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/Api.d.ts +36 -0
- package/dist/cjs/behavior/system/remote/api/Api.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/Api.js +156 -0
- package/dist/cjs/behavior/system/remote/api/Api.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/ApiPath.d.ts +32 -0
- package/dist/cjs/behavior/system/remote/api/ApiPath.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/ApiPath.js +101 -0
- package/dist/cjs/behavior/system/remote/api/ApiPath.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/ApiResource.d.ts +102 -0
- package/dist/cjs/behavior/system/remote/api/ApiResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/ApiResource.js +123 -0
- package/dist/cjs/behavior/system/remote/api/ApiResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/Envelope.d.ts +53 -0
- package/dist/cjs/behavior/system/remote/api/Envelope.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/Envelope.js +107 -0
- package/dist/cjs/behavior/system/remote/api/Envelope.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/LocalResponse.d.ts +28 -0
- package/dist/cjs/behavior/system/remote/api/LocalResponse.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/LocalResponse.js +22 -0
- package/dist/cjs/behavior/system/remote/api/LocalResponse.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/RemoteRequest.d.ts +43 -0
- package/dist/cjs/behavior/system/remote/api/RemoteRequest.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/RemoteRequest.js +55 -0
- package/dist/cjs/behavior/system/remote/api/RemoteRequest.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/RemoteResponse.d.ts +37 -0
- package/dist/cjs/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/RemoteResponse.js +52 -0
- package/dist/cjs/behavior/system/remote/api/RemoteResponse.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/index.d.ts +13 -0
- package/dist/cjs/behavior/system/remote/api/index.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/index.js +30 -0
- package/dist/cjs/behavior/system/remote/api/index.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.d.ts +22 -0
- package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.js +69 -0
- package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.d.ts +25 -0
- package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.js +76 -0
- package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/CommandResource.d.ts +26 -0
- package/dist/cjs/behavior/system/remote/api/resources/CommandResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/CommandResource.js +83 -0
- package/dist/cjs/behavior/system/remote/api/resources/CommandResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.d.ts +22 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.js +52 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.d.ts +34 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.js +78 -0
- package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/NodeResource.d.ts +20 -0
- package/dist/cjs/behavior/system/remote/api/resources/NodeResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/NodeResource.js +74 -0
- package/dist/cjs/behavior/system/remote/api/resources/NodeResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.d.ts +28 -0
- package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.js +123 -0
- package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.d.ts +22 -0
- package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.js +74 -0
- package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.js.map +6 -0
- package/dist/cjs/behavior/system/remote/api/resources/index.d.ts +13 -0
- package/dist/cjs/behavior/system/remote/api/resources/index.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/resources/index.js +30 -0
- package/dist/cjs/behavior/system/remote/api/resources/index.js.map +6 -0
- package/dist/cjs/behavior/system/remote/index.d.ts +9 -0
- package/dist/cjs/behavior/system/remote/index.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/index.js +26 -0
- package/dist/cjs/behavior/system/remote/index.js.map +6 -0
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js +2 -3
- package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
- package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts +16 -0
- package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -0
- package/dist/cjs/behavior/system/websocket/WebSocketInterface.js +171 -0
- package/dist/cjs/behavior/system/websocket/WebSocketInterface.js.map +6 -0
- package/dist/cjs/behavior/system/websocket/WebSocketServer.d.ts +30 -0
- package/dist/cjs/behavior/system/websocket/WebSocketServer.d.ts.map +1 -0
- package/dist/cjs/behavior/system/websocket/WebSocketServer.js +51 -0
- package/dist/cjs/behavior/system/websocket/WebSocketServer.js.map +6 -0
- package/dist/cjs/behavior/system/websocket/index.d.ts +8 -0
- package/dist/cjs/behavior/system/websocket/index.d.ts.map +1 -0
- package/dist/cjs/behavior/system/websocket/index.js +25 -0
- package/dist/cjs/behavior/system/websocket/index.js.map +6 -0
- package/dist/cjs/endpoint/Agent.js +1 -1
- package/dist/cjs/endpoint/Agent.js.map +1 -1
- package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/cjs/endpoint/Endpoint.js +6 -4
- package/dist/cjs/endpoint/Endpoint.js.map +1 -1
- package/dist/cjs/endpoint/properties/Behaviors.d.ts +4 -0
- package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/Behaviors.js +11 -2
- package/dist/cjs/endpoint/properties/Behaviors.js.map +1 -1
- package/dist/cjs/endpoint/properties/ClientNodeEndpoints.d.ts +20 -0
- package/dist/cjs/endpoint/properties/ClientNodeEndpoints.d.ts.map +1 -0
- package/dist/cjs/endpoint/properties/ClientNodeEndpoints.js +56 -0
- package/dist/cjs/endpoint/properties/ClientNodeEndpoints.js.map +6 -0
- package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts +4 -0
- package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/EndpointInitializer.js +6 -0
- package/dist/cjs/endpoint/properties/EndpointInitializer.js.map +1 -1
- package/dist/cjs/endpoint/properties/Endpoints.d.ts +1 -0
- package/dist/cjs/endpoint/properties/Endpoints.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/Endpoints.js +3 -0
- package/dist/cjs/endpoint/properties/Endpoints.js.map +1 -1
- package/dist/cjs/endpoint/type/EndpointType.d.ts +2 -0
- package/dist/cjs/endpoint/type/EndpointType.d.ts.map +1 -1
- package/dist/cjs/endpoint/type/EndpointType.js +5 -0
- package/dist/cjs/endpoint/type/EndpointType.js.map +2 -2
- package/dist/cjs/node/ClientNode.d.ts +4 -2
- package/dist/cjs/node/ClientNode.d.ts.map +1 -1
- package/dist/cjs/node/ClientNode.js +5 -1
- package/dist/cjs/node/ClientNode.js.map +1 -1
- package/dist/cjs/node/Node.js +1 -1
- package/dist/cjs/node/NodeLifecycle.d.ts +1 -1
- package/dist/cjs/node/NodeLifecycle.d.ts.map +1 -1
- package/dist/cjs/node/NodeLifecycle.js +1 -1
- package/dist/cjs/node/NodeLifecycle.js.map +1 -1
- package/dist/cjs/node/client/ClientEndpointInitializer.d.ts +2 -0
- package/dist/cjs/node/client/ClientEndpointInitializer.d.ts.map +1 -1
- package/dist/cjs/node/client/ClientEndpointInitializer.js +33 -0
- package/dist/cjs/node/client/ClientEndpointInitializer.js.map +1 -1
- package/dist/cjs/node/client/ClientEventEmitter.d.ts +3 -3
- package/dist/cjs/node/client/ClientEventEmitter.d.ts.map +1 -1
- package/dist/cjs/node/client/ClientNodeInteraction.d.ts +1 -0
- package/dist/cjs/node/client/ClientNodeInteraction.d.ts.map +1 -1
- package/dist/cjs/node/client/ClientNodeInteraction.js +6 -0
- package/dist/cjs/node/client/ClientNodeInteraction.js.map +1 -1
- package/dist/cjs/node/client/ClientStructure.d.ts +2 -0
- package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
- package/dist/cjs/node/client/ClientStructure.js +18 -5
- package/dist/cjs/node/client/ClientStructure.js.map +1 -1
- package/dist/cjs/node/client/Peers.d.ts +6 -0
- package/dist/cjs/node/client/Peers.d.ts.map +1 -1
- package/dist/cjs/node/client/Peers.js +55 -3
- package/dist/cjs/node/client/Peers.js.map +2 -2
- package/dist/cjs/node/index.d.ts +1 -0
- package/dist/cjs/node/index.d.ts.map +1 -1
- package/dist/cjs/node/index.js +1 -0
- package/dist/cjs/node/index.js.map +1 -1
- package/dist/cjs/node/integration/ChangeNotificationService.d.ts +56 -0
- package/dist/cjs/node/integration/ChangeNotificationService.d.ts.map +1 -0
- package/dist/cjs/node/integration/ChangeNotificationService.js +93 -0
- package/dist/cjs/node/integration/ChangeNotificationService.js.map +6 -0
- package/dist/cjs/node/{server → integration}/ProtocolService.d.ts +15 -0
- package/dist/cjs/node/integration/ProtocolService.d.ts.map +1 -0
- package/dist/cjs/node/{server → integration}/ProtocolService.js +26 -51
- package/dist/cjs/node/integration/ProtocolService.js.map +6 -0
- package/dist/cjs/node/integration/StateStream.d.ts +87 -0
- package/dist/cjs/node/integration/StateStream.d.ts.map +1 -0
- package/dist/cjs/node/integration/StateStream.js +276 -0
- package/dist/cjs/node/integration/StateStream.js.map +6 -0
- package/dist/cjs/node/integration/index.d.ts +9 -0
- package/dist/cjs/node/integration/index.d.ts.map +1 -0
- package/dist/cjs/node/integration/index.js +26 -0
- package/dist/cjs/node/integration/index.js.map +6 -0
- package/dist/cjs/node/server/OnlineServerInteraction.d.ts +1 -0
- package/dist/cjs/node/server/OnlineServerInteraction.d.ts.map +1 -1
- package/dist/cjs/node/server/OnlineServerInteraction.js +4 -1
- package/dist/cjs/node/server/OnlineServerInteraction.js.map +1 -1
- package/dist/cjs/node/server/ServerEnvironment.d.ts.map +1 -1
- package/dist/cjs/node/server/ServerEnvironment.js +6 -0
- package/dist/cjs/node/server/ServerEnvironment.js.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/cjs/node/server/ServerSubscription.js +2 -2
- package/dist/cjs/node/server/index.d.ts +0 -1
- package/dist/cjs/node/server/index.d.ts.map +1 -1
- package/dist/cjs/node/server/index.js +0 -1
- package/dist/cjs/node/server/index.js.map +1 -1
- package/dist/cjs/storage/client/ClientNodeStores.d.ts.map +1 -1
- package/dist/cjs/storage/client/ClientNodeStores.js.map +1 -1
- package/dist/esm/behavior/Behavior.d.ts +4 -0
- package/dist/esm/behavior/Behavior.d.ts.map +1 -1
- package/dist/esm/behavior/Behavior.js +7 -1
- package/dist/esm/behavior/Behavior.js.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.js +70 -4
- package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.d.ts +4 -9
- package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.js +9 -13
- package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/esm/behavior/state/managed/NameResolver.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/NameResolver.js.map +1 -1
- package/dist/esm/behavior/state/managed/values/ValueCaster.d.ts +3 -2
- package/dist/esm/behavior/state/managed/values/ValueCaster.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/values/ValueCaster.js +16 -3
- package/dist/esm/behavior/state/managed/values/ValueCaster.js.map +1 -1
- package/dist/esm/behavior/supervision/RootSupervisor.d.ts +4 -4
- package/dist/esm/behavior/supervision/RootSupervisor.d.ts.map +1 -1
- package/dist/esm/behavior/supervision/RootSupervisor.js +8 -11
- package/dist/esm/behavior/supervision/RootSupervisor.js.map +1 -1
- package/dist/esm/behavior/supervision/ValueSupervisor.d.ts +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts +12 -5
- package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningClient.js +19 -1
- package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
- package/dist/esm/behavior/system/commissioning/CommissioningServer.js +2 -1
- package/dist/esm/behavior/system/commissioning/CommissioningServer.js.map +1 -1
- package/dist/esm/behavior/system/controller/ControllerBehavior.d.ts +7 -0
- package/dist/esm/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
- package/dist/esm/behavior/system/controller/ControllerBehavior.js +10 -5
- package/dist/esm/behavior/system/controller/ControllerBehavior.js.map +1 -1
- package/dist/esm/behavior/system/http/HttpInterface.d.ts +36 -0
- package/dist/esm/behavior/system/http/HttpInterface.d.ts.map +1 -0
- package/dist/esm/behavior/system/http/HttpInterface.js +273 -0
- package/dist/esm/behavior/system/http/HttpInterface.js.map +6 -0
- package/dist/esm/behavior/system/http/HttpServer.d.ts +30 -0
- package/dist/esm/behavior/system/http/HttpServer.d.ts.map +1 -0
- package/dist/esm/behavior/system/http/HttpServer.js +31 -0
- package/dist/esm/behavior/system/http/HttpServer.js.map +6 -0
- package/dist/esm/behavior/system/http/index.d.ts +8 -0
- package/dist/esm/behavior/system/http/index.d.ts.map +1 -0
- package/dist/esm/behavior/system/http/index.js +8 -0
- package/dist/esm/behavior/system/http/index.js.map +6 -0
- package/dist/esm/behavior/system/index/IndexBehavior.d.ts +4 -4
- package/dist/esm/behavior/system/index/IndexBehavior.d.ts.map +1 -1
- package/dist/esm/behavior/system/index/IndexBehavior.js +9 -4
- package/dist/esm/behavior/system/index/IndexBehavior.js.map +1 -1
- package/dist/esm/behavior/system/index.d.ts +4 -0
- package/dist/esm/behavior/system/index.d.ts.map +1 -1
- package/dist/esm/behavior/system/index.js +4 -0
- package/dist/esm/behavior/system/index.js.map +1 -1
- package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts +22 -0
- package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts.map +1 -0
- package/dist/esm/behavior/system/mqtt/MqttInterface.js +341 -0
- package/dist/esm/behavior/system/mqtt/MqttInterface.js.map +6 -0
- package/dist/esm/behavior/system/mqtt/MqttServer.d.ts +36 -0
- package/dist/esm/behavior/system/mqtt/MqttServer.d.ts.map +1 -0
- package/dist/esm/behavior/system/mqtt/MqttServer.js +35 -0
- package/dist/esm/behavior/system/mqtt/MqttServer.js.map +6 -0
- package/dist/esm/behavior/system/mqtt/index.d.ts +8 -0
- package/dist/esm/behavior/system/mqtt/index.d.ts.map +1 -0
- package/dist/esm/behavior/system/mqtt/index.js +8 -0
- package/dist/esm/behavior/system/mqtt/index.js.map +6 -0
- package/dist/esm/behavior/system/network/NetworkClient.d.ts +32 -3
- package/dist/esm/behavior/system/network/NetworkClient.d.ts.map +1 -1
- package/dist/esm/behavior/system/network/NetworkClient.js +101 -19
- package/dist/esm/behavior/system/network/NetworkClient.js.map +1 -1
- package/dist/esm/behavior/system/product-description/ProductDescriptionServer.d.ts +2 -1
- package/dist/esm/behavior/system/product-description/ProductDescriptionServer.d.ts.map +1 -1
- package/dist/esm/behavior/system/product-description/ProductDescriptionServer.js +8 -6
- package/dist/esm/behavior/system/product-description/ProductDescriptionServer.js.map +1 -1
- package/dist/esm/behavior/system/remote/RemoteInterface.d.ts +41 -0
- package/dist/esm/behavior/system/remote/RemoteInterface.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/RemoteInterface.js +85 -0
- package/dist/esm/behavior/system/remote/RemoteInterface.js.map +6 -0
- package/dist/esm/behavior/system/remote/RemoteServer.d.ts +61 -0
- package/dist/esm/behavior/system/remote/RemoteServer.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/RemoteServer.js +98 -0
- package/dist/esm/behavior/system/remote/RemoteServer.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/Api.d.ts +36 -0
- package/dist/esm/behavior/system/remote/api/Api.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/Api.js +136 -0
- package/dist/esm/behavior/system/remote/api/Api.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/ApiPath.d.ts +32 -0
- package/dist/esm/behavior/system/remote/api/ApiPath.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/ApiPath.js +81 -0
- package/dist/esm/behavior/system/remote/api/ApiPath.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/ApiResource.d.ts +102 -0
- package/dist/esm/behavior/system/remote/api/ApiResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/ApiResource.js +103 -0
- package/dist/esm/behavior/system/remote/api/ApiResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/Envelope.d.ts +53 -0
- package/dist/esm/behavior/system/remote/api/Envelope.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/Envelope.js +87 -0
- package/dist/esm/behavior/system/remote/api/Envelope.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/LocalResponse.d.ts +28 -0
- package/dist/esm/behavior/system/remote/api/LocalResponse.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/LocalResponse.js +6 -0
- package/dist/esm/behavior/system/remote/api/LocalResponse.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/RemoteRequest.d.ts +43 -0
- package/dist/esm/behavior/system/remote/api/RemoteRequest.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/RemoteRequest.js +35 -0
- package/dist/esm/behavior/system/remote/api/RemoteRequest.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/RemoteResponse.d.ts +37 -0
- package/dist/esm/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/RemoteResponse.js +32 -0
- package/dist/esm/behavior/system/remote/api/RemoteResponse.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/index.d.ts +13 -0
- package/dist/esm/behavior/system/remote/api/index.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/index.js +13 -0
- package/dist/esm/behavior/system/remote/api/index.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.d.ts +22 -0
- package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.js +49 -0
- package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/ChangesResource.d.ts +25 -0
- package/dist/esm/behavior/system/remote/api/resources/ChangesResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/ChangesResource.js +56 -0
- package/dist/esm/behavior/system/remote/api/resources/ChangesResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/CommandResource.d.ts +26 -0
- package/dist/esm/behavior/system/remote/api/resources/CommandResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/CommandResource.js +63 -0
- package/dist/esm/behavior/system/remote/api/resources/CommandResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.d.ts +22 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.js +32 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointResource.d.ts +34 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointResource.js +58 -0
- package/dist/esm/behavior/system/remote/api/resources/EndpointResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/NodeResource.d.ts +20 -0
- package/dist/esm/behavior/system/remote/api/resources/NodeResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/NodeResource.js +54 -0
- package/dist/esm/behavior/system/remote/api/resources/NodeResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/PropertyResource.d.ts +28 -0
- package/dist/esm/behavior/system/remote/api/resources/PropertyResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/PropertyResource.js +103 -0
- package/dist/esm/behavior/system/remote/api/resources/PropertyResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.d.ts +22 -0
- package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.js +54 -0
- package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.js.map +6 -0
- package/dist/esm/behavior/system/remote/api/resources/index.d.ts +13 -0
- package/dist/esm/behavior/system/remote/api/resources/index.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/resources/index.js +13 -0
- package/dist/esm/behavior/system/remote/api/resources/index.js.map +6 -0
- package/dist/esm/behavior/system/remote/index.d.ts +9 -0
- package/dist/esm/behavior/system/remote/index.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/index.js +9 -0
- package/dist/esm/behavior/system/remote/index.js.map +6 -0
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js +2 -3
- package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
- package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts +16 -0
- package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -0
- package/dist/esm/behavior/system/websocket/WebSocketInterface.js +151 -0
- package/dist/esm/behavior/system/websocket/WebSocketInterface.js.map +6 -0
- package/dist/esm/behavior/system/websocket/WebSocketServer.d.ts +30 -0
- package/dist/esm/behavior/system/websocket/WebSocketServer.d.ts.map +1 -0
- package/dist/esm/behavior/system/websocket/WebSocketServer.js +31 -0
- package/dist/esm/behavior/system/websocket/WebSocketServer.js.map +6 -0
- package/dist/esm/behavior/system/websocket/index.d.ts +8 -0
- package/dist/esm/behavior/system/websocket/index.d.ts.map +1 -0
- package/dist/esm/behavior/system/websocket/index.js +8 -0
- package/dist/esm/behavior/system/websocket/index.js.map +6 -0
- package/dist/esm/endpoint/Agent.js +1 -1
- package/dist/esm/endpoint/Agent.js.map +1 -1
- package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/esm/endpoint/Endpoint.js +7 -4
- package/dist/esm/endpoint/Endpoint.js.map +1 -1
- package/dist/esm/endpoint/properties/Behaviors.d.ts +4 -0
- package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/Behaviors.js +11 -2
- package/dist/esm/endpoint/properties/Behaviors.js.map +1 -1
- package/dist/esm/endpoint/properties/ClientNodeEndpoints.d.ts +20 -0
- package/dist/esm/endpoint/properties/ClientNodeEndpoints.d.ts.map +1 -0
- package/dist/esm/endpoint/properties/ClientNodeEndpoints.js +36 -0
- package/dist/esm/endpoint/properties/ClientNodeEndpoints.js.map +6 -0
- package/dist/esm/endpoint/properties/EndpointInitializer.d.ts +4 -0
- package/dist/esm/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/EndpointInitializer.js +6 -0
- package/dist/esm/endpoint/properties/EndpointInitializer.js.map +1 -1
- package/dist/esm/endpoint/properties/Endpoints.d.ts +1 -0
- package/dist/esm/endpoint/properties/Endpoints.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/Endpoints.js +3 -0
- package/dist/esm/endpoint/properties/Endpoints.js.map +1 -1
- package/dist/esm/endpoint/type/EndpointType.d.ts +2 -0
- package/dist/esm/endpoint/type/EndpointType.d.ts.map +1 -1
- package/dist/esm/endpoint/type/EndpointType.js +5 -0
- package/dist/esm/endpoint/type/EndpointType.js.map +2 -2
- package/dist/esm/node/ClientNode.d.ts +4 -2
- package/dist/esm/node/ClientNode.d.ts.map +1 -1
- package/dist/esm/node/ClientNode.js +5 -1
- package/dist/esm/node/ClientNode.js.map +1 -1
- package/dist/esm/node/Node.js +1 -1
- package/dist/esm/node/NodeLifecycle.d.ts +1 -1
- package/dist/esm/node/NodeLifecycle.d.ts.map +1 -1
- package/dist/esm/node/NodeLifecycle.js +1 -1
- package/dist/esm/node/NodeLifecycle.js.map +1 -1
- package/dist/esm/node/client/ClientEndpointInitializer.d.ts +2 -0
- package/dist/esm/node/client/ClientEndpointInitializer.d.ts.map +1 -1
- package/dist/esm/node/client/ClientEndpointInitializer.js +33 -0
- package/dist/esm/node/client/ClientEndpointInitializer.js.map +1 -1
- package/dist/esm/node/client/ClientEventEmitter.d.ts +3 -3
- package/dist/esm/node/client/ClientEventEmitter.d.ts.map +1 -1
- package/dist/esm/node/client/ClientNodeInteraction.d.ts +1 -0
- package/dist/esm/node/client/ClientNodeInteraction.d.ts.map +1 -1
- package/dist/esm/node/client/ClientNodeInteraction.js +6 -0
- package/dist/esm/node/client/ClientNodeInteraction.js.map +1 -1
- package/dist/esm/node/client/ClientStructure.d.ts +2 -0
- package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
- package/dist/esm/node/client/ClientStructure.js +18 -5
- package/dist/esm/node/client/ClientStructure.js.map +1 -1
- package/dist/esm/node/client/Peers.d.ts +6 -0
- package/dist/esm/node/client/Peers.d.ts.map +1 -1
- package/dist/esm/node/client/Peers.js +57 -5
- package/dist/esm/node/client/Peers.js.map +1 -1
- package/dist/esm/node/index.d.ts +1 -0
- package/dist/esm/node/index.d.ts.map +1 -1
- package/dist/esm/node/index.js +1 -0
- package/dist/esm/node/index.js.map +1 -1
- package/dist/esm/node/integration/ChangeNotificationService.d.ts +56 -0
- package/dist/esm/node/integration/ChangeNotificationService.d.ts.map +1 -0
- package/dist/esm/node/integration/ChangeNotificationService.js +73 -0
- package/dist/esm/node/integration/ChangeNotificationService.js.map +6 -0
- package/dist/esm/node/{server → integration}/ProtocolService.d.ts +15 -0
- package/dist/esm/node/integration/ProtocolService.d.ts.map +1 -0
- package/dist/esm/node/{server → integration}/ProtocolService.js +26 -52
- package/dist/esm/node/integration/ProtocolService.js.map +6 -0
- package/dist/esm/node/integration/StateStream.d.ts +87 -0
- package/dist/esm/node/integration/StateStream.d.ts.map +1 -0
- package/dist/esm/node/integration/StateStream.js +256 -0
- package/dist/esm/node/integration/StateStream.js.map +6 -0
- package/dist/esm/node/integration/index.d.ts +9 -0
- package/dist/esm/node/integration/index.d.ts.map +1 -0
- package/dist/esm/node/integration/index.js +9 -0
- package/dist/esm/node/integration/index.js.map +6 -0
- package/dist/esm/node/server/OnlineServerInteraction.d.ts +1 -0
- package/dist/esm/node/server/OnlineServerInteraction.d.ts.map +1 -1
- package/dist/esm/node/server/OnlineServerInteraction.js +4 -1
- package/dist/esm/node/server/OnlineServerInteraction.js.map +1 -1
- package/dist/esm/node/server/ServerEnvironment.d.ts.map +1 -1
- package/dist/esm/node/server/ServerEnvironment.js +7 -1
- package/dist/esm/node/server/ServerEnvironment.js.map +1 -1
- package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
- package/dist/esm/node/server/ServerSubscription.js +2 -2
- package/dist/esm/node/server/index.d.ts +0 -1
- package/dist/esm/node/server/index.d.ts.map +1 -1
- package/dist/esm/node/server/index.js +0 -1
- package/dist/esm/node/server/index.js.map +1 -1
- package/dist/esm/storage/client/ClientNodeStores.d.ts.map +1 -1
- package/dist/esm/storage/client/ClientNodeStores.js.map +1 -1
- package/package.json +7 -7
- package/src/behavior/Behavior.ts +8 -1
- package/src/behavior/internal/BehaviorBacking.ts +82 -2
- package/src/behavior/state/managed/Datasource.ts +20 -26
- package/src/behavior/state/managed/NameResolver.ts +1 -1
- package/src/behavior/state/managed/values/ValueCaster.ts +21 -5
- package/src/behavior/supervision/RootSupervisor.ts +16 -11
- package/src/behavior/supervision/ValueSupervisor.ts +1 -1
- package/src/behavior/system/commissioning/CommissioningClient.ts +34 -6
- package/src/behavior/system/commissioning/CommissioningServer.ts +2 -3
- package/src/behavior/system/controller/ControllerBehavior.ts +13 -7
- package/src/behavior/system/http/HttpInterface.ts +326 -0
- package/src/behavior/system/http/HttpServer.ts +32 -0
- package/src/behavior/system/http/index.ts +8 -0
- package/src/behavior/system/index/IndexBehavior.ts +14 -6
- package/src/behavior/system/index.ts +4 -0
- package/src/behavior/system/mqtt/MqttInterface.ts +414 -0
- package/src/behavior/system/mqtt/MqttServer.ts +38 -0
- package/src/behavior/system/mqtt/index.ts +8 -0
- package/src/behavior/system/network/NetworkClient.ts +124 -24
- package/src/behavior/system/product-description/ProductDescriptionServer.ts +7 -5
- package/src/behavior/system/remote/RemoteInterface.ts +119 -0
- package/src/behavior/system/remote/RemoteServer.ts +132 -0
- package/src/behavior/system/remote/api/Api.ts +179 -0
- package/src/behavior/system/remote/api/ApiPath.ts +101 -0
- package/src/behavior/system/remote/api/ApiResource.ts +169 -0
- package/src/behavior/system/remote/api/Envelope.ts +112 -0
- package/src/behavior/system/remote/api/LocalResponse.ts +37 -0
- package/src/behavior/system/remote/api/RemoteRequest.ts +88 -0
- package/src/behavior/system/remote/api/RemoteResponse.ts +70 -0
- package/src/behavior/system/remote/api/index.ts +13 -0
- package/src/behavior/system/remote/api/resources/BehaviorResource.ts +66 -0
- package/src/behavior/system/remote/api/resources/ChangesResource.ts +75 -0
- package/src/behavior/system/remote/api/resources/CommandResource.ts +91 -0
- package/src/behavior/system/remote/api/resources/EndpointContainerResource.ts +45 -0
- package/src/behavior/system/remote/api/resources/EndpointResource.ts +75 -0
- package/src/behavior/system/remote/api/resources/NodeResource.ts +71 -0
- package/src/behavior/system/remote/api/resources/PropertyResource.ts +124 -0
- package/src/behavior/system/remote/api/resources/ServerNodeResource.ts +63 -0
- package/src/behavior/system/remote/api/resources/index.ts +13 -0
- package/src/behavior/system/remote/index.ts +9 -0
- package/src/behavior/system/subscriptions/SubscriptionsServer.ts +2 -3
- package/src/behavior/system/websocket/WebSocketInterface.ts +127 -0
- package/src/behavior/system/websocket/WebSocketServer.ts +32 -0
- package/src/behavior/system/websocket/index.ts +8 -0
- package/src/endpoint/Agent.ts +1 -1
- package/src/endpoint/Endpoint.ts +10 -4
- package/src/endpoint/properties/Behaviors.ts +15 -2
- package/src/endpoint/properties/ClientNodeEndpoints.ts +38 -0
- package/src/endpoint/properties/EndpointInitializer.ts +7 -0
- package/src/endpoint/properties/Endpoints.ts +4 -0
- package/src/endpoint/type/EndpointType.ts +3 -0
- package/src/node/ClientNode.ts +6 -1
- package/src/node/Node.ts +1 -1
- package/src/node/NodeLifecycle.ts +1 -1
- package/src/node/client/ClientEndpointInitializer.ts +38 -0
- package/src/node/client/ClientEventEmitter.ts +5 -5
- package/src/node/client/ClientNodeInteraction.ts +7 -0
- package/src/node/client/ClientStructure.ts +30 -5
- package/src/node/client/Peers.ts +71 -5
- package/src/node/index.ts +1 -0
- package/src/node/integration/ChangeNotificationService.ts +122 -0
- package/src/node/{server → integration}/ProtocolService.ts +32 -74
- package/src/node/integration/StateStream.ts +474 -0
- package/src/node/integration/index.ts +9 -0
- package/src/node/server/OnlineServerInteraction.ts +5 -1
- package/src/node/server/ServerEnvironment.ts +8 -1
- package/src/node/server/ServerSubscription.ts +6 -6
- package/src/node/server/index.ts +0 -1
- package/src/storage/client/ClientNodeStores.ts +4 -0
- package/dist/cjs/node/server/ProtocolService.d.ts.map +0 -1
- package/dist/cjs/node/server/ProtocolService.js.map +0 -6
- package/dist/esm/node/server/ProtocolService.d.ts.map +0 -1
- package/dist/esm/node/server/ProtocolService.js.map +0 -6
package/src/endpoint/Agent.ts
CHANGED
package/src/endpoint/Endpoint.ts
CHANGED
|
@@ -18,12 +18,13 @@ import {
|
|
|
18
18
|
Lifecycle,
|
|
19
19
|
Logger,
|
|
20
20
|
MaybePromise,
|
|
21
|
+
toHex,
|
|
21
22
|
UninitializedDependencyError,
|
|
22
23
|
} from "#general";
|
|
23
24
|
import { DataModelPath } from "#model";
|
|
25
|
+
import { ProtocolService } from "#node/integration/ProtocolService.js";
|
|
24
26
|
import type { Node } from "#node/Node.js";
|
|
25
27
|
import { IdentityService } from "#node/server/IdentityService.js";
|
|
26
|
-
import { ProtocolService } from "#node/server/ProtocolService.js";
|
|
27
28
|
import { Val } from "#protocol";
|
|
28
29
|
import { EndpointNumber } from "#types";
|
|
29
30
|
import { RootEndpoint } from "../endpoints/root.js";
|
|
@@ -227,7 +228,7 @@ export class Endpoint<T extends EndpointType = EndpointType.Empty> {
|
|
|
227
228
|
|
|
228
229
|
await tx.addResources(behavior);
|
|
229
230
|
|
|
230
|
-
const patch =
|
|
231
|
+
const patch = behavior.type.supervisor.patch;
|
|
231
232
|
|
|
232
233
|
if (typeof vals !== "object") {
|
|
233
234
|
throw new ImplementationError(
|
|
@@ -266,7 +267,7 @@ export class Endpoint<T extends EndpointType = EndpointType.Empty> {
|
|
|
266
267
|
await tx.begin();
|
|
267
268
|
await tx.addResources(behavior);
|
|
268
269
|
|
|
269
|
-
const patch =
|
|
270
|
+
const patch = behavior.type.supervisor.patch;
|
|
270
271
|
|
|
271
272
|
if (typeof values !== "object") {
|
|
272
273
|
throw new ImplementationError(`State values for ${type.id} must be an object, not ${typeof values}`);
|
|
@@ -835,9 +836,14 @@ export class Endpoint<T extends EndpointType = EndpointType.Empty> {
|
|
|
835
836
|
}
|
|
836
837
|
|
|
837
838
|
get #diagnosticProps() {
|
|
839
|
+
const type = this.type;
|
|
838
840
|
return {
|
|
839
841
|
"endpoint#": this.number,
|
|
840
|
-
type: `${
|
|
842
|
+
type: `${type.name} (${
|
|
843
|
+
type.deviceType === EndpointType.UNKNOWN_DEVICE_TYPE
|
|
844
|
+
? "unknown"
|
|
845
|
+
: `0x${toHex(type.deviceType)}${type.deviceRevision === EndpointType.UNKNOWN_DEVICE_REVISION ? "" : `, rev ${type.deviceRevision}`}`
|
|
846
|
+
})`,
|
|
841
847
|
};
|
|
842
848
|
}
|
|
843
849
|
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
Transaction,
|
|
28
28
|
} from "#general";
|
|
29
29
|
import { FeatureSet } from "#model";
|
|
30
|
-
import { ProtocolService } from "#node/
|
|
30
|
+
import { ProtocolService } from "#node/integration/ProtocolService.js";
|
|
31
31
|
import { ClusterTypeProtocol, FabricManager, Val } from "#protocol";
|
|
32
32
|
import { ClusterType, VoidSchema } from "#types";
|
|
33
33
|
import type { Agent } from "../Agent.js";
|
|
@@ -63,6 +63,13 @@ export class Behaviors {
|
|
|
63
63
|
return this.#supported;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
/**
|
|
67
|
+
* The list of active behaviors.
|
|
68
|
+
*/
|
|
69
|
+
get active() {
|
|
70
|
+
return Object.values(this.#backings).map(backing => backing.type);
|
|
71
|
+
}
|
|
72
|
+
|
|
66
73
|
get status() {
|
|
67
74
|
const status = {} as Record<string, Lifecycle.Status>;
|
|
68
75
|
for (const key in this.#supported) {
|
|
@@ -437,6 +444,12 @@ export class Behaviors {
|
|
|
437
444
|
if (this.#supported === this.#endpoint.type.behaviors) {
|
|
438
445
|
this.#supported = { ...this.#supported };
|
|
439
446
|
}
|
|
447
|
+
|
|
448
|
+
// TODO how to better solve that?
|
|
449
|
+
if (this.#endpoint.env.has(EndpointInitializer)) {
|
|
450
|
+
type = this.#endpoint.env.get(EndpointInitializer).finalizeType(type);
|
|
451
|
+
}
|
|
452
|
+
|
|
440
453
|
this.#supported[type.id] = type;
|
|
441
454
|
|
|
442
455
|
this.#augmentEndpoint(type);
|
|
@@ -640,7 +653,7 @@ export class Behaviors {
|
|
|
640
653
|
}
|
|
641
654
|
|
|
642
655
|
const backing = this.#endpoint.env.get(EndpointInitializer).createBacking(this.#endpoint, myType);
|
|
643
|
-
this.#backings[type.id] = backing;
|
|
656
|
+
this.#backings[backing.type.id] = backing;
|
|
644
657
|
if (!this.#protocol) {
|
|
645
658
|
this.#protocol = this.#endpoint.env.get(ProtocolService);
|
|
646
659
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Endpoint, EndpointType } from "#endpoint/index.js";
|
|
8
|
+
import type { ClientNode } from "#node/ClientNode.js";
|
|
9
|
+
import { Endpoints } from "./Endpoints.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Access to all endpoints on a client node, including the root endpoint.
|
|
13
|
+
*/
|
|
14
|
+
export class ClientNodeEndpoints extends Endpoints {
|
|
15
|
+
/**
|
|
16
|
+
* For nodes where the behavior/cluster structure can not be initialized automatically (e.g. by a subscription) or
|
|
17
|
+
* when the subscription data misses special clusters, you can use this method to enable a cluster on a specific
|
|
18
|
+
* endpoint.
|
|
19
|
+
* The method adds the endpoint, if not existing.
|
|
20
|
+
*/
|
|
21
|
+
require(endpointId: number, type: Partial<EndpointType> = {}) {
|
|
22
|
+
if (this.has(endpointId)) {
|
|
23
|
+
return this.for(endpointId);
|
|
24
|
+
}
|
|
25
|
+
const endpoint = new Endpoint({
|
|
26
|
+
id: `ep${endpointId}`,
|
|
27
|
+
number: endpointId,
|
|
28
|
+
type: EndpointType({
|
|
29
|
+
name: "ClientEndpoint",
|
|
30
|
+
deviceType: EndpointType.UNKNOWN_DEVICE_TYPE,
|
|
31
|
+
deviceRevision: EndpointType.UNKNOWN_DEVICE_REVISION,
|
|
32
|
+
...type,
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
(this.node as ClientNode).parts.add(endpoint);
|
|
36
|
+
return endpoint;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -41,4 +41,11 @@ export abstract class EndpointInitializer {
|
|
|
41
41
|
* Invoked after behaviors are initialized but before the initialization transaction commits.
|
|
42
42
|
*/
|
|
43
43
|
behaviorsInitialized(_agent: Agent) {}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Allows Initializer to manipulate the type before it is used to create a backing or behavior.
|
|
47
|
+
*/
|
|
48
|
+
finalizeType(type: Behavior.Type): Behavior.Type {
|
|
49
|
+
return type;
|
|
50
|
+
}
|
|
44
51
|
}
|
|
@@ -21,6 +21,10 @@ export class Endpoints implements ImmutableSet<Endpoint> {
|
|
|
21
21
|
this.#node = node;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
protected get node(): Node {
|
|
25
|
+
return this.#node;
|
|
26
|
+
}
|
|
27
|
+
|
|
24
28
|
has(endpoint: Endpoint | number): boolean {
|
|
25
29
|
if (endpoint === this.#node || endpoint === 0) {
|
|
26
30
|
return true;
|
|
@@ -33,6 +33,9 @@ export function EndpointType<const T extends EndpointType.Options>(options: T) {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
export namespace EndpointType {
|
|
36
|
+
export const UNKNOWN_DEVICE_TYPE = DeviceTypeId(-1, false);
|
|
37
|
+
export const UNKNOWN_DEVICE_REVISION = -1;
|
|
38
|
+
|
|
36
39
|
/**
|
|
37
40
|
* An endpoint type with no behaviors or requirements.
|
|
38
41
|
*/
|
package/src/node/ClientNode.ts
CHANGED
|
@@ -10,13 +10,14 @@ import { ClientNetworkRuntime } from "#behavior/system/network/ClientNetworkRunt
|
|
|
10
10
|
import { NetworkClient } from "#behavior/system/network/NetworkClient.js";
|
|
11
11
|
import { NetworkRuntime } from "#behavior/system/network/NetworkRuntime.js";
|
|
12
12
|
import { Agent } from "#endpoint/Agent.js";
|
|
13
|
+
import { ClientNodeEndpoints } from "#endpoint/properties/ClientNodeEndpoints.js";
|
|
13
14
|
import { EndpointInitializer } from "#endpoint/properties/EndpointInitializer.js";
|
|
14
15
|
import { Diagnostic, Identity, Lifecycle, Logger, MaybePromise } from "#general";
|
|
16
|
+
import { Matter, MatterModel } from "#model";
|
|
15
17
|
import { Interactable, OccurrenceManager, PeerAddress } from "#protocol";
|
|
16
18
|
import { ClientNodeStore } from "#storage/client/ClientNodeStore.js";
|
|
17
19
|
import { RemoteWriter } from "#storage/client/RemoteWriter.js";
|
|
18
20
|
import { ServerNodeStore } from "#storage/server/ServerNodeStore.js";
|
|
19
|
-
import { Matter, MatterModel } from "@matter/model";
|
|
20
21
|
import { ClientEndpointInitializer } from "./client/ClientEndpointInitializer.js";
|
|
21
22
|
import { ClientNodeInteraction } from "./client/ClientNodeInteraction.js";
|
|
22
23
|
import { Node } from "./Node.js";
|
|
@@ -61,6 +62,10 @@ export class ClientNode extends Node<ClientNode.RootEndpoint> {
|
|
|
61
62
|
return this.#matter;
|
|
62
63
|
}
|
|
63
64
|
|
|
65
|
+
override get endpoints(): ClientNodeEndpoints {
|
|
66
|
+
return new ClientNodeEndpoints(this);
|
|
67
|
+
}
|
|
68
|
+
|
|
64
69
|
override initialize() {
|
|
65
70
|
const store = this.env.get(ServerNodeStore).clientStores.storeForNode(this);
|
|
66
71
|
|
package/src/node/Node.ts
CHANGED
|
@@ -28,7 +28,7 @@ import { Interactable } from "#protocol";
|
|
|
28
28
|
import type { EndpointNumber } from "#types";
|
|
29
29
|
import { RootEndpoint } from "../endpoints/root.js";
|
|
30
30
|
import { NodeLifecycle } from "./NodeLifecycle.js";
|
|
31
|
-
import { ProtocolService } from "./
|
|
31
|
+
import { ProtocolService } from "./integration/ProtocolService.js";
|
|
32
32
|
|
|
33
33
|
const logger = Logger.get("Node");
|
|
34
34
|
|
|
@@ -15,7 +15,7 @@ import { AsyncObservable, Mutex, Observable } from "#general";
|
|
|
15
15
|
export class NodeLifecycle extends EndpointLifecycle {
|
|
16
16
|
#online = AsyncObservable<[context: ActionContext]>();
|
|
17
17
|
#goingOffline = AsyncObservable<[context: ActionContext]>();
|
|
18
|
-
#offline =
|
|
18
|
+
#offline = AsyncObservable<[context: ActionContext]>();
|
|
19
19
|
#commissioned = Observable<[context: ActionContext]>();
|
|
20
20
|
#decommissioned = Observable<[context: ActionContext]>();
|
|
21
21
|
#initialized = Observable<[isCommissioned: boolean]>();
|
|
@@ -11,9 +11,12 @@ import { ClientBehaviorBacking } from "#behavior/internal/ClientBehaviorBacking.
|
|
|
11
11
|
import { ServerBehaviorBacking } from "#behavior/internal/ServerBehaviorBacking.js";
|
|
12
12
|
import { Endpoint } from "#endpoint/Endpoint.js";
|
|
13
13
|
import { EndpointInitializer } from "#endpoint/properties/EndpointInitializer.js";
|
|
14
|
+
import { FeatureBitmap } from "#model";
|
|
15
|
+
import { ClientBehavior } from "#node/client/ClientBehavior.js";
|
|
14
16
|
import type { ClientNode } from "#node/ClientNode.js";
|
|
15
17
|
import { ClientNodeStore } from "#storage/client/ClientNodeStore.js";
|
|
16
18
|
import { NodeStore } from "#storage/NodeStore.js";
|
|
19
|
+
import { AttributeId, CommandId } from "#types";
|
|
17
20
|
import { ClientStructure } from "./ClientStructure.js";
|
|
18
21
|
|
|
19
22
|
export class ClientEndpointInitializer extends EndpointInitializer {
|
|
@@ -57,6 +60,41 @@ export class ClientEndpointInitializer extends EndpointInitializer {
|
|
|
57
60
|
return new ClientBehaviorBacking(endpoint, type, store, endpoint.behaviors.optionsFor(type));
|
|
58
61
|
}
|
|
59
62
|
|
|
63
|
+
/** Convert the Cluster type to a ClientBehavior */
|
|
64
|
+
override finalizeType(type: Behavior.Type): Behavior.Type {
|
|
65
|
+
const cluster = (type as ClusterBehavior.Type).cluster;
|
|
66
|
+
if (cluster === undefined) {
|
|
67
|
+
return type;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const features: FeatureBitmap = {};
|
|
71
|
+
for (const f in cluster.features) {
|
|
72
|
+
features[f] = true;
|
|
73
|
+
}
|
|
74
|
+
const attributeNames = new Array<string>();
|
|
75
|
+
const attributes = new Array<AttributeId>();
|
|
76
|
+
for (const [name, attr] of Object.entries(cluster.attributes)) {
|
|
77
|
+
attributeNames.push(name);
|
|
78
|
+
attributes.push(attr.id);
|
|
79
|
+
}
|
|
80
|
+
const commandNames = new Array<string>();
|
|
81
|
+
const commands = new Array<CommandId>();
|
|
82
|
+
for (const [name, cmd] of Object.entries(cluster.commands)) {
|
|
83
|
+
commandNames.push(name);
|
|
84
|
+
commands.push(cmd.requestId);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return ClientBehavior({
|
|
88
|
+
id: cluster.id,
|
|
89
|
+
revision: cluster.revision,
|
|
90
|
+
features,
|
|
91
|
+
attributes,
|
|
92
|
+
commands,
|
|
93
|
+
attributeNames,
|
|
94
|
+
commandNames,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
60
98
|
get structure() {
|
|
61
99
|
if (this.#structure === undefined) {
|
|
62
100
|
this.#structure = new ClientStructure(this.#node);
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { ElementEvent, Events } from "#behavior/Events.js";
|
|
7
|
+
import type { ElementEvent, Events } from "#behavior/Events.js";
|
|
8
8
|
import { camelize, Logger } from "#general";
|
|
9
9
|
import { ClusterModel, EventModel, MatterModel } from "#model";
|
|
10
|
-
import { ClientNode } from "#node/ClientNode.js";
|
|
11
|
-
import { ReadResult } from "#protocol";
|
|
12
|
-
import { ClusterId, EndpointNumber, EventId } from "#types";
|
|
13
|
-
import { ClientStructure } from "./ClientStructure.js";
|
|
10
|
+
import type { ClientNode } from "#node/ClientNode.js";
|
|
11
|
+
import type { ReadResult } from "#protocol";
|
|
12
|
+
import type { ClusterId, EndpointNumber, EventId } from "#types";
|
|
13
|
+
import type { ClientStructure } from "./ClientStructure.js";
|
|
14
14
|
|
|
15
15
|
const logger = Logger.get("ClientEventEmitter");
|
|
16
16
|
|
|
@@ -60,6 +60,13 @@ export class ClientNodeInteraction implements Interactable<ActionContext> {
|
|
|
60
60
|
return interaction.subscribe(intermediateRequest, context);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
cancelSubscription(id: number): void {
|
|
64
|
+
if (!this.#node.lifecycle.isOnline) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.#node.env.get(ClientInteraction).cancelSubscription(id);
|
|
68
|
+
}
|
|
69
|
+
|
|
63
70
|
async write<T extends Write>(request: T, context?: ActionContext): WriteResult<T> {
|
|
64
71
|
return (await this.#connect()).write(request, context);
|
|
65
72
|
}
|
|
@@ -30,8 +30,11 @@ export class ClientStructure {
|
|
|
30
30
|
#nodeStore: ClientNodeStore;
|
|
31
31
|
#endpoints: Record<EndpointNumber, EndpointStructure> = {};
|
|
32
32
|
#emitEvent: ClientEventEmitter;
|
|
33
|
+
#node: ClientNode;
|
|
34
|
+
#subscribedFabricFiltered?: boolean;
|
|
33
35
|
|
|
34
36
|
constructor(node: ClientNode) {
|
|
37
|
+
this.#node = node;
|
|
35
38
|
this.#nodeStore = node.env.get(ClientNodeStore);
|
|
36
39
|
this.#endpoints[node.number] = {
|
|
37
40
|
endpoint: node,
|
|
@@ -143,9 +146,8 @@ export class ClientStructure {
|
|
|
143
146
|
case "event-value":
|
|
144
147
|
this.#emitEvent(change);
|
|
145
148
|
break;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
continue;
|
|
149
|
+
|
|
150
|
+
// we ignore attr-status and event-status for now
|
|
149
151
|
}
|
|
150
152
|
}
|
|
151
153
|
|
|
@@ -157,11 +159,27 @@ export class ClientStructure {
|
|
|
157
159
|
}
|
|
158
160
|
}
|
|
159
161
|
|
|
162
|
+
/** Reference to the default subscription used when the node was started. */
|
|
163
|
+
protected get subscribedFabricFiltered() {
|
|
164
|
+
if (this.#subscribedFabricFiltered === undefined) {
|
|
165
|
+
this.#subscribedFabricFiltered = this.#node.state.network.defaultSubscription?.isFabricFiltered ?? true;
|
|
166
|
+
this.#node.events.network.defaultSubscription$Changed.on(newSubscription => {
|
|
167
|
+
this.#subscribedFabricFiltered = newSubscription?.isFabricFiltered ?? true;
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return this.#subscribedFabricFiltered;
|
|
171
|
+
}
|
|
172
|
+
|
|
160
173
|
async #mutateAttribute(
|
|
161
174
|
change: ReadResult.AttributeValue,
|
|
162
175
|
scope: ReadScope,
|
|
163
176
|
currentUpdates: undefined | AttributeUpdates,
|
|
164
177
|
) {
|
|
178
|
+
// We only store values when an initial subscription is defined and the fabric filter matches
|
|
179
|
+
if (this.subscribedFabricFiltered !== scope.isFabricFiltered) {
|
|
180
|
+
return currentUpdates;
|
|
181
|
+
}
|
|
182
|
+
|
|
165
183
|
const { endpointId, clusterId, attributeId } = change.path;
|
|
166
184
|
|
|
167
185
|
// If we are building updates to a cluster and the cluster/endpoint changes, apply the current update
|
|
@@ -236,6 +254,7 @@ export class ClientStructure {
|
|
|
236
254
|
const attrs = cluster.store.initialValues ?? {};
|
|
237
255
|
|
|
238
256
|
// Generate a behavior if enough information is available
|
|
257
|
+
// TODO: Detect changes in revision/features/attributes/commands and update behavior if needed
|
|
239
258
|
if (cluster.behavior === undefined) {
|
|
240
259
|
const {
|
|
241
260
|
[ClusterRevision.id]: clusterRevision,
|
|
@@ -291,6 +310,9 @@ export class ClientStructure {
|
|
|
291
310
|
|
|
292
311
|
const serverList = attrs[SERVER_LIST_ATTR_ID];
|
|
293
312
|
if (Array.isArray(serverList)) {
|
|
313
|
+
// TODO: Remove clusters that are no longer present
|
|
314
|
+
// Including events vis parts/endpoints on node (per endpoint and generic "changed")?
|
|
315
|
+
// Including data cleanup
|
|
294
316
|
for (const cluster of serverList) {
|
|
295
317
|
if (typeof cluster === "number") {
|
|
296
318
|
this.#clusterFor(endpoint, cluster as ClusterId);
|
|
@@ -307,6 +329,9 @@ export class ClientStructure {
|
|
|
307
329
|
|
|
308
330
|
const part = this.#endpointFor(partNo as EndpointNumber);
|
|
309
331
|
|
|
332
|
+
// TODO - remove endpoints/parts that are no longer present
|
|
333
|
+
// Including events vis parts/endpoints on node (per endpoint and generic "changed")?
|
|
334
|
+
// Including data cleanup
|
|
310
335
|
let isAlreadyDescendant = false;
|
|
311
336
|
for (let owner = part.endpoint.owner; owner; owner = owner.owner) {
|
|
312
337
|
if (owner === endpoint.endpoint) {
|
|
@@ -336,8 +361,8 @@ export class ClientStructure {
|
|
|
336
361
|
number,
|
|
337
362
|
type: EndpointType({
|
|
338
363
|
name: "ClientEndpoint",
|
|
339
|
-
deviceType:
|
|
340
|
-
deviceRevision:
|
|
364
|
+
deviceType: EndpointType.UNKNOWN_DEVICE_TYPE,
|
|
365
|
+
deviceRevision: EndpointType.UNKNOWN_DEVICE_REVISION,
|
|
341
366
|
}),
|
|
342
367
|
}),
|
|
343
368
|
clusters: {},
|
package/src/node/client/Peers.ts
CHANGED
|
@@ -10,9 +10,11 @@ import { ContinuousDiscovery } from "#behavior/system/controller/discovery/Conti
|
|
|
10
10
|
import { Discovery } from "#behavior/system/controller/discovery/Discovery.js";
|
|
11
11
|
import { InstanceDiscovery } from "#behavior/system/controller/discovery/InstanceDiscovery.js";
|
|
12
12
|
import { EndpointContainer } from "#endpoint/properties/EndpointContainer.js";
|
|
13
|
-
import { CancelablePromise, Duration, Logger, Minutes, Seconds, Time, Timestamp } from "#general";
|
|
14
|
-
import {
|
|
13
|
+
import { CancelablePromise, Duration, ImplementationError, Logger, Minutes, Seconds, Time, Timestamp } from "#general";
|
|
14
|
+
import { InteractionServer } from "#node/index.js";
|
|
15
|
+
import { FabricManager, PeerAddress, PeerAddressStore } from "#protocol";
|
|
15
16
|
import { ServerNodeStore } from "#storage/server/ServerNodeStore.js";
|
|
17
|
+
import { ClientSubscriptionHandler, ClientSubscriptions } from "@matter/protocol";
|
|
16
18
|
import { ClientNode } from "../ClientNode.js";
|
|
17
19
|
import type { ServerNode } from "../ServerNode.js";
|
|
18
20
|
import { ClientNodeFactory } from "./ClientNodeFactory.js";
|
|
@@ -31,6 +33,7 @@ const EXPIRATION_INTERVAL = Minutes.one;
|
|
|
31
33
|
export class Peers extends EndpointContainer<ClientNode> {
|
|
32
34
|
#expirationInterval?: CancelablePromise;
|
|
33
35
|
#expirationWorker?: Promise<void>;
|
|
36
|
+
#subscriptionHandler?: ClientSubscriptionHandler;
|
|
34
37
|
#closed = false;
|
|
35
38
|
|
|
36
39
|
constructor(owner: ServerNode) {
|
|
@@ -42,7 +45,9 @@ export class Peers extends EndpointContainer<ClientNode> {
|
|
|
42
45
|
|
|
43
46
|
this.owner.env.set(PeerAddressStore, new NodePeerAddressStore(owner));
|
|
44
47
|
|
|
45
|
-
|
|
48
|
+
owner.env.applyTo(InteractionServer, this.#configureInteractionServer.bind(this));
|
|
49
|
+
|
|
50
|
+
this.added.on(this.#handlePeerAdded.bind(this));
|
|
46
51
|
this.deleted.on(this.#manageExpiration.bind(this));
|
|
47
52
|
}
|
|
48
53
|
|
|
@@ -92,7 +97,7 @@ export class Peers extends EndpointContainer<ClientNode> {
|
|
|
92
97
|
const address = PeerAddress(id);
|
|
93
98
|
for (const node of this) {
|
|
94
99
|
const nodeAddress = node.state.commissioning.peerAddress;
|
|
95
|
-
if (nodeAddress && PeerAddress(nodeAddress
|
|
100
|
+
if (nodeAddress && PeerAddress.is(nodeAddress, address)) {
|
|
96
101
|
return node;
|
|
97
102
|
}
|
|
98
103
|
}
|
|
@@ -112,8 +117,37 @@ export class Peers extends EndpointContainer<ClientNode> {
|
|
|
112
117
|
super.add(node);
|
|
113
118
|
}
|
|
114
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Get or create a client node for the given peer address.
|
|
122
|
+
* This is mainly used to communicate to other known nodes on the fabric without having a formal commissioning
|
|
123
|
+
* process.
|
|
124
|
+
*/
|
|
125
|
+
async forAddress(peerAddress: PeerAddress, options: Omit<ClientNode.Options, "owner"> = {}) {
|
|
126
|
+
if (!this.owner.env.get(FabricManager).has(peerAddress)) {
|
|
127
|
+
throw new ImplementationError("Cannot register a peer address for a fabric we do not belong to");
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
let node = this.get(peerAddress);
|
|
131
|
+
if (!node) {
|
|
132
|
+
// We do not have that node till now, also not persisted, so create it
|
|
133
|
+
const factory = this.owner.env.get(ClientNodeFactory);
|
|
134
|
+
node = factory.create(options);
|
|
135
|
+
await node.construction;
|
|
136
|
+
this.add(node);
|
|
137
|
+
|
|
138
|
+
// Nodes we do not commission are not auto-subscribed but enabled
|
|
139
|
+
// But we add the peer address
|
|
140
|
+
await node.set({
|
|
141
|
+
commissioning: { peerAddress: PeerAddress(peerAddress) },
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return node;
|
|
146
|
+
}
|
|
147
|
+
|
|
115
148
|
override async close() {
|
|
116
149
|
this.#closed = true;
|
|
150
|
+
await this.#subscriptionHandler?.close();
|
|
117
151
|
this.#cancelExpiration();
|
|
118
152
|
await this.#expirationWorker;
|
|
119
153
|
await super.close();
|
|
@@ -126,8 +160,40 @@ export class Peers extends EndpointContainer<ClientNode> {
|
|
|
126
160
|
}
|
|
127
161
|
}
|
|
128
162
|
|
|
163
|
+
#handlePeerAdded() {
|
|
164
|
+
if (this.owner.env.has(InteractionServer)) {
|
|
165
|
+
this.#configureInteractionServer();
|
|
166
|
+
}
|
|
167
|
+
this.#manageExpiration();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* If required, installs a listener in the environment's {@link InteractionServer} to handle subscription responses.
|
|
172
|
+
*/
|
|
173
|
+
#configureInteractionServer() {
|
|
174
|
+
if (this.#closed || this.size > 0 || !this.owner.env.has(InteractionServer)) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const subscriptions = this.owner.env.get(ClientSubscriptions);
|
|
179
|
+
const interactionServer = this.owner.env.get(InteractionServer);
|
|
180
|
+
|
|
181
|
+
if (!this.#subscriptionHandler) {
|
|
182
|
+
this.#subscriptionHandler = new ClientSubscriptionHandler(subscriptions);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
interactionServer.clientHandler = this.#subscriptionHandler;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Enables or disables the expiration timer that culls expired uncommissioned nodes.
|
|
190
|
+
*/
|
|
129
191
|
#manageExpiration() {
|
|
130
|
-
if (this.#closed
|
|
192
|
+
if (this.#closed) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (this.#expirationWorker) {
|
|
131
197
|
return;
|
|
132
198
|
}
|
|
133
199
|
|
package/src/node/index.ts
CHANGED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { Behavior } from "#behavior/Behavior.js";
|
|
8
|
+
import type { BehaviorBacking } from "#behavior/internal/BehaviorBacking.js";
|
|
9
|
+
import type { Endpoint } from "#endpoint/Endpoint.js";
|
|
10
|
+
import { EndpointLifecycle } from "#endpoint/properties/EndpointLifecycle.js";
|
|
11
|
+
import { InternalError, Observable, ObserverGroup } from "#general";
|
|
12
|
+
import type { Node } from "#node/Node.js";
|
|
13
|
+
import type { ServerNode } from "#node/ServerNode.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* High-level change notification service.
|
|
17
|
+
*
|
|
18
|
+
* This service provides an optimized path to detecting property changes for all endpoints associated with a node. This
|
|
19
|
+
* includes endpoints on peers.
|
|
20
|
+
*/
|
|
21
|
+
export class ChangeNotificationService {
|
|
22
|
+
#change = new Observable<[changes: ChangeNotificationService.Change]>();
|
|
23
|
+
#observers = new Map<Node, ObserverGroup>();
|
|
24
|
+
|
|
25
|
+
constructor(node: ServerNode) {
|
|
26
|
+
this.#beginNodeObservation(node);
|
|
27
|
+
|
|
28
|
+
if (node.lifecycle.isReady) {
|
|
29
|
+
this.#beginPeerObservation(node);
|
|
30
|
+
} else {
|
|
31
|
+
node.lifecycle.ready.once(() => this.#beginPeerObservation(node));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Change event source.
|
|
37
|
+
*/
|
|
38
|
+
get change() {
|
|
39
|
+
return this.#change;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Invoked by the {@link BehaviorBacking} when state changes.
|
|
44
|
+
*/
|
|
45
|
+
broadcastUpdate(backing: BehaviorBacking, properties: string[]) {
|
|
46
|
+
const { endpoint, type: behavior } = backing;
|
|
47
|
+
this.#change.emit({
|
|
48
|
+
kind: "update",
|
|
49
|
+
endpoint,
|
|
50
|
+
behavior,
|
|
51
|
+
version: backing.datasource.version,
|
|
52
|
+
properties,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
close() {
|
|
57
|
+
for (const observers of this.#observers.values()) {
|
|
58
|
+
observers.close();
|
|
59
|
+
}
|
|
60
|
+
this.#observers.clear();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#beginNodeObservation(node: Node) {
|
|
64
|
+
const observers = new ObserverGroup();
|
|
65
|
+
this.#observers.set(node, observers);
|
|
66
|
+
|
|
67
|
+
observers.on(node.lifecycle.changed, (type, endpoint) => {
|
|
68
|
+
switch (type) {
|
|
69
|
+
case EndpointLifecycle.Change.Destroyed:
|
|
70
|
+
this.#change.emit({
|
|
71
|
+
kind: "delete",
|
|
72
|
+
endpoint,
|
|
73
|
+
});
|
|
74
|
+
if (endpoint == node) {
|
|
75
|
+
observers.close();
|
|
76
|
+
this.#observers.delete(node);
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#beginPeerObservation(node: ServerNode) {
|
|
84
|
+
const observers = this.#observers.get(node);
|
|
85
|
+
|
|
86
|
+
if (observers === undefined) {
|
|
87
|
+
throw new InternalError("Change notification initialization order is broken");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
observers.on(node.peers.added, this.#beginNodeObservation.bind(this));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export namespace ChangeNotificationService {
|
|
95
|
+
export type Key = string | number;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Emits when state changes.
|
|
99
|
+
*
|
|
100
|
+
* If present, {@link properties} indicates the specific updated properties. Otherwise the recipient should
|
|
101
|
+
* consider all properties.
|
|
102
|
+
*/
|
|
103
|
+
export interface PropertyUpdate {
|
|
104
|
+
kind: "update";
|
|
105
|
+
endpoint: Endpoint;
|
|
106
|
+
behavior: Behavior.Type;
|
|
107
|
+
version: number;
|
|
108
|
+
properties?: string[];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Emits when endpoints/nodes are deleted.
|
|
113
|
+
*
|
|
114
|
+
* This indicates to the recipient to drop the associated data subtree.
|
|
115
|
+
*/
|
|
116
|
+
export interface EndpointDelete {
|
|
117
|
+
kind: "delete";
|
|
118
|
+
endpoint: Endpoint;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export type Change = PropertyUpdate | EndpointDelete;
|
|
122
|
+
}
|