@matter/node 0.16.0-alpha.0-20251108-514b3f69e → 0.16.0-alpha.0-20251110-c4c70a41b

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 (212) hide show
  1. package/dist/cjs/behavior/cluster/ClientBehavior.d.ts +0 -7
  2. package/dist/cjs/behavior/cluster/ClientBehavior.d.ts.map +1 -1
  3. package/dist/cjs/behavior/cluster/ClientBehavior.js +2 -8
  4. package/dist/cjs/behavior/cluster/ClientBehavior.js.map +2 -2
  5. package/dist/cjs/behavior/cluster/ClusterBehavior.d.ts +1 -1
  6. package/dist/cjs/behavior/cluster/ClusterBehavior.d.ts.map +1 -1
  7. package/dist/cjs/behavior/cluster/ClusterBehavior.js +9 -4
  8. package/dist/cjs/behavior/cluster/ClusterBehavior.js.map +1 -1
  9. package/dist/cjs/behavior/cluster/ClusterBehaviorCache.d.ts +7 -1
  10. package/dist/cjs/behavior/cluster/ClusterBehaviorCache.d.ts.map +1 -1
  11. package/dist/cjs/behavior/cluster/ClusterBehaviorCache.js +7 -5
  12. package/dist/cjs/behavior/cluster/ClusterBehaviorCache.js.map +1 -1
  13. package/dist/cjs/behavior/cluster/ClusterBehaviorType.d.ts +57 -0
  14. package/dist/cjs/behavior/cluster/ClusterBehaviorType.d.ts.map +1 -0
  15. package/dist/cjs/behavior/cluster/{ClusterBehaviorUtil.js → ClusterBehaviorType.js} +70 -39
  16. package/dist/cjs/behavior/cluster/ClusterBehaviorType.js.map +6 -0
  17. package/dist/cjs/behavior/cluster/ClusterEvents.d.ts +1 -1
  18. package/dist/cjs/behavior/cluster/ClusterEvents.d.ts.map +1 -1
  19. package/dist/cjs/behavior/cluster/ClusterState.d.ts +1 -1
  20. package/dist/cjs/behavior/cluster/ClusterState.d.ts.map +1 -1
  21. package/dist/cjs/behavior/cluster/ValidatedElements.js +2 -2
  22. package/dist/cjs/behavior/cluster/ValidatedElements.js.map +1 -1
  23. package/dist/cjs/behavior/cluster/{ClusterBehaviorUtil.d.ts → cluster-behavior-utils.d.ts} +10 -8
  24. package/dist/cjs/behavior/cluster/cluster-behavior-utils.d.ts.map +1 -0
  25. package/dist/cjs/behavior/cluster/cluster-behavior-utils.js +41 -0
  26. package/dist/cjs/behavior/cluster/cluster-behavior-utils.js.map +6 -0
  27. package/dist/cjs/behavior/cluster/index.d.ts +2 -1
  28. package/dist/cjs/behavior/cluster/index.d.ts.map +1 -1
  29. package/dist/cjs/behavior/cluster/index.js +2 -1
  30. package/dist/cjs/behavior/cluster/index.js.map +1 -1
  31. package/dist/cjs/behavior/context/server/LocalActorContext.d.ts +4 -0
  32. package/dist/cjs/behavior/context/server/LocalActorContext.d.ts.map +1 -1
  33. package/dist/cjs/behavior/context/server/LocalActorContext.js +2 -3
  34. package/dist/cjs/behavior/context/server/LocalActorContext.js.map +1 -1
  35. package/dist/cjs/behavior/context/server/RemoteActorContext.d.ts +4 -0
  36. package/dist/cjs/behavior/context/server/RemoteActorContext.d.ts.map +1 -1
  37. package/dist/cjs/behavior/context/server/RemoteActorContext.js +1 -0
  38. package/dist/cjs/behavior/context/server/RemoteActorContext.js.map +1 -1
  39. package/dist/cjs/behavior/internal/BehaviorBacking.js +2 -2
  40. package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
  41. package/dist/cjs/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  42. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js +3 -3
  43. package/dist/cjs/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  44. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js +1 -1
  45. package/dist/cjs/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
  46. package/dist/cjs/behaviors/operational-credentials/VendorIdVerification.d.ts +6 -1
  47. package/dist/cjs/behaviors/operational-credentials/VendorIdVerification.d.ts.map +1 -1
  48. package/dist/cjs/behaviors/operational-credentials/VendorIdVerification.js +2 -2
  49. package/dist/cjs/behaviors/operational-credentials/VendorIdVerification.js.map +1 -1
  50. package/dist/cjs/endpoint/Endpoint.d.ts +8 -0
  51. package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
  52. package/dist/cjs/endpoint/Endpoint.js +11 -3
  53. package/dist/cjs/endpoint/Endpoint.js.map +1 -1
  54. package/dist/cjs/endpoint/properties/Behaviors.d.ts +1 -1
  55. package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
  56. package/dist/cjs/endpoint/properties/Behaviors.js +6 -3
  57. package/dist/cjs/endpoint/properties/Behaviors.js.map +1 -1
  58. package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts +0 -4
  59. package/dist/cjs/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
  60. package/dist/cjs/endpoint/properties/EndpointInitializer.js +0 -6
  61. package/dist/cjs/endpoint/properties/EndpointInitializer.js.map +1 -1
  62. package/dist/cjs/node/Node.d.ts.map +1 -1
  63. package/dist/cjs/node/Node.js +2 -1
  64. package/dist/cjs/node/Node.js.map +1 -1
  65. package/dist/cjs/node/client/ClientCommandMethod.d.ts +11 -0
  66. package/dist/cjs/node/client/ClientCommandMethod.d.ts.map +1 -0
  67. package/dist/cjs/node/client/ClientCommandMethod.js +69 -0
  68. package/dist/cjs/node/client/ClientCommandMethod.js.map +6 -0
  69. package/dist/cjs/node/client/ClientEndpointInitializer.d.ts +0 -2
  70. package/dist/cjs/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  71. package/dist/cjs/node/client/ClientEndpointInitializer.js +3 -34
  72. package/dist/cjs/node/client/ClientEndpointInitializer.js.map +1 -1
  73. package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
  74. package/dist/cjs/node/client/ClientStructure.js +164 -32
  75. package/dist/cjs/node/client/ClientStructure.js.map +2 -2
  76. package/dist/cjs/node/client/ClientStructureEvents.d.ts +22 -0
  77. package/dist/cjs/node/client/ClientStructureEvents.d.ts.map +1 -0
  78. package/dist/cjs/node/client/ClientStructureEvents.js +92 -0
  79. package/dist/cjs/node/client/ClientStructureEvents.js.map +6 -0
  80. package/dist/cjs/node/client/PeerBehavior.d.ts +14 -1
  81. package/dist/cjs/node/client/PeerBehavior.d.ts.map +1 -1
  82. package/dist/cjs/node/client/PeerBehavior.js +111 -71
  83. package/dist/cjs/node/client/PeerBehavior.js.map +1 -1
  84. package/dist/cjs/node/client/Peers.d.ts +17 -0
  85. package/dist/cjs/node/client/Peers.d.ts.map +1 -1
  86. package/dist/cjs/node/client/Peers.js +96 -42
  87. package/dist/cjs/node/client/Peers.js.map +1 -1
  88. package/dist/cjs/node/server/ServerSubscription.d.ts +1 -1
  89. package/dist/cjs/node/server/ServerSubscription.d.ts.map +1 -1
  90. package/dist/cjs/node/server/ServerSubscription.js +2 -3
  91. package/dist/cjs/node/server/ServerSubscription.js.map +1 -1
  92. package/dist/esm/behavior/cluster/ClientBehavior.d.ts +0 -7
  93. package/dist/esm/behavior/cluster/ClientBehavior.d.ts.map +1 -1
  94. package/dist/esm/behavior/cluster/ClientBehavior.js +2 -8
  95. package/dist/esm/behavior/cluster/ClientBehavior.js.map +2 -2
  96. package/dist/esm/behavior/cluster/ClusterBehavior.d.ts +1 -1
  97. package/dist/esm/behavior/cluster/ClusterBehavior.d.ts.map +1 -1
  98. package/dist/esm/behavior/cluster/ClusterBehavior.js +9 -4
  99. package/dist/esm/behavior/cluster/ClusterBehavior.js.map +1 -1
  100. package/dist/esm/behavior/cluster/ClusterBehaviorCache.d.ts +7 -1
  101. package/dist/esm/behavior/cluster/ClusterBehaviorCache.d.ts.map +1 -1
  102. package/dist/esm/behavior/cluster/ClusterBehaviorCache.js +7 -5
  103. package/dist/esm/behavior/cluster/ClusterBehaviorCache.js.map +1 -1
  104. package/dist/esm/behavior/cluster/ClusterBehaviorType.d.ts +57 -0
  105. package/dist/esm/behavior/cluster/ClusterBehaviorType.d.ts.map +1 -0
  106. package/dist/esm/behavior/cluster/{ClusterBehaviorUtil.js → ClusterBehaviorType.js} +66 -35
  107. package/dist/esm/behavior/cluster/ClusterBehaviorType.js.map +6 -0
  108. package/dist/esm/behavior/cluster/ClusterEvents.d.ts +1 -1
  109. package/dist/esm/behavior/cluster/ClusterEvents.d.ts.map +1 -1
  110. package/dist/esm/behavior/cluster/ClusterState.d.ts +1 -1
  111. package/dist/esm/behavior/cluster/ClusterState.d.ts.map +1 -1
  112. package/dist/esm/behavior/cluster/ValidatedElements.js +1 -1
  113. package/dist/esm/behavior/cluster/{ClusterBehaviorUtil.d.ts → cluster-behavior-utils.d.ts} +10 -8
  114. package/dist/esm/behavior/cluster/cluster-behavior-utils.d.ts.map +1 -0
  115. package/dist/esm/behavior/cluster/cluster-behavior-utils.js +21 -0
  116. package/dist/esm/behavior/cluster/cluster-behavior-utils.js.map +6 -0
  117. package/dist/esm/behavior/cluster/index.d.ts +2 -1
  118. package/dist/esm/behavior/cluster/index.d.ts.map +1 -1
  119. package/dist/esm/behavior/cluster/index.js +2 -1
  120. package/dist/esm/behavior/cluster/index.js.map +1 -1
  121. package/dist/esm/behavior/context/server/LocalActorContext.d.ts +4 -0
  122. package/dist/esm/behavior/context/server/LocalActorContext.d.ts.map +1 -1
  123. package/dist/esm/behavior/context/server/LocalActorContext.js +2 -3
  124. package/dist/esm/behavior/context/server/LocalActorContext.js.map +1 -1
  125. package/dist/esm/behavior/context/server/RemoteActorContext.d.ts +4 -0
  126. package/dist/esm/behavior/context/server/RemoteActorContext.d.ts.map +1 -1
  127. package/dist/esm/behavior/context/server/RemoteActorContext.js +1 -0
  128. package/dist/esm/behavior/context/server/RemoteActorContext.js.map +1 -1
  129. package/dist/esm/behavior/internal/BehaviorBacking.js +2 -2
  130. package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
  131. package/dist/esm/behavior/system/commissioning/CommissioningServer.d.ts.map +1 -1
  132. package/dist/esm/behavior/system/commissioning/CommissioningServer.js +4 -3
  133. package/dist/esm/behavior/system/commissioning/CommissioningServer.js.map +1 -1
  134. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js +1 -1
  135. package/dist/esm/behaviors/operational-credentials/OperationalCredentialsServer.js.map +1 -1
  136. package/dist/esm/behaviors/operational-credentials/VendorIdVerification.d.ts +6 -1
  137. package/dist/esm/behaviors/operational-credentials/VendorIdVerification.d.ts.map +1 -1
  138. package/dist/esm/behaviors/operational-credentials/VendorIdVerification.js +1 -1
  139. package/dist/esm/behaviors/operational-credentials/VendorIdVerification.js.map +1 -1
  140. package/dist/esm/endpoint/Endpoint.d.ts +8 -0
  141. package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
  142. package/dist/esm/endpoint/Endpoint.js +11 -3
  143. package/dist/esm/endpoint/Endpoint.js.map +1 -1
  144. package/dist/esm/endpoint/properties/Behaviors.d.ts +1 -1
  145. package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
  146. package/dist/esm/endpoint/properties/Behaviors.js +6 -3
  147. package/dist/esm/endpoint/properties/Behaviors.js.map +1 -1
  148. package/dist/esm/endpoint/properties/EndpointInitializer.d.ts +0 -4
  149. package/dist/esm/endpoint/properties/EndpointInitializer.d.ts.map +1 -1
  150. package/dist/esm/endpoint/properties/EndpointInitializer.js +0 -6
  151. package/dist/esm/endpoint/properties/EndpointInitializer.js.map +1 -1
  152. package/dist/esm/node/Node.d.ts.map +1 -1
  153. package/dist/esm/node/Node.js +2 -1
  154. package/dist/esm/node/Node.js.map +1 -1
  155. package/dist/esm/node/client/ClientCommandMethod.d.ts +11 -0
  156. package/dist/esm/node/client/ClientCommandMethod.d.ts.map +1 -0
  157. package/dist/esm/node/client/ClientCommandMethod.js +49 -0
  158. package/dist/esm/node/client/ClientCommandMethod.js.map +6 -0
  159. package/dist/esm/node/client/ClientEndpointInitializer.d.ts +0 -2
  160. package/dist/esm/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  161. package/dist/esm/node/client/ClientEndpointInitializer.js +3 -34
  162. package/dist/esm/node/client/ClientEndpointInitializer.js.map +1 -1
  163. package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
  164. package/dist/esm/node/client/ClientStructure.js +164 -32
  165. package/dist/esm/node/client/ClientStructure.js.map +2 -2
  166. package/dist/esm/node/client/ClientStructureEvents.d.ts +22 -0
  167. package/dist/esm/node/client/ClientStructureEvents.d.ts.map +1 -0
  168. package/dist/esm/node/client/ClientStructureEvents.js +72 -0
  169. package/dist/esm/node/client/ClientStructureEvents.js.map +6 -0
  170. package/dist/esm/node/client/PeerBehavior.d.ts +14 -1
  171. package/dist/esm/node/client/PeerBehavior.d.ts.map +1 -1
  172. package/dist/esm/node/client/PeerBehavior.js +119 -74
  173. package/dist/esm/node/client/PeerBehavior.js.map +1 -1
  174. package/dist/esm/node/client/Peers.d.ts +17 -0
  175. package/dist/esm/node/client/Peers.d.ts.map +1 -1
  176. package/dist/esm/node/client/Peers.js +106 -43
  177. package/dist/esm/node/client/Peers.js.map +1 -1
  178. package/dist/esm/node/server/ServerSubscription.d.ts +1 -1
  179. package/dist/esm/node/server/ServerSubscription.d.ts.map +1 -1
  180. package/dist/esm/node/server/ServerSubscription.js +2 -3
  181. package/dist/esm/node/server/ServerSubscription.js.map +1 -1
  182. package/package.json +7 -7
  183. package/src/behavior/cluster/ClientBehavior.ts +2 -16
  184. package/src/behavior/cluster/ClusterBehavior.ts +9 -4
  185. package/src/behavior/cluster/ClusterBehaviorCache.ts +16 -9
  186. package/src/behavior/cluster/{ClusterBehaviorUtil.ts → ClusterBehaviorType.ts} +160 -64
  187. package/src/behavior/cluster/ClusterEvents.ts +1 -1
  188. package/src/behavior/cluster/ClusterState.ts +1 -1
  189. package/src/behavior/cluster/ValidatedElements.ts +1 -1
  190. package/src/behavior/cluster/cluster-behavior-utils.ts +48 -0
  191. package/src/behavior/cluster/index.ts +2 -1
  192. package/src/behavior/context/server/LocalActorContext.ts +8 -4
  193. package/src/behavior/context/server/RemoteActorContext.ts +6 -0
  194. package/src/behavior/internal/BehaviorBacking.ts +2 -2
  195. package/src/behavior/system/commissioning/CommissioningServer.ts +4 -3
  196. package/src/behaviors/operational-credentials/OperationalCredentialsServer.ts +1 -1
  197. package/src/behaviors/operational-credentials/VendorIdVerification.ts +3 -2
  198. package/src/endpoint/Endpoint.ts +23 -3
  199. package/src/endpoint/properties/Behaviors.ts +12 -6
  200. package/src/endpoint/properties/EndpointInitializer.ts +0 -7
  201. package/src/node/Node.ts +2 -1
  202. package/src/node/client/ClientCommandMethod.ts +63 -0
  203. package/src/node/client/ClientEndpointInitializer.ts +6 -39
  204. package/src/node/client/ClientStructure.ts +133 -27
  205. package/src/node/client/ClientStructureEvents.ts +97 -0
  206. package/src/node/client/PeerBehavior.ts +185 -104
  207. package/src/node/client/Peers.ts +131 -51
  208. package/src/node/server/ServerSubscription.ts +3 -3
  209. package/dist/cjs/behavior/cluster/ClusterBehaviorUtil.d.ts.map +0 -1
  210. package/dist/cjs/behavior/cluster/ClusterBehaviorUtil.js.map +0 -6
  211. package/dist/esm/behavior/cluster/ClusterBehaviorUtil.d.ts.map +0 -1
  212. package/dist/esm/behavior/cluster/ClusterBehaviorUtil.js.map +0 -6
