@matter/node 0.16.0-alpha.0-20251205-dfb1e1556 → 0.16.0-alpha.0-20251207-37e501b18

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 (330) hide show
  1. package/dist/cjs/behavior/Behavior.d.ts +5 -1
  2. package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
  3. package/dist/cjs/behavior/Behavior.js +10 -0
  4. package/dist/cjs/behavior/Behavior.js.map +1 -1
  5. package/dist/cjs/behavior/Events.d.ts +7 -7
  6. package/dist/cjs/behavior/Events.d.ts.map +1 -1
  7. package/dist/cjs/behavior/Events.js.map +1 -1
  8. package/dist/cjs/behavior/Transitions.d.ts +2 -3
  9. package/dist/cjs/behavior/Transitions.d.ts.map +1 -1
  10. package/dist/cjs/behavior/Transitions.js +1 -2
  11. package/dist/cjs/behavior/Transitions.js.map +1 -1
  12. package/dist/cjs/behavior/cluster/ClusterBehaviorType.js.map +1 -1
  13. package/dist/cjs/behavior/cluster/ClusterEvents.d.ts +1 -1
  14. package/dist/cjs/behavior/cluster/ClusterEvents.d.ts.map +1 -1
  15. package/dist/cjs/behavior/context/NodeActivity.d.ts +2 -4
  16. package/dist/cjs/behavior/context/NodeActivity.d.ts.map +1 -1
  17. package/dist/cjs/behavior/context/NodeActivity.js +3 -10
  18. package/dist/cjs/behavior/context/NodeActivity.js.map +1 -1
  19. package/dist/cjs/behavior/context/server/LocalActorContext.d.ts +2 -3
  20. package/dist/cjs/behavior/context/server/LocalActorContext.d.ts.map +1 -1
  21. package/dist/cjs/behavior/context/server/LocalActorContext.js +3 -3
  22. package/dist/cjs/behavior/context/server/LocalActorContext.js.map +1 -1
  23. package/dist/cjs/behavior/context/server/RemoteActorContext.d.ts +2 -6
  24. package/dist/cjs/behavior/context/server/RemoteActorContext.d.ts.map +1 -1
  25. package/dist/cjs/behavior/context/server/RemoteActorContext.js +20 -22
  26. package/dist/cjs/behavior/context/server/RemoteActorContext.js.map +1 -1
  27. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts +2 -1
  28. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  29. package/dist/cjs/behavior/internal/BehaviorBacking.js +3 -0
  30. package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
  31. package/dist/cjs/behavior/internal/Reactors.d.ts.map +1 -1
  32. package/dist/cjs/behavior/internal/Reactors.js +2 -1
  33. package/dist/cjs/behavior/internal/Reactors.js.map +1 -1
  34. package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
  35. package/dist/cjs/behavior/state/managed/Datasource.js +1 -1
  36. package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
  37. package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  38. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +5 -11
  39. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  40. package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts +3 -2
  41. package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  42. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js +3 -6
  43. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  44. package/dist/cjs/behavior/system/mqtt/MqttInterface.d.ts.map +1 -1
  45. package/dist/cjs/behavior/system/mqtt/MqttInterface.js +91 -30
  46. package/dist/cjs/behavior/system/mqtt/MqttInterface.js.map +1 -1
  47. package/dist/cjs/behavior/system/network/NetworkRuntime.d.ts.map +1 -1
  48. package/dist/cjs/behavior/system/network/NetworkRuntime.js +1 -3
  49. package/dist/cjs/behavior/system/network/NetworkRuntime.js.map +1 -1
  50. package/dist/cjs/behavior/system/network/ServerGroupNetworking.js +2 -2
  51. package/dist/cjs/behavior/system/network/ServerGroupNetworking.js.map +1 -1
  52. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  53. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js +152 -13
  54. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js.map +2 -2
  55. package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts +3 -2
  56. package/dist/cjs/behavior/system/remote/RemoteInterface.d.ts.map +1 -1
  57. package/dist/cjs/behavior/system/remote/RemoteInterface.js +69 -10
  58. package/dist/cjs/behavior/system/remote/RemoteInterface.js.map +1 -1
  59. package/dist/cjs/behavior/system/remote/api/Api.d.ts.map +1 -1
  60. package/dist/cjs/behavior/system/remote/api/Api.js +4 -3
  61. package/dist/cjs/behavior/system/remote/api/Api.js.map +1 -1
  62. package/dist/cjs/behavior/system/sessions/SessionsBehavior.js +2 -2
  63. package/dist/cjs/behavior/system/sessions/SessionsBehavior.js.map +1 -1
  64. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
  65. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js +14 -11
  66. package/dist/cjs/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
  67. package/dist/cjs/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -1
  68. package/dist/cjs/behavior/system/websocket/WebSocketInterface.js +11 -3
  69. package/dist/cjs/behavior/system/websocket/WebSocketInterface.js.map +1 -1
  70. package/dist/cjs/behaviors/access-control/AccessControlServer.js +1 -1
  71. package/dist/cjs/behaviors/access-control/AccessControlServer.js.map +1 -1
  72. package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts.map +1 -1
  73. package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.js +65 -7
  74. package/dist/cjs/behaviors/administrator-commissioning/AdministratorCommissioningServer.js.map +1 -1
  75. package/dist/cjs/behaviors/basic-information/BasicInformationServer.js +2 -2
  76. package/dist/cjs/behaviors/basic-information/BasicInformationServer.js.map +1 -1
  77. package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
  78. package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js +12 -8
  79. package/dist/cjs/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
  80. package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +2 -3
  81. package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
  82. package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.js +2 -10
  83. package/dist/cjs/behaviors/general-commissioning/ServerNodeFailsafeContext.js.map +1 -1
  84. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +1 -1
  85. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
  86. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js +1 -1
  87. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
  88. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.d.ts +0 -1
  89. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
  90. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js +15 -14
  91. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
  92. package/dist/cjs/behaviors/scenes-management/ScenesManagementServer.js +1 -1
  93. package/dist/cjs/behaviors/scenes-management/ScenesManagementServer.js.map +1 -1
  94. package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js +1 -1
  95. package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js.map +1 -1
  96. package/dist/cjs/behaviors/window-covering/WindowCoveringServer.d.ts.map +1 -1
  97. package/dist/cjs/behaviors/window-covering/WindowCoveringServer.js +21 -8
  98. package/dist/cjs/behaviors/window-covering/WindowCoveringServer.js.map +1 -1
  99. package/dist/cjs/endpoint/Endpoint.d.ts +2 -1
  100. package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
  101. package/dist/cjs/endpoint/Endpoint.js +95 -8
  102. package/dist/cjs/endpoint/Endpoint.js.map +2 -2
  103. package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
  104. package/dist/cjs/endpoint/properties/Behaviors.js +11 -7
  105. package/dist/cjs/endpoint/properties/Behaviors.js.map +1 -1
  106. package/dist/cjs/endpoint/properties/Commands.js +1 -1
  107. package/dist/cjs/endpoint/properties/Commands.js.map +1 -1
  108. package/dist/cjs/endpoint/properties/EndpointLifecycle.d.ts.map +1 -1
  109. package/dist/cjs/endpoint/properties/EndpointLifecycle.js +3 -0
  110. package/dist/cjs/endpoint/properties/EndpointLifecycle.js.map +1 -1
  111. package/dist/cjs/node/ClientNode.d.ts.map +1 -1
  112. package/dist/cjs/node/ClientNode.js +2 -0
  113. package/dist/cjs/node/ClientNode.js.map +1 -1
  114. package/dist/cjs/node/Node.d.ts +2 -2
  115. package/dist/cjs/node/Node.d.ts.map +1 -1
  116. package/dist/cjs/node/Node.js +2 -1
  117. package/dist/cjs/node/Node.js.map +1 -1
  118. package/dist/cjs/node/ServerNode.d.ts.map +1 -1
  119. package/dist/cjs/node/ServerNode.js +54 -1
  120. package/dist/cjs/node/ServerNode.js.map +1 -1
  121. package/dist/cjs/node/client/ClientCommandMethod.d.ts.map +1 -1
  122. package/dist/cjs/node/client/ClientCommandMethod.js +26 -29
  123. package/dist/cjs/node/client/ClientCommandMethod.js.map +1 -1
  124. package/dist/cjs/node/client/NodePeerAddressStore.d.ts +3 -3
  125. package/dist/cjs/node/client/NodePeerAddressStore.d.ts.map +1 -1
  126. package/dist/cjs/node/client/NodePeerAddressStore.js.map +1 -1
  127. package/dist/cjs/node/client/Peers.d.ts.map +1 -1
  128. package/dist/cjs/node/client/Peers.js +14 -0
  129. package/dist/cjs/node/client/Peers.js.map +1 -1
  130. package/dist/cjs/node/integration/ProtocolService.d.ts.map +1 -1
  131. package/dist/cjs/node/integration/ProtocolService.js +3 -2
  132. package/dist/cjs/node/integration/ProtocolService.js.map +1 -1
  133. package/dist/cjs/node/server/InteractionServer.d.ts.map +1 -1
  134. package/dist/cjs/node/server/InteractionServer.js +54 -49
  135. package/dist/cjs/node/server/InteractionServer.js.map +2 -2
  136. package/dist/cjs/node/server/ServerEnvironment.js +1 -1
  137. package/dist/cjs/node/server/ServerEnvironment.js.map +1 -1
  138. package/dist/cjs/node/server/ServerSubscription.d.ts +61 -10
  139. package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
  140. package/dist/cjs/node/server/ServerSubscription.js +316 -157
  141. package/dist/cjs/node/server/ServerSubscription.js.map +2 -2
  142. package/dist/esm/behavior/Behavior.d.ts +5 -1
  143. package/dist/esm/behavior/Behavior.d.ts.map +1 -1
  144. package/dist/esm/behavior/Behavior.js +10 -0
  145. package/dist/esm/behavior/Behavior.js.map +1 -1
  146. package/dist/esm/behavior/Events.d.ts +7 -7
  147. package/dist/esm/behavior/Events.d.ts.map +1 -1
  148. package/dist/esm/behavior/Events.js.map +1 -1
  149. package/dist/esm/behavior/Transitions.d.ts +2 -3
  150. package/dist/esm/behavior/Transitions.d.ts.map +1 -1
  151. package/dist/esm/behavior/Transitions.js +1 -2
  152. package/dist/esm/behavior/Transitions.js.map +1 -1
  153. package/dist/esm/behavior/cluster/ClusterBehaviorType.js.map +1 -1
  154. package/dist/esm/behavior/cluster/ClusterEvents.d.ts +1 -1
  155. package/dist/esm/behavior/cluster/ClusterEvents.d.ts.map +1 -1
  156. package/dist/esm/behavior/context/NodeActivity.d.ts +2 -4
  157. package/dist/esm/behavior/context/NodeActivity.d.ts.map +1 -1
  158. package/dist/esm/behavior/context/NodeActivity.js +4 -11
  159. package/dist/esm/behavior/context/NodeActivity.js.map +1 -1
  160. package/dist/esm/behavior/context/server/LocalActorContext.d.ts +2 -3
  161. package/dist/esm/behavior/context/server/LocalActorContext.d.ts.map +1 -1
  162. package/dist/esm/behavior/context/server/LocalActorContext.js +5 -5
  163. package/dist/esm/behavior/context/server/LocalActorContext.js.map +1 -1
  164. package/dist/esm/behavior/context/server/RemoteActorContext.d.ts +2 -6
  165. package/dist/esm/behavior/context/server/RemoteActorContext.d.ts.map +1 -1
  166. package/dist/esm/behavior/context/server/RemoteActorContext.js +27 -24
  167. package/dist/esm/behavior/context/server/RemoteActorContext.js.map +1 -1
  168. package/dist/esm/behavior/internal/BehaviorBacking.d.ts +2 -1
  169. package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  170. package/dist/esm/behavior/internal/BehaviorBacking.js +4 -0
  171. package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
  172. package/dist/esm/behavior/internal/Reactors.d.ts.map +1 -1
  173. package/dist/esm/behavior/internal/Reactors.js +2 -1
  174. package/dist/esm/behavior/internal/Reactors.js.map +1 -1
  175. package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
  176. package/dist/esm/behavior/state/managed/Datasource.js +2 -1
  177. package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
  178. package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  179. package/dist/esm/behavior/system/commissioning/CommissioningClient.js +6 -13
  180. package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  181. package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts +3 -2
  182. package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  183. package/dist/esm/behavior/system/commissioning/CommissioningServer.js +3 -7
  184. package/dist/esm/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  185. package/dist/esm/behavior/system/mqtt/MqttInterface.d.ts.map +1 -1
  186. package/dist/esm/behavior/system/mqtt/MqttInterface.js +91 -30
  187. package/dist/esm/behavior/system/mqtt/MqttInterface.js.map +1 -1
  188. package/dist/esm/behavior/system/network/NetworkRuntime.d.ts.map +1 -1
  189. package/dist/esm/behavior/system/network/NetworkRuntime.js +1 -3
  190. package/dist/esm/behavior/system/network/NetworkRuntime.js.map +1 -1
  191. package/dist/esm/behavior/system/network/ServerGroupNetworking.js +2 -2
  192. package/dist/esm/behavior/system/network/ServerGroupNetworking.js.map +1 -1
  193. package/dist/esm/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  194. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js +152 -14
  195. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js.map +2 -2
  196. package/dist/esm/behavior/system/remote/RemoteInterface.d.ts +3 -2
  197. package/dist/esm/behavior/system/remote/RemoteInterface.d.ts.map +1 -1
  198. package/dist/esm/behavior/system/remote/RemoteInterface.js +76 -11
  199. package/dist/esm/behavior/system/remote/RemoteInterface.js.map +1 -1
  200. package/dist/esm/behavior/system/remote/api/Api.d.ts.map +1 -1
  201. package/dist/esm/behavior/system/remote/api/Api.js +4 -3
  202. package/dist/esm/behavior/system/remote/api/Api.js.map +1 -1
  203. package/dist/esm/behavior/system/sessions/SessionsBehavior.js +2 -2
  204. package/dist/esm/behavior/system/sessions/SessionsBehavior.js.map +1 -1
  205. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.d.ts.map +1 -1
  206. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js +17 -14
  207. package/dist/esm/behavior/system/subscriptions/SubscriptionsServer.js.map +1 -1
  208. package/dist/esm/behavior/system/websocket/WebSocketInterface.d.ts.map +1 -1
  209. package/dist/esm/behavior/system/websocket/WebSocketInterface.js +11 -3
  210. package/dist/esm/behavior/system/websocket/WebSocketInterface.js.map +1 -1
  211. package/dist/esm/behaviors/access-control/AccessControlServer.js +1 -1
  212. package/dist/esm/behaviors/access-control/AccessControlServer.js.map +1 -1
  213. package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.d.ts.map +1 -1
  214. package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.js +66 -8
  215. package/dist/esm/behaviors/administrator-commissioning/AdministratorCommissioningServer.js.map +1 -1
  216. package/dist/esm/behaviors/basic-information/BasicInformationServer.js +2 -2
  217. package/dist/esm/behaviors/basic-information/BasicInformationServer.js.map +1 -1
  218. package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.d.ts.map +1 -1
  219. package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js +13 -9
  220. package/dist/esm/behaviors/general-commissioning/GeneralCommissioningServer.js.map +1 -1
  221. package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts +2 -3
  222. package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
  223. package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.js +2 -10
  224. package/dist/esm/behaviors/general-commissioning/ServerNodeFailsafeContext.js.map +1 -1
  225. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +1 -1
  226. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
  227. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js +1 -1
  228. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
  229. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.d.ts +0 -1
  230. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
  231. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js +15 -15
  232. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
  233. package/dist/esm/behaviors/scenes-management/ScenesManagementServer.js +1 -1
  234. package/dist/esm/behaviors/scenes-management/ScenesManagementServer.js.map +1 -1
  235. package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js +1 -1
  236. package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js.map +1 -1
  237. package/dist/esm/behaviors/window-covering/WindowCoveringServer.d.ts.map +1 -1
  238. package/dist/esm/behaviors/window-covering/WindowCoveringServer.js +22 -9
  239. package/dist/esm/behaviors/window-covering/WindowCoveringServer.js.map +1 -1
  240. package/dist/esm/endpoint/Endpoint.d.ts +2 -1
  241. package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
  242. package/dist/esm/endpoint/Endpoint.js +96 -8
  243. package/dist/esm/endpoint/Endpoint.js.map +2 -2
  244. package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
  245. package/dist/esm/endpoint/properties/Behaviors.js +11 -7
  246. package/dist/esm/endpoint/properties/Behaviors.js.map +1 -1
  247. package/dist/esm/endpoint/properties/Commands.js +1 -1
  248. package/dist/esm/endpoint/properties/Commands.js.map +1 -1
  249. package/dist/esm/endpoint/properties/EndpointLifecycle.d.ts.map +1 -1
  250. package/dist/esm/endpoint/properties/EndpointLifecycle.js +3 -0
  251. package/dist/esm/endpoint/properties/EndpointLifecycle.js.map +1 -1
  252. package/dist/esm/node/ClientNode.d.ts.map +1 -1
  253. package/dist/esm/node/ClientNode.js +2 -0
  254. package/dist/esm/node/ClientNode.js.map +1 -1
  255. package/dist/esm/node/Node.d.ts +2 -2
  256. package/dist/esm/node/Node.d.ts.map +1 -1
  257. package/dist/esm/node/Node.js +4 -3
  258. package/dist/esm/node/Node.js.map +1 -1
  259. package/dist/esm/node/ServerNode.d.ts.map +1 -1
  260. package/dist/esm/node/ServerNode.js +54 -1
  261. package/dist/esm/node/ServerNode.js.map +1 -1
  262. package/dist/esm/node/client/ClientCommandMethod.d.ts.map +1 -1
  263. package/dist/esm/node/client/ClientCommandMethod.js +26 -29
  264. package/dist/esm/node/client/ClientCommandMethod.js.map +1 -1
  265. package/dist/esm/node/client/NodePeerAddressStore.d.ts +3 -3
  266. package/dist/esm/node/client/NodePeerAddressStore.d.ts.map +1 -1
  267. package/dist/esm/node/client/NodePeerAddressStore.js.map +1 -1
  268. package/dist/esm/node/client/Peers.d.ts.map +1 -1
  269. package/dist/esm/node/client/Peers.js +15 -1
  270. package/dist/esm/node/client/Peers.js.map +1 -1
  271. package/dist/esm/node/integration/ProtocolService.d.ts.map +1 -1
  272. package/dist/esm/node/integration/ProtocolService.js +4 -2
  273. package/dist/esm/node/integration/ProtocolService.js.map +1 -1
  274. package/dist/esm/node/server/InteractionServer.d.ts.map +1 -1
  275. package/dist/esm/node/server/InteractionServer.js +58 -50
  276. package/dist/esm/node/server/InteractionServer.js.map +2 -2
  277. package/dist/esm/node/server/ServerEnvironment.js +1 -1
  278. package/dist/esm/node/server/ServerEnvironment.js.map +1 -1
  279. package/dist/esm/node/server/ServerSubscription.d.ts +61 -10
  280. package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
  281. package/dist/esm/node/server/ServerSubscription.js +321 -159
  282. package/dist/esm/node/server/ServerSubscription.js.map +2 -2
  283. package/package.json +7 -7
  284. package/src/behavior/Behavior.ts +12 -0
  285. package/src/behavior/Events.ts +12 -8
  286. package/src/behavior/Transitions.ts +3 -3
  287. package/src/behavior/cluster/ClusterBehaviorType.ts +2 -2
  288. package/src/behavior/cluster/ClusterEvents.ts +1 -1
  289. package/src/behavior/context/NodeActivity.ts +4 -13
  290. package/src/behavior/context/server/LocalActorContext.ts +6 -8
  291. package/src/behavior/context/server/RemoteActorContext.ts +34 -33
  292. package/src/behavior/internal/BehaviorBacking.ts +5 -0
  293. package/src/behavior/internal/Reactors.ts +1 -0
  294. package/src/behavior/state/managed/Datasource.ts +2 -1
  295. package/src/behavior/system/commissioning/CommissioningClient.ts +6 -13
  296. package/src/behavior/system/commissioning/CommissioningServer.ts +6 -8
  297. package/src/behavior/system/mqtt/MqttInterface.ts +6 -2
  298. package/src/behavior/system/network/NetworkRuntime.ts +1 -3
  299. package/src/behavior/system/network/ServerGroupNetworking.ts +2 -2
  300. package/src/behavior/system/network/ServerNetworkRuntime.ts +49 -15
  301. package/src/behavior/system/remote/RemoteInterface.ts +22 -4
  302. package/src/behavior/system/remote/api/Api.ts +4 -3
  303. package/src/behavior/system/sessions/SessionsBehavior.ts +2 -2
  304. package/src/behavior/system/subscriptions/SubscriptionsServer.ts +15 -13
  305. package/src/behavior/system/websocket/WebSocketInterface.ts +2 -1
  306. package/src/behaviors/access-control/AccessControlServer.ts +1 -1
  307. package/src/behaviors/administrator-commissioning/AdministratorCommissioningServer.ts +14 -7
  308. package/src/behaviors/basic-information/BasicInformationServer.ts +2 -2
  309. package/src/behaviors/general-commissioning/GeneralCommissioningServer.ts +14 -9
  310. package/src/behaviors/general-commissioning/ServerNodeFailsafeContext.ts +3 -15
  311. package/src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts +1 -1
  312. package/src/behaviors/group-key-management/GroupKeyManagementServer.ts +1 -1
  313. package/src/behaviors/operational-credentials/OperationalCredentialsServer.ts +22 -19
  314. package/src/behaviors/scenes-management/ScenesManagementServer.ts +1 -1
  315. package/src/behaviors/thermostat/AtomicWriteHandler.ts +1 -1
  316. package/src/behaviors/window-covering/WindowCoveringServer.ts +24 -9
  317. package/src/endpoint/Endpoint.ts +21 -4
  318. package/src/endpoint/properties/Behaviors.ts +11 -6
  319. package/src/endpoint/properties/Commands.ts +1 -1
  320. package/src/endpoint/properties/EndpointLifecycle.ts +4 -0
  321. package/src/node/ClientNode.ts +3 -0
  322. package/src/node/Node.ts +3 -2
  323. package/src/node/ServerNode.ts +1 -0
  324. package/src/node/client/ClientCommandMethod.ts +31 -38
  325. package/src/node/client/NodePeerAddressStore.ts +3 -3
  326. package/src/node/client/Peers.ts +19 -1
  327. package/src/node/integration/ProtocolService.ts +4 -2
  328. package/src/node/server/InteractionServer.ts +62 -51
  329. package/src/node/server/ServerEnvironment.ts +1 -1
  330. package/src/node/server/ServerSubscription.ts +225 -153
@@ -44,9 +44,7 @@ export abstract class NetworkRuntime {
44
44
  async [Construction.destruct]() {
45
45
  this.#abort();
46
46
  const activity = this.#owner.env.get(NodeActivity);
47
- if (activity.isActive) {
48
- await activity.inactive;
49
- }
47
+ await activity.inactive;
50
48
 
51
49
  try {
52
50
  await this.stop();
@@ -48,7 +48,7 @@ export class ServerGroupNetworking {
48
48
  this.#observers.on(fabrics.events.added, async fabric => this.#registerFabricGroupObserver(fabric));
49
49
 
50
50
  // When fabric is deleted, we remove the group memberships
51
- this.#observers.on(fabrics.events.deleted, async fabric => {
51
+ this.#observers.on(fabrics.events.deleting, async fabric => {
52
52
  const fabricIndex = fabric.fabricIndex;
53
53
  this.#observersForFabric(fabricIndex).close();
54
54
  this.#fabricObservers.delete(fabricIndex);
@@ -64,7 +64,7 @@ export class ServerGroupNetworking {
64
64
  this.#activeGroupMemberships.delete(fabricIndex);
65
65
  });
66
66
 
67
- this.#observers.on(fabrics.events.updated, async fabric => {
67
+ this.#observers.on(fabrics.events.replaced, async fabric => {
68
68
  const fabricIndex = fabric.fabricIndex;
69
69
 
70
70
  this.#observersForFabric(fabricIndex).close();
@@ -24,7 +24,6 @@ import {
24
24
  Advertiser,
25
25
  Ble,
26
26
  BleAdvertiser,
27
- ChannelManager,
28
27
  DeviceAdvertiser,
29
28
  DeviceCommissioner,
30
29
  ExchangeManager,
@@ -79,7 +78,10 @@ export class ServerNetworkRuntime extends NetworkRuntime {
79
78
  get mdnsAdvertiser() {
80
79
  if (!this.#mdnsAdvertiser) {
81
80
  const port = this.owner.state.network.operationalPort;
82
- const options = this.owner.state.commissioning.mdns;
81
+ const options = {
82
+ lifetime: this.construction,
83
+ ...this.owner.state.commissioning.mdns,
84
+ };
83
85
  const crypto = this.owner.env.get(Crypto);
84
86
  const { server } = this.#services.get(MdnsService);
85
87
  this.#mdnsAdvertiser = new MdnsAdvertiser(crypto, server, { ...options, port });
@@ -119,7 +121,10 @@ export class ServerNetworkRuntime extends NetworkRuntime {
119
121
  protected get bleAdvertiser() {
120
122
  if (this.#bleAdvertiser === undefined) {
121
123
  const { peripheralInterface } = this.owner.env.get(Ble);
122
- const options = this.owner.state.commissioning.ble;
124
+ const options = {
125
+ lifetime: this.construction,
126
+ ...this.owner.state.commissioning.ble,
127
+ };
123
128
  this.#bleAdvertiser = new BleAdvertiser(peripheralInterface, options);
124
129
  }
125
130
  return this.#bleAdvertiser;
@@ -269,9 +274,6 @@ export class ServerNetworkRuntime extends NetworkRuntime {
269
274
  await owner.act("start-network", agent => agent.load(ProductDescriptionServer));
270
275
 
271
276
  // Apply settings to environmental components
272
- env.get(ChannelManager).caseSessionsPerFabricAndNode =
273
- // Note that this is "sessions per fabric and node", so we support more than indicated by capabilityMinima
274
- owner.state.basicInformation.capabilityMinima.caseSessionsPerFabric;
275
277
  env.get(SessionManager).sessionParameters = {
276
278
  maxPathsPerInvoke: this.owner.state.basicInformation.maxPathsPerInvoke,
277
279
  };
@@ -314,7 +316,11 @@ export class ServerNetworkRuntime extends NetworkRuntime {
314
316
 
315
317
  const { env } = this.owner;
316
318
 
317
- await env.close(DeviceCommissioner);
319
+ {
320
+ using _lifetime = this.construction.join("commissioner");
321
+ await env.close(DeviceCommissioner);
322
+ }
323
+
318
324
  // Shutdown the Broadcaster if DeviceAdvertiser is not initialized
319
325
  // We kick-off the Advertiser shutdown to prevent re-announces when removing sessions and wait a bit later
320
326
  const advertisementShutdown = this.owner.env.has(DeviceAdvertiser)
@@ -322,21 +328,49 @@ export class ServerNetworkRuntime extends NetworkRuntime {
322
328
  : this.#mdnsAdvertiser?.close();
323
329
  this.#mdnsAdvertiser = undefined;
324
330
 
325
- await this.owner.prepareRuntimeShutdown();
331
+ {
332
+ using _lifetime = this.construction.join("preparing");
333
+ await this.owner.prepareRuntimeShutdown();
334
+ }
326
335
 
327
336
  this.#groupNetworking?.close();
328
337
  this.#groupNetworking = undefined;
329
338
 
330
339
  // Now all sessions are closed, so we wait for Advertiser to be gone
331
- await advertisementShutdown;
340
+ {
341
+ using _advertiser = this.construction.join("advertisement");
342
+ await advertisementShutdown;
343
+ }
344
+
345
+ {
346
+ using _lifetime = this.construction.join("services");
347
+ await this.#services.close();
348
+ }
349
+
350
+ {
351
+ using _lifetime = this.construction.join("exchanges");
352
+ await env.close(ExchangeManager);
353
+ }
354
+
355
+ {
356
+ using _lifetime = this.construction.join("protocols");
357
+ await env.close(SecureChannelProtocol);
358
+ }
332
359
 
333
- await this.#services.close();
360
+ {
361
+ using _lifetime = this.construction.join("transports");
362
+ await env.close(ConnectionlessTransportSet);
363
+ }
334
364
 
335
- await env.close(ExchangeManager);
336
- await env.close(SecureChannelProtocol);
337
- await env.close(ConnectionlessTransportSet);
338
- await env.close(InteractionServer);
339
- await env.close(PeerSet);
365
+ {
366
+ using _lifetime = this.construction.join("interactions");
367
+ await env.close(InteractionServer);
368
+ }
369
+
370
+ {
371
+ using _lifetime = this.construction.join("peers");
372
+ await env.close(PeerSet);
373
+ }
340
374
  }
341
375
 
342
376
  async #initializeGroupNetworking() {
@@ -4,7 +4,16 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { Abort, AppAddress, BasicMultiplex, ImplementationError, Logger } from "#general";
7
+ import {
8
+ Abort,
9
+ AppAddress,
10
+ BasicMultiplex,
11
+ decamelize,
12
+ ImplementationError,
13
+ Lifetime,
14
+ Logger,
15
+ Multiplex,
16
+ } from "#general";
8
17
  import type { ServerNode } from "#node/ServerNode.js";
9
18
  import { ApiPath } from "./api/ApiPath.js";
10
19
 
@@ -15,10 +24,11 @@ const logger = Logger.get("RemoteAdapter");
15
24
  */
16
25
  export abstract class RemoteInterface {
17
26
  #node: ServerNode;
27
+ #lifetime: Lifetime;
18
28
  #address: AppAddress;
19
29
  #abort = new Abort();
20
30
  #root: ApiPath;
21
- #workers = new BasicMultiplex();
31
+ #workers: Multiplex;
22
32
 
23
33
  constructor(node: ServerNode, address: AppAddress) {
24
34
  if (address.appProtocol !== (this.constructor as unknown as RemoteInterface.Type).protocol) {
@@ -27,10 +37,16 @@ export abstract class RemoteInterface {
27
37
  );
28
38
  }
29
39
  this.#node = node;
40
+ this.#lifetime = node.env.join(decamelize(this.constructor.name, " "));
41
+ this.#workers = new BasicMultiplex();
30
42
  this.#address = address;
31
43
  this.#root = new ApiPath(address);
32
44
  }
33
45
 
46
+ join(...name: unknown[]) {
47
+ return this.#lifetime.join(...name);
48
+ }
49
+
34
50
  get root() {
35
51
  return this.#root;
36
52
  }
@@ -75,6 +91,8 @@ export abstract class RemoteInterface {
75
91
  return;
76
92
  }
77
93
 
94
+ using _closing = this.#lifetime.closing();
95
+
78
96
  this.#abort();
79
97
 
80
98
  try {
@@ -92,8 +110,8 @@ export abstract class RemoteInterface {
92
110
  }
93
111
  }
94
112
 
95
- protected addWorker(worker: Promise<void>, description: string) {
96
- this.#workers.add(worker, description);
113
+ protected addWorker(worker: Promise<void>) {
114
+ this.#workers.add(worker);
97
115
  }
98
116
 
99
117
  static protocol = "";
@@ -8,6 +8,7 @@ import { Agent } from "#endpoint/Agent.js";
8
8
  import { Abort, asError, Diagnostic, InternalError, Logger } from "#general";
9
9
  import { Node } from "#node/Node.js";
10
10
  import { ServerNode } from "#node/ServerNode.js";
11
+ import { Mark } from "#protocol";
11
12
  import { StatusResponse, StatusResponseError } from "#types";
12
13
  import { ApiPath } from "./ApiPath.js";
13
14
  import { ApiResource } from "./ApiResource.js";
@@ -63,15 +64,15 @@ export namespace Api {
63
64
  if (!logger) {
64
65
  loggers.set(facility, (logger = Logger.get(facility)));
65
66
  }
66
- logger[level](Diagnostic.via(id ?? "(anon)"), message);
67
+ logger[level](Diagnostic.via(id || "(anon)"), message);
67
68
  }
68
69
 
69
70
  export function logRequest(facility: string, id: string | undefined, method: string, target: string) {
70
- log("info", facility, id, "«", Diagnostic.strong(method), target);
71
+ log("info", facility, id, Mark.INBOUND, Diagnostic.strong(method), target);
71
72
  }
72
73
 
73
74
  export function logResponse(facility: string, response: RemoteResponse) {
74
- const message = Array<unknown>("»", RemoteResponse.describe(response));
75
+ const message = Array<unknown>(Mark.OUTBOUND, RemoteResponse.describe(response));
75
76
  let level: "error" | "info";
76
77
  switch (response.kind) {
77
78
  case "error":
@@ -30,11 +30,11 @@ export class SessionsBehavior extends Behavior {
30
30
 
31
31
  #convertToExposedSession(session: NodeSession): SessionsBehavior.Session {
32
32
  return {
33
- name: session.name,
33
+ name: session.via,
34
34
  nodeId: session.nodeId,
35
35
  peerNodeId: session.peerNodeId,
36
36
  fabric: session.fabric?.externalInformation,
37
- isPeerActive: session.isPeerActive(),
37
+ isPeerActive: session.isPeerActive,
38
38
  lastInteractionTimestamp: session.timestamp,
39
39
  lastActiveTimestamp: session.activeTimestamp,
40
40
  numberOfActiveSubscriptions: session.subscriptions.size,
@@ -9,12 +9,11 @@ import { DatatypeModel, FieldElement } from "#model";
9
9
  import { InteractionServer, PeerSubscription } from "#node/server/InteractionServer.js";
10
10
  import { ServerSubscription } from "#node/server/ServerSubscription.js";
11
11
  import {
12
- ChannelManager,
13
- NoChannelError,
14
12
  NodeDiscoveryType,
15
13
  PeerAddress,
16
14
  PeerAddressSet,
17
15
  PeerSet,
16
+ SessionClosedError,
18
17
  SessionManager,
19
18
  Subscription,
20
19
  } from "#protocol";
@@ -139,11 +138,11 @@ export class SubscriptionsBehavior extends Behavior {
139
138
  if (this.state.persistenceEnabled === false || !(subscription instanceof ServerSubscription)) return;
140
139
 
141
140
  const {
142
- criteria: { attributeRequests, eventRequests, isFabricFiltered },
141
+ request: { attributeRequests, eventRequests, isFabricFiltered },
143
142
  session,
144
143
  maxInterval,
145
144
  sendInterval,
146
- id,
145
+ subscriptionId: id,
147
146
  maxIntervalCeiling,
148
147
  minIntervalFloor,
149
148
  } = subscription;
@@ -153,11 +152,10 @@ export class SubscriptionsBehavior extends Behavior {
153
152
  // TODO Remove when we store peer addresses also for operational nodes
154
153
  let operationalAddress: ServerAddressUdp | undefined;
155
154
  try {
156
- const channel = this.env.get(ChannelManager).getChannel(peerAddress, session).channel;
157
- operationalAddress = isIpNetworkChannel(channel) ? channel.networkAddress : undefined;
155
+ operationalAddress = isIpNetworkChannel(session.channel) ? session.channel.networkAddress : undefined;
158
156
  } catch (error) {
159
157
  // Can happen in edge cases, so better catch it and proceed without operational address
160
- NoChannelError.accept(error);
158
+ SessionClosedError.accept(error);
161
159
  }
162
160
  const peerSubscription: PeerSubscription = {
163
161
  subscriptionId: id,
@@ -184,7 +182,7 @@ export class SubscriptionsBehavior extends Behavior {
184
182
 
185
183
  #subscriptionCancelled(subscription: Subscription): MaybePromise {
186
184
  if (subscription.isCanceledByPeer && this.state.persistenceEnabled !== false) {
187
- const { id } = subscription;
185
+ const { subscriptionId: id } = subscription;
188
186
  const subscriptionIndex = this.state.subscriptions.findIndex(({ subscriptionId }) => id === subscriptionId);
189
187
  if (subscriptionIndex !== -1) {
190
188
  return this.#removeSubscriptionIndex(subscriptionIndex);
@@ -230,8 +228,10 @@ export class SubscriptionsBehavior extends Behavior {
230
228
  logger.debug(`Skip reestablishing former subscription to ${peerAddress}`);
231
229
  continue;
232
230
  }
233
- logger.debug(`Try to reestablish former subscription ${subscriptionId} to ${peerAddress}`);
234
- if (sessions.getSessionForNode(peerAddress) !== undefined) {
231
+ logger.debug(
232
+ `Try to reestablish former subscription ${Subscription.idStrOf(subscription)} to ${peerAddress}`,
233
+ );
234
+ if (sessions.maybeSessionFor(peerAddress) !== undefined) {
235
235
  logger.debug(`We already have and existing session for peer ${peerAddress}`);
236
236
  } else {
237
237
  try {
@@ -254,10 +254,12 @@ export class SubscriptionsBehavior extends Behavior {
254
254
  try {
255
255
  if (peerStopList.has(peerAddress)) {
256
256
  // To prevent concurrency issues, check again if there is a stop reason for this fabric
257
- logger.debug(`Skip re-establishing former subscription ${subscriptionId} to ${peerAddress}`);
257
+ logger.debug(
258
+ `Skip re-establishing former subscription ${Subscription.idStrOf(subscriptionId)} to ${peerAddress}`,
259
+ );
258
260
  continue;
259
261
  }
260
- const session = sessions.getSessionForNode(peerAddress);
262
+ const session = sessions.maybeSessionFor(peerAddress);
261
263
  if (session === undefined) {
262
264
  peerStopList.add(peerAddress);
263
265
  logger.debug(`Could not connect to peer ${peerAddress}`);
@@ -266,7 +268,7 @@ export class SubscriptionsBehavior extends Behavior {
266
268
  await interactionServer.establishFormerSubscription(subscription, session);
267
269
  } catch (error) {
268
270
  logger.debug(
269
- `Failed to re-establish former subscription ${subscriptionId} to ${peerAddress}`,
271
+ `Failed to re-establish former subscription ${Subscription.idStrOf(subscriptionId)} to ${peerAddress}`,
270
272
  StatusResponseError.is(error)
271
273
  ? error.code === StatusCode.InvalidSubscription
272
274
  ? "Subscription no langer valid for peer"
@@ -116,10 +116,11 @@ export class WebSocketInterface extends RemoteInterface {
116
116
 
117
117
  await send({ id: request.id, kind: "ok" });
118
118
 
119
- this.addWorker(this.#handleSubscription(response.stream, send), "ws subscription handler");
119
+ this.addWorker(this.#handleSubscription(response.stream, send));
120
120
  }
121
121
 
122
122
  async #handleSubscription(stream: LocalResponse.Stream, send: (message: LocalResponse) => Promise<void>) {
123
+ using _streaming = this.join("streaming");
123
124
  for await (const update of stream) {
124
125
  await send(update.js);
125
126
  }
@@ -87,7 +87,7 @@ export class AccessControlServer extends AccessControlBehavior.with("Extension")
87
87
  }
88
88
 
89
89
  // TODO handle delete fabric more generically later to remove fabric scoped data
90
- this.reactTo(fabrics.events.updated, this.#updateFabricAcls);
90
+ this.reactTo(fabrics.events.replaced, this.#updateFabricAcls);
91
91
  this.reactTo(fabrics.events.added, this.#updateFabricAcls);
92
92
 
93
93
  this.reactTo(this.events.interactionBegin, this.#handleInteractionBegin);
@@ -4,8 +4,9 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import type { RemoteActorContext } from "#behavior/context/server/RemoteActorContext.js";
7
8
  import { AdministratorCommissioning } from "#clusters/administrator-commissioning";
8
- import { Duration, InternalError, Logger, Seconds, Time, Timer } from "#general";
9
+ import { Duration, InternalError, Logger, Seconds, Time, Timer, Worker } from "#general";
9
10
  import { AccessLevel } from "#model";
10
11
  import {
11
12
  assertRemoteActor,
@@ -138,14 +139,14 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
138
139
  );
139
140
  }
140
141
 
141
- logger.debug("Revoking commissioning window.");
142
+ logger.debug("Revoking commissioning window");
142
143
 
143
144
  await this.#closeCommissioningWindow();
144
145
 
145
146
  if (this.env.has(FailsafeContext)) {
146
147
  const failsafeContext = this.env.get(FailsafeContext);
147
148
  if (failsafeContext) {
148
- await failsafeContext.close();
149
+ await failsafeContext.close((this.context as RemoteActorContext).exchange);
149
150
  }
150
151
  }
151
152
  }
@@ -162,7 +163,7 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
162
163
  // Should never happen, but let's make sure
163
164
  throw new InternalError("Commissioning window already initialized.");
164
165
  }
165
- const actor = hasRemoteActor(this.context) ? this.context.session.name : "local actor";
166
+ const actor = hasRemoteActor(this.context) ? this.context.session.via : "local actor";
166
167
  logger.debug(`Commissioning window timer started for ${commissioningTimeout} seconds for ${actor}.`);
167
168
  this.internal.commissioningWindowTimeout = Time.getTimer(
168
169
  "Commissioning timeout",
@@ -181,10 +182,10 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
181
182
  const removeCallback = this.callback(this.#fabricRemovedCallback);
182
183
 
183
184
  this.internal.stopMonitoringFabricForRemoval = () => {
184
- adminFabric.deleteRemoveCallback(removeCallback);
185
+ adminFabric.deleting.off(removeCallback);
185
186
  };
186
187
 
187
- this.context.session.associatedFabric.addRemoveCallback(removeCallback);
188
+ this.context.session.associatedFabric.deleting.on(removeCallback);
188
189
  }
189
190
 
190
191
  /**
@@ -236,6 +237,7 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
236
237
  * Closes the commissioning window per the matter specification.
237
238
  */
238
239
  async #closeCommissioningWindow() {
240
+ using _closing = this.lifetime.join("closing commissioning window");
239
241
  await this.env.get(DeviceCommissioner).endCommissioning();
240
242
  }
241
243
 
@@ -243,7 +245,12 @@ export class AdministratorCommissioningServer extends AdministratorCommissioning
243
245
  * Close commissioning window on timeout when there's nobody to await the resulting promise
244
246
  * */
245
247
  #commissioningTimeout() {
246
- this.env.runtime.add(this.#closeCommissioningWindow());
248
+ this.env.runtime.add(
249
+ Worker({
250
+ name: "closing commissioning window",
251
+ done: this.#closeCommissioningWindow(),
252
+ }),
253
+ );
247
254
  }
248
255
 
249
256
  /**
@@ -117,7 +117,7 @@ export class BasicInformationServer extends Base {
117
117
  this.events.startUp.emit({ softwareVersion: this.state.softwareVersion }, this.context);
118
118
 
119
119
  const fabricManager = this.env.get(FabricManager);
120
- this.reactTo(fabricManager.events.deleted, this.#handleRemovedFabric);
120
+ this.reactTo(fabricManager.events.leaving, this.#handleFabricLeave);
121
121
  }
122
122
 
123
123
  #goingOffline() {
@@ -128,7 +128,7 @@ export class BasicInformationServer extends Base {
128
128
  this.events.reachableChanged?.emit({ reachableNewValue: reachable }, this.context);
129
129
  }
130
130
 
131
- #handleRemovedFabric({ fabricIndex }: Fabric) {
131
+ #handleFabricLeave({ fabricIndex }: Fabric) {
132
132
  this.events.leave.emit({ fabricIndex }, this.context);
133
133
  }
134
134
  }
@@ -4,11 +4,12 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import type { RemoteActorContext } from "#behavior/context/server/RemoteActorContext.js";
7
8
  import { AdministratorCommissioningServer } from "#behaviors/administrator-commissioning";
8
9
  import { BasicInformationServer } from "#behaviors/basic-information";
9
10
  import { AdministratorCommissioning } from "#clusters/administrator-commissioning";
10
11
  import { GeneralCommissioning } from "#clusters/general-commissioning";
11
- import { Bytes, Diagnostic, Logger, MatterFlowError, MaybePromise, Seconds } from "#general";
12
+ import { Bytes, Diagnostic, hex, Logger, MatterFlowError, MaybePromise, Seconds } from "#general";
12
13
  import type { ServerNode } from "#node/ServerNode.js";
13
14
  import {
14
15
  assertRemoteActor,
@@ -60,7 +61,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
60
61
  ) {
61
62
  return;
62
63
  }
63
- logger.debug(`New PASE session added: ${session.id}. Arming Failsafe for 60s.`);
64
+ logger.debug(session.via, `New PASE session, arming failsafe for 60s`);
64
65
  await this.#armFailSafe({ breadcrumb: this.state.breadcrumb, expiryLengthSeconds: 60 }, session);
65
66
  }
66
67
 
@@ -68,7 +69,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
68
69
  { breadcrumb, expiryLengthSeconds }: GeneralCommissioning.ArmFailSafeRequest,
69
70
  session: SecureSession,
70
71
  ) {
71
- NodeSession.assert(session, "armFailSafe can only be called on a secure session");
72
+ NodeSession.assert(session, "Failsafe may only be armed on a secure session");
72
73
  const commissioner = this.env.get(DeviceCommissioner);
73
74
 
74
75
  try {
@@ -84,11 +85,15 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
84
85
  !session.isPase
85
86
  ) {
86
87
  // TODO - should this set status to Status.BusyWithOtherAdmin?
87
- throw new MatterFlowError("Failed to arm failsafe using CASE while commissioning window is opened.");
88
+ throw new MatterFlowError("Cannot arm failsafe using CASE while commissioning window is opened");
88
89
  }
89
90
 
90
91
  if (commissioner.isFailsafeArmed) {
91
- await commissioner.failsafeContext.extend(session.fabric, Seconds(expiryLengthSeconds));
92
+ await commissioner.failsafeContext.extend(
93
+ session.fabric,
94
+ Seconds(expiryLengthSeconds),
95
+ (this.context as RemoteActorContext).exchange,
96
+ );
92
97
  } else {
93
98
  // If ExpiryLengthSeconds is 0 and the fail-safe timer was not armed, then this command invocation SHALL
94
99
  // lead to a success response with no side effect against the fail-safe context.
@@ -118,7 +123,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
118
123
  } catch (error) {
119
124
  MatterFlowError.accept(error);
120
125
 
121
- logger.debug(`Error while arming failSafe timer`, error);
126
+ logger.debug(`Error while arming failSafe timer:`, error);
122
127
  return {
123
128
  errorCode: GeneralCommissioning.CommissioningError.BusyWithOtherAdmin,
124
129
  debugText: error.message,
@@ -226,13 +231,13 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
226
231
  }
227
232
  const failsafeContext = commissioner.failsafeContext;
228
233
 
229
- SecureSession.assert(session, "commissioningComplete can only be called on a secure session");
234
+ SecureSession.assert(session, "Commissioning may only complete on a secure session");
230
235
 
231
236
  const timedFabric = failsafeContext.associatedFabric?.fabricIndex;
232
237
  if (fabric.fabricIndex !== timedFabric) {
233
238
  return {
234
239
  errorCode: GeneralCommissioning.CommissioningError.InvalidAuthentication,
235
- debugText: `Associated fabric ${fabric.fabricIndex} does not match the one from the failsafe context ${timedFabric}.`,
240
+ debugText: `Associated fabric index ${fabric.fabricIndex} does not match failsafe fabric index ${timedFabric}`,
236
241
  };
237
242
  }
238
243
 
@@ -252,7 +257,7 @@ export class GeneralCommissioningServer extends GeneralCommissioningBehavior {
252
257
  "Commissioned",
253
258
  Diagnostic.dict({
254
259
  fabric: `${Bytes.toHex(fabric.operationalId)} (#${fabric.fabricIndex})`,
255
- node: fabric.nodeId.toString(16).padStart(16, "0"),
260
+ node: hex.fixed(fabric.nodeId, 16),
256
261
  }),
257
262
  );
258
263
 
@@ -8,7 +8,7 @@ import { NetworkCommissioningBehavior } from "#behaviors/network-commissioning";
8
8
  import { Endpoint } from "#endpoint/Endpoint.js";
9
9
  import { Immutable, Lifecycle, UnsupportedDependencyError } from "#general";
10
10
  import type { ServerNode } from "#node/ServerNode.js";
11
- import { Fabric, FabricManager, FailsafeContext } from "#protocol";
11
+ import { FabricManager, FailsafeContext, MessageExchange } from "#protocol";
12
12
 
13
13
  /**
14
14
  * {@link FailsafeContext} for {@link ServerNode} API.
@@ -53,14 +53,8 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
53
53
  * TODO - it's recommended to reset all state if commissioning bails; currently we perform mandatory restore
54
54
  */
55
55
  override async storeEndpointState() {
56
- // const opcreds = this.#node.state.operationalCredentials;
57
56
  this.#storedState = {
58
57
  networks: new Map(),
59
- /*
60
- nocs: opcreds.nocs.map(noc => ({ ...noc })),
61
- fabrics: opcreds.fabrics.map(fabric => ({ ...fabric })),
62
- trustedRootCertificates: [...opcreds.trustedRootCertificates],
63
- */
64
58
  };
65
59
 
66
60
  if (!this.#node.behaviors.has(NetworkCommissioningBehavior)) {
@@ -87,12 +81,6 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
87
81
  });
88
82
  }
89
83
 
90
- override async revokeFabric(fabric: Fabric) {
91
- await fabric.remove();
92
-
93
- // await this.#restoreOperationalCredentials();
94
- }
95
-
96
84
  override async restoreBreadcrumb() {
97
85
  await this.#node.act(this.restoreBreadcrumb.name, async agent => {
98
86
  const tx = agent.context.transaction;
@@ -102,7 +90,7 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
102
90
  });
103
91
  }
104
92
 
105
- override async rollback() {
93
+ override async rollback(currentExchange?: MessageExchange) {
106
94
  if (!this.fabricIndex && this.hasRootCert) {
107
95
  // Update the fabric details if needed (like Trusted Root certificates) Only if fabric was not added because
108
96
  // else all data gets updated anyway
@@ -116,7 +104,7 @@ export class ServerNodeFailsafeContext extends FailsafeContext {
116
104
  }
117
105
  }
118
106
 
119
- return super.rollback();
107
+ return super.rollback(currentExchange);
120
108
  }
121
109
 
122
110
  /*
@@ -308,7 +308,7 @@ export class GeneralDiagnosticsServer extends Base {
308
308
  this.internal.lastTotalOperationalHoursTimer = Time.getPeriodicTimer(
309
309
  "GeneralDiagnostics.operationalHours",
310
310
  Minutes(5),
311
- this.callback(this.#updateTotalOperationalHoursCounter),
311
+ this.callback(this.#updateTotalOperationalHoursCounter, { lock: true }),
312
312
  ).start();
313
313
 
314
314
  await this.#updateNetworkList();
@@ -86,7 +86,7 @@ export class GroupKeyManagementServer extends GroupKeyManagementBehavior {
86
86
  // Added fabric always have no groups, so no need to initialize anything on adding the fabric
87
87
 
88
88
  // Fabric was updated, so basically newly created, so we need to reinitialize the group key sets
89
- this.reactTo(fabrics.events.updated, this.#handleFabricUpdate);
89
+ this.reactTo(fabrics.events.replaced, this.#handleFabricUpdate);
90
90
 
91
91
  // When we have group key sets, we need to ensure that they are initialized on the Fabric group manager
92
92
  if (this.state.groupKeySets.length) {