@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,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Behavior } from "#behavior/Behavior.js";
|
|
8
|
+
import { ValueSupervisor } from "#behavior/supervision/ValueSupervisor.js";
|
|
9
|
+
import { camelize, decamelize, ImplementationError, NotImplementedError } from "#general";
|
|
10
|
+
import { CommandModel } from "#model";
|
|
11
|
+
import { ApiResource } from "../ApiResource.js";
|
|
12
|
+
import { Envelope } from "../Envelope.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* API item for commands.
|
|
16
|
+
*/
|
|
17
|
+
export class CommandResource extends ApiResource {
|
|
18
|
+
#behavior: Behavior;
|
|
19
|
+
supervisor: ValueSupervisor;
|
|
20
|
+
|
|
21
|
+
override readonly isInvocable = true;
|
|
22
|
+
|
|
23
|
+
constructor(parent: ApiResource, behavior: Behavior, schema: CommandModel) {
|
|
24
|
+
super(parent);
|
|
25
|
+
this.#behavior = behavior;
|
|
26
|
+
this.supervisor = this.supervisorFor(schema);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
override get schema() {
|
|
30
|
+
return this.supervisor.schema as CommandModel;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get id() {
|
|
34
|
+
return decamelize(this.schema.name);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
get dataModelPath() {
|
|
38
|
+
return this.parent!.dataModelPath.at(this.id);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
override get valueKind(): ApiResource.Kind {
|
|
42
|
+
return "command";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
get value() {
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
override async invoke(request?: Envelope.Data) {
|
|
50
|
+
let input = new Envelope({ supervisor: this.supervisor, ...request });
|
|
51
|
+
if (input.js === undefined || input.js === null) {
|
|
52
|
+
// The command validator always expects an object even if empty
|
|
53
|
+
input = new Envelope({ supervisor: this.supervisor, js: {} });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Method must exist on behavior or we cannot invoke
|
|
57
|
+
const name = camelize(this.id);
|
|
58
|
+
const method = (this.#behavior as unknown as Record<string, undefined | ((...args: unknown[]) => unknown)>)[
|
|
59
|
+
name
|
|
60
|
+
];
|
|
61
|
+
if (typeof method !== "function") {
|
|
62
|
+
throw new NotImplementedError();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Validate input
|
|
66
|
+
input.validate();
|
|
67
|
+
|
|
68
|
+
// Invoke
|
|
69
|
+
const result = await method.call(this.#behavior, input.js);
|
|
70
|
+
|
|
71
|
+
// If there is no response schema, do not return an envelope
|
|
72
|
+
const responseSchema = this.schema.responseModel;
|
|
73
|
+
if (!responseSchema) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Create and validate result
|
|
78
|
+
const output = new Envelope({ supervisor: this.supervisorFor(responseSchema), js: result });
|
|
79
|
+
try {
|
|
80
|
+
output.validate();
|
|
81
|
+
} catch (e) {
|
|
82
|
+
// If output validation fails it is an internal error
|
|
83
|
+
const error = new ImplementationError("Command output validation failed");
|
|
84
|
+
error.cause = e;
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Done
|
|
89
|
+
return output;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { ApiResource } from "../ApiResource.js";
|
|
8
|
+
import type { EndpointResource } from "./EndpointResource.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* API item for collections of endpoints.
|
|
12
|
+
*/
|
|
13
|
+
export class EndpointContainerResource extends ApiResource {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly #list: () => string[];
|
|
16
|
+
readonly #find: (path: string) => ApiResource | undefined;
|
|
17
|
+
declare readonly parent: EndpointResource;
|
|
18
|
+
supervisor: undefined;
|
|
19
|
+
readonly valueKind: ApiResource.Kind = "index";
|
|
20
|
+
|
|
21
|
+
constructor(
|
|
22
|
+
parent: EndpointResource,
|
|
23
|
+
id: string,
|
|
24
|
+
list: () => string[],
|
|
25
|
+
find: (path: string) => ApiResource | undefined,
|
|
26
|
+
) {
|
|
27
|
+
super(parent);
|
|
28
|
+
|
|
29
|
+
this.id = id;
|
|
30
|
+
this.#list = list;
|
|
31
|
+
this.#find = find;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
get dataModelPath() {
|
|
35
|
+
return this.parent.dataModelPath.at(this.id);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get value() {
|
|
39
|
+
return this.#list();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
override async childFor(id: string) {
|
|
43
|
+
return this.#find(id);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Agent } from "#endpoint/Agent.js";
|
|
8
|
+
import { camelize } from "#general";
|
|
9
|
+
import { ApiResource } from "../ApiResource.js";
|
|
10
|
+
import { BehaviorResource } from "./BehaviorResource.js";
|
|
11
|
+
import { EndpointContainerResource } from "./EndpointContainerResource.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* API item for endpoints.
|
|
15
|
+
*
|
|
16
|
+
* Direct descendents are either behaviors or collections, represented by {@link BehaviorResource} and
|
|
17
|
+
* {@link EndpointContainerResource} respectively.
|
|
18
|
+
*/
|
|
19
|
+
export class EndpointResource extends ApiResource {
|
|
20
|
+
readonly agent: Agent;
|
|
21
|
+
readonly supervisor: undefined;
|
|
22
|
+
|
|
23
|
+
constructor(agent: Agent, parent: undefined | ApiResource) {
|
|
24
|
+
super(parent);
|
|
25
|
+
this.agent = agent;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
get valueKind(): ApiResource.Kind {
|
|
29
|
+
return "endpoint";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
get id() {
|
|
33
|
+
return this.agent.endpoint.id;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
get dataModelPath() {
|
|
37
|
+
return this.agent.endpoint.path;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
override get value() {
|
|
41
|
+
return this.agent.endpoint.state;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override async childFor(name: string): Promise<ApiResource | void> {
|
|
45
|
+
if (name === "parts") {
|
|
46
|
+
return new EndpointContainerResource(
|
|
47
|
+
this,
|
|
48
|
+
"parts",
|
|
49
|
+
() => this.agent.endpoint.parts.map(part => part.id),
|
|
50
|
+
name => {
|
|
51
|
+
const part = this.agent.endpoint.parts.get(name);
|
|
52
|
+
if (part) {
|
|
53
|
+
return new EndpointResource(part.agentFor(this.agent.context), this);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
name = camelize(name);
|
|
60
|
+
|
|
61
|
+
const { supported } = this.agent.endpoint.behaviors;
|
|
62
|
+
if (name in supported) {
|
|
63
|
+
const type = supported[name];
|
|
64
|
+
|
|
65
|
+
const behavior = this.agent.get(type);
|
|
66
|
+
|
|
67
|
+
// A behavior must have schema to be publicly accessible
|
|
68
|
+
if (behavior.type.schema === undefined) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return new BehaviorResource(behavior, this);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Agent } from "#endpoint/Agent.js";
|
|
8
|
+
import { Node } from "#node/Node.js";
|
|
9
|
+
import { ApiResource } from "../ApiResource.js";
|
|
10
|
+
import { EndpointContainerResource } from "./EndpointContainerResource.js";
|
|
11
|
+
import { EndpointResource } from "./EndpointResource.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Specialization for {@link EndpointResource} that adds "endpoints" collection.
|
|
15
|
+
*/
|
|
16
|
+
export class NodeResource extends EndpointResource {
|
|
17
|
+
constructor(agent: Agent, parent: undefined | ApiResource) {
|
|
18
|
+
super(agent, parent);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override get valueKind(): ApiResource.Kind {
|
|
22
|
+
return "node";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
override async childFor(name: string): Promise<ApiResource | void> {
|
|
26
|
+
const {
|
|
27
|
+
node: { endpoints },
|
|
28
|
+
} = this;
|
|
29
|
+
|
|
30
|
+
// The "flat" endpoint IDs only apply at the top-level of an endpoint; otherwise they map to cluster IDs. That
|
|
31
|
+
// should be fine because clusters will usually be referenced by name
|
|
32
|
+
if (!this.isSelfReferential) {
|
|
33
|
+
// Numeric indices on nodes map to endpoints
|
|
34
|
+
if (name.match(/^\d+$/)) {
|
|
35
|
+
return (await this.childFor("endpoints"))?.childFor(name);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Endpoint collection
|
|
40
|
+
if (name === "endpoints") {
|
|
41
|
+
return new EndpointContainerResource(
|
|
42
|
+
this,
|
|
43
|
+
"endpoints",
|
|
44
|
+
() => endpoints.map(endpoint => endpoint.number.toString()),
|
|
45
|
+
name => {
|
|
46
|
+
if (!name.match(/^\d+$/)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const number = Number.parseInt(name);
|
|
50
|
+
if (Number.isNaN(number) || !endpoints.has(number)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const endpoint = endpoints.for(number);
|
|
55
|
+
return new EndpointResource(endpoint.agentFor(this.agent.context), this);
|
|
56
|
+
},
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Pass to endpoint resolver
|
|
61
|
+
return super.childFor(name);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
get node() {
|
|
65
|
+
return this.agent.endpoint as Node;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
get isSelfReferential() {
|
|
69
|
+
return this.parent instanceof NodeResource && this.parent.node === this.node;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { RootSupervisor } from "#behavior/supervision/RootSupervisor.js";
|
|
8
|
+
import { type ValueSupervisor } from "#behavior/supervision/ValueSupervisor.js";
|
|
9
|
+
import { InternalError, NotImplementedError } from "#general";
|
|
10
|
+
import { DataModelPath, Metatype, Schema } from "#model";
|
|
11
|
+
import { Val } from "@matter/protocol";
|
|
12
|
+
import { StatusResponse } from "@matter/types";
|
|
13
|
+
import { ApiResource } from "../ApiResource.js";
|
|
14
|
+
import { Envelope } from "../Envelope.js";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* API item for sub-properties of collections (clusters, structs and lists in the Matter data model).
|
|
18
|
+
*/
|
|
19
|
+
export class PropertyResource extends ApiResource {
|
|
20
|
+
id: string;
|
|
21
|
+
supervisor: ValueSupervisor;
|
|
22
|
+
dataModelPath: DataModelPath;
|
|
23
|
+
|
|
24
|
+
get valueKind(): ApiResource.Kind {
|
|
25
|
+
if (this.schema.tag === "attribute") {
|
|
26
|
+
return "attribute";
|
|
27
|
+
}
|
|
28
|
+
return "field";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
constructor(parent: ApiResource, id: string, supervisor: ValueSupervisor, path: DataModelPath) {
|
|
32
|
+
super(parent);
|
|
33
|
+
|
|
34
|
+
this.id = id;
|
|
35
|
+
this.supervisor = supervisor;
|
|
36
|
+
this.dataModelPath = path;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override get schema() {
|
|
40
|
+
return this.supervisor.schema;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
get value() {
|
|
44
|
+
return (this.parent?.value as Val.Struct | undefined)?.[this.id];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
override write(request: Envelope.Data) {
|
|
48
|
+
const requestEnv = new Envelope({ supervisor: this.supervisor, ...request });
|
|
49
|
+
requestEnv.validate();
|
|
50
|
+
this.#target[this.id] = requestEnv.js;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
override patch(request: Envelope) {
|
|
54
|
+
request = new Envelope({ supervisor: this.supervisor, ...request });
|
|
55
|
+
request.validate();
|
|
56
|
+
this.#targetSupervisor.patch({ [this.id]: request.js }, this.#target, this.dataModelPath);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
override add(request: Envelope) {
|
|
60
|
+
const struct = this.#target;
|
|
61
|
+
if (!Array.isArray(struct)) {
|
|
62
|
+
throw new NotImplementedError();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
request = new Envelope({ supervisor: this.supervisor, ...request });
|
|
66
|
+
struct.push(request.js);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
override delete() {
|
|
70
|
+
const struct = this.#target;
|
|
71
|
+
if (Array.isArray(struct)) {
|
|
72
|
+
struct.splice(this.id as unknown as number, 1);
|
|
73
|
+
} else {
|
|
74
|
+
this.#target[this.id] = undefined;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
override async childFor(id: string): Promise<ApiResource | void> {
|
|
79
|
+
let mySchema: Schema | undefined;
|
|
80
|
+
switch (this.schema.effectiveMetatype) {
|
|
81
|
+
case Metatype.object:
|
|
82
|
+
mySchema = this.schema.conformant.properties.for(id);
|
|
83
|
+
break;
|
|
84
|
+
|
|
85
|
+
case Metatype.array:
|
|
86
|
+
if (!id.match(/^\d+$/)) {
|
|
87
|
+
mySchema = undefined;
|
|
88
|
+
} else {
|
|
89
|
+
mySchema = this.schema.conformant.properties.for("entry");
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
|
|
93
|
+
default:
|
|
94
|
+
throw new NotImplementedError();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (!mySchema) {
|
|
98
|
+
throw new StatusResponse.NotFoundError();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const myCollection = this.#target[this.id];
|
|
102
|
+
if (!myCollection) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return new PropertyResource(this, id, this.supervisorFor(mySchema), this.dataModelPath.at(id));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
get #target() {
|
|
110
|
+
const collection = this.parent?.value as Val.Struct;
|
|
111
|
+
if (!collection || typeof collection !== "object") {
|
|
112
|
+
throw new InternalError("Value of property item has no collection");
|
|
113
|
+
}
|
|
114
|
+
return collection;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
get #targetSupervisor() {
|
|
118
|
+
const supervisor = RootSupervisor.for(this.parent?.schema);
|
|
119
|
+
if (!supervisor) {
|
|
120
|
+
throw new InternalError("No supervisor for parent collection");
|
|
121
|
+
}
|
|
122
|
+
return supervisor;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { ServerNode } from "#node/ServerNode.js";
|
|
8
|
+
import { ChangesResource } from "./ChangesResource.js";
|
|
9
|
+
import { EndpointContainerResource } from "./EndpointContainerResource.js";
|
|
10
|
+
import { NodeResource } from "./NodeResource.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Specialization of {@link NodeResource} that adds "peers" collection and "changes" subscription item.
|
|
14
|
+
*/
|
|
15
|
+
export class ServerNodeResource extends NodeResource {
|
|
16
|
+
/**
|
|
17
|
+
* For the root node, we provide a "flat" namespace that is rooted at Node IDs, in addition to the normal
|
|
18
|
+
* endpoint namespace. This could conceivably lead to conflict but we also provide typed subcollections that
|
|
19
|
+
* cannot have conflicts.
|
|
20
|
+
*
|
|
21
|
+
* We disable the flat namespace if the node is referenced as a child of itself so conflicts cannot occur.
|
|
22
|
+
*/
|
|
23
|
+
override async childFor(name: string) {
|
|
24
|
+
if (!this.isSelfReferential) {
|
|
25
|
+
// Dedicated name "host" and my node ID always map back to myself
|
|
26
|
+
if (name === this.id || name === "host") {
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// If the name is a peer, map to that
|
|
31
|
+
const peer = this.node.peers.get(name);
|
|
32
|
+
if (peer) {
|
|
33
|
+
return new NodeResource(peer.agentFor(this.agent.context), this);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
switch (name) {
|
|
38
|
+
// Explicit collection of peers
|
|
39
|
+
case "peers":
|
|
40
|
+
return new EndpointContainerResource(
|
|
41
|
+
this,
|
|
42
|
+
"peers",
|
|
43
|
+
() => this.node.peers.map(peer => peer.id),
|
|
44
|
+
id => {
|
|
45
|
+
const peer = this.node.peers.get(id);
|
|
46
|
+
if (peer) {
|
|
47
|
+
return new NodeResource(peer.agentFor(this.agent.context), this);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
// Subscription target
|
|
53
|
+
case "changes":
|
|
54
|
+
return new ChangesResource(this);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return super.childFor(name);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
override get node() {
|
|
61
|
+
return this.agent.endpoint as ServerNode;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export * from "./BehaviorResource.js";
|
|
8
|
+
export * from "./CommandResource.js";
|
|
9
|
+
export * from "./EndpointContainerResource.js";
|
|
10
|
+
export * from "./EndpointResource.js";
|
|
11
|
+
export * from "./NodeResource.js";
|
|
12
|
+
export * from "./PropertyResource.js";
|
|
13
|
+
export * from "./ServerNodeResource.js";
|
|
@@ -235,12 +235,11 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
235
235
|
logger.debug(`We already have and existing session for peer ${peerAddress}`);
|
|
236
236
|
} else {
|
|
237
237
|
try {
|
|
238
|
-
await peers.
|
|
238
|
+
await peers.connect(peerAddress, {
|
|
239
239
|
discoveryOptions: {
|
|
240
240
|
discoveryType: NodeDiscoveryType.TimedDiscovery,
|
|
241
241
|
timeout: REESTABLISH_SUBSCRIPTIONS_TIMEOUT,
|
|
242
242
|
},
|
|
243
|
-
allowUnknownPeer: true,
|
|
244
243
|
operationalAddress,
|
|
245
244
|
});
|
|
246
245
|
} catch (error) {
|
|
@@ -281,7 +280,7 @@ export class SubscriptionsBehavior extends Behavior {
|
|
|
281
280
|
interactionServer.subscriptionEstablishmentStarted.off(blockHandler);
|
|
282
281
|
|
|
283
282
|
logger.info(
|
|
284
|
-
`Re-established ${successfullReEstablishments.length}
|
|
283
|
+
`Re-established ${successfullReEstablishments.length}${successfullReEstablishments.length ? ` (${successfullReEstablishments.join(",")})` : ""} of ${formerSubscriptions.length} former subscriptions successfully`,
|
|
285
284
|
);
|
|
286
285
|
}
|
|
287
286
|
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Abort, AppAddress, asJson, Bytes, HttpEndpoint, HttpService, Mutex, Stream } from "#general";
|
|
8
|
+
import { StatusResponse, StatusResponseError } from "#types";
|
|
9
|
+
import { Api } from "../remote/api/Api.js";
|
|
10
|
+
import { ApiPath } from "../remote/api/ApiPath.js";
|
|
11
|
+
import { LocalResponse } from "../remote/api/LocalResponse.js";
|
|
12
|
+
import { RemoteRequest } from "../remote/api/RemoteRequest.js";
|
|
13
|
+
import { RemoteResponse } from "../remote/api/RemoteResponse.js";
|
|
14
|
+
import { RemoteInterface } from "../remote/RemoteInterface.js";
|
|
15
|
+
|
|
16
|
+
const LOG_FACILITY = "WebSocket";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* WebSocket remote interface.
|
|
20
|
+
*/
|
|
21
|
+
export class WebSocketInterface extends RemoteInterface {
|
|
22
|
+
static override protocol = "ws";
|
|
23
|
+
|
|
24
|
+
#http?: HttpEndpoint;
|
|
25
|
+
#mutex = new Mutex(this);
|
|
26
|
+
|
|
27
|
+
protected override async start() {
|
|
28
|
+
this.#http = await this.env.get(HttpService).create(this.address);
|
|
29
|
+
this.#http.ws = this.#handleConnection.bind(this);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
protected override async stop() {
|
|
33
|
+
await super.stop();
|
|
34
|
+
await this.#http?.close();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Handle HTTP connections.
|
|
39
|
+
*
|
|
40
|
+
* Checks path, upgrades to a WebSocket if the path applies, then processes input messages
|
|
41
|
+
*/
|
|
42
|
+
async #handleConnection(request: Request, upgrade: () => Promise<HttpEndpoint.WsConnection>) {
|
|
43
|
+
// Normalize path and compare to root
|
|
44
|
+
const address = new AppAddress(request.url);
|
|
45
|
+
const path = new ApiPath(address).toString();
|
|
46
|
+
if (path !== this.root.toString()) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Upgrade to WebSocket
|
|
51
|
+
const ws = await Abort.race(this.abort, await upgrade());
|
|
52
|
+
if (!ws) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
using subtask = Abort.subtask(this.abort);
|
|
57
|
+
|
|
58
|
+
const send = async (local: LocalResponse) => {
|
|
59
|
+
await this.#mutex.produce(async () => {
|
|
60
|
+
const message = RemoteResponse(local);
|
|
61
|
+
Api.logResponse(LOG_FACILITY, message);
|
|
62
|
+
const writer = ws.writable.getWriter();
|
|
63
|
+
try {
|
|
64
|
+
await writer.write(asJson(message));
|
|
65
|
+
} finally {
|
|
66
|
+
writer.releaseLock();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
for await (let message of Stream.iterable(ws.readable)) {
|
|
72
|
+
let requestId: string | undefined;
|
|
73
|
+
try {
|
|
74
|
+
message = Bytes.toString(message);
|
|
75
|
+
|
|
76
|
+
let parsed;
|
|
77
|
+
try {
|
|
78
|
+
parsed = JSON.parse(message);
|
|
79
|
+
} catch (e) {
|
|
80
|
+
if (e instanceof SyntaxError) {
|
|
81
|
+
throw new StatusResponse.InvalidCommandError(`Request parse error: ${e.message}`);
|
|
82
|
+
}
|
|
83
|
+
throw e;
|
|
84
|
+
}
|
|
85
|
+
requestId = (parsed as RemoteRequest)?.id;
|
|
86
|
+
|
|
87
|
+
const request = RemoteRequest(parsed);
|
|
88
|
+
|
|
89
|
+
await this.#handleRequest(request, subtask, send);
|
|
90
|
+
} catch (error) {
|
|
91
|
+
StatusResponseError.accept(error);
|
|
92
|
+
|
|
93
|
+
await send({
|
|
94
|
+
kind: "error",
|
|
95
|
+
id: requestId,
|
|
96
|
+
error,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Abort any ongoing subscriptions associated with the connection
|
|
102
|
+
subtask.abort();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
async #handleRequest(
|
|
106
|
+
request: RemoteRequest,
|
|
107
|
+
abort: AbortController,
|
|
108
|
+
send: (message: LocalResponse) => Promise<void>,
|
|
109
|
+
) {
|
|
110
|
+
const response = await this.#mutex.produce(() => Api.execute(LOG_FACILITY, this.node, request, abort));
|
|
111
|
+
|
|
112
|
+
if (response.kind !== "subscription") {
|
|
113
|
+
await send(response);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
await send({ id: request.id, kind: "ok" });
|
|
118
|
+
|
|
119
|
+
this.addWorker(this.#handleSubscription(response.stream, send), "ws subscription handler");
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async #handleSubscription(stream: LocalResponse.Stream, send: (message: LocalResponse) => Promise<void>) {
|
|
123
|
+
for await (const update of stream) {
|
|
124
|
+
await send(update.js);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { WebSocketInterface } from "./WebSocketInterface.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Allows control of a Matter node using an HTTP API.
|
|
12
|
+
*/
|
|
13
|
+
export class WebSocketServer extends RemoteServer {
|
|
14
|
+
static override readonly id = "websocket";
|
|
15
|
+
static override readonly interfaceType = WebSocketInterface;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export namespace WebSocketServer {
|
|
19
|
+
export class State extends RemoteServer.State {
|
|
20
|
+
/**
|
|
21
|
+
* The WebSocket address.
|
|
22
|
+
*
|
|
23
|
+
* Supported protocols:
|
|
24
|
+
*
|
|
25
|
+
* - ws (unencrypted WebSocket)
|
|
26
|
+
* - wss (encrypted WebSocket)
|
|
27
|
+
* - ws+unix (WebSockets over a UNIX socket)
|
|
28
|
+
* - wss+unix (WebSockets over a secure UNIX socket)
|
|
29
|
+
*/
|
|
30
|
+
override address = "ws+unix:matter.sock";
|
|
31
|
+
}
|
|
32
|
+
}
|