@matter-server/ws-controller 0.5.15 → 0.6.0

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.
@@ -70,7 +70,7 @@ import { pingIp } from "../util/network.js";
70
70
  import { CustomClusterPoller } from "./CustomClusterPoller.js";
71
71
  import { Nodes } from "./Nodes.js";
72
72
  const logger = Logger.get("ControllerCommandHandler");
73
- const RECONNECT_TIMEOUT = Minutes(5);
73
+ const RECONNECT_TIMEOUT = Minutes(3);
74
74
  const FULL_UPDATE_CLUSTER_IDS = /* @__PURE__ */ new Set([
75
75
  BasicInformation.Cluster.id,
76
76
  BridgedDeviceBasicInformation.Cluster.id
@@ -1 +1 @@
1
- {"version":3,"file":"LegacyDataInjector.d.ts","sourceRoot":"","sources":["../../../src/controller/LegacyDataInjector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,KAAK,EACL,MAAM,EASN,cAAc,EACd,cAAc,EAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAA2C,MAAM,uBAAuB,CAAC;AAYtG;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,sBAAsB;IACnC,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,sFAAsF;IACtF,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,QAAQ,EAAE,KAAK,CAAC;IAChB,6CAA6C;IAC7C,aAAa,EAAE,KAAK,CAAC;IACrB,mDAAmD;IACnD,qBAAqB,EAAE,KAAK,CAAC;IAC7B,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,sDAAsD;IACtD,eAAe,EAAE,KAAK,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,uBAAuB,EAAE,SAAS,EAAE,CAAC;CACxC;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,iCAAiC,GAAG,oBAAoB,CAAC,aAAa,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC7B,WAAW,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC;IACjD,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,yBAAiB,kBAAkB,CAAC;IAUhC,SAAsB,iBAAiB,CACnC,kBAAkB,EAAE,cAAc,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,oBAAoB,CAAC,aAAa,EAClD,UAAU,CAAC,EAAE,sBAAsB,iBA8EtC;IAoBD,SAAsB,cAAc,CAChC,WAAW,EAAE,cAAc,EAC3B,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,WAAW,CAAC,EAAE,MAAM,oBAwBvB;CA2MJ"}
1
+ {"version":3,"file":"LegacyDataInjector.d.ts","sourceRoot":"","sources":["../../../src/controller/LegacyDataInjector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,KAAK,EACL,MAAM,EASN,cAAc,EACd,cAAc,EAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAA2C,MAAM,uBAAuB,CAAC;AAYtG;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,sBAAsB;IACnC,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,sFAAsF;IACtF,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,QAAQ,EAAE,KAAK,CAAC;IAChB,6CAA6C;IAC7C,aAAa,EAAE,KAAK,CAAC;IACrB,mDAAmD;IACnD,qBAAqB,EAAE,KAAK,CAAC;IAC7B,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,KAAK,CAAC;IAC3B,sDAAsD;IACtD,eAAe,EAAE,KAAK,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,uBAAuB,EAAE,SAAS,EAAE,CAAC;CACxC;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC9C,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACzC;AAED,MAAM,MAAM,iCAAiC,GAAG,oBAAoB,CAAC,aAAa,CAAC;AAEnF,MAAM,WAAW,gBAAgB;IAC7B,WAAW,CAAC,EAAE,oBAAoB,CAAC,aAAa,CAAC;IACjD,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED,yBAAiB,kBAAkB,CAAC;IAUhC,SAAsB,iBAAiB,CACnC,kBAAkB,EAAE,cAAc,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,oBAAoB,CAAC,aAAa,EAClD,UAAU,CAAC,EAAE,sBAAsB,iBA8EtC;IAoBD,SAAsB,cAAc,CAChC,WAAW,EAAE,cAAc,EAC3B,QAAQ,CAAC,EAAE,gBAAgB,EAC3B,WAAW,CAAC,EAAE,MAAM,oBAwBvB;CA6MJ"}
@@ -136,6 +136,7 @@ var LegacyDataInjector;
136
136
  async function injectAsFullInjection(baseStorage, nodesListStorage, nodeData) {
137
137
  const commissionedNodes = new Array();
138
138
  let injectedNodes = 0;
139
+ const writes = new Array();
139
140
  for (const [nodeId, nodeDetails] of Object.entries(nodeData.nodes)) {
140
141
  const nodeStorage = baseStorage.createContext(`node-${nodeId}`);
141
142
  if (nodeId !== nodeDetails.node_id.toString()) {
@@ -148,12 +149,11 @@ var LegacyDataInjector;
148
149
  continue;
149
150
  }
150
151
  logger.info(`Injecting node ${nodeId} into storage`);
151
- const nodeWrites = new Array();
152
+ let currentEndpointId;
153
+ let currentClusterId;
154
+ let endpointStorage;
155
+ let clusterStorage;
152
156
  for (const [attributeKey, value] of attributes) {
153
- let currentEndpointId;
154
- let currentClusterId;
155
- let endpointStorage;
156
- let clusterStorage;
157
157
  const [endpointId, clusterId, attributeId] = attributeKey.split("/");
158
158
  if (currentEndpointId !== endpointId) {
159
159
  endpointStorage = nodeStorage.createContext(endpointId);
@@ -171,7 +171,7 @@ var LegacyDataInjector;
171
171
  newNode = false;
172
172
  injectedNodes++;
173
173
  }
174
- nodeWrites.push(clusterStorage.set("__version__", 1));
174
+ writes.push(clusterStorage.set("__version__", 1));
175
175
  }
176
176
  const clusterModel = ClusterMap[clusterId];
177
177
  const model = clusterModel?.attributes?.[attributeId];
@@ -180,13 +180,13 @@ var LegacyDataInjector;
180
180
  logger.debug(
181
181
  `Node ${nodeId}: Attribute ${attributeKey}, unknown featuremap converted to empty featuremap`
182
182
  );
183
- nodeWrites.push(clusterStorage.set(attributeId, { value: {} }));
183
+ writes.push(clusterStorage.set(attributeId, { value: {} }));
184
184
  } else if (isPrimitiveType(value) || Array.isArray(value) && value.every(isPrimitiveType)) {
185
185
  logger.debug(
186
186
  `Node ${nodeId}: Attribute ${attributeKey}, unknown primary type converted generically`,
187
187
  value
188
188
  );
189
- nodeWrites.push(clusterStorage.set(attributeId, { value }));
189
+ writes.push(clusterStorage.set(attributeId, { value }));
190
190
  } else {
191
191
  logger.debug(
192
192
  `Node ${nodeId}: Attribute ${attributeKey}, not found in and unclear value. Skipping injection.`,
@@ -196,7 +196,7 @@ var LegacyDataInjector;
196
196
  } else {
197
197
  const convertedValue = isObject(value) && ("TLVValue" in value || "Reason" in value) ? void 0 : convertWebSocketTagBasedToMatter(value, model, clusterModel.model);
198
198
  if (convertedValue !== void 0) {
199
- nodeWrites.push(
199
+ writes.push(
200
200
  clusterStorage.set(attributeId, { value: convertedValue })
201
201
  );
202
202
  } else {
@@ -204,8 +204,10 @@ var LegacyDataInjector;
204
204
  }
205
205
  }
206
206
  }
207
- await Promise.allSettled(nodeWrites);
208
- nodeWrites.length = 0;
207
+ }
208
+ if (writes.length) {
209
+ logger.info(`... wait for all ${writes.length} records to be written ... be patient!`);
210
+ await Promise.allSettled(writes);
209
211
  }
210
212
  if (injectedNodes > 0) {
211
213
  const knownNodes = await nodesListStorage.get("commissionedNodes", []);
@@ -221,6 +223,7 @@ var LegacyDataInjector;
221
223
  async function injectAsDirectInjection(baseStorage, nodesStorage, nodeData, fabricIndex) {
222
224
  const commissionedNodes = new Array();
223
225
  let injectedNodes = 0;
226
+ const writes = new Array();
224
227
  let peerCounter = 1;
225
228
  for (const [nodeId, nodeDetails] of Object.entries(nodeData.nodes)) {
226
229
  const peerId = `peer${peerCounter++}`;
@@ -232,18 +235,15 @@ var LegacyDataInjector;
232
235
  commissionedNodes.push([NodeId(BigInt(nodeId)), {}]);
233
236
  let newNode = true;
234
237
  logger.info(`Injecting node ${nodeId} directly into peer storage as ${peerId}`);
235
- const nodeWrites = new Array();
236
- nodeWrites.push(
238
+ writes.push(
237
239
  peerStorage.createContext("0").createContext("commissioning").set("peerAddress", PeerAddress({ fabricIndex, nodeId: NodeId(BigInt(nodeId)) }))
238
240
  );
239
- nodeWrites.push(
240
- peerStorage.createContext("0").createContext("commissioning").set("discoveredAt", Time.nowMs)
241
- );
241
+ writes.push(peerStorage.createContext("0").createContext("commissioning").set("discoveredAt", Time.nowMs));
242
+ let currentEndpointId;
243
+ let currentClusterId;
244
+ let endpointStorage;
245
+ let clusterStorage;
242
246
  for (const [attributeKey, value] of Object.entries(nodeDetails.attributes)) {
243
- let currentEndpointId;
244
- let currentClusterId;
245
- let endpointStorage;
246
- let clusterStorage;
247
247
  const [endpointId, clusterId, attributeId] = attributeKey.split("/");
248
248
  if (currentEndpointId !== endpointId) {
249
249
  endpointStorage = peerStorage.createContext(endpointId);
@@ -254,13 +254,13 @@ var LegacyDataInjector;
254
254
  clusterStorage = endpointStorage.createContext(clusterId);
255
255
  currentClusterId = clusterId;
256
256
  if (newNode) {
257
- nodeWrites.push(
257
+ writes.push(
258
258
  legacyNodeStorage.createContext(endpointId).createContext(clusterId).set("__version__", 1)
259
259
  );
260
260
  newNode = false;
261
261
  injectedNodes++;
262
262
  }
263
- nodeWrites.push(clusterStorage.set("__version__", 1));
263
+ writes.push(clusterStorage.set("__version__", 1));
264
264
  }
265
265
  const clusterModel = ClusterMap[clusterId];
266
266
  const model = clusterModel?.attributes?.[attributeId];
@@ -269,13 +269,13 @@ var LegacyDataInjector;
269
269
  logger.debug(
270
270
  `Node ${nodeId}: Attribute ${attributeKey}, unknown featuremap converted to empty featuremap`
271
271
  );
272
- nodeWrites.push(clusterStorage.set(attributeId, {}));
272
+ writes.push(clusterStorage.set(attributeId, {}));
273
273
  } else if (isPrimitiveType(value) || Array.isArray(value) && value.every(isPrimitiveType)) {
274
274
  logger.debug(
275
275
  `Node ${nodeId}: Attribute ${attributeKey}, unknown primary type converted generically`,
276
276
  value
277
277
  );
278
- nodeWrites.push(clusterStorage.set(attributeId, value));
278
+ writes.push(clusterStorage.set(attributeId, value));
279
279
  } else {
280
280
  logger.debug(
281
281
  `Node ${nodeId}: Attribute ${attributeKey}, not found in and unclear value. Skipping injection.`,
@@ -285,14 +285,16 @@ var LegacyDataInjector;
285
285
  } else {
286
286
  const convertedValue = isObject(value) && ("TLVValue" in value || "Reason" in value) ? void 0 : convertWebSocketTagBasedToMatter(value, model, clusterModel.model);
287
287
  if (convertedValue !== void 0) {
288
- nodeWrites.push(clusterStorage.set(attributeId, convertedValue));
288
+ writes.push(clusterStorage.set(attributeId, convertedValue));
289
289
  } else {
290
290
  logger.debug(`Attribute ${attributeKey} could not be converted. Skipping injection.`);
291
291
  }
292
292
  }
293
293
  }
294
- await Promise.allSettled(nodeWrites);
295
- nodeWrites.length = 0;
294
+ }
295
+ if (writes.length) {
296
+ logger.info(`... wait for all ${writes.length} records to be written ... be patient!`);
297
+ await Promise.allSettled(writes);
296
298
  }
297
299
  if (injectedNodes > 0) {
298
300
  const knownNodes = await nodesStorage.get("commissionedNodes", []);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/controller/LegacyDataInjector.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["LegacyDataInjector"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter-server/ws-controller",
3
- "version": "0.5.15",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "description": "matter.js based Matter controller library",
6
6
  "bugs": {
@@ -23,16 +23,16 @@
23
23
  "node": ">=20.19.0 <22.0.0 || >=22.13.0"
24
24
  },
25
25
  "optionalDependencies": {
26
- "@matter/nodejs-ble": "0.17.0-alpha.0-20260410-36535f904"
26
+ "@matter/nodejs-ble": "0.17.0-alpha.0-20260415-d9b8bc8d3"
27
27
  },
28
28
  "dependencies": {
29
- "@matter/main": "0.17.0-alpha.0-20260410-36535f904",
30
- "@matter-server/ws-client": "0.5.15",
31
- "@project-chip/matter.js": "0.17.0-alpha.0-20260410-36535f904",
29
+ "@matter/main": "0.17.0-alpha.0-20260415-d9b8bc8d3",
30
+ "@matter-server/ws-client": "0.6.0",
31
+ "@project-chip/matter.js": "0.17.0-alpha.0-20260415-d9b8bc8d3",
32
32
  "ws": "^8.20.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@types/node": "^25.5.2",
35
+ "@types/node": "^25.6.0",
36
36
  "@types/ws": "^8.18.1"
37
37
  },
38
38
  "files": [
@@ -110,7 +110,7 @@ import { Nodes } from "./Nodes.js";
110
110
  const logger = Logger.get("ControllerCommandHandler");
111
111
 
112
112
  /** After this duration in Reconnecting state, declare the node unavailable */
113
- const RECONNECT_TIMEOUT = Minutes(5);
113
+ const RECONNECT_TIMEOUT = Minutes(3);
114
114
 
115
115
  /**
116
116
  * Cluster IDs whose attribute changes should trigger a full node_updated broadcast.
@@ -27,7 +27,7 @@ import { convertWebSocketTagBasedToMatter } from "../server/Converters.js";
27
27
 
28
28
  const logger = Logger.get("LegacyDataInjector");
29
29
 
30
- /* eslint-disable regexp/no-unused-capturing-group */
30
+ /**/
31
31
  const BASE64_REGEX = /^([0-9a-z+/]{4})*(([0-9a-z+/]{2}==)|([0-9a-z+/]{3}=))?$/i;
32
32
 
33
33
  const FEATUREMAP_ID = Global.attributes.featureMap.id.toString();
@@ -270,6 +270,7 @@ export namespace LegacyDataInjector {
270
270
  ) {
271
271
  const commissionedNodes = new Array<[NodeId, any]>();
272
272
  let injectedNodes = 0;
273
+ const writes = new Array<MaybePromise<void>>();
273
274
 
274
275
  for (const [nodeId, nodeDetails] of Object.entries(nodeData.nodes)) {
275
276
  const nodeStorage = baseStorage.createContext(`node-${nodeId}`);
@@ -283,12 +284,11 @@ export namespace LegacyDataInjector {
283
284
  continue;
284
285
  }
285
286
  logger.info(`Injecting node ${nodeId} into storage`);
286
- const nodeWrites = new Array<MaybePromise<void>>();
287
+ let currentEndpointId: string | undefined;
288
+ let currentClusterId: string | undefined;
289
+ let endpointStorage: StorageContext | undefined;
290
+ let clusterStorage: StorageContext | undefined;
287
291
  for (const [attributeKey, value] of attributes) {
288
- let currentEndpointId: string | undefined;
289
- let currentClusterId: string | undefined;
290
- let endpointStorage: StorageContext | undefined;
291
- let clusterStorage: StorageContext | undefined;
292
292
  const [endpointId, clusterId, attributeId] = attributeKey.split("/");
293
293
  if (currentEndpointId !== endpointId) {
294
294
  endpointStorage = nodeStorage.createContext(endpointId);
@@ -306,7 +306,7 @@ export namespace LegacyDataInjector {
306
306
  newNode = false;
307
307
  injectedNodes++;
308
308
  }
309
- nodeWrites.push(clusterStorage.set("__version__", 1));
309
+ writes.push(clusterStorage.set("__version__", 1));
310
310
  }
311
311
 
312
312
  const clusterModel = ClusterMap[clusterId];
@@ -316,13 +316,13 @@ export namespace LegacyDataInjector {
316
316
  logger.debug(
317
317
  `Node ${nodeId}: Attribute ${attributeKey}, unknown featuremap converted to empty featuremap`,
318
318
  );
319
- nodeWrites.push(clusterStorage!.set(attributeId, { value: {} } as SupportedStorageTypes));
319
+ writes.push(clusterStorage!.set(attributeId, { value: {} } as SupportedStorageTypes));
320
320
  } else if (isPrimitiveType(value) || (Array.isArray(value) && value.every(isPrimitiveType))) {
321
321
  logger.debug(
322
322
  `Node ${nodeId}: Attribute ${attributeKey}, unknown primary type converted generically`,
323
323
  value,
324
324
  );
325
- nodeWrites.push(clusterStorage!.set(attributeId, { value } as SupportedStorageTypes));
325
+ writes.push(clusterStorage!.set(attributeId, { value } as SupportedStorageTypes));
326
326
  } else {
327
327
  logger.debug(
328
328
  `Node ${nodeId}: Attribute ${attributeKey}, not found in and unclear value. Skipping injection.`,
@@ -335,7 +335,7 @@ export namespace LegacyDataInjector {
335
335
  ? undefined
336
336
  : convertWebSocketTagBasedToMatter(value, model, clusterModel.model);
337
337
  if (convertedValue !== undefined) {
338
- nodeWrites.push(
338
+ writes.push(
339
339
  clusterStorage!.set(attributeId, { value: convertedValue } as SupportedStorageTypes),
340
340
  );
341
341
  } else {
@@ -343,8 +343,10 @@ export namespace LegacyDataInjector {
343
343
  }
344
344
  }
345
345
  }
346
- await Promise.allSettled(nodeWrites);
347
- nodeWrites.length = 0;
346
+ }
347
+ if (writes.length) {
348
+ logger.info(`... wait for all ${writes.length} records to be written ... be patient!`);
349
+ await Promise.allSettled(writes);
348
350
  }
349
351
 
350
352
  if (injectedNodes > 0) {
@@ -368,6 +370,7 @@ export namespace LegacyDataInjector {
368
370
  ) {
369
371
  const commissionedNodes = new Array<[NodeId, any]>();
370
372
  let injectedNodes = 0;
373
+ const writes = new Array<MaybePromise<void>>();
371
374
 
372
375
  let peerCounter = 1;
373
376
  for (const [nodeId, nodeDetails] of Object.entries(nodeData.nodes)) {
@@ -380,22 +383,19 @@ export namespace LegacyDataInjector {
380
383
  commissionedNodes.push([NodeId(BigInt(nodeId)), {}]);
381
384
  let newNode = true;
382
385
  logger.info(`Injecting node ${nodeId} directly into peer storage as ${peerId}`);
383
- const nodeWrites = new Array<MaybePromise<void>>();
384
386
  // Define the peer address for this peer
385
- nodeWrites.push(
387
+ writes.push(
386
388
  peerStorage
387
389
  .createContext("0")
388
390
  .createContext("commissioning")
389
391
  .set("peerAddress", PeerAddress({ fabricIndex, nodeId: NodeId(BigInt(nodeId)) })),
390
392
  );
391
- nodeWrites.push(
392
- peerStorage.createContext("0").createContext("commissioning").set("discoveredAt", Time.nowMs),
393
- );
393
+ writes.push(peerStorage.createContext("0").createContext("commissioning").set("discoveredAt", Time.nowMs));
394
+ let currentEndpointId: string | undefined;
395
+ let currentClusterId: string | undefined;
396
+ let endpointStorage: StorageContext | undefined;
397
+ let clusterStorage: StorageContext | undefined;
394
398
  for (const [attributeKey, value] of Object.entries(nodeDetails.attributes)) {
395
- let currentEndpointId: string | undefined;
396
- let currentClusterId: string | undefined;
397
- let endpointStorage: StorageContext | undefined;
398
- let clusterStorage: StorageContext | undefined;
399
399
  const [endpointId, clusterId, attributeId] = attributeKey.split("/");
400
400
  if (currentEndpointId !== endpointId) {
401
401
  endpointStorage = peerStorage.createContext(endpointId);
@@ -407,13 +407,13 @@ export namespace LegacyDataInjector {
407
407
  currentClusterId = clusterId;
408
408
  if (newNode) {
409
409
  // Write marker that this node is migrated, so would be skipped for full migration approach
410
- nodeWrites.push(
410
+ writes.push(
411
411
  legacyNodeStorage.createContext(endpointId).createContext(clusterId).set("__version__", 1),
412
412
  );
413
413
  newNode = false;
414
414
  injectedNodes++;
415
415
  }
416
- nodeWrites.push(clusterStorage.set("__version__", 1));
416
+ writes.push(clusterStorage.set("__version__", 1));
417
417
  }
418
418
 
419
419
  const clusterModel = ClusterMap[clusterId];
@@ -423,13 +423,13 @@ export namespace LegacyDataInjector {
423
423
  logger.debug(
424
424
  `Node ${nodeId}: Attribute ${attributeKey}, unknown featuremap converted to empty featuremap`,
425
425
  );
426
- nodeWrites.push(clusterStorage!.set(attributeId, {} as SupportedStorageTypes));
426
+ writes.push(clusterStorage!.set(attributeId, {} as SupportedStorageTypes));
427
427
  } else if (isPrimitiveType(value) || (Array.isArray(value) && value.every(isPrimitiveType))) {
428
428
  logger.debug(
429
429
  `Node ${nodeId}: Attribute ${attributeKey}, unknown primary type converted generically`,
430
430
  value,
431
431
  );
432
- nodeWrites.push(clusterStorage!.set(attributeId, value as SupportedStorageTypes));
432
+ writes.push(clusterStorage!.set(attributeId, value as SupportedStorageTypes));
433
433
  } else {
434
434
  logger.debug(
435
435
  `Node ${nodeId}: Attribute ${attributeKey}, not found in and unclear value. Skipping injection.`,
@@ -442,14 +442,16 @@ export namespace LegacyDataInjector {
442
442
  ? undefined
443
443
  : convertWebSocketTagBasedToMatter(value, model, clusterModel.model);
444
444
  if (convertedValue !== undefined) {
445
- nodeWrites.push(clusterStorage!.set(attributeId, convertedValue as SupportedStorageTypes));
445
+ writes.push(clusterStorage!.set(attributeId, convertedValue as SupportedStorageTypes));
446
446
  } else {
447
447
  logger.debug(`Attribute ${attributeKey} could not be converted. Skipping injection.`);
448
448
  }
449
449
  }
450
450
  }
451
- await Promise.allSettled(nodeWrites);
452
- nodeWrites.length = 0;
451
+ }
452
+ if (writes.length) {
453
+ logger.info(`... wait for all ${writes.length} records to be written ... be patient!`);
454
+ await Promise.allSettled(writes);
453
455
  }
454
456
 
455
457
  if (injectedNodes > 0) {