@matter/nodejs-shell 0.11.0-alpha.0-20241015-ae8e54af2 → 0.11.0-alpha.0-20241017-fa6aca0e9

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.
package/README.md CHANGED
@@ -22,6 +22,22 @@ npm shell <nodenum>
22
22
  ```
23
23
 
24
24
  There are other parameters available to enable BLE and define the HCI device to use. See `npm shell -- --help` for more details.
25
+ Please note the extra `--` to separate the npm parameters from the shell parameters!
26
+
27
+ ## matter.js v0.11 Storage adjustment!
28
+ In matter.js 0.11 we adjusted the storage to the new environment based one. This means that by default the storage is in the user directory in .matter/shell-XX where XX is the nodeBum you provided as parameter. You can adjust the storage base location with "--storage-path=..." as parameter.
29
+
30
+ To use a former storage you can use "--legacyStorage" and the storage will be in the .matter-shell-XX directory in the local directory as before.
31
+ To manually convert a storage you can follow the following steps. The described steps assume ./.matter-shell-XX is the old storage and ~/.matter/shell-XX is the new storage location.
32
+
33
+ * Stop the shell
34
+ * Copy ./.matter-shell-XX/0.RootCertificateManager.* to ~/.matter/shell-XX/credentials.*
35
+ * Copy ./.matter-shell-XX/0.MatterController.fabric to ~/.matter/shell-XX/credentials.fabric
36
+ * Copy ./.matter-shell-XX/0.MatterController.commissionedNodes to ~/.matter/shell-XX/nodes.commissionedNodes
37
+ * Copy ./.matter-shell-XX/0.SessionManager.* to ~/.matter/shell-XX/sessions.*
38
+ * Copy ./.matter-shell-XX/Node.* to ~/.matter/shell-XX/Node.*
39
+
40
+ All "0.MatterController.node-*" files from the old storage are not needed to be copied, if existing. They are automatically regenerated on next start.
25
41
 
26
42
  ## General usage
27
43
 
@@ -22,9 +22,11 @@ __export(MatterNode_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(MatterNode_exports);
24
24
  var import_general = require("@matter/general");
25
+ var import_node = require("@matter/node");
25
26
  var import_nodejs = require("@matter/nodejs");
26
27
  var import_matter = require("@project-chip/matter.js");
27
28
  var import_datatype = require("@project-chip/matter.js/datatype");
29
+ var import_node_path = require("node:path");
28
30
  /**
29
31
  * @license
30
32
  * Copyright 2022-2024 Matter.js Authors
@@ -32,25 +34,63 @@ var import_datatype = require("@project-chip/matter.js/datatype");
32
34
  */
33
35
  const logger = import_general.Logger.get("Node");
34
36
  class MatterNode {
35
- constructor(nodeNum, netInterface) {
37
+ constructor(nodeNum, netInterface, useLegacyStorage = true) {
36
38
  this.nodeNum = nodeNum;
37
39
  this.netInterface = netInterface;
40
+ if (!useLegacyStorage) {
41
+ this.#environment = import_general.Environment.default;
42
+ }
38
43
  }
39
- storageLocation;
44
+ #storageLocation;
40
45
  storage;
41
46
  storageManager;
42
47
  storageContext;
48
+ #environment;
43
49
  commissioningController;
44
50
  matterController;
51
+ started = false;
52
+ get storageLocation() {
53
+ return this.#storageLocation;
54
+ }
45
55
  async initialize(resetStorage) {
46
- this.storageLocation = `.matter-shell-${this.nodeNum}`;
47
- this.storage = new import_nodejs.StorageBackendDisk(this.storageLocation, false);
48
- logger.info(`Storage location: ${this.storageLocation} (Directory)`);
49
- this.storageManager = new import_general.StorageManager(this.storage);
50
- await this.storageManager.initialize();
51
- this.storageContext = this.storageManager.createContext("Node");
52
- if (resetStorage) {
53
- this.storage.clearAll([]);
56
+ if (this.#environment) {
57
+ if (this.netInterface !== void 0) {
58
+ this.#environment.vars.set("mdns.networkinterface", this.netInterface);
59
+ }
60
+ const id = `shell-${this.nodeNum.toString()}`;
61
+ this.commissioningController = new import_matter.CommissioningController({
62
+ environment: {
63
+ environment: this.#environment,
64
+ id
65
+ },
66
+ autoConnect: false
67
+ });
68
+ await this.commissioningController.initializeControllerStore();
69
+ const controllerStore = this.#environment.get(import_node.ControllerStore);
70
+ if (resetStorage) {
71
+ await controllerStore.erase();
72
+ }
73
+ this.storageContext = controllerStore.storage.createContext("Node");
74
+ const storageService = this.#environment.get(import_general.StorageService);
75
+ const baseLocation = storageService.location;
76
+ if (baseLocation !== void 0) {
77
+ this.#storageLocation = (0, import_node_path.join)(baseLocation, id);
78
+ }
79
+ } else {
80
+ this.#storageLocation = `.matter-shell-${this.nodeNum}`;
81
+ this.storage = new import_nodejs.StorageBackendDiskAsync(this.#storageLocation, false);
82
+ logger.info(`Storage location: ${this.#storageLocation} (Directory)`);
83
+ this.storageManager = new import_general.StorageManager(this.storage);
84
+ await this.storageManager.initialize();
85
+ this.storageContext = this.storageManager.createContext("Node");
86
+ if (resetStorage) {
87
+ await this.storage.clearAll([]);
88
+ }
89
+ this.matterController = new import_matter.MatterServer(this.storageManager, { mdnsInterface: this.netInterface });
90
+ this.commissioningController = new import_matter.CommissioningController({
91
+ autoConnect: false
92
+ });
93
+ await this.matterController.addCommissioningController(this.commissioningController);
54
94
  }
55
95
  }
56
96
  get Store() {
@@ -61,9 +101,9 @@ class MatterNode {
61
101
  }
62
102
  async close() {
63
103
  await this.matterController?.close();
64
- this.closeStorage();
104
+ await this.closeStorage();
65
105
  }
66
- closeStorage() {
106
+ async closeStorage() {
67
107
  try {
68
108
  this.storage?.close();
69
109
  process.exit(0);
@@ -72,19 +112,18 @@ class MatterNode {
72
112
  }
73
113
  }
74
114
  async start() {
75
- if (this.storageManager === void 0) {
76
- throw new Error("StorageManager not initialized");
77
- }
78
- if (this.matterController !== void 0) {
115
+ if (this.started) {
79
116
  return;
80
117
  }
81
118
  logger.info(`matter.js shell controller started for node ${this.nodeNum}`);
82
- this.matterController = new import_matter.MatterServer(this.storageManager, { mdnsInterface: this.netInterface });
83
- this.commissioningController = new import_matter.CommissioningController({
84
- autoConnect: false
85
- });
86
- await this.matterController.addCommissioningController(this.commissioningController);
87
- await this.matterController.start();
119
+ if (this.matterController !== void 0) {
120
+ await this.matterController.start();
121
+ } else if (this.commissioningController !== void 0) {
122
+ await this.commissioningController.start();
123
+ } else {
124
+ throw new Error("No controller initialized");
125
+ }
126
+ this.started = true;
88
127
  }
89
128
  async connectAndGetNodes(nodeIdStr, connectOptions) {
90
129
  await this.start();
@@ -92,13 +131,20 @@ class MatterNode {
92
131
  if (this.commissioningController === void 0) {
93
132
  throw new Error("CommissioningController not initialized");
94
133
  }
95
- let nodes;
96
134
  if (nodeId === void 0) {
97
- nodes = await this.commissioningController.connect(connectOptions);
98
- } else {
99
- nodes = [await this.commissioningController.connectNode((0, import_datatype.NodeId)(nodeId), connectOptions)];
135
+ return await this.commissioningController.connect(connectOptions);
136
+ }
137
+ const node = await this.commissioningController.connectNode(nodeId, connectOptions);
138
+ if (!node.initialized) {
139
+ await node.events.initialized;
140
+ }
141
+ return [node];
142
+ }
143
+ get controller() {
144
+ if (this.commissioningController === void 0) {
145
+ throw new Error("CommissioningController not initialized. Start first");
100
146
  }
101
- return nodes;
147
+ return this.commissioningController;
102
148
  }
103
149
  async iterateNodeDevices(nodes, callback, endpointId) {
104
150
  for (const node of nodes) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/MatterNode.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,qBAAuD;AACvD,oBAAmC;AACnC,oBAAsD;AACtD,sBAAuB;AAVvB;AAAA;AAAA;AAAA;AAAA;AAcA,MAAM,SAAS,sBAAO,IAAI,MAAM;AAEzB,MAAM,WAAW;AAAA,EASpB,YACqB,SACA,cACnB;AAFmB;AACA;AAAA,EAClB;AAAA,EAXK;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER;AAAA,EACQ;AAAA,EAOR,MAAM,WAAW,cAAuB;AAQpC,SAAK,kBAAkB,iBAAiB,KAAK,OAAO;AACpD,SAAK,UAAU,IAAI,iCAAmB,KAAK,iBAAiB,KAAK;AACjE,WAAO,KAAK,qBAAqB,KAAK,eAAe,cAAc;AACnE,SAAK,iBAAiB,IAAI,8BAAe,KAAK,OAAO;AACrD,UAAM,KAAK,eAAe,WAAW;AACrC,SAAK,iBAAiB,KAAK,eAAe,cAAc,MAAM;AAC9D,QAAI,cAAc;AACd,WAAK,QAAQ,SAAS,CAAC,CAAC;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEA,IAAI,QAAQ;AACR,QAAI,CAAC,KAAK,gBAAgB;AACtB,YAAM,IAAI,MAAM,uBAAuB;AAAA,IAC3C;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,QAAQ;AACV,UAAM,KAAK,kBAAkB,MAAM;AACnC,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,eAAe;AACX,QAAI;AACA,WAAK,SAAS,MAAM;AACpB,cAAQ,KAAK,CAAC;AAAA,IAClB,QAAQ;AACJ,cAAQ,KAAK,CAAC;AAAA,IAClB;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ;AACV,QAAI,KAAK,mBAAmB,QAAW;AACnC,YAAM,IAAI,MAAM,gCAAgC;AAAA,IACpD;AACA,QAAI,KAAK,qBAAqB,QAAW;AACrC;AAAA,IACJ;AACA,WAAO,KAAK,+CAA+C,KAAK,OAAO,EAAE;AAezE,SAAK,mBAAmB,IAAI,2BAAa,KAAK,gBAAgB,EAAE,eAAe,KAAK,aAAa,CAAC;AAClG,SAAK,0BAA0B,IAAI,sCAAwB;AAAA,MACvD,aAAa;AAAA,IACjB,CAAC;AACD,UAAM,KAAK,iBAAiB,2BAA2B,KAAK,uBAAuB;AASnF,UAAM,KAAK,iBAAiB,MAAM;AAAA,EACtC;AAAA,EAEA,MAAM,mBAAmB,WAAoB,gBAAqD;AAC9F,UAAM,KAAK,MAAM;AACjB,UAAM,SAAS,cAAc,aAAY,wBAAO,OAAO,SAAS,CAAC,IAAI;AAErE,QAAI,KAAK,4BAA4B,QAAW;AAC5C,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC7D;AACA,QAAI;AACJ,QAAI,WAAW,QAAW;AACtB,cAAQ,MAAM,KAAK,wBAAwB,QAAQ,cAAc;AAAA,IACrE,OAAO;AACH,cAAQ,CAAC,MAAM,KAAK,wBAAwB,gBAAY,wBAAO,MAAM,GAAG,cAAc,CAAC;AAAA,IAC3F;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,mBACF,OACA,UACA,YACF;AACE,eAAW,QAAQ,OAAO;AACtB,UAAI,UAAU,KAAK,WAAW;AAC9B,UAAI,eAAe,QAAW;AAC1B,kBAAU,QAAQ,OAAO,YAAU,OAAO,WAAW,UAAU;AAAA,MACnE;AAEA,iBAAW,UAAU,SAAS;AAC1B,cAAM,SAAS,QAAQ,IAAI;AAAA,MAC/B;AAAA,IACJ;AAAA,EACJ;AACJ;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/dist/cjs/app.js CHANGED
@@ -105,18 +105,23 @@ async function main() {
105
105
  description: "Logfile to use to log to. By Default debug loglevel is logged to the file. The provided value will be persisted for future runs.",
106
106
  type: "string",
107
107
  default: void 0
108
+ },
109
+ legacyStorage: {
110
+ description: "Use legacy storage structure (pre 0.11)",
111
+ type: "boolean",
112
+ default: false
108
113
  }
109
114
  });
110
115
  },
111
116
  async (argv) => {
112
117
  if (argv.help) return;
113
- const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile } = argv;
114
- theNode = new import_MatterNode.MatterNode(nodeNum, netInterface);
118
+ const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile, legacyStorage } = argv;
119
+ theNode = new import_MatterNode.MatterNode(nodeNum, netInterface, legacyStorage);
115
120
  await theNode.initialize(factoryReset);
116
121
  if (logfile !== void 0) {
117
122
  await theNode.Store.set("LogFile", logfile);
118
123
  }
119
- if (theNode.Store.has("LogFile")) {
124
+ if (await theNode.Store.has("LogFile")) {
120
125
  const storedLogFileName = await theNode.Store.get("LogFile");
121
126
  if (storedLogFileName !== void 0) {
122
127
  import_general.Logger.addLogger("file", await (0, import_nodejs.createFileLogger)(storedLogFileName), {
@@ -139,7 +144,7 @@ async function main() {
139
144
  );
140
145
  }
141
146
  console.log(`Started Node #${nodeNum} (Type: ${nodeType}) ${ble ? "with" : "without"} BLE`);
142
- theShell.start();
147
+ theShell.start(theNode.storageLocation);
143
148
  }
144
149
  ).version(false).scriptName("shell");
145
150
  await yargsInstance.wrap(yargsInstance.terminalWidth()).parseAsync();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/app.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["yargs"]
6
6
  }
@@ -76,29 +76,31 @@ class Shell {
76
76
  }
77
77
  readline;
78
78
  writeStream;
79
- start() {
79
+ start(storageBase) {
80
80
  const history = new Array();
81
- const fileName = `.matter-shell-${this.nodeNum}.history`;
82
- try {
83
- const historyData = (0, import_fs.readFileSync)(fileName, "utf8");
84
- history.push(
85
- ...historyData.split("\n").map((line) => line.trim()).filter((line) => line.length)
86
- );
87
- history.splice(0, -MAX_HISTORY_SIZE);
88
- console.log(`Loaded ${history.length} history entries from ${fileName}`);
89
- } catch (e) {
90
- if (e instanceof Error && "code" in e && e.code !== "ENOENT") {
91
- process.stderr.write(`Error happened during history file read: ${e}
81
+ if (storageBase !== void 0) {
82
+ const fileName = `${storageBase}.history`;
83
+ try {
84
+ const historyData = (0, import_fs.readFileSync)(fileName, "utf8");
85
+ history.push(
86
+ ...historyData.split("\n").map((line) => line.trim()).filter((line) => line.length)
87
+ );
88
+ history.splice(0, -MAX_HISTORY_SIZE);
89
+ console.log(`Loaded ${history.length} history entries from ${fileName}`);
90
+ } catch (e) {
91
+ if (e instanceof Error && "code" in e && e.code !== "ENOENT") {
92
+ process.stderr.write(`Error happened during history file read: ${e}
92
93
  `);
94
+ }
93
95
  }
94
- }
95
- try {
96
- this.writeStream = (0, import_fs.createWriteStream)(fileName, { flags: "w" });
97
- this.writeStream.write(`${history.join("\n")}
96
+ try {
97
+ this.writeStream = (0, import_fs.createWriteStream)(fileName, { flags: "w" });
98
+ this.writeStream.write(`${history.join("\n")}
98
99
  `);
99
- } catch (e) {
100
- process.stderr.write(`Error happened during history file write: ${e}
100
+ } catch (e) {
101
+ process.stderr.write(`Error happened during history file write: ${e}
101
102
  `);
103
+ }
102
104
  }
103
105
  this.readline = import_node_readline.default.createInterface({
104
106
  input: process.stdin,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/shell/Shell.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["readline", "yargs", "cmdCommission", "cmdConfig", "cmdSession", "cmdNodes", "cmdSubscribe", "cmdIdentify", "cmdDiscover", "cmdAttributes", "cmdEvents", "cmdCommands", "cmdTlv"]
6
6
  }
@@ -220,13 +220,23 @@ function commands(theNode) {
220
220
  describe: "node id",
221
221
  type: "string",
222
222
  demandOption: true
223
+ }).options({
224
+ force: {
225
+ describe: "Force unpairing even if node is not online",
226
+ type: "boolean",
227
+ default: false
228
+ }
223
229
  });
224
230
  },
225
231
  async (argv) => {
226
232
  await theNode.start();
227
- const { nodeId } = argv;
228
- const node = (await theNode.connectAndGetNodes(nodeId, { autoSubscribe: false }))[0];
229
- await node.decommission();
233
+ const { nodeId, force } = argv;
234
+ if (force) {
235
+ await theNode.controller.removeNode((0, import_datatype.NodeId)(BigInt(nodeId)), !force);
236
+ } else {
237
+ const node = (await theNode.connectAndGetNodes(nodeId, { autoSubscribe: false }))[0];
238
+ await node.decommission();
239
+ }
230
240
  }
231
241
  ),
232
242
  handler: async (argv) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/shell/cmd_commission.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAoC;AAEpC,qBAAiF;AACjF,sBAAuB;AACvB,oBAA+C;AAG/C,uBAA0C;AAb1C;AAAA;AAAA;AAAA;AAAA;AAee,SAAR,SAA0B,SAAqB;AAClD,SAAO;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,CAAC,UACN,MAEK,QAAQ,QAAQ,6BAA6B,CAAAA,WAAS;AACnD,aACIA,OAEK;AAAA,QACG;AAAA,QACA;AAAA,QACA,CAAAA,WAAS;AACL,iBAAOA,OACF,WAAW,WAAW;AAAA,YACnB,UAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAM;AAAA,UACV,CAAC,EACA,WAAW,MAAM;AAAA,YACd,UAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAM;AAAA,UACV,CAAC,EACA,WAAW,QAAQ;AAAA,YAChB,UAAU;AAAA,YACV,SAAS;AAAA,YACT,MAAM;AAAA,UACV,CAAC;AAAA,QACT;AAAA,QACA,OAAM,SAAQ;AACV,gBAAM;AAAA,YACF;AAAA,YACA,QAAQ;AAAA,YACR;AAAA,YACA;AAAA,YACA,MAAM;AAAA,YACN;AAAA,UACJ,IAAI;AACJ,cAAI,EAAE,cAAc,eAAe,mBAAmB,IAAI;AAE1D,cAAI,OAAO,gBAAgB,UAAU;AACjC,kBAAM,EAAE,oBAAoB,+BAA+B,SAAS,IAChE,qCAAuB,OAAO,WAAW;AAC7C,iCAAqB;AACrB,2BAAe;AACf,4BAAgB;AAAA,UACpB,WAAW,kBAAkB,UAAa,uBAAuB,QAAW;AACxE,4BAAgB;AAAA,UACpB;AAEA,gBAAM,SAAS,cAAc,aAAY,wBAAO,OAAO,SAAS,CAAC,IAAI;AACrE,gBAAM,QAAQ,MAAM;AACpB,cAAI,QAAQ,4BAA4B,QAAW;AAC/C,kBAAM,IAAI,MAAM,yCAAyC;AAAA,UAC7D;AAEA,gBAAM,UAAU;AAAA,YACZ,WAAW;AAAA,cACP,cACI,OAAO,UAAa,WAAW,SACzB,EAAE,IAAI,MAAM,QAAQ,MAAM,MAAM,IAChC;AAAA,cACV,gBACI,eAAe,SACT,EAAE,WAAW,IACb,kBAAkB,SAChB,EAAE,mBAAmB,cAAc,IACnC,uBAAuB,SACrB,EAAE,mBAAmB,IACrB,CAAC;AAAA,cACf,uBAAuB;AAAA,gBACnB;AAAA,gBACA,aAAa;AAAA,cACjB;AAAA,YACJ;AAAA,YACA,UAAU;AAAA,YACV,OAAG,4CAA0B;AAAA,UACjC;AAEA,kBAAQ,gBAAgB;AAAA,YACpB,QAAQ,WAAW,aAAY,wBAAO,MAAM,IAAI;AAAA,YAChD,oBAAoB,oCAAqB,uBAAuB;AAAA;AAAA,YAChE,uBAAuB;AAAA,UAC3B;AAEA,kBAAQ,IAAI,sBAAO,OAAO,OAAO,CAAC;AAElC,cAAI,QAAQ,MAAM,IAAI,UAAU,KAAK,QAAQ,MAAM,IAAI,cAAc,GAAG;AACpE,oBAAQ,cAAc,cAAc;AAAA,cAChC,UAAU,MAAM,QAAQ,MAAM,IAAY,YAAY,EAAE;AAAA,cACxD,iBAAiB,MAAM,QAAQ,MAAM,IAAY,gBAAgB,EAAE;AAAA,YACvE;AAAA,UACJ;AACA,cACI,QAAQ,MAAM,IAAI,YAAY,KAC9B,QAAQ,MAAM,IAAI,0BAA0B,GAC9C;AACE,oBAAQ,cAAc,gBAAgB;AAAA,cAClC,aAAa,MAAM,QAAQ,MAAM,IAAY,cAAc,EAAE;AAAA,cAC7D,oBAAoB,MAAM,QAAQ,MAAM;AAAA,gBACpC;AAAA,gBACA;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAEA,gBAAM,qBACF,MAAM,QAAQ,wBAAwB,eAAe,OAAO;AAEhE,kBAAQ,IAAI,sBAAsB,kBAAkB;AAEpD,gBAAM,OAAO,QAAQ,wBAAwB,cAAc,kBAAkB;AAC7E,cAAI,SAAS,QAAW;AAEpB,kBAAM,IAAI,2BAAY,qCAAqC;AAAA,UAC/D;AAMA,gBAAM,aAAa,KAAK,qBAAqB,gCAAiB;AAC9D,cAAI,eAAe,QAAW;AAC1B,oBAAQ,IAAI,MAAM,WAAW,WAAW,eAAe,IAAI,CAAC;AAC5D,oBAAQ,IAAI,MAAM,WAAW,uBAAuB,CAAC;AAAA,UACzD,OAAO;AACH,oBAAQ,IAAI,wDAAwD;AAAA,UACxE;AAGA,gBAAM,OAAO,KAAK,qBAAqB,sCAAuB;AAC9D,cAAI,SAAS,QAAW;AACpB,oBAAQ,IAAI,MAAM,KAAK,wBAAwB,CAAC;AAAA,UAGpD,OAAO;AACH,oBAAQ,IAAI,8DAA8D;AAAA,UAC9E;AAAA,QACJ;AAAA,MACJ,EACC,QAAQ;AAAA,QACL,aAAa;AAAA,UACT,UAAU;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,QACV;AAAA,QACA,cAAc;AAAA,UACV,UAAU;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,QACV;AAAA,QACA,YAAY;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,QACV;AAAA,QACA,eAAe;AAAA,UACX,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,QACV;AAAA,QACA,oBAAoB;AAAA,UAChB,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,QACV;AAAA,QACA,KAAK;AAAA,UACD,OAAO;AAAA,UACP,aAAa;AAAA,UACb,MAAM;AAAA,UACN,SAAS;AAAA,QACb;AAAA,MACJ,CAAC;AAAA,IAEb,CAAC,EACA;AAAA,MACG;AAAA,MACA;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OACF,WAAW,WAAW;AAAA,UACnB,UAAU;AAAA,UACV,MAAM;AAAA,UACN,cAAc;AAAA,QAClB,CAAC,EACA,WAAW,WAAW;AAAA,UACnB,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,QACb,CAAC;AAAA,MACT;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,EAAE,QAAQ,UAAU,IAAI,IAAI;AAClC,cAAM,QAAQ,MAAM;AACpB,cAAM,QAAQ,MAAM,QAAQ,mBAAmB,QAAQ,EAAE,eAAe,MAAM,CAAC,GAAG,CAAC;AAEnF,cAAM,KAAK,6BAA6B,OAAO;AAE/C,gBAAQ,IAAI,uCAAuC,MAAM,SAAS;AAAA,MACtE;AAAA,IACJ,EACC;AAAA,MACG;AAAA,MACA;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OACF,WAAW,WAAW;AAAA,UACnB,UAAU;AAAA,UACV,MAAM;AAAA,UACN,cAAc;AAAA,QAClB,CAAC,EACA,WAAW,WAAW;AAAA,UACnB,UAAU;AAAA,UACV,MAAM;AAAA,UACN,SAAS;AAAA,QACb,CAAC;AAAA,MACT;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,QAAQ,MAAM;AACpB,cAAM,EAAE,QAAQ,UAAU,IAAI,IAAI;AAClC,cAAM,QAAQ,MAAM,QAAQ,mBAAmB,QAAQ,EAAE,eAAe,MAAM,CAAC,GAAG,CAAC;AACnF,cAAM,OAAO,MAAM,KAAK,gCAAgC,OAAO;AAE/D,gBAAQ,IAAI,0CAA0C,MAAM,SAAS;AACrE,cAAM,EAAE,eAAe,kBAAkB,IAAI;AAE7C,gBAAQ,IAAI,qBAAO,IAAI,aAAa,CAAC;AACrC,gBAAQ;AAAA,UACJ,gFAAgF,aAAa;AAAA,QACjG;AACA,gBAAQ,IAAI,wBAAwB,iBAAiB,EAAE;AAAA,MAC3D;AAAA,IACJ,EACC;AAAA,MACG;AAAA,MACA;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OAAM,WAAW,WAAW;AAAA,UAC/B,UAAU;AAAA,UACV,MAAM;AAAA,UACN,cAAc;AAAA,QAClB,CAAC;AAAA,MACL;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,QAAQ,MAAM;AACpB,cAAM,EAAE,OAAO,IAAI;AACnB,cAAM,QAAQ,MAAM,QAAQ,mBAAmB,QAAQ,EAAE,eAAe,MAAM,CAAC,GAAG,CAAC;AACnF,cAAM,KAAK,aAAa;AAAA,MAC5B;AAAA,IACJ;AAAA,IACR,SAAS,OAAO,SAAc;AAC1B,WAAK,YAAY;AAAA,IACrB;AAAA,EACJ;AACJ;",
4
+ "mappings": "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",
5
5
  "names": ["yargs"]
6
6
  }
@@ -124,12 +124,12 @@ function commands(theNode) {
124
124
  node.logStructure({});
125
125
  }
126
126
  ).command(
127
- "connect <node-id> [min-subscription-interval] [max-subscription-interval]",
127
+ "connect [node-id] [min-subscription-interval] [max-subscription-interval]",
128
128
  "Connects to one or all commissioned nodes",
129
129
  (yargs2) => {
130
130
  return yargs2.positional("node-id", {
131
131
  describe: "node id to connect. Use 'all' to connect to all nodes.",
132
- default: void 0,
132
+ default: "all",
133
133
  type: "string",
134
134
  demandOption: true
135
135
  }).positional("min-subscription-interval", {
@@ -165,14 +165,13 @@ function commands(theNode) {
165
165
  }
166
166
  }
167
167
  ).command(
168
- "disconnect <node-id>",
168
+ "disconnect [node-id]",
169
169
  "Disconnects from one or all nodes",
170
170
  (yargs2) => {
171
171
  return yargs2.positional("node-id", {
172
172
  describe: "node id to disconnect. Use 'all' to disconnect from all nodes.",
173
- default: void 0,
174
- type: "string",
175
- demandOption: true
173
+ default: "all",
174
+ type: "string"
176
175
  });
177
176
  },
178
177
  async (argv) => {
@@ -199,14 +198,13 @@ function commands(theNode) {
199
198
  }
200
199
  }
201
200
  ).command(
202
- "status <node-ids>",
201
+ "status [node-ids]",
203
202
  "Logs the connection status for all or specified nodes",
204
203
  (yargs2) => {
205
204
  return yargs2.positional("node-ids", {
206
205
  describe: "node ids to connect (comma separated list allowed). Use 'all' to log status for all nodes.",
207
- default: void 0,
208
- type: "string",
209
- demandOption: true
206
+ default: "all",
207
+ type: "string"
210
208
  });
211
209
  },
212
210
  async (argv) => {
@@ -230,7 +228,7 @@ function commands(theNode) {
230
228
  } else {
231
229
  const basicInfo = node.basicInformation;
232
230
  console.log(
233
- `Node ${nodeIdToProcess}: Node Status: ${(0, import_general.capitalize)((0, import_general.decamelize)(import_device.NodeStateInformation[node.nodeState], " "))}${basicInfo !== void 0 ? ` (${basicInfo.vendorName} ${basicInfo.productName})` : ""}`
231
+ `Node ${nodeIdToProcess}: Node Status: ${(0, import_general.capitalize)((0, import_general.decamelize)(import_device.NodeStateInformation[node.state], " "))}${basicInfo !== void 0 ? ` (${basicInfo.vendorName} ${basicInfo.productName})` : ""}`
234
232
  );
235
233
  }
236
234
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/shell/cmd_nodes.ts"],
4
- "mappings": "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",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAA+C;AAC/C,sBAAuB;AACvB,oBAAyE;AARzE;AAAA;AAAA;AAAA;AAAA;AAYO,SAAS,4BAAyE;AACrF,SAAO;AAAA,IACH,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,WAAW,YAAY,cAAc,GAAG,MAAM,MACnG,QAAQ;AAAA,MACJ,4BAA4B,UAAU,eAAe,MAAM,IAAI,UAAU,IAAI,SAAS,IAAI,aAAa,eAAe,sBAAO;AAAA,QACzH;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,IACJ,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,WAAW,YAAY,UAAU,GAAG,OAAO,MAC9F,QAAQ;AAAA,MACJ,0BAA0B,UAAU,WAAW,MAAM,IAAI,UAAU,IAAI,SAAS,IAAI,SAAS,mBAAmB,sBAAO;AAAA,QACnH;AAAA,MACJ,CAAC;AAAA,IACL;AAAA,IACJ,0BAA0B,CAAC,YAAY,SAAS;AAC5C,cAAQ,MAAM;AAAA,QACV,KAAK,mCAAqB;AACtB,kBAAQ,IAAI,iCAAiC,UAAU,YAAY;AACnE;AAAA,QACJ,KAAK,mCAAqB;AACtB,kBAAQ,IAAI,iCAAiC,UAAU,eAAe;AACtE;AAAA,QACJ,KAAK,mCAAqB;AACtB,kBAAQ,IAAI,iCAAiC,UAAU,eAAe;AACtE;AAAA,QACJ,KAAK,mCAAqB;AACtB,kBAAQ;AAAA,YACJ,iCAAiC,UAAU;AAAA,UAC/C;AACA;AAAA,QACJ,KAAK,mCAAqB;AACtB,kBAAQ,IAAI,iCAAiC,UAAU,oBAAoB;AAC3E;AAAA,QACJ,KAAK,mCAAqB;AACtB,kBAAQ,IAAI,iCAAiC,UAAU,iBAAiB;AACxE;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AACJ;AAEe,SAAR,SAA0B,SAAqB;AAClD,SAAO;AAAA,IACH,SAAS,CAAC,SAAS,MAAM;AAAA,IACzB,UAAU;AAAA,IACV,SAAS,CAAC,UACN,MAEK;AAAA,MACG,CAAC,KAAK,eAAe;AAAA,MACrB;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OAAM,WAAW,UAAU;AAAA,UAC9B,UAAU;AAAA,UACV,SAAS,CAAC,gBAAgB,WAAW;AAAA,UACrC,SAAS;AAAA,UACT,MAAM;AAAA,QACV,CAAC;AAAA,MACL;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,EAAE,OAAO,IAAI;AACnB,cAAM,QAAQ,MAAM;AACpB,YAAI,QAAQ,4BAA4B,QAAW;AAC/C,gBAAM,IAAI,MAAM,yCAAyC;AAAA,QAC7D;AACA,gBAAQ,QAAQ;AAAA,UACZ,KAAK,gBAAgB;AACjB,kBAAM,UAAU,QAAQ,wBAAwB,4BAA4B;AAC5E,oBACK,IAAI,aAAW;AAAA,cACZ,GAAG;AAAA,cACH,QAAQ,OAAO,OAAO,SAAS;AAAA,YACnC,EAAE,EACD,QAAQ,YAAU;AACf,sBAAQ,IAAI,MAAM;AAAA,YACtB,CAAC;AACL;AAAA,UACJ;AAAA,UACA,KAAK,aAAa;AACd,kBAAM,UAAU,QAAQ,wBACnB,qBAAqB,EACrB,OAAO,YAAU,CAAC,CAAC,QAAQ,yBAAyB,cAAc,MAAM,CAAC;AAC9E,oBAAQ,IAAI,QAAQ,IAAI,YAAU,OAAO,SAAS,CAAC,CAAC;AACpD;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,EACC;AAAA,MACG;AAAA,MACA;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OAAM,WAAW,WAAW;AAAA,UAC/B,UAAU;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,QACV,CAAC;AAAA,MACL;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,EAAE,OAAO,IAAI;AACnB,cAAM,QAAQ,MAAM,QAAQ,mBAAmB,MAAM,GAAG,CAAC;AAEzD,gBAAQ,IAAI,8BAA8B,KAAK,OAAO,SAAS,CAAC;AAChE,aAAK,aAAa,CAAC,CAAC;AAAA,MACxB;AAAA,IACJ,EACC;AAAA,MACG;AAAA,MACA;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OACF,WAAW,WAAW;AAAA,UACnB,UAAU;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,UACN,cAAc;AAAA,QAClB,CAAC,EACA,WAAW,6BAA6B;AAAA,UACrC,UACI;AAAA,UACJ,MAAM;AAAA,QACV,CAAC,EACA,WAAW,6BAA6B;AAAA,UACrC,UACI;AAAA,UACJ,MAAM;AAAA,QACV,CAAC;AAAA,MACT;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,EAAE,QAAQ,WAAW,yBAAyB,wBAAwB,IAAI;AAChF,cAAM,QAAQ,MAAM;AACpB,YAAI,QAAQ,4BAA4B,QAAW;AAC/C,gBAAM,IAAI,MAAM,yCAAyC;AAAA,QAC7D;AACA,YAAI,UAAU,QAAQ,wBAAwB,qBAAqB;AACnE,YAAI,cAAc,OAAO;AACrB,gBAAM,gBAAY,wBAAO,OAAO,SAAS,CAAC;AAC1C,oBAAU,QAAQ,OAAO,YAAU,WAAW,SAAS;AACvD,cAAI,CAAC,QAAQ,QAAQ;AACjB,kBAAM,IAAI,MAAM,QAAQ,SAAS,mBAAmB;AAAA,UACxD;AAAA,QACJ;AAEA,cAAM,gBAAgB,4BAA4B;AAElD,mBAAW,mBAAmB,SAAS;AACnC,gBAAM,QAAQ,wBAAwB,YAAY,iBAAiB;AAAA,YAC/D;AAAA,YACA,kCAAkC,gBAAgB,0BAA0B;AAAA,YAC5E,oCAAoC,gBAAgB,0BAA0B;AAAA,YAC9E,GAAG,0BAA0B;AAAA,UACjC,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ,EACC;AAAA,MACG;AAAA,MACA;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OAAM,WAAW,WAAW;AAAA,UAC/B,UAAU;AAAA,UACV,SAAS;AAAA,UACT,MAAM;AAAA,QACV,CAAC;AAAA,MACL;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,EAAE,QAAQ,UAAU,IAAI;AAC9B,YAAI,QAAQ,4BAA4B,QAAW;AAC/C,kBAAQ,IAAI,oDAAoD;AAChE;AAAA,QACJ;AAEA,YAAI,UAAU,QAAQ,wBAAwB,qBAAqB;AACnE,YAAI,cAAc,OAAO;AACrB,gBAAM,gBAAY,wBAAO,OAAO,SAAS,CAAC;AAC1C,oBAAU,QAAQ,OAAO,YAAU,WAAW,SAAS;AACvD,cAAI,CAAC,QAAQ,QAAQ;AACjB,kBAAM,IAAI,MAAM,QAAQ,SAAS,mBAAmB;AAAA,UACxD;AAAA,QACJ;AAEA,mBAAW,mBAAmB,SAAS;AACnC,gBAAM,OAAO,QAAQ,wBAAwB,cAAc,eAAe;AAC1E,cAAI,SAAS,QAAW;AACpB,oBAAQ,IAAI,QAAQ,eAAe,gBAAgB;AACnD;AAAA,UACJ;AACA,gBAAM,KAAK,WAAW;AAAA,QAC1B;AAAA,MACJ;AAAA,IACJ,EACC;AAAA,MACG;AAAA,MACA;AAAA,MACA,CAAAA,WAAS;AACL,eAAOA,OAAM,WAAW,YAAY;AAAA,UAChC,UACI;AAAA,UACJ,SAAS;AAAA,UACT,MAAM;AAAA,QACV,CAAC;AAAA,MACL;AAAA,MACA,OAAM,SAAQ;AACV,cAAM,EAAE,SAAS,UAAU,IAAI;AAC/B,cAAM,QAAQ,MAAM;AACpB,YAAI,QAAQ,4BAA4B,QAAW;AAC/C,gBAAM,IAAI,MAAM,yCAAyC;AAAA,QAC7D;AACA,YAAI,UAAU,QAAQ,wBAAwB,qBAAqB;AACnE,YAAI,cAAc,OAAO;AACrB,gBAAM,aAAa,UAAU,MAAM,GAAG,EAAE,IAAI,gBAAU,wBAAO,OAAO,MAAM,CAAC,CAAC;AAC5E,oBAAU,QAAQ,OAAO,YAAU,WAAW,SAAS,MAAM,CAAC;AAC9D,cAAI,CAAC,QAAQ,QAAQ;AACjB,kBAAM,IAAI,MAAM,QAAQ,SAAS,mBAAmB;AAAA,UACxD;AAAA,QACJ;AAEA,mBAAW,mBAAmB,SAAS;AACnC,gBAAM,OAAO,QAAQ,wBAAwB,cAAc,eAAe;AAC1E,cAAI,SAAS,QAAW;AACpB,oBAAQ,IAAI,QAAQ,eAAe,mBAAmB;AAAA,UAC1D,OAAO;AACH,kBAAM,YAAY,KAAK;AACvB,oBAAQ;AAAA,cACJ,QAAQ,eAAe,sBAAkB,+BAAW,2BAAW,mCAAqB,KAAK,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,cAAc,SAAY,KAAK,UAAU,UAAU,IAAI,UAAU,WAAW,MAAM,EAAE;AAAA,YACjM;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IACR,SAAS,OAAO,SAAc;AAC1B,WAAK,YAAY;AAAA,IACrB;AAAA,EACJ;AACJ;",
5
5
  "names": ["yargs"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/nodejs-shell",
3
- "version": "0.11.0-alpha.0-20241015-ae8e54af2",
3
+ "version": "0.11.0-alpha.0-20241017-fa6aca0e9",
4
4
  "description": "Shell app for Matter controller",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,11 +36,11 @@
36
36
  "#types": "@matter/types"
37
37
  },
38
38
  "dependencies": {
39
- "@matter/general": "0.11.0-alpha.0-20241015-ae8e54af2",
40
- "@matter/nodejs": "0.11.0-alpha.0-20241015-ae8e54af2",
41
- "@matter/nodejs-ble": "0.11.0-alpha.0-20241015-ae8e54af2",
42
- "@matter/tools": "0.11.0-alpha.0-20241015-ae8e54af2",
43
- "@project-chip/matter.js": "0.11.0-alpha.0-20241015-ae8e54af2",
39
+ "@matter/general": "0.11.0-alpha.0-20241017-fa6aca0e9",
40
+ "@matter/nodejs": "0.11.0-alpha.0-20241017-fa6aca0e9",
41
+ "@matter/nodejs-ble": "0.11.0-alpha.0-20241017-fa6aca0e9",
42
+ "@matter/tools": "0.11.0-alpha.0-20241017-fa6aca0e9",
43
+ "@project-chip/matter.js": "0.11.0-alpha.0-20241017-fa6aca0e9",
44
44
  "yargs": "^17.7.2"
45
45
  },
46
46
  "engines": {
package/src/MatterNode.ts CHANGED
@@ -5,28 +5,41 @@
5
5
  */
6
6
 
7
7
  // Include this first to auto-register Crypto, Network and Time Node.js implementations
8
- import { Logger, StorageContext, StorageManager } from "@matter/general";
9
- import { StorageBackendDisk } from "@matter/nodejs";
8
+ import { Environment, Logger, StorageContext, StorageManager, StorageService } from "@matter/general";
9
+ import { ControllerStore } from "@matter/node";
10
+ import { StorageBackendDiskAsync } from "@matter/nodejs";
10
11
  import { CommissioningController, MatterServer } from "@project-chip/matter.js";
11
12
  import { NodeId } from "@project-chip/matter.js/datatype";
12
13
  import { CommissioningControllerNodeOptions, PairedNode } from "@project-chip/matter.js/device";
13
14
  import { EndpointInterface } from "@project-chip/matter.js/endpoint";
15
+ import { join } from "node:path";
14
16
 
15
17
  const logger = Logger.get("Node");
16
18
 
17
19
  export class MatterNode {
18
- private storageLocation?: string;
19
- private storage?: StorageBackendDisk;
20
+ #storageLocation?: string;
21
+ private storage?: StorageBackendDiskAsync;
20
22
  private storageManager?: StorageManager;
21
23
  private storageContext?: StorageContext;
22
24
 
25
+ #environment?: Environment;
23
26
  commissioningController?: CommissioningController;
24
27
  private matterController?: MatterServer;
28
+ private started = false;
25
29
 
26
30
  constructor(
27
31
  private readonly nodeNum: number,
28
32
  private readonly netInterface?: string,
29
- ) {}
33
+ useLegacyStorage = true,
34
+ ) {
35
+ if (!useLegacyStorage) {
36
+ this.#environment = Environment.default;
37
+ }
38
+ }
39
+
40
+ get storageLocation() {
41
+ return this.#storageLocation;
42
+ }
30
43
 
31
44
  async initialize(resetStorage: boolean) {
32
45
  /**
@@ -36,14 +49,49 @@ export class MatterNode {
36
49
  * but you can choose a different storage backend as long as it implements the required API.
37
50
  */
38
51
 
39
- this.storageLocation = `.matter-shell-${this.nodeNum}`;
40
- this.storage = new StorageBackendDisk(this.storageLocation, false);
41
- logger.info(`Storage location: ${this.storageLocation} (Directory)`);
42
- this.storageManager = new StorageManager(this.storage);
43
- await this.storageManager.initialize();
44
- this.storageContext = this.storageManager.createContext("Node");
45
- if (resetStorage) {
46
- this.storage.clearAll([]);
52
+ if (this.#environment) {
53
+ if (this.netInterface !== undefined) {
54
+ this.#environment.vars.set("mdns.networkinterface", this.netInterface);
55
+ }
56
+ // Build up the "Not-so-legacy" Controller
57
+ const id = `shell-${this.nodeNum.toString()}`;
58
+ this.commissioningController = new CommissioningController({
59
+ environment: {
60
+ environment: this.#environment,
61
+ id,
62
+ },
63
+ autoConnect: false,
64
+ });
65
+ await this.commissioningController.initializeControllerStore();
66
+
67
+ const controllerStore = this.#environment.get(ControllerStore);
68
+ if (resetStorage) {
69
+ await controllerStore.erase();
70
+ }
71
+ this.storageContext = controllerStore.storage.createContext("Node");
72
+
73
+ const storageService = this.#environment.get(StorageService);
74
+ const baseLocation = storageService.location;
75
+ if (baseLocation !== undefined) {
76
+ this.#storageLocation = join(baseLocation, id);
77
+ }
78
+ } else {
79
+ this.#storageLocation = `.matter-shell-${this.nodeNum}`;
80
+ this.storage = new StorageBackendDiskAsync(this.#storageLocation, false);
81
+ logger.info(`Storage location: ${this.#storageLocation} (Directory)`);
82
+ this.storageManager = new StorageManager(this.storage);
83
+ await this.storageManager.initialize();
84
+ this.storageContext = this.storageManager.createContext("Node");
85
+ if (resetStorage) {
86
+ await this.storage.clearAll([]);
87
+ }
88
+
89
+ // Build up the legacy Controller
90
+ this.matterController = new MatterServer(this.storageManager, { mdnsInterface: this.netInterface });
91
+ this.commissioningController = new CommissioningController({
92
+ autoConnect: false,
93
+ });
94
+ await this.matterController.addCommissioningController(this.commissioningController);
47
95
  }
48
96
  }
49
97
 
@@ -56,10 +104,10 @@ export class MatterNode {
56
104
 
57
105
  async close() {
58
106
  await this.matterController?.close();
59
- this.closeStorage();
107
+ await this.closeStorage();
60
108
  }
61
109
 
62
- closeStorage() {
110
+ async closeStorage() {
63
111
  try {
64
112
  this.storage?.close();
65
113
  process.exit(0);
@@ -69,41 +117,19 @@ export class MatterNode {
69
117
  }
70
118
 
71
119
  async start() {
72
- if (this.storageManager === undefined) {
73
- throw new Error("StorageManager not initialized"); // Should never happen
74
- }
75
- if (this.matterController !== undefined) {
120
+ if (this.started) {
76
121
  return;
77
122
  }
78
123
  logger.info(`matter.js shell controller started for node ${this.nodeNum}`);
79
124
 
80
- /**
81
- * Create Matter Server and Controller Node
82
- *
83
- * To allow the device to be announced, found, paired and operated we need a MatterServer instance and add a
84
- * CommissioningController to it and add the just created device instance to it.
85
- * The Controller node defines the port where the server listens for the UDP packages of the Matter protocol
86
- * and initializes deice specific certificates and such.
87
- *
88
- * The below logic also adds command handlers for commands of clusters that normally are handled internally
89
- * like testEventTrigger (General Diagnostic Cluster) that can be implemented with the logic when these commands
90
- * are called.
91
- */
92
-
93
- this.matterController = new MatterServer(this.storageManager, { mdnsInterface: this.netInterface });
94
- this.commissioningController = new CommissioningController({
95
- autoConnect: false,
96
- });
97
- await this.matterController.addCommissioningController(this.commissioningController);
98
-
99
- /**
100
- * Start the Matter Server
101
- *
102
- * After everything was plugged together we can start the server. When not delayed announcement is set for the
103
- * CommissioningServer node then this command also starts the announcement of the device into the network.
104
- */
105
-
106
- await this.matterController.start();
125
+ if (this.matterController !== undefined) {
126
+ await this.matterController.start();
127
+ } else if (this.commissioningController !== undefined) {
128
+ await this.commissioningController.start();
129
+ } else {
130
+ throw new Error("No controller initialized");
131
+ }
132
+ this.started = true;
107
133
  }
108
134
 
109
135
  async connectAndGetNodes(nodeIdStr?: string, connectOptions?: CommissioningControllerNodeOptions) {
@@ -113,13 +139,23 @@ export class MatterNode {
113
139
  if (this.commissioningController === undefined) {
114
140
  throw new Error("CommissioningController not initialized");
115
141
  }
116
- let nodes: PairedNode[];
142
+
117
143
  if (nodeId === undefined) {
118
- nodes = await this.commissioningController.connect(connectOptions);
119
- } else {
120
- nodes = [await this.commissioningController.connectNode(NodeId(nodeId), connectOptions)];
144
+ return await this.commissioningController.connect(connectOptions);
145
+ }
146
+
147
+ const node = await this.commissioningController.connectNode(nodeId, connectOptions);
148
+ if (!node.initialized) {
149
+ await node.events.initialized;
150
+ }
151
+ return [node];
152
+ }
153
+
154
+ get controller() {
155
+ if (this.commissioningController === undefined) {
156
+ throw new Error("CommissioningController not initialized. Start first");
121
157
  }
122
- return nodes;
158
+ return this.commissioningController;
123
159
  }
124
160
 
125
161
  async iterateNodeDevices(
package/src/app.ts CHANGED
@@ -86,20 +86,25 @@ async function main() {
86
86
  type: "string",
87
87
  default: undefined,
88
88
  },
89
+ legacyStorage: {
90
+ description: "Use legacy storage structure (pre 0.11)",
91
+ type: "boolean",
92
+ default: false,
93
+ },
89
94
  });
90
95
  },
91
96
  async argv => {
92
97
  if (argv.help) return;
93
98
 
94
- const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile } = argv;
99
+ const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile, legacyStorage } = argv;
95
100
 
96
- theNode = new MatterNode(nodeNum, netInterface);
101
+ theNode = new MatterNode(nodeNum, netInterface, legacyStorage);
97
102
  await theNode.initialize(factoryReset);
98
103
 
99
104
  if (logfile !== undefined) {
100
105
  await theNode.Store.set("LogFile", logfile);
101
106
  }
102
- if (theNode.Store.has("LogFile")) {
107
+ if (await theNode.Store.has("LogFile")) {
103
108
  const storedLogFileName = await theNode.Store.get<string>("LogFile");
104
109
  if (storedLogFileName !== undefined) {
105
110
  Logger.addLogger("file", await createFileLogger(storedLogFileName), {
@@ -128,7 +133,7 @@ async function main() {
128
133
  }
129
134
 
130
135
  console.log(`Started Node #${nodeNum} (Type: ${nodeType}) ${ble ? "with" : "without"} BLE`);
131
- theShell.start();
136
+ theShell.start(theNode.storageLocation);
132
137
  },
133
138
  )
134
139
  .version(false)
@@ -53,31 +53,32 @@ export class Shell {
53
53
  public prompt: string,
54
54
  ) {}
55
55
 
56
- start() {
56
+ start(storageBase?: string) {
57
57
  const history = new Array<string>();
58
- const fileName = `.matter-shell-${this.nodeNum}.history`;
59
- try {
60
- const historyData = readFileSync(fileName, "utf8");
61
- history.push(
62
- ...historyData
63
- .split("\n")
64
- .map(line => line.trim())
65
- .filter(line => line.length),
66
- );
67
- history.splice(0, -MAX_HISTORY_SIZE);
68
- console.log(`Loaded ${history.length} history entries from ${fileName}`);
69
- } catch (e) {
70
- if (e instanceof Error && "code" in e && e.code !== "ENOENT") {
71
- process.stderr.write(`Error happened during history file read: ${e}\n`);
58
+ if (storageBase !== undefined) {
59
+ const fileName = `${storageBase}.history`;
60
+ try {
61
+ const historyData = readFileSync(fileName, "utf8");
62
+ history.push(
63
+ ...historyData
64
+ .split("\n")
65
+ .map(line => line.trim())
66
+ .filter(line => line.length),
67
+ );
68
+ history.splice(0, -MAX_HISTORY_SIZE);
69
+ console.log(`Loaded ${history.length} history entries from ${fileName}`);
70
+ } catch (e) {
71
+ if (e instanceof Error && "code" in e && e.code !== "ENOENT") {
72
+ process.stderr.write(`Error happened during history file read: ${e}\n`);
73
+ }
74
+ }
75
+ try {
76
+ this.writeStream = createWriteStream(fileName, { flags: "w" });
77
+ this.writeStream.write(`${history.join("\n")}\n`);
78
+ } catch (e) {
79
+ process.stderr.write(`Error happened during history file write: ${e}\n`);
72
80
  }
73
81
  }
74
- try {
75
- this.writeStream = createWriteStream(fileName, { flags: "w" });
76
- this.writeStream.write(`${history.join("\n")}\n`);
77
- } catch (e) {
78
- process.stderr.write(`Error happened during history file write: ${e}\n`);
79
- }
80
-
81
82
  this.readline = readline.createInterface({
82
83
  input: process.stdin,
83
84
  output: process.stdout,
@@ -253,17 +253,29 @@ export default function commands(theNode: MatterNode) {
253
253
  "unpair <node-id>",
254
254
  "Unpair/Decommission a node",
255
255
  yargs => {
256
- return yargs.positional("node-id", {
257
- describe: "node id",
258
- type: "string",
259
- demandOption: true,
260
- });
256
+ return yargs
257
+ .positional("node-id", {
258
+ describe: "node id",
259
+ type: "string",
260
+ demandOption: true,
261
+ })
262
+ .options({
263
+ force: {
264
+ describe: "Force unpairing even if node is not online",
265
+ type: "boolean",
266
+ default: false,
267
+ },
268
+ });
261
269
  },
262
270
  async argv => {
263
271
  await theNode.start();
264
- const { nodeId } = argv;
265
- const node = (await theNode.connectAndGetNodes(nodeId, { autoSubscribe: false }))[0];
266
- await node.decommission();
272
+ const { nodeId, force } = argv;
273
+ if (force) {
274
+ await theNode.controller.removeNode(NodeId(BigInt(nodeId)), !force);
275
+ } else {
276
+ const node = (await theNode.connectAndGetNodes(nodeId, { autoSubscribe: false }))[0];
277
+ await node.decommission();
278
+ }
267
279
  },
268
280
  ),
269
281
  handler: async (argv: any) => {
@@ -117,13 +117,13 @@ export default function commands(theNode: MatterNode) {
117
117
  },
118
118
  )
119
119
  .command(
120
- "connect <node-id> [min-subscription-interval] [max-subscription-interval]",
120
+ "connect [node-id] [min-subscription-interval] [max-subscription-interval]",
121
121
  "Connects to one or all commissioned nodes",
122
122
  yargs => {
123
123
  return yargs
124
124
  .positional("node-id", {
125
125
  describe: "node id to connect. Use 'all' to connect to all nodes.",
126
- default: undefined,
126
+ default: "all",
127
127
  type: "string",
128
128
  demandOption: true,
129
129
  })
@@ -166,14 +166,13 @@ export default function commands(theNode: MatterNode) {
166
166
  },
167
167
  )
168
168
  .command(
169
- "disconnect <node-id>",
169
+ "disconnect [node-id]",
170
170
  "Disconnects from one or all nodes",
171
171
  yargs => {
172
172
  return yargs.positional("node-id", {
173
173
  describe: "node id to disconnect. Use 'all' to disconnect from all nodes.",
174
- default: undefined,
174
+ default: "all",
175
175
  type: "string",
176
- demandOption: true,
177
176
  });
178
177
  },
179
178
  async argv => {
@@ -203,15 +202,14 @@ export default function commands(theNode: MatterNode) {
203
202
  },
204
203
  )
205
204
  .command(
206
- "status <node-ids>",
205
+ "status [node-ids]",
207
206
  "Logs the connection status for all or specified nodes",
208
207
  yargs => {
209
208
  return yargs.positional("node-ids", {
210
209
  describe:
211
210
  "node ids to connect (comma separated list allowed). Use 'all' to log status for all nodes.",
212
- default: undefined,
211
+ default: "all",
213
212
  type: "string",
214
- demandOption: true,
215
213
  });
216
214
  },
217
215
  async argv => {
@@ -236,7 +234,7 @@ export default function commands(theNode: MatterNode) {
236
234
  } else {
237
235
  const basicInfo = node.basicInformation;
238
236
  console.log(
239
- `Node ${nodeIdToProcess}: Node Status: ${capitalize(decamelize(NodeStateInformation[node.nodeState], " "))}${basicInfo !== undefined ? ` (${basicInfo.vendorName} ${basicInfo.productName})` : ""}`,
237
+ `Node ${nodeIdToProcess}: Node Status: ${capitalize(decamelize(NodeStateInformation[node.state], " "))}${basicInfo !== undefined ? ` (${basicInfo.vendorName} ${basicInfo.productName})` : ""}`,
240
238
  );
241
239
  }
242
240
  }