@matter/protocol 0.13.0-alpha.0-20250424-4760af1f3 → 0.13.0-alpha.0-20250425-94b33ff98

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.
@@ -13,6 +13,7 @@ import { DiscoveryCapabilitiesBitmap, NodeId, TypeFromPartialBitSchema } from "#
13
13
  import { InteractionClientProvider } from "../interaction/InteractionClient.js";
14
14
  import { ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
15
15
  import { PeerAddress } from "./PeerAddress.js";
16
+ import { PeerSet } from "./PeerSet.js";
16
17
  /**
17
18
  * General commissioning options.
18
19
  */
@@ -80,6 +81,7 @@ export interface DiscoveryAndCommissioningOptions extends CommissioningOptions {
80
81
  * Interfaces {@link ControllerCommissioner} with other components.
81
82
  */
82
83
  export interface ControllerCommissionerContext {
84
+ peers: PeerSet;
83
85
  clients: InteractionClientProvider;
84
86
  scanners: ScannerSet;
85
87
  netInterfaces: NetInterfaceSet;
@@ -1 +1 @@
1
- {"version":3,"file":"ControllerCommissioner.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAGH,YAAY,EAEZ,WAAW,EACX,aAAa,EAGb,eAAe,EAEf,aAAa,EAEhB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,2BAA2B,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAIvH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAA8B,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AACnH,OAAO,EAAqB,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,OAAO,CAAC,kCAAkC,CAAC;IACrF,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnG;;;OAGG;IACH,qBAAqB,CAAC,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,oBAAoB;IACzE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,oBAAoB;IAC1E,iCAAiC;IACjC,SAAS,EAAE,CACL;QACI;;;;WAIG;QACH,cAAc,EAAE,+BAA+B,CAAC;KACnD,GACD;QACI;;;WAGG;QACH,oBAAoB,EAAE,oBAAoB,CAAC;KAC9C,CACN,GAAG;QACA;;;WAGG;QACH,qBAAqB,CAAC,EAAE,wBAAwB,CAAC,OAAO,2BAA2B,CAAC,CAAC;QAErF;;;WAGG;QACH,YAAY,CAAC,EAAE,aAAa,CAAC;QAE7B,wEAAwE;QACxE,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,yBAAyB,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,EAAE,EAAE,oBAAoB,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,sBAAsB;;gBAInB,OAAO,EAAE,6BAA6B;IAKlD,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAa9C;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBhF;;OAEG;IACG,wBAAwB,CAC1B,OAAO,EAAE,gCAAgC,GAC1C,OAAO,CAAC;QAAE,iBAAiB,EAAE,cAAc,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;IAmFhF;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,WAAW,CAAC;CAmMjG"}
1
+ {"version":3,"file":"ControllerCommissioner.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAGH,YAAY,EAEZ,WAAW,EACX,aAAa,EAGb,eAAe,EAEf,aAAa,EAEhB,MAAM,UAAU,CAAC;AAElB,OAAO,EAEH,2BAA2B,EAC3B,kCAAkC,EACrC,MAAM,sCAAsC,CAAC;AAI9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAA8B,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AACnH,OAAO,EAAqB,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAqB,OAAO,EAAE,MAAM,cAAc,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,OAAO,CAAC,kCAAkC,CAAC;IACrF,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnG;;;OAGG;IACH,qBAAqB,CAAC,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,oBAAoB;IACzE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,oBAAoB;IAC1E,iCAAiC;IACjC,SAAS,EAAE,CACL;QACI;;;;WAIG;QACH,cAAc,EAAE,+BAA+B,CAAC;KACnD,GACD;QACI;;;WAGG;QACH,oBAAoB,EAAE,oBAAoB,CAAC;KAC9C,CACN,GAAG;QACA;;;WAGG;QACH,qBAAqB,CAAC,EAAE,wBAAwB,CAAC,OAAO,2BAA2B,CAAC,CAAC;QAErF;;;WAGG;QACH,YAAY,CAAC,EAAE,aAAa,CAAC;QAE7B,wEAAwE;QACxE,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,yBAAyB,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,EAAE,EAAE,oBAAoB,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,sBAAsB;;gBAInB,OAAO,EAAE,6BAA6B;IAKlD,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAc9C;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,WAAW,CAAC;IA6BhF;;OAEG;IACG,wBAAwB,CAC1B,OAAO,EAAE,gCAAgC,GAC1C,OAAO,CAAC;QAAE,iBAAiB,EAAE,cAAc,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;IAmFhF;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,WAAW,CAAC;CAgOjG"}
@@ -51,6 +51,7 @@ class ControllerCommissioner {
51
51
  }
52
52
  static [import_general.Environmental.create](env) {
53
53
  const instance = new ControllerCommissioner({
54
+ peers: env.get(import_PeerSet.PeerSet),
54
55
  clients: env.get(import_InteractionClient.InteractionClientProvider),
55
56
  scanners: env.get(import_Scanner.ScannerSet),
56
57
  netInterfaces: env.get(import_general.NetInterfaceSet),
@@ -65,7 +66,10 @@ class ControllerCommissioner {
65
66
  * Commmission a previously discovered node.
66
67
  */
67
68
  async commission(options) {
68
- const { passcode, addresses, discoveryData } = options;
69
+ const { passcode, addresses, discoveryData, fabric, nodeId } = options;
70
+ if (nodeId !== void 0) {
71
+ this.#assertPeerAddress(fabric.addressOf(nodeId));
72
+ }
69
73
  addresses.sort((a) => a.type === "udp" ? -1 : 1);
70
74
  let channel;
71
75
  for (const address of addresses) {
@@ -149,6 +153,10 @@ class ControllerCommissioner {
149
153
  * Commission a node with discovery.
150
154
  */
151
155
  async commissionWithDiscovery(options) {
156
+ const { fabric, nodeId } = options;
157
+ if (nodeId !== void 0) {
158
+ this.#assertPeerAddress(fabric.addressOf(nodeId));
159
+ }
152
160
  const { paseSecureChannel, discoveryData } = await this.discoverAndEstablishPase(options);
153
161
  return await this.#commissionConnectedNode(paseSecureChannel, options, discoveryData);
154
162
  }
@@ -217,23 +225,44 @@ class ControllerCommissioner {
217
225
  await unsecureSession.destroy();
218
226
  return new import_ExchangeManager.MessageChannel(paseChannel, paseSecureSession);
219
227
  }
228
+ /** Validate if a Peert Address is already known and commissioned */
229
+ #assertPeerAddress(address) {
230
+ if (this.#context.peers.has(address)) {
231
+ throw new import_ControllerCommissioningFlow.CommissioningError(`Node ID ${address.nodeId} is already commissioned and can not be reused.`);
232
+ }
233
+ }
234
+ /** Finds an unused random Node-ID to use for commissioning if not already provided. */
235
+ #determineAddress(fabric, nodeId) {
236
+ while (true) {
237
+ const address = fabric.addressOf(nodeId ?? import_types.NodeId.randomOperationalNodeId());
238
+ try {
239
+ this.#assertPeerAddress(address);
240
+ } catch (error) {
241
+ if (error instanceof import_ControllerCommissioningFlow.CommissioningError && nodeId !== void 0) {
242
+ throw error;
243
+ }
244
+ continue;
245
+ }
246
+ return address;
247
+ }
248
+ }
220
249
  /**
221
250
  * Method to commission a device with a PASE secure channel. It returns the NodeId of the commissioned device on
222
251
  * success.
223
252
  */
224
253
  async #commissionConnectedNode(paseSecureMessageChannel, options, discoveryData) {
254
+ const {
255
+ fabric,
256
+ finalizeCommissioning: performCaseCommissioning,
257
+ commissioningFlowImpl = import_ControllerCommissioningFlow.ControllerCommissioningFlow
258
+ } = options;
225
259
  const commissioningOptions = {
226
260
  regulatoryLocation: import_general_commissioning.GeneralCommissioning.RegulatoryLocationType.Outdoor,
227
261
  // Set to the most restrictive if relevant
228
262
  regulatoryCountryCode: "XX",
229
263
  ...options
230
264
  };
231
- const {
232
- fabric,
233
- finalizeCommissioning: performCaseCommissioning,
234
- commissioningFlowImpl = import_ControllerCommissioningFlow.ControllerCommissioningFlow
235
- } = commissioningOptions;
236
- const address = fabric.addressOf(commissioningOptions.nodeId ?? import_types.NodeId.randomOperationalNodeId());
265
+ const address = this.#determineAddress(fabric, commissioningOptions.nodeId);
237
266
  logger.info(
238
267
  `Start commissioning of node ${address.nodeId} into fabric ${fabric.fabricId} (index ${address.fabricIndex})`
239
268
  );
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/peer/ControllerCommissioner.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["address"]
6
6
  }
@@ -13,6 +13,7 @@ import { DiscoveryCapabilitiesBitmap, NodeId, TypeFromPartialBitSchema } from "#
13
13
  import { InteractionClientProvider } from "../interaction/InteractionClient.js";
14
14
  import { ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
15
15
  import { PeerAddress } from "./PeerAddress.js";
16
+ import { PeerSet } from "./PeerSet.js";
16
17
  /**
17
18
  * General commissioning options.
18
19
  */
@@ -80,6 +81,7 @@ export interface DiscoveryAndCommissioningOptions extends CommissioningOptions {
80
81
  * Interfaces {@link ControllerCommissioner} with other components.
81
82
  */
82
83
  export interface ControllerCommissionerContext {
84
+ peers: PeerSet;
83
85
  clients: InteractionClientProvider;
84
86
  scanners: ScannerSet;
85
87
  netInterfaces: NetInterfaceSet;
@@ -1 +1 @@
1
- {"version":3,"file":"ControllerCommissioner.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAGH,YAAY,EAEZ,WAAW,EACX,aAAa,EAGb,eAAe,EAEf,aAAa,EAEhB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,2BAA2B,EAAE,kCAAkC,EAAE,MAAM,sCAAsC,CAAC;AAIvH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,EAA8B,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AACnH,OAAO,EAAqB,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,OAAO,CAAC,kCAAkC,CAAC;IACrF,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnG;;;OAGG;IACH,qBAAqB,CAAC,EAAE,YAAY,CAAC,2BAA2B,CAAC,CAAC;CACrE;AAED;;GAEG;AACH,MAAM,WAAW,+BAAgC,SAAQ,oBAAoB;IACzE,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gCAAiC,SAAQ,oBAAoB;IAC1E,iCAAiC;IACjC,SAAS,EAAE,CACL;QACI;;;;WAIG;QACH,cAAc,EAAE,+BAA+B,CAAC;KACnD,GACD;QACI;;;WAGG;QACH,oBAAoB,EAAE,oBAAoB,CAAC;KAC9C,CACN,GAAG;QACA;;;WAGG;QACH,qBAAqB,CAAC,EAAE,wBAAwB,CAAC,OAAO,2BAA2B,CAAC,CAAC;QAErF;;;WAGG;QACH,YAAY,CAAC,EAAE,aAAa,CAAC;QAE7B,wEAAwE;QACxE,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,yBAAyB,CAAC;IACnC,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,EAAE,EAAE,oBAAoB,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,sBAAsB;;gBAInB,OAAO,EAAE,6BAA6B;IAKlD,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAa9C;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBhF;;OAEG;IACG,wBAAwB,CAC1B,OAAO,EAAE,gCAAgC,GAC1C,OAAO,CAAC;QAAE,iBAAiB,EAAE,cAAc,CAAC;QAAC,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;IAmFhF;;OAEG;IACG,uBAAuB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,WAAW,CAAC;CAmMjG"}
1
+ {"version":3,"file":"ControllerCommissioner.d.ts","sourceRoot":"","sources":["../../../src/peer/ControllerCommissioner.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,10 @@ import {
17
17
  serverAddressToString
18
18
  } from "#general";
19
19
  import { MdnsScanner } from "#mdns/MdnsScanner.js";
20
- import { ControllerCommissioningFlow } from "#peer/ControllerCommissioningFlow.js";
20
+ import {
21
+ CommissioningError,
22
+ ControllerCommissioningFlow
23
+ } from "#peer/ControllerCommissioningFlow.js";
21
24
  import { ControllerDiscovery, PairRetransmissionLimitReachedError } from "#peer/ControllerDiscovery.js";
22
25
  import { ChannelStatusResponseError } from "#securechannel/index.js";
23
26
  import { PaseClient } from "#session/index.js";
@@ -26,7 +29,7 @@ import { NodeId, SECURE_CHANNEL_PROTOCOL_ID } from "#types";
26
29
  import { InteractionClient, InteractionClientProvider } from "../interaction/InteractionClient.js";
27
30
  import { ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
28
31
  import { DedicatedChannelExchangeProvider } from "../protocol/ExchangeProvider.js";
29
- import { NodeDiscoveryType } from "./PeerSet.js";
32
+ import { NodeDiscoveryType, PeerSet } from "./PeerSet.js";
30
33
  const logger = Logger.get("PeerCommissioner");
31
34
  class ControllerCommissioner {
32
35
  #context;
@@ -37,6 +40,7 @@ class ControllerCommissioner {
37
40
  }
38
41
  static [Environmental.create](env) {
39
42
  const instance = new ControllerCommissioner({
43
+ peers: env.get(PeerSet),
40
44
  clients: env.get(InteractionClientProvider),
41
45
  scanners: env.get(ScannerSet),
42
46
  netInterfaces: env.get(NetInterfaceSet),
@@ -51,7 +55,10 @@ class ControllerCommissioner {
51
55
  * Commmission a previously discovered node.
52
56
  */
53
57
  async commission(options) {
54
- const { passcode, addresses, discoveryData } = options;
58
+ const { passcode, addresses, discoveryData, fabric, nodeId } = options;
59
+ if (nodeId !== void 0) {
60
+ this.#assertPeerAddress(fabric.addressOf(nodeId));
61
+ }
55
62
  addresses.sort((a) => a.type === "udp" ? -1 : 1);
56
63
  let channel;
57
64
  for (const address of addresses) {
@@ -135,6 +142,10 @@ class ControllerCommissioner {
135
142
  * Commission a node with discovery.
136
143
  */
137
144
  async commissionWithDiscovery(options) {
145
+ const { fabric, nodeId } = options;
146
+ if (nodeId !== void 0) {
147
+ this.#assertPeerAddress(fabric.addressOf(nodeId));
148
+ }
138
149
  const { paseSecureChannel, discoveryData } = await this.discoverAndEstablishPase(options);
139
150
  return await this.#commissionConnectedNode(paseSecureChannel, options, discoveryData);
140
151
  }
@@ -203,23 +214,44 @@ class ControllerCommissioner {
203
214
  await unsecureSession.destroy();
204
215
  return new MessageChannel(paseChannel, paseSecureSession);
205
216
  }
217
+ /** Validate if a Peert Address is already known and commissioned */
218
+ #assertPeerAddress(address) {
219
+ if (this.#context.peers.has(address)) {
220
+ throw new CommissioningError(`Node ID ${address.nodeId} is already commissioned and can not be reused.`);
221
+ }
222
+ }
223
+ /** Finds an unused random Node-ID to use for commissioning if not already provided. */
224
+ #determineAddress(fabric, nodeId) {
225
+ while (true) {
226
+ const address = fabric.addressOf(nodeId ?? NodeId.randomOperationalNodeId());
227
+ try {
228
+ this.#assertPeerAddress(address);
229
+ } catch (error) {
230
+ if (error instanceof CommissioningError && nodeId !== void 0) {
231
+ throw error;
232
+ }
233
+ continue;
234
+ }
235
+ return address;
236
+ }
237
+ }
206
238
  /**
207
239
  * Method to commission a device with a PASE secure channel. It returns the NodeId of the commissioned device on
208
240
  * success.
209
241
  */
210
242
  async #commissionConnectedNode(paseSecureMessageChannel, options, discoveryData) {
243
+ const {
244
+ fabric,
245
+ finalizeCommissioning: performCaseCommissioning,
246
+ commissioningFlowImpl = ControllerCommissioningFlow
247
+ } = options;
211
248
  const commissioningOptions = {
212
249
  regulatoryLocation: GeneralCommissioning.RegulatoryLocationType.Outdoor,
213
250
  // Set to the most restrictive if relevant
214
251
  regulatoryCountryCode: "XX",
215
252
  ...options
216
253
  };
217
- const {
218
- fabric,
219
- finalizeCommissioning: performCaseCommissioning,
220
- commissioningFlowImpl = ControllerCommissioningFlow
221
- } = commissioningOptions;
222
- const address = fabric.addressOf(commissioningOptions.nodeId ?? NodeId.randomOperationalNodeId());
254
+ const address = this.#determineAddress(fabric, commissioningOptions.nodeId);
223
255
  logger.info(
224
256
  `Start commissioning of node ${address.nodeId} into fabric ${fabric.fabricId} (index ${address.fabricIndex})`
225
257
  );
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/peer/ControllerCommissioner.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,4BAA4B;AACrC,SAAS,4BAA4B;AACrC,SAA+E,kBAAkB;AAEjG;AAAA,EAEI;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OACG;AACP,SAAS,mBAAmB;AAC5B,SAAS,mCAAuE;AAChF,SAAS,qBAAqB,2CAA2C;AACzE,SAAS,kCAAkC;AAC3C,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAsC,QAAQ,kCAA4D;AAC1G,SAAS,mBAAmB,iCAAiC;AAC7D,SAAS,iBAAiB,sBAAsB;AAChD,SAAS,wCAAwC;AAEjD,SAAS,yBAAyB;AAElC,MAAM,SAAS,OAAO,IAAI,kBAAkB;AA4FrC,MAAM,uBAAuB;AAAA,EAChC;AAAA,EACA;AAAA,EAEA,YAAY,SAAwC;AAChD,SAAK,WAAW;AAChB,SAAK,cAAc,IAAI,WAAW,QAAQ,QAAQ;AAAA,EACtD;AAAA,EAEA,QAAQ,cAAc,MAAM,EAAE,KAAkB;AAC5C,UAAM,WAAW,IAAI,uBAAuB;AAAA,MACxC,SAAS,IAAI,IAAI,yBAAyB;AAAA,MAC1C,UAAU,IAAI,IAAI,UAAU;AAAA,MAC5B,eAAe,IAAI,IAAI,eAAe;AAAA,MACtC,UAAU,IAAI,IAAI,cAAc;AAAA,MAChC,WAAW,IAAI,IAAI,eAAe;AAAA,MAClC,IAAI,IAAI,IAAI,oBAAoB;AAAA,IACpC,CAAC;AACD,QAAI,IAAI,wBAAwB,QAAQ;AACxC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,SAAgE;AAC7E,UAAM,EAAE,UAAU,WAAW,cAAc,IAAI;AAG/C,cAAU,KAAK,OAAM,EAAE,SAAS,QAAQ,KAAK,CAAE;AAG/C,QAAI;AACJ,eAAW,WAAW,WAAW;AAC7B,UAAI;AACA,kBAAU,MAAM,KAAK,6BAA6B,SAAS,UAAU,aAAa;AAAA,MACtF,SAAS,GAAG;AACR,+BAAuB,OAAO,CAAC;AAC/B,eAAO,KAAK,wBAAwB,sBAAsB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE;AAAA,MACtF;AAAA,IACJ;AAEA,QAAI,YAAY,QAAW;AACvB,YAAM,IAAI,uBAAuB,6BAA6B;AAAA,IAClE;AAEA,WAAO,MAAM,KAAK,yBAAyB,SAAS,SAAS,aAAa;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBACF,SAC6E;AAC7E,UAAM;AAAA,MACF,WAAW,EAAE,iBAAiB,GAAG;AAAA,MACjC;AAAA,IACJ,IAAI;AAEJ,UAAM,uBACF,0BAA0B,QAAQ,YAAY,QAAQ,UAAU,uBAAuB;AAC3F,QAAI;AAAA,MACA,WAAW,EAAE,wBAAwB,CAAC,GAAG,aAAa;AAAA,IAC1D,IAAI;AACJ,QAAI,iBAAiB,oBAAoB,QAAQ,YAAY,QAAQ,UAAU,iBAAiB,CAAC;AAEjG,QACI,KAAK,SAAS,SAAS,cAAc,YAAY,GAAG,KACpD,KAAK,SAAS,cAAc,gBAAgB,YAAY,KAAK,IAAI,MAAM,QACzE;AACE,4BAAsB,cAAc;AAAA,IACxC;AACA,QAAI,yBAAyB,QAAW;AACpC,UAAI,EAAE,UAAU,IAAI;AACpB,UAAI,sBAAsB,QAAQ,MAAM;AACpC,gCAAwB,EAAE,aAAa,MAAM,KAAK,UAAU,KAAK,aAAW,QAAQ,SAAS,KAAK,EAAE;AAAA,MACxG,WAAW,sBAAsB,gBAAgB,MAAM;AAEnD,oBAAY,UAAU,OAAO,aAAW,QAAQ,SAAS,KAAK;AAAA,MAClE;AACA,gBAAU,KAAK,OAAM,EAAE,SAAS,QAAQ,KAAK,CAAE;AAC/C,qBAAe,UAAU,CAAC;AAC1B,UAAI,gBAAgB,wBAAwB,qBAAqB,eAAe,QAAW;AAEvF,yBAAiB,EAAE,YAAY,qBAAqB,WAAqB;AAAA,MAC7E,OAAO;AACH,yBAAiB,EAAE,mBAAmB,qBAAqB,EAAE;AAAA,MACjE;AAAA,IACJ;AAEA,UAAM,gBAAgB,KAAK,SAAS,SAAS,OAAO,qBAAqB;AAEzE,WAAO;AAAA,MACH,wCAAwC,WAAW,KAAK,cAAc,CAAC,QACnE,cAAc,MAClB,8BAA8B,WAAW,KAAK,YAAY,CAAC;AAAA,IAC/D;AAGA,QAAI;AACJ,QAAI;AAGJ,QAAI,iBAAiB,QAAW;AAC5B,UAAI;AACA,4BAAoB,MAAM,KAAK,6BAA6B,cAAc,QAAQ;AAAA,MACtF,SAAS,OAAO;AACZ,+BAAuB,OAAO,KAAK;AAAA,MACvC;AAAA,IACJ;AACA,QAAI,sBAAsB,QAAW;AACjC,YAAM,oBAAoB,MAAM,oBAAoB;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAEA,YAAM,EAAE,OAAO,IAAI,MAAM,oBAAoB;AAAA,QACzC;AAAA,QACA;AAAA,QACA,YACI,cAAc,QAAQ,aAAW,QAAQ,mCAAmC,cAAc,CAAC;AAAA,QAC/F,OAAO,SAAS,WAAW;AACvB,gBAAM,UAAU,MAAM,KAAK,6BAA6B,SAAS,UAAU,MAAM;AACjF,0BAAgB;AAChB,iBAAO;AAAA,QACX;AAAA,MACJ;AAGA,0BAAoB;AAAA,IACxB;AAEA,WAAO,EAAE,mBAAmB,cAAc;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBAAwB,SAAiE;AAE3F,UAAM,EAAE,mBAAmB,cAAc,IAAI,MAAM,KAAK,yBAAyB,OAAO;AAGxF,WAAO,MAAM,KAAK,yBAAyB,mBAAmB,SAAS,aAAa;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,6BACF,SACA,UACA,QACuB;AACvB,QAAI;AACJ,QAAI,WAAW,QAAW;AACtB,aAAO,KAAK,4BAA4B,YAAY,yBAAyB,MAAM,CAAC;AAAA,IACxF;AACA,QAAI,QAAQ,SAAS,OAAO;AACxB,YAAM,EAAE,GAAG,IAAI;AAEf,YAAM,gBAAgB,OAAO,EAAE;AAC/B,YAAM,gBAAgB,KAAK,SAAS,cAAc;AAAA,QAC9C,YAAY;AAAA,QACZ,gBAAgB,OAAO;AAAA,MAC3B;AACA,UAAI,kBAAkB,QAAW;AAE7B,cAAM,IAAI;AAAA,UACN,MAAM,gBAAgB,MAAM,GAAG,0CAA0C,EAAE;AAAA,QAC/E;AAAA,MACJ;AACA,oBAAc,MAAM,cAAc,YAAY,OAAO;AAAA,IACzD,OAAO;AACH,YAAM,MAAM,KAAK,SAAS,cAAc,aAAa,YAAY,GAAG;AACpE,UAAI,CAAC,KAAK;AACN,cAAM,IAAI;AAAA,UACN,6CAA6C,QAAQ,iBAAiB;AAAA,QAC1E;AAAA,MACJ;AAEA,oBAAc,MAAM,IAAI,YAAY,OAAO;AAAA,IAC/C;AAGA,UAAM,kBAAkB,KAAK,SAAS,SAAS,sBAAsB;AAAA;AAAA,MAEjE,mBAAmB;AAAA,QACf,gBAAgB,QAAQ;AAAA,QACxB,kBAAkB,QAAQ;AAAA,QAC1B,mBAAmB,QAAQ;AAAA,MAC/B;AAAA,MACA,aAAa;AAAA,IACjB,CAAC;AACD,UAAM,6BAA6B,IAAI,eAAe,aAAa,eAAe;AAClF,UAAM,eAAe,KAAK,SAAS,UAAU;AAAA,MACzC;AAAA,MACA;AAAA,IACJ;AAEA,QAAI;AACJ,QAAI;AACA,0BAAoB,MAAM,KAAK,YAAY;AAAA,QACvC,KAAK,SAAS,SAAS;AAAA,QACvB;AAAA,QACA;AAAA,MACJ;AAAA,IACJ,SAAS,GAAG;AAER,YAAM,aAAa,MAAM;AACzB,UAAI,aAAa,4BAA4B;AACzC,cAAM,IAAI;AAAA,UACN,uEAAuE,EAAE,OAAO;AAAA,QACpF;AAAA,MACJ;AACA,YAAM;AAAA,IACV;AAEA,UAAM,gBAAgB,QAAQ;AAC9B,WAAO,IAAI,eAAe,aAAa,iBAAiB;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,yBACF,0BACA,SACA,eACoB;AACpB,UAAM,uBAAuB;AAAA,MACzB,oBAAoB,qBAAqB,uBAAuB;AAAA;AAAA,MAChE,uBAAuB;AAAA,MACvB,GAAG;AAAA,IACP;AAEA,UAAM;AAAA,MACF;AAAA,MACA,uBAAuB;AAAA,MACvB,wBAAwB;AAAA,IAC5B,IAAI;AA8BJ,UAAM,UAAU,OAAO,UAAU,qBAAqB,UAAU,OAAO,wBAAwB,CAAC;AAChG,WAAO;AAAA,MACH,+BAA+B,QAAQ,MAAM,gBAAgB,OAAO,QAAQ,WAAW,QAAQ,WAAW;AAAA,IAC9G;AACA,UAAM,uBAAuB,IAAI;AAAA;AAAA,MAE7B,IAAI;AAAA,QACA,IAAI,iCAAiC,KAAK,SAAS,WAAW,wBAAwB;AAAA,QACtF,KAAK,SAAS,QAAQ,MAAM;AAAA,QAC5B;AAAA,MACJ;AAAA,MACA,KAAK,SAAS;AAAA,MACd;AAAA,MACA;AAAA,MACA,OAAOA,UAAS,kCAAkC;AAC9C,YAAI,CAAC,+BAA+B;AAMhC,gBAAM,yBAAyB,MAAM;AAAA,QACzC;AAEA,YAAI,6BAA6B,QAAW;AACxC,gBAAM,yBAAyBA,UAAS,aAAa;AACrD;AAAA,QACJ;AAGA,eAAO,MAAM,KAAK,SAAS,QAAQ,QAAQA,UAAS;AAAA,UAChD,kBAAkB;AAAA,YACd,eAAe,kBAAkB;AAAA,YACjC,gBAAgB;AAAA,YAChB;AAAA,UACJ;AAAA,UACA,kBAAkB;AAAA,QACtB,CAAC;AAAA,MACL;AAAA,IACJ;AAEA,QAAI;AACA,YAAM,qBAAqB,qBAAqB;AAAA,IACpD,SAAS,OAAO;AAEZ,YAAM,KAAK,SAAS,QAAQ,MAAM,OAAO,OAAO;AAChD,YAAM;AAAA,IACV,UAAE;AACE,UAAI,CAAC,yBAAyB,QAAQ;AAMlC,cAAM,yBAAyB,MAAM;AAAA,MACzC;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;",
4
+ "mappings": "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",
5
5
  "names": ["address"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/protocol",
3
- "version": "0.13.0-alpha.0-20250424-4760af1f3",
3
+ "version": "0.13.0-alpha.0-20250425-94b33ff98",
4
4
  "description": "Low-level APIs for Matter interaction",
5
5
  "keywords": [
6
6
  "iot",
@@ -40,13 +40,13 @@
40
40
  "#*": "./src/*"
41
41
  },
42
42
  "dependencies": {
43
- "@matter/general": "0.13.0-alpha.0-20250424-4760af1f3",
44
- "@matter/model": "0.13.0-alpha.0-20250424-4760af1f3",
45
- "@matter/types": "0.13.0-alpha.0-20250424-4760af1f3"
43
+ "@matter/general": "0.13.0-alpha.0-20250425-94b33ff98",
44
+ "@matter/model": "0.13.0-alpha.0-20250425-94b33ff98",
45
+ "@matter/types": "0.13.0-alpha.0-20250425-94b33ff98"
46
46
  },
47
47
  "devDependencies": {
48
- "@matter/tools": "0.13.0-alpha.0-20250424-4760af1f3",
49
- "@matter/testing": "0.13.0-alpha.0-20250424-4760af1f3"
48
+ "@matter/tools": "0.13.0-alpha.0-20250425-94b33ff98",
49
+ "@matter/testing": "0.13.0-alpha.0-20250425-94b33ff98"
50
50
  },
51
51
  "files": [
52
52
  "dist/**/*",
@@ -23,7 +23,11 @@ import {
23
23
  serverAddressToString,
24
24
  } from "#general";
25
25
  import { MdnsScanner } from "#mdns/MdnsScanner.js";
26
- import { ControllerCommissioningFlow, ControllerCommissioningFlowOptions } from "#peer/ControllerCommissioningFlow.js";
26
+ import {
27
+ CommissioningError,
28
+ ControllerCommissioningFlow,
29
+ ControllerCommissioningFlowOptions,
30
+ } from "#peer/ControllerCommissioningFlow.js";
27
31
  import { ControllerDiscovery, PairRetransmissionLimitReachedError } from "#peer/ControllerDiscovery.js";
28
32
  import { ChannelStatusResponseError } from "#securechannel/index.js";
29
33
  import { PaseClient } from "#session/index.js";
@@ -33,7 +37,7 @@ import { InteractionClient, InteractionClientProvider } from "../interaction/Int
33
37
  import { ExchangeManager, MessageChannel } from "../protocol/ExchangeManager.js";
34
38
  import { DedicatedChannelExchangeProvider } from "../protocol/ExchangeProvider.js";
35
39
  import { PeerAddress } from "./PeerAddress.js";
36
- import { NodeDiscoveryType } from "./PeerSet.js";
40
+ import { NodeDiscoveryType, PeerSet } from "./PeerSet.js";
37
41
 
38
42
  const logger = Logger.get("PeerCommissioner");
39
43
 
@@ -116,6 +120,7 @@ export interface DiscoveryAndCommissioningOptions extends CommissioningOptions {
116
120
  * Interfaces {@link ControllerCommissioner} with other components.
117
121
  */
118
122
  export interface ControllerCommissionerContext {
123
+ peers: PeerSet;
119
124
  clients: InteractionClientProvider;
120
125
  scanners: ScannerSet;
121
126
  netInterfaces: NetInterfaceSet;
@@ -138,6 +143,7 @@ export class ControllerCommissioner {
138
143
 
139
144
  static [Environmental.create](env: Environment) {
140
145
  const instance = new ControllerCommissioner({
146
+ peers: env.get(PeerSet),
141
147
  clients: env.get(InteractionClientProvider),
142
148
  scanners: env.get(ScannerSet),
143
149
  netInterfaces: env.get(NetInterfaceSet),
@@ -153,7 +159,12 @@ export class ControllerCommissioner {
153
159
  * Commmission a previously discovered node.
154
160
  */
155
161
  async commission(options: LocatedNodeCommissioningOptions): Promise<PeerAddress> {
156
- const { passcode, addresses, discoveryData } = options;
162
+ const { passcode, addresses, discoveryData, fabric, nodeId } = options;
163
+
164
+ // If a NodeId is set verify that this nodeId is not already used
165
+ if (nodeId !== undefined) {
166
+ this.#assertPeerAddress(fabric.addressOf(nodeId));
167
+ }
157
168
 
158
169
  // Prioritize UDP
159
170
  addresses.sort(a => (a.type === "udp" ? -1 : 1));
@@ -268,6 +279,12 @@ export class ControllerCommissioner {
268
279
  * Commission a node with discovery.
269
280
  */
270
281
  async commissionWithDiscovery(options: DiscoveryAndCommissioningOptions): Promise<PeerAddress> {
282
+ const { fabric, nodeId } = options;
283
+ // If a NodeId is set verify that this nodeId is not already used
284
+ if (nodeId !== undefined) {
285
+ this.#assertPeerAddress(fabric.addressOf(nodeId));
286
+ }
287
+
271
288
  // Establish PASE channel
272
289
  const { paseSecureChannel, discoveryData } = await this.discoverAndEstablishPase(options);
273
290
 
@@ -353,6 +370,29 @@ export class ControllerCommissioner {
353
370
  return new MessageChannel(paseChannel, paseSecureSession);
354
371
  }
355
372
 
373
+ /** Validate if a Peert Address is already known and commissioned */
374
+ #assertPeerAddress(address: PeerAddress) {
375
+ if (this.#context.peers.has(address)) {
376
+ throw new CommissioningError(`Node ID ${address.nodeId} is already commissioned and can not be reused.`);
377
+ }
378
+ }
379
+
380
+ /** Finds an unused random Node-ID to use for commissioning if not already provided. */
381
+ #determineAddress(fabric: Fabric, nodeId?: NodeId) {
382
+ while (true) {
383
+ const address = fabric.addressOf(nodeId ?? NodeId.randomOperationalNodeId());
384
+ try {
385
+ this.#assertPeerAddress(address);
386
+ } catch (error) {
387
+ if (error instanceof CommissioningError && nodeId !== undefined) {
388
+ throw error;
389
+ }
390
+ continue;
391
+ }
392
+ return address;
393
+ }
394
+ }
395
+
356
396
  /**
357
397
  * Method to commission a device with a PASE secure channel. It returns the NodeId of the commissioned device on
358
398
  * success.
@@ -362,18 +402,18 @@ export class ControllerCommissioner {
362
402
  options: CommissioningOptions,
363
403
  discoveryData?: DiscoveryData,
364
404
  ): Promise<PeerAddress> {
405
+ const {
406
+ fabric,
407
+ finalizeCommissioning: performCaseCommissioning,
408
+ commissioningFlowImpl = ControllerCommissioningFlow,
409
+ } = options;
410
+
365
411
  const commissioningOptions = {
366
412
  regulatoryLocation: GeneralCommissioning.RegulatoryLocationType.Outdoor, // Set to the most restrictive if relevant
367
413
  regulatoryCountryCode: "XX",
368
414
  ...options,
369
415
  };
370
416
 
371
- const {
372
- fabric,
373
- finalizeCommissioning: performCaseCommissioning,
374
- commissioningFlowImpl = ControllerCommissioningFlow,
375
- } = commissioningOptions;
376
-
377
417
  // TODO: Create the fabric only when needed before commissioning (to do when refactoring MatterController away)
378
418
  // TODO also move certificateManager and other parts into that class to get rid of them here
379
419
  // TODO Depending on the Error type during commissioning we can do a retry ...
@@ -402,7 +442,7 @@ export class ControllerCommissioner {
402
442
  Commissionee SHALL exit Commissioning Mode after 20 failed attempts.
403
443
  */
404
444
 
405
- const address = fabric.addressOf(commissioningOptions.nodeId ?? NodeId.randomOperationalNodeId());
445
+ const address = this.#determineAddress(fabric, commissioningOptions.nodeId);
406
446
  logger.info(
407
447
  `Start commissioning of node ${address.nodeId} into fabric ${fabric.fabricId} (index ${address.fabricIndex})`,
408
448
  );