@matter/node 0.16.0-alpha.0-20251110-c4c70a41b → 0.16.0-alpha.0-20251111-11cc8c3bd

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 (91) hide show
  1. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts +2 -1
  2. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  3. package/dist/cjs/behavior/internal/BehaviorBacking.js +11 -3
  4. package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
  5. package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts +2 -0
  6. package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
  7. package/dist/cjs/behavior/internal/ClientBehaviorBacking.js +4 -0
  8. package/dist/cjs/behavior/internal/ClientBehaviorBacking.js.map +1 -1
  9. package/dist/cjs/behavior/state/managed/Datasource.d.ts +4 -0
  10. package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
  11. package/dist/cjs/behavior/state/managed/Datasource.js +5 -0
  12. package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
  13. package/dist/cjs/endpoint/properties/Behaviors.d.ts +12 -2
  14. package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
  15. package/dist/cjs/endpoint/properties/Behaviors.js +44 -10
  16. package/dist/cjs/endpoint/properties/Behaviors.js.map +2 -2
  17. package/dist/cjs/node/client/ClientStructure.d.ts +31 -1
  18. package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
  19. package/dist/cjs/node/client/ClientStructure.js +257 -81
  20. package/dist/cjs/node/client/ClientStructure.js.map +1 -1
  21. package/dist/cjs/node/client/ClientStructureEvents.d.ts +5 -2
  22. package/dist/cjs/node/client/ClientStructureEvents.d.ts.map +1 -1
  23. package/dist/cjs/node/client/ClientStructureEvents.js +38 -2
  24. package/dist/cjs/node/client/ClientStructureEvents.js.map +1 -1
  25. package/dist/cjs/node/client/Peers.d.ts +3 -0
  26. package/dist/cjs/node/client/Peers.d.ts.map +1 -1
  27. package/dist/cjs/node/client/Peers.js +3 -0
  28. package/dist/cjs/node/client/Peers.js.map +1 -1
  29. package/dist/cjs/node/server/ServerEndpointInitializer.js +1 -1
  30. package/dist/cjs/node/server/ServerEndpointInitializer.js.map +1 -1
  31. package/dist/cjs/storage/EndpointStore.d.ts +5 -1
  32. package/dist/cjs/storage/EndpointStore.d.ts.map +1 -1
  33. package/dist/cjs/storage/EndpointStore.js +7 -1
  34. package/dist/cjs/storage/EndpointStore.js.map +1 -1
  35. package/dist/cjs/storage/client/ClientEndpointStore.d.ts +2 -1
  36. package/dist/cjs/storage/client/ClientEndpointStore.d.ts.map +1 -1
  37. package/dist/cjs/storage/client/DatasourceCache.d.ts +14 -3
  38. package/dist/cjs/storage/client/DatasourceCache.d.ts.map +1 -1
  39. package/dist/cjs/storage/client/DatasourceCache.js +10 -0
  40. package/dist/cjs/storage/client/DatasourceCache.js.map +1 -1
  41. package/dist/esm/behavior/internal/BehaviorBacking.d.ts +2 -1
  42. package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  43. package/dist/esm/behavior/internal/BehaviorBacking.js +11 -3
  44. package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
  45. package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts +2 -0
  46. package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
  47. package/dist/esm/behavior/internal/ClientBehaviorBacking.js +4 -0
  48. package/dist/esm/behavior/internal/ClientBehaviorBacking.js.map +1 -1
  49. package/dist/esm/behavior/state/managed/Datasource.d.ts +4 -0
  50. package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
  51. package/dist/esm/behavior/state/managed/Datasource.js +5 -0
  52. package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
  53. package/dist/esm/endpoint/properties/Behaviors.d.ts +12 -2
  54. package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
  55. package/dist/esm/endpoint/properties/Behaviors.js +44 -10
  56. package/dist/esm/endpoint/properties/Behaviors.js.map +2 -2
  57. package/dist/esm/node/client/ClientStructure.d.ts +31 -1
  58. package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
  59. package/dist/esm/node/client/ClientStructure.js +258 -82
  60. package/dist/esm/node/client/ClientStructure.js.map +1 -1
  61. package/dist/esm/node/client/ClientStructureEvents.d.ts +5 -2
  62. package/dist/esm/node/client/ClientStructureEvents.d.ts.map +1 -1
  63. package/dist/esm/node/client/ClientStructureEvents.js +39 -3
  64. package/dist/esm/node/client/ClientStructureEvents.js.map +1 -1
  65. package/dist/esm/node/client/Peers.d.ts +3 -0
  66. package/dist/esm/node/client/Peers.d.ts.map +1 -1
  67. package/dist/esm/node/client/Peers.js +3 -0
  68. package/dist/esm/node/client/Peers.js.map +1 -1
  69. package/dist/esm/node/server/ServerEndpointInitializer.js +1 -1
  70. package/dist/esm/node/server/ServerEndpointInitializer.js.map +1 -1
  71. package/dist/esm/storage/EndpointStore.d.ts +5 -1
  72. package/dist/esm/storage/EndpointStore.d.ts.map +1 -1
  73. package/dist/esm/storage/EndpointStore.js +7 -1
  74. package/dist/esm/storage/EndpointStore.js.map +1 -1
  75. package/dist/esm/storage/client/ClientEndpointStore.d.ts +2 -1
  76. package/dist/esm/storage/client/ClientEndpointStore.d.ts.map +1 -1
  77. package/dist/esm/storage/client/DatasourceCache.d.ts +14 -3
  78. package/dist/esm/storage/client/DatasourceCache.d.ts.map +1 -1
  79. package/dist/esm/storage/client/DatasourceCache.js +10 -0
  80. package/dist/esm/storage/client/DatasourceCache.js.map +1 -1
  81. package/package.json +7 -7
  82. package/src/behavior/internal/BehaviorBacking.ts +16 -3
  83. package/src/behavior/internal/ClientBehaviorBacking.ts +10 -1
  84. package/src/behavior/state/managed/Datasource.ts +13 -0
  85. package/src/endpoint/properties/Behaviors.ts +53 -12
  86. package/src/node/client/ClientStructure.ts +352 -91
  87. package/src/node/client/ClientStructureEvents.ts +55 -7
  88. package/src/node/client/Peers.ts +4 -0
  89. package/src/node/server/ServerEndpointInitializer.ts +1 -1
  90. package/src/storage/EndpointStore.ts +8 -1
  91. package/src/storage/client/DatasourceCache.ts +28 -4
@@ -90,19 +90,20 @@ const SERVER_LIST_ATTR_ID = import_descriptor.Descriptor.Cluster.attributes.serv
90
90
  const PARTS_LIST_ATTR_ID = import_descriptor.Descriptor.Cluster.attributes.partsList.id;
91
91
  class ClientStructure {
92
92
  #nodeStore;
93
- #endpoints = {};
93
+ #endpoints = /* @__PURE__ */ new Map();
94
94
  #emitEvent;
95
95
  #node;
96
96
  #subscribedFabricFiltered;
97
- #pending = /* @__PURE__ */ new Map();
97
+ #pendingChanges = /* @__PURE__ */ new Map();
98
+ #pendingEvents = Array();
98
99
  #events;
99
100
  constructor(node) {
100
101
  this.#node = node;
101
102
  this.#nodeStore = node.env.get(import_storage.ClientNodeStore);
102
- this.#endpoints[node.number] = {
103
+ this.#endpoints.set(node.number, {
103
104
  endpoint: node,
104
- clusters: {}
105
- };
105
+ clusters: /* @__PURE__ */ new Map()
106
+ });
106
107
  this.#emitEvent = (0, import_ClientEventEmitter.ClientEventEmitter)(node, this);
107
108
  this.#events = this.#node.env.get(import_ClientStructureEvents.ClientStructureEvents);
108
109
  }
@@ -126,16 +127,18 @@ class ClientStructure {
126
127
  this.#synchronizeCluster(endpoint, cluster);
127
128
  }
128
129
  }
129
- for (const [endpoint, opcode] of this.#pending.entries()) {
130
- this.#pending.delete(endpoint);
131
- switch (opcode) {
132
- case "reparent":
133
- this.#install(endpoint);
134
- break;
135
- default:
136
- throw new import_general.InternalError(`Unexpected ${opcode} operation in initial hierarchy load`);
130
+ const changes = this.#pendingChanges;
131
+ this.#pendingChanges = /* @__PURE__ */ new Map();
132
+ for (const [structure, change] of changes.entries()) {
133
+ if (!change.install || change.erase || change.rebuild) {
134
+ throw new import_general.InternalError(
135
+ `Unexpected erase and/or rebuild during initialization of ${structure.endpoint}`
136
+ );
137
137
  }
138
+ this.#pendingChanges.delete(structure);
139
+ this.#install(structure);
138
140
  }
141
+ this.#emitPendingEvents();
139
142
  }
140
143
  /**
141
144
  * Obtain the store for a remote cluster.
@@ -162,11 +165,11 @@ class ClientStructure {
162
165
  for (const {
163
166
  endpoint: { number: endpointId },
164
167
  clusters
165
- } of Object.values(this.#endpoints)) {
168
+ } of this.#endpoints.values()) {
166
169
  for (const {
167
170
  id: clusterId,
168
171
  store: { version }
169
- } of Object.values(clusters)) {
172
+ } of clusters.values()) {
170
173
  if (!scope.isRelevant(endpointId, clusterId)) {
171
174
  continue;
172
175
  }
@@ -209,23 +212,20 @@ class ClientStructure {
209
212
  if (currentUpdates) {
210
213
  await this.#updateCluster(currentUpdates);
211
214
  }
212
- for (const [endpoint, opcode] of this.#pending.entries()) {
213
- this.#pending.delete(endpoint);
214
- switch (opcode) {
215
- case "reparent":
216
- this.#install(endpoint);
217
- break;
218
- case "erase":
219
- logger.debug(`Removing endpoint ${endpoint.endpoint} because it is no longer present on the peer`);
220
- delete this.#endpoints[endpoint.endpoint.number];
221
- try {
222
- await endpoint.endpoint.delete();
223
- } catch (e) {
224
- logger.error(`Error erasing peer endpoint ${endpoint.endpoint}:`, e);
225
- }
226
- break;
215
+ for (const [endpoint, change] of this.#pendingChanges.entries()) {
216
+ this.#pendingChanges.delete(endpoint);
217
+ if (change.erase) {
218
+ await this.#erase(endpoint);
219
+ continue;
220
+ }
221
+ if (change.rebuild) {
222
+ await this.#rebuild(endpoint);
223
+ }
224
+ if (change.install) {
225
+ this.#install(endpoint);
227
226
  }
228
227
  }
228
+ this.#emitPendingEvents();
229
229
  } catch (_) {
230
230
  var _error = _, _hasError = true;
231
231
  } finally {
@@ -281,7 +281,7 @@ class ClientStructure {
281
281
  * Obtain the {@link Endpoint} for a {@link EndpointNumber}.
282
282
  */
283
283
  endpointFor(endpoint) {
284
- return this.#endpoints[endpoint]?.endpoint;
284
+ return this.#endpoints.get(endpoint)?.endpoint;
285
285
  }
286
286
  /**
287
287
  * Apply new attribute values for specific endpoint/cluster.
@@ -291,6 +291,21 @@ class ClientStructure {
291
291
  async #updateCluster(attrs) {
292
292
  const endpoint = this.#endpointFor(attrs.endpointId);
293
293
  const cluster = this.#clusterFor(endpoint, attrs.clusterId);
294
+ if (cluster.behavior && import_model.FeatureMap.id in attrs.values) {
295
+ if (!(0, import_general.isDeepEqual)(cluster.features, attrs.values[import_model.FeatureMap.id])) {
296
+ cluster.behavior = void 0;
297
+ }
298
+ }
299
+ if (cluster.behavior && import_model.AttributeList.id in attrs.values) {
300
+ if (!(0, import_general.isDeepEqual)(cluster.attributes, attrs.values[import_model.AttributeList.id])) {
301
+ cluster.behavior = void 0;
302
+ }
303
+ }
304
+ if (cluster.behavior && import_model.AcceptedCommandList.id in attrs.values) {
305
+ if (!(0, import_general.isDeepEqual)(cluster.attributes, attrs.values[import_model.AttributeList.id])) {
306
+ cluster.behavior = void 0;
307
+ }
308
+ }
294
309
  await cluster.store.externalSet(attrs.values);
295
310
  this.#synchronizeCluster(endpoint, cluster);
296
311
  }
@@ -302,48 +317,58 @@ class ClientStructure {
302
317
  *
303
318
  * Invoked once we've loaded all attributes in an interaction.
304
319
  */
305
- #synchronizeCluster(endpoint, cluster) {
306
- if (cluster.behavior === void 0 && cluster.store.initialValues) {
307
- const {
308
- [import_model.ClusterRevision.id]: clusterRevision,
309
- [import_model.FeatureMap.id]: features,
310
- [import_model.AttributeList.id]: attributeList,
311
- [import_model.AcceptedCommandList.id]: commandList
312
- } = cluster.store.initialValues;
313
- if (typeof clusterRevision === "number") {
314
- cluster.revision = clusterRevision;
315
- }
316
- if (typeof features === "object" && features !== null && !Array.isArray(features)) {
317
- cluster.features = features;
318
- }
319
- if (Array.isArray(attributeList)) {
320
- cluster.attributes = attributeList.filter((attr) => typeof attr === "number");
321
- }
322
- if (Array.isArray(commandList)) {
323
- cluster.commands = commandList.filter((cmd) => typeof cmd === "number");
320
+ #synchronizeCluster(structure, cluster) {
321
+ const { endpoint } = structure;
322
+ if (cluster.behavior === void 0) {
323
+ if (cluster.store.initialValues) {
324
+ const {
325
+ [import_model.ClusterRevision.id]: clusterRevision,
326
+ [import_model.FeatureMap.id]: features,
327
+ [import_model.AttributeList.id]: attributeList,
328
+ [import_model.AcceptedCommandList.id]: commandList
329
+ } = cluster.store.initialValues;
330
+ if (typeof clusterRevision === "number") {
331
+ cluster.revision = clusterRevision;
332
+ }
333
+ if (typeof features === "object" && features !== null && !Array.isArray(features)) {
334
+ cluster.features = features;
335
+ }
336
+ if (Array.isArray(attributeList)) {
337
+ cluster.attributes = attributeList.filter((attr) => typeof attr === "number");
338
+ }
339
+ if (Array.isArray(commandList)) {
340
+ cluster.commands = commandList.filter((cmd) => typeof cmd === "number");
341
+ }
324
342
  }
325
343
  if (cluster.revision !== void 0 && cluster.features !== void 0 && cluster.attributes !== void 0 && cluster.commands !== void 0) {
326
- cluster.behavior = (0, import_PeerBehavior.PeerBehavior)(cluster);
327
- endpoint.endpoint.behaviors.require(cluster.behavior);
328
- if (endpoint.endpoint.lifecycle.isInstalled) {
329
- this.#events.emitCluster(endpoint.endpoint, cluster.behavior);
344
+ const behaviorType = (0, import_PeerBehavior.PeerBehavior)(cluster);
345
+ if (endpoint.lifecycle.isInstalled) {
346
+ cluster.pendingBehavior = behaviorType;
347
+ this.#scheduleStructureChange(
348
+ structure,
349
+ endpoint.behaviors.supported[behaviorType.id] ? "rebuild" : "install"
350
+ );
351
+ } else {
352
+ cluster.behavior = behaviorType;
353
+ endpoint.behaviors.inject(behaviorType);
330
354
  }
331
355
  }
332
356
  }
333
357
  if (cluster.id === import_descriptor.Descriptor.Cluster.id) {
334
358
  let attrs;
335
- if (cluster.behavior && endpoint.endpoint.behaviors.isActive(cluster.behavior.id)) {
336
- attrs = endpoint.endpoint.stateOf(cluster.behavior);
359
+ if (cluster.behavior && endpoint.behaviors.isActive(cluster.behavior.id)) {
360
+ attrs = endpoint.stateOf(cluster.behavior);
337
361
  } else {
338
362
  attrs = cluster.store.initialValues ?? {};
339
363
  }
340
- this.#synchronizeDescriptor(endpoint, attrs);
364
+ this.#synchronizeDescriptor(structure, attrs);
341
365
  }
342
366
  }
343
- #synchronizeDescriptor(endpoint, attrs) {
367
+ #synchronizeDescriptor(structure, attrs) {
368
+ const { endpoint } = structure;
344
369
  const deviceTypeList = attrs[DEVICE_TYPE_LIST_ATTR_ID];
345
370
  if (Array.isArray(deviceTypeList)) {
346
- const endpointType = endpoint.endpoint.type;
371
+ const endpointType = endpoint.type;
347
372
  for (const dt of deviceTypeList) {
348
373
  if (typeof dt?.deviceType !== "number") {
349
374
  continue;
@@ -353,7 +378,7 @@ class ClientStructure {
353
378
  if (model !== void 0) {
354
379
  isApp = import_model.DeviceClassification.isApplication(model.classification);
355
380
  }
356
- if (!endpoint.endpoint.number && endpointType.deviceType !== import_root.RootEndpoint.deviceType) {
381
+ if (!endpoint.number && endpointType.deviceType !== import_root.RootEndpoint.deviceType) {
357
382
  endpointType.deviceRevision = dt.revision;
358
383
  break;
359
384
  }
@@ -370,11 +395,21 @@ class ClientStructure {
370
395
  }
371
396
  const serverList = attrs[SERVER_LIST_ATTR_ID];
372
397
  if (Array.isArray(serverList)) {
398
+ const currentlySupported = new Set(
399
+ Object.values(endpoint.behaviors.supported).map((type) => type.cluster?.id).filter((id) => id !== void 0)
400
+ );
373
401
  for (const cluster of serverList) {
374
402
  if (typeof cluster === "number") {
375
- this.#clusterFor(endpoint, cluster);
403
+ this.#clusterFor(structure, cluster);
404
+ currentlySupported.delete(cluster);
376
405
  }
377
406
  }
407
+ if (currentlySupported.size) {
408
+ for (const id of currentlySupported) {
409
+ this.#clusterFor(structure, id).pendingDelete = true;
410
+ }
411
+ this.#scheduleStructureChange(structure, "rebuild");
412
+ }
378
413
  }
379
414
  const partsList = attrs[PARTS_LIST_ATTR_ID];
380
415
  if (!Array.isArray(partsList)) {
@@ -387,7 +422,7 @@ class ClientStructure {
387
422
  const part = this.#endpointFor(partNo);
388
423
  let isAlreadyDescendant = false;
389
424
  for (let owner = this.#ownerOf(part); owner; owner = this.#ownerOf(owner)) {
390
- if (owner === endpoint) {
425
+ if (owner === structure) {
391
426
  isAlreadyDescendant = true;
392
427
  break;
393
428
  }
@@ -395,26 +430,26 @@ class ClientStructure {
395
430
  if (isAlreadyDescendant) {
396
431
  continue;
397
432
  }
398
- part.pendingOwner = endpoint;
399
- this.#pending.set(part, "reparent");
433
+ part.pendingOwner = structure;
434
+ this.#scheduleStructureChange(part, "install");
400
435
  }
401
- if (endpoint.endpoint.maybeNumber === 0) {
436
+ if (endpoint.maybeNumber === 0) {
402
437
  const numbersUsed = new Set(partsList);
403
- for (const descendent of endpoint.endpoint.endpoints) {
438
+ for (const descendent of endpoint.endpoints) {
404
439
  if (!descendent.maybeNumber) {
405
440
  continue;
406
441
  }
407
442
  if (!numbersUsed.has(descendent.number)) {
408
- const endpoint2 = this.#endpoints[descendent.number];
443
+ const endpoint2 = this.#endpoints.get(descendent.number);
409
444
  if (endpoint2) {
410
- this.#pending.set(endpoint2, "erase");
445
+ this.#scheduleStructureChange(endpoint2, "erase");
411
446
  }
412
447
  }
413
448
  }
414
449
  }
415
450
  }
416
451
  #endpointFor(number) {
417
- let endpoint = this.#endpoints[number];
452
+ let endpoint = this.#endpoints.get(number);
418
453
  if (endpoint) {
419
454
  return endpoint;
420
455
  }
@@ -428,22 +463,25 @@ class ClientStructure {
428
463
  deviceRevision: import_EndpointType.EndpointType.UNKNOWN_DEVICE_REVISION
429
464
  })
430
465
  }),
431
- clusters: {}
466
+ clusters: /* @__PURE__ */ new Map()
432
467
  };
433
- this.#endpoints[number] = endpoint;
468
+ this.#endpoints.set(number, endpoint);
434
469
  return endpoint;
435
470
  }
436
471
  #clusterFor(endpoint, id) {
437
- let cluster = endpoint.clusters[id];
472
+ let cluster = endpoint.clusters.get(id);
438
473
  if (cluster) {
439
474
  return cluster;
440
475
  }
441
476
  cluster = {
442
477
  kind: "discovered",
443
478
  id,
444
- store: this.#nodeStore.storeForEndpoint(endpoint.endpoint).createStoreForBehavior(id.toString())
479
+ store: this.#nodeStore.storeForEndpoint(endpoint.endpoint).createStoreForBehavior(id.toString()),
480
+ behavior: void 0,
481
+ pendingBehavior: void 0,
482
+ pendingDelete: void 0
445
483
  };
446
- endpoint.clusters[id] = cluster;
484
+ endpoint.clusters.set(id, cluster);
447
485
  return cluster;
448
486
  }
449
487
  #ownerOf(endpoint) {
@@ -458,14 +496,152 @@ class ClientStructure {
458
496
  return this.#endpointFor(ownerNumber);
459
497
  }
460
498
  }
461
- #install(endpoint) {
462
- const { pendingOwner } = endpoint;
463
- if (!pendingOwner) {
464
- return;
499
+ /**
500
+ * Erase an endpoint that disappeared from the peer.
501
+ */
502
+ async #erase(structure) {
503
+ const { endpoint } = structure;
504
+ logger.debug(
505
+ "Removing endpoint",
506
+ import_general.Diagnostic.strong(endpoint.toString()),
507
+ "because it is no longer present on the peer"
508
+ );
509
+ this.#endpoints.delete(endpoint.number);
510
+ try {
511
+ await endpoint.delete();
512
+ } catch (e) {
513
+ logger.error(`Error erasing peer endpoint ${endpoint}:`, e);
514
+ }
515
+ }
516
+ /**
517
+ * Replace clusters after activation because fixed global attributes have changed.
518
+ *
519
+ * Currently we apply granular updates to clusters. This will possibly result in subtle errors if peers change in
520
+ * incompatible ways, but the backings are designed to be fairly resilient to this. This is simpler for API users
521
+ * to deal with in the common case where they can just ignore. If it becomes problematic we can revert to replacing
522
+ * entire endpoints or behaviors when there are structural changes.
523
+ */
524
+ async #rebuild(structure) {
525
+ const { endpoint, clusters } = structure;
526
+ for (const cluster of clusters.values()) {
527
+ const { behavior, pendingBehavior, pendingDelete } = cluster;
528
+ if (pendingDelete) {
529
+ if (!behavior) {
530
+ continue;
531
+ }
532
+ await endpoint.behaviors.drop(behavior.id);
533
+ try {
534
+ await cluster.store.erase();
535
+ } catch (e) {
536
+ logger.error("Error clearing cluster storage:", e);
537
+ }
538
+ this.#pendingEvents.push({
539
+ kind: "cluster",
540
+ endpoint: structure,
541
+ cluster,
542
+ subkind: "delete"
543
+ });
544
+ continue;
545
+ }
546
+ if (!pendingBehavior) {
547
+ continue;
548
+ }
549
+ const subkind = pendingBehavior.id in endpoint.behaviors.supported ? "replace" : "add";
550
+ endpoint.behaviors.inject(pendingBehavior);
551
+ cluster.behavior = pendingBehavior;
552
+ delete cluster.pendingBehavior;
553
+ this.#pendingEvents.push({
554
+ kind: "cluster",
555
+ subkind,
556
+ endpoint: structure,
557
+ cluster
558
+ });
559
+ }
560
+ }
561
+ /**
562
+ * Install the endpoint and/or new behaviors.
563
+ */
564
+ #install(structure) {
565
+ const { endpoint, pendingOwner, clusters } = structure;
566
+ if (pendingOwner) {
567
+ endpoint.owner = pendingOwner.endpoint;
568
+ structure.pendingOwner = void 0;
569
+ this.#pendingEvents.push({ kind: "endpoint", endpoint: structure });
570
+ }
571
+ for (const cluster of clusters.values()) {
572
+ const { pendingBehavior } = cluster;
573
+ if (!pendingBehavior || endpoint.behaviors.supported[pendingBehavior.id]) {
574
+ continue;
575
+ }
576
+ endpoint.behaviors.inject(pendingBehavior);
577
+ cluster.behavior = pendingBehavior;
578
+ cluster.pendingBehavior = void 0;
579
+ if (!pendingOwner) {
580
+ this.#pendingEvents.push({
581
+ kind: "cluster",
582
+ subkind: "add",
583
+ endpoint: structure,
584
+ cluster
585
+ });
586
+ }
587
+ }
588
+ }
589
+ /**
590
+ * Queue a structural change for processing once a read response is fully processed.
591
+ */
592
+ #scheduleStructureChange(endpoint, kind) {
593
+ const pending = this.#pendingChanges.get(endpoint);
594
+ if (pending) {
595
+ pending[kind] = true;
596
+ } else {
597
+ this.#pendingChanges.set(endpoint, { [kind]: true });
598
+ }
599
+ }
600
+ /**
601
+ * Emit pending events.
602
+ *
603
+ * We do this after all structural updates are complete so that listeners can expect composed parts and dependent
604
+ * behaviors to be installed.
605
+ */
606
+ #emitPendingEvents() {
607
+ const events = this.#pendingEvents;
608
+ this.#pendingEvents = [];
609
+ for (const event of events) {
610
+ switch (event.kind) {
611
+ case "endpoint": {
612
+ const {
613
+ endpoint: { endpoint, clusters }
614
+ } = event;
615
+ this.#events.emitEndpoint(endpoint);
616
+ for (const { behavior } of clusters.values()) {
617
+ if (behavior) {
618
+ this.#events.emitCluster(endpoint, behavior);
619
+ }
620
+ }
621
+ break;
622
+ }
623
+ case "cluster": {
624
+ const {
625
+ endpoint: { endpoint },
626
+ cluster: { behavior }
627
+ } = event;
628
+ if (!behavior) {
629
+ break;
630
+ }
631
+ switch (event.subkind) {
632
+ case "add":
633
+ this.#events.emitCluster(endpoint, behavior);
634
+ break;
635
+ case "delete":
636
+ this.#events.emitClusterDeleted(endpoint, behavior);
637
+ break;
638
+ case "replace":
639
+ this.#events.emitClusterReplaced(endpoint, behavior);
640
+ }
641
+ break;
642
+ }
643
+ }
465
644
  }
466
- endpoint.endpoint.owner = pendingOwner.endpoint;
467
- endpoint.pendingOwner = void 0;
468
- this.#events.emitEndpoint(endpoint.endpoint);
469
645
  }
470
646
  }
471
647
  //# sourceMappingURL=ClientStructure.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/client/ClientStructure.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["id", "endpoint"]
6
6
  }
@@ -3,7 +3,6 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Behavior } from "#behavior/Behavior.js";
7
6
  import { ClusterBehavior } from "#behavior/cluster/ClusterBehavior.js";
8
7
  import { Endpoint } from "#endpoint/Endpoint.js";
9
8
  import { EndpointType } from "#endpoint/type/EndpointType.js";
@@ -16,7 +15,11 @@ export declare class ClientStructureEvents {
16
15
  static [Environmental.create](env: Environment): ClientStructureEvents;
17
16
  endpointInstalled<T extends EndpointType>(type: T): Observable<[endpoint: Endpoint<T>]>;
18
17
  clusterInstalled<T extends ClusterBehavior.Type>(type: T): Observable<[endpoint: Endpoint, type: T]>;
18
+ get clusterReplaced(): Observable<any, void>;
19
+ get clusterDeleted(): Observable<any, void>;
19
20
  emitEndpoint(endpoint: Endpoint): void;
20
- emitCluster(endpoint: Endpoint, type: Behavior.Type): void;
21
+ emitCluster(endpoint: Endpoint, type: ClusterBehavior.Type): void;
22
+ emitClusterReplaced(endpoint: Endpoint, type: ClusterBehavior.Type): void;
23
+ emitClusterDeleted(endpoint: Endpoint, type: ClusterBehavior.Type): void;
21
24
  }
22
25
  //# sourceMappingURL=ClientStructureEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClientStructureEvents.d.ts","sourceRoot":"","sources":["../../../../src/node/client/ClientStructureEvents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGlE;;GAEG;AACH,qBAAa,qBAAqB;;IAU9B,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAM9C,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAavF,gBAAgB,CAAC,CAAC,SAAS,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAsBpG,YAAY,CAAC,QAAQ,EAAE,QAAQ;IAiB/B,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI;CAWtD"}
1
+ {"version":3,"file":"ClientStructureEvents.d.ts","sourceRoot":"","sources":["../../../../src/node/client/ClientStructureEvents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAU,UAAU,EAAE,MAAM,UAAU,CAAC;AAK1E;;GAEG;AACH,qBAAa,qBAAqB;;IAa9B,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAM9C,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAavF,gBAAgB,CAAC,CAAC,SAAS,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAsBpG,IAAI,eAAe,0BAKlB;IAED,IAAI,cAAc,0BAKjB;IAED,YAAY,CAAC,QAAQ,EAAE,QAAQ;IAqB/B,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI;IAa1D,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI;IAQlE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,IAAI;CAepE"}
@@ -28,9 +28,12 @@ var import_general = require("#general");
28
28
  * Copyright 2022-2025 Matter.js Authors
29
29
  * SPDX-License-Identifier: Apache-2.0
30
30
  */
31
+ const logger = import_general.Logger.get("ClientStructureEvents");
31
32
  class ClientStructureEvents {
32
33
  #endpointEvents;
33
34
  #clusterEvents;
35
+ #clusterReplaced;
36
+ #clusterDeleted;
34
37
  static [import_general.Environmental.create](env) {
35
38
  const instance = new ClientStructureEvents();
36
39
  env.set(ClientStructureEvents, instance);
@@ -42,7 +45,7 @@ class ClientStructureEvents {
42
45
  }
43
46
  let event = this.#endpointEvents.get(type.deviceType);
44
47
  if (event === void 0) {
45
- this.#endpointEvents.set(type.deviceType, event = (0, import_general.Observable)());
48
+ this.#endpointEvents.set(type.deviceType, event = this.#createEvent("endpointInstalled"));
46
49
  }
47
50
  return event;
48
51
  }
@@ -59,10 +62,22 @@ class ClientStructureEvents {
59
62
  return event2;
60
63
  }
61
64
  }
62
- const event = (0, import_general.Observable)();
65
+ const event = this.#createEvent("clusterInstalled");
63
66
  events.push({ requestedType: type, event });
64
67
  return event;
65
68
  }
69
+ get clusterReplaced() {
70
+ if (this.#clusterReplaced) {
71
+ return this.#clusterReplaced;
72
+ }
73
+ return this.#clusterReplaced = this.#createEvent("clusterReplaced");
74
+ }
75
+ get clusterDeleted() {
76
+ if (this.#clusterDeleted) {
77
+ return this.#clusterDeleted;
78
+ }
79
+ return this.#clusterDeleted = this.#createEvent("clusterDeleted");
80
+ }
66
81
  emitEndpoint(endpoint) {
67
82
  if (this.#endpointEvents && endpoint.behaviors.supported.descriptor) {
68
83
  const deviceTypes = endpoint.stateOf(import_descriptor.DescriptorClient).deviceTypeList;
@@ -71,6 +86,9 @@ class ClientStructureEvents {
71
86
  }
72
87
  }
73
88
  for (const type of Object.values(endpoint.behaviors.supported)) {
89
+ if (!("cluster" in type)) {
90
+ continue;
91
+ }
74
92
  this.emitCluster(endpoint, type);
75
93
  }
76
94
  for (const part of endpoint.parts) {
@@ -88,5 +106,23 @@ class ClientStructureEvents {
88
106
  }
89
107
  }
90
108
  }
109
+ emitClusterReplaced(endpoint, type) {
110
+ if (!this.#clusterReplaced) {
111
+ return;
112
+ }
113
+ this.#clusterReplaced.emit(endpoint, type);
114
+ }
115
+ emitClusterDeleted(endpoint, type) {
116
+ if (!this.#clusterDeleted) {
117
+ return;
118
+ }
119
+ this.#clusterDeleted.emit(endpoint, type);
120
+ }
121
+ #createEvent(kind) {
122
+ return (0, import_general.Observable)(unhandledError);
123
+ function unhandledError(e) {
124
+ logger.error(`Unhandled error in client structure ${kind} event handler:`, e);
125
+ }
126
+ }
91
127
  }
92
128
  //# sourceMappingURL=ClientStructureEvents.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/client/ClientStructureEvents.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,wBAAiC;AAGjC,qBAAuD;AAXvD;AAAA;AAAA;AAAA;AAAA;AAiBO,MAAM,sBAAsB;AAAA,EAC/B;AAAA,EACA;AAAA,EAQA,QAAQ,6BAAc,MAAM,EAAE,KAAkB;AAC5C,UAAM,WAAW,IAAI,sBAAsB;AAC3C,QAAI,IAAI,uBAAuB,QAAQ;AACvC,WAAO;AAAA,EACX;AAAA,EAEA,kBAA0C,MAA8C;AACpF,QAAI,KAAK,oBAAoB,QAAW;AACpC,WAAK,kBAAkB,oBAAI,IAAI;AAAA,IACnC;AAEA,QAAI,QAAQ,KAAK,gBAAgB,IAAI,KAAK,UAAU;AACpD,QAAI,UAAU,QAAW;AACrB,WAAK,gBAAgB,IAAI,KAAK,YAAa,YAAQ,2BAAW,CAAE;AAAA,IACpE;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,iBAAiD,MAAoD;AACjG,QAAI,KAAK,mBAAmB,QAAW;AACnC,WAAK,iBAAiB,oBAAI,IAAI;AAAA,IAClC;AAEA,QAAI,SAAS,KAAK,eAAe,IAAI,KAAK,EAAE;AAC5C,QAAI,WAAW,QAAW;AACtB,WAAK,eAAe,IAAI,KAAK,IAAK,SAAS,CAAC,CAAE;AAAA,IAClD;AAEA,eAAW,EAAE,eAAe,OAAAA,OAAM,KAAK,QAAQ;AAC3C,UAAI,cAAc,SAAS,IAAI,GAAG;AAC9B,eAAOA;AAAA,MACX;AAAA,IACJ;AAEA,UAAM,YAAQ,2BAAW;AACzB,WAAO,KAAK,EAAE,eAAe,MAAM,MAAM,CAAC;AAE1C,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,UAAoB;AAC7B,QAAI,KAAK,mBAAmB,SAAS,UAAU,UAAU,YAAY;AACjE,YAAM,cAAc,SAAS,QAAQ,kCAAgB,EAAE;AACvD,iBAAW,MAAM,aAAa;AAC1B,aAAK,gBAAgB,IAAI,GAAG,UAAU,GAAG,KAAK,QAAQ;AAAA,MAC1D;AAAA,IACJ;AAEA,eAAW,QAAQ,OAAO,OAAO,SAAS,UAAU,SAAS,GAAG;AAC5D,WAAK,YAAY,UAAU,IAAI;AAAA,IACnC;AAEA,eAAW,QAAQ,SAAS,OAAO;AAC/B,WAAK,aAAa,IAAI;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEA,YAAY,UAAoB,MAAqB;AACjD,UAAM,SAAS,KAAK,gBAAgB,IAAI,KAAK,EAAE;AAC/C,QAAI,CAAC,QAAQ;AACT;AAAA,IACJ;AACA,eAAW,EAAE,eAAe,MAAM,KAAK,QAAQ;AAC3C,UAAI,KAAK,SAAS,aAAa,GAAG;AAC9B,cAAM,KAAK,UAAU,IAAI;AAAA,MAC7B;AAAA,IACJ;AAAA,EACJ;AACJ;",
4
+ "mappings": "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",
5
5
  "names": ["event"]
6
6
  }
@@ -54,6 +54,9 @@ export declare class Peers extends EndpointContainer<ClientNode> {
54
54
  * This is useful for initializing general behavior on any peer endpoint with the specified cluster.
55
55
  */
56
56
  clusterInstalled<T extends ClusterBehavior.Type>(type: T): Observable<[endpoint: Endpoint<EndpointType.Empty>, type: T], void>;
57
+ /**
58
+ * Emits when fixed attributes
59
+ */
57
60
  get(id: number | string | PeerAddress): ClientNode | undefined;
58
61
  get owner(): ServerNode;
59
62
  add(node: ClientNode): void;