@@ -4,22 +4,43 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import { type ClusterBehavior } from "#behavior/cluster/ClusterBehavior.js";
8
+ import { LocalActorContext } from "#behavior/context/server/LocalActorContext.js";
9
+ import { CommissioningClient } from "#behavior/system/commissioning/CommissioningClient.js";
7
10
  import { RemoteDescriptor } from "#behavior/system/commissioning/RemoteDescriptor.js";
8
11
  import { CommissioningDiscovery } from "#behavior/system/controller/discovery/CommissioningDiscovery.js";
9
12
  import { ContinuousDiscovery } from "#behavior/system/controller/discovery/ContinuousDiscovery.js";
10
13
  import { Discovery } from "#behavior/system/controller/discovery/Discovery.js";
11
14
  import { InstanceDiscovery } from "#behavior/system/controller/discovery/InstanceDiscovery.js";
15
+ import { BasicInformationClient } from "#behaviors/basic-information";
16
+ import { OperationalCredentialsClient } from "#behaviors/operational-credentials";
17
+ import { Endpoint } from "#endpoint/Endpoint.js";
12
18
  import { EndpointContainer } from "#endpoint/properties/EndpointContainer.js";
13
- import { CancelablePromise, Duration, ImplementationError, Logger, Minutes, Seconds, Time, Timestamp } from "#general";
19
+ import { EndpointType } from "#endpoint/type/EndpointType.js";
20
+ import {
21
+ CancelablePromise,
22
+ Diagnostic,
23
+ Duration,
24
+ ImplementationError,
25
+ Logger,
26
+ Minutes,
27
+ Mutex,
28
+ Observable,
29
+ Seconds,
30
+ Time,
31
+ Timestamp,
32
+ } from "#general";
14
33
  import { ClientGroup } from "#node/ClientGroup.js";
