@matter-server/ws-controller 0.5.4 → 0.5.5

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.
@@ -3,8 +3,8 @@
3
3
  * Copyright 2025-2026 Open Home Foundation
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Bytes, Crypto, Environment, SharedEnvironmentServices, Timestamp } from "@matter/main";
7
- import { DclCertificateService, DclVendorInfoService, VendorInfo } from "@matter/main/protocol";
6
+ import { Bytes, Crypto, Environment, Timestamp } from "@matter/main";
7
+ import { VendorInfo } from "@matter/main/protocol";
8
8
  import { ConfigStorage } from "../server/ConfigStorage.js";
9
9
  import { ControllerCommandHandler } from "./ControllerCommandHandler.js";
10
10
  import { LegacyServerData } from "./LegacyDataInjector.js";
@@ -24,20 +24,21 @@ export declare class MatterController {
24
24
  constructor(environment: Environment, config: ConfigStorage, options: MatterControllerOptions, serverId: string);
25
25
  protected initialize(vendorId?: number, fabricId?: number | bigint, legacyCommissionedDates?: Map<string, Timestamp>): Promise<void>;
26
26
  get commandHandler(): ControllerCommandHandler;
27
- /**
28
- * Get the shared environment services instance.
29
- */
30
- get services(): SharedEnvironmentServices;
31
27
  /**
32
28
  * Get the DCL vendor info service instance.
33
29
  * Lazily initializes the service if not already present.
34
30
  */
35
- get vendorInfoService(): DclVendorInfoService;
31
+ vendorInfoService(): Promise<import("@matter/main/protocol").DclVendorInfoService>;
36
32
  /**
37
33
  * Get the DCL certificate service instance
38
34
  * Lazily initializes the service if not already present.
39
35
  */
40
- get certificateService(): DclCertificateService;
36
+ certificateService(): Promise<import("@matter/main/protocol").DclCertificateService>;
37
+ /**
38
+ * Get the DCL OTA update service instance
39
+ * Lazily initializes the service if not already present.
40
+ */
41
+ otaUpdateService(): Promise<import("@matter/main/protocol").DclOtaUpdateService>;
41
42
  /**
42
43
  * Get vendor information by vendor ID.
43
44
  * Returns undefined if the vendor is not found.
@@ -55,9 +56,5 @@ export declare class MatterController {
55
56
  * @returns true if stored successfully
56
57
  */
57
58
  storeOtaImageFromFile(filePath: string): Promise<boolean>;
58
- /**
59
- * Close the services when shutting down.
60
- */
61
- closeServices(): Promise<void>;
62
59
  }
63
60
  //# sourceMappingURL=MatterController.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MatterController.d.ts","sourceRoot":"","sources":["../../../src/controller/MatterController.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,KAAK,EAEL,MAAM,EACN,WAAW,EAKX,yBAAyB,EAEzB,SAAS,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAuB,oBAAoB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIrH,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAsB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,oBAAoB,CAAC;AAI5B,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,KAAK,EAAE,KAAK,GACb,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,MAAM,WAAW,uBAAuB;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,+HAA+H;IAC/H,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAmBD,qBAAa,gBAAgB;;WAYZ,MAAM,CACf,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,uBAAuB,EAChC,UAAU,CAAC,EAAE,gBAAgB;gBA2DrB,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM;cAS/F,UAAU,CACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAC1B,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IAgCpD,IAAI,cAAc,6BAuBjB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,yBAAyB,CAKxC;IAED;;;OAGG;IACH,IAAI,iBAAiB,IAAI,oBAAoB,CAK5C;IAED;;;OAGG;IACH,IAAI,kBAAkB,0BAKrB;IAED;;;OAGG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAKtE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAKzD,uBAAuB;IAkBvB,IAAI;IAmBV;;;;OAIG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB/D;;OAEG;IACG,aAAa;CAGtB"}
1
+ {"version":3,"file":"MatterController.d.ts","sourceRoot":"","sources":["../../../src/controller/MatterController.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,KAAK,EAEL,MAAM,EAEN,WAAW,EAOX,SAAS,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAsB,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,oBAAoB,CAAC;AAI5B,wBAAsB,uBAAuB,CACzC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,KAAK,EAAE,KAAK,GACb,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,MAAM,WAAW,uBAAuB;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,+HAA+H;IAC/H,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qGAAqG;IACrG,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAmBD,qBAAa,gBAAgB;;WAWZ,MAAM,CACf,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,uBAAuB,EAChC,UAAU,CAAC,EAAE,gBAAgB;gBA2DrB,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM;cAS/F,UAAU,CACtB,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAC1B,uBAAuB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;IA0BpD,IAAI,cAAc,6BAuCjB;IAED;;;OAGG;IACG,iBAAiB;IASvB;;;OAGG;IACG,kBAAkB;IASxB;;;OAGG;IACG,gBAAgB;IAStB;;;OAGG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAItE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAIzD,uBAAuB;IAkBvB,IAAI;IAkBV;;;;OAIG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAoBlE"}
@@ -6,14 +6,15 @@
6
6
  import {
7
7
  CommissioningClient,
8
8
  Crypto,
9
+ DclBehavior,
9
10
  FabricId,
10
11
  GlobalFabricId,
11
12
  Logger,
13
+ MatterAggregateError,
12
14
  NodeId,
13
15
  SoftwareUpdateManager,
14
16
  Timestamp
15
17
  } from "@matter/main";
16
- import { DclCertificateService, DclOtaUpdateService, DclVendorInfoService } from "@matter/main/protocol";
17
18
  import { VendorId } from "@matter/main/types";
18
19
  import { CommissioningController } from "@project-chip/matter.js";
19
20
  import { Readable } from "node:stream";
@@ -35,7 +36,6 @@ function parseVersionToNumber(version) {
35
36
  }
36
37
  class MatterController {
37
38
  #env;
38
- #services;
39
39
  #controllerInstance;
40
40
  #commandHandler;
41
41
  #config;
@@ -125,8 +125,6 @@ class MatterController {
125
125
  // Base version without alpha/beta suffix
126
126
  }
127
127
  });
128
- this.vendorInfoService;
129
- this.certificateService;
130
128
  }
131
129
  get commandHandler() {
132
130
  if (this.#controllerInstance === void 0) {
@@ -139,59 +137,75 @@ class MatterController {
139
137
  !this.#disableOtaProvider
140
138
  );
141
139
  this.#commandHandler.events.started.once(async () => {
140
+ this.#controllerInstance.node.behaviors.require(DclBehavior, {
141
+ fetchTestCertificates: this.#enableTestNetDcl
142
+ });
143
+ const initPromises = new Array();
142
144
  if (this.#legacyCommissionedDates !== void 0) {
143
- await this.injectCommissionedDates();
145
+ initPromises.push(this.injectCommissionedDates());
144
146
  }
147
+ initPromises.push(this.vendorInfoService());
148
+ initPromises.push(this.certificateService());
145
149
  if (!this.#disableOtaProvider && this.#enableTestNetDcl) {
146
- await this.#enableTestOtaImages();
150
+ initPromises.push(this.#enableTestOtaImages());
151
+ }
152
+ try {
153
+ await MatterAggregateError.allSettled(initPromises);
154
+ } catch (error) {
155
+ logger.error("Error initializing controller additional services", error);
147
156
  }
148
157
  });
149
158
  }
150
159
  return this.#commandHandler;
151
160
  }
152
161
  /**
153
- * Get the shared environment services instance.
162
+ * Get the DCL vendor info service instance.
163
+ * Lazily initializes the service if not already present.
154
164
  */
155
- get services() {
156
- if (this.#services === void 0) {
157
- this.#services = this.#env.asDependent();
165
+ async vendorInfoService() {
166
+ if (this.#controllerInstance === void 0) {
167
+ throw new Error("Controller not initialized");
158
168
  }
159
- return this.#services;
169
+ const service = await this.#controllerInstance.node.act((agent) => agent.get(DclBehavior).vendorInfoService);
170
+ await service.construction;
171
+ return service;
160
172
  }
161
173
  /**
162
- * Get the DCL vendor info service instance.
174
+ * Get the DCL certificate service instance
163
175
  * Lazily initializes the service if not already present.
164
176
  */
165
- get vendorInfoService() {
166
- if (!this.#env.has(DclVendorInfoService)) {
167
- new DclVendorInfoService(this.#env);
177
+ async certificateService() {
178
+ if (this.#controllerInstance === void 0) {
179
+ throw new Error("Controller not initialized");
168
180
  }
169
- return this.services.get(DclVendorInfoService);
181
+ const service = await this.#controllerInstance.node.act((agent) => agent.get(DclBehavior).certificateService);
182
+ await service.construction;
183
+ return service;
170
184
  }
171
185
  /**
172
- * Get the DCL certificate service instance
186
+ * Get the DCL OTA update service instance
173
187
  * Lazily initializes the service if not already present.
174
188
  */
175
- get certificateService() {
176
- if (!this.#env.has(DclCertificateService)) {
177
- new DclCertificateService(this.#env, { fetchTestCertificates: this.#enableTestNetDcl });
189
+ async otaUpdateService() {
190
+ if (this.#controllerInstance === void 0) {
191
+ throw new Error("Controller not initialized");
178
192
  }
179
- return this.services.get(DclCertificateService);
193
+ const service = await this.#controllerInstance.node.act((agent) => agent.get(DclBehavior).otaUpdateService);
194
+ await service.construction;
195
+ return service;
180
196
  }
181
197
  /**
182
198
  * Get vendor information by vendor ID.
183
199
  * Returns undefined if the vendor is not found.
184
200
  */
185
201
  async getVendorInfo(vendorId) {
186
- await this.vendorInfoService.construction;
187
- return this.vendorInfoService.infoFor(vendorId);
202
+ return (await this.vendorInfoService()).infoFor(vendorId);
188
203
  }
189
204
  /**
190
205
  * Get all vendor information from the DCL service.
191
206
  */
192
207
  async getAllVendors() {
193
- await this.vendorInfoService.construction;
194
- return this.vendorInfoService.vendors;
208
+ return (await this.vendorInfoService()).vendors;
195
209
  }
196
210
  async injectCommissionedDates() {
197
211
  if (this.#controllerInstance === void 0 || this.#legacyCommissionedDates === void 0) {
@@ -212,7 +226,6 @@ class MatterController {
212
226
  }
213
227
  async stop() {
214
228
  await this.#commandHandler?.close();
215
- await this.#services?.close();
216
229
  }
217
230
  /**
218
231
  * Enable test OTA images (test-net DCL).
@@ -235,7 +248,7 @@ class MatterController {
235
248
  async storeOtaImageFromFile(filePath) {
236
249
  const { createReadStream } = await import("node:fs");
237
250
  const { pathToFileURL } = await import("node:url");
238
- const otaService = this.services.get(DclOtaUpdateService);
251
+ const otaService = await this.otaUpdateService();
239
252
  const fileUrl = pathToFileURL(filePath).href;
240
253
  const infoStream = Readable.toWeb(createReadStream(filePath));
241
254
  const updateInfo = await otaService.updateInfoFromStream(infoStream, fileUrl);
@@ -246,12 +259,6 @@ class MatterController {
246
259
  await otaService.store(storeStream, updateInfo, "local");
247
260
  return true;
248
261
  }
249
- /**
250
- * Close the services when shutting down.
251
- */
252
- async closeServices() {
253
- await this.#services?.close();
254
- }
255
262
  }
256
263
  export {
257
264
  MatterController,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/controller/MatterController.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA,EAEI;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACG;AACP,SAAS,uBAAuB,qBAAqB,4BAAwC;AAC7F,SAAS,gBAAgB;AACzB,SAAS,+BAA+B;AACxC,SAAS,gBAAgB;AAEzB,SAAS,gCAAgC;AACzC,SAAS,0BAA4C;AACrD,SAAS,uBAAuB;AAEhC,OAAO;AAEP,MAAM,SAAS,OAAO,IAAI,kBAAkB;AAE5C,eAAsB,wBAClB,QACA,UACA,OACe;AACf,UAAQ,MAAM,eAAe,QAAQ,QAAQ,SAAS,QAAQ,GAAG,KAAK,GAAG,SAAS;AACtF;AAiBA,SAAS,qBAAqB,SAAyB;AAEnD,QAAM,cAAc,QAAQ,MAAM,GAAG,EAAE,CAAC;AACxC,QAAM,QAAQ,YAAY,MAAM,GAAG;AACnC,QAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,QAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAC1C,QAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,KAAK,EAAE;AAE1C,SAAO,QAAQ,MAAQ,QAAQ,MAAM;AACzC;AAEO,MAAM,iBAAiB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EAEtB,aAAa,OACT,aACA,QACA,SACA,YACF;AAEE,UAAM,WAAW,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,YAAY;AAAA,IAChB;AAEA,UAAM,WAAW,IAAI,iBAAiB,aAAa,QAAQ,SAAS,QAAQ;AAE5E,UAAM,oBAAoB,oBAAI,IAAuB;AACrD,QAAI,eAAe,QAAW;AAC1B,YAAM,SAAS,YAAY,IAAI,MAAM;AACrC,YAAM,cAAc,MAAM,OAAO,QAAQ,KAAK,QAAQ;AACtD,UAAI,WAAW,eAAe,WAAW,UAAU;AAC/C,cAAM,mBAAmB;AAAA,UACrB,YAAY,cAAc,aAAa;AAAA,UACvC,YAAY,cAAc,SAAS;AAAA,UACnC;AAAA,UACA,WAAW;AAAA,UACX,WAAW;AAAA,QACf;AAAA,MACJ;AACA,UACK,MAAM,mBAAmB;AAAA,QACtB;AAAA,QACA,WAAW;AAAA,QACX,WAAW,QAAQ;AAAA,MACvB,KACA,WAAW,aAAa,QAC1B;AACE,mBAAW,CAAC,WAAW,IAAI,KAAK,OAAO,QAAQ,WAAW,SAAS,KAAK,GAAG;AACvE,gBAAM,EAAE,mBAAmB,eAAe,IAAI;AAC9C,4BAAkB,IAAI,WAAW,UAAU,IAAI,KAAK,cAAc,EAAE,QAAQ,CAAC,CAAC;AAAA,QAClF;AAAA,MACJ;AAGA,YAAM,aAAa,WAAW,UAAU;AACxC,UAAI,OAAO,eAAe,UAAU;AAChC,YAAI,OAAO,cAAc,YAAY;AACjC,gBAAM,gBAAgB,aAAa;AACnC,iBAAO;AAAA,YACH,4BAA4B,OAAO,UAAU,OAAO,aAAa,0BAA0B,UAAU;AAAA,UACzG;AACA,gBAAM,OAAO,IAAI,EAAE,YAAY,cAAc,CAAC;AAAA,QAClD;AAAA,MACJ;AAEA,YAAM,YAAY,MAAM;AAAA,IAC5B;AAEA,UAAM,SAAS,WAAW,YAAY,UAAU,YAAY,UAAU,iBAAiB;AACvF,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,aAA0B,QAAuB,SAAkC,UAAkB;AAC7G,SAAK,OAAO;AACZ,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,iBAAiB,QAAQ,iBAAiB;AAC/C,SAAK,oBAAoB,QAAQ,oBAAoB,KAAK;AAC1D,SAAK,sBAAsB,QAAQ,sBAAsB,KAAK;AAAA,EAClE;AAAA,EAEA,MAAgB,WACZ,UACA,UACA,yBACF;AACE,SAAK,2BAA2B,yBAAyB,OAAO,0BAA0B;AAC1F,SAAK,sBAAsB,IAAI,wBAAwB;AAAA,MACnD,aAAa;AAAA,QACT,aAAa,KAAK;AAAA,QAClB,IAAI,KAAK;AAAA,MACb;AAAA,MACA,aAAa;AAAA;AAAA,MACb,kBAAkB,KAAK,QAAQ;AAAA,MAC/B,eAAe,aAAa,SAAY,SAAS,QAAQ,IAAI;AAAA,MAC7D,eAAe,aAAa,SAAY,SAAS,QAAQ,IAAI;AAAA,MAC7D,YAAY,OAAO,MAAM;AAAA;AAAA,MACzB,mBAAmB,CAAC,KAAK;AAAA,MACzB,kBAAkB;AAAA,QACd,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,uBAAuB;AAAA,QACvB,iBAAiB,qBAAqB,KAAK,cAAc,KAAK;AAAA,QAC9D,uBAAuB,KAAK,eAAe,MAAM,GAAG,EAAE,CAAC;AAAA;AAAA,MAC3D;AAAA,IACJ,CAAC;AAID,SAAK;AAEL,SAAK;AAAA,EACT;AAAA,EAEA,IAAI,iBAAiB;AACjB,QAAI,KAAK,wBAAwB,QAAW;AACxC,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAChD;AACA,QAAI,KAAK,oBAAoB,QAAW;AACpC,WAAK,kBAAkB,IAAI;AAAA,QACvB,KAAK;AAAA,QACL,KAAK,KAAK,KAAK,IAAI,cAAc,KAAK;AAAA,QACtC,CAAC,KAAK;AAAA,MACV;AAEA,WAAK,gBAAgB,OAAO,QAAQ,KAAK,YAAY;AACjD,YAAI,KAAK,6BAA6B,QAAW;AAC7C,gBAAM,KAAK,wBAAwB;AAAA,QACvC;AAEA,YAAI,CAAC,KAAK,uBAAuB,KAAK,mBAAmB;AACrD,gBAAM,KAAK,qBAAqB;AAAA,QACpC;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAsC;AACtC,QAAI,KAAK,cAAc,QAAW;AAC9B,WAAK,YAAY,KAAK,KAAK,YAAY;AAAA,IAC3C;AACA,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,oBAA0C;AAC1C,QAAI,CAAC,KAAK,KAAK,IAAI,oBAAoB,GAAG;AACtC,UAAI,qBAAqB,KAAK,IAAI;AAAA,IACtC;AACA,WAAO,KAAK,SAAS,IAAI,oBAAoB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,qBAAqB;AACrB,QAAI,CAAC,KAAK,KAAK,IAAI,qBAAqB,GAAG;AACvC,UAAI,sBAAsB,KAAK,MAAM,EAAE,uBAAuB,KAAK,kBAAkB,CAAC;AAAA,IAC1F;AACA,WAAO,KAAK,SAAS,IAAI,qBAAqB;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,UAAmD;AACnE,UAAM,KAAK,kBAAkB;AAC7B,WAAO,KAAK,kBAAkB,QAAQ,QAAQ;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAA0D;AAC5D,UAAM,KAAK,kBAAkB;AAC7B,WAAO,KAAK,kBAAkB;AAAA,EAClC;AAAA,EAEA,MAAM,0BAA0B;AAC5B,QAAI,KAAK,wBAAwB,UAAa,KAAK,6BAA6B,QAAW;AACvF;AAAA,IACJ;AACA,eAAW,CAAC,WAAW,cAAc,KAAK,KAAK,0BAA0B;AACrE,UAAI;AACA,cAAM,cAAc,KAAK,oBAAoB,OAAO,UAAU,OAAO,OAAO,SAAS,CAAC,CAAC;AACvF,cAAM,OAAO,MAAM,KAAK,oBAAoB,KAAK,MAAM,WAAW,WAAW;AAC7E,cAAM,qBAAqB,KAAK,aAAa,mBAAmB;AAChE,YAAI,uBAAuB,UAAa,mBAAmB,mBAAmB,QAAW;AACrF,gBAAM,KAAK,WAAW,qBAAqB,EAAE,eAAe,CAAC;AAAA,QACjE;AAAA,MACJ,SAAS,OAAO;AACZ,eAAO,KAAK,8CAA8C,SAAS,IAAI,KAAK;AAAA,MAChF;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,OAAO;AACT,UAAM,KAAK,iBAAiB,MAAM;AAClC,UAAM,KAAK,WAAW,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBAAuB;AACzB,QAAI,KAAK,wBAAwB,QAAW;AACxC,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAChD;AACA,UAAM,KAAK,oBAAoB,YAAY,WAAW,uBAAuB;AAAA,MACzE,oBAAoB;AAAA,IACxB,CAAC;AACD,WAAO,KAAK,wCAAwC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAsB,UAAoC;AAC5D,UAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,SAAS;AACnD,UAAM,EAAE,cAAc,IAAI,MAAM,OAAO,UAAU;AACjD,UAAM,aAAa,KAAK,SAAS,IAAI,mBAAmB;AAGxD,UAAM,UAAU,cAAc,QAAQ,EAAE;AAGxC,UAAM,aAAa,SAAS,MAAM,iBAAiB,QAAQ,CAAC;AAC5D,UAAM,aAAa,MAAM,WAAW,qBAAqB,YAAY,OAAO;AAE5E,WAAO;AAAA,MACH,0BAA0B,QAAQ,gBAAgB,WAAW,IAAI,SAAS,EAAE,CAAC,iBAAiB,WAAW,IAAI,SAAS,EAAE,CAAC,aAAa,WAAW,eAAe,KAAK,WAAW,qBAAqB;AAAA,IACzM;AAEA,UAAM,cAAc,SAAS,MAAM,iBAAiB,QAAQ,CAAC;AAC7D,UAAM,WAAW,MAAM,aAAa,YAAY,OAAO;AACvD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAgB;AAClB,UAAM,KAAK,WAAW,MAAM;AAAA,EAChC;AACJ;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter-server/ws-controller",
3
- "version": "0.5.4",
3
+ "version": "0.5.5",
4
4
  "type": "module",
5
5
  "description": "matter.js based Matter controller library",
6
6
  "bugs": {
@@ -22,15 +22,15 @@
22
22
  "node": ">=20.19.0 <22.0.0 || >=22.13.0"
23
23
  },
24
24
  "optionalDependencies": {
25
- "@matter/nodejs-ble": "0.17.0-alpha.0-20260308-2d3759f3b"
25
+ "@matter/nodejs-ble": "0.17.0-alpha.0-20260311-5fb2f183e"
26
26
  },
27
27
  "dependencies": {
28
- "@matter/main": "0.17.0-alpha.0-20260308-2d3759f3b",
29
- "@project-chip/matter.js": "0.17.0-alpha.0-20260308-2d3759f3b",
28
+ "@matter/main": "0.17.0-alpha.0-20260311-5fb2f183e",
29
+ "@project-chip/matter.js": "0.17.0-alpha.0-20260311-5fb2f183e",
30
30
  "ws": "^8.19.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@types/node": "^25.3.3",
33
+ "@types/node": "^25.4.0",
34
34
  "@types/ws": "^8.18.1"
35
35
  },
36
36
  "files": [
@@ -8,16 +8,17 @@ import {
8
8
  Bytes,
9
9
  CommissioningClient,
10
10
  Crypto,
11
+ DclBehavior,
11
12
  Environment,
12
13
  FabricId,
13
14
  GlobalFabricId,
14
15
  Logger,
16
+ MatterAggregateError,
15
17
  NodeId,
16
- SharedEnvironmentServices,
17
18
  SoftwareUpdateManager,
18
19
  Timestamp,
19
20
  } from "@matter/main";
20
- import { DclCertificateService, DclOtaUpdateService, DclVendorInfoService, VendorInfo } from "@matter/main/protocol";
21
+ import { VendorInfo } from "@matter/main/protocol";
21
22
  import { VendorId } from "@matter/main/types";
22
23
  import { CommissioningController } from "@project-chip/matter.js";
23
24
  import { Readable } from "node:stream";
@@ -66,7 +67,6 @@ function parseVersionToNumber(version: string): number {
66
67
 
67
68
  export class MatterController {
68
69
  #env: Environment;
69
- #services?: SharedEnvironmentServices;
70
70
  #controllerInstance?: CommissioningController;
71
71
  #commandHandler?: ControllerCommandHandler;
72
72
  #config: ConfigStorage;
@@ -175,12 +175,6 @@ export class MatterController {
175
175
  softwareVersionString: this.#serverVersion.split("-")[0], // Base version without alpha/beta suffix
176
176
  },
177
177
  });
178
-
179
- // Start loading and initialization of meta data
180
- /* eslint-disable @typescript-eslint/no-unused-expressions */
181
- this.vendorInfoService;
182
- /* eslint-disable @typescript-eslint/no-unused-expressions */
183
- this.certificateService;
184
178
  }
185
179
 
186
180
  get commandHandler() {
@@ -195,12 +189,28 @@ export class MatterController {
195
189
  );
196
190
 
197
191
  this.#commandHandler.events.started.once(async () => {
192
+ this.#controllerInstance!.node.behaviors.require(DclBehavior, {
193
+ fetchTestCertificates: this.#enableTestNetDcl,
194
+ });
195
+
196
+ const initPromises = new Array<Promise<unknown>>();
197
+
198
198
  if (this.#legacyCommissionedDates !== undefined) {
199
- await this.injectCommissionedDates();
199
+ initPromises.push(this.injectCommissionedDates());
200
200
  }
201
201
 
202
+ // Start loading and initialization of meta data
203
+ initPromises.push(this.vendorInfoService());
204
+ initPromises.push(this.certificateService());
205
+
202
206
  if (!this.#disableOtaProvider && this.#enableTestNetDcl) {
203
- await this.#enableTestOtaImages();
207
+ initPromises.push(this.#enableTestOtaImages());
208
+ }
209
+
210
+ try {
211
+ await MatterAggregateError.allSettled(initPromises);
212
+ } catch (error) {
213
+ logger.error("Error initializing controller additional services", error);
204
214
  }
205
215
  });
206
216
  }
@@ -209,35 +219,42 @@ export class MatterController {
209
219
  }
210
220
 
211
221
  /**
212
- * Get the shared environment services instance.
222
+ * Get the DCL vendor info service instance.
223
+ * Lazily initializes the service if not already present.
213
224
  */
214
- get services(): SharedEnvironmentServices {
215
- if (this.#services === undefined) {
216
- this.#services = this.#env.asDependent();
225
+ async vendorInfoService() {
226
+ if (this.#controllerInstance === undefined) {
227
+ throw new Error("Controller not initialized");
217
228
  }
218
- return this.#services;
229
+ const service = await this.#controllerInstance.node.act(agent => agent.get(DclBehavior).vendorInfoService);
230
+ await service.construction;
231
+ return service;
219
232
  }
220
233
 
221
234
  /**
222
- * Get the DCL vendor info service instance.
235
+ * Get the DCL certificate service instance
223
236
  * Lazily initializes the service if not already present.
224
237
  */
225
- get vendorInfoService(): DclVendorInfoService {
226
- if (!this.#env.has(DclVendorInfoService)) {
227
- new DclVendorInfoService(this.#env);
238
+ async certificateService() {
239
+ if (this.#controllerInstance === undefined) {
240
+ throw new Error("Controller not initialized");
228
241
  }
229
- return this.services.get(DclVendorInfoService);
242
+ const service = await this.#controllerInstance.node.act(agent => agent.get(DclBehavior).certificateService);
243
+ await service.construction;
244
+ return service;
230
245
  }
231
246
 
232
247
  /**
233
- * Get the DCL certificate service instance
248
+ * Get the DCL OTA update service instance
234
249
  * Lazily initializes the service if not already present.
235
250
  */
236
- get certificateService() {
237
- if (!this.#env.has(DclCertificateService)) {
238
- new DclCertificateService(this.#env, { fetchTestCertificates: this.#enableTestNetDcl });
251
+ async otaUpdateService() {
252
+ if (this.#controllerInstance === undefined) {
253
+ throw new Error("Controller not initialized");
239
254
  }
240
- return this.services.get(DclCertificateService);
255
+ const service = await this.#controllerInstance.node.act(agent => agent.get(DclBehavior).otaUpdateService);
256
+ await service.construction;
257
+ return service;
241
258
  }
242
259
 
243
260
  /**
@@ -245,16 +262,14 @@ export class MatterController {
245
262
  * Returns undefined if the vendor is not found.
246
263
  */
247
264
  async getVendorInfo(vendorId: number): Promise<VendorInfo | undefined> {
248
- await this.vendorInfoService.construction;
249
- return this.vendorInfoService.infoFor(vendorId);
265
+ return (await this.vendorInfoService()).infoFor(vendorId);
250
266
  }
251
267
 
252
268
  /**
253
269
  * Get all vendor information from the DCL service.
254
270
  */
255
271
  async getAllVendors(): Promise<ReadonlyMap<number, VendorInfo>> {
256
- await this.vendorInfoService.construction;
257
- return this.vendorInfoService.vendors;
272
+ return (await this.vendorInfoService()).vendors;
258
273
  }
259
274
 
260
275
  async injectCommissionedDates() {
@@ -277,7 +292,6 @@ export class MatterController {
277
292
 
278
293
  async stop() {
279
294
  await this.#commandHandler?.close(); // This closes also the controller instance if started
280
- await this.#services?.close();
281
295
  }
282
296
 
283
297
  /**
@@ -302,7 +316,7 @@ export class MatterController {
302
316
  async storeOtaImageFromFile(filePath: string): Promise<boolean> {
303
317
  const { createReadStream } = await import("node:fs");
304
318
  const { pathToFileURL } = await import("node:url");
305
- const otaService = this.services.get(DclOtaUpdateService);
319
+ const otaService = await this.otaUpdateService();
306
320
 
307
321
  // Convert file path to file:// URL for the OTA service
308
322
  const fileUrl = pathToFileURL(filePath).href;
@@ -319,11 +333,4 @@ export class MatterController {
319
333
  await otaService.store(storeStream, updateInfo, "local");
320
334
  return true;
321
335
  }
322
-
323
- /**
324
- * Close the services when shutting down.
325
- */
326
- async closeServices() {
327
- await this.#services?.close();
328
- }
329
336
  }