@matter/node 0.16.0-alpha.0-20250819-0a388db8b → 0.16.0-alpha.0-20250820-24939dd26

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 (69) hide show
  1. package/dist/cjs/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  2. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js +58 -58
  3. package/dist/cjs/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  4. package/dist/cjs/behavior/system/network/ClientNetworkRuntime.d.ts +1 -0
  5. package/dist/cjs/behavior/system/network/ClientNetworkRuntime.d.ts.map +1 -1
  6. package/dist/cjs/behavior/system/network/ClientNetworkRuntime.js +40 -4
  7. package/dist/cjs/behavior/system/network/ClientNetworkRuntime.js.map +2 -2
  8. package/dist/cjs/behavior/system/network/NetworkBehavior.d.ts +5 -0
  9. package/dist/cjs/behavior/system/network/NetworkBehavior.d.ts.map +1 -1
  10. package/dist/cjs/behavior/system/network/NetworkBehavior.js +5 -0
  11. package/dist/cjs/behavior/system/network/NetworkBehavior.js.map +1 -1
  12. package/dist/cjs/behavior/system/network/NetworkClient.d.ts +7 -4
  13. package/dist/cjs/behavior/system/network/NetworkClient.d.ts.map +1 -1
  14. package/dist/cjs/behavior/system/network/NetworkClient.js +13 -7
  15. package/dist/cjs/behavior/system/network/NetworkClient.js.map +1 -1
  16. package/dist/cjs/behavior/system/network/NetworkRuntime.d.ts.map +1 -1
  17. package/dist/cjs/behavior/system/network/NetworkRuntime.js +0 -1
  18. package/dist/cjs/behavior/system/network/NetworkRuntime.js.map +1 -1
  19. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  20. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js +1 -0
  21. package/dist/cjs/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
  22. package/dist/cjs/node/ClientNode.d.ts +12 -0
  23. package/dist/cjs/node/ClientNode.d.ts.map +1 -1
  24. package/dist/cjs/node/ClientNode.js +26 -0
  25. package/dist/cjs/node/ClientNode.js.map +1 -1
  26. package/dist/cjs/node/Node.d.ts.map +1 -1
  27. package/dist/cjs/node/Node.js +2 -0
  28. package/dist/cjs/node/Node.js.map +1 -1
  29. package/dist/cjs/node/client/NodePeerAddressStore.d.ts +4 -1
  30. package/dist/cjs/node/client/NodePeerAddressStore.d.ts.map +1 -1
  31. package/dist/esm/behavior/system/commissioning/CommissioningClient.d.ts.map +1 -1
  32. package/dist/esm/behavior/system/commissioning/CommissioningClient.js +58 -58
  33. package/dist/esm/behavior/system/commissioning/CommissioningClient.js.map +1 -1
  34. package/dist/esm/behavior/system/network/ClientNetworkRuntime.d.ts +1 -0
  35. package/dist/esm/behavior/system/network/ClientNetworkRuntime.d.ts.map +1 -1
  36. package/dist/esm/behavior/system/network/ClientNetworkRuntime.js +42 -6
  37. package/dist/esm/behavior/system/network/ClientNetworkRuntime.js.map +2 -2
  38. package/dist/esm/behavior/system/network/NetworkBehavior.d.ts +5 -0
  39. package/dist/esm/behavior/system/network/NetworkBehavior.d.ts.map +1 -1
  40. package/dist/esm/behavior/system/network/NetworkBehavior.js +5 -0
  41. package/dist/esm/behavior/system/network/NetworkBehavior.js.map +1 -1
  42. package/dist/esm/behavior/system/network/NetworkClient.d.ts +7 -4
  43. package/dist/esm/behavior/system/network/NetworkClient.d.ts.map +1 -1
  44. package/dist/esm/behavior/system/network/NetworkClient.js +13 -7
  45. package/dist/esm/behavior/system/network/NetworkClient.js.map +1 -1
  46. package/dist/esm/behavior/system/network/NetworkRuntime.d.ts.map +1 -1
  47. package/dist/esm/behavior/system/network/NetworkRuntime.js +0 -1
  48. package/dist/esm/behavior/system/network/NetworkRuntime.js.map +1 -1
  49. package/dist/esm/behavior/system/network/ServerNetworkRuntime.d.ts.map +1 -1
  50. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js +1 -0
  51. package/dist/esm/behavior/system/network/ServerNetworkRuntime.js.map +1 -1
  52. package/dist/esm/node/ClientNode.d.ts +12 -0
  53. package/dist/esm/node/ClientNode.d.ts.map +1 -1
  54. package/dist/esm/node/ClientNode.js +26 -0
  55. package/dist/esm/node/ClientNode.js.map +1 -1
  56. package/dist/esm/node/Node.d.ts.map +1 -1
  57. package/dist/esm/node/Node.js +2 -0
  58. package/dist/esm/node/Node.js.map +1 -1
  59. package/dist/esm/node/client/NodePeerAddressStore.d.ts +4 -1
  60. package/dist/esm/node/client/NodePeerAddressStore.d.ts.map +1 -1
  61. package/package.json +7 -7
  62. package/src/behavior/system/commissioning/CommissioningClient.ts +61 -59
  63. package/src/behavior/system/network/ClientNetworkRuntime.ts +59 -6
  64. package/src/behavior/system/network/NetworkBehavior.ts +6 -1
  65. package/src/behavior/system/network/NetworkClient.ts +16 -9
  66. package/src/behavior/system/network/NetworkRuntime.ts +0 -1
  67. package/src/behavior/system/network/ServerNetworkRuntime.ts +2 -0
  68. package/src/node/ClientNode.ts +30 -0
  69. package/src/node/Node.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ClientNode.d.ts","sourceRoot":"","sources":["../../../src/node/ClientNode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AAE5F,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAa,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,EAAU,WAAW,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;;gBAI7C,OAAO,EAAE,UAAU,CAAC,OAAO;IAevC;;;;OAIG;IACH,IAAI,MAAM,gBAET;IAEQ,UAAU;IAenB,IAAa,KAAK,IAAI,UAAU,GAAG,SAAS,CAE3C;IAED,IAAa,KAAK,CAAC,KAAK,EAAE,UAAU,EAEnC;IAED;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,mBAAmB,CAAC,oBAAoB;IAIlE;;OAEG;IACY,MAAM;IAUrB;;;;OAIG;IACY,KAAK;cAIJ,cAAc;IAQ9B,SAAS,CAAC,aAAa,IAAI,cAAc;IAInC,sBAAsB;IAE5B,cAAuB,SAAS,iDAE/B;IAEQ,GAAG,CAAC,CAAC,EACV,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,GAC3E,YAAY,CAAC,CAAC,CAAC;IAET,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAiB5G,IAAI,WAAW,IAAI,YAAY,CAAC,aAAa,CAAC,CAM7C;CACJ;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAQ,SAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACvD,MAAM,CAAC,EAAE,WAAW,CAAC;KACxB;IAEM,MAAM,YAAY;;;;;;;;;;;;;oEAAmE,CAAC;IAE7F,UAAiB,YAAa,SAAQ,QAAQ,CAAC,OAAO,YAAY,CAAC;KAAG;CACzE"}
1
+ {"version":3,"file":"ClientNode.d.ts","sourceRoot":"","sources":["../../../src/node/ClientNode.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAC;AAE5F,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAa,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAIzC,OAAO,EAAU,WAAW,EAAE,MAAM,eAAe,CAAC;AAGpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;;gBAI7C,OAAO,EAAE,UAAU,CAAC,OAAO;IAevC;;;;OAIG;IACH,IAAI,MAAM,gBAET;IAEQ,UAAU;IAenB,IAAa,KAAK,IAAI,UAAU,GAAG,SAAS,CAE3C;IAED,IAAa,KAAK,CAAC,KAAK,EAAE,UAAU,EAEnC;IAED;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,mBAAmB,CAAC,oBAAoB;IAIlE;;OAEG;IACY,MAAM;IAUrB;;;;OAIG;IACY,KAAK;IAIpB;;;;OAIG;IACG,OAAO;IAWb;;;;OAIG;IACG,MAAM;cASI,cAAc;IAQ9B,SAAS,CAAC,aAAa,IAAI,cAAc;IAInC,sBAAsB;IAE5B,cAAuB,SAAS,iDAE/B;IAEQ,GAAG,CAAC,CAAC,EACV,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,GAC3E,YAAY,CAAC,CAAC,CAAC;IAET,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAiB5G,IAAI,WAAW,IAAI,YAAY,CAAC,aAAa,CAAC,CAM7C;CACJ;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAQ,SAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACvD,MAAM,CAAC,EAAE,WAAW,CAAC;KACxB;IAEM,MAAM,YAAY;;;;;;;;;;;;;oEAAmE,CAAC;IAE7F,UAAiB,YAAa,SAAQ,QAAQ,CAAC,OAAO,YAAY,CAAC;KAAG;CACzE"}
@@ -76,6 +76,32 @@ class ClientNode extends Node {
76
76
  async erase() {
77
77
  await this.lifecycle.mutex.produce(this.eraseWithMutex.bind(this));
78
78
  }
79
+ /**
80
+ * Disable the node.
81
+ *
82
+ * This shuts down any active connections and prevents future connections until re-enabled.
83
+ */
84
+ async disable() {
85
+ if (this.state.network.isDisabled) {
86
+ return;
87
+ }
88
+ await this.lifecycle.mutex.produce(async () => {
89
+ await this.cancelWithMutex();
90
+ await this.setStateOf(NetworkClient, { isDisabled: true });
91
+ });
92
+ }
93
+ /**
94
+ * Enable the node.
95
+ *
96
+ * If the node is disabled but reachable, this brings it online.
97
+ */
98
+ async enable() {
99
+ if (!this.state.network.isDisabled) {
100
+ return;
101
+ }
102
+ await this.setStateOf(NetworkClient, { isDisabled: false });
103
+ await this.start();
104
+ }
79
105
  async eraseWithMutex() {
80
106
  await this.cancelWithMutex();
81
107
  await this.resetWithMutex();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/node/ClientNode.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["ClientNode"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../../src/node/Node.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EACH,YAAY,EACZ,UAAU,EAEV,WAAW,EACX,QAAQ,EAGR,cAAc,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKnD;;;;GAIG;AACH,8BAAsB,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;;gBAI3F,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAoCzC,IAAa,GAAG,gBAEf;IAED;;OAEG;IACH,IAAI,QAAQ,qCAEX;IAED,IAAa,SAAS,IAAI,aAAa,CAEtC;IAED;;OAEG;IACG,KAAK;cAQK,cAAc;IAsB9B;;OAEG;IACG,WAAW;IAIjB;;OAEG;IACG,GAAG;IAKT;;;;OAIG;IACG,MAAM;cAII,eAAe;IAahB,KAAK;cAIJ,cAAc;IAUf,KAAK;cAIJ,cAAc;IAI9B;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,cAAc;IAElD;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IAElD,SAAS,CAAC,QAAQ,CAAC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,4BAEzB;IAED,IAAa,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAWzC;cAEkB,eAAe,IAAI,aAAa;IAInD,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM;IAIvB,CAAC,YAAY,CAAC,QAAQ,CAAC;CAKzC;AAED,yBAAiB,IAAI,CAAC;IAClB,UAAiB,WAAY,SAAQ,QAAQ,CAAC,eAAe;QACzD,WAAW,CAAC,EAAE,WAAW,CAAC;KAC7B;IAED,KAAY,OAAO,CACf,CAAC,SAAS,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAC3D,CAAC,SAAS,WAAW,GAAG,WAAW,IACnC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3B,KAAY,aAAa,CACrB,CAAC,SAAS,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAC3D,CAAC,SAAS,WAAW,GAAG,WAAW,IACnC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjC,SAAgB,aAAa,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,WAAW,EACvE,WAAW,EAAE,CAAC,EACd,aAAa,EAAE,SAAS,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC/C,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GACvB,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAiB1B;IAED,SAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CASpD;IAED;;OAEG;IACI,MAAM,kBAAkB;;;;;;;;;;;;;MAU7B,CAAC;IAEH,UAAiB,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,kBAAkB,CAAC;KAAG;CACrF"}
1
+ {"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../../src/node/Node.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,7 @@ var __callDispose = (stack, error, hasError) => {
50
50
  */
51
51
  import { NodeActivity } from "#behavior/context/NodeActivity.js";
52
52
  import { IndexBehavior } from "#behavior/system/index/IndexBehavior.js";
53
+ import { NetworkBehavior } from "#behavior/system/network/NetworkBehavior.js";
53
54
  import { NetworkRuntime } from "#behavior/system/network/NetworkRuntime.js";
54
55
  import { PartsBehavior } from "#behavior/system/parts/PartsBehavior.js";
55
56
  import { Endpoint } from "#endpoint/Endpoint.js";
@@ -129,6 +130,7 @@ class Node extends Endpoint {
129
130
  this.#runtime.construction.start();
130
131
  this.#environment.set(NetworkRuntime, this.#runtime);
131
132
  await this.#runtime.construction.ready;
133
+ await this.act("network startup", (agent) => agent.get(NetworkBehavior).startup());
132
134
  } catch (e) {
133
135
  this.env.runtime.delete(this);
134
136
  throw e;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/node/Node.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["Node"]
6
6
  }
@@ -13,7 +13,10 @@ import { FabricIndex, NodeId } from "#types";
13
13
  export declare class NodePeerAddressStore extends PeerAddressStore {
14
14
  #private;
15
15
  constructor(owner: ServerNode);
16
- assignNewAddress(node: ClientNode, fabricIndex: FabricIndex, nodeId?: NodeId): PeerAddress;
16
+ assignNewAddress(node: ClientNode, fabricIndex: FabricIndex, nodeId?: NodeId): {
17
+ fabricIndex: FabricIndex;
18
+ nodeId: NodeId;
19
+ };
17
20
  loadPeers(): OperationalPeer[];
18
21
  updatePeer(peer: OperationalPeer): Promise<void>;
19
22
  deletePeer(address: PeerAddress): void;
@@ -1 +1 @@
1
- {"version":3,"file":"NodePeerAddressStore.d.ts","sourceRoot":"","sources":["../../../../src/node/client/NodePeerAddressStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAkB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG7C;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;gBAS1C,KAAK,EAAE,UAAU;IAW7B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM;IAe5E,SAAS,IAAI,eAAe,EAAE;IAsBxB,UAAU,CAAC,IAAI,EAAE,eAAe;IAgBtC,UAAU,CAAC,OAAO,EAAE,WAAW;IAI/B,eAAe,IAAI,SAAS;CAC/B"}
1
+ {"version":3,"file":"NodePeerAddressStore.d.ts","sourceRoot":"","sources":["../../../../src/node/client/NodePeerAddressStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAkB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAG7C;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,gBAAgB;;gBAS1C,KAAK,EAAE,UAAU;IAW7B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM;;;;IAe5E,SAAS,IAAI,eAAe,EAAE;IAsBxB,UAAU,CAAC,IAAI,EAAE,eAAe;IAgBtC,UAAU,CAAC,OAAO,EAAE,WAAW;IAI/B,eAAe,IAAI,SAAS;CAC/B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/node",
3
- "version": "0.16.0-alpha.0-20250819-0a388db8b",
3
+ "version": "0.16.0-alpha.0-20250820-24939dd26",
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-20250819-0a388db8b",
46
- "@matter/model": "0.16.0-alpha.0-20250819-0a388db8b",
47
- "@matter/types": "0.16.0-alpha.0-20250819-0a388db8b",
48
- "@matter/protocol": "0.16.0-alpha.0-20250819-0a388db8b"
45
+ "@matter/general": "0.16.0-alpha.0-20250820-24939dd26",
46
+ "@matter/model": "0.16.0-alpha.0-20250820-24939dd26",
47
+ "@matter/types": "0.16.0-alpha.0-20250820-24939dd26",
48
+ "@matter/protocol": "0.16.0-alpha.0-20250820-24939dd26"
49
49
  },
50
50
  "devDependencies": {
51
- "@matter/tools": "0.16.0-alpha.0-20250819-0a388db8b",
52
- "@matter/testing": "0.16.0-alpha.0-20250819-0a388db8b"
51
+ "@matter/tools": "0.16.0-alpha.0-20250820-24939dd26",
52
+ "@matter/testing": "0.16.0-alpha.0-20250820-24939dd26"
53
53
  },
54
54
  "files": [
55
55
  "dist/**/*",
@@ -217,65 +217,67 @@ export class CommissioningClient extends Behavior {
217
217
  /**
218
218
  * Define logical schema. This enables runtime validation, make fields persistent and makes subfields editable.
219
219
  */
220
- static override readonly schema = new DatatypeModel({
221
- name: "CommissioningState",
222
- type: "struct",
223
-
224
- children: [
225
- FieldElement({
226
- name: "peerAddress",
227
- type: "struct",
228
- quality: "N",
229
- children: [
230
- FieldElement({ name: "fabricIndex", type: "fabric-id" }),
231
- FieldElement({ name: "nodeId", type: "node-id" }),
232
- ],
233
- }),
234
- FieldElement({
235
- name: "addresses",
236
- type: "list",
237
- quality: "N",
238
- children: [
239
- FieldElement({
240
- name: "entry",
241
- type: "struct",
242
- children: [
243
- FieldElement({ name: "type", type: "string" }),
244
- FieldElement({ name: "ip", type: "string" }),
245
- FieldElement({ name: "port", type: "uint16" }),
246
- FieldElement({ name: "peripheralAddress", type: "string" }),
247
- ],
248
- }),
249
- ],
250
- }),
251
- FieldElement({ name: "discoveredAt", type: "systime-ms", quality: "N", conformance: "M" }),
252
- FieldElement({ name: "onlineAt", type: "systime-ms" }),
253
- FieldElement({ name: "offlineAt", type: "systime-ms" }),
254
- FieldElement({ name: "ttl", type: "uint32", quality: "N" }),
255
- FieldElement({ name: "deviceIdentifier", type: "string", quality: "N" }),
256
- FieldElement({ name: "discriminator", type: "uint16", quality: "N" }),
257
- FieldElement({ name: "commissioningMode", type: "uint8", quality: "N" }),
258
- FieldElement({ name: "vendorId", type: "vendor-id", quality: "N" }),
259
- FieldElement({ name: "productId", type: "uint16", quality: "N" }),
260
- FieldElement({ name: "deviceType", type: "uint16", quality: "N" }),
261
- FieldElement({ name: "deviceName", type: "string", quality: "N" }),
262
- FieldElement({ name: "rotatingIdentifier", type: "string", quality: "N" }),
263
- FieldElement({ name: "pairingHint", type: "uint32", quality: "N" }),
264
- FieldElement({ name: "pairingInstructions", type: "string", quality: "N" }),
265
- FieldElement({
266
- name: "sessionParameters",
267
- type: "struct",
268
- quality: "N",
269
- children: [
270
- FieldElement({ name: "idleInterval", type: "duration", constraint: "max 3600000" }),
271
- FieldElement({ name: "activeInterval", type: "duration", constraint: "max 3600000" }),
272
- FieldElement({ name: "activeThreshold", type: "duration", constraint: "max 65535" }),
273
- ],
274
- }),
275
- FieldElement({ name: "tcpSupport", type: "uint8", quality: "N" }),
276
- FieldElement({ name: "longIdleOperatingMode", type: "bool", quality: "N" }),
277
- ],
278
- });
220
+ static override readonly schema = new DatatypeModel(
221
+ {
222
+ name: "CommissioningState",
223
+ type: "struct",
224
+ },
225
+
226
+ FieldElement({
227
+ name: "peerAddress",
228
+ type: "struct",
229
+ quality: "N",
230
+ children: [
231
+ FieldElement({ name: "fabricIndex", type: "fabric-id" }),
232
+ FieldElement({ name: "nodeId", type: "node-id" }),
233
+ ],
234
+ }),
235
+
236
+ FieldElement({
237
+ name: "addresses",
238
+ type: "list",
239
+ quality: "N",
240
+ children: [
241
+ FieldElement({
242
+ name: "entry",
243
+ type: "struct",
244
+ children: [
245
+ FieldElement({ name: "type", type: "string" }),
246
+ FieldElement({ name: "ip", type: "string" }),
247
+ FieldElement({ name: "port", type: "uint16" }),
248
+ FieldElement({ name: "peripheralAddress", type: "string" }),
249
+ ],
250
+ }),
251
+ ],
252
+ }),
253
+
254
+ FieldElement({ name: "discoveredAt", type: "systime-ms", quality: "N", conformance: "M" }),
255
+ FieldElement({ name: "onlineAt", type: "systime-ms" }),
256
+ FieldElement({ name: "offlineAt", type: "systime-ms" }),
257
+ FieldElement({ name: "ttl", type: "uint32", quality: "N" }),
258
+ FieldElement({ name: "deviceIdentifier", type: "string", quality: "N" }),
259
+ FieldElement({ name: "discriminator", type: "uint16", quality: "N" }),
260
+ FieldElement({ name: "commissioningMode", type: "uint8", quality: "N" }),
261
+ FieldElement({ name: "vendorId", type: "vendor-id", quality: "N" }),
262
+ FieldElement({ name: "productId", type: "uint16", quality: "N" }),
263
+ FieldElement({ name: "deviceType", type: "uint16", quality: "N" }),
264
+ FieldElement({ name: "deviceName", type: "string", quality: "N" }),
265
+ FieldElement({ name: "rotatingIdentifier", type: "string", quality: "N" }),
266
+ FieldElement({ name: "pairingHint", type: "uint32", quality: "N" }),
267
+ FieldElement({ name: "pairingInstructions", type: "string", quality: "N" }),
268
+ FieldElement({
269
+ name: "sessionParameters",
270
+ type: "struct",
271
+ quality: "N",
272
+ children: [
273
+ FieldElement({ name: "idleInterval", type: "duration", constraint: "max 3600000" }),
274
+ FieldElement({ name: "activeInterval", type: "duration", constraint: "max 3600000" }),
275
+ FieldElement({ name: "activeThreshold", type: "duration", constraint: "max 65535" }),
276
+ ],
277
+ }),
278
+ FieldElement({ name: "tcpSupport", type: "uint8", quality: "N" }),
279
+ FieldElement({ name: "longIdleOperatingMode", type: "bool", quality: "N" }),
280
+ );
279
281
  }
280
282
 
281
283
  export namespace CommissioningClient {
@@ -4,9 +4,9 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { InternalError, Logger, MatterError } from "#general";
7
+ import { InternalError, Logger, MatterError, ObserverGroup } from "#general";
8
8
  import type { ClientNode } from "#node/ClientNode.js";
9
- import { ClientInteraction, ExchangeProvider, PeerSet } from "#protocol";
9
+ import { ClientInteraction, ExchangeProvider, PeerAddress, PeerSet, SessionManager } from "#protocol";
10
10
  import { CommissioningClient } from "../commissioning/CommissioningClient.js";
11
11
  import { RemoteDescriptor } from "../commissioning/RemoteDescriptor.js";
12
12
  import { NetworkRuntime } from "./NetworkRuntime.js";
@@ -21,30 +21,81 @@ const logger = Logger.get("ClientNetworkRuntime");
21
21
  */
22
22
  export class ClientNetworkRuntime extends NetworkRuntime {
23
23
  #client?: ClientInteraction;
24
+ #observers = new ObserverGroup();
24
25
 
25
26
  constructor(owner: ClientNode) {
26
27
  super(owner);
27
28
  }
28
29
 
30
+ override get owner() {
31
+ return super.owner as ClientNode;
32
+ }
33
+
29
34
  protected async start() {
35
+ // Ensure we can connect to the node
30
36
  if (!this.owner.lifecycle.isCommissioned) {
31
37
  throw new UncommissionedError(`Cannot interact with ${this.owner} because it is uncommissioned`);
32
38
  }
33
39
 
34
- const commissioningState = this.owner.stateOf(CommissioningClient);
40
+ if (this.owner.state.network.isDisabled) {
41
+ throw new UncommissionedError(`Cannot interact with ${this.owner} because it is disabled`);
42
+ }
43
+
35
44
  const address = this.owner.stateOf(CommissioningClient).peerAddress;
36
- const peers = this.owner.env.get(PeerSet);
37
45
 
38
46
  if (address === undefined) {
39
47
  throw new InternalError(`Commissioned node ${this.owner} has no peer address`);
40
48
  }
41
49
 
50
+ // Install the exchange provider for the node
51
+ const { env, lifecycle } = this.owner;
52
+ const peers = env.get(PeerSet);
53
+ const commissioningState = this.owner.stateOf(CommissioningClient);
54
+
42
55
  const exchangeProvider = await peers.exchangeProviderFor(address, {
43
56
  discoveryData: RemoteDescriptor.fromLongForm(commissioningState),
44
57
  });
45
- this.owner.env.set(ExchangeProvider, exchangeProvider);
58
+ env.set(ExchangeProvider, exchangeProvider);
59
+
60
+ // Monitor sessions to maintain online state. We consider the node "online" if there is an active session. If
61
+ // not, we consider the node offline. This is the only real way we have of determining whether the node is
62
+ // healthy without actively polling
63
+ this.#client = env.get(ClientInteraction);
64
+ const { sessions } = env.get(SessionManager);
65
+
66
+ if (sessions.find(session => session.peerIs(address))) {
67
+ this.owner.act(({ context }) => lifecycle.online.emit(context));
68
+ }
46
69
 
47
- this.#client = this.owner.env.get(ClientInteraction);
70
+ this.#observers.on(sessions.added, session => {
71
+ if (lifecycle.isOnline) {
72
+ return;
73
+ }
74
+
75
+ const address = PeerAddress(commissioningState.peerAddress);
76
+ if (!address || session.peerAddress !== address) {
77
+ return;
78
+ }
79
+
80
+ this.owner.act(({ context }) => lifecycle.online.emit(context));
81
+ });
82
+
83
+ this.#observers.on(sessions.deleted, session => {
84
+ if (!lifecycle.isOnline) {
85
+ return;
86
+ }
87
+
88
+ const address = PeerAddress(commissioningState.peerAddress);
89
+ if (session.peerAddress !== address) {
90
+ return;
91
+ }
92
+
93
+ if (address && sessions.find(({ peerAddress }) => peerAddress === address)) {
94
+ return;
95
+ }
96
+
97
+ this.owner.act(({ context }) => lifecycle.offline.emit(context));
98
+ });
48
99
  }
49
100
 
50
101
  protected async stop() {
@@ -55,6 +106,8 @@ export class ClientNetworkRuntime extends NetworkRuntime {
55
106
  } catch (e) {
56
107
  logger.error(`Error closing connection to ${this.owner}`, e);
57
108
  }
109
+
110
+ this.#observers.close();
58
111
  }
59
112
 
60
113
  blockNewActivity() {
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { STANDARD_MATTER_PORT } from "#general";
7
+ import { MaybePromise, STANDARD_MATTER_PORT } from "#general";
8
8
  import { Behavior } from "../../Behavior.js";
9
9
  import type { NetworkRuntime } from "./NetworkRuntime.js";
10
10
 
@@ -24,6 +24,11 @@ export class NetworkBehavior extends Behavior {
24
24
  override [Symbol.asyncDispose]() {
25
25
  return this.internal.runtime?.close();
26
26
  }
27
+
28
+ /**
29
+ * Invoked by node when networking is ready.
30
+ */
31
+ startup(): MaybePromise {}
27
32
  }
28
33
 
29
34
  export namespace NetworkBehavior {
@@ -14,14 +14,10 @@ export class NetworkClient extends NetworkBehavior {
14
14
  declare internal: NetworkClient.Internal;
15
15
  declare state: NetworkClient.State;
16
16
 
17
- override initialize() {
18
- this.reactTo(this.#node.lifecycle.online, this.startup);
19
- }
20
-
21
- protected async startup() {
22
- const { startupSubscription } = this.state;
17
+ override async startup() {
18
+ const { startupSubscription, isDisabled } = this.state;
23
19
 
24
- if (startupSubscription === null) {
20
+ if (startupSubscription === null || isDisabled) {
25
21
  return;
26
22
  }
27
23
 
@@ -59,6 +55,12 @@ export class NetworkClient extends NetworkBehavior {
59
55
  default: { type: "properties", properties: {} },
60
56
  quality: "XN",
61
57
  }),
58
+
59
+ FieldElement({
60
+ name: "isDisabled",
61
+ type: "bool",
62
+ quality: "N",
63
+ }),
62
64
  ],
63
65
  });
64
66
  }
@@ -72,11 +74,16 @@ export namespace NetworkClient {
72
74
  /**
73
75
  * A subscription installed when the node is first commissioned and when the service is restarted.
74
76
  *
75
- * The default subscription is a wildcard for all attributes and of the node. You can set to undefined or
76
- * filter the fields and values but only values selected by this subscription will update automatically.
77
+ * The default subscription is a wildcard for all attributes of the node. You can set to undefined or filter
78
+ * the fields and values but only values selected by this subscription will update automatically.
77
79
  *
78
80
  * Set to null to disable automatic subscription.
79
81
  */
80
82
  startupSubscription?: Subscribe | null;
83
+
84
+ /**
85
+ * If true, the matter.js will not perform network communication with the node.
86
+ */
87
+ isDisabled = false;
81
88
  }
82
89
  }
@@ -34,7 +34,6 @@ export abstract class NetworkRuntime {
34
34
 
35
35
  async [Construction.construct]() {
36
36
  await this.start();
37
- await this.#owner.act(agent => this.owner.lifecycle.online.emit(agent.context));
38
37
  }
39
38
 
40
39
  async [Construction.destruct]() {
@@ -293,6 +293,8 @@ export class ServerNetworkRuntime extends NetworkRuntime {
293
293
  if (this.owner.stateOf(CommissioningServer).commissioned) {
294
294
  this.enableMdnsAdvertising();
295
295
  }
296
+
297
+ await this.owner.act(agent => this.owner.lifecycle.online.emit(agent.context));
296
298
  }
297
299
 
298
300
  override async [Construction.construct]() {
@@ -108,6 +108,36 @@ export class ClientNode extends Node<ClientNode.RootEndpoint> {
108
108
  await this.lifecycle.mutex.produce(this.eraseWithMutex.bind(this));
109
109
  }
110
110
 
111
+ /**
112
+ * Disable the node.
113
+ *
114
+ * This shuts down any active connections and prevents future connections until re-enabled.
115
+ */
116
+ async disable() {
117
+ if (this.state.network.isDisabled) {
118
+ return;
119
+ }
120
+
121
+ await this.lifecycle.mutex.produce(async () => {
122
+ await this.cancelWithMutex();
123
+ await this.setStateOf(NetworkClient, { isDisabled: true });
124
+ });
125
+ }
126
+
127
+ /**
128
+ * Enable the node.
129
+ *
130
+ * If the node is disabled but reachable, this brings it online.
131
+ */
132
+ async enable() {
133
+ if (!this.state.network.isDisabled) {
134
+ return;
135
+ }
136
+
137
+ await this.setStateOf(NetworkClient, { isDisabled: false });
138
+ await this.start();
139
+ }
140
+
111
141
  protected async eraseWithMutex() {
112
142
  // First ensure we're offline
113
143
  await this.cancelWithMutex();
package/src/node/Node.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  import { ActionContext } from "#behavior/context/ActionContext.js";
8
8
  import { NodeActivity } from "#behavior/context/NodeActivity.js";
9
9
  import { IndexBehavior } from "#behavior/system/index/IndexBehavior.js";
10
+ import { NetworkBehavior } from "#behavior/system/network/NetworkBehavior.js";
10
11
  import { NetworkRuntime } from "#behavior/system/network/NetworkRuntime.js";
11
12
  import { PartsBehavior } from "#behavior/system/parts/PartsBehavior.js";
12
13
  import { Endpoint } from "#endpoint/Endpoint.js";
@@ -116,6 +117,7 @@ export abstract class Node<T extends Node.CommonRootEndpoint = Node.CommonRootEn
116
117
  this.#runtime.construction.start();
117
118
  this.#environment.set(NetworkRuntime, this.#runtime);
118
119
  await this.#runtime.construction.ready;
120
+ await this.act("network startup", agent => agent.get(NetworkBehavior).startup());
119
121
  } catch (e) {
120
122
  this.env.runtime.delete(this);
121
123
  throw e;