@matter/node 0.16.0-alpha.0-20251006-3fe1e7c57 → 0.16.0-alpha.0-20251013-89bb7099d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) 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/Events.js +2 -2
  6. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  7. package/dist/cjs/behavior/internal/BehaviorBacking.js +67 -3
  8. package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
  9. package/dist/cjs/behavior/state/managed/Datasource.d.ts +4 -9
  10. package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
  11. package/dist/cjs/behavior/state/managed/Datasource.js +9 -12
  12. package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
  13. package/dist/cjs/behavior/state/managed/NameResolver.d.ts.map +1 -1
  14. package/dist/cjs/behavior/state/managed/NameResolver.js.map +1 -1
  15. package/dist/cjs/behavior/state/managed/values/ValueCaster.d.ts +3 -2
  16. package/dist/cjs/behavior/state/managed/values/ValueCaster.d.ts.map +1 -1
  17. package/dist/cjs/behavior/state/managed/values/ValueCaster.js +16 -3
  18. package/dist/cjs/behavior/state/managed/values/ValueCaster.js.map +1 -1
  19. package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts +12 -5
  20. package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  21. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +17 -1
  22. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  23. package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  24. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js +2 -1
  25. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  26. package/dist/cjs/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
  27. package/dist/cjs/behavior/system/controller/ControllerBehavior.js +0 -4
  28. package/dist/cjs/behavior/system/controller/ControllerBehavior.js.map +1 -1
  29. package/dist/cjs/behavior/system/http/HttpInterface.d.ts +36 -0
  30. package/dist/cjs/behavior/system/http/HttpInterface.d.ts.map +1 -0
  31. package/dist/cjs/behavior/system/http/HttpInterface.js +282 -0
  32. package/dist/cjs/behavior/system/http/HttpInterface.js.map +6 -0
  33. package/dist/cjs/behavior/system/http/HttpServer.d.ts +30 -0
  34. package/dist/cjs/behavior/system/http/HttpServer.d.ts.map +1 -0
  35. package/dist/cjs/behavior/system/http/HttpServer.js +51 -0
  36. package/dist/cjs/behavior/system/http/HttpServer.js.map +6 -0
  37. package/dist/cjs/behavior/system/http/index.d.ts +8 -0
  38. package/dist/cjs/behavior/system/http/index.d.ts.map +1 -0
  39. package/dist/cjs/behavior/system/http/index.js +25 -0
  40. package/dist/cjs/behavior/system/http/index.js.map +6 -0
  41. package/dist/cjs/behavior/system/index/IndexBehavior.d.ts +4 -4
  42. package/dist/cjs/behavior/system/index/IndexBehavior.d.ts.map +1 -1
  43. package/dist/cjs/behavior/system/index/IndexBehavior.js +9 -4
  44. package/dist/cjs/behavior/system/index/IndexBehavior.js.map +1 -1
  45. package/dist/cjs/behavior/system/index.d.ts +4 -0
  46. package/dist/cjs/behavior/system/index.d.ts.map +1 -1
  47. package/dist/cjs/behavior/system/index.js +4 -0
  48. package/dist/cjs/behavior/system/index.js.map +1 -1
  49. package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts +22 -0
  50. package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts.map +1 -0
  51. package/dist/cjs/behavior/system/mqtt/MqttInterface.js +351 -0
  52. package/dist/cjs/behavior/system/mqtt/MqttInterface.js.map +6 -0
  53. package/dist/cjs/behavior/system/mqtt/MqttServer.d.ts +36 -0
  54. package/dist/cjs/behavior/system/mqtt/MqttServer.d.ts.map +1 -0
  55. package/dist/cjs/behavior/system/mqtt/MqttServer.js +55 -0
  56. package/dist/cjs/behavior/system/mqtt/MqttServer.js.map +6 -0
  57. package/dist/cjs/behavior/system/mqtt/index.d.ts +8 -0
  58. package/dist/cjs/behavior/system/mqtt/index.d.ts.map +1 -0
  59. package/dist/cjs/behavior/system/mqtt/index.js +25 -0
  60. package/dist/cjs/behavior/system/mqtt/index.js.map +6 -0
  61. package/dist/cjs/behavior/system/network/NetworkClient.d.ts +32 -3
  62. package/dist/cjs/behavior/system/network/NetworkClient.d.ts.map +1 -1
  63. package/dist/cjs/behavior/system/network/NetworkClient.js +100 -18
  64. package/dist/cjs/behavior/system/network/NetworkClient.js.map +1 -1
  65. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.d.ts +2 -1
  66. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.d.ts.map +1 -1
  67. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.js +7 -5
  68. package/dist/cjs/behavior/system/product-description/ProductDescriptionServer.js.map +1 -1
  69. package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts +41 -0
  70. package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts.map +1 -0
  71. package/dist/cjs/behavior/system/remote/RemoteInterface.js +105 -0
  72. package/dist/cjs/behavior/system/remote/RemoteInterface.js.map +6 -0
  73. package/dist/cjs/behavior/system/remote/RemoteServer.d.ts +61 -0
  74. package/dist/cjs/behavior/system/remote/RemoteServer.d.ts.map +1 -0
  75. package/dist/cjs/behavior/system/remote/RemoteServer.js +118 -0
  76. package/dist/cjs/behavior/system/remote/RemoteServer.js.map +6 -0
  77. package/dist/cjs/behavior/system/remote/api/Api.d.ts +36 -0
  78. package/dist/cjs/behavior/system/remote/api/Api.d.ts.map +1 -0
  79. package/dist/cjs/behavior/system/remote/api/Api.js +157 -0
  80. package/dist/cjs/behavior/system/remote/api/Api.js.map +6 -0
  81. package/dist/cjs/behavior/system/remote/api/ApiPath.d.ts +32 -0
  82. package/dist/cjs/behavior/system/remote/api/ApiPath.d.ts.map +1 -0
  83. package/dist/cjs/behavior/system/remote/api/ApiPath.js +101 -0
  84. package/dist/cjs/behavior/system/remote/api/ApiPath.js.map +6 -0
  85. package/dist/cjs/behavior/system/remote/api/ApiResource.d.ts +102 -0
  86. package/dist/cjs/behavior/system/remote/api/ApiResource.d.ts.map +1 -0
  87. package/dist/cjs/behavior/system/remote/api/ApiResource.js +123 -0
  88. package/dist/cjs/behavior/system/remote/api/ApiResource.js.map +6 -0
  89. package/dist/cjs/behavior/system/remote/api/Envelope.d.ts +53 -0
  90. package/dist/cjs/behavior/system/remote/api/Envelope.d.ts.map +1 -0
  91. package/dist/cjs/behavior/system/remote/api/Envelope.js +107 -0
  92. package/dist/cjs/behavior/system/remote/api/Envelope.js.map +6 -0
  93. package/dist/cjs/behavior/system/remote/api/LocalResponse.d.ts +28 -0
  94. package/dist/cjs/behavior/system/remote/api/LocalResponse.d.ts.map +1 -0
  95. package/dist/cjs/behavior/system/remote/api/LocalResponse.js +22 -0
  96. package/dist/cjs/behavior/system/remote/api/LocalResponse.js.map +6 -0
  97. package/dist/cjs/behavior/system/remote/api/RemoteRequest.d.ts +43 -0
  98. package/dist/cjs/behavior/system/remote/api/RemoteRequest.d.ts.map +1 -0
  99. package/dist/cjs/behavior/system/remote/api/RemoteRequest.js +55 -0
  100. package/dist/cjs/behavior/system/remote/api/RemoteRequest.js.map +6 -0
  101. package/dist/cjs/behavior/system/remote/api/RemoteResponse.d.ts +38 -0
  102. package/dist/cjs/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
  103. package/dist/cjs/behavior/system/remote/api/RemoteResponse.js +65 -0
  104. package/dist/cjs/behavior/system/remote/api/RemoteResponse.js.map +6 -0
  105. package/dist/cjs/behavior/system/remote/api/index.d.ts +13 -0
  106. package/dist/cjs/behavior/system/remote/api/index.d.ts.map +1 -0
  107. package/dist/cjs/behavior/system/remote/api/index.js +30 -0
  108. package/dist/cjs/behavior/system/remote/api/index.js.map +6 -0
  109. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.d.ts +22 -0
  110. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.d.ts.map +1 -0
  111. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.js +69 -0
  112. package/dist/cjs/behavior/system/remote/api/resources/BehaviorResource.js.map +6 -0
  113. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.d.ts +25 -0
  114. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.d.ts.map +1 -0
  115. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.js +76 -0
  116. package/dist/cjs/behavior/system/remote/api/resources/ChangesResource.js.map +6 -0
  117. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.d.ts +26 -0
  118. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.d.ts.map +1 -0
  119. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.js +83 -0
  120. package/dist/cjs/behavior/system/remote/api/resources/CommandResource.js.map +6 -0
  121. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.d.ts +22 -0
  122. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.d.ts.map +1 -0
  123. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.js +52 -0
  124. package/dist/cjs/behavior/system/remote/api/resources/EndpointContainerResource.js.map +6 -0
  125. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.d.ts +34 -0
  126. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.d.ts.map +1 -0
  127. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.js +78 -0
  128. package/dist/cjs/behavior/system/remote/api/resources/EndpointResource.js.map +6 -0
  129. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.d.ts +20 -0
  130. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.d.ts.map +1 -0
  131. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.js +74 -0
  132. package/dist/cjs/behavior/system/remote/api/resources/NodeResource.js.map +6 -0
  133. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.d.ts +28 -0
  134. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.d.ts.map +1 -0
  135. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.js +123 -0
  136. package/dist/cjs/behavior/system/remote/api/resources/PropertyResource.js.map +6 -0
  137. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.d.ts +22 -0
  138. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.d.ts.map +1 -0
  139. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.js +74 -0
  140. package/dist/cjs/behavior/system/remote/api/resources/ServerNodeResource.js.map +6 -0
  141. package/dist/cjs/behavior/system/remote/api/resources/index.d.ts +13 -0
  142. package/dist/cjs/behavior/system/remote/api/resources/index.d.ts.map +1 -0
  143. package/dist/cjs/behavior/system/remote/api/resources/index.js +30 -0
  144. package/dist/cjs/behavior/system/remote/api/resources/index.js.map +6 -0
  145. package/dist/cjs/behavior/system/remote/index.d.ts +9 -0
  146. package/dist/cjs/behavior/system/remote/index.d.ts.map +1 -0
  147. package/dist/cjs/behavior/system/remote/index.js +26 -0
  148. package/dist/cjs/behavior/system/remote/index.js.map +6 -0
  149. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
  150. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js +1 -2
  151. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
  152. package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts +16 -0
  153. package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -0
  154. package/dist/cjs/behavior/system/websocket/WebSocketInterface.js +171 -0
  155. package/dist/cjs/behavior/system/websocket/WebSocketInterface.js.map +6 -0
  156. package/dist/cjs/behavior/system/websocket/WebSocketServer.d.ts +30 -0
  157. package/dist/cjs/behavior/system/websocket/WebSocketServer.d.ts.map +1 -0
  158. package/dist/cjs/behavior/system/websocket/WebSocketServer.js +51 -0
  159. package/dist/cjs/behavior/system/websocket/WebSocketServer.js.map +6 -0
  160. package/dist/cjs/behavior/system/websocket/index.d.ts +8 -0
  161. package/dist/cjs/behavior/system/websocket/index.d.ts.map +1 -0
  162. package/dist/cjs/behavior/system/websocket/index.js +25 -0
  163. package/dist/cjs/behavior/system/websocket/index.js.map +6 -0
  164. package/dist/cjs/endpoint/Agent.js +1 -1
  165. package/dist/cjs/endpoint/Agent.js.map +1 -1
  166. package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
  167. package/dist/cjs/endpoint/Endpoint.js +6 -4
  168. package/dist/cjs/endpoint/Endpoint.js.map +1 -1
  169. package/dist/cjs/endpoint/properties/Behaviors.d.ts +4 -0
  170. package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
  171. package/dist/cjs/endpoint/properties/Behaviors.js +11 -2
  172. package/dist/cjs/endpoint/properties/Behaviors.js.map +1 -1
  173. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.d.ts +20 -0
  174. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.d.ts.map +1 -0
  175. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.js +56 -0
  176. package/dist/cjs/endpoint/properties/ClientNodeEndpoints.js.map +6 -0
  177. package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts +4 -0
  178. package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
  179. package/dist/cjs/endpoint/properties/EndpointInitializer.js +6 -0
  180. package/dist/cjs/endpoint/properties/EndpointInitializer.js.map +1 -1
  181. package/dist/cjs/endpoint/properties/Endpoints.d.ts +1 -0
  182. package/dist/cjs/endpoint/properties/Endpoints.d.ts.map +1 -1
  183. package/dist/cjs/endpoint/properties/Endpoints.js +3 -0
  184. package/dist/cjs/endpoint/properties/Endpoints.js.map +1 -1
  185. package/dist/cjs/endpoint/type/EndpointType.d.ts +2 -0
  186. package/dist/cjs/endpoint/type/EndpointType.d.ts.map +1 -1
  187. package/dist/cjs/endpoint/type/EndpointType.js +5 -0
  188. package/dist/cjs/endpoint/type/EndpointType.js.map +2 -2
  189. package/dist/cjs/node/ClientNode.d.ts +4 -2
  190. package/dist/cjs/node/ClientNode.d.ts.map +1 -1
  191. package/dist/cjs/node/ClientNode.js +6 -2
  192. package/dist/cjs/node/ClientNode.js.map +1 -1
  193. package/dist/cjs/node/Node.js +1 -1
  194. package/dist/cjs/node/NodeLifecycle.d.ts +1 -1
  195. package/dist/cjs/node/NodeLifecycle.d.ts.map +1 -1
  196. package/dist/cjs/node/NodeLifecycle.js +1 -1
  197. package/dist/cjs/node/NodeLifecycle.js.map +1 -1
  198. package/dist/cjs/node/client/ClientEndpointInitializer.d.ts +2 -0
  199. package/dist/cjs/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  200. package/dist/cjs/node/client/ClientEndpointInitializer.js +33 -0
  201. package/dist/cjs/node/client/ClientEndpointInitializer.js.map +1 -1
  202. package/dist/cjs/node/client/ClientEventEmitter.d.ts +3 -3
  203. package/dist/cjs/node/client/ClientEventEmitter.d.ts.map +1 -1
  204. package/dist/cjs/node/client/ClientNodeInteraction.d.ts +1 -0
  205. package/dist/cjs/node/client/ClientNodeInteraction.d.ts.map +1 -1
  206. package/dist/cjs/node/client/ClientNodeInteraction.js +6 -0
  207. package/dist/cjs/node/client/ClientNodeInteraction.js.map +1 -1
  208. package/dist/cjs/node/client/ClientStructure.d.ts +2 -0
  209. package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
  210. package/dist/cjs/node/client/ClientStructure.js +18 -5
  211. package/dist/cjs/node/client/ClientStructure.js.map +1 -1
  212. package/dist/cjs/node/client/Peers.d.ts +6 -0
  213. package/dist/cjs/node/client/Peers.d.ts.map +1 -1
  214. package/dist/cjs/node/client/Peers.js +55 -3
  215. package/dist/cjs/node/client/Peers.js.map +2 -2
  216. package/dist/cjs/node/index.d.ts +1 -0
  217. package/dist/cjs/node/index.d.ts.map +1 -1
  218. package/dist/cjs/node/index.js +1 -0
  219. package/dist/cjs/node/index.js.map +1 -1
  220. package/dist/cjs/node/integration/ChangeNotificationService.d.ts +56 -0
  221. package/dist/cjs/node/integration/ChangeNotificationService.d.ts.map +1 -0
  222. package/dist/cjs/node/integration/ChangeNotificationService.js +93 -0
  223. package/dist/cjs/node/integration/ChangeNotificationService.js.map +6 -0
  224. package/dist/cjs/node/{server → integration}/ProtocolService.d.ts +15 -0
  225. package/dist/cjs/node/integration/ProtocolService.d.ts.map +1 -0
  226. package/dist/cjs/node/{server → integration}/ProtocolService.js +26 -51
  227. package/dist/cjs/node/integration/ProtocolService.js.map +6 -0
  228. package/dist/cjs/node/integration/StateStream.d.ts +87 -0
  229. package/dist/cjs/node/integration/StateStream.d.ts.map +1 -0
  230. package/dist/cjs/node/integration/StateStream.js +276 -0
  231. package/dist/cjs/node/integration/StateStream.js.map +6 -0
  232. package/dist/cjs/node/integration/index.d.ts +9 -0
  233. package/dist/cjs/node/integration/index.d.ts.map +1 -0
  234. package/dist/cjs/node/integration/index.js +26 -0
  235. package/dist/cjs/node/integration/index.js.map +6 -0
  236. package/dist/cjs/node/server/OnlineServerInteraction.d.ts +1 -0
  237. package/dist/cjs/node/server/OnlineServerInteraction.d.ts.map +1 -1
  238. package/dist/cjs/node/server/OnlineServerInteraction.js +4 -1
  239. package/dist/cjs/node/server/OnlineServerInteraction.js.map +1 -1
  240. package/dist/cjs/node/server/ServerEnvironment.d.ts.map +1 -1
  241. package/dist/cjs/node/server/ServerEnvironment.js +6 -0
  242. package/dist/cjs/node/server/ServerEnvironment.js.map +1 -1
  243. package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
  244. package/dist/cjs/node/server/ServerSubscription.js +2 -2
  245. package/dist/cjs/node/server/index.d.ts +0 -1
  246. package/dist/cjs/node/server/index.d.ts.map +1 -1
  247. package/dist/cjs/node/server/index.js +0 -1
  248. package/dist/cjs/node/server/index.js.map +1 -1
  249. package/dist/cjs/storage/client/ClientNodeStores.d.ts.map +1 -1
  250. package/dist/cjs/storage/client/ClientNodeStores.js.map +1 -1
  251. package/dist/esm/behavior/Behavior.d.ts +4 -0
  252. package/dist/esm/behavior/Behavior.d.ts.map +1 -1
  253. package/dist/esm/behavior/Behavior.js +7 -1
  254. package/dist/esm/behavior/Behavior.js.map +1 -1
  255. package/dist/esm/behavior/Events.js +2 -2
  256. package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  257. package/dist/esm/behavior/internal/BehaviorBacking.js +70 -4
  258. package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
  259. package/dist/esm/behavior/state/managed/Datasource.d.ts +4 -9
  260. package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
  261. package/dist/esm/behavior/state/managed/Datasource.js +9 -13
  262. package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
  263. package/dist/esm/behavior/state/managed/NameResolver.d.ts.map +1 -1
  264. package/dist/esm/behavior/state/managed/NameResolver.js.map +1 -1
  265. package/dist/esm/behavior/state/managed/values/ValueCaster.d.ts +3 -2
  266. package/dist/esm/behavior/state/managed/values/ValueCaster.d.ts.map +1 -1
  267. package/dist/esm/behavior/state/managed/values/ValueCaster.js +16 -3
  268. package/dist/esm/behavior/state/managed/values/ValueCaster.js.map +1 -1
  269. package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts +12 -5
  270. package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  271. package/dist/esm/behavior/system/commissioning/CommissioningClient.js +19 -1
  272. package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  273. package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  274. package/dist/esm/behavior/system/commissioning/CommissioningServer.js +2 -1
  275. package/dist/esm/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  276. package/dist/esm/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
  277. package/dist/esm/behavior/system/controller/ControllerBehavior.js +0 -5
  278. package/dist/esm/behavior/system/controller/ControllerBehavior.js.map +1 -1
  279. package/dist/esm/behavior/system/http/HttpInterface.d.ts +36 -0
  280. package/dist/esm/behavior/system/http/HttpInterface.d.ts.map +1 -0
  281. package/dist/esm/behavior/system/http/HttpInterface.js +273 -0
  282. package/dist/esm/behavior/system/http/HttpInterface.js.map +6 -0
  283. package/dist/esm/behavior/system/http/HttpServer.d.ts +30 -0
  284. package/dist/esm/behavior/system/http/HttpServer.d.ts.map +1 -0
  285. package/dist/esm/behavior/system/http/HttpServer.js +31 -0
  286. package/dist/esm/behavior/system/http/HttpServer.js.map +6 -0
  287. package/dist/esm/behavior/system/http/index.d.ts +8 -0
  288. package/dist/esm/behavior/system/http/index.d.ts.map +1 -0
  289. package/dist/esm/behavior/system/http/index.js +8 -0
  290. package/dist/esm/behavior/system/http/index.js.map +6 -0
  291. package/dist/esm/behavior/system/index/IndexBehavior.d.ts +4 -4
  292. package/dist/esm/behavior/system/index/IndexBehavior.d.ts.map +1 -1
  293. package/dist/esm/behavior/system/index/IndexBehavior.js +9 -4
  294. package/dist/esm/behavior/system/index/IndexBehavior.js.map +1 -1
  295. package/dist/esm/behavior/system/index.d.ts +4 -0
  296. package/dist/esm/behavior/system/index.d.ts.map +1 -1
  297. package/dist/esm/behavior/system/index.js +4 -0
  298. package/dist/esm/behavior/system/index.js.map +1 -1
  299. package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts +22 -0
  300. package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts.map +1 -0
  301. package/dist/esm/behavior/system/mqtt/MqttInterface.js +341 -0
  302. package/dist/esm/behavior/system/mqtt/MqttInterface.js.map +6 -0
  303. package/dist/esm/behavior/system/mqtt/MqttServer.d.ts +36 -0
  304. package/dist/esm/behavior/system/mqtt/MqttServer.d.ts.map +1 -0
  305. package/dist/esm/behavior/system/mqtt/MqttServer.js +35 -0
  306. package/dist/esm/behavior/system/mqtt/MqttServer.js.map +6 -0
  307. package/dist/esm/behavior/system/mqtt/index.d.ts +8 -0
  308. package/dist/esm/behavior/system/mqtt/index.d.ts.map +1 -0
  309. package/dist/esm/behavior/system/mqtt/index.js +8 -0
  310. package/dist/esm/behavior/system/mqtt/index.js.map +6 -0
  311. package/dist/esm/behavior/system/network/NetworkClient.d.ts +32 -3
  312. package/dist/esm/behavior/system/network/NetworkClient.d.ts.map +1 -1
  313. package/dist/esm/behavior/system/network/NetworkClient.js +101 -19
  314. package/dist/esm/behavior/system/network/NetworkClient.js.map +1 -1
  315. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.d.ts +2 -1
  316. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.d.ts.map +1 -1
  317. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.js +8 -6
  318. package/dist/esm/behavior/system/product-description/ProductDescriptionServer.js.map +1 -1
  319. package/dist/esm/behavior/system/remote/RemoteInterface.d.ts +41 -0
  320. package/dist/esm/behavior/system/remote/RemoteInterface.d.ts.map +1 -0
  321. package/dist/esm/behavior/system/remote/RemoteInterface.js +85 -0
  322. package/dist/esm/behavior/system/remote/RemoteInterface.js.map +6 -0
  323. package/dist/esm/behavior/system/remote/RemoteServer.d.ts +61 -0
  324. package/dist/esm/behavior/system/remote/RemoteServer.d.ts.map +1 -0
  325. package/dist/esm/behavior/system/remote/RemoteServer.js +98 -0
  326. package/dist/esm/behavior/system/remote/RemoteServer.js.map +6 -0
  327. package/dist/esm/behavior/system/remote/api/Api.d.ts +36 -0
  328. package/dist/esm/behavior/system/remote/api/Api.d.ts.map +1 -0
  329. package/dist/esm/behavior/system/remote/api/Api.js +137 -0
  330. package/dist/esm/behavior/system/remote/api/Api.js.map +6 -0
  331. package/dist/esm/behavior/system/remote/api/ApiPath.d.ts +32 -0
  332. package/dist/esm/behavior/system/remote/api/ApiPath.d.ts.map +1 -0
  333. package/dist/esm/behavior/system/remote/api/ApiPath.js +81 -0
  334. package/dist/esm/behavior/system/remote/api/ApiPath.js.map +6 -0
  335. package/dist/esm/behavior/system/remote/api/ApiResource.d.ts +102 -0
  336. package/dist/esm/behavior/system/remote/api/ApiResource.d.ts.map +1 -0
  337. package/dist/esm/behavior/system/remote/api/ApiResource.js +103 -0
  338. package/dist/esm/behavior/system/remote/api/ApiResource.js.map +6 -0
  339. package/dist/esm/behavior/system/remote/api/Envelope.d.ts +53 -0
  340. package/dist/esm/behavior/system/remote/api/Envelope.d.ts.map +1 -0
  341. package/dist/esm/behavior/system/remote/api/Envelope.js +87 -0
  342. package/dist/esm/behavior/system/remote/api/Envelope.js.map +6 -0
  343. package/dist/esm/behavior/system/remote/api/LocalResponse.d.ts +28 -0
  344. package/dist/esm/behavior/system/remote/api/LocalResponse.d.ts.map +1 -0
  345. package/dist/esm/behavior/system/remote/api/LocalResponse.js +6 -0
  346. package/dist/esm/behavior/system/remote/api/LocalResponse.js.map +6 -0
  347. package/dist/esm/behavior/system/remote/api/RemoteRequest.d.ts +43 -0
  348. package/dist/esm/behavior/system/remote/api/RemoteRequest.d.ts.map +1 -0
  349. package/dist/esm/behavior/system/remote/api/RemoteRequest.js +35 -0
  350. package/dist/esm/behavior/system/remote/api/RemoteRequest.js.map +6 -0
  351. package/dist/esm/behavior/system/remote/api/RemoteResponse.d.ts +38 -0
  352. package/dist/esm/behavior/system/remote/api/RemoteResponse.d.ts.map +1 -0
  353. package/dist/esm/behavior/system/remote/api/RemoteResponse.js +45 -0
  354. package/dist/esm/behavior/system/remote/api/RemoteResponse.js.map +6 -0
  355. package/dist/esm/behavior/system/remote/api/index.d.ts +13 -0
  356. package/dist/esm/behavior/system/remote/api/index.d.ts.map +1 -0
  357. package/dist/esm/behavior/system/remote/api/index.js +13 -0
  358. package/dist/esm/behavior/system/remote/api/index.js.map +6 -0
  359. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.d.ts +22 -0
  360. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.d.ts.map +1 -0
  361. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.js +49 -0
  362. package/dist/esm/behavior/system/remote/api/resources/BehaviorResource.js.map +6 -0
  363. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.d.ts +25 -0
  364. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.d.ts.map +1 -0
  365. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.js +56 -0
  366. package/dist/esm/behavior/system/remote/api/resources/ChangesResource.js.map +6 -0
  367. package/dist/esm/behavior/system/remote/api/resources/CommandResource.d.ts +26 -0
  368. package/dist/esm/behavior/system/remote/api/resources/CommandResource.d.ts.map +1 -0
  369. package/dist/esm/behavior/system/remote/api/resources/CommandResource.js +63 -0
  370. package/dist/esm/behavior/system/remote/api/resources/CommandResource.js.map +6 -0
  371. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.d.ts +22 -0
  372. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.d.ts.map +1 -0
  373. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.js +32 -0
  374. package/dist/esm/behavior/system/remote/api/resources/EndpointContainerResource.js.map +6 -0
  375. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.d.ts +34 -0
  376. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.d.ts.map +1 -0
  377. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.js +58 -0
  378. package/dist/esm/behavior/system/remote/api/resources/EndpointResource.js.map +6 -0
  379. package/dist/esm/behavior/system/remote/api/resources/NodeResource.d.ts +20 -0
  380. package/dist/esm/behavior/system/remote/api/resources/NodeResource.d.ts.map +1 -0
  381. package/dist/esm/behavior/system/remote/api/resources/NodeResource.js +54 -0
  382. package/dist/esm/behavior/system/remote/api/resources/NodeResource.js.map +6 -0
  383. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.d.ts +28 -0
  384. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.d.ts.map +1 -0
  385. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.js +103 -0
  386. package/dist/esm/behavior/system/remote/api/resources/PropertyResource.js.map +6 -0
  387. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.d.ts +22 -0
  388. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.d.ts.map +1 -0
  389. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.js +54 -0
  390. package/dist/esm/behavior/system/remote/api/resources/ServerNodeResource.js.map +6 -0
  391. package/dist/esm/behavior/system/remote/api/resources/index.d.ts +13 -0
  392. package/dist/esm/behavior/system/remote/api/resources/index.d.ts.map +1 -0
  393. package/dist/esm/behavior/system/remote/api/resources/index.js +13 -0
  394. package/dist/esm/behavior/system/remote/api/resources/index.js.map +6 -0
  395. package/dist/esm/behavior/system/remote/index.d.ts +9 -0
  396. package/dist/esm/behavior/system/remote/index.d.ts.map +1 -0
  397. package/dist/esm/behavior/system/remote/index.js +9 -0
  398. package/dist/esm/behavior/system/remote/index.js.map +6 -0
  399. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
  400. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js +1 -2
  401. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
  402. package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts +16 -0
  403. package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -0
  404. package/dist/esm/behavior/system/websocket/WebSocketInterface.js +151 -0
  405. package/dist/esm/behavior/system/websocket/WebSocketInterface.js.map +6 -0
  406. package/dist/esm/behavior/system/websocket/WebSocketServer.d.ts +30 -0
  407. package/dist/esm/behavior/system/websocket/WebSocketServer.d.ts.map +1 -0
  408. package/dist/esm/behavior/system/websocket/WebSocketServer.js +31 -0
  409. package/dist/esm/behavior/system/websocket/WebSocketServer.js.map +6 -0
  410. package/dist/esm/behavior/system/websocket/index.d.ts +8 -0
  411. package/dist/esm/behavior/system/websocket/index.d.ts.map +1 -0
  412. package/dist/esm/behavior/system/websocket/index.js +8 -0
  413. package/dist/esm/behavior/system/websocket/index.js.map +6 -0
  414. package/dist/esm/endpoint/Agent.js +1 -1
  415. package/dist/esm/endpoint/Agent.js.map +1 -1
  416. package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
  417. package/dist/esm/endpoint/Endpoint.js +7 -4
  418. package/dist/esm/endpoint/Endpoint.js.map +1 -1
  419. package/dist/esm/endpoint/properties/Behaviors.d.ts +4 -0
  420. package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
  421. package/dist/esm/endpoint/properties/Behaviors.js +11 -2
  422. package/dist/esm/endpoint/properties/Behaviors.js.map +1 -1
  423. package/dist/esm/endpoint/properties/ClientNodeEndpoints.d.ts +20 -0
  424. package/dist/esm/endpoint/properties/ClientNodeEndpoints.d.ts.map +1 -0
  425. package/dist/esm/endpoint/properties/ClientNodeEndpoints.js +36 -0
  426. package/dist/esm/endpoint/properties/ClientNodeEndpoints.js.map +6 -0
  427. package/dist/esm/endpoint/properties/EndpointInitializer.d.ts +4 -0
  428. package/dist/esm/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
  429. package/dist/esm/endpoint/properties/EndpointInitializer.js +6 -0
  430. package/dist/esm/endpoint/properties/EndpointInitializer.js.map +1 -1
  431. package/dist/esm/endpoint/properties/Endpoints.d.ts +1 -0
  432. package/dist/esm/endpoint/properties/Endpoints.d.ts.map +1 -1
  433. package/dist/esm/endpoint/properties/Endpoints.js +3 -0
  434. package/dist/esm/endpoint/properties/Endpoints.js.map +1 -1
  435. package/dist/esm/endpoint/type/EndpointType.d.ts +2 -0
  436. package/dist/esm/endpoint/type/EndpointType.d.ts.map +1 -1
  437. package/dist/esm/endpoint/type/EndpointType.js +5 -0
  438. package/dist/esm/endpoint/type/EndpointType.js.map +2 -2
  439. package/dist/esm/node/ClientNode.d.ts +4 -2
  440. package/dist/esm/node/ClientNode.d.ts.map +1 -1
  441. package/dist/esm/node/ClientNode.js +6 -2
  442. package/dist/esm/node/ClientNode.js.map +1 -1
  443. package/dist/esm/node/Node.js +1 -1
  444. package/dist/esm/node/NodeLifecycle.d.ts +1 -1
  445. package/dist/esm/node/NodeLifecycle.d.ts.map +1 -1
  446. package/dist/esm/node/NodeLifecycle.js +1 -1
  447. package/dist/esm/node/NodeLifecycle.js.map +1 -1
  448. package/dist/esm/node/client/ClientEndpointInitializer.d.ts +2 -0
  449. package/dist/esm/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  450. package/dist/esm/node/client/ClientEndpointInitializer.js +33 -0
  451. package/dist/esm/node/client/ClientEndpointInitializer.js.map +1 -1
  452. package/dist/esm/node/client/ClientEventEmitter.d.ts +3 -3
  453. package/dist/esm/node/client/ClientEventEmitter.d.ts.map +1 -1
  454. package/dist/esm/node/client/ClientNodeInteraction.d.ts +1 -0
  455. package/dist/esm/node/client/ClientNodeInteraction.d.ts.map +1 -1
  456. package/dist/esm/node/client/ClientNodeInteraction.js +6 -0
  457. package/dist/esm/node/client/ClientNodeInteraction.js.map +1 -1
  458. package/dist/esm/node/client/ClientStructure.d.ts +2 -0
  459. package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
  460. package/dist/esm/node/client/ClientStructure.js +18 -5
  461. package/dist/esm/node/client/ClientStructure.js.map +1 -1
  462. package/dist/esm/node/client/Peers.d.ts +6 -0
  463. package/dist/esm/node/client/Peers.d.ts.map +1 -1
  464. package/dist/esm/node/client/Peers.js +57 -5
  465. package/dist/esm/node/client/Peers.js.map +1 -1
  466. package/dist/esm/node/index.d.ts +1 -0
  467. package/dist/esm/node/index.d.ts.map +1 -1
  468. package/dist/esm/node/index.js +1 -0
  469. package/dist/esm/node/index.js.map +1 -1
  470. package/dist/esm/node/integration/ChangeNotificationService.d.ts +56 -0
  471. package/dist/esm/node/integration/ChangeNotificationService.d.ts.map +1 -0
  472. package/dist/esm/node/integration/ChangeNotificationService.js +73 -0
  473. package/dist/esm/node/integration/ChangeNotificationService.js.map +6 -0
  474. package/dist/esm/node/{server → integration}/ProtocolService.d.ts +15 -0
  475. package/dist/esm/node/integration/ProtocolService.d.ts.map +1 -0
  476. package/dist/esm/node/{server → integration}/ProtocolService.js +26 -52
  477. package/dist/esm/node/integration/ProtocolService.js.map +6 -0
  478. package/dist/esm/node/integration/StateStream.d.ts +87 -0
  479. package/dist/esm/node/integration/StateStream.d.ts.map +1 -0
  480. package/dist/esm/node/integration/StateStream.js +256 -0
  481. package/dist/esm/node/integration/StateStream.js.map +6 -0
  482. package/dist/esm/node/integration/index.d.ts +9 -0
  483. package/dist/esm/node/integration/index.d.ts.map +1 -0
  484. package/dist/esm/node/integration/index.js +9 -0
  485. package/dist/esm/node/integration/index.js.map +6 -0
  486. package/dist/esm/node/server/OnlineServerInteraction.d.ts +1 -0
  487. package/dist/esm/node/server/OnlineServerInteraction.d.ts.map +1 -1
  488. package/dist/esm/node/server/OnlineServerInteraction.js +4 -1
  489. package/dist/esm/node/server/OnlineServerInteraction.js.map +1 -1
  490. package/dist/esm/node/server/ServerEnvironment.d.ts.map +1 -1
  491. package/dist/esm/node/server/ServerEnvironment.js +7 -1
  492. package/dist/esm/node/server/ServerEnvironment.js.map +1 -1
  493. package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
  494. package/dist/esm/node/server/ServerSubscription.js +2 -2
  495. package/dist/esm/node/server/index.d.ts +0 -1
  496. package/dist/esm/node/server/index.d.ts.map +1 -1
  497. package/dist/esm/node/server/index.js +0 -1
  498. package/dist/esm/node/server/index.js.map +1 -1
  499. package/dist/esm/storage/client/ClientNodeStores.d.ts.map +1 -1
  500. package/dist/esm/storage/client/ClientNodeStores.js.map +1 -1
  501. package/package.json +7 -7
  502. package/src/behavior/Behavior.ts +8 -1
  503. package/src/behavior/Events.ts +2 -2
  504. package/src/behavior/internal/BehaviorBacking.ts +82 -2
  505. package/src/behavior/state/managed/Datasource.ts +20 -26
  506. package/src/behavior/state/managed/NameResolver.ts +1 -1
  507. package/src/behavior/state/managed/values/ValueCaster.ts +21 -5
  508. package/src/behavior/system/commissioning/CommissioningClient.ts +34 -6
  509. package/src/behavior/system/commissioning/CommissioningServer.ts +2 -3
  510. package/src/behavior/system/controller/ControllerBehavior.ts +0 -7
  511. package/src/behavior/system/http/HttpInterface.ts +326 -0
  512. package/src/behavior/system/http/HttpServer.ts +32 -0
  513. package/src/behavior/system/http/index.ts +8 -0
  514. package/src/behavior/system/index/IndexBehavior.ts +14 -6
  515. package/src/behavior/system/index.ts +4 -0
  516. package/src/behavior/system/mqtt/MqttInterface.ts +414 -0
  517. package/src/behavior/system/mqtt/MqttServer.ts +38 -0
  518. package/src/behavior/system/mqtt/index.ts +8 -0
  519. package/src/behavior/system/network/NetworkClient.ts +124 -24
  520. package/src/behavior/system/product-description/ProductDescriptionServer.ts +7 -5
  521. package/src/behavior/system/remote/RemoteInterface.ts +119 -0
  522. package/src/behavior/system/remote/RemoteServer.ts +132 -0
  523. package/src/behavior/system/remote/api/Api.ts +179 -0
  524. package/src/behavior/system/remote/api/ApiPath.ts +101 -0
  525. package/src/behavior/system/remote/api/ApiResource.ts +169 -0
  526. package/src/behavior/system/remote/api/Envelope.ts +112 -0
  527. package/src/behavior/system/remote/api/LocalResponse.ts +37 -0
  528. package/src/behavior/system/remote/api/RemoteRequest.ts +88 -0
  529. package/src/behavior/system/remote/api/RemoteResponse.ts +83 -0
  530. package/src/behavior/system/remote/api/index.ts +13 -0
  531. package/src/behavior/system/remote/api/resources/BehaviorResource.ts +66 -0
  532. package/src/behavior/system/remote/api/resources/ChangesResource.ts +75 -0
  533. package/src/behavior/system/remote/api/resources/CommandResource.ts +91 -0
  534. package/src/behavior/system/remote/api/resources/EndpointContainerResource.ts +45 -0
  535. package/src/behavior/system/remote/api/resources/EndpointResource.ts +75 -0
  536. package/src/behavior/system/remote/api/resources/NodeResource.ts +71 -0
  537. package/src/behavior/system/remote/api/resources/PropertyResource.ts +124 -0
  538. package/src/behavior/system/remote/api/resources/ServerNodeResource.ts +63 -0
  539. package/src/behavior/system/remote/api/resources/index.ts +13 -0
  540. package/src/behavior/system/remote/index.ts +9 -0
  541. package/src/behavior/system/subscriptions/SubscriptionsServer.ts +1 -2
  542. package/src/behavior/system/websocket/WebSocketInterface.ts +127 -0
  543. package/src/behavior/system/websocket/WebSocketServer.ts +32 -0
  544. package/src/behavior/system/websocket/index.ts +8 -0
  545. package/src/endpoint/Agent.ts +1 -1
  546. package/src/endpoint/Endpoint.ts +10 -4
  547. package/src/endpoint/properties/Behaviors.ts +15 -2
  548. package/src/endpoint/properties/ClientNodeEndpoints.ts +38 -0
  549. package/src/endpoint/properties/EndpointInitializer.ts +7 -0
  550. package/src/endpoint/properties/Endpoints.ts +4 -0
  551. package/src/endpoint/type/EndpointType.ts +3 -0
  552. package/src/node/ClientNode.ts +7 -2
  553. package/src/node/Node.ts +1 -1
  554. package/src/node/NodeLifecycle.ts +1 -1
  555. package/src/node/client/ClientEndpointInitializer.ts +38 -0
  556. package/src/node/client/ClientEventEmitter.ts +5 -5
  557. package/src/node/client/ClientNodeInteraction.ts +7 -0
  558. package/src/node/client/ClientStructure.ts +23 -5
  559. package/src/node/client/Peers.ts +71 -5
  560. package/src/node/index.ts +1 -0
  561. package/src/node/integration/ChangeNotificationService.ts +122 -0
  562. package/src/node/{server → integration}/ProtocolService.ts +32 -74
  563. package/src/node/integration/StateStream.ts +474 -0
  564. package/src/node/integration/index.ts +9 -0
  565. package/src/node/server/OnlineServerInteraction.ts +5 -1
  566. package/src/node/server/ServerEnvironment.ts +9 -1
  567. package/src/node/server/ServerSubscription.ts +6 -6
  568. package/src/node/server/index.ts +0 -1
  569. package/src/storage/client/ClientNodeStores.ts +4 -0
  570. package/dist/cjs/node/server/ProtocolService.d.ts.map +0 -1
  571. package/dist/cjs/node/server/ProtocolService.js.map +0 -6
  572. package/dist/esm/node/server/ProtocolService.d.ts.map +0 -1
  573. package/dist/esm/node/server/ProtocolService.js.map +0 -6
@@ -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";
@@ -44,7 +45,7 @@ export class ClientNode extends Node<ClientNode.RootEndpoint> {
44
45
  super(opts);
45
46
 
46
47
  // Block the OccurrenceManager from parent environment so we don't attempt to record events from peers
47
- this.env.block(OccurrenceManager);
48
+ this.env.close(OccurrenceManager);
48
49
 
49
50
  this.env.set(Node, this);
50
51
  this.env.set(ClientNode, this);
@@ -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
@@ -343,8 +361,8 @@ export class ClientStructure {
343
361
  number,
344
362
  type: EndpointType({
345
363
  name: "ClientEndpoint",
346
- deviceType: -1,
347
- deviceRevision: -1,
364
+ deviceType: EndpointType.UNKNOWN_DEVICE_TYPE,
365
+ deviceRevision: EndpointType.UNKNOWN_DEVICE_REVISION,
348
366
  }),
349
367
  }),
350
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
+ }