@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.
Files changed (584) hide show
  1. package/dist/cjs/behavior/Behavior.d.ts +4 -0
  2. package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
  3. package/dist/cjs/behavior/Behavior.js +7 -1
  4. package/dist/cjs/behavior/Behavior.js.map +1 -1
  5. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  6. package/dist/cjs/behavior/internal/BehaviorBacking.js +67 -3
  7. package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
  8. package/dist/cjs/behavior/state/managed/Datasource.d.ts +4 -9
  9. package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
  10. package/dist/cjs/behavior/state/managed/Datasource.js +9 -12
  11. package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
  12. package/dist/cjs/behavior/state/managed/NameResolver.d.ts.map +1 -1
  13. package/dist/cjs/behavior/state/managed/NameResolver.js.map +1 -1
  14. package/dist/cjs/behavior/state/managed/values/ValueCaster.d.ts +3 -2
  15. package/dist/cjs/behavior/state/managed/values/ValueCaster.d.ts.map +1 -1
  16. package/dist/cjs/behavior/state/managed/values/ValueCaster.js +16 -3
  17. package/dist/cjs/behavior/state/managed/values/ValueCaster.js.map +1 -1
  18. package/dist/cjs/behavior/supervision/RootSupervisor.d.ts +4 -4
  19. package/dist/cjs/behavior/supervision/RootSupervisor.d.ts.map +1 -1
  20. package/dist/cjs/behavior/supervision/RootSupervisor.js +8 -10
  21. package/dist/cjs/behavior/supervision/RootSupervisor.js.map +1 -1
  22. package/dist/cjs/behavior/supervision/ValueSupervisor.d.ts +1 -1
  23. package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts +12 -5
  24. package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  25. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +17 -1
  26. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  27. package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  28. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js +2 -1
  29. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  30. package/dist/cjs/behavior/system/controller/ControllerBehavior.d.ts +7 -0
  31. package/dist/cjs/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
  32. package/dist/cjs/behavior/system/controller/ControllerBehavior.js +10 -4
  33. package/dist/cjs/behavior/system/controller/ControllerBehavior.js.map +1 -1
  34. package/dist/cjs/behavior/system/http/HttpInterface.d.ts +36 -0
  35. package/dist/cjs/behavior/system/http/HttpInterface.d.ts.map +1 -0
  36. package/dist/cjs/behavior/system/http/HttpInterface.js +282 -0
  37. package/dist/cjs/behavior/system/http/HttpInterface.js.map +6 -0
  38. package/dist/cjs/behavior/system/http/HttpServer.d.ts +30 -0
  39. package/dist/cjs/behavior/system/http/HttpServer.d.ts.map +1 -0
  40. package/dist/cjs/behavior/system/http/HttpServer.js +51 -0
  41. package/dist/cjs/behavior/system/http/HttpServer.js.map +6 -0
  42. package/dist/cjs/behavior/system/http/index.d.ts +8 -0
  43. package/dist/cjs/behavior/system/http/index.d.ts.map +1 -0
  44. package/dist/cjs/behavior/system/http/index.js +25 -0
  45. package/dist/cjs/behavior/system/http/index.js.map +6 -0
  46. package/dist/cjs/behavior/system/index/IndexBehavior.d.ts +4 -4
  47. package/dist/cjs/behavior/system/index/IndexBehavior.d.ts.map +1 -1
  48. package/dist/cjs/behavior/system/index/IndexBehavior.js +9 -4
  49. package/dist/cjs/behavior/system/index/IndexBehavior.js.map +1 -1
  50. package/dist/cjs/behavior/system/index.d.ts +4 -0
  51. package/dist/cjs/behavior/system/index.d.ts.map +1 -1
  52. package/dist/cjs/behavior/system/index.js +4 -0
  53. package/dist/cjs/behavior/system/index.js.map +1 -1
  54. package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts +22 -0
  55. package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts.map +1 -0
  56. package/dist/cjs/behavior/system/mqtt/MqttInterface.js +351 -0
  57. package/dist/cjs/behavior/system/mqtt/MqttInterface.js.map +6 -0
  58. package/dist/cjs/behavior/system/mqtt/MqttServer.d.ts +36 -0
  59. package/dist/cjs/behavior/system/mqtt/MqttServer.d.ts.map +1 -0
  60. package/dist/cjs/behavior/system/mqtt/MqttServer.js +55 -0
  61. package/dist/cjs/behavior/system/mqtt/MqttServer.js.map +6 -0
  62. package/dist/cjs/behavior/system/mqtt/index.d.ts +8 -0
  63. package/dist/cjs/behavior/system/mqtt/index.d.ts.map +1 -0
  64. package/dist/cjs/behavior/system/mqtt/index.js +25 -0
  65. package/dist/cjs/behavior/system/mqtt/index.js.map +6 -0
  66. package/dist/cjs/behavior/system/network/NetworkClient.d.ts +32 -3
  67. package/dist/cjs/behavior/system/network/NetworkClient.d.ts.map +1 -1
  68. package/dist/cjs/behavior/system/network/NetworkClient.js +100 -18
  69. package/dist/cjs/behavior/system/network/NetworkClient.js.map +1 -1
  70. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.d.ts +2 -1
  71. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.d.ts.map +1 -1
  72. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.js +7 -5
  73. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.js.map +1 -1
  74. package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts +41 -0
  75. package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts.map +1 -0
  76. package/dist/cjs/behavior/system/remote/RemoteInterface.js +105 -0
  77. package/dist/cjs/behavior/system/remote/RemoteInterface.js.map +6 -0
  78. package/dist/cjs/behavior/system/remote/RemoteServer.d.ts +61 -0
  79. package/dist/cjs/behavior/system/remote/RemoteServer.d.ts.map +1 -0
  80. package/dist/cjs/behavior/system/remote/RemoteServer.js +118 -0
  81. package/dist/cjs/behavior/system/remote/RemoteServer.js.map +6 -0
  82. package/dist/cjs/behavior/system/remote/api/Api.d.ts +36 -0
  83. package/dist/cjs/behavior/system/remote/api/Api.d.ts.map +1 -0
  84. package/dist/cjs/behavior/system/remote/api/Api.js +156 -0
  85. package/dist/cjs/behavior/system/remote/api/Api.js.map +6 -0
  86. package/dist/cjs/behavior/system/remote/api/ApiPath.d.ts +32 -0
  87. package/dist/cjs/behavior/system/remote/api/ApiPath.d.ts.map +1 -0
  88. package/dist/cjs/behavior/system/remote/api/ApiPath.js +101 -0
  89. package/dist/cjs/behavior/system/remote/api/ApiPath.js.map +6 -0
  90. package/dist/cjs/behavior/system/remote/api/ApiResource.d.ts +102 -0
  91. package/dist/cjs/behavior/system/remote/api/ApiResource.d.ts.map +1 -0
  92. package/dist/cjs/behavior/system/remote/api/ApiResource.js +123 -0
  93. package/dist/cjs/behavior/system/remote/api/ApiResource.js.map +6 -0
  94. package/dist/cjs/behavior/system/remote/api/Envelope.d.ts +53 -0
  95. package/dist/cjs/behavior/system/remote/api/Envelope.d.ts.map +1 -0
  96. package/dist/cjs/behavior/system/remote/api/Envelope.js +107 -0
  97. package/dist/cjs/behavior/system/remote/api/Envelope.js.map +6 -0
  98. package/dist/cjs/behavior/system/remote/api/LocalResponse.d.ts +28 -0
  99. package/dist/cjs/behavior/system/remote/api/LocalResponse.d.ts.map +1 -0
  100. package/dist/cjs/behavior/system/remote/api/LocalResponse.js +22 -0
  101. package/dist/cjs/behavior/system/remote/api/LocalResponse.js.map +6 -0
  102. package/dist/cjs/behavior/system/remote/api/RemoteRequest.d.ts +43 -0
  103. package/dist/cjs/behavior/system/remote/api/RemoteRequest.d.ts.map +1 -0
  104. package/dist/cjs/behavior/system/remote/api/RemoteRequest.js +55 -0
  105. package/dist/cjs/behavior/system/remote/api/RemoteRequest.js.map +6 -0
  106. package/dist/cjs/behavior/system/remote/api/RemoteResponse.d.ts +37 -0
  107. package/dist/cjs/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
  108. package/dist/cjs/behavior/system/remote/api/RemoteResponse.js +52 -0
  109. package/dist/cjs/behavior/system/remote/api/RemoteResponse.js.map +6 -0
  110. package/dist/cjs/behavior/system/remote/api/index.d.ts +13 -0
  111. package/dist/cjs/behavior/system/remote/api/index.d.ts.map +1 -0
  112. package/dist/cjs/behavior/system/remote/api/index.js +30 -0
  113. package/dist/cjs/behavior/system/remote/api/index.js.map +6 -0
  114. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.d.ts +22 -0
  115. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.d.ts.map +1 -0
  116. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.js +69 -0
  117. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.js.map +6 -0
  118. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.d.ts +25 -0
  119. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.d.ts.map +1 -0
  120. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.js +76 -0
  121. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.js.map +6 -0
  122. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.d.ts +26 -0
  123. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.d.ts.map +1 -0
  124. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.js +83 -0
  125. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.js.map +6 -0
  126. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.d.ts +22 -0
  127. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.d.ts.map +1 -0
  128. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.js +52 -0
  129. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.js.map +6 -0
  130. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.d.ts +34 -0
  131. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.d.ts.map +1 -0
  132. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.js +78 -0
  133. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.js.map +6 -0
  134. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.d.ts +20 -0
  135. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.d.ts.map +1 -0
  136. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.js +74 -0
  137. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.js.map +6 -0
  138. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.d.ts +28 -0
  139. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.d.ts.map +1 -0
  140. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.js +123 -0
  141. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.js.map +6 -0
  142. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.d.ts +22 -0
  143. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.d.ts.map +1 -0
  144. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.js +74 -0
  145. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.js.map +6 -0
  146. package/dist/cjs/behavior/system/remote/api/resources/index.d.ts +13 -0
  147. package/dist/cjs/behavior/system/remote/api/resources/index.d.ts.map +1 -0
  148. package/dist/cjs/behavior/system/remote/api/resources/index.js +30 -0
  149. package/dist/cjs/behavior/system/remote/api/resources/index.js.map +6 -0
  150. package/dist/cjs/behavior/system/remote/index.d.ts +9 -0
  151. package/dist/cjs/behavior/system/remote/index.d.ts.map +1 -0
  152. package/dist/cjs/behavior/system/remote/index.js +26 -0
  153. package/dist/cjs/behavior/system/remote/index.js.map +6 -0
  154. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
  155. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js +2 -3
  156. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
  157. package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts +16 -0
  158. package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -0
  159. package/dist/cjs/behavior/system/websocket/WebSocketInterface.js +171 -0
  160. package/dist/cjs/behavior/system/websocket/WebSocketInterface.js.map +6 -0
  161. package/dist/cjs/behavior/system/websocket/WebSocketServer.d.ts +30 -0
  162. package/dist/cjs/behavior/system/websocket/WebSocketServer.d.ts.map +1 -0
  163. package/dist/cjs/behavior/system/websocket/WebSocketServer.js +51 -0
  164. package/dist/cjs/behavior/system/websocket/WebSocketServer.js.map +6 -0
  165. package/dist/cjs/behavior/system/websocket/index.d.ts +8 -0
  166. package/dist/cjs/behavior/system/websocket/index.d.ts.map +1 -0
  167. package/dist/cjs/behavior/system/websocket/index.js +25 -0
  168. package/dist/cjs/behavior/system/websocket/index.js.map +6 -0
  169. package/dist/cjs/endpoint/Agent.js +1 -1
  170. package/dist/cjs/endpoint/Agent.js.map +1 -1
  171. package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
  172. package/dist/cjs/endpoint/Endpoint.js +6 -4
  173. package/dist/cjs/endpoint/Endpoint.js.map +1 -1
  174. package/dist/cjs/endpoint/properties/Behaviors.d.ts +4 -0
  175. package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
  176. package/dist/cjs/endpoint/properties/Behaviors.js +11 -2
  177. package/dist/cjs/endpoint/properties/Behaviors.js.map +1 -1
  178. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.d.ts +20 -0
  179. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.d.ts.map +1 -0
  180. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.js +56 -0
  181. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.js.map +6 -0
  182. package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts +4 -0
  183. package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
  184. package/dist/cjs/endpoint/properties/EndpointInitializer.js +6 -0
  185. package/dist/cjs/endpoint/properties/EndpointInitializer.js.map +1 -1
  186. package/dist/cjs/endpoint/properties/Endpoints.d.ts +1 -0
  187. package/dist/cjs/endpoint/properties/Endpoints.d.ts.map +1 -1
  188. package/dist/cjs/endpoint/properties/Endpoints.js +3 -0
  189. package/dist/cjs/endpoint/properties/Endpoints.js.map +1 -1
  190. package/dist/cjs/endpoint/type/EndpointType.d.ts +2 -0
  191. package/dist/cjs/endpoint/type/EndpointType.d.ts.map +1 -1
  192. package/dist/cjs/endpoint/type/EndpointType.js +5 -0
  193. package/dist/cjs/endpoint/type/EndpointType.js.map +2 -2
  194. package/dist/cjs/node/ClientNode.d.ts +4 -2
  195. package/dist/cjs/node/ClientNode.d.ts.map +1 -1
  196. package/dist/cjs/node/ClientNode.js +5 -1
  197. package/dist/cjs/node/ClientNode.js.map +1 -1
  198. package/dist/cjs/node/Node.js +1 -1
  199. package/dist/cjs/node/NodeLifecycle.d.ts +1 -1
  200. package/dist/cjs/node/NodeLifecycle.d.ts.map +1 -1
  201. package/dist/cjs/node/NodeLifecycle.js +1 -1
  202. package/dist/cjs/node/NodeLifecycle.js.map +1 -1
  203. package/dist/cjs/node/client/ClientEndpointInitializer.d.ts +2 -0
  204. package/dist/cjs/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  205. package/dist/cjs/node/client/ClientEndpointInitializer.js +33 -0
  206. package/dist/cjs/node/client/ClientEndpointInitializer.js.map +1 -1
  207. package/dist/cjs/node/client/ClientEventEmitter.d.ts +3 -3
  208. package/dist/cjs/node/client/ClientEventEmitter.d.ts.map +1 -1
  209. package/dist/cjs/node/client/ClientNodeInteraction.d.ts +1 -0
  210. package/dist/cjs/node/client/ClientNodeInteraction.d.ts.map +1 -1
  211. package/dist/cjs/node/client/ClientNodeInteraction.js +6 -0
  212. package/dist/cjs/node/client/ClientNodeInteraction.js.map +1 -1
  213. package/dist/cjs/node/client/ClientStructure.d.ts +2 -0
  214. package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
  215. package/dist/cjs/node/client/ClientStructure.js +18 -5
  216. package/dist/cjs/node/client/ClientStructure.js.map +1 -1
  217. package/dist/cjs/node/client/Peers.d.ts +6 -0
  218. package/dist/cjs/node/client/Peers.d.ts.map +1 -1
  219. package/dist/cjs/node/client/Peers.js +55 -3
  220. package/dist/cjs/node/client/Peers.js.map +2 -2
  221. package/dist/cjs/node/index.d.ts +1 -0
  222. package/dist/cjs/node/index.d.ts.map +1 -1
  223. package/dist/cjs/node/index.js +1 -0
  224. package/dist/cjs/node/index.js.map +1 -1
  225. package/dist/cjs/node/integration/ChangeNotificationService.d.ts +56 -0
  226. package/dist/cjs/node/integration/ChangeNotificationService.d.ts.map +1 -0
  227. package/dist/cjs/node/integration/ChangeNotificationService.js +93 -0
  228. package/dist/cjs/node/integration/ChangeNotificationService.js.map +6 -0
  229. package/dist/cjs/node/{server → integration}/ProtocolService.d.ts +15 -0
  230. package/dist/cjs/node/integration/ProtocolService.d.ts.map +1 -0
  231. package/dist/cjs/node/{server → integration}/ProtocolService.js +26 -51
  232. package/dist/cjs/node/integration/ProtocolService.js.map +6 -0
  233. package/dist/cjs/node/integration/StateStream.d.ts +87 -0
  234. package/dist/cjs/node/integration/StateStream.d.ts.map +1 -0
  235. package/dist/cjs/node/integration/StateStream.js +276 -0
  236. package/dist/cjs/node/integration/StateStream.js.map +6 -0
  237. package/dist/cjs/node/integration/index.d.ts +9 -0
  238. package/dist/cjs/node/integration/index.d.ts.map +1 -0
  239. package/dist/cjs/node/integration/index.js +26 -0
  240. package/dist/cjs/node/integration/index.js.map +6 -0
  241. package/dist/cjs/node/server/OnlineServerInteraction.d.ts +1 -0
  242. package/dist/cjs/node/server/OnlineServerInteraction.d.ts.map +1 -1
  243. package/dist/cjs/node/server/OnlineServerInteraction.js +4 -1
  244. package/dist/cjs/node/server/OnlineServerInteraction.js.map +1 -1
  245. package/dist/cjs/node/server/ServerEnvironment.d.ts.map +1 -1
  246. package/dist/cjs/node/server/ServerEnvironment.js +6 -0
  247. package/dist/cjs/node/server/ServerEnvironment.js.map +1 -1
  248. package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
  249. package/dist/cjs/node/server/ServerSubscription.js +2 -2
  250. package/dist/cjs/node/server/index.d.ts +0 -1
  251. package/dist/cjs/node/server/index.d.ts.map +1 -1
  252. package/dist/cjs/node/server/index.js +0 -1
  253. package/dist/cjs/node/server/index.js.map +1 -1
  254. package/dist/cjs/storage/client/ClientNodeStores.d.ts.map +1 -1
  255. package/dist/cjs/storage/client/ClientNodeStores.js.map +1 -1
  256. package/dist/esm/behavior/Behavior.d.ts +4 -0
  257. package/dist/esm/behavior/Behavior.d.ts.map +1 -1
  258. package/dist/esm/behavior/Behavior.js +7 -1
  259. package/dist/esm/behavior/Behavior.js.map +1 -1
  260. package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  261. package/dist/esm/behavior/internal/BehaviorBacking.js +70 -4
  262. package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
  263. package/dist/esm/behavior/state/managed/Datasource.d.ts +4 -9
  264. package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
  265. package/dist/esm/behavior/state/managed/Datasource.js +9 -13
  266. package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
  267. package/dist/esm/behavior/state/managed/NameResolver.d.ts.map +1 -1
  268. package/dist/esm/behavior/state/managed/NameResolver.js.map +1 -1
  269. package/dist/esm/behavior/state/managed/values/ValueCaster.d.ts +3 -2
  270. package/dist/esm/behavior/state/managed/values/ValueCaster.d.ts.map +1 -1
  271. package/dist/esm/behavior/state/managed/values/ValueCaster.js +16 -3
  272. package/dist/esm/behavior/state/managed/values/ValueCaster.js.map +1 -1
  273. package/dist/esm/behavior/supervision/RootSupervisor.d.ts +4 -4
  274. package/dist/esm/behavior/supervision/RootSupervisor.d.ts.map +1 -1
  275. package/dist/esm/behavior/supervision/RootSupervisor.js +8 -11
  276. package/dist/esm/behavior/supervision/RootSupervisor.js.map +1 -1
  277. package/dist/esm/behavior/supervision/ValueSupervisor.d.ts +1 -1
  278. package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts +12 -5
  279. package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  280. package/dist/esm/behavior/system/commissioning/CommissioningClient.js +19 -1
  281. package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  282. package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  283. package/dist/esm/behavior/system/commissioning/CommissioningServer.js +2 -1
  284. package/dist/esm/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  285. package/dist/esm/behavior/system/controller/ControllerBehavior.d.ts +7 -0
  286. package/dist/esm/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
  287. package/dist/esm/behavior/system/controller/ControllerBehavior.js +10 -5
  288. package/dist/esm/behavior/system/controller/ControllerBehavior.js.map +1 -1
  289. package/dist/esm/behavior/system/http/HttpInterface.d.ts +36 -0
  290. package/dist/esm/behavior/system/http/HttpInterface.d.ts.map +1 -0
  291. package/dist/esm/behavior/system/http/HttpInterface.js +273 -0
  292. package/dist/esm/behavior/system/http/HttpInterface.js.map +6 -0
  293. package/dist/esm/behavior/system/http/HttpServer.d.ts +30 -0
  294. package/dist/esm/behavior/system/http/HttpServer.d.ts.map +1 -0
  295. package/dist/esm/behavior/system/http/HttpServer.js +31 -0
  296. package/dist/esm/behavior/system/http/HttpServer.js.map +6 -0
  297. package/dist/esm/behavior/system/http/index.d.ts +8 -0
  298. package/dist/esm/behavior/system/http/index.d.ts.map +1 -0
  299. package/dist/esm/behavior/system/http/index.js +8 -0
  300. package/dist/esm/behavior/system/http/index.js.map +6 -0
  301. package/dist/esm/behavior/system/index/IndexBehavior.d.ts +4 -4
  302. package/dist/esm/behavior/system/index/IndexBehavior.d.ts.map +1 -1
  303. package/dist/esm/behavior/system/index/IndexBehavior.js +9 -4
  304. package/dist/esm/behavior/system/index/IndexBehavior.js.map +1 -1
  305. package/dist/esm/behavior/system/index.d.ts +4 -0
  306. package/dist/esm/behavior/system/index.d.ts.map +1 -1
  307. package/dist/esm/behavior/system/index.js +4 -0
  308. package/dist/esm/behavior/system/index.js.map +1 -1
  309. package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts +22 -0
  310. package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts.map +1 -0
  311. package/dist/esm/behavior/system/mqtt/MqttInterface.js +341 -0
  312. package/dist/esm/behavior/system/mqtt/MqttInterface.js.map +6 -0
  313. package/dist/esm/behavior/system/mqtt/MqttServer.d.ts +36 -0
  314. package/dist/esm/behavior/system/mqtt/MqttServer.d.ts.map +1 -0
  315. package/dist/esm/behavior/system/mqtt/MqttServer.js +35 -0
  316. package/dist/esm/behavior/system/mqtt/MqttServer.js.map +6 -0
  317. package/dist/esm/behavior/system/mqtt/index.d.ts +8 -0
  318. package/dist/esm/behavior/system/mqtt/index.d.ts.map +1 -0
  319. package/dist/esm/behavior/system/mqtt/index.js +8 -0
  320. package/dist/esm/behavior/system/mqtt/index.js.map +6 -0
  321. package/dist/esm/behavior/system/network/NetworkClient.d.ts +32 -3
  322. package/dist/esm/behavior/system/network/NetworkClient.d.ts.map +1 -1
  323. package/dist/esm/behavior/system/network/NetworkClient.js +101 -19
  324. package/dist/esm/behavior/system/network/NetworkClient.js.map +1 -1
  325. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.d.ts +2 -1
  326. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.d.ts.map +1 -1
  327. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.js +8 -6
  328. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.js.map +1 -1
  329. package/dist/esm/behavior/system/remote/RemoteInterface.d.ts +41 -0
  330. package/dist/esm/behavior/system/remote/RemoteInterface.d.ts.map +1 -0
  331. package/dist/esm/behavior/system/remote/RemoteInterface.js +85 -0
  332. package/dist/esm/behavior/system/remote/RemoteInterface.js.map +6 -0
  333. package/dist/esm/behavior/system/remote/RemoteServer.d.ts +61 -0
  334. package/dist/esm/behavior/system/remote/RemoteServer.d.ts.map +1 -0
  335. package/dist/esm/behavior/system/remote/RemoteServer.js +98 -0
  336. package/dist/esm/behavior/system/remote/RemoteServer.js.map +6 -0
  337. package/dist/esm/behavior/system/remote/api/Api.d.ts +36 -0
  338. package/dist/esm/behavior/system/remote/api/Api.d.ts.map +1 -0
  339. package/dist/esm/behavior/system/remote/api/Api.js +136 -0
  340. package/dist/esm/behavior/system/remote/api/Api.js.map +6 -0
  341. package/dist/esm/behavior/system/remote/api/ApiPath.d.ts +32 -0
  342. package/dist/esm/behavior/system/remote/api/ApiPath.d.ts.map +1 -0
  343. package/dist/esm/behavior/system/remote/api/ApiPath.js +81 -0
  344. package/dist/esm/behavior/system/remote/api/ApiPath.js.map +6 -0
  345. package/dist/esm/behavior/system/remote/api/ApiResource.d.ts +102 -0
  346. package/dist/esm/behavior/system/remote/api/ApiResource.d.ts.map +1 -0
  347. package/dist/esm/behavior/system/remote/api/ApiResource.js +103 -0
  348. package/dist/esm/behavior/system/remote/api/ApiResource.js.map +6 -0
  349. package/dist/esm/behavior/system/remote/api/Envelope.d.ts +53 -0
  350. package/dist/esm/behavior/system/remote/api/Envelope.d.ts.map +1 -0
  351. package/dist/esm/behavior/system/remote/api/Envelope.js +87 -0
  352. package/dist/esm/behavior/system/remote/api/Envelope.js.map +6 -0
  353. package/dist/esm/behavior/system/remote/api/LocalResponse.d.ts +28 -0
  354. package/dist/esm/behavior/system/remote/api/LocalResponse.d.ts.map +1 -0
  355. package/dist/esm/behavior/system/remote/api/LocalResponse.js +6 -0
  356. package/dist/esm/behavior/system/remote/api/LocalResponse.js.map +6 -0
  357. package/dist/esm/behavior/system/remote/api/RemoteRequest.d.ts +43 -0
  358. package/dist/esm/behavior/system/remote/api/RemoteRequest.d.ts.map +1 -0
  359. package/dist/esm/behavior/system/remote/api/RemoteRequest.js +35 -0
  360. package/dist/esm/behavior/system/remote/api/RemoteRequest.js.map +6 -0
  361. package/dist/esm/behavior/system/remote/api/RemoteResponse.d.ts +37 -0
  362. package/dist/esm/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
  363. package/dist/esm/behavior/system/remote/api/RemoteResponse.js +32 -0
  364. package/dist/esm/behavior/system/remote/api/RemoteResponse.js.map +6 -0
  365. package/dist/esm/behavior/system/remote/api/index.d.ts +13 -0
  366. package/dist/esm/behavior/system/remote/api/index.d.ts.map +1 -0
  367. package/dist/esm/behavior/system/remote/api/index.js +13 -0
  368. package/dist/esm/behavior/system/remote/api/index.js.map +6 -0
  369. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.d.ts +22 -0
  370. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.d.ts.map +1 -0
  371. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.js +49 -0
  372. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.js.map +6 -0
  373. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.d.ts +25 -0
  374. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.d.ts.map +1 -0
  375. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.js +56 -0
  376. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.js.map +6 -0
  377. package/dist/esm/behavior/system/remote/api/resources/CommandResource.d.ts +26 -0
  378. package/dist/esm/behavior/system/remote/api/resources/CommandResource.d.ts.map +1 -0
  379. package/dist/esm/behavior/system/remote/api/resources/CommandResource.js +63 -0
  380. package/dist/esm/behavior/system/remote/api/resources/CommandResource.js.map +6 -0
  381. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.d.ts +22 -0
  382. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.d.ts.map +1 -0
  383. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.js +32 -0
  384. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.js.map +6 -0
  385. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.d.ts +34 -0
  386. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.d.ts.map +1 -0
  387. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.js +58 -0
  388. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.js.map +6 -0
  389. package/dist/esm/behavior/system/remote/api/resources/NodeResource.d.ts +20 -0
  390. package/dist/esm/behavior/system/remote/api/resources/NodeResource.d.ts.map +1 -0
  391. package/dist/esm/behavior/system/remote/api/resources/NodeResource.js +54 -0
  392. package/dist/esm/behavior/system/remote/api/resources/NodeResource.js.map +6 -0
  393. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.d.ts +28 -0
  394. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.d.ts.map +1 -0
  395. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.js +103 -0
  396. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.js.map +6 -0
  397. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.d.ts +22 -0
  398. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.d.ts.map +1 -0
  399. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.js +54 -0
  400. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.js.map +6 -0
  401. package/dist/esm/behavior/system/remote/api/resources/index.d.ts +13 -0
  402. package/dist/esm/behavior/system/remote/api/resources/index.d.ts.map +1 -0
  403. package/dist/esm/behavior/system/remote/api/resources/index.js +13 -0
  404. package/dist/esm/behavior/system/remote/api/resources/index.js.map +6 -0
  405. package/dist/esm/behavior/system/remote/index.d.ts +9 -0
  406. package/dist/esm/behavior/system/remote/index.d.ts.map +1 -0
  407. package/dist/esm/behavior/system/remote/index.js +9 -0
  408. package/dist/esm/behavior/system/remote/index.js.map +6 -0
  409. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
  410. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js +2 -3
  411. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
  412. package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts +16 -0
  413. package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -0
  414. package/dist/esm/behavior/system/websocket/WebSocketInterface.js +151 -0
  415. package/dist/esm/behavior/system/websocket/WebSocketInterface.js.map +6 -0
  416. package/dist/esm/behavior/system/websocket/WebSocketServer.d.ts +30 -0
  417. package/dist/esm/behavior/system/websocket/WebSocketServer.d.ts.map +1 -0
  418. package/dist/esm/behavior/system/websocket/WebSocketServer.js +31 -0
  419. package/dist/esm/behavior/system/websocket/WebSocketServer.js.map +6 -0
  420. package/dist/esm/behavior/system/websocket/index.d.ts +8 -0
  421. package/dist/esm/behavior/system/websocket/index.d.ts.map +1 -0
  422. package/dist/esm/behavior/system/websocket/index.js +8 -0
  423. package/dist/esm/behavior/system/websocket/index.js.map +6 -0
  424. package/dist/esm/endpoint/Agent.js +1 -1
  425. package/dist/esm/endpoint/Agent.js.map +1 -1
  426. package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
  427. package/dist/esm/endpoint/Endpoint.js +7 -4
  428. package/dist/esm/endpoint/Endpoint.js.map +1 -1
  429. package/dist/esm/endpoint/properties/Behaviors.d.ts +4 -0
  430. package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
  431. package/dist/esm/endpoint/properties/Behaviors.js +11 -2
  432. package/dist/esm/endpoint/properties/Behaviors.js.map +1 -1
  433. package/dist/esm/endpoint/properties/ClientNodeEndpoints.d.ts +20 -0
  434. package/dist/esm/endpoint/properties/ClientNodeEndpoints.d.ts.map +1 -0
  435. package/dist/esm/endpoint/properties/ClientNodeEndpoints.js +36 -0
  436. package/dist/esm/endpoint/properties/ClientNodeEndpoints.js.map +6 -0
  437. package/dist/esm/endpoint/properties/EndpointInitializer.d.ts +4 -0
  438. package/dist/esm/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
  439. package/dist/esm/endpoint/properties/EndpointInitializer.js +6 -0
  440. package/dist/esm/endpoint/properties/EndpointInitializer.js.map +1 -1
  441. package/dist/esm/endpoint/properties/Endpoints.d.ts +1 -0
  442. package/dist/esm/endpoint/properties/Endpoints.d.ts.map +1 -1
  443. package/dist/esm/endpoint/properties/Endpoints.js +3 -0
  444. package/dist/esm/endpoint/properties/Endpoints.js.map +1 -1
  445. package/dist/esm/endpoint/type/EndpointType.d.ts +2 -0
  446. package/dist/esm/endpoint/type/EndpointType.d.ts.map +1 -1
  447. package/dist/esm/endpoint/type/EndpointType.js +5 -0
  448. package/dist/esm/endpoint/type/EndpointType.js.map +2 -2
  449. package/dist/esm/node/ClientNode.d.ts +4 -2
  450. package/dist/esm/node/ClientNode.d.ts.map +1 -1
  451. package/dist/esm/node/ClientNode.js +5 -1
  452. package/dist/esm/node/ClientNode.js.map +1 -1
  453. package/dist/esm/node/Node.js +1 -1
  454. package/dist/esm/node/NodeLifecycle.d.ts +1 -1
  455. package/dist/esm/node/NodeLifecycle.d.ts.map +1 -1
  456. package/dist/esm/node/NodeLifecycle.js +1 -1
  457. package/dist/esm/node/NodeLifecycle.js.map +1 -1
  458. package/dist/esm/node/client/ClientEndpointInitializer.d.ts +2 -0
  459. package/dist/esm/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  460. package/dist/esm/node/client/ClientEndpointInitializer.js +33 -0
  461. package/dist/esm/node/client/ClientEndpointInitializer.js.map +1 -1
  462. package/dist/esm/node/client/ClientEventEmitter.d.ts +3 -3
  463. package/dist/esm/node/client/ClientEventEmitter.d.ts.map +1 -1
  464. package/dist/esm/node/client/ClientNodeInteraction.d.ts +1 -0
  465. package/dist/esm/node/client/ClientNodeInteraction.d.ts.map +1 -1
  466. package/dist/esm/node/client/ClientNodeInteraction.js +6 -0
  467. package/dist/esm/node/client/ClientNodeInteraction.js.map +1 -1
  468. package/dist/esm/node/client/ClientStructure.d.ts +2 -0
  469. package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
  470. package/dist/esm/node/client/ClientStructure.js +18 -5
  471. package/dist/esm/node/client/ClientStructure.js.map +1 -1
  472. package/dist/esm/node/client/Peers.d.ts +6 -0
  473. package/dist/esm/node/client/Peers.d.ts.map +1 -1
  474. package/dist/esm/node/client/Peers.js +57 -5
  475. package/dist/esm/node/client/Peers.js.map +1 -1
  476. package/dist/esm/node/index.d.ts +1 -0
  477. package/dist/esm/node/index.d.ts.map +1 -1
  478. package/dist/esm/node/index.js +1 -0
  479. package/dist/esm/node/index.js.map +1 -1
  480. package/dist/esm/node/integration/ChangeNotificationService.d.ts +56 -0
  481. package/dist/esm/node/integration/ChangeNotificationService.d.ts.map +1 -0
  482. package/dist/esm/node/integration/ChangeNotificationService.js +73 -0
  483. package/dist/esm/node/integration/ChangeNotificationService.js.map +6 -0
  484. package/dist/esm/node/{server → integration}/ProtocolService.d.ts +15 -0
  485. package/dist/esm/node/integration/ProtocolService.d.ts.map +1 -0
  486. package/dist/esm/node/{server → integration}/ProtocolService.js +26 -52
  487. package/dist/esm/node/integration/ProtocolService.js.map +6 -0
  488. package/dist/esm/node/integration/StateStream.d.ts +87 -0
  489. package/dist/esm/node/integration/StateStream.d.ts.map +1 -0
  490. package/dist/esm/node/integration/StateStream.js +256 -0
  491. package/dist/esm/node/integration/StateStream.js.map +6 -0
  492. package/dist/esm/node/integration/index.d.ts +9 -0
  493. package/dist/esm/node/integration/index.d.ts.map +1 -0
  494. package/dist/esm/node/integration/index.js +9 -0
  495. package/dist/esm/node/integration/index.js.map +6 -0
  496. package/dist/esm/node/server/OnlineServerInteraction.d.ts +1 -0
  497. package/dist/esm/node/server/OnlineServerInteraction.d.ts.map +1 -1
  498. package/dist/esm/node/server/OnlineServerInteraction.js +4 -1
  499. package/dist/esm/node/server/OnlineServerInteraction.js.map +1 -1
  500. package/dist/esm/node/server/ServerEnvironment.d.ts.map +1 -1
  501. package/dist/esm/node/server/ServerEnvironment.js +7 -1
  502. package/dist/esm/node/server/ServerEnvironment.js.map +1 -1
  503. package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
  504. package/dist/esm/node/server/ServerSubscription.js +2 -2
  505. package/dist/esm/node/server/index.d.ts +0 -1
  506. package/dist/esm/node/server/index.d.ts.map +1 -1
  507. package/dist/esm/node/server/index.js +0 -1
  508. package/dist/esm/node/server/index.js.map +1 -1
  509. package/dist/esm/storage/client/ClientNodeStores.d.ts.map +1 -1
  510. package/dist/esm/storage/client/ClientNodeStores.js.map +1 -1
  511. package/package.json +7 -7
  512. package/src/behavior/Behavior.ts +8 -1
  513. package/src/behavior/internal/BehaviorBacking.ts +82 -2
  514. package/src/behavior/state/managed/Datasource.ts +20 -26
  515. package/src/behavior/state/managed/NameResolver.ts +1 -1
  516. package/src/behavior/state/managed/values/ValueCaster.ts +21 -5
  517. package/src/behavior/supervision/RootSupervisor.ts +16 -11
  518. package/src/behavior/supervision/ValueSupervisor.ts +1 -1
  519. package/src/behavior/system/commissioning/CommissioningClient.ts +34 -6
  520. package/src/behavior/system/commissioning/CommissioningServer.ts +2 -3
  521. package/src/behavior/system/controller/ControllerBehavior.ts +13 -7
  522. package/src/behavior/system/http/HttpInterface.ts +326 -0
  523. package/src/behavior/system/http/HttpServer.ts +32 -0
  524. package/src/behavior/system/http/index.ts +8 -0
  525. package/src/behavior/system/index/IndexBehavior.ts +14 -6
  526. package/src/behavior/system/index.ts +4 -0
  527. package/src/behavior/system/mqtt/MqttInterface.ts +414 -0
  528. package/src/behavior/system/mqtt/MqttServer.ts +38 -0
  529. package/src/behavior/system/mqtt/index.ts +8 -0
  530. package/src/behavior/system/network/NetworkClient.ts +124 -24
  531. package/src/behavior/system/product-description/ProductDescriptionServer.ts +7 -5
  532. package/src/behavior/system/remote/RemoteInterface.ts +119 -0
  533. package/src/behavior/system/remote/RemoteServer.ts +132 -0
  534. package/src/behavior/system/remote/api/Api.ts +179 -0
  535. package/src/behavior/system/remote/api/ApiPath.ts +101 -0
  536. package/src/behavior/system/remote/api/ApiResource.ts +169 -0
  537. package/src/behavior/system/remote/api/Envelope.ts +112 -0
  538. package/src/behavior/system/remote/api/LocalResponse.ts +37 -0
  539. package/src/behavior/system/remote/api/RemoteRequest.ts +88 -0
  540. package/src/behavior/system/remote/api/RemoteResponse.ts +70 -0
  541. package/src/behavior/system/remote/api/index.ts +13 -0
  542. package/src/behavior/system/remote/api/resources/BehaviorResource.ts +66 -0
  543. package/src/behavior/system/remote/api/resources/ChangesResource.ts +75 -0
  544. package/src/behavior/system/remote/api/resources/CommandResource.ts +91 -0
  545. package/src/behavior/system/remote/api/resources/EndpointContainerResource.ts +45 -0
  546. package/src/behavior/system/remote/api/resources/EndpointResource.ts +75 -0
  547. package/src/behavior/system/remote/api/resources/NodeResource.ts +71 -0
  548. package/src/behavior/system/remote/api/resources/PropertyResource.ts +124 -0
  549. package/src/behavior/system/remote/api/resources/ServerNodeResource.ts +63 -0
  550. package/src/behavior/system/remote/api/resources/index.ts +13 -0
  551. package/src/behavior/system/remote/index.ts +9 -0
  552. package/src/behavior/system/subscriptions/SubscriptionsServer.ts +2 -3
  553. package/src/behavior/system/websocket/WebSocketInterface.ts +127 -0
  554. package/src/behavior/system/websocket/WebSocketServer.ts +32 -0
  555. package/src/behavior/system/websocket/index.ts +8 -0
  556. package/src/endpoint/Agent.ts +1 -1
  557. package/src/endpoint/Endpoint.ts +10 -4
  558. package/src/endpoint/properties/Behaviors.ts +15 -2
  559. package/src/endpoint/properties/ClientNodeEndpoints.ts +38 -0
  560. package/src/endpoint/properties/EndpointInitializer.ts +7 -0
  561. package/src/endpoint/properties/Endpoints.ts +4 -0
  562. package/src/endpoint/type/EndpointType.ts +3 -0
  563. package/src/node/ClientNode.ts +6 -1
  564. package/src/node/Node.ts +1 -1
  565. package/src/node/NodeLifecycle.ts +1 -1
  566. package/src/node/client/ClientEndpointInitializer.ts +38 -0
  567. package/src/node/client/ClientEventEmitter.ts +5 -5
  568. package/src/node/client/ClientNodeInteraction.ts +7 -0
  569. package/src/node/client/ClientStructure.ts +30 -5
  570. package/src/node/client/Peers.ts +71 -5
  571. package/src/node/index.ts +1 -0
  572. package/src/node/integration/ChangeNotificationService.ts +122 -0
  573. package/src/node/{server → integration}/ProtocolService.ts +32 -74
  574. package/src/node/integration/StateStream.ts +474 -0
  575. package/src/node/integration/index.ts +9 -0
  576. package/src/node/server/OnlineServerInteraction.ts +5 -1
  577. package/src/node/server/ServerEnvironment.ts +8 -1
  578. package/src/node/server/ServerSubscription.ts +6 -6
  579. package/src/node/server/index.ts +0 -1
  580. package/src/storage/client/ClientNodeStores.ts +4 -0
  581. package/dist/cjs/node/server/ProtocolService.d.ts.map +0 -1
  582. package/dist/cjs/node/server/ProtocolService.js.map +0 -6
  583. package/dist/esm/node/server/ProtocolService.d.ts.map +0 -1
  584. package/dist/esm/node/server/ProtocolService.js.map +0 -6
@@ -186,7 +186,7 @@ export class Agent {
186
186
  }
187
187
 
188
188
  [INSTALL_BEHAVIOR](behavior: Behavior) {
189
- this.#behaviors[(behavior.constructor as Behavior.Type).id] = behavior;
189
+ this.#behaviors[behavior.type.id] = behavior;
190
190
  }
191
191
  }
192
192
 
@@ -18,12 +18,13 @@ import {
18
18
  Lifecycle,
19
19
  Logger,
20
20
  MaybePromise,
21
+ toHex,
21
22
  UninitializedDependencyError,
22
23
  } from "#general";
23
24
  import { DataModelPath } from "#model";
25
+ import { ProtocolService } from "#node/integration/ProtocolService.js";
24
26
  import type { Node } from "#node/Node.js";
25
27
  import { IdentityService } from "#node/server/IdentityService.js";
26
- import { ProtocolService } from "#node/server/ProtocolService.js";
27
28
  import { Val } from "#protocol";
28
29
  import { EndpointNumber } from "#types";
29
30
  import { RootEndpoint } from "../endpoints/root.js";
@@ -227,7 +228,7 @@ export class Endpoint<T extends EndpointType = EndpointType.Empty> {
227
228
 
228
229
  await tx.addResources(behavior);
229
230
 
230
- const patch = (behavior.constructor as Behavior.Type).supervisor.patch;
231
+ const patch = behavior.type.supervisor.patch;
231
232
 
232
233
  if (typeof vals !== "object") {
233
234
  throw new ImplementationError(
@@ -266,7 +267,7 @@ export class Endpoint<T extends EndpointType = EndpointType.Empty> {
266
267
  await tx.begin();
267
268
  await tx.addResources(behavior);
268
269
 
269
- const patch = (behavior.constructor as Behavior.Type).supervisor.patch;
270
+ const patch = behavior.type.supervisor.patch;
270
271
 
271
272
  if (typeof values !== "object") {
272
273
  throw new ImplementationError(`State values for ${type.id} must be an object, not ${typeof values}`);
@@ -835,9 +836,14 @@ export class Endpoint<T extends EndpointType = EndpointType.Empty> {
835
836
  }
836
837
 
837
838
  get #diagnosticProps() {
839
+ const type = this.type;
838
840
  return {
839
841
  "endpoint#": this.number,
840
- type: `${this.type.name} (0x${this.type.deviceType.toString(16)})`,
842
+ type: `${type.name} (${
843
+ type.deviceType === EndpointType.UNKNOWN_DEVICE_TYPE
844
+ ? "unknown"
845
+ : `0x${toHex(type.deviceType)}${type.deviceRevision === EndpointType.UNKNOWN_DEVICE_REVISION ? "" : `, rev ${type.deviceRevision}`}`
846
+ })`,
841
847
  };
842
848
  }
843
849
 
@@ -27,7 +27,7 @@ import {
27
27
  Transaction,
28
28
  } from "#general";
29
29
  import { FeatureSet } from "#model";
30
- import { ProtocolService } from "#node/server/ProtocolService.js";
30
+ import { ProtocolService } from "#node/integration/ProtocolService.js";
31
31
  import { ClusterTypeProtocol, FabricManager, Val } from "#protocol";
32
32
  import { ClusterType, VoidSchema } from "#types";
33
33
  import type { Agent } from "../Agent.js";
@@ -63,6 +63,13 @@ export class Behaviors {
63
63
  return this.#supported;
64
64
  }
65
65
 
66
+ /**
67
+ * The list of active behaviors.
68
+ */
69
+ get active() {
70
+ return Object.values(this.#backings).map(backing => backing.type);
71
+ }
72
+
66
73
  get status() {
67
74
  const status = {} as Record<string, Lifecycle.Status>;
68
75
  for (const key in this.#supported) {
@@ -437,6 +444,12 @@ export class Behaviors {
437
444
  if (this.#supported === this.#endpoint.type.behaviors) {
438
445
  this.#supported = { ...this.#supported };
439
446
  }
447
+
448
+ // TODO how to better solve that?
449
+ if (this.#endpoint.env.has(EndpointInitializer)) {
450
+ type = this.#endpoint.env.get(EndpointInitializer).finalizeType(type);
451
+ }
452
+
440
453
  this.#supported[type.id] = type;
441
454
 
442
455
  this.#augmentEndpoint(type);
@@ -640,7 +653,7 @@ export class Behaviors {
640
653
  }
641
654
 
642
655
  const backing = this.#endpoint.env.get(EndpointInitializer).createBacking(this.#endpoint, myType);
643
- this.#backings[type.id] = backing;
656
+ this.#backings[backing.type.id] = backing;
644
657
  if (!this.#protocol) {
645
658
  this.#protocol = this.#endpoint.env.get(ProtocolService);
646
659
  }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Endpoint, EndpointType } from "#endpoint/index.js";
8
+ import type { ClientNode } from "#node/ClientNode.js";
9
+ import { Endpoints } from "./Endpoints.js";
10
+
11
+ /**
12
+ * Access to all endpoints on a client node, including the root endpoint.
13
+ */
14
+ export class ClientNodeEndpoints extends Endpoints {
15
+ /**
16
+ * For nodes where the behavior/cluster structure can not be initialized automatically (e.g. by a subscription) or
17
+ * when the subscription data misses special clusters, you can use this method to enable a cluster on a specific
18
+ * endpoint.
19
+ * The method adds the endpoint, if not existing.
20
+ */
21
+ require(endpointId: number, type: Partial<EndpointType> = {}) {
22
+ if (this.has(endpointId)) {
23
+ return this.for(endpointId);
24
+ }
25
+ const endpoint = new Endpoint({
26
+ id: `ep${endpointId}`,
27
+ number: endpointId,
28
+ type: EndpointType({
29
+ name: "ClientEndpoint",
30
+ deviceType: EndpointType.UNKNOWN_DEVICE_TYPE,
31
+ deviceRevision: EndpointType.UNKNOWN_DEVICE_REVISION,
32
+ ...type,
33
+ }),
34
+ });
35
+ (this.node as ClientNode).parts.add(endpoint);
36
+ return endpoint;
37
+ }
38
+ }
@@ -41,4 +41,11 @@ export abstract class EndpointInitializer {
41
41
  * Invoked after behaviors are initialized but before the initialization transaction commits.
42
42
  */
43
43
  behaviorsInitialized(_agent: Agent) {}
44
+
45
+ /**
46
+ * Allows Initializer to manipulate the type before it is used to create a backing or behavior.
47
+ */
48
+ finalizeType(type: Behavior.Type): Behavior.Type {
49
+ return type;
50
+ }
44
51
  }
@@ -21,6 +21,10 @@ export class Endpoints implements ImmutableSet<Endpoint> {
21
21
  this.#node = node;
22
22
  }
23
23
 
24
+ protected get node(): Node {
25
+ return this.#node;
26
+ }
27
+
24
28
  has(endpoint: Endpoint | number): boolean {
25
29
  if (endpoint === this.#node || endpoint === 0) {
26
30
  return true;
@@ -33,6 +33,9 @@ export function EndpointType<const T extends EndpointType.Options>(options: T) {
33
33
  }
34
34
 
35
35
  export namespace EndpointType {
36
+ export const UNKNOWN_DEVICE_TYPE = DeviceTypeId(-1, false);
37
+ export const UNKNOWN_DEVICE_REVISION = -1;
38
+
36
39
  /**
37
40
  * An endpoint type with no behaviors or requirements.
38
41
  */
@@ -10,13 +10,14 @@ import { ClientNetworkRuntime } from "#behavior/system/network/ClientNetworkRunt
10
10
  import { NetworkClient } from "#behavior/system/network/NetworkClient.js";
11
11
  import { NetworkRuntime } from "#behavior/system/network/NetworkRuntime.js";
12
12
  import { Agent } from "#endpoint/Agent.js";
13
+ import { ClientNodeEndpoints } from "#endpoint/properties/ClientNodeEndpoints.js";
13
14
  import { EndpointInitializer } from "#endpoint/properties/EndpointInitializer.js";
14
15
  import { Diagnostic, Identity, Lifecycle, Logger, MaybePromise } from "#general";
16
+ import { Matter, MatterModel } from "#model";
15
17
  import { Interactable, OccurrenceManager, PeerAddress } from "#protocol";
16
18
  import { ClientNodeStore } from "#storage/client/ClientNodeStore.js";
17
19
  import { RemoteWriter } from "#storage/client/RemoteWriter.js";
18
20
  import { ServerNodeStore } from "#storage/server/ServerNodeStore.js";
19
- import { Matter, MatterModel } from "@matter/model";
20
21
  import { ClientEndpointInitializer } from "./client/ClientEndpointInitializer.js";
21
22
  import { ClientNodeInteraction } from "./client/ClientNodeInteraction.js";
22
23
  import { Node } from "./Node.js";
@@ -61,6 +62,10 @@ export class ClientNode extends Node<ClientNode.RootEndpoint> {
61
62
  return this.#matter;
62
63
  }
63
64
 
65
+ override get endpoints(): ClientNodeEndpoints {
66
+ return new ClientNodeEndpoints(this);
67
+ }
68
+
64
69
  override initialize() {
65
70
  const store = this.env.get(ServerNodeStore).clientStores.storeForNode(this);
66
71
 
package/src/node/Node.ts CHANGED
@@ -28,7 +28,7 @@ import { Interactable } from "#protocol";
28
28
  import type { EndpointNumber } from "#types";
29
29
  import { RootEndpoint } from "../endpoints/root.js";
30
30
  import { NodeLifecycle } from "./NodeLifecycle.js";
31
- import { ProtocolService } from "./server/ProtocolService.js";
31
+ import { ProtocolService } from "./integration/ProtocolService.js";
32
32
 
33
33
  const logger = Logger.get("Node");
34
34
 
@@ -15,7 +15,7 @@ import { AsyncObservable, Mutex, Observable } from "#general";
15
15
  export class NodeLifecycle extends EndpointLifecycle {
16
16
  #online = AsyncObservable<[context: ActionContext]>();
17
17
  #goingOffline = AsyncObservable<[context: ActionContext]>();
18
- #offline = Observable<[context: ActionContext]>();
18
+ #offline = AsyncObservable<[context: ActionContext]>();
19
19
  #commissioned = Observable<[context: ActionContext]>();
20
20
  #decommissioned = Observable<[context: ActionContext]>();
21
21
  #initialized = Observable<[isCommissioned: boolean]>();
@@ -11,9 +11,12 @@ import { ClientBehaviorBacking } from "#behavior/internal/ClientBehaviorBacking.
11
11
  import { ServerBehaviorBacking } from "#behavior/internal/ServerBehaviorBacking.js";
12
12
  import { Endpoint } from "#endpoint/Endpoint.js";
13
13
  import { EndpointInitializer } from "#endpoint/properties/EndpointInitializer.js";
14
+ import { FeatureBitmap } from "#model";
15
+ import { ClientBehavior } from "#node/client/ClientBehavior.js";
14
16
  import type { ClientNode } from "#node/ClientNode.js";
15
17
  import { ClientNodeStore } from "#storage/client/ClientNodeStore.js";
16
18
  import { NodeStore } from "#storage/NodeStore.js";
19
+ import { AttributeId, CommandId } from "#types";
17
20
  import { ClientStructure } from "./ClientStructure.js";
18
21
 
19
22
  export class ClientEndpointInitializer extends EndpointInitializer {
@@ -57,6 +60,41 @@ export class ClientEndpointInitializer extends EndpointInitializer {
57
60
  return new ClientBehaviorBacking(endpoint, type, store, endpoint.behaviors.optionsFor(type));
58
61
  }
59
62
 
63
+ /** Convert the Cluster type to a ClientBehavior */
64
+ override finalizeType(type: Behavior.Type): Behavior.Type {
65
+ const cluster = (type as ClusterBehavior.Type).cluster;
66
+ if (cluster === undefined) {
67
+ return type;
68
+ }
69
+
70
+ const features: FeatureBitmap = {};
71
+ for (const f in cluster.features) {
72
+ features[f] = true;
73
+ }
74
+ const attributeNames = new Array<string>();
75
+ const attributes = new Array<AttributeId>();
76
+ for (const [name, attr] of Object.entries(cluster.attributes)) {
77
+ attributeNames.push(name);
78
+ attributes.push(attr.id);
79
+ }
80
+ const commandNames = new Array<string>();
81
+ const commands = new Array<CommandId>();
82
+ for (const [name, cmd] of Object.entries(cluster.commands)) {
83
+ commandNames.push(name);
84
+ commands.push(cmd.requestId);
85
+ }
86
+
87
+ return ClientBehavior({
88
+ id: cluster.id,
89
+ revision: cluster.revision,
90
+ features,
91
+ attributes,
92
+ commands,
93
+ attributeNames,
94
+ commandNames,
95
+ });
96
+ }
97
+
60
98
  get structure() {
61
99
  if (this.#structure === undefined) {
62
100
  this.#structure = new ClientStructure(this.#node);
@@ -4,13 +4,13 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { ElementEvent, Events } from "#behavior/Events.js";
7
+ import type { ElementEvent, Events } from "#behavior/Events.js";
8
8
  import { camelize, Logger } from "#general";
9
9
  import { ClusterModel, EventModel, MatterModel } from "#model";
10
- import { ClientNode } from "#node/ClientNode.js";
11
- import { ReadResult } from "#protocol";
12
- import { ClusterId, EndpointNumber, EventId } from "#types";
13
- import { ClientStructure } from "./ClientStructure.js";
10
+ import type { ClientNode } from "#node/ClientNode.js";
11
+ import type { ReadResult } from "#protocol";
12
+ import type { ClusterId, EndpointNumber, EventId } from "#types";
13
+ import type { ClientStructure } from "./ClientStructure.js";
14
14
 
15
15
  const logger = Logger.get("ClientEventEmitter");
16
16
 
@@ -60,6 +60,13 @@ export class ClientNodeInteraction implements Interactable<ActionContext> {
60
60
  return interaction.subscribe(intermediateRequest, context);
61
61
  }
62
62
 
63
+ cancelSubscription(id: number): void {
64
+ if (!this.#node.lifecycle.isOnline) {
65
+ return;
66
+ }
67
+ this.#node.env.get(ClientInteraction).cancelSubscription(id);
68
+ }
69
+
63
70
  async write<T extends Write>(request: T, context?: ActionContext): WriteResult<T> {
64
71
  return (await this.#connect()).write(request, context);
65
72
  }
@@ -30,8 +30,11 @@ export class ClientStructure {
30
30
  #nodeStore: ClientNodeStore;
31
31
  #endpoints: Record<EndpointNumber, EndpointStructure> = {};
32
32
  #emitEvent: ClientEventEmitter;
33
+ #node: ClientNode;
34
+ #subscribedFabricFiltered?: boolean;
33
35
 
34
36
  constructor(node: ClientNode) {
37
+ this.#node = node;
35
38
  this.#nodeStore = node.env.get(ClientNodeStore);
36
39
  this.#endpoints[node.number] = {
37
40
  endpoint: node,
@@ -143,9 +146,8 @@ export class ClientStructure {
143
146
  case "event-value":
144
147
  this.#emitEvent(change);
145
148
  break;
146
- }
147
- if (change.kind !== "attr-value") {
148
- continue;
149
+
150
+ // we ignore attr-status and event-status for now
149
151
  }
150
152
  }
151
153
 
@@ -157,11 +159,27 @@ export class ClientStructure {
157
159
  }
158
160
  }
159
161
 
162
+ /** Reference to the default subscription used when the node was started. */
163
+ protected get subscribedFabricFiltered() {
164
+ if (this.#subscribedFabricFiltered === undefined) {
165
+ this.#subscribedFabricFiltered = this.#node.state.network.defaultSubscription?.isFabricFiltered ?? true;
166
+ this.#node.events.network.defaultSubscription$Changed.on(newSubscription => {
167
+ this.#subscribedFabricFiltered = newSubscription?.isFabricFiltered ?? true;
168
+ });
169
+ }
170
+ return this.#subscribedFabricFiltered;
171
+ }
172
+
160
173
  async #mutateAttribute(
161
174
  change: ReadResult.AttributeValue,
162
175
  scope: ReadScope,
163
176
  currentUpdates: undefined | AttributeUpdates,
164
177
  ) {
178
+ // We only store values when an initial subscription is defined and the fabric filter matches
179
+ if (this.subscribedFabricFiltered !== scope.isFabricFiltered) {
180
+ return currentUpdates;
181
+ }
182
+
165
183
  const { endpointId, clusterId, attributeId } = change.path;
166
184
 
167
185
  // If we are building updates to a cluster and the cluster/endpoint changes, apply the current update
@@ -236,6 +254,7 @@ export class ClientStructure {
236
254
  const attrs = cluster.store.initialValues ?? {};
237
255
 
238
256
  // Generate a behavior if enough information is available
257
+ // TODO: Detect changes in revision/features/attributes/commands and update behavior if needed
239
258
  if (cluster.behavior === undefined) {
240
259
  const {
241
260
  [ClusterRevision.id]: clusterRevision,
@@ -291,6 +310,9 @@ export class ClientStructure {
291
310
 
292
311
  const serverList = attrs[SERVER_LIST_ATTR_ID];
293
312
  if (Array.isArray(serverList)) {
313
+ // TODO: Remove clusters that are no longer present
314
+ // Including events vis parts/endpoints on node (per endpoint and generic "changed")?
315
+ // Including data cleanup
294
316
  for (const cluster of serverList) {
295
317
  if (typeof cluster === "number") {
296
318
  this.#clusterFor(endpoint, cluster as ClusterId);
@@ -307,6 +329,9 @@ export class ClientStructure {
307
329
 
308
330
  const part = this.#endpointFor(partNo as EndpointNumber);
309
331
 
332
+ // TODO - remove endpoints/parts that are no longer present
333
+ // Including events vis parts/endpoints on node (per endpoint and generic "changed")?
334
+ // Including data cleanup
310
335
  let isAlreadyDescendant = false;
311
336
  for (let owner = part.endpoint.owner; owner; owner = owner.owner) {
312
337
  if (owner === endpoint.endpoint) {
@@ -336,8 +361,8 @@ export class ClientStructure {
336
361
  number,
337
362
  type: EndpointType({
338
363
  name: "ClientEndpoint",
339
- deviceType: -1,
340
- deviceRevision: -1,
364
+ deviceType: EndpointType.UNKNOWN_DEVICE_TYPE,
365
+ deviceRevision: EndpointType.UNKNOWN_DEVICE_REVISION,
341
366
  }),
342
367
  }),
343
368
  clusters: {},
@@ -10,9 +10,11 @@ import { ContinuousDiscovery } from "#behavior/system/controller/discovery/Conti
10
10
  import { Discovery } from "#behavior/system/controller/discovery/Discovery.js";
11
11
  import { InstanceDiscovery } from "#behavior/system/controller/discovery/InstanceDiscovery.js";
12
12
  import { EndpointContainer } from "#endpoint/properties/EndpointContainer.js";
13
- import { CancelablePromise, Duration, Logger, Minutes, Seconds, Time, Timestamp } from "#general";
14
- import { PeerAddress, PeerAddressStore } from "#protocol";
13
+ import { CancelablePromise, Duration, ImplementationError, Logger, Minutes, Seconds, Time, Timestamp } from "#general";
14
+ import { InteractionServer } from "#node/index.js";
15
+ import { FabricManager, PeerAddress, PeerAddressStore } from "#protocol";
15
16
  import { ServerNodeStore } from "#storage/server/ServerNodeStore.js";
17
+ import { ClientSubscriptionHandler, ClientSubscriptions } from "@matter/protocol";
16
18
  import { ClientNode } from "../ClientNode.js";
17
19
  import type { ServerNode } from "../ServerNode.js";
18
20
  import { ClientNodeFactory } from "./ClientNodeFactory.js";
@@ -31,6 +33,7 @@ const EXPIRATION_INTERVAL = Minutes.one;
31
33
  export class Peers extends EndpointContainer<ClientNode> {
32
34
  #expirationInterval?: CancelablePromise;
33
35
  #expirationWorker?: Promise<void>;
36
+ #subscriptionHandler?: ClientSubscriptionHandler;
34
37
  #closed = false;
35
38
 
36
39
  constructor(owner: ServerNode) {
@@ -42,7 +45,9 @@ export class Peers extends EndpointContainer<ClientNode> {
42
45
 
43
46
  this.owner.env.set(PeerAddressStore, new NodePeerAddressStore(owner));
44
47
 
45
- this.added.on(this.#manageExpiration.bind(this));
48
+ owner.env.applyTo(InteractionServer, this.#configureInteractionServer.bind(this));
49
+
50
+ this.added.on(this.#handlePeerAdded.bind(this));
46
51
  this.deleted.on(this.#manageExpiration.bind(this));
47
52
  }
48
53
 
@@ -92,7 +97,7 @@ export class Peers extends EndpointContainer<ClientNode> {
92
97
  const address = PeerAddress(id);
93
98
  for (const node of this) {
94
99
  const nodeAddress = node.state.commissioning.peerAddress;
95
- if (nodeAddress && PeerAddress(nodeAddress) === address) {
100
+ if (nodeAddress && PeerAddress.is(nodeAddress, address)) {
96
101
  return node;
97
102
  }
98
103
  }
@@ -112,8 +117,37 @@ export class Peers extends EndpointContainer<ClientNode> {
112
117
  super.add(node);
113
118
  }
114
119
 
120
+ /**
121
+ * Get or create a client node for the given peer address.
122
+ * This is mainly used to communicate to other known nodes on the fabric without having a formal commissioning
123
+ * process.
124
+ */
125
+ async forAddress(peerAddress: PeerAddress, options: Omit<ClientNode.Options, "owner"> = {}) {
126
+ if (!this.owner.env.get(FabricManager).has(peerAddress)) {
127
+ throw new ImplementationError("Cannot register a peer address for a fabric we do not belong to");
128
+ }
129
+
130
+ let node = this.get(peerAddress);
131
+ if (!node) {
132
+ // We do not have that node till now, also not persisted, so create it
133
+ const factory = this.owner.env.get(ClientNodeFactory);
134
+ node = factory.create(options);
135
+ await node.construction;
136
+ this.add(node);
137
+
138
+ // Nodes we do not commission are not auto-subscribed but enabled
139
+ // But we add the peer address
140
+ await node.set({
141
+ commissioning: { peerAddress: PeerAddress(peerAddress) },
142
+ });
143
+ }
144
+
145
+ return node;
146
+ }
147
+
115
148
  override async close() {
116
149
  this.#closed = true;
150
+ await this.#subscriptionHandler?.close();
117
151
  this.#cancelExpiration();
118
152
  await this.#expirationWorker;
119
153
  await super.close();
@@ -126,8 +160,40 @@ export class Peers extends EndpointContainer<ClientNode> {
126
160
  }
127
161
  }
128
162
 
163
+ #handlePeerAdded() {
164
+ if (this.owner.env.has(InteractionServer)) {
165
+ this.#configureInteractionServer();
166
+ }
167
+ this.#manageExpiration();
168
+ }
169
+
170
+ /**
171
+ * If required, installs a listener in the environment's {@link InteractionServer} to handle subscription responses.
172
+ */
173
+ #configureInteractionServer() {
174
+ if (this.#closed || this.size > 0 || !this.owner.env.has(InteractionServer)) {
175
+ return;
176
+ }
177
+
178
+ const subscriptions = this.owner.env.get(ClientSubscriptions);
179
+ const interactionServer = this.owner.env.get(InteractionServer);
180
+
181
+ if (!this.#subscriptionHandler) {
182
+ this.#subscriptionHandler = new ClientSubscriptionHandler(subscriptions);
183
+ }
184
+
185
+ interactionServer.clientHandler = this.#subscriptionHandler;
186
+ }
187
+
188
+ /**
189
+ * Enables or disables the expiration timer that culls expired uncommissioned nodes.
190
+ */
129
191
  #manageExpiration() {
130
- if (this.#closed || this.#expirationWorker) {
192
+ if (this.#closed) {
193
+ return;
194
+ }
195
+
196
+ if (this.#expirationWorker) {
131
197
  return;
132
198
  }
133
199
 
package/src/node/index.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  export * from "./client/index.js";
8
+ export * from "./integration/index.js";
8
9
  export * from "./Node.js";
9
10
  export * from "./NodeLifecycle.js";
10
11
  export * from "./server/index.js";
@@ -0,0 +1,122 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import type { Behavior } from "#behavior/Behavior.js";
8
+ import type { BehaviorBacking } from "#behavior/internal/BehaviorBacking.js";
9
+ import type { Endpoint } from "#endpoint/Endpoint.js";
10
+ import { EndpointLifecycle } from "#endpoint/properties/EndpointLifecycle.js";
11
+ import { InternalError, Observable, ObserverGroup } from "#general";
12
+ import type { Node } from "#node/Node.js";
13
+ import type { ServerNode } from "#node/ServerNode.js";
14
+
15
+ /**
16
+ * High-level change notification service.
17
+ *
18
+ * This service provides an optimized path to detecting property changes for all endpoints associated with a node. This
19
+ * includes endpoints on peers.
20
+ */
21
+ export class ChangeNotificationService {
22
+ #change = new Observable<[changes: ChangeNotificationService.Change]>();
23
+ #observers = new Map<Node, ObserverGroup>();
24
+
25
+ constructor(node: ServerNode) {
26
+ this.#beginNodeObservation(node);
27
+
28
+ if (node.lifecycle.isReady) {
29
+ this.#beginPeerObservation(node);
30
+ } else {
31
+ node.lifecycle.ready.once(() => this.#beginPeerObservation(node));
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Change event source.
37
+ */
38
+ get change() {
39
+ return this.#change;
40
+ }
41
+
42
+ /**
43
+ * Invoked by the {@link BehaviorBacking} when state changes.
44
+ */
45
+ broadcastUpdate(backing: BehaviorBacking, properties: string[]) {
46
+ const { endpoint, type: behavior } = backing;
47
+ this.#change.emit({
48
+ kind: "update",
49
+ endpoint,
50
+ behavior,
51
+ version: backing.datasource.version,
52
+ properties,
53
+ });
54
+ }
55
+
56
+ close() {
57
+ for (const observers of this.#observers.values()) {
58
+ observers.close();
59
+ }
60
+ this.#observers.clear();
61
+ }
62
+
63
+ #beginNodeObservation(node: Node) {
64
+ const observers = new ObserverGroup();
65
+ this.#observers.set(node, observers);
66
+
67
+ observers.on(node.lifecycle.changed, (type, endpoint) => {
68
+ switch (type) {
69
+ case EndpointLifecycle.Change.Destroyed:
70
+ this.#change.emit({
71
+ kind: "delete",
72
+ endpoint,
73
+ });
74
+ if (endpoint == node) {
75
+ observers.close();
76
+ this.#observers.delete(node);
77
+ }
78
+ break;
79
+ }
80
+ });
81
+ }
82
+
83
+ #beginPeerObservation(node: ServerNode) {
84
+ const observers = this.#observers.get(node);
85
+
86
+ if (observers === undefined) {
87
+ throw new InternalError("Change notification initialization order is broken");
88
+ }
89
+
90
+ observers.on(node.peers.added, this.#beginNodeObservation.bind(this));
91
+ }
92
+ }
93
+
94
+ export namespace ChangeNotificationService {
95
+ export type Key = string | number;
96
+
97
+ /**
98
+ * Emits when state changes.
99
+ *
100
+ * If present, {@link properties} indicates the specific updated properties. Otherwise the recipient should
101
+ * consider all properties.
102
+ */
103
+ export interface PropertyUpdate {
104
+ kind: "update";
105
+ endpoint: Endpoint;
106
+ behavior: Behavior.Type;
107
+ version: number;
108
+ properties?: string[];
109
+ }
110
+
111
+ /**
112
+ * Emits when endpoints/nodes are deleted.
113
+ *
114
+ * This indicates to the recipient to drop the associated data subtree.
115
+ */
116
+ export interface EndpointDelete {
117
+ kind: "delete";
118
+ endpoint: Endpoint;
119
+ }
120
+
121
+ export type Change = PropertyUpdate | EndpointDelete;
122
+ }