15
34
  import { InteractionServer } from "#node/server/InteractionServer.js";
16
35
  import { ClientSubscriptionHandler, ClientSubscriptions, FabricManager, PeerAddress } from "#protocol";
17
36
  import { ServerNodeStore } from "#storage/server/ServerNodeStore.js";
37
+ import { FabricIndex } from "@matter/types";
18
38
  import { ClientNode } from "../ClientNode.js";
19
39
  import type { ServerNode } from "../ServerNode.js";
20
40
  import { ClientNodeFactory } from "./ClientNodeFactory.js";
41
+ import { ClientStructureEvents } from "./ClientStructureEvents.js";
21
42
 
22
- const logger = Logger.get("ClientNodes");
43
+ const logger = Logger.get("Peers");
23
44
 
24
45
  const DEFAULT_TTL = Minutes(15);
25
46
  const EXPIRATION_INTERVAL = Minutes.one;
@@ -31,8 +52,8 @@ const EXPIRATION_INTERVAL = Minutes.one;
31
52
  */
32
53
  export class Peers extends EndpointContainer<ClientNode> {
33
54
  #expirationInterval?: CancelablePromise;
34
- #expirationWorker?: Promise<void>;
35
55
  #subscriptionHandler?: ClientSubscriptionHandler;
56
+ #mutex = new Mutex(this);
36
57
  #closed = false;
37
58
 
38
59
  constructor(owner: ServerNode) {
@@ -46,6 +67,8 @@ export class Peers extends EndpointContainer<ClientNode> {
46
67
 
47
68
  this.added.on(this.#handlePeerAdded.bind(this));
48
69
  this.deleted.on(this.#manageExpiration.bind(this));
70
+
71
+ this.clusterInstalled(BasicInformationClient).on(this.#instrumentBasicInformation.bind(this));
49
72
  }
50
73
 
51
74
  /**
@@ -90,6 +113,24 @@ export class Peers extends EndpointContainer<ClientNode> {
90
113
  return new CommissioningDiscovery(this.owner, options);
91
114
  }
92
115
 
116
+ /**
117
+ * Obtain an {@link Observable} that emits when a specific type of endpoint initializes for a peer.
118
+ *
119
+ * This is useful for initializing general behavior on any peer endpoint of the specified type.
120
+ */
121
+ endpointInstalled<T extends EndpointType>(type: T): Observable<[endpoint: Endpoint<T>]> {
122
+ return this.owner.env.get(ClientStructureEvents).endpointInstalled(type);
123
+ }
124
+
125
+ /**
126
+ * Obtain a {@link Observable} that emits when a specific type of cluster initializes for a peer.
127
+ *
128
+ * This is useful for initializing general behavior on any peer endpoint with the specified cluster.
129
+ */
130
+ clusterInstalled<T extends ClusterBehavior.Type>(type: T) {
131
+ return this.owner.env.get(ClientStructureEvents).clusterInstalled(type);
132
+ }
133
+
93
134
  override get(id: number | string | PeerAddress) {
94
135
  if (typeof id !== "string" && typeof id !== "number") {
95
136
  const address = PeerAddress(id);
@@ -117,6 +158,7 @@ export class Peers extends EndpointContainer<ClientNode> {
117
158
 
118
159
  /**
119
160
  * Get or create a client node for the given peer address.
161
+ *
120
162
  * This is mainly used to communicate to other known nodes on the fabric without having a formal commissioning
121
163
  * process.
122
164
  */
@@ -147,7 +189,7 @@ export class Peers extends EndpointContainer<ClientNode> {
147
189
  this.#closed = true;
148
190
  await this.#subscriptionHandler?.close();
149
191
  this.#cancelExpiration();
150
- await this.#expirationWorker;
192
+ await this.#mutex;
151
193
  await super.close();
152
194
  }
153
195
 
@@ -191,10 +233,6 @@ export class Peers extends EndpointContainer<ClientNode> {
191
233
  return;
192
234
  }
193
235
 
194
- if (this.#expirationWorker) {
195
- return;
196
- }
197
-
198
236
  if (this.#expirationInterval) {
199
237
  if (!this.size) {
200
238
  this.#cancelExpiration();
@@ -212,65 +250,107 @@ export class Peers extends EndpointContainer<ClientNode> {
212
250
  }
213
251
 
214
252
  #onExpirationIntervalElapsed() {
215
- this.#expirationInterval = undefined;
216
- this.#expirationWorker = this.#cullExpiredNodesAndAddresses()
217
- .catch(error => {
218
- logger.error("Error culling expired nodes", error);
219
- })
220
- .finally(() => {
221
- this.#expirationWorker = undefined;
222
- this.#manageExpiration();
223
- });
253
+ this.#mutex.run(() =>
254
+ this.#cullExpiredNodesAndAddresses()
255
+ .catch(error => {
256
+ logger.error("Error culling expired nodes", error);
257
+ })
258
+ .finally(() => {
259
+ this.#manageExpiration();
260
+ }),
261
+ );
224
262
  }
225
263
 
226
264
  async #cullExpiredNodesAndAddresses() {
227
- const now = Time.nowMs;
265
+ try {
266
+ const now = Time.nowMs;
228
267
 
229
- for (const node of this) {
230
- const state = node.state.commissioning;
231
- const { addresses } = state;
232
- const isCommissioned = state.peerAddress !== undefined;
268
+ for (const node of this) {
269
+ const state = node.state.commissioning;
270
+ const { addresses } = state;
271
+ const isCommissioned = state.peerAddress !== undefined;
233
272
 
234
- // Shortcut for conditions we know no change is possible
235
- if (addresses === undefined || (isCommissioned && addresses.length === 1)) {
236
- return;
237
- }
273
+ // Shortcut for conditions we know no change is possible
274
+ if (addresses === undefined || (isCommissioned && addresses.length === 1)) {
275
+ return;
276
+ }
238
277
 
239
- // Remove expired addresses
240
- let newAddresses = addresses.filter(addr => {
241
- const exp = expirationOf(addr);
242
- if (exp === undefined) {
243
- return true;
278
+ // Remove expired addresses
279
+ let newAddresses = addresses.filter(addr => {
280
+ const exp = expirationOf(addr);
281
+ if (exp === undefined) {
282
+ return true;
283
+ }
284
+
285
+ return exp > now;
286
+ });
287
+
288
+ // Cull commissionable nodes that have expired
289
+ if (!isCommissioned) {
290
+ if (!newAddresses?.length || (expirationOf(state) ?? 0) <= now) {
291
+ await node.delete();
292
+ continue;
293
+ }
244
294
  }
245
295
 
246
- return exp > now;
247
- });
296
+ // If the node is commissioned, do not remove the last address. Instead keep the "least expired" addresses
297
+ if (isCommissioned && addresses.length && !newAddresses.length) {
298
+ if (addresses.length === 1) {
299
+ return;
300
+ }
301
+ const freshestExp = addresses.reduce((freshestExp, addr) => {
302
+ return Math.max(freshestExp, expirationOf(addr)!);
303
+ }, 0);
248
304
 
249
- // Cull commissionable nodes that have expired
250
- if (!isCommissioned) {
251
- if (!newAddresses?.length || (expirationOf(state) ?? 0) <= now) {
252
- await node.delete();
253
- continue;
305
+ newAddresses = addresses.filter(addr => expirationOf(addr) === freshestExp);
254
306
  }
255
- }
256
307
 
257
- // If the node is commissioned, do not remove the last address. Instead keep the "least expired" addresses
258
- if (isCommissioned && addresses.length && !newAddresses.length) {
259
- if (addresses.length === 1) {
260
- return;
308
+ // Apply new addresses if changed
309
+ if (addresses.length !== newAddresses.length) {
310
+ await node.set({ commissioning: { addresses } });
261
311
  }
262
- const freshestExp = addresses.reduce((freshestExp, addr) => {
263
- return Math.max(freshestExp, expirationOf(addr)!);
264
- }, 0);
312
+ }
313
+ } finally {
314
+ this.#expirationInterval = undefined;
315
+ }
316
+ }
317
+
318
+ #instrumentBasicInformation(node: Endpoint, type: typeof BasicInformationClient) {
319
+ if (!(node instanceof ClientNode)) {
320
+ return;
321
+ }
265
322
 
266
- newAddresses = addresses.filter(addr => expirationOf(addr) === freshestExp);
323
+ node.eventsOf(type).leave?.on(({ fabricIndex }) => this.#onLeave(node, fabricIndex));
324
+ node.eventsOf(type).shutDown?.on(() => this.#onShutdown(node));
325
+ }
326
+
327
+ #onLeave(node: ClientNode, fabricIndex: FabricIndex) {
328
+ this.#mutex.run(async () => {
329
+ const { fabrics: peerFabrics } = node.maybeStateOf(OperationalCredentialsClient);
330
+ const peerFabric = peerFabrics.find(fabric => fabric.fabricIndex === fabricIndex);
331
+ if (!peerFabric) {
332
+ return;
267
333
  }
268
334
 
269
- // Apply new addresses if changed
270
- if (addresses.length !== newAddresses.length) {
271
- await node.set({ commissioning: { addresses } });
335
+ const peerAddress = node.maybeStateOf(CommissioningClient).peerAddress;
336
+ if (!peerAddress) {
337
+ return;
272
338
  }
273
- }
339
+
340
+ const localFabrics = this.owner.env.get(FabricManager);
341
+ const localFabric = localFabrics.forDescriptor(peerFabric);
342
+ if (!localFabric || localFabric.fabricIndex !== peerAddress.fabricIndex) {
343
+ return;
344
+ }
345
+
346
+ logger.notice("Peer", Diagnostic.strong(node.id), "has left the fabric");
347
+ node.lifecycle.decommissioned.emit(LocalActorContext.ReadOnly);
348
+ await node.delete();
349
+ });
350
+ }
351
+
352
+ #onShutdown(_node: ClientNode) {
353
+ // TODO
274
354
  }
275
355
  }
276
356
 
@@ -379,7 +379,6 @@ export class ServerSubscription extends Subscription {
379
379
 
380
380
  /**
381
381
  * Determine all attributes that have changed since the last update and send them out to the subscriber.
382
- * Important: This method MUST NOT be called directly. Use triggerSendUpdate() instead!
383
382
  */
384
383
  async #sendUpdate(onlyWithData = false) {
385
384
  // Get all outstanding updates, make sure the order is correct per endpoint and cluster
@@ -604,7 +603,7 @@ export class ServerSubscription extends Subscription {
604
603
  /**
605
604
  * Closes the subscription and flushes all outstanding data updates if requested.
606
605
  */
607
- override async close(graceful = false, cancelledByPeer = false) {
606
+ override async close(flush = false, cancelledByPeer = false) {
608
607
  if (this.isClosed) {
609
608
  return;
610
609
  }
@@ -612,7 +611,8 @@ export class ServerSubscription extends Subscription {
612
611
  this.isCanceledByPeer = true;
613
612
  }
614
613
  await this.destroy();
615
- if (graceful) {
614
+
615
+ if (flush) {
616
616
  await this.#flush();
617
617
  }
618
618
  if (this.#currentUpdatePromise) {
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClusterBehaviorUtil.d.ts","sourceRoot":"","sources":["../../../../src/behavior/cluster/ClusterBehaviorUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAUH,MAAM,EAGT,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAe5D;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,4BACW,GAAG,EAAE,KAAK,GAAG,EAClF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EAClD,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,EACvB,IAAI,CAAC,EAAE,MAAM,kGAuEhB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,SAAS,WAAW,CAAA;CAAE,GAC7F,CAAC,GACD,WAAW,CAAC,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS;IAAE,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAA;CAAE,GAC1G,CAAC,GACD,EAAE,CAAC"}
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/behavior/cluster/ClusterBehaviorUtil.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClusterBehaviorUtil.d.ts","sourceRoot":"","sources":["../../../../src/behavior/cluster/ClusterBehaviorUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAUH,MAAM,EAGT,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAe5D;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,4BACW,GAAG,EAAE,KAAK,GAAG,EAClF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EAClD,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,EACvB,IAAI,CAAC,EAAE,MAAM,kGAuEhB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,SAAS,WAAW,CAAA;CAAE,GAC7F,CAAC,GACD,WAAW,CAAC,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS;IAAE,kBAAkB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAA;CAAE,GAC1G,CAAC,GACD,EAAE,CAAC"}
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/behavior/cluster/ClusterBehaviorUtil.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }