@onekeyfe/hd-transport-react-native 1.2.2-alpha.108 → 1.2.2-alpha.109
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.
- package/dist/BleManager.d.ts +1 -1
- package/dist/BleManager.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/package.json +5 -5
- package/src/BleManager.ts +15 -1
- package/src/__tests__/connectTimeout.test.ts +61 -0
- package/src/index.ts +5 -1
package/dist/BleManager.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ export declare const pairDevice: (macAddress: string) => Promise<{
|
|
|
5
5
|
bonded: boolean;
|
|
6
6
|
bonding: boolean;
|
|
7
7
|
}>;
|
|
8
|
-
export declare const onDeviceBondState: (bleMacAddress: string) => Promise<Peripheral | undefined>;
|
|
8
|
+
export declare const onDeviceBondState: (bleMacAddress: string, signal?: AbortSignal) => Promise<Peripheral | undefined>;
|
|
9
9
|
//# sourceMappingURL=BleManager.d.ts.map
|
package/dist/BleManager.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BleManager.d.ts","sourceRoot":"","sources":["../src/BleManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAsBnE,eAAO,MAAM,qBAAqB,iBAAkB,MAAM,EAAE,0BACZ,CAAC;AAEjD,eAAO,MAAM,gBAAgB,6BAAwC,CAAC;AAEtE,eAAO,MAAM,UAAU,eAAgB,MAAM;;;EAAoC,CAAC;AAElF,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"BleManager.d.ts","sourceRoot":"","sources":["../src/BleManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAsBnE,eAAO,MAAM,qBAAqB,iBAAkB,MAAM,EAAE,0BACZ,CAAC;AAEjD,eAAO,MAAM,gBAAgB,6BAAwC,CAAC;AAEtE,eAAO,MAAM,UAAU,eAAgB,MAAM;;;EAAoC,CAAC;AAElF,eAAO,MAAM,iBAAiB,kBACb,MAAM,WACZ,WAAW,KACnB,QAAQ,UAAU,GAAG,SAAS,CAmF7B,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -70,14 +70,24 @@ const bondFailureReasons = {
|
|
|
70
70
|
};
|
|
71
71
|
const getConnectedDeviceIds = (serviceUuids) => BleUtils__default["default"].getConnectedPeripherals(serviceUuids);
|
|
72
72
|
const pairDevice = (macAddress) => BleUtils__default["default"].pairDevice(macAddress);
|
|
73
|
-
const onDeviceBondState = (bleMacAddress) => new Promise((resolve, reject) => {
|
|
73
|
+
const onDeviceBondState = (bleMacAddress, signal) => new Promise((resolve, reject) => {
|
|
74
|
+
if (signal === null || signal === void 0 ? void 0 : signal.aborted) {
|
|
75
|
+
reject(hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.BleDeviceDisconnected));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
74
78
|
const cleanup = () => {
|
|
75
79
|
if (timeout) {
|
|
76
80
|
clearTimeout(timeout);
|
|
77
81
|
}
|
|
78
82
|
if (cleanupListener)
|
|
79
83
|
cleanupListener();
|
|
84
|
+
signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', onAbort);
|
|
85
|
+
};
|
|
86
|
+
const onAbort = () => {
|
|
87
|
+
cleanup();
|
|
88
|
+
reject(hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.BleDeviceDisconnected));
|
|
80
89
|
};
|
|
90
|
+
signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', onAbort, { once: true });
|
|
81
91
|
const timeout = setTimeout(() => {
|
|
82
92
|
cleanup();
|
|
83
93
|
reject(hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.BleDeviceNotBonded, 'Bluetooth pairing timed out', {
|
|
@@ -489,6 +499,7 @@ class ReactNativeBleTransport {
|
|
|
489
499
|
this.name = 'ReactNativeBleTransport';
|
|
490
500
|
this.configured = false;
|
|
491
501
|
this.stopped = false;
|
|
502
|
+
this.bondAbortController = new AbortController();
|
|
492
503
|
this.scanTimeout = DEVICE_SCAN_TIMEOUT_MS;
|
|
493
504
|
this.runPromise = null;
|
|
494
505
|
this.runPromiseDeviceId = null;
|
|
@@ -1025,7 +1036,7 @@ class ReactNativeBleTransport {
|
|
|
1025
1036
|
try {
|
|
1026
1037
|
const bondState = yield pairDevice(uuid);
|
|
1027
1038
|
if (bondState.bonding) {
|
|
1028
|
-
yield onDeviceBondState(uuid);
|
|
1039
|
+
yield onDeviceBondState(uuid, this.bondAbortController.signal);
|
|
1029
1040
|
}
|
|
1030
1041
|
else if (!bondState.bonded) {
|
|
1031
1042
|
throw hdShared.ERRORS.TypedError(hdShared.HardwareErrorCode.BleDeviceNotBonded, 'device is not bonded');
|
|
@@ -1601,6 +1612,7 @@ class ReactNativeBleTransport {
|
|
|
1601
1612
|
if (this.stopPromise)
|
|
1602
1613
|
return this.stopPromise;
|
|
1603
1614
|
this.stopped = true;
|
|
1615
|
+
this.bondAbortController.abort();
|
|
1604
1616
|
const deviceIds = new Set([
|
|
1605
1617
|
...this.monitorTokens.keys(),
|
|
1606
1618
|
...this.sessionProtocols.keys(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-transport-react-native",
|
|
3
|
-
"version": "1.2.2-alpha.
|
|
3
|
+
"version": "1.2.2-alpha.109",
|
|
4
4
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
"lint:fix": "eslint . --fix"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@onekeyfe/hd-core": "1.2.2-alpha.
|
|
24
|
-
"@onekeyfe/hd-shared": "1.2.2-alpha.
|
|
25
|
-
"@onekeyfe/hd-transport": "1.2.2-alpha.
|
|
23
|
+
"@onekeyfe/hd-core": "1.2.2-alpha.109",
|
|
24
|
+
"@onekeyfe/hd-shared": "1.2.2-alpha.109",
|
|
25
|
+
"@onekeyfe/hd-transport": "1.2.2-alpha.109",
|
|
26
26
|
"@onekeyfe/react-native-ble-utils": "0.1.6",
|
|
27
27
|
"react-native-ble-plx": "3.5.1"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "4ee0588f08abdde1c72b8044091a76106e4770c4"
|
|
30
30
|
}
|
package/src/BleManager.ts
CHANGED
|
@@ -32,14 +32,28 @@ export const getBondedDevices = () => BleUtils.getBondedPeripherals();
|
|
|
32
32
|
|
|
33
33
|
export const pairDevice = (macAddress: string) => BleUtils.pairDevice(macAddress);
|
|
34
34
|
|
|
35
|
-
export const onDeviceBondState = (
|
|
35
|
+
export const onDeviceBondState = (
|
|
36
|
+
bleMacAddress: string,
|
|
37
|
+
signal?: AbortSignal
|
|
38
|
+
): Promise<Peripheral | undefined> =>
|
|
36
39
|
new Promise((resolve, reject) => {
|
|
40
|
+
if (signal?.aborted) {
|
|
41
|
+
reject(ERRORS.TypedError(HardwareErrorCode.BleDeviceDisconnected));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
37
44
|
const cleanup = () => {
|
|
38
45
|
if (timeout) {
|
|
39
46
|
clearTimeout(timeout);
|
|
40
47
|
}
|
|
41
48
|
if (cleanupListener) cleanupListener();
|
|
49
|
+
signal?.removeEventListener('abort', onAbort);
|
|
42
50
|
};
|
|
51
|
+
const onAbort = () => {
|
|
52
|
+
cleanup();
|
|
53
|
+
reject(ERRORS.TypedError(HardwareErrorCode.BleDeviceDisconnected));
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
signal?.addEventListener('abort', onAbort, { once: true });
|
|
43
57
|
|
|
44
58
|
const timeout = setTimeout(() => {
|
|
45
59
|
cleanup();
|
|
@@ -127,6 +127,32 @@ describe('Android bond failure reasons', () => {
|
|
|
127
127
|
expect(cleanup).toHaveBeenCalledTimes(1);
|
|
128
128
|
});
|
|
129
129
|
|
|
130
|
+
test('aborts the bond wait and removes its listener and deadline', async () => {
|
|
131
|
+
const controller = new AbortController();
|
|
132
|
+
const result = onDeviceBondState(UUID, controller.signal);
|
|
133
|
+
const rejection = expect(result).rejects.toMatchObject({
|
|
134
|
+
errorCode: HardwareErrorCode.BleDeviceDisconnected,
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
controller.abort();
|
|
138
|
+
|
|
139
|
+
await rejection;
|
|
140
|
+
expect(cleanup).toHaveBeenCalledTimes(1);
|
|
141
|
+
expect(jest.getTimerCount()).toBe(0);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test('does not subscribe when the transport stopped before the bond wait starts', async () => {
|
|
145
|
+
const controller = new AbortController();
|
|
146
|
+
controller.abort();
|
|
147
|
+
const subscribe = jest.spyOn(BleUtils, 'onDeviceBondState').mockClear();
|
|
148
|
+
|
|
149
|
+
await expect(onDeviceBondState(UUID, controller.signal)).rejects.toMatchObject({
|
|
150
|
+
errorCode: HardwareErrorCode.BleDeviceDisconnected,
|
|
151
|
+
});
|
|
152
|
+
expect(subscribe).not.toHaveBeenCalled();
|
|
153
|
+
expect(jest.getTimerCount()).toBe(0);
|
|
154
|
+
});
|
|
155
|
+
|
|
130
156
|
test('ignores other devices and clears the deadline after bonding succeeds', async () => {
|
|
131
157
|
const result = onDeviceBondState(UUID);
|
|
132
158
|
const otherPeripheral = {
|
|
@@ -336,6 +362,41 @@ describe('BLE connect timeout', () => {
|
|
|
336
362
|
});
|
|
337
363
|
});
|
|
338
364
|
|
|
365
|
+
test.each(['V1', 'V2'] as const)(
|
|
366
|
+
'stop completes while Android %s bonding remains pending',
|
|
367
|
+
async expectedProtocol => {
|
|
368
|
+
Object.assign(Platform, { OS: 'android' });
|
|
369
|
+
const { transport, bleManager, connect } = createHarness(() => Promise.resolve());
|
|
370
|
+
jest.spyOn(BleUtils, 'pairDevice').mockResolvedValueOnce({ bonded: false, bonding: true });
|
|
371
|
+
const listening = createDeferred<void>();
|
|
372
|
+
const cleanup = jest.fn();
|
|
373
|
+
jest.spyOn(BleUtils, 'onDeviceBondState').mockImplementationOnce(() => {
|
|
374
|
+
listening.resolve();
|
|
375
|
+
return cleanup;
|
|
376
|
+
});
|
|
377
|
+
const acquiring = transport.acquire({ uuid: UUID, expectedProtocol });
|
|
378
|
+
const rejection = expect(acquiring).rejects.toMatchObject({
|
|
379
|
+
errorCode: HardwareErrorCode.BleDeviceDisconnected,
|
|
380
|
+
});
|
|
381
|
+
await listening.promise;
|
|
382
|
+
|
|
383
|
+
// Advance only the existing 100ms disconnect drain, not the bond deadline.
|
|
384
|
+
let stopped = false;
|
|
385
|
+
const stopping = transport.stop().then(() => {
|
|
386
|
+
stopped = true;
|
|
387
|
+
});
|
|
388
|
+
await advanceUntil(() => stopped, 1000);
|
|
389
|
+
expect(stopped).toBe(true);
|
|
390
|
+
await stopping;
|
|
391
|
+
|
|
392
|
+
await rejection;
|
|
393
|
+
expect(cleanup).toHaveBeenCalledTimes(1);
|
|
394
|
+
expect(jest.getTimerCount()).toBe(0);
|
|
395
|
+
expect(bleManager.devices).not.toHaveBeenCalled();
|
|
396
|
+
expect(connect).not.toHaveBeenCalled();
|
|
397
|
+
}
|
|
398
|
+
);
|
|
399
|
+
|
|
339
400
|
test('stop rejects a pending read and waits for native disconnection without destroying the shared manager', async () => {
|
|
340
401
|
const { transport, bleManager } = createHarness(() => Promise.resolve());
|
|
341
402
|
const nativeDisconnect = createDeferred<void>();
|
package/src/index.ts
CHANGED
|
@@ -380,6 +380,8 @@ export default class ReactNativeBleTransport {
|
|
|
380
380
|
|
|
381
381
|
stopped = false;
|
|
382
382
|
|
|
383
|
+
private readonly bondAbortController = new AbortController();
|
|
384
|
+
|
|
383
385
|
scanTimeout = DEVICE_SCAN_TIMEOUT_MS;
|
|
384
386
|
|
|
385
387
|
runPromise: Deferred<any> | null = null;
|
|
@@ -1061,7 +1063,7 @@ export default class ReactNativeBleTransport {
|
|
|
1061
1063
|
try {
|
|
1062
1064
|
const bondState = await pairDevice(uuid);
|
|
1063
1065
|
if (bondState.bonding) {
|
|
1064
|
-
await onDeviceBondState(uuid);
|
|
1066
|
+
await onDeviceBondState(uuid, this.bondAbortController.signal);
|
|
1065
1067
|
} else if (!bondState.bonded) {
|
|
1066
1068
|
throw ERRORS.TypedError(HardwareErrorCode.BleDeviceNotBonded, 'device is not bonded');
|
|
1067
1069
|
}
|
|
@@ -1788,6 +1790,8 @@ export default class ReactNativeBleTransport {
|
|
|
1788
1790
|
stop() {
|
|
1789
1791
|
if (this.stopPromise) return this.stopPromise;
|
|
1790
1792
|
this.stopped = true;
|
|
1793
|
+
// Bonding precedes GATT, so cancelDeviceConnection cannot end this wait.
|
|
1794
|
+
this.bondAbortController.abort();
|
|
1791
1795
|
const deviceIds = new Set([
|
|
1792
1796
|
...this.monitorTokens.keys(),
|
|
1793
1797
|
...this.sessionProtocols.keys(),
|