@matter/node 0.16.0-alpha.0-20251006-3fe1e7c57 → 0.16.0-alpha.0-20251013-89bb7099d
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/Events.js +2 -2
- 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/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.map +1 -1
- package/dist/cjs/behavior/system/controller/ControllerBehavior.js +0 -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 +157 -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 +38 -0
- package/dist/cjs/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
- package/dist/cjs/behavior/system/remote/api/RemoteResponse.js +65 -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 +1 -2
- 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 +6 -2
- 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/Events.js +2 -2
- 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/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.map +1 -1
- package/dist/esm/behavior/system/controller/ControllerBehavior.js +0 -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 +137 -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 +38 -0
- package/dist/esm/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
- package/dist/esm/behavior/system/remote/api/RemoteResponse.js +45 -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 +1 -2
- 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 +6 -2
- 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/Events.ts +2 -2
- 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/system/commissioning/CommissioningClient.ts +34 -6
- package/src/behavior/system/commissioning/CommissioningServer.ts +2 -3
- package/src/behavior/system/controller/ControllerBehavior.ts +0 -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 +83 -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 +1 -2
- 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 +7 -2
- 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 +23 -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 +9 -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
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
Abort,
|
|
9
|
+
asJson,
|
|
10
|
+
Base64,
|
|
11
|
+
Bytes,
|
|
12
|
+
decamelize,
|
|
13
|
+
InternalError,
|
|
14
|
+
MqttEndpoint,
|
|
15
|
+
MqttService,
|
|
16
|
+
Mutex,
|
|
17
|
+
NotImplementedError,
|
|
18
|
+
} from "#general";
|
|
19
|
+
import { any, CommandModel, Metatype, Schema } from "#model";
|
|
20
|
+
import { StateStream } from "#node/integration/StateStream.js";
|
|
21
|
+
import { StatusResponse } from "#types";
|
|
22
|
+
import { Api } from "../remote/api/Api.js";
|
|
23
|
+
import { ApiPath } from "../remote/api/ApiPath.js";
|
|
24
|
+
import { Envelope } from "../remote/api/Envelope.js";
|
|
25
|
+
import { LocalResponse } from "../remote/api/LocalResponse.js";
|
|
26
|
+
import type { RemoteRequest } from "../remote/api/RemoteRequest.js";
|
|
27
|
+
import { RemoteResponse } from "../remote/api/RemoteResponse.js";
|
|
28
|
+
import { RemoteInterface } from "../remote/RemoteInterface.js";
|
|
29
|
+
|
|
30
|
+
const LOG_FACILITY = "MQTT";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* MQTT remote interface.
|
|
34
|
+
*
|
|
35
|
+
* Currently publishes a read-only feed. Will address TODOs if there is real-world use.
|
|
36
|
+
*
|
|
37
|
+
* TODO - events
|
|
38
|
+
* TODO - clean out topics from previous runs that are no longer relevant, e.g. deleted endpoint, removed attrs, etc.
|
|
39
|
+
* TODO - TLV serialiation/deserialization
|
|
40
|
+
*/
|
|
41
|
+
export class MqttInterface extends RemoteInterface {
|
|
42
|
+
static override protocol = "mqtt";
|
|
43
|
+
|
|
44
|
+
#endpoint?: MqttEndpoint;
|
|
45
|
+
#mutex = new Mutex(this);
|
|
46
|
+
#retainedTopics = new Map<string, Map<number, Set<string>>>();
|
|
47
|
+
|
|
48
|
+
protected override async start() {
|
|
49
|
+
this.#endpoint = await this.env.get(MqttService).connect({
|
|
50
|
+
address: this.address,
|
|
51
|
+
environment: this.node.env,
|
|
52
|
+
|
|
53
|
+
will: {
|
|
54
|
+
topic: this.root.at("status").toString(),
|
|
55
|
+
payload: "offline",
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
onUp: endpoint => {
|
|
59
|
+
if (!this.#endpoint) {
|
|
60
|
+
this.#endpoint = endpoint;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return this.#publish({
|
|
64
|
+
topic: this.root.at("status").toString(),
|
|
65
|
+
payload: "online",
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
this.addWorker(this.#listen(), "mqtt listener");
|
|
71
|
+
this.addWorker(this.#feed(), "mqtt feeder");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
protected override async stop() {
|
|
75
|
+
await this.#mutex.then();
|
|
76
|
+
await this.#mqtt?.close();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* A background process that handles incoming MQTT messages.
|
|
81
|
+
*/
|
|
82
|
+
async #listen() {
|
|
83
|
+
await Abort.race(this.abort, this.node.construction);
|
|
84
|
+
if (Abort.is(this.abort)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let topic = this.root.toString();
|
|
89
|
+
if (topic !== "") {
|
|
90
|
+
topic += "/#";
|
|
91
|
+
} else {
|
|
92
|
+
topic = "#";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
for await (const message of this.#mqtt.subscribe(`${topic}`, { noLocal: true, abort: this.abort })) {
|
|
96
|
+
// We publish retained messages so ignore these; if not retained it's a write or invoke
|
|
97
|
+
if (message.retain) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// This should always be true but make sure
|
|
102
|
+
const relativeTopic = this.root.subpathFor(new ApiPath(message.topic));
|
|
103
|
+
if (!relativeTopic) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
await this.#respond(relativeTopic, message);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async #respond(topic: ApiPath, message: MqttEndpoint.Message) {
|
|
112
|
+
let response: LocalResponse | undefined;
|
|
113
|
+
|
|
114
|
+
const via = message.correlationData ? Bytes.toHex(message.correlationData) : message.responseTopic;
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
await this.node.act("MQTT listener", async agent => {
|
|
118
|
+
// Specialized topic "call" is for RPC messaging using RemoteRequest/RemoteResponse
|
|
119
|
+
if (topic.toString() === "call") {
|
|
120
|
+
response = await this.#call(message);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const resource = await Api.resourceFor(agent, topic);
|
|
125
|
+
if (resource === undefined) {
|
|
126
|
+
throw new StatusResponse.NotFoundError(`No resource at subtopic ${topic}`);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const schema = resource.schema;
|
|
130
|
+
if (!schema) {
|
|
131
|
+
throw new NotImplementedError();
|
|
132
|
+
}
|
|
133
|
+
const input = payloadToJs(schema, message.payload);
|
|
134
|
+
|
|
135
|
+
if (resource.isInvocable) {
|
|
136
|
+
Api.logRequest(LOG_FACILITY, via, "invoke", topic.toString());
|
|
137
|
+
|
|
138
|
+
let value = await resource.invoke({ js: input });
|
|
139
|
+
|
|
140
|
+
const responseSchema = (schema as CommandModel).responseModel;
|
|
141
|
+
if (responseSchema) {
|
|
142
|
+
value ??= new Envelope({ supervisor: resource.supervisorFor(responseSchema), js: null });
|
|
143
|
+
response = { kind: "value", value };
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
Api.logRequest(LOG_FACILITY, via, "update", topic.toString());
|
|
147
|
+
|
|
148
|
+
await resource.patch(input ?? { js: null });
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
} catch (e) {
|
|
152
|
+
response = Api.errorResponseOf(LOG_FACILITY, via, e);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (!response) {
|
|
156
|
+
response = { kind: "ok" };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
response.id = via;
|
|
160
|
+
Api.logResponse(LOG_FACILITY, RemoteResponse(response));
|
|
161
|
+
|
|
162
|
+
if (message.responseTopic) {
|
|
163
|
+
await this.#publish({
|
|
164
|
+
topic: message.responseTopic,
|
|
165
|
+
correlationData: message.correlationData,
|
|
166
|
+
payload: asJson(response),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Specialized handling for "call" topic to support full {@link RemoteRequest}/{@link RemoteResponse} interaction.
|
|
173
|
+
*/
|
|
174
|
+
async #call(message: MqttEndpoint.Message) {
|
|
175
|
+
const request = parseJsonPayload(message.payload);
|
|
176
|
+
const response = await Api.execute(LOG_FACILITY, this.node, request, this.abort);
|
|
177
|
+
|
|
178
|
+
// I don't think there's any point in supporting subscriptions when MQTT offers a superior mechanism, so for now
|
|
179
|
+
// just throw if this is attempted
|
|
180
|
+
if (response.kind === "subscription") {
|
|
181
|
+
await response.stream.return?.();
|
|
182
|
+
throw new StatusResponse.InvalidSubscriptionError(
|
|
183
|
+
"Subscription via RPC is not supported, use MQTT instead",
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return response;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* A background process that continuously updates MQTT topics.
|
|
192
|
+
*/
|
|
193
|
+
async #feed() {
|
|
194
|
+
const stream = StateStream(this.node, { abort: this.abort });
|
|
195
|
+
|
|
196
|
+
for await (const change of stream) {
|
|
197
|
+
await this.#mutex.produce(async () => {
|
|
198
|
+
switch (change.kind) {
|
|
199
|
+
case "update":
|
|
200
|
+
await this.#publishUpdate(change);
|
|
201
|
+
break;
|
|
202
|
+
|
|
203
|
+
case "delete":
|
|
204
|
+
await this.#publishDelete(change);
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Publish attribute values for state changes.
|
|
212
|
+
*/
|
|
213
|
+
async #publishUpdate({ node, endpoint, behavior, changes }: StateStream.Update) {
|
|
214
|
+
let nodeTopics = this.#retainedTopics.get(node.id);
|
|
215
|
+
if (nodeTopics === undefined) {
|
|
216
|
+
this.#retainedTopics.set(node.id, (nodeTopics = new Map()));
|
|
217
|
+
}
|
|
218
|
+
let endpointTopics = nodeTopics.get(endpoint.number);
|
|
219
|
+
if (endpointTopics === undefined) {
|
|
220
|
+
nodeTopics.set(endpoint.number, (endpointTopics = new Set()));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const behaviorRoot = this.#nodeRoot(node.id).at([endpoint.number.toString(), decamelize(behavior.id)]);
|
|
224
|
+
for (const name in changes) {
|
|
225
|
+
const value = changes[name];
|
|
226
|
+
const schema = behavior.schema?.conformant.properties.for(name);
|
|
227
|
+
const payload = jsToPayload(schema ?? any, value);
|
|
228
|
+
|
|
229
|
+
const topic = behaviorRoot.at([name]).toString();
|
|
230
|
+
endpointTopics.add(topic);
|
|
231
|
+
|
|
232
|
+
await this.#publish({
|
|
233
|
+
topic,
|
|
234
|
+
payload,
|
|
235
|
+
retain: true,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Delete all published topics for an endpoint or node that has disappeared.
|
|
242
|
+
*/
|
|
243
|
+
async #publishDelete(change: StateStream.Delete) {
|
|
244
|
+
const nodeTopics = this.#retainedTopics.get(change.node.id);
|
|
245
|
+
if (!nodeTopics) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const deleteEndpoint = async (endpoint: number) => {
|
|
250
|
+
const topics = nodeTopics.get(endpoint);
|
|
251
|
+
if (!topics) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
for (const topic of topics) {
|
|
256
|
+
await this.#publish({
|
|
257
|
+
topic,
|
|
258
|
+
payload: null,
|
|
259
|
+
retain: true,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
nodeTopics.delete(endpoint);
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
if (change.endpoint === change.node) {
|
|
267
|
+
for (const number of nodeTopics.keys()) {
|
|
268
|
+
await deleteEndpoint(number);
|
|
269
|
+
}
|
|
270
|
+
this.#retainedTopics.delete(change.node.id);
|
|
271
|
+
} else {
|
|
272
|
+
await deleteEndpoint(change.endpoint.number);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Obtain the root path for a node.
|
|
278
|
+
*
|
|
279
|
+
* This will either be the root path for the server or a subpath for peers.
|
|
280
|
+
*/
|
|
281
|
+
#nodeRoot(id: string) {
|
|
282
|
+
if (id === this.node.id) {
|
|
283
|
+
return this.root;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
return this.root.at(["peers", id]);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Safe access to the MQTT endpoint.
|
|
291
|
+
*/
|
|
292
|
+
get #mqtt() {
|
|
293
|
+
if (this.#endpoint === undefined) {
|
|
294
|
+
throw new InternalError("MQTT endpoint missing");
|
|
295
|
+
}
|
|
296
|
+
return this.#endpoint;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Publish a message.
|
|
301
|
+
*
|
|
302
|
+
* Default QOS is 2.
|
|
303
|
+
*/
|
|
304
|
+
#publish(message: MqttEndpoint.Message) {
|
|
305
|
+
if (this.abort.aborted) {
|
|
306
|
+
throw new InternalError("MQTT publish after abort");
|
|
307
|
+
}
|
|
308
|
+
if (message.qos === undefined) {
|
|
309
|
+
message.qos = 2;
|
|
310
|
+
}
|
|
311
|
+
return this.#mqtt.publish(message);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
function payloadToJs(schema: Schema, payload: Bytes | string | null): unknown {
|
|
316
|
+
if (payload === null) {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
const length = typeof payload === "string" ? payload.length : payload.byteLength;
|
|
321
|
+
if (!length) {
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
let js;
|
|
326
|
+
switch (schema.effectiveMetatype) {
|
|
327
|
+
case Metatype.any:
|
|
328
|
+
js = payload;
|
|
329
|
+
break;
|
|
330
|
+
|
|
331
|
+
case Metatype.object:
|
|
332
|
+
case Metatype.array:
|
|
333
|
+
case Metatype.bitmap:
|
|
334
|
+
js = parseJsonPayload(payload);
|
|
335
|
+
break;
|
|
336
|
+
|
|
337
|
+
case Metatype.bytes:
|
|
338
|
+
if (typeof payload === "string") {
|
|
339
|
+
try {
|
|
340
|
+
js = Base64.decode(payload);
|
|
341
|
+
} catch (e) {
|
|
342
|
+
if (e instanceof SyntaxError) {
|
|
343
|
+
throw new StatusResponse.InvalidDataTypeError(
|
|
344
|
+
`Value is not binary or a base64 string: ${e.message}`,
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
js = payload;
|
|
352
|
+
break;
|
|
353
|
+
|
|
354
|
+
default:
|
|
355
|
+
if (Bytes.isBytes(payload)) {
|
|
356
|
+
try {
|
|
357
|
+
payload = Bytes.toString(payload);
|
|
358
|
+
} catch (e) {
|
|
359
|
+
if (e instanceof TypeError) {
|
|
360
|
+
throw new StatusResponse.InvalidDataTypeError(
|
|
361
|
+
`Value is not a valid UTF-8 string: ${e.message}`,
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
js = payload;
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
return js;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
function jsToPayload(schema: Schema, js: unknown): Bytes | string {
|
|
374
|
+
if (js === undefined || js === null || js === "") {
|
|
375
|
+
return Bytes.empty;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
switch (schema.effectiveMetatype) {
|
|
379
|
+
case Metatype.object:
|
|
380
|
+
case Metatype.array:
|
|
381
|
+
case Metatype.bitmap:
|
|
382
|
+
// TODO - serialize bitmap as number?
|
|
383
|
+
return asJson(js);
|
|
384
|
+
|
|
385
|
+
case Metatype.bytes:
|
|
386
|
+
if (Bytes.isBytes(js)) {
|
|
387
|
+
return js;
|
|
388
|
+
}
|
|
389
|
+
return Bytes.fromString(js.toString());
|
|
390
|
+
|
|
391
|
+
default:
|
|
392
|
+
if (Bytes.isBytes(js)) {
|
|
393
|
+
return js;
|
|
394
|
+
}
|
|
395
|
+
return js.toString();
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
function parseJsonPayload(payload: MqttEndpoint.Message["payload"]) {
|
|
400
|
+
if (payload === null) {
|
|
401
|
+
throw new StatusResponse.InvalidDataTypeError("Empty payload where JSON expected");
|
|
402
|
+
}
|
|
403
|
+
if (Bytes.isBytes(payload)) {
|
|
404
|
+
payload = Bytes.toString(payload);
|
|
405
|
+
}
|
|
406
|
+
try {
|
|
407
|
+
return JSON.parse(payload);
|
|
408
|
+
} catch (e) {
|
|
409
|
+
if (e instanceof SyntaxError) {
|
|
410
|
+
throw new StatusResponse.InvalidDataTypeError(`Payload is not valid JSON: ${e.message}`);
|
|
411
|
+
}
|
|
412
|
+
throw e;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
@@ -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 { RemoteServer } from "../remote/RemoteServer.js";
|
|
8
|
+
import { MqttInterface } from "./MqttInterface.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Allows control of a Matter node via an MQTT broker.
|
|
12
|
+
*
|
|
13
|
+
* The broker must support MQTT version 5.
|
|
14
|
+
*/
|
|
15
|
+
export class MqttServer extends RemoteServer {
|
|
16
|
+
static override readonly id = "mqtt";
|
|
17
|
+
static override readonly interfaceType = MqttInterface;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export namespace MqttServer {
|
|
21
|
+
export class State extends RemoteServer.State {
|
|
22
|
+
/**
|
|
23
|
+
* The MQTT broker address.
|
|
24
|
+
*
|
|
25
|
+
* Supported protocols:
|
|
26
|
+
*
|
|
27
|
+
* - mqtt
|
|
28
|
+
* - mqtts
|
|
29
|
+
* - mqtt+ws (MQTT over web sockets)
|
|
30
|
+
* - mqtt+wss
|
|
31
|
+
* - mqtt+unix (MQTT over UNIX socket)
|
|
32
|
+
* - mqtts+unix
|
|
33
|
+
*
|
|
34
|
+
* If present, the path portion of the address adds a prefix to the topics registered by the server.
|
|
35
|
+
*/
|
|
36
|
+
override address = "mqtt:localhost/matter/{node}";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { RemoteDescriptor } from "#behavior/system/commissioning/RemoteDescriptor.js";
|
|
8
|
+
import { ImplementationError, Observable, ServerAddress, ServerAddressUdp } from "#general";
|
|
7
9
|
import { DatatypeModel, FieldElement } from "#model";
|
|
10
|
+
import type { ClientNode } from "#node/ClientNode.js";
|
|
8
11
|
import { Node } from "#node/Node.js";
|
|
9
|
-
import { DEFAULT_MIN_INTERVAL_FLOOR, Subscribe } from "#protocol";
|
|
12
|
+
import { ClientInteraction, DEFAULT_MIN_INTERVAL_FLOOR, PeerSet, Subscribe } from "#protocol";
|
|
10
13
|
import { CaseAuthenticatedTag } from "#types";
|
|
11
14
|
import { ClientNetworkRuntime } from "./ClientNetworkRuntime.js";
|
|
12
15
|
import { NetworkBehavior } from "./NetworkBehavior.js";
|
|
@@ -14,33 +17,97 @@ import { NetworkBehavior } from "./NetworkBehavior.js";
|
|
|
14
17
|
export class NetworkClient extends NetworkBehavior {
|
|
15
18
|
declare internal: NetworkClient.Internal;
|
|
16
19
|
declare state: NetworkClient.State;
|
|
20
|
+
declare events: NetworkClient.Events;
|
|
21
|
+
|
|
22
|
+
override initialize() {
|
|
23
|
+
this.reactTo(this.events.autoSubscribe$Changed, this.#handleSubscription);
|
|
24
|
+
this.reactTo(this.events.defaultSubscription$Changed, this.#handleChangedDefaultSubscription);
|
|
25
|
+
}
|
|
17
26
|
|
|
18
27
|
override async startup() {
|
|
19
|
-
const
|
|
28
|
+
const peerAddress = this.#node.state.commissioning.peerAddress;
|
|
29
|
+
if (peerAddress !== undefined) {
|
|
30
|
+
const peerSet = this.env.get(PeerSet);
|
|
31
|
+
if (!peerSet.has(peerAddress)) {
|
|
32
|
+
const udpAddresses = this.#node.state.commissioning.addresses?.filter(a => a.type === "udp") ?? [];
|
|
33
|
+
if (udpAddresses.length) {
|
|
34
|
+
const latestUdpAddress = ServerAddress(udpAddresses[udpAddresses.length - 1]) as ServerAddressUdp;
|
|
35
|
+
// Make sure the PeerSet knows about this peer now too
|
|
36
|
+
await peerSet.addKnownPeer(
|
|
37
|
+
peerAddress,
|
|
38
|
+
latestUdpAddress,
|
|
39
|
+
RemoteDescriptor.fromLongForm(this.#node.state.commissioning),
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
await this.#handleSubscription();
|
|
46
|
+
}
|
|
20
47
|
|
|
21
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Manually activate the subscription for the node, if not already active. This will fail if the node is disabled.
|
|
50
|
+
*
|
|
51
|
+
* If you want to disable subscription, set the isDisabled state to true or set autoSubscribe to false.
|
|
52
|
+
*/
|
|
53
|
+
subscribe() {
|
|
54
|
+
if (this.state.isDisabled) {
|
|
55
|
+
throw new ImplementationError("Cannot subscribe when node is disabled");
|
|
56
|
+
}
|
|
57
|
+
return this.#handleSubscription(true);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async #handleChangedDefaultSubscription() {
|
|
61
|
+
if (!this.internal.subscriptionActivated) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Restart the subscription with the new parameters
|
|
66
|
+
await this.#handleSubscription(false);
|
|
67
|
+
await this.#handleSubscription(true);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async #handleSubscription(desiredState = this.state.autoSubscribe) {
|
|
71
|
+
const { isDisabled } = this.state;
|
|
72
|
+
const subscriptionDesired = desiredState && !isDisabled;
|
|
73
|
+
|
|
74
|
+
if (subscriptionDesired === this.internal.subscriptionActivated) {
|
|
22
75
|
return;
|
|
23
76
|
}
|
|
24
77
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
78
|
+
if (subscriptionDesired) {
|
|
79
|
+
// TODO - configure subscription min/max timing based on physical device properties
|
|
80
|
+
// TODO run whole process including reconnections in a "mutex" like process
|
|
81
|
+
const subscribe = Subscribe({
|
|
82
|
+
fabricFilter: true,
|
|
83
|
+
minIntervalFloor: DEFAULT_MIN_INTERVAL_FLOOR,
|
|
84
|
+
maxIntervalCeiling: 0,
|
|
85
|
+
attributes: [{}],
|
|
86
|
+
events: [{ isUrgent: true }],
|
|
87
|
+
...this.state.defaultSubscription,
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// First, read. This allows us to retrieve attributes that do not support subscription
|
|
91
|
+
for await (const _chunk of this.#node.interaction.read(subscribe));
|
|
92
|
+
|
|
93
|
+
// Now subscribe for subsequent updates
|
|
94
|
+
const { subscriptionId } = await this.#node.interaction.subscribe(subscribe);
|
|
95
|
+
|
|
96
|
+
this.internal.subscriptionActivated = true;
|
|
97
|
+
this.internal.defaultSubscriptionId = subscriptionId;
|
|
98
|
+
} else {
|
|
99
|
+
if (this.internal.defaultSubscriptionId !== undefined) {
|
|
100
|
+
(this.#node.interaction as ClientInteraction).subscriptions
|
|
101
|
+
.get(this.internal.defaultSubscriptionId)
|
|
102
|
+
?.close();
|
|
103
|
+
this.internal.defaultSubscriptionId = undefined;
|
|
104
|
+
}
|
|
105
|
+
this.internal.subscriptionActivated = false;
|
|
106
|
+
}
|
|
40
107
|
}
|
|
41
108
|
|
|
42
109
|
get #node() {
|
|
43
|
-
return this.env.get(Node);
|
|
110
|
+
return this.env.get(Node) as ClientNode;
|
|
44
111
|
}
|
|
45
112
|
|
|
46
113
|
/**
|
|
@@ -52,16 +119,25 @@ export class NetworkClient extends NetworkBehavior {
|
|
|
52
119
|
|
|
53
120
|
children: [
|
|
54
121
|
FieldElement({
|
|
55
|
-
name: "
|
|
122
|
+
name: "defaultSubscription",
|
|
56
123
|
type: "any",
|
|
57
124
|
default: { type: "properties", properties: {} },
|
|
58
|
-
|
|
125
|
+
conformance: "O",
|
|
126
|
+
quality: "N",
|
|
59
127
|
}),
|
|
60
128
|
|
|
61
129
|
FieldElement({
|
|
62
130
|
name: "isDisabled",
|
|
63
131
|
type: "bool",
|
|
64
132
|
quality: "N",
|
|
133
|
+
default: false,
|
|
134
|
+
}),
|
|
135
|
+
|
|
136
|
+
FieldElement({
|
|
137
|
+
name: "autoSubscribe",
|
|
138
|
+
type: "bool",
|
|
139
|
+
quality: "N",
|
|
140
|
+
default: false,
|
|
65
141
|
}),
|
|
66
142
|
|
|
67
143
|
FieldElement({
|
|
@@ -83,24 +159,43 @@ export class NetworkClient extends NetworkBehavior {
|
|
|
83
159
|
export namespace NetworkClient {
|
|
84
160
|
export class Internal extends NetworkBehavior.Internal {
|
|
85
161
|
declare runtime?: ClientNetworkRuntime;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Contains the subscription target state. It will also be true if a subscription is in the process of being
|
|
165
|
+
* established, or we wait for the node to be rediscovered.
|
|
166
|
+
*/
|
|
167
|
+
subscriptionActivated = false;
|
|
168
|
+
|
|
169
|
+
/** The ID of the current active default subscription, if any */
|
|
170
|
+
defaultSubscriptionId?: number;
|
|
86
171
|
}
|
|
87
172
|
|
|
88
173
|
export class State extends NetworkBehavior.State {
|
|
89
174
|
/**
|
|
90
|
-
*
|
|
175
|
+
* This subscription defines the default set of attributes and events to which the node will automatically
|
|
176
|
+
* subscribe when started, if autoSubscribe is true.
|
|
91
177
|
*
|
|
92
178
|
* The default subscription is a wildcard for all attributes of the node. You can set to undefined or filter
|
|
93
179
|
* the fields and values but only values selected by this subscription will update automatically.
|
|
94
180
|
*
|
|
95
181
|
* Set to null to disable automatic subscription.
|
|
96
182
|
*/
|
|
97
|
-
|
|
183
|
+
defaultSubscription?: Subscribe;
|
|
98
184
|
|
|
99
185
|
/**
|
|
100
|
-
*
|
|
186
|
+
* Represents the current operational network state of the node. When true the node is enabled and operational.
|
|
187
|
+
* When false the node is disabled and not operational.
|
|
188
|
+
*
|
|
189
|
+
* This state can be changed at any time to enable or disable the node.
|
|
101
190
|
*/
|
|
102
191
|
isDisabled = false;
|
|
103
192
|
|
|
193
|
+
/**
|
|
194
|
+
* If true, automatically subscribe to the provided default subscription (or all attributes and events) when
|
|
195
|
+
* the node is started. If false, do not automatically subscribe.
|
|
196
|
+
*/
|
|
197
|
+
autoSubscribe = false;
|
|
198
|
+
|
|
104
199
|
/**
|
|
105
200
|
* Case Authenticated Tags (CATs) to use for operational CASE sessions with this node.
|
|
106
201
|
*
|
|
@@ -110,4 +205,9 @@ export namespace NetworkClient {
|
|
|
110
205
|
*/
|
|
111
206
|
caseAuthenticatedTags?: CaseAuthenticatedTag[];
|
|
112
207
|
}
|
|
208
|
+
|
|
209
|
+
export class Events extends NetworkBehavior.Events {
|
|
210
|
+
autoSubscribe$Changed = new Observable<[value: boolean, oldValue: boolean]>();
|
|
211
|
+
defaultSubscription$Changed = new Observable<[value: Subscribe | undefined, oldValue: Subscribe | undefined]>();
|
|
212
|
+
}
|
|
113
213
|
}
|