@matter/react-native 0.16.9 → 0.16.10-alpha.0-20260218-52b333ceb

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.
@@ -32,7 +32,7 @@ export declare class BleScanner implements Scanner {
32
32
  * promise.
33
33
  */
34
34
  private finishWaiter;
35
- cancelCommissionableDeviceDiscovery(identifier: CommissionableDeviceIdentifiers): void;
35
+ cancelCommissionableDeviceDiscovery(identifier: CommissionableDeviceIdentifiers, resolvePromise?: boolean): void;
36
36
  private handleDiscoveredDevice;
37
37
  private findCommissionableQueryIdentifier;
38
38
  /**
@@ -44,7 +44,7 @@ export declare class BleScanner implements Scanner {
44
44
  findOperationalDevice(): Promise<undefined>;
45
45
  getDiscoveredOperationalDevice(): undefined;
46
46
  findCommissionableDevices(identifier: CommissionableDeviceIdentifiers, timeout?: Duration, ignoreExistingRecords?: boolean): Promise<CommissionableDevice[]>;
47
- findCommissionableDevicesContinuously(identifier: CommissionableDeviceIdentifiers, callback: (device: CommissionableDevice) => void, timeout?: Duration): Promise<CommissionableDevice[]>;
47
+ findCommissionableDevicesContinuously(identifier: CommissionableDeviceIdentifiers, callback: (device: CommissionableDevice) => void, timeout?: Duration, cancelSignal?: Promise<void>): Promise<CommissionableDevice[]>;
48
48
  getDiscoveredCommissionableDevices(identifier: CommissionableDeviceIdentifiers): CommissionableDevice[];
49
49
  close(): Promise<void>;
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BleScanner.d.ts","sourceRoot":"","sources":["../../../src/ble/BleScanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,WAAW,EAAiB,QAAQ,EAAmD,MAAM,UAAU,CAAC;AACxH,OAAO,EAAsB,oBAAoB,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/G,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,wBAAwB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,KAAK,wBAAwB,GAAG,oBAAoB,GAAG;IACnD,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,UAAW,YAAW,OAAO;IAe1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAdtC,IAAI,IAAI,gBAEP;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAO1B;IACJ,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0C;gBAErD,SAAS,EAAE,oBAAoB;IAMrD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB;IAQhE;;;OAGG;YACW,qBAAqB;IAYnC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB,mCAAmC,CAAC,UAAU,EAAE,+BAA+B;IAK/E,OAAO,CAAC,sBAAsB;IAoC9B,OAAO,CAAC,iCAAiC;IAmCzC;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAa1C,OAAO,CAAC,wBAAwB;IA4B1B,qBAAqB,IAAI,OAAO,CAAC,SAAS,CAAC;IAKjD,8BAA8B,IAAI,SAAS;IAKrC,yBAAyB,CAC3B,UAAU,EAAE,+BAA+B,EAC3C,OAAO,WAAc,EACrB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAqB5B,qCAAqC,CACvC,UAAU,EAAE,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAChD,OAAO,WAAc,GACtB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA2BlC,kCAAkC,CAAC,UAAU,EAAE,+BAA+B,GAAG,oBAAoB,EAAE;IAIjG,KAAK;CAMd"}
1
+ {"version":3,"file":"BleScanner.d.ts","sourceRoot":"","sources":["../../../src/ble/BleScanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,WAAW,EAAiB,QAAQ,EAAkD,MAAM,UAAU,CAAC;AACvH,OAAO,EAAsB,oBAAoB,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/G,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,wBAAwB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,KAAK,wBAAwB,GAAG,oBAAoB,GAAG;IACnD,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,UAAW,YAAW,OAAO;IAgB1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAftC,IAAI,IAAI,gBAEP;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAQ1B;IACJ,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0C;gBAErD,SAAS,EAAE,oBAAoB;IAMrD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB;IAQhE;;;OAGG;YACW,qBAAqB;IAuBnC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB,mCAAmC,CAAC,UAAU,EAAE,+BAA+B,EAAE,cAAc,UAAO;IAOtG,OAAO,CAAC,sBAAsB;IAoC9B,OAAO,CAAC,iCAAiC;IAmCzC;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAa1C,OAAO,CAAC,wBAAwB;IA4B1B,qBAAqB,IAAI,OAAO,CAAC,SAAS,CAAC;IAKjD,8BAA8B,IAAI,SAAS;IAKrC,yBAAyB,CAC3B,UAAU,EAAE,+BAA+B,EAC3C,OAAO,WAAc,EACrB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAqB5B,qCAAqC,CACvC,UAAU,EAAE,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAChD,OAAO,CAAC,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAgDlC,kCAAkC,CAAC,UAAU,EAAE,+BAA+B,GAAG,oBAAoB,EAAE;IAIjG,KAAK;CAMd"}
@@ -53,12 +53,18 @@ class BleScanner {
53
53
  * Registers a deferred promise for a specific queryId together with a timeout and return the promise.
54
54
  * The promise will be resolved when the timer runs out latest.
55
55
  */
56
- async registerWaiterPromise(queryId, timeout, resolveOnUpdatedRecords = true) {
56
+ async registerWaiterPromise(queryId, timeout, resolveOnUpdatedRecords = true, cancelResolver) {
57
57
  const { promise, resolver } = (0, import_general.createPromise)();
58
- const timer = import_general.Time.getTimer("BLE query timeout", timeout, () => this.finishWaiter(queryId, true)).start();
59
- this.recordWaiters.set(queryId, { resolver, timer, resolveOnUpdatedRecords });
58
+ let timer;
59
+ if (timeout) {
60
+ timer = import_general.Time.getTimer("BLE query timeout", timeout, () => {
61
+ cancelResolver?.();
62
+ this.finishWaiter(queryId, true);
63
+ }).start();
64
+ }
65
+ this.recordWaiters.set(queryId, { resolver, timer, resolveOnUpdatedRecords, cancelResolver });
60
66
  logger.debug(
61
- `Registered waiter for query ${queryId} with timeout ${timeout ? import_general.Duration.format(timeout) : "(none)"}${resolveOnUpdatedRecords ? "" : " (not resolving on updated records)"}`
67
+ `Registered waiter for query ${queryId} with timeout ${timeout === void 0 ? "(none)" : import_general.Duration.format(timeout)}${resolveOnUpdatedRecords ? "" : " (not resolving on updated records)"}`
62
68
  );
63
69
  await promise;
64
70
  }
@@ -72,15 +78,17 @@ class BleScanner {
72
78
  const { timer, resolver, resolveOnUpdatedRecords } = waiter;
73
79
  if (isUpdatedRecord && !resolveOnUpdatedRecords) return;
74
80
  logger.debug(`Finishing waiter for query ${queryId}, resolving: ${resolvePromise}`);
75
- timer.stop();
81
+ timer?.stop();
76
82
  if (resolvePromise) {
77
83
  resolver();
78
84
  }
79
85
  this.recordWaiters.delete(queryId);
80
86
  }
81
- cancelCommissionableDeviceDiscovery(identifier) {
87
+ cancelCommissionableDeviceDiscovery(identifier, resolvePromise = true) {
82
88
  const queryKey = this.buildCommissionableQueryIdentifier(identifier);
83
- this.finishWaiter(queryKey, true);
89
+ const { cancelResolver } = this.recordWaiters.get(queryKey) ?? {};
90
+ cancelResolver?.();
91
+ this.finishWaiter(queryKey, resolvePromise);
84
92
  }
85
93
  handleDiscoveredDevice(peripheral, manufacturerServiceData) {
86
94
  logger.debug(
@@ -206,12 +214,28 @@ class BleScanner {
206
214
  }
207
215
  return storedRecords.map(({ deviceData }) => deviceData);
208
216
  }
209
- async findCommissionableDevicesContinuously(identifier, callback, timeout = import_general.Minutes.one) {
217
+ async findCommissionableDevicesContinuously(identifier, callback, timeout, cancelSignal) {
210
218
  const discoveredDevices = /* @__PURE__ */ new Set();
211
- const discoveryEndTime = import_general.Time.nowMs + timeout;
219
+ const discoveryEndTime = timeout ? import_general.Time.nowMs + timeout : void 0;
212
220
  const queryKey = this.buildCommissionableQueryIdentifier(identifier);
213
221
  await this.bleClient.startScanning();
214
- while (true) {
222
+ let queryResolver;
223
+ if (cancelSignal === void 0) {
224
+ const { promise, resolver } = (0, import_general.createPromise)();
225
+ cancelSignal = promise;
226
+ queryResolver = resolver;
227
+ }
228
+ let canceled = false;
229
+ cancelSignal?.then(
230
+ () => {
231
+ canceled = true;
232
+ this.finishWaiter(queryKey, true);
233
+ },
234
+ (cause) => {
235
+ logger.error("Unexpected error canceling commissioning", cause);
236
+ }
237
+ );
238
+ while (!canceled) {
215
239
  this.getCommissionableDevices(identifier).forEach(({ deviceData }) => {
216
240
  const { deviceIdentifier } = deviceData;
217
241
  if (!discoveredDevices.has(deviceIdentifier)) {
@@ -219,11 +243,14 @@ class BleScanner {
219
243
  callback(deviceData);
220
244
  }
221
245
  });
222
- const remainingTime = (0, import_general.Timespan)(import_general.Time.nowMs, discoveryEndTime).duration;
223
- if (remainingTime <= 0) {
224
- break;
246
+ let remainingTime;
247
+ if (discoveryEndTime !== void 0) {
248
+ remainingTime = import_general.Millis.ceil((0, import_general.Timespan)(import_general.Time.nowMs, discoveryEndTime).duration);
249
+ if (remainingTime <= 0) {
250
+ break;
251
+ }
225
252
  }
226
- await this.registerWaiterPromise(queryKey, remainingTime, false);
253
+ await this.registerWaiterPromise(queryKey, remainingTime, false, queryResolver);
227
254
  }
228
255
  await this.bleClient.stopScanning();
229
256
  return this.getCommissionableDevices(identifier).map(({ deviceData }) => deviceData);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/ble/BleScanner.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -32,7 +32,7 @@ export declare class BleScanner implements Scanner {
32
32
  * promise.
33
33
  */
34
34
  private finishWaiter;
35
- cancelCommissionableDeviceDiscovery(identifier: CommissionableDeviceIdentifiers): void;
35
+ cancelCommissionableDeviceDiscovery(identifier: CommissionableDeviceIdentifiers, resolvePromise?: boolean): void;
36
36
  private handleDiscoveredDevice;
37
37
  private findCommissionableQueryIdentifier;
38
38
  /**
@@ -44,7 +44,7 @@ export declare class BleScanner implements Scanner {
44
44
  findOperationalDevice(): Promise<undefined>;
45
45
  getDiscoveredOperationalDevice(): undefined;
46
46
  findCommissionableDevices(identifier: CommissionableDeviceIdentifiers, timeout?: Duration, ignoreExistingRecords?: boolean): Promise<CommissionableDevice[]>;
47
- findCommissionableDevicesContinuously(identifier: CommissionableDeviceIdentifiers, callback: (device: CommissionableDevice) => void, timeout?: Duration): Promise<CommissionableDevice[]>;
47
+ findCommissionableDevicesContinuously(identifier: CommissionableDeviceIdentifiers, callback: (device: CommissionableDevice) => void, timeout?: Duration, cancelSignal?: Promise<void>): Promise<CommissionableDevice[]>;
48
48
  getDiscoveredCommissionableDevices(identifier: CommissionableDeviceIdentifiers): CommissionableDevice[];
49
49
  close(): Promise<void>;
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BleScanner.d.ts","sourceRoot":"","sources":["../../../src/ble/BleScanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,WAAW,EAAiB,QAAQ,EAAmD,MAAM,UAAU,CAAC;AACxH,OAAO,EAAsB,oBAAoB,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/G,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,wBAAwB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,KAAK,wBAAwB,GAAG,oBAAoB,GAAG;IACnD,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,UAAW,YAAW,OAAO;IAe1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAdtC,IAAI,IAAI,gBAEP;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAO1B;IACJ,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0C;gBAErD,SAAS,EAAE,oBAAoB;IAMrD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB;IAQhE;;;OAGG;YACW,qBAAqB;IAYnC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB,mCAAmC,CAAC,UAAU,EAAE,+BAA+B;IAK/E,OAAO,CAAC,sBAAsB;IAoC9B,OAAO,CAAC,iCAAiC;IAmCzC;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAa1C,OAAO,CAAC,wBAAwB;IA4B1B,qBAAqB,IAAI,OAAO,CAAC,SAAS,CAAC;IAKjD,8BAA8B,IAAI,SAAS;IAKrC,yBAAyB,CAC3B,UAAU,EAAE,+BAA+B,EAC3C,OAAO,WAAc,EACrB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAqB5B,qCAAqC,CACvC,UAAU,EAAE,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAChD,OAAO,WAAc,GACtB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA2BlC,kCAAkC,CAAC,UAAU,EAAE,+BAA+B,GAAG,oBAAoB,EAAE;IAIjG,KAAK;CAMd"}
1
+ {"version":3,"file":"BleScanner.d.ts","sourceRoot":"","sources":["../../../src/ble/BleScanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,WAAW,EAAiB,QAAQ,EAAkD,MAAM,UAAU,CAAC;AACvH,OAAO,EAAsB,oBAAoB,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE/G,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,wBAAwB,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,KAAK,wBAAwB,GAAG,oBAAoB,GAAG;IACnD,EAAE,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,UAAW,YAAW,OAAO;IAgB1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAftC,IAAI,IAAI,gBAEP;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAQ1B;IACJ,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0C;gBAErD,SAAS,EAAE,oBAAoB;IAMrD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB;IAQhE;;;OAGG;YACW,qBAAqB;IAuBnC;;;OAGG;IACH,OAAO,CAAC,YAAY;IAapB,mCAAmC,CAAC,UAAU,EAAE,+BAA+B,EAAE,cAAc,UAAO;IAOtG,OAAO,CAAC,sBAAsB;IAoC9B,OAAO,CAAC,iCAAiC;IAmCzC;;;OAGG;IACH,OAAO,CAAC,kCAAkC;IAa1C,OAAO,CAAC,wBAAwB;IA4B1B,qBAAqB,IAAI,OAAO,CAAC,SAAS,CAAC;IAKjD,8BAA8B,IAAI,SAAS;IAKrC,yBAAyB,CAC3B,UAAU,EAAE,+BAA+B,EAC3C,OAAO,WAAc,EACrB,qBAAqB,UAAQ,GAC9B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAqB5B,qCAAqC,CACvC,UAAU,EAAE,+BAA+B,EAC3C,QAAQ,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAChD,OAAO,CAAC,EAAE,QAAQ,EAClB,YAAY,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,GAC7B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAgDlC,kCAAkC,CAAC,UAAU,EAAE,+BAA+B,GAAG,oBAAoB,EAAE;IAIjG,KAAK;CAMd"}
@@ -3,7 +3,7 @@
3
3
  * Copyright 2022-2026 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Bytes, ChannelType, createPromise, Duration, Logger, Minutes, Seconds, Time, Timespan } from "#general";
6
+ import { Bytes, ChannelType, createPromise, Duration, Logger, Millis, Seconds, Time, Timespan } from "#general";
7
7
  import { BleError, BtpCodec } from "#protocol";
8
8
  import { VendorId } from "#types";
9
9
  const logger = Logger.get("BleScanner");
@@ -30,12 +30,18 @@ class BleScanner {
30
30
  * Registers a deferred promise for a specific queryId together with a timeout and return the promise.
31
31
  * The promise will be resolved when the timer runs out latest.
32
32
  */
33
- async registerWaiterPromise(queryId, timeout, resolveOnUpdatedRecords = true) {
33
+ async registerWaiterPromise(queryId, timeout, resolveOnUpdatedRecords = true, cancelResolver) {
34
34
  const { promise, resolver } = createPromise();
35
- const timer = Time.getTimer("BLE query timeout", timeout, () => this.finishWaiter(queryId, true)).start();
36
- this.recordWaiters.set(queryId, { resolver, timer, resolveOnUpdatedRecords });
35
+ let timer;
36
+ if (timeout) {
37
+ timer = Time.getTimer("BLE query timeout", timeout, () => {
38
+ cancelResolver?.();
39
+ this.finishWaiter(queryId, true);
40
+ }).start();
41
+ }
42
+ this.recordWaiters.set(queryId, { resolver, timer, resolveOnUpdatedRecords, cancelResolver });
37
43
  logger.debug(
38
- `Registered waiter for query ${queryId} with timeout ${timeout ? Duration.format(timeout) : "(none)"}${resolveOnUpdatedRecords ? "" : " (not resolving on updated records)"}`
44
+ `Registered waiter for query ${queryId} with timeout ${timeout === void 0 ? "(none)" : Duration.format(timeout)}${resolveOnUpdatedRecords ? "" : " (not resolving on updated records)"}`
39
45
  );
40
46
  await promise;
41
47
  }
@@ -49,15 +55,17 @@ class BleScanner {
49
55
  const { timer, resolver, resolveOnUpdatedRecords } = waiter;
50
56
  if (isUpdatedRecord && !resolveOnUpdatedRecords) return;
51
57
  logger.debug(`Finishing waiter for query ${queryId}, resolving: ${resolvePromise}`);
52
- timer.stop();
58
+ timer?.stop();
53
59
  if (resolvePromise) {
54
60
  resolver();
55
61
  }
56
62
  this.recordWaiters.delete(queryId);
57
63
  }
58
- cancelCommissionableDeviceDiscovery(identifier) {
64
+ cancelCommissionableDeviceDiscovery(identifier, resolvePromise = true) {
59
65
  const queryKey = this.buildCommissionableQueryIdentifier(identifier);
60
- this.finishWaiter(queryKey, true);
66
+ const { cancelResolver } = this.recordWaiters.get(queryKey) ?? {};
67
+ cancelResolver?.();
68
+ this.finishWaiter(queryKey, resolvePromise);
61
69
  }
62
70
  handleDiscoveredDevice(peripheral, manufacturerServiceData) {
63
71
  logger.debug(
@@ -183,12 +191,28 @@ class BleScanner {
183
191
  }
184
192
  return storedRecords.map(({ deviceData }) => deviceData);
185
193
  }
186
- async findCommissionableDevicesContinuously(identifier, callback, timeout = Minutes.one) {
194
+ async findCommissionableDevicesContinuously(identifier, callback, timeout, cancelSignal) {
187
195
  const discoveredDevices = /* @__PURE__ */ new Set();
188
- const discoveryEndTime = Time.nowMs + timeout;
196
+ const discoveryEndTime = timeout ? Time.nowMs + timeout : void 0;
189
197
  const queryKey = this.buildCommissionableQueryIdentifier(identifier);
190
198
  await this.bleClient.startScanning();
191
- while (true) {
199
+ let queryResolver;
200
+ if (cancelSignal === void 0) {
201
+ const { promise, resolver } = createPromise();
202
+ cancelSignal = promise;
203
+ queryResolver = resolver;
204
+ }
205
+ let canceled = false;
206
+ cancelSignal?.then(
207
+ () => {
208
+ canceled = true;
209
+ this.finishWaiter(queryKey, true);
210
+ },
211
+ (cause) => {
212
+ logger.error("Unexpected error canceling commissioning", cause);
213
+ }
214
+ );
215
+ while (!canceled) {
192
216
  this.getCommissionableDevices(identifier).forEach(({ deviceData }) => {
193
217
  const { deviceIdentifier } = deviceData;
194
218
  if (!discoveredDevices.has(deviceIdentifier)) {
@@ -196,11 +220,14 @@ class BleScanner {
196
220
  callback(deviceData);
197
221
  }
198
222
  });
199
- const remainingTime = Timespan(Time.nowMs, discoveryEndTime).duration;
200
- if (remainingTime <= 0) {
201
- break;
223
+ let remainingTime;
224
+ if (discoveryEndTime !== void 0) {
225
+ remainingTime = Millis.ceil(Timespan(Time.nowMs, discoveryEndTime).duration);
226
+ if (remainingTime <= 0) {
227
+ break;
228
+ }
202
229
  }
203
- await this.registerWaiterPromise(queryKey, remainingTime, false);
230
+ await this.registerWaiterPromise(queryKey, remainingTime, false, queryResolver);
204
231
  }
205
232
  await this.bleClient.stopScanning();
206
233
  return this.getCommissionableDevices(identifier).map(({ deviceData }) => deviceData);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/ble/BleScanner.ts"],
4
- "mappings": "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",
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/react-native",
3
- "version": "0.16.9",
3
+ "version": "0.16.10-alpha.0-20260218-52b333ceb",
4
4
  "description": "Experimental React Native support for matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,9 +36,9 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@craftzdog/react-native-buffer": "6.1.1",
39
- "@matter/general": "0.16.9",
40
- "@matter/nodejs": "0.16.9",
41
- "@matter/protocol": "0.16.9",
39
+ "@matter/general": "0.16.10-alpha.0-20260218-52b333ceb",
40
+ "@matter/nodejs": "0.16.10-alpha.0-20260218-52b333ceb",
41
+ "@matter/protocol": "0.16.10-alpha.0-20260218-52b333ceb",
42
42
  "@react-native-async-storage/async-storage": "^2.2.0",
43
43
  "@react-native-community/netinfo": "^12.0.1",
44
44
  "@types/node": "^25.2.2",
@@ -48,7 +48,7 @@
48
48
  "react-native-udp": "^4.1.7"
49
49
  },
50
50
  "devDependencies": {
51
- "@matter/tools": "0.16.9"
51
+ "@matter/tools": "0.16.10-alpha.0-20260218-52b333ceb"
52
52
  },
53
53
  "overrides": {
54
54
  "brorand": "npm:@matter.js/brorand@1.1.0"
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { Bytes, ChannelType, createPromise, Duration, Logger, Minutes, Seconds, Time, Timer, Timespan } from "#general";
7
+ import { Bytes, ChannelType, createPromise, Duration, Logger, Millis, Seconds, Time, Timer, Timespan } from "#general";
8
8
  import { BleError, BtpCodec, CommissionableDevice, CommissionableDeviceIdentifiers, Scanner } from "#protocol";
9
9
  import { VendorId } from "#types";
10
10
  import { Device } from "react-native-ble-plx";
@@ -31,8 +31,9 @@ export class BleScanner implements Scanner {
31
31
  string,
32
32
  {
33
33
  resolver: () => void;
34
- timer: Timer;
34
+ timer?: Timer;
35
35
  resolveOnUpdatedRecords: boolean;
36
+ cancelResolver?: (value: void) => void;
36
37
  }
37
38
  >();
38
39
  private readonly discoveredMatterDevices = new Map<string, DiscoveredBleDevice>();
@@ -55,12 +56,23 @@ export class BleScanner implements Scanner {
55
56
  * Registers a deferred promise for a specific queryId together with a timeout and return the promise.
56
57
  * The promise will be resolved when the timer runs out latest.
57
58
  */
58
- private async registerWaiterPromise(queryId: string, timeout: Duration, resolveOnUpdatedRecords = true) {
59
+ private async registerWaiterPromise(
60
+ queryId: string,
61
+ timeout?: Duration,
62
+ resolveOnUpdatedRecords = true,
63
+ cancelResolver?: (value: void) => void,
64
+ ) {
59
65
  const { promise, resolver } = createPromise<void>();
60
- const timer = Time.getTimer("BLE query timeout", timeout, () => this.finishWaiter(queryId, true)).start();
61
- this.recordWaiters.set(queryId, { resolver, timer, resolveOnUpdatedRecords });
66
+ let timer;
67
+ if (timeout) {
68
+ timer = Time.getTimer("BLE query timeout", timeout, () => {
69
+ cancelResolver?.();
70
+ this.finishWaiter(queryId, true);
71
+ }).start();
72
+ }
73
+ this.recordWaiters.set(queryId, { resolver, timer, resolveOnUpdatedRecords, cancelResolver });
62
74
  logger.debug(
63
- `Registered waiter for query ${queryId} with timeout ${timeout ? Duration.format(timeout) : "(none)"}${
75
+ `Registered waiter for query ${queryId} with timeout ${timeout === undefined ? "(none)" : Duration.format(timeout)}${
64
76
  resolveOnUpdatedRecords ? "" : " (not resolving on updated records)"
65
77
  }`,
66
78
  );
@@ -77,16 +89,18 @@ export class BleScanner implements Scanner {
77
89
  const { timer, resolver, resolveOnUpdatedRecords } = waiter;
78
90
  if (isUpdatedRecord && !resolveOnUpdatedRecords) return;
79
91
  logger.debug(`Finishing waiter for query ${queryId}, resolving: ${resolvePromise}`);
80
- timer.stop();
92
+ timer?.stop();
81
93
  if (resolvePromise) {
82
94
  resolver();
83
95
  }
84
96
  this.recordWaiters.delete(queryId);
85
97
  }
86
98
 
87
- cancelCommissionableDeviceDiscovery(identifier: CommissionableDeviceIdentifiers) {
99
+ cancelCommissionableDeviceDiscovery(identifier: CommissionableDeviceIdentifiers, resolvePromise = true) {
88
100
  const queryKey = this.buildCommissionableQueryIdentifier(identifier);
89
- this.finishWaiter(queryKey, true);
101
+ const { cancelResolver } = this.recordWaiters.get(queryKey) ?? {};
102
+ cancelResolver?.();
103
+ this.finishWaiter(queryKey, resolvePromise);
90
104
  }
91
105
 
92
106
  private handleDiscoveredDevice(peripheral: Device, manufacturerServiceData: Bytes) {
@@ -243,15 +257,34 @@ export class BleScanner implements Scanner {
243
257
  async findCommissionableDevicesContinuously(
244
258
  identifier: CommissionableDeviceIdentifiers,
245
259
  callback: (device: CommissionableDevice) => void,
246
- timeout = Minutes.one,
260
+ timeout?: Duration,
261
+ cancelSignal?: Promise<void>,
247
262
  ): Promise<CommissionableDevice[]> {
248
263
  const discoveredDevices = new Set<string>();
249
264
 
250
- const discoveryEndTime = Time.nowMs + timeout;
265
+ const discoveryEndTime = timeout ? Time.nowMs + timeout : undefined;
251
266
  const queryKey = this.buildCommissionableQueryIdentifier(identifier);
252
267
  await this.bleClient.startScanning();
253
268
 
254
- while (true) {
269
+ let queryResolver: ((value: void) => void) | undefined;
270
+ if (cancelSignal === undefined) {
271
+ const { promise, resolver } = createPromise<void>();
272
+ cancelSignal = promise;
273
+ queryResolver = resolver;
274
+ }
275
+
276
+ let canceled = false;
277
+ cancelSignal?.then(
278
+ () => {
279
+ canceled = true;
280
+ this.finishWaiter(queryKey, true);
281
+ },
282
+ cause => {
283
+ logger.error("Unexpected error canceling commissioning", cause);
284
+ },
285
+ );
286
+
287
+ while (!canceled) {
255
288
  this.getCommissionableDevices(identifier).forEach(({ deviceData }) => {
256
289
  const { deviceIdentifier } = deviceData;
257
290
  if (!discoveredDevices.has(deviceIdentifier)) {
@@ -260,12 +293,15 @@ export class BleScanner implements Scanner {
260
293
  }
261
294
  });
262
295
 
263
- const remainingTime = Timespan(Time.nowMs, discoveryEndTime).duration;
264
- if (remainingTime <= 0) {
265
- break;
296
+ let remainingTime;
297
+ if (discoveryEndTime !== undefined) {
298
+ remainingTime = Millis.ceil(Timespan(Time.nowMs, discoveryEndTime).duration);
299
+ if (remainingTime <= 0) {
300
+ break;
301
+ }
266
302
  }
267
303
 
268
- await this.registerWaiterPromise(queryKey, remainingTime, false);
304
+ await this.registerWaiterPromise(queryKey, remainingTime, false, queryResolver);
269
305
  }
270
306
  await this.bleClient.stopScanning();
271
307
  return this.getCommissionableDevices(identifier).map(({ deviceData }) => deviceData);