@matter/node 0.16.0-alpha.0-20251115-d89e62680 → 0.16.0-alpha.0-20251129-96ad07c6e

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 (166) hide show
  1. package/dist/cjs/behavior/Events.js +1 -1
  2. package/dist/cjs/behavior/cluster/ClientBehavior.d.ts +1 -1
  3. package/dist/cjs/behavior/cluster/ClusterBehavior.d.ts +1 -1
  4. package/dist/cjs/behavior/cluster/ClusterBehaviorType.d.ts +1 -1
  5. package/dist/cjs/behavior/cluster/ClusterBehaviorType.js +3 -3
  6. package/dist/cjs/behavior/cluster/ClusterBehaviorType.js.map +1 -1
  7. package/dist/cjs/behavior/state/validation/ValueValidator.js +14 -4
  8. package/dist/cjs/behavior/state/validation/ValueValidator.js.map +1 -1
  9. package/dist/cjs/behavior/state/validation/assertions.d.ts.map +1 -1
  10. package/dist/cjs/behavior/state/validation/assertions.js +21 -0
  11. package/dist/cjs/behavior/state/validation/assertions.js.map +1 -1
  12. package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  13. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +1 -3
  14. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  15. package/dist/cjs/behavior/system/controller/ControllerBehavior.d.ts +2 -0
  16. package/dist/cjs/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
  17. package/dist/cjs/behavior/system/controller/ControllerBehavior.js +5 -2
  18. package/dist/cjs/behavior/system/controller/ControllerBehavior.js.map +1 -1
  19. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.d.ts +1 -0
  20. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  21. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js +8 -2
  22. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
  23. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
  24. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +88 -34
  25. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
  26. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
  27. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js +15 -2
  28. package/dist/cjs/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
  29. package/dist/cjs/behaviors/identify/IdentifyServer.d.ts.map +1 -1
  30. package/dist/cjs/behaviors/identify/IdentifyServer.js +5 -0
  31. package/dist/cjs/behaviors/identify/IdentifyServer.js.map +1 -1
  32. package/dist/cjs/behaviors/service-area/ServiceAreaServer.js +1 -1
  33. package/dist/cjs/behaviors/switch/SwitchServer.js +2 -2
  34. package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts +10 -0
  35. package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
  36. package/dist/cjs/behaviors/thermostat/ThermostatServer.js +59 -22
  37. package/dist/cjs/behaviors/thermostat/ThermostatServer.js.map +1 -1
  38. package/dist/cjs/endpoint/Endpoint.d.ts +2 -2
  39. package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
  40. package/dist/cjs/endpoint/properties/Endpoints.d.ts +2 -2
  41. package/dist/cjs/endpoint/properties/Endpoints.d.ts.map +1 -1
  42. package/dist/cjs/endpoint/properties/Endpoints.js +12 -1
  43. package/dist/cjs/endpoint/properties/Endpoints.js.map +1 -1
  44. package/dist/cjs/node/ClientNode.d.ts +7 -2
  45. package/dist/cjs/node/ClientNode.d.ts.map +1 -1
  46. package/dist/cjs/node/ClientNode.js +10 -3
  47. package/dist/cjs/node/ClientNode.js.map +1 -1
  48. package/dist/cjs/node/Node.d.ts.map +1 -1
  49. package/dist/cjs/node/Node.js +9 -3
  50. package/dist/cjs/node/Node.js.map +1 -1
  51. package/dist/cjs/node/NodeLifecycle.d.ts +1 -1
  52. package/dist/cjs/node/NodeLifecycle.js +1 -1
  53. package/dist/cjs/node/ServerNode.d.ts.map +1 -1
  54. package/dist/cjs/node/ServerNode.js +11 -4
  55. package/dist/cjs/node/ServerNode.js.map +1 -1
  56. package/dist/cjs/node/client/ClientEndpointInitializer.js +1 -1
  57. package/dist/cjs/node/client/ClientEndpointInitializer.js.map +1 -1
  58. package/dist/cjs/node/client/ClientEventEmitter.d.ts.map +1 -1
  59. package/dist/cjs/node/client/ClientEventEmitter.js +8 -3
  60. package/dist/cjs/node/client/ClientEventEmitter.js.map +1 -1
  61. package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
  62. package/dist/cjs/node/client/ClientStructure.js +80 -96
  63. package/dist/cjs/node/client/ClientStructure.js.map +1 -1
  64. package/dist/cjs/node/client/Peers.d.ts.map +1 -1
  65. package/dist/cjs/node/client/Peers.js +22 -4
  66. package/dist/cjs/node/client/Peers.js.map +1 -1
  67. package/dist/cjs/node/server/ServerEnvironment.d.ts.map +1 -1
  68. package/dist/cjs/node/server/ServerEnvironment.js +0 -3
  69. package/dist/cjs/node/server/ServerEnvironment.js.map +1 -1
  70. package/dist/esm/behavior/Events.js +1 -1
  71. package/dist/esm/behavior/cluster/ClientBehavior.d.ts +1 -1
  72. package/dist/esm/behavior/cluster/ClusterBehavior.d.ts +1 -1
  73. package/dist/esm/behavior/cluster/ClusterBehaviorType.d.ts +1 -1
  74. package/dist/esm/behavior/cluster/ClusterBehaviorType.js +3 -3
  75. package/dist/esm/behavior/cluster/ClusterBehaviorType.js.map +1 -1
  76. package/dist/esm/behavior/state/validation/ValueValidator.js +14 -4
  77. package/dist/esm/behavior/state/validation/ValueValidator.js.map +1 -1
  78. package/dist/esm/behavior/state/validation/assertions.d.ts.map +1 -1
  79. package/dist/esm/behavior/state/validation/assertions.js +22 -1
  80. package/dist/esm/behavior/state/validation/assertions.js.map +1 -1
  81. package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  82. package/dist/esm/behavior/system/commissioning/CommissioningClient.js +1 -3
  83. package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  84. package/dist/esm/behavior/system/controller/ControllerBehavior.d.ts +2 -0
  85. package/dist/esm/behavior/system/controller/ControllerBehavior.d.ts.map +1 -1
  86. package/dist/esm/behavior/system/controller/ControllerBehavior.js +5 -2
  87. package/dist/esm/behavior/system/controller/ControllerBehavior.js.map +1 -1
  88. package/dist/esm/behavior/system/network/ServerNetworkRuntime.d.ts +1 -0
  89. package/dist/esm/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  90. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js +8 -2
  91. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
  92. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
  93. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +88 -34
  94. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
  95. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.d.ts.map +1 -1
  96. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js +16 -3
  97. package/dist/esm/behaviors/group-key-management/GroupKeyManagementServer.js.map +1 -1
  98. package/dist/esm/behaviors/identify/IdentifyServer.d.ts.map +1 -1
  99. package/dist/esm/behaviors/identify/IdentifyServer.js +5 -0
  100. package/dist/esm/behaviors/identify/IdentifyServer.js.map +1 -1
  101. package/dist/esm/behaviors/service-area/ServiceAreaServer.js +1 -1
  102. package/dist/esm/behaviors/switch/SwitchServer.js +2 -2
  103. package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts +10 -0
  104. package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
  105. package/dist/esm/behaviors/thermostat/ThermostatServer.js +59 -22
  106. package/dist/esm/behaviors/thermostat/ThermostatServer.js.map +1 -1
  107. package/dist/esm/endpoint/Endpoint.d.ts +2 -2
  108. package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
  109. package/dist/esm/endpoint/properties/Endpoints.d.ts +2 -2
  110. package/dist/esm/endpoint/properties/Endpoints.d.ts.map +1 -1
  111. package/dist/esm/endpoint/properties/Endpoints.js +12 -1
  112. package/dist/esm/endpoint/properties/Endpoints.js.map +1 -1
  113. package/dist/esm/node/ClientNode.d.ts +7 -2
  114. package/dist/esm/node/ClientNode.d.ts.map +1 -1
  115. package/dist/esm/node/ClientNode.js +10 -3
  116. package/dist/esm/node/ClientNode.js.map +1 -1
  117. package/dist/esm/node/Node.d.ts.map +1 -1
  118. package/dist/esm/node/Node.js +9 -3
  119. package/dist/esm/node/Node.js.map +1 -1
  120. package/dist/esm/node/NodeLifecycle.d.ts +1 -1
  121. package/dist/esm/node/NodeLifecycle.js +1 -1
  122. package/dist/esm/node/ServerNode.d.ts.map +1 -1
  123. package/dist/esm/node/ServerNode.js +11 -4
  124. package/dist/esm/node/ServerNode.js.map +1 -1
  125. package/dist/esm/node/client/ClientEndpointInitializer.js +1 -1
  126. package/dist/esm/node/client/ClientEndpointInitializer.js.map +1 -1
  127. package/dist/esm/node/client/ClientEventEmitter.d.ts.map +1 -1
  128. package/dist/esm/node/client/ClientEventEmitter.js +9 -4
  129. package/dist/esm/node/client/ClientEventEmitter.js.map +1 -1
  130. package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
  131. package/dist/esm/node/client/ClientStructure.js +80 -96
  132. package/dist/esm/node/client/ClientStructure.js.map +1 -1
  133. package/dist/esm/node/client/Peers.d.ts.map +1 -1
  134. package/dist/esm/node/client/Peers.js +24 -5
  135. package/dist/esm/node/client/Peers.js.map +1 -1
  136. package/dist/esm/node/server/ServerEnvironment.d.ts.map +1 -1
  137. package/dist/esm/node/server/ServerEnvironment.js +1 -4
  138. package/dist/esm/node/server/ServerEnvironment.js.map +1 -1
  139. package/package.json +7 -7
  140. package/src/behavior/Events.ts +1 -1
  141. package/src/behavior/cluster/ClientBehavior.ts +1 -1
  142. package/src/behavior/cluster/ClusterBehavior.ts +1 -1
  143. package/src/behavior/cluster/ClusterBehaviorType.ts +4 -5
  144. package/src/behavior/cluster/ValidatedElements.ts +1 -1
  145. package/src/behavior/state/validation/ValueValidator.ts +16 -4
  146. package/src/behavior/state/validation/assertions.ts +27 -1
  147. package/src/behavior/system/commissioning/CommissioningClient.ts +2 -4
  148. package/src/behavior/system/controller/ControllerBehavior.ts +8 -3
  149. package/src/behavior/system/network/ServerNetworkRuntime.ts +11 -2
  150. package/src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts +2 -1
  151. package/src/behaviors/group-key-management/GroupKeyManagementServer.ts +19 -3
  152. package/src/behaviors/identify/IdentifyServer.ts +9 -0
  153. package/src/behaviors/service-area/ServiceAreaServer.ts +1 -1
  154. package/src/behaviors/switch/SwitchServer.ts +2 -2
  155. package/src/behaviors/thermostat/ThermostatServer.ts +65 -22
  156. package/src/endpoint/Endpoint.ts +2 -2
  157. package/src/endpoint/properties/Endpoints.ts +16 -3
  158. package/src/node/ClientNode.ts +11 -4
  159. package/src/node/Node.ts +10 -3
  160. package/src/node/NodeLifecycle.ts +1 -1
  161. package/src/node/ServerNode.ts +12 -4
  162. package/src/node/client/ClientEndpointInitializer.ts +1 -1
  163. package/src/node/client/ClientEventEmitter.ts +9 -4
  164. package/src/node/client/ClientStructure.ts +67 -22
  165. package/src/node/client/Peers.ts +31 -4
  166. package/src/node/server/ServerEnvironment.ts +1 -6
@@ -20,7 +20,8 @@ import {
20
20
  Mutex,
21
21
  Seconds,
22
22
  Time,
23
- Timestamp
23
+ Timestamp,
24
+ UninitializedDependencyError
24
25
  } from "#general";
25
26
  import { ClientGroup } from "#node/ClientGroup.js";
26
27
  import { InteractionServer } from "#node/server/InteractionServer.js";
@@ -46,13 +47,22 @@ class Peers extends EndpointContainer {
46
47
  this.added.on(this.#handlePeerAdded.bind(this));
47
48
  this.deleted.on(this.#manageExpiration.bind(this));
48
49
  this.clusterInstalled(BasicInformationClient).on(this.#instrumentBasicInformation.bind(this));
50
+ const lifecycle = owner.lifecycle;
51
+ lifecycle.online.on(this.#nodeOnline.bind(this));
52
+ lifecycle.offline.on(this.#nodeOffline.bind(this));
49
53
  }
50
54
  /**
51
55
  * Load nodes. Invoked automatically by owner.
52
56
  */
53
57
  initialize() {
54
58
  const factory = this.owner.env.get(ClientNodeFactory);
55
- const clientStores = this.owner.env.get(ServerNodeStore).clientStores;
59
+ const clientStores = this.owner.env.maybeGet(ServerNodeStore)?.clientStores;
60
+ if (clientStores === void 0) {
61
+ throw new UninitializedDependencyError(
62
+ "Peers",
63
+ "are not available because ServerNode initialization is incomplete"
64
+ );
65
+ }
56
66
  for (const id of clientStores.knownIds) {
57
67
  this.add(
58
68
  factory.create({
@@ -62,6 +72,15 @@ class Peers extends EndpointContainer {
62
72
  );
63
73
  }
64
74
  }
75
+ async #nodeOnline() {
76
+ this.#manageExpiration();
77
+ }
78
+ async #nodeOffline() {
79
+ this.#cancelExpiration();
80
+ for (const peer of this) {
81
+ await peer.cancel();
82
+ }
83
+ }
65
84
  /**
66
85
  * Find a specific commissionable node.
67
86
  */
@@ -255,12 +274,12 @@ class Peers extends EndpointContainer {
255
274
  }
256
275
  #onLeave(node, fabricIndex) {
257
276
  this.#mutex.run(async () => {
258
- const { fabrics: peerFabrics } = node.maybeStateOf(OperationalCredentialsClient);
259
- const peerFabric = peerFabrics.find((fabric) => fabric.fabricIndex === fabricIndex);
277
+ const { fabrics: peerFabrics } = node.maybeStateOf(OperationalCredentialsClient) ?? {};
278
+ const peerFabric = peerFabrics?.find((fabric) => fabric.fabricIndex === fabricIndex);
260
279
  if (!peerFabric) {
261
280
  return;
262
281
  }
263
- const peerAddress = node.maybeStateOf(CommissioningClient).peerAddress;
282
+ const peerAddress = node.maybeStateOf(CommissioningClient)?.peerAddress;
264
283
  if (!peerAddress) {
265
284
  return;
266
285
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/client/Peers.ts"],
4
- "mappings": "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",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,yBAAyB;AAClC,SAAS,2BAA2B;AACpC,SAAS,wBAAwB;AACjC,SAAS,8BAA8B;AACvC,SAAS,2BAA2B;AAEpC,SAAS,yBAAyB;AAClC,SAAS,8BAA8B;AACvC,SAAS,oCAAoC;AAE7C,SAAS,yBAAyB;AAElC;AAAA,EAEI;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,SAAS,2BAA2B,qBAAqB,eAAe,mBAAmB;AAC3F,SAAS,uBAAuB;AAEhC,SAAS,kBAAkB;AAE3B,SAAS,yBAAyB;AAClC,SAAS,6BAA6B;AAEtC,MAAM,SAAS,OAAO,IAAI,OAAO;AAEjC,MAAM,cAAc,QAAQ,EAAE;AAC9B,MAAM,sBAAsB,QAAQ;AAO7B,MAAM,cAAc,kBAA8B;AAAA,EACrD;AAAA,EACA;AAAA,EACA,SAAS,IAAI,MAAM,IAAI;AAAA,EACvB,UAAU;AAAA,EAEV,YAAY,OAAmB;AAC3B,UAAM,KAAK;AAEX,QAAI,CAAC,MAAM,IAAI,IAAI,iBAAiB,GAAG;AACnC,YAAM,IAAI,IAAI,mBAAmB,IAAI,QAAQ,IAAI,CAAC;AAAA,IACtD;AAEA,UAAM,IAAI,QAAQ,mBAAmB,KAAK,4BAA4B,KAAK,IAAI,CAAC;AAEhF,SAAK,MAAM,GAAG,KAAK,iBAAiB,KAAK,IAAI,CAAC;AAC9C,SAAK,QAAQ,GAAG,KAAK,kBAAkB,KAAK,IAAI,CAAC;AAEjD,SAAK,iBAAiB,sBAAsB,EAAE,GAAG,KAAK,4BAA4B,KAAK,IAAI,CAAC;AAE5F,UAAM,YAAY,MAAM;AACxB,cAAU,OAAO,GAAG,KAAK,YAAY,KAAK,IAAI,CAAC;AAC/C,cAAU,QAAQ,GAAG,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa;AACT,UAAM,UAAU,KAAK,MAAM,IAAI,IAAI,iBAAiB;AAEpD,UAAM,eAAe,KAAK,MAAM,IAAI,SAAS,eAAe,GAAG;AAC/D,QAAI,iBAAiB,QAAW;AAC5B,YAAM,IAAI;AAAA,QACN;AAAA,QACA;AAAA,MACJ;AAAA,IACJ;AAGA,eAAW,MAAM,aAAa,UAAU;AACpC,WAAK;AAAA,QACD,QAAQ,OAAO;AAAA,UACX;AAAA,UACA,OAAO,KAAK;AAAA,QAChB,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc;AAKhB,SAAK,kBAAkB;AAAA,EAC3B;AAAA,EAEA,MAAM,eAAe;AACjB,SAAK,kBAAkB;AACvB,eAAW,QAAQ,MAAM;AACrB,YAAM,KAAK,OAAO;AAAA,IACtB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,SAA6B;AAChC,WAAO,IAAI,kBAAkB,KAAK,OAAO,OAAO;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,SAA6B;AAClC,WAAO,IAAI,oBAAoB,KAAK,OAAO,OAAO;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,SAAyC;AAChD,WAAO,IAAI,uBAAuB,KAAK,OAAO,OAAO;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAA0C,MAA8C;AACpF,WAAO,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,kBAAkB,IAAI;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiD,MAAS;AACtD,WAAO,KAAK,MAAM,IAAI,IAAI,qBAAqB,EAAE,iBAAiB,IAAI;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA,EAMS,IAAI,IAAmC;AAC5C,QAAI,OAAO,OAAO,YAAY,OAAO,OAAO,UAAU;AAClD,YAAM,UAAU,YAAY,EAAE;AAC9B,iBAAW,QAAQ,MAAM;AACrB,cAAM,cAAc,KAAK,MAAM,cAAc;AAC7C,YAAI,eAAe,YAAY,GAAG,aAAa,OAAO,GAAG;AACrD,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAEA,WAAO,MAAM,IAAI,EAAE;AAAA,EACvB;AAAA,EAEA,IAAa,QAAQ;AACjB,WAAO,MAAM;AAAA,EACjB;AAAA,EAES,IAAI,MAAkB;AAC3B,SAAK,QAAQ,KAAK;AAElB,UAAM,IAAI,IAAI;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAW,aAA0B,UAA6C,CAAC,GAAG;AACxF,QAAI,CAAC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,IAAI,WAAW,GAAG;AACrD,YAAM,IAAI,oBAAoB,iEAAiE;AAAA,IACnG;AAEA,QAAI,OAAO,KAAK,IAAI,WAAW;AAC/B,QAAI,CAAC,MAAM;AAEP,YAAM,UAAU,KAAK,MAAM,IAAI,IAAI,iBAAiB;AACpD,aAAO,QAAQ,OAAO,SAAS,WAAW;AAC1C,YAAM,KAAK;AACX,WAAK,IAAI,IAAI;AAIb,YAAM,KAAK,IAAI;AAAA,QACX,eAAe,EAAE,aAAa,YAAY,WAAW,EAAE;AAAA,MAC3D,CAAC;AAAA,IACL;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAe,QAAQ;AACnB,SAAK,UAAU;AACf,UAAM,KAAK,sBAAsB,MAAM;AACvC,SAAK,kBAAkB;AACvB,UAAM,KAAK;AACX,UAAM,MAAM,MAAM;AAAA,EACtB;AAAA,EAEA,oBAAoB;AAChB,QAAI,KAAK,qBAAqB;AAC1B,WAAK,oBAAoB,OAAO;AAChC,WAAK,sBAAsB;AAAA,IAC/B;AAAA,EACJ;AAAA,EAEA,mBAAmB;AACf,QAAI,KAAK,MAAM,IAAI,IAAI,iBAAiB,GAAG;AACvC,WAAK,4BAA4B;AAAA,IACrC;AACA,SAAK,kBAAkB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,8BAA8B;AAC1B,QAAI,KAAK,WAAW,KAAK,OAAO,KAAK,CAAC,KAAK,MAAM,IAAI,IAAI,iBAAiB,GAAG;AACzE;AAAA,IACJ;AAEA,UAAM,gBAAgB,KAAK,MAAM,IAAI,IAAI,mBAAmB;AAC5D,UAAM,oBAAoB,KAAK,MAAM,IAAI,IAAI,iBAAiB;AAE9D,QAAI,CAAC,KAAK,sBAAsB;AAC5B,WAAK,uBAAuB,IAAI,0BAA0B,aAAa;AAAA,IAC3E;AAEA,sBAAkB,gBAAgB,KAAK;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB;AAChB,QAAI,KAAK,SAAS;AACd;AAAA,IACJ;AAEA,QAAI,KAAK,qBAAqB;AAC1B,UAAI,CAAC,KAAK,MAAM;AACZ,aAAK,kBAAkB;AAAA,MAC3B;AACA;AAAA,IACJ;AAEA,QAAI,CAAC,KAAK,MAAM;AACZ;AAAA,IACJ;AAEA,SAAK,sBAAsB,KAAK,MAAM,0BAA0B,mBAAmB,EAAE;AAAA,MACjF,KAAK,6BAA6B,KAAK,IAAI;AAAA,IAC/C;AAAA,EACJ;AAAA,EAEA,+BAA+B;AAC3B,SAAK,OAAO;AAAA,MAAI,MACZ,KAAK,8BAA8B,EAC9B,MAAM,WAAS;AACZ,eAAO,MAAM,+BAA+B,KAAK;AAAA,MACrD,CAAC,EACA,QAAQ,MAAM;AACX,aAAK,kBAAkB;AAAA,MAC3B,CAAC;AAAA,IACT;AAAA,EACJ;AAAA,EAEA,MAAM,gCAAgC;AAClC,QAAI;AACA,YAAM,MAAM,KAAK;AAEjB,iBAAW,QAAQ,MAAM;AACrB,cAAM,QAAQ,KAAK,MAAM;AACzB,cAAM,EAAE,UAAU,IAAI;AACtB,cAAM,iBAAiB,MAAM,gBAAgB;AAG7C,YAAI,cAAc,UAAc,kBAAkB,UAAU,WAAW,GAAI;AACvE;AAAA,QACJ;AAGA,YAAI,eAAe,UAAU,OAAO,UAAQ;AACxC,gBAAM,MAAM,aAAa,IAAI;AAC7B,cAAI,QAAQ,QAAW;AACnB,mBAAO;AAAA,UACX;AAEA,iBAAO,MAAM;AAAA,QACjB,CAAC;AAGD,YAAI,CAAC,gBAAgB;AACjB,cAAI,CAAC,cAAc,WAAW,aAAa,KAAK,KAAK,MAAM,KAAK;AAC5D,kBAAM,KAAK,OAAO;AAClB;AAAA,UACJ;AAAA,QACJ;AAGA,YAAI,kBAAkB,UAAU,UAAU,CAAC,aAAa,QAAQ;AAC5D,cAAI,UAAU,WAAW,GAAG;AACxB;AAAA,UACJ;AACA,gBAAM,cAAc,UAAU,OAAO,CAACA,cAAa,SAAS;AACxD,mBAAO,KAAK,IAAIA,cAAa,aAAa,IAAI,CAAE;AAAA,UACpD,GAAG,CAAC;AAEJ,yBAAe,UAAU,OAAO,UAAQ,aAAa,IAAI,MAAM,WAAW;AAAA,QAC9E;AAGA,YAAI,UAAU,WAAW,aAAa,QAAQ;AAC1C,gBAAM,KAAK,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC;AAAA,QACnD;AAAA,MACJ;AAAA,IACJ,UAAE;AACE,WAAK,sBAAsB;AAAA,IAC/B;AAAA,EACJ;AAAA,EAEA,4BAA4B,MAAgB,MAAqC;AAC7E,QAAI,EAAE,gBAAgB,aAAa;AAC/B;AAAA,IACJ;AAEA,SAAK,SAAS,IAAI,EAAE,OAAO,GAAG,CAAC,EAAE,YAAY,MAAM,KAAK,SAAS,MAAM,WAAW,CAAC;AACnF,SAAK,SAAS,IAAI,EAAE,UAAU,GAAG,MAAM,KAAK,YAAY,IAAI,CAAC;AAAA,EACjE;AAAA,EAEA,SAAS,MAAkB,aAA0B;AACjD,SAAK,OAAO,IAAI,YAAY;AACxB,YAAM,EAAE,SAAS,YAAY,IAAI,KAAK,aAAa,4BAA4B,KAAK,CAAC;AACrF,YAAM,aAAa,aAAa,KAAK,YAAU,OAAO,gBAAgB,WAAW;AACjF,UAAI,CAAC,YAAY;AACb;AAAA,MACJ;AAEA,YAAM,cAAc,KAAK,aAAa,mBAAmB,GAAG;AAC5D,UAAI,CAAC,aAAa;AACd;AAAA,MACJ;AAEA,YAAM,eAAe,KAAK,MAAM,IAAI,IAAI,aAAa;AACrD,YAAM,cAAc,aAAa,cAAc,UAAU;AACzD,UAAI,CAAC,eAAe,YAAY,gBAAgB,YAAY,aAAa;AACrE;AAAA,MACJ;AAEA,aAAO,OAAO,QAAQ,WAAW,OAAO,KAAK,EAAE,GAAG,qBAAqB;AACvE,WAAK,UAAU,eAAe,KAAK,kBAAkB,QAAQ;AAC7D,YAAM,KAAK,OAAO;AAAA,IACtB,CAAC;AAAA,EACL;AAAA,EAEA,YAAY,OAAmB;AAAA,EAE/B;AACJ;AAEA,MAAM,gBAAgB,kBAAkB;AAAA,EACpC;AAAA,EACA,kBAAkB;AAAA,EAElB,YAAY,OAAc;AACtB,UAAM;AACN,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,OAAO,SAA6B,aAA2B;AAC3D,QAAI;AACJ,QAAI,gBAAgB,UAAa,YAAY,QAAQ,WAAW,GAAG;AAC/D,UAAI,QAAQ,OAAO,QAAW;AAC1B,gBAAQ,KAAK,QAAQ,EAAE,KAAK,eAAe;AAAA,MAC/C;AACA,aAAO,IAAI,YAAY;AAAA,QACnB,GAAG;AAAA,QACH,OAAO,KAAK,OAAO;AAAA,MACvB,CAAC;AAAA,IACL,OAAO;AACH,UAAI,QAAQ,OAAO,QAAW;AAC1B,gBAAQ,KAAK,KAAK,OAAO,MAAM,IAAI,IAAI,eAAe,EAAE,aAAa,WAAW;AAAA,MACpF;AACA,aAAO,IAAI,WAAW;AAAA,QAClB,GAAG;AAAA,QACH,OAAO,KAAK,OAAO;AAAA,MACvB,CAAC;AAAA,IACL;AAEA,SAAK,aAAa,MAAM;AACxB,WAAO;AAAA,EACX;AAAA,EAEA,KAAK,YAA8B;AAC/B,eAAW,QAAQ,KAAK,QAAQ;AAC5B,UAAI,iBAAiB,GAAG,KAAK,MAAM,eAAe,UAAU,GAAG;AAC3D,eAAO;AAAA,MACX;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAI,QAAQ;AACR,WAAO,KAAK;AAAA,EAChB;AACJ;AAEA,SAAS,aACL,UACyE;AACzE,MAAI,SAAS,iBAAiB,QAAW;AACrC,WAAO,UAAU,SAAS,gBAAgB,QAAQ,SAAS,GAAG,KAAK,YAAY;AAAA,EACnF;AACA,SAAO;AACX;",
5
5
  "names": ["freshestExp"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ServerEnvironment.d.ts","sourceRoot":"","sources":["../../../../src/node/server/ServerEnvironment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAU,UAAU,EAAE,MAAM,UAAU,CAAC;AAI9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD;;GAEG;AACH,yBAAiB,iBAAiB,CAAC;IAC/B,sGAAsG;IAC/F,MAAM,yBAAyB,yBAAe,CAAC;IAEtD,SAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,iBA+BhD;IAED,SAAsB,KAAK,CAAC,IAAI,EAAE,UAAU,iBAa3C;CACJ"}
1
+ {"version":3,"file":"ServerEnvironment.d.ts","sourceRoot":"","sources":["../../../../src/node/server/ServerEnvironment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAU,UAAU,EAAE,MAAM,UAAU,CAAC;AAI9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD;;GAEG;AACH,yBAAiB,iBAAiB,CAAC;IAC/B,sGAAsG;IAC/F,MAAM,yBAAyB,yBAAe,CAAC;IAEtD,SAAsB,UAAU,CAAC,IAAI,EAAE,UAAU,iBA+BhD;IAED,SAAsB,KAAK,CAAC,IAAI,EAAE,UAAU,iBAQ3C;CACJ"}
@@ -9,7 +9,7 @@ import { Crypto, Observable } from "#general";
9
9
  import { NodePeerAddressStore } from "#node/client/NodePeerAddressStore.js";
10
10
  import { ChangeNotificationService } from "#node/integration/ChangeNotificationService.js";
11
11
  import { ServerEndpointInitializer } from "#node/server/ServerEndpointInitializer.js";
12
- import { FabricManager, MdnsService, OccurrenceManager, PeerAddressStore, SessionManager } from "#protocol";
12
+ import { FabricManager, OccurrenceManager, PeerAddressStore, SessionManager } from "#protocol";
13
13
  import { ServerNodeStore } from "#storage/server/ServerNodeStore.js";
14
14
  import { IdentityService } from "./IdentityService.js";
15
15
  var ServerEnvironment;
@@ -46,9 +46,6 @@ var ServerEnvironment;
46
46
  await env.close(SessionManager);
47
47
  await env.close(OccurrenceManager);
48
48
  await env.close(ServerNodeStore);
49
- if (env.owns(MdnsService)) {
50
- await env.close(MdnsService);
51
- }
52
49
  }
53
50
  ServerEnvironment2.close = close;
54
51
  })(ServerEnvironment || (ServerEnvironment = {}));
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/node/server/ServerEnvironment.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,qCAAqC;AAC9C,SAAS,2BAA2B;AACpC,SAAS,QAAQ,kBAAkB;AACnC,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAC1C,SAAS,iCAAiC;AAE1C,SAAS,eAAe,aAAa,mBAAmB,kBAAkB,sBAAsB;AAChG,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAKzB,IAAU;AAAA,CAAV,CAAUA,uBAAV;AAEI,EAAMA,mBAAA,4BAA4B,WAAW;AAEpD,iBAAsB,WAAW,MAAkB;AAC/C,UAAM,EAAE,IAAI,IAAI;AAGhB,QAAI,CAAC,IAAI,IAAI,eAAe,GAAG;AAE3B,YAAM,QAAQ,MAAM,gBAAgB,OAAO,KAAK,KAAK,EAAE;AACvD,UAAI,IAAI,iBAAiB,KAAK;AAAA,IAClC;AACA,QAAI,IAAI,qBAAqB,IAAI,0BAA0B,GAAG,CAAC;AAC/D,QAAI,IAAI,iBAAiB,IAAI,gBAAgB,IAAI,CAAC;AAClD,QAAI,CAAC,IAAI,IAAI,gBAAgB,GAAG;AAE5B,UAAI,IAAI,kBAAkB,IAAI,qBAAqB,IAAI,CAAC;AAAA,IAC5D;AACA,QAAI,IAAI,2BAA2B,IAAI,0BAA0B,IAAI,CAAC;AAGtE,UAAM,UAAU,MAAM,IAAI,KAAK,aAAa;AAE5C,YAAQ,OAAO,QAAQ,GAAG,YAAY;AAClC,YAAM,gBAAgB,QAAQ,QAAQ,IAAI,YAAU,OAAO,WAAW;AACtE,UAAI,cAAc,SAAS,GAAG;AAC1B,cAAM,8BAA8B,MAAM,aAAa;AAAA,MAC3D;AACA,MAAAA,mBAAA,0BAA0B,KAAK;AAAA,IACnC,CAAC;AAED,UAAM,IAAI,KAAK,cAAc;AAE7B,QAAI,IAAI,MAAM,EAAE,YAAY,KAAK,EAAE;AAAA,EACvC;AA/BA,EAAAA,mBAAsB;AAiCtB,iBAAsB,MAAM,MAAkB;AAC1C,UAAM,EAAE,IAAI,IAAI;AAEhB,QAAI,MAAM,aAAa;AACvB,UAAM,IAAI,MAAM,yBAAyB;AACzC,UAAM,IAAI,MAAM,cAAc;AAC9B,UAAM,IAAI,MAAM,iBAAiB;AACjC,UAAM,IAAI,MAAM,eAAe;AAG/B,QAAI,IAAI,KAAK,WAAW,GAAG;AACvB,YAAM,IAAI,MAAM,WAAW;AAAA,IAC/B;AAAA,EACJ;AAbA,EAAAA,mBAAsB;AAAA,GArCT;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,qCAAqC;AAC9C,SAAS,2BAA2B;AACpC,SAAS,QAAQ,kBAAkB;AACnC,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAC1C,SAAS,iCAAiC;AAE1C,SAAS,eAAe,mBAAmB,kBAAkB,sBAAsB;AACnF,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAKzB,IAAU;AAAA,CAAV,CAAUA,uBAAV;AAEI,EAAMA,mBAAA,4BAA4B,WAAW;AAEpD,iBAAsB,WAAW,MAAkB;AAC/C,UAAM,EAAE,IAAI,IAAI;AAGhB,QAAI,CAAC,IAAI,IAAI,eAAe,GAAG;AAE3B,YAAM,QAAQ,MAAM,gBAAgB,OAAO,KAAK,KAAK,EAAE;AACvD,UAAI,IAAI,iBAAiB,KAAK;AAAA,IAClC;AACA,QAAI,IAAI,qBAAqB,IAAI,0BAA0B,GAAG,CAAC;AAC/D,QAAI,IAAI,iBAAiB,IAAI,gBAAgB,IAAI,CAAC;AAClD,QAAI,CAAC,IAAI,IAAI,gBAAgB,GAAG;AAE5B,UAAI,IAAI,kBAAkB,IAAI,qBAAqB,IAAI,CAAC;AAAA,IAC5D;AACA,QAAI,IAAI,2BAA2B,IAAI,0BAA0B,IAAI,CAAC;AAGtE,UAAM,UAAU,MAAM,IAAI,KAAK,aAAa;AAE5C,YAAQ,OAAO,QAAQ,GAAG,YAAY;AAClC,YAAM,gBAAgB,QAAQ,QAAQ,IAAI,YAAU,OAAO,WAAW;AACtE,UAAI,cAAc,SAAS,GAAG;AAC1B,cAAM,8BAA8B,MAAM,aAAa;AAAA,MAC3D;AACA,MAAAA,mBAAA,0BAA0B,KAAK;AAAA,IACnC,CAAC;AAED,UAAM,IAAI,KAAK,cAAc;AAE7B,QAAI,IAAI,MAAM,EAAE,YAAY,KAAK,EAAE;AAAA,EACvC;AA/BA,EAAAA,mBAAsB;AAiCtB,iBAAsB,MAAM,MAAkB;AAC1C,UAAM,EAAE,IAAI,IAAI;AAEhB,QAAI,MAAM,aAAa;AACvB,UAAM,IAAI,MAAM,yBAAyB;AACzC,UAAM,IAAI,MAAM,cAAc;AAC9B,UAAM,IAAI,MAAM,iBAAiB;AACjC,UAAM,IAAI,MAAM,eAAe;AAAA,EACnC;AARA,EAAAA,mBAAsB;AAAA,GArCT;",
5
5
  "names": ["ServerEnvironment"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/node",
3
- "version": "0.16.0-alpha.0-20251115-d89e62680",
3
+ "version": "0.16.0-alpha.0-20251129-96ad07c6e",
4
4
  "description": "API for building Matter nodes",
5
5
  "keywords": [
6
6
  "iot",
@@ -42,14 +42,14 @@
42
42
  "#*": "./src/*"
43
43
  },
44
44
  "dependencies": {
45
- "@matter/general": "0.16.0-alpha.0-20251115-d89e62680",
46
- "@matter/model": "0.16.0-alpha.0-20251115-d89e62680",
47
- "@matter/types": "0.16.0-alpha.0-20251115-d89e62680",
48
- "@matter/protocol": "0.16.0-alpha.0-20251115-d89e62680"
45
+ "@matter/general": "0.16.0-alpha.0-20251129-96ad07c6e",
46
+ "@matter/model": "0.16.0-alpha.0-20251129-96ad07c6e",
47
+ "@matter/types": "0.16.0-alpha.0-20251129-96ad07c6e",
48
+ "@matter/protocol": "0.16.0-alpha.0-20251129-96ad07c6e"
49
49
  },
50
50
  "devDependencies": {
51
- "@matter/tools": "0.16.0-alpha.0-20251115-d89e62680",
52
- "@matter/testing": "0.16.0-alpha.0-20251115-d89e62680"
51
+ "@matter/tools": "0.16.0-alpha.0-20251129-96ad07c6e",
52
+ "@matter/testing": "0.16.0-alpha.0-20251129-96ad07c6e"
53
53
  },
54
54
  "files": [
55
55
  "dist/**/*",
@@ -259,7 +259,7 @@ export class QuietEvent<T extends any[] = any[], S extends ValueModel = ValueMod
259
259
  super(schema, owner);
260
260
  this.#quiet = new QuietObservable({
261
261
  shouldEmit(...args: T) {
262
- const [oldValue, newValue] = args;
262
+ const [newValue, oldValue] = args;
263
263
 
264
264
  return oldValue === null || (newValue === null && oldValue !== newValue) ? "now" : true;
265
265
  },
@@ -14,7 +14,7 @@ import { markClientBehavior } from "./cluster-behavior-utils.js";
14
14
  * You may use a client behavior to access the type-safe version of a behavior without knowing details of the underlying
15
15
  * implementation such as the base class or supported features.
16
16
  *
17
- * For appropriate type safety {@link cluster} must be specify all cluster elements, and those that are not mandatory
17
+ * For appropriate type safety {@link cluster} must specify all cluster elements, and those that are not mandatory
18
18
  * without features must be marked as optional.
19
19
  */
20
20
  export function ClientBehavior<const T extends ClusterType>(cluster: T): ClusterBehavior.Type<T> {
@@ -32,7 +32,7 @@ import type { ClusterState } from "./ClusterState.js";
32
32
  * and may not be retained across invocations.
33
33
  *
34
34
  * ClusterBehaviors may be instantiated with unsupported mandatory commands and attributes. This is currently results
35
- * in a runtime error but it will not cause a type error during development.
35
+ * in a runtime error, but it will not cause a type error during development.
36
36
  */
37
37
  export class ClusterBehavior extends Behavior {
38
38
  declare static readonly schema: Schema.Cluster;
@@ -161,7 +161,7 @@ export namespace ClusterBehaviorType {
161
161
  /**
162
162
  * Factory for command implementations.
163
163
  *
164
- * By default commands install as {@link Behavior.unimplemented}. In client scenarios this allows the caller to
164
+ * By default, commands install as {@link Behavior.unimplemented}. In client scenarios this allows the caller to
165
165
  * provide a useful default implementation.
166
166
  */
167
167
  commandFactory?: CommandFactory;
@@ -469,12 +469,11 @@ function createDefaultCommandDescriptors({ scope, base, commandFactory }: Deriva
469
469
 
470
470
  // Choose implementation, or skip if appropriate implementation is already present
471
471
  if (!conformantNames.has(name)) {
472
- // Non-conformant; install as unimplemented
473
- if (instance[name]) {
472
+ if (instance[name] && instance[name] !== Behavior.unimplemented) {
474
473
  continue;
475
474
  }
476
- implementation = Behavior.unimplemented;
477
- } else if (commandFactory) {
475
+ }
476
+ if (commandFactory) {
478
477
  // With a factory, replace any existing implementation not provided by the factory
479
478
  if ((instance[name] as MarkedCommand | undefined)?.[sourceFactory] === commandFactory) {
480
479
  continue;
@@ -230,7 +230,7 @@ export class ValidatedElements {
230
230
  if (implementation === Behavior.unimplemented) {
231
231
  if (!command.optional) {
232
232
  // TODO - do not pollute the logs with these as Matter spec is in flux (should this include groups
233
- // or just scenes?)
233
+ // or just scenes?)
234
234
  if (this.#name.match(/^(?:Groups|Scenes|GroupKeyManagement)(?:Server|Behavior)/)) {
235
235
  continue;
236
236
  }
@@ -221,11 +221,23 @@ function createSimpleValidator(
221
221
  }
222
222
 
223
223
  function createIntegerValidator(schema: ValueModel, supervisor: RootSupervisor, name: string) {
224
+ const nullable = schema.effectiveQuality.nullable;
224
225
  let assertion;
225
- if (schema.effectiveQuality.nullable) {
226
- assertion = assertInt.nullable[name];
227
- } else {
228
- assertion = assertInt.notNullable[name];
226
+ // Let's check schema type specific assertations first
227
+ // TODO maybe introduce a date type and then optimize this here later
228
+ if (schema.type === "epoch-s" || schema.type === "epoch-us") {
229
+ if (nullable) {
230
+ assertion = assertInt.nullable[schema.type];
231
+ } else {
232
+ assertion = assertInt.notNullable[schema.type];
233
+ }
234
+ }
235
+ if (assertion === undefined) {
236
+ if (nullable) {
237
+ assertion = assertInt.nullable[name];
238
+ } else {
239
+ assertion = assertInt.notNullable[name];
240
+ }
229
241
  }
230
242
 
231
243
  if (assertion === undefined) {
@@ -4,9 +4,10 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { Bytes, isObject } from "#general";
7
+ import { Bytes, isObject, UINT32_MAX, UINT64_MAX } from "#general";
8
8
  import { SchemaErrorPath } from "#model";
9
9
  import { DatatypeError, IntegerRangeError, Val } from "#protocol";
10
+ import { MATTER_EPOCH_OFFSET_S, MATTER_EPOCH_OFFSET_US } from "@matter/types";
10
11
 
11
12
  export function assertNumber(value: Val, path: SchemaErrorPath): asserts value is number {
12
13
  if (Number.isFinite(value)) {
@@ -94,6 +95,31 @@ for (let i = 1n; i < 9n; i++) {
94
95
  assertInt.nullable[intName] = createIntAssertion(`nullable ${intName}`, signedMin + 1n, signedMax);
95
96
  }
96
97
 
98
+ // Add special epoch-s case
99
+ assertInt.notNullable["epoch-s"] = createIntAssertion(
100
+ "epoch-s",
101
+ BigInt(MATTER_EPOCH_OFFSET_S),
102
+ BigInt(UINT32_MAX + MATTER_EPOCH_OFFSET_S),
103
+ );
104
+ assertInt.nullable["epoch-s"] = createIntAssertion(
105
+ `nullable epoch-s`,
106
+ BigInt(MATTER_EPOCH_OFFSET_S),
107
+ BigInt(UINT32_MAX + MATTER_EPOCH_OFFSET_S) - 1n,
108
+ );
109
+
110
+ // Add special epoch-us case
111
+ // TODO Think about representing as float like other high precision time values?
112
+ assertInt.notNullable["epoch-us"] = createIntAssertion(
113
+ "epoch-us",
114
+ MATTER_EPOCH_OFFSET_US,
115
+ UINT64_MAX + MATTER_EPOCH_OFFSET_US,
116
+ );
117
+ assertInt.nullable["epoch-us"] = createIntAssertion(
118
+ `nullable epoch-us`,
119
+ MATTER_EPOCH_OFFSET_US,
120
+ UINT64_MAX + MATTER_EPOCH_OFFSET_US - 1n,
121
+ );
122
+
97
123
  function createIntAssertion(name: string, lowerBoundInclusive: bigint, upperBoundExclusive: bigint) {
98
124
  if (lowerBoundInclusive < Number.MIN_SAFE_INTEGER || upperBoundExclusive > Number.MAX_SAFE_INTEGER) {
99
125
  return createVarIntAssertion(name, lowerBoundInclusive, upperBoundExclusive);
@@ -181,10 +181,8 @@ export class CommissioningClient extends Behavior {
181
181
 
182
182
  const network = this.agent.get(NetworkClient);
183
183
  network.state.defaultSubscription = opts.defaultSubscription;
184
- if (opts.autoSubscribe || opts.autoSubscribe === undefined) {
185
- // Nodes we commission are auto-subscribed by default, unless disabled explicitly
186
- network.state.autoSubscribe = opts.autoSubscribe ?? true;
187
- }
184
+ // Nodes we commission are auto-subscribed by default, unless disabled explicitly
185
+ network.state.autoSubscribe = opts.autoSubscribe !== false;
188
186
  network.state.caseAuthenticatedTags = opts.caseAuthenticatedTags;
189
187
 
190
188
  logger.notice(
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { Behavior } from "#behavior/Behavior.js";
8
8
  import { BasicInformationBehavior } from "#behaviors/basic-information";
9
- import { ConnectionlessTransportSet, ImplementationError, Logger } from "#general";
9
+ import { ConnectionlessTransportSet, ImplementationError, Logger, SharedEnvironmentServices } from "#general";
10
10
  import { Node } from "#node/Node.js";
11
11
  import {
12
12
  Ble,
@@ -49,12 +49,15 @@ export class ControllerBehavior extends Behavior {
49
49
  throw new ImplementationError("adminFabricLabel must be set for ControllerBehavior");
50
50
  }
51
51
 
52
+ const node = Node.forEndpoint(this.endpoint);
53
+
52
54
  // Configure discovery transports
53
55
  if (this.state.ip === undefined) {
54
56
  this.state.ip = true;
55
57
  }
56
58
  if (this.state.ip !== false) {
57
- this.env.get(ScannerSet).add((await this.env.load(MdnsService)).client);
59
+ this.internal.services = this.env.asDependent();
60
+ this.env.get(ScannerSet).add((await this.internal.services.load(MdnsService)).client);
58
61
  }
59
62
 
60
63
  if (this.state.ble === undefined) {
@@ -83,7 +86,6 @@ export class ControllerBehavior extends Behavior {
83
86
  }
84
87
  }
85
88
 
86
- const node = Node.forEndpoint(this.endpoint);
87
89
  this.reactTo(node.lifecycle.online, this.#nodeOnline);
88
90
  if (node.lifecycle.isOnline) {
89
91
  this.#nodeOnline();
@@ -95,6 +97,7 @@ export class ControllerBehavior extends Behavior {
95
97
  await this.env.close(ActiveDiscoveries);
96
98
  this.env.delete(FabricAuthority);
97
99
  this.env.delete(ScannerSet);
100
+ await this.internal.services?.close();
98
101
  }
99
102
 
100
103
  get fabricAuthorityConfig(): FabricAuthorityConfiguration {
@@ -168,6 +171,8 @@ export namespace ControllerBehavior {
168
171
  commissionable: true,
169
172
  operationalTargets: [],
170
173
  };
174
+
175
+ services?: SharedEnvironmentServices;
171
176
  }
172
177
 
173
178
  export class State {
@@ -15,6 +15,7 @@ import {
15
15
  NetworkInterfaceDetailed,
16
16
  NoAddressAvailableError,
17
17
  ObserverGroup,
18
+ SharedEnvironmentServices,
18
19
  UdpInterface,
19
20
  } from "#general";
20
21
  import type { ServerNode } from "#node/ServerNode.js";
@@ -61,6 +62,12 @@ export class ServerNetworkRuntime extends NetworkRuntime {
61
62
  #ipv6UdpInterface?: UdpInterface;
62
63
  #observers = new ObserverGroup(this);
63
64
  #groupNetworking?: ServerGroupNetworking;
65
+ #services: SharedEnvironmentServices;
66
+
67
+ constructor(owner: ServerNode) {
68
+ super(owner);
69
+ this.#services = owner.env.asDependent();
70
+ }
64
71
 
65
72
  override get owner() {
66
73
  return super.owner as ServerNode;
@@ -74,7 +81,7 @@ export class ServerNetworkRuntime extends NetworkRuntime {
74
81
  const port = this.owner.state.network.operationalPort;
75
82
  const options = this.owner.state.commissioning.mdns;
76
83
  const crypto = this.owner.env.get(Crypto);
77
- const { server } = this.owner.env.get(MdnsService);
84
+ const { server } = this.#services.get(MdnsService);
78
85
  this.#mdnsAdvertiser = new MdnsAdvertiser(crypto, server, { ...options, port });
79
86
  }
80
87
  return this.#mdnsAdvertiser;
@@ -253,7 +260,7 @@ export class ServerNetworkRuntime extends NetworkRuntime {
253
260
  await this.addTransports(interfaces);
254
261
 
255
262
  // Initialize MDNS
256
- const mdns = await owner.env.load(MdnsService);
263
+ const mdns = await this.#services.load(MdnsService);
257
264
 
258
265
  const advertiser = env.get(DeviceAdvertiser);
259
266
 
@@ -323,6 +330,8 @@ export class ServerNetworkRuntime extends NetworkRuntime {
323
330
  // Now all sessions are closed, so we wait for Advertiser to be gone
324
331
  await advertisementShutdown;
325
332
 
333
+ await this.#services.close();
334
+
326
335
  await env.close(ExchangeManager);
327
336
  await env.close(SecureChannelProtocol);
328
337
  await env.close(ConnectionlessTransportSet);
@@ -327,7 +327,8 @@ export class GeneralDiagnosticsServer extends Base {
327
327
  }
328
328
 
329
329
  async #updateNetworkList() {
330
- const mdnsService = this.env.get(MdnsService);
330
+ await using services = this.env.asDependent();
331
+ const mdnsService = services.get(MdnsService);
331
332
  const mdnsLimitedToNetworkInterfaces = mdnsService.limitedToNetInterface;
332
333
 
333
334
  const networkRuntime = this.env.get(NetworkRuntime) as ServerNetworkRuntime;
@@ -9,7 +9,7 @@ import { GroupKeyManagement } from "#clusters/group-key-management";
9
9
  import { deepCopy, ImplementationError, Logger, MaybePromise } from "#general";
10
10
  import { DatatypeModel, FieldElement } from "#model";
11
11
  import { NodeLifecycle } from "#node/NodeLifecycle.js";
12
- import { assertRemoteActor, Fabric, FabricManager, hasRemoteActor } from "#protocol";
12
+ import { assertRemoteActor, Fabric, FabricManager, hasRemoteActor, IPK_DEFAULT_EPOCH_START_TIME } from "#protocol";
13
13
  import { EndpointNumber, FabricIndex, GroupId, StatusCode, StatusResponseError } from "#types";
14
14
  import { GroupKeyManagementBehavior } from "./GroupKeyManagementBehavior.js";
15
15
 
@@ -91,12 +91,27 @@ export class GroupKeyManagementServer extends GroupKeyManagementBehavior {
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) {
93
93
  const groupKeysForFabric = new Map<FabricIndex, GroupKeyManagement.GroupKeySet[]>();
94
- for (const groupKeySet of this.state.groupKeySets) {
94
+ const groupKeySets = deepCopy(this.state.groupKeySets);
95
+ for (let i = 0; i < groupKeySets.length; i++) {
96
+ const groupKeySet = groupKeySets[i];
95
97
  const fabricIndex = groupKeySet.fabricIndex;
96
98
  const keys = groupKeysForFabric.get(fabricIndex) ?? [];
99
+ if (keys.length === 0 && !fabrics.has(fabricIndex)) {
100
+ // Should normally not happen, but we saw such crashes without details, so handle it gracefully
101
+ logger.warn(
102
+ `Stored GroupKeySets for FabricIndex ${fabricIndex}, but no such fabric exists anymore. Cleaning up stale entries.`,
103
+ );
104
+ groupKeySets.splice(i, 1);
105
+ i--;
106
+ continue;
107
+ }
97
108
  keys.push(groupKeySet);
98
109
  groupKeysForFabric.set(fabricIndex, keys);
99
110
  }
111
+ if (groupKeySets.length !== this.state.groupKeySets.length) {
112
+ // Some entries were removed, so update the persisted state
113
+ this.state.groupKeySets = groupKeySets;
114
+ }
100
115
 
101
116
  for (const [fabricIndex, keys] of groupKeysForFabric.entries()) {
102
117
  const fabric = fabrics.for(fabricIndex);
@@ -290,7 +305,8 @@ export class GroupKeyManagementServer extends GroupKeyManagementBehavior {
290
305
  if (epochKey0 === null || epochStartTime0 === null) {
291
306
  throw new StatusResponseError("EpochKey0 and EpochStartTime0 must be set", StatusCode.InvalidCommand);
292
307
  }
293
- if (epochStartTime0 === 0) {
308
+ if (epochStartTime0 <= IPK_DEFAULT_EPOCH_START_TIME) {
309
+ // Formally can never be < IPK_DEFAULT_EPOCH_START_TIME, but let's be sure
294
310
  throw new StatusResponseError("EpochStartTime0 must not be 0", StatusCode.InvalidCommand);
295
311
  }
296
312
 
@@ -6,6 +6,7 @@
6
6
 
7
7
  import { Identify } from "#clusters/identify";
8
8
  import { MaybePromise, Observable, Seconds, Time, Timer } from "#general";
9
+ import { hasRemoteActor } from "@matter/protocol";
9
10
  import { IdentifyBehavior } from "./IdentifyBehavior.js";
10
11
 
11
12
  /**
@@ -33,6 +34,14 @@ export class IdentifyServer extends IdentifyBehavior {
33
34
  this.state.identifyType = Identify.IdentifyType.None;
34
35
  }
35
36
 
37
+ this.events.identifyTime$Changed.quiet.config = {
38
+ shouldEmit: (newValue, oldValue, context) =>
39
+ hasRemoteActor(context) || ((oldValue === 0 || newValue === 0) && newValue !== oldValue)
40
+ ? "now"
41
+ : false,
42
+ suppressionEnabled: false,
43
+ };
44
+
36
45
  // TODO - identifyTime should become virtual attribute with timer to update isIdentifying
37
46
  // Enable I/2.4 once this is done
38
47
  this.internal.identifyTimer = Time.getPeriodicTimer(
@@ -57,7 +57,7 @@ export class ServiceAreaBaseServer extends ServiceAreaBase {
57
57
  // • when it changes to or from 0
58
58
  // • when it decreases
59
59
  // • when it changes to or from null
60
- this.events.estimatedEndTime$Changed.quiet.shouldEmit = (oldValue, newValue) => {
60
+ this.events.estimatedEndTime$Changed.quiet.shouldEmit = (newValue, oldValue) => {
61
61
  return oldValue === null ||
62
62
  oldValue === 0 ||
63
63
  newValue === null ||
@@ -30,13 +30,13 @@ const schema = SwitchServerBase.schema.extend({
30
30
  children: [
31
31
  FieldElement({
32
32
  name: "longPressDelay",
33
- type: "epoch-s",
33
+ type: "duration",
34
34
  conformance: "MSL",
35
35
  default: DEFAULT_LONG_PRESS_DELAY,
36
36
  }),
37
37
  FieldElement({
38
38
  name: "multiPressDelay",
39
- type: "epoch-s",
39
+ type: "duration",
40
40
  conformance: "MSM",
41
41
  default: DEFAULT_MULTIPRESS_DELAY,
42
42
  }),