@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
|
@@ -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
|
}
|