@matter/protocol 0.12.0-alpha.0-20250101-22e7c1044 → 0.12.0-alpha.0-20250107-af5a068c3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/cjs/cluster/client/ClusterClient.d.ts.map +1 -1
  2. package/dist/cjs/cluster/client/ClusterClient.js +6 -0
  3. package/dist/cjs/cluster/client/ClusterClient.js.map +1 -1
  4. package/dist/cjs/cluster/client/ClusterClientTypes.d.ts +4 -0
  5. package/dist/cjs/cluster/client/ClusterClientTypes.d.ts.map +1 -1
  6. package/dist/cjs/codec/MessageCodec.d.ts.map +1 -1
  7. package/dist/cjs/codec/MessageCodec.js +5 -1
  8. package/dist/cjs/codec/MessageCodec.js.map +1 -1
  9. package/dist/cjs/common/Scanner.d.ts +1 -1
  10. package/dist/cjs/common/Scanner.d.ts.map +1 -1
  11. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
  12. package/dist/cjs/peer/ControllerCommissioner.js +8 -2
  13. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  14. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts +1 -1
  15. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  16. package/dist/cjs/peer/ControllerCommissioningFlow.js +5 -1
  17. package/dist/cjs/peer/ControllerCommissioningFlow.js.map +1 -1
  18. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
  19. package/dist/cjs/peer/ControllerDiscovery.js +6 -1
  20. package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
  21. package/dist/cjs/protocol/DeviceAdvertiser.d.ts +4 -0
  22. package/dist/cjs/protocol/DeviceAdvertiser.d.ts.map +1 -1
  23. package/dist/cjs/protocol/DeviceAdvertiser.js +10 -0
  24. package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
  25. package/dist/esm/cluster/client/ClusterClient.d.ts.map +1 -1
  26. package/dist/esm/cluster/client/ClusterClient.js +6 -0
  27. package/dist/esm/cluster/client/ClusterClient.js.map +1 -1
  28. package/dist/esm/cluster/client/ClusterClientTypes.d.ts +4 -0
  29. package/dist/esm/cluster/client/ClusterClientTypes.d.ts.map +1 -1
  30. package/dist/esm/codec/MessageCodec.d.ts.map +1 -1
  31. package/dist/esm/codec/MessageCodec.js +5 -1
  32. package/dist/esm/codec/MessageCodec.js.map +1 -1
  33. package/dist/esm/common/Scanner.d.ts +1 -1
  34. package/dist/esm/common/Scanner.d.ts.map +1 -1
  35. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
  36. package/dist/esm/peer/ControllerCommissioner.js +8 -2
  37. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  38. package/dist/esm/peer/ControllerCommissioningFlow.d.ts +1 -1
  39. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -1
  40. package/dist/esm/peer/ControllerCommissioningFlow.js +5 -1
  41. package/dist/esm/peer/ControllerCommissioningFlow.js.map +1 -1
  42. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
  43. package/dist/esm/peer/ControllerDiscovery.js +6 -1
  44. package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
  45. package/dist/esm/protocol/DeviceAdvertiser.d.ts +4 -0
  46. package/dist/esm/protocol/DeviceAdvertiser.d.ts.map +1 -1
  47. package/dist/esm/protocol/DeviceAdvertiser.js +10 -0
  48. package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
  49. package/package.json +7 -7
  50. package/src/cluster/client/ClusterClient.ts +6 -0
  51. package/src/cluster/client/ClusterClientTypes.ts +8 -0
  52. package/src/codec/MessageCodec.ts +5 -1
  53. package/src/common/Scanner.ts +1 -1
  54. package/src/peer/ControllerCommissioner.ts +18 -11
  55. package/src/peer/ControllerCommissioningFlow.ts +13 -3
  56. package/src/peer/ControllerDiscovery.ts +5 -1
  57. package/src/protocol/DeviceAdvertiser.ts +14 -0
@@ -142,7 +142,10 @@ export class ControllerCommissioningFlow {
142
142
  #interactionClient: InteractionClient;
143
143
  readonly #ca: CertificateAuthority;
144
144
  readonly #fabric: Fabric;
145
- readonly #transitionToCase: (peerAddress: PeerAddress) => Promise<InteractionClient | undefined>;
145
+ readonly #transitionToCase: (
146
+ peerAddress: PeerAddress,
147
+ supportsConcurrentConnections: boolean,
148
+ ) => Promise<InteractionClient | undefined>;
146
149
  readonly #commissioningOptions: ControllerCommissioningFlowOptions;
147
150
  readonly #commissioningSteps = new Array<CommissioningStep>();
148
151
  readonly #commissioningStepResults = new Map<string, CommissioningStepResult>();
@@ -168,7 +171,10 @@ export class ControllerCommissioningFlow {
168
171
  commissioningOptions: ControllerCommissioningFlowOptions,
169
172
 
170
173
  /** Callback that establishes CASE connection or handles final commissioning */
171
- transitionToCase: (peerAddress: PeerAddress) => Promise<InteractionClient | undefined>,
174
+ transitionToCase: (
175
+ peerAddress: PeerAddress,
176
+ supportsConcurrentConnections: boolean,
177
+ ) => Promise<InteractionClient | undefined>,
172
178
  ) {
173
179
  this.#interactionClient = interactionClient;
174
180
  this.#ca = ca;
@@ -1144,7 +1150,11 @@ export class ControllerCommissioningFlow {
1144
1150
  */
1145
1151
  async #reconnectWithDevice() {
1146
1152
  logger.debug("Reconnecting with device ...");
1147
- const transitionResult = await this.#transitionToCase(this.#interactionClient.address);
1153
+ const transitionResult = await this.#transitionToCase(
1154
+ this.#interactionClient.address,
1155
+ // Assume concurrent connections are supported if not know (which should not be the case when we came here)
1156
+ this.#collectedCommissioningData.supportsConcurrentConnection ?? true,
1157
+ );
1148
1158
 
1149
1159
  if (transitionResult === undefined) {
1150
1160
  logger.debug("CASE commissioning handled externally, terminating commissioning flow");
@@ -43,7 +43,11 @@ export class ControllerDiscovery {
43
43
  logger.info(`Start Discovering devices using identifier ${Logger.toJSON(identifier)} ...`);
44
44
 
45
45
  const scanResults = scanners.map(async scanner => {
46
- const foundDevices = await scanner.findCommissionableDevices(identifier, timeoutSeconds);
46
+ const foundDevices = await scanner.findCommissionableDevices(
47
+ identifier,
48
+ timeoutSeconds,
49
+ scanner.type === "ble", // Force rediscovery for BLE
50
+ );
47
51
  logger.info(`Found ${foundDevices.length} devices using identifier ${Logger.toJSON(identifier)}`);
48
52
  if (foundDevices.length === 0) {
49
53
  throw new CommissioningError(
@@ -39,6 +39,7 @@ export class DeviceAdvertiser {
39
39
  readonly #context: DeviceAdvertiserContext;
40
40
  readonly #broadcasters = new Set<InstanceBroadcaster>();
41
41
  readonly #timedOut = AsyncObservable<[]>();
42
+ readonly #operationalModeEnabled = new AsyncObservable<[]>();
42
43
  readonly #operationalModeEnded = new AsyncObservable<[]>();
43
44
  readonly #observers = new ObserverGroup();
44
45
  #interval: Timer;
@@ -103,6 +104,13 @@ export class DeviceAdvertiser {
103
104
  return this.#operationalModeEnded;
104
105
  }
105
106
 
107
+ /**
108
+ * Emitted when the device starts advertising in operational mode.
109
+ */
110
+ get operationalModeEnabled() {
111
+ return this.#operationalModeEnabled;
112
+ }
113
+
106
114
  async enterCommissioningMode(mode: CommissioningMode, deviceData: CommissioningModeInstanceData) {
107
115
  this.#commissioningMode = mode;
108
116
  for (const broadcaster of this.#broadcasters) {
@@ -173,6 +181,12 @@ export class DeviceAdvertiser {
173
181
  }
174
182
 
175
183
  async advertiseFabrics(fabrics: Fabric[], expireCommissioningAnnouncement = false) {
184
+ if (expireCommissioningAnnouncement) {
185
+ // TODO: For real "non-ethernet-only" cases like Wifi or Thread devices this might still be too early.
186
+ // In these cases we might need an option to (re-)create mdns broadcaster just when interface
187
+ // is connected
188
+ await this.#operationalModeEnabled.emit();
189
+ }
176
190
  for (const broadcaster of this.#broadcasters) {
177
191
  await broadcaster.setFabrics(fabrics, expireCommissioningAnnouncement);
178
192
  await broadcaster.announce();