@onekeyfe/hd-transport-react-native 1.2.0-alpha.174 → 1.2.0-alpha.176
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/index.d.ts.map +1 -1
- package/dist/index.js +34 -10
- package/package.json +5 -5
- package/src/__tests__/protocolV2Link.test.ts +33 -2
- package/src/index.ts +58 -16
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
|
@@ -804,17 +804,41 @@ class ReactNativeBleTransport {
|
|
|
804
804
|
return __awaiter(this, void 0, void 0, function* () {
|
|
805
805
|
const { uuid, forceCleanRunPromise, expectedProtocol, skipProtocolProbe } = input;
|
|
806
806
|
const cachedTransport = transportCache[uuid];
|
|
807
|
+
if (skipProtocolProbe && !cachedTransport && this.blePlxManager) {
|
|
808
|
+
Log === null || Log === void 0 ? void 0 : Log.debug('[ReactNativeBleTransport] refresh uncached BLE connection for firmware install:', uuid);
|
|
809
|
+
const manager = this.blePlxManager;
|
|
810
|
+
yield this.runNativeTeardown(uuid, manager, () => __awaiter(this, void 0, void 0, function* () {
|
|
811
|
+
yield this.runBestEffortNativeOperation('firmware install reconnect: cancel uncached device connection', () => manager.cancelDeviceConnection(uuid));
|
|
812
|
+
}));
|
|
813
|
+
}
|
|
807
814
|
if (cachedTransport) {
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
(
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
815
|
+
if (skipProtocolProbe) {
|
|
816
|
+
Log === null || Log === void 0 ? void 0 : Log.debug('[ReactNativeBleTransport] refresh cached BLE connection for firmware install:', uuid);
|
|
817
|
+
const manager = this.blePlxManager;
|
|
818
|
+
yield this.releaseUnlocked(uuid, true);
|
|
819
|
+
yield this.runNativeTeardown(uuid, manager, () => __awaiter(this, void 0, void 0, function* () {
|
|
820
|
+
const operations = [];
|
|
821
|
+
if (manager) {
|
|
822
|
+
operations.push(this.runBestEffortNativeOperation('firmware install reconnect: cancel device connection', () => manager.cancelDeviceConnection(uuid)));
|
|
823
|
+
}
|
|
824
|
+
operations.push(this.runBestEffortNativeOperation('firmware install reconnect: device cancel connection', () => cachedTransport.device.cancelConnection()));
|
|
825
|
+
yield Promise.all(operations);
|
|
826
|
+
}));
|
|
827
|
+
}
|
|
828
|
+
else {
|
|
829
|
+
const cachedProtocol = this.deviceProtocol.get(uuid);
|
|
830
|
+
const isCachedDeviceConnected = yield cachedTransport.device
|
|
831
|
+
.isConnected()
|
|
832
|
+
.catch(() => false);
|
|
833
|
+
if (isCachedDeviceConnected &&
|
|
834
|
+
cachedProtocol &&
|
|
835
|
+
(!expectedProtocol || cachedProtocol === expectedProtocol)) {
|
|
836
|
+
Log === null || Log === void 0 ? void 0 : Log.debug('[ReactNativeBleTransport] reuse cached BLE transport:', uuid, cachedProtocol);
|
|
837
|
+
return { uuid, protocolType: cachedProtocol };
|
|
838
|
+
}
|
|
839
|
+
Log === null || Log === void 0 ? void 0 : Log.debug('transport not reusable, will release: ', uuid);
|
|
840
|
+
yield this.releaseUnlocked(uuid, true);
|
|
841
|
+
}
|
|
818
842
|
}
|
|
819
843
|
let device = null;
|
|
820
844
|
if (forceCleanRunPromise && this.runPromise) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-transport-react-native",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.176",
|
|
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.0-alpha.
|
|
24
|
-
"@onekeyfe/hd-shared": "1.2.0-alpha.
|
|
25
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
23
|
+
"@onekeyfe/hd-core": "1.2.0-alpha.176",
|
|
24
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.176",
|
|
25
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.176",
|
|
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": "a5152148317effe811cde8adecdfe75c28e82657"
|
|
30
30
|
}
|
|
@@ -424,10 +424,12 @@ describe('ReactNativeBleTransport Protocol V2 link lifecycle', () => {
|
|
|
424
424
|
await transport.release(uuid, true);
|
|
425
425
|
});
|
|
426
426
|
|
|
427
|
-
test('
|
|
428
|
-
const { transport, uuid, writeCharacteristic } = createHarness();
|
|
427
|
+
test('physically refreshes an uncached Protocol V2 firmware install link without Ping', async () => {
|
|
428
|
+
const { transport, uuid, device, bleManager, writeCharacteristic } = createHarness();
|
|
429
429
|
const probeProtocolV2 = jest.spyOn(transport as any, 'probeProtocolV2');
|
|
430
430
|
(transport as any).sessionProtocols.set(uuid, 'V2');
|
|
431
|
+
device.connect = jest.fn().mockResolvedValue(device);
|
|
432
|
+
device.isConnected.mockResolvedValueOnce(false);
|
|
431
433
|
|
|
432
434
|
await expect(
|
|
433
435
|
transport.acquire({ uuid, expectedProtocol: 'V2', skipProtocolProbe: true })
|
|
@@ -436,6 +438,9 @@ describe('ReactNativeBleTransport Protocol V2 link lifecycle', () => {
|
|
|
436
438
|
protocolType: 'V2',
|
|
437
439
|
});
|
|
438
440
|
|
|
441
|
+
expect(bleManager.cancelDeviceConnection).toHaveBeenCalledWith(uuid);
|
|
442
|
+
expect(device.cancelConnection).not.toHaveBeenCalled();
|
|
443
|
+
expect(device.connect).toHaveBeenCalled();
|
|
439
444
|
expect(probeProtocolV2).not.toHaveBeenCalled();
|
|
440
445
|
expect(writeCharacteristic.writeWithResponse).not.toHaveBeenCalled();
|
|
441
446
|
expect(writeCharacteristic.writeWithoutResponse).not.toHaveBeenCalled();
|
|
@@ -443,6 +448,32 @@ describe('ReactNativeBleTransport Protocol V2 link lifecycle', () => {
|
|
|
443
448
|
await transport.release(uuid, true);
|
|
444
449
|
});
|
|
445
450
|
|
|
451
|
+
test('refreshes a cached firmware install connection instead of trusting GATT state', async () => {
|
|
452
|
+
const { transport, uuid, device, bleManager, writeCharacteristic } = createHarness();
|
|
453
|
+
const probeProtocolV2 = jest.spyOn(transport as any, 'probeProtocolV2');
|
|
454
|
+
|
|
455
|
+
await transport.acquire({ uuid, expectedProtocol: 'V2' });
|
|
456
|
+
device.connect = jest.fn().mockResolvedValue(device);
|
|
457
|
+
device.isConnected.mockResolvedValueOnce(false);
|
|
458
|
+
writeCharacteristic.writeWithResponse.mockClear();
|
|
459
|
+
writeCharacteristic.writeWithoutResponse.mockClear();
|
|
460
|
+
|
|
461
|
+
await expect(
|
|
462
|
+
transport.acquire({ uuid, expectedProtocol: 'V2', skipProtocolProbe: true })
|
|
463
|
+
).resolves.toEqual({
|
|
464
|
+
uuid,
|
|
465
|
+
protocolType: 'V2',
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
expect(bleManager.cancelDeviceConnection).toHaveBeenCalledWith(uuid);
|
|
469
|
+
expect(device.cancelConnection).toHaveBeenCalled();
|
|
470
|
+
expect(device.connect).toHaveBeenCalled();
|
|
471
|
+
expect(probeProtocolV2).toHaveBeenCalledTimes(1);
|
|
472
|
+
expect(writeCharacteristic.writeWithResponse).not.toHaveBeenCalled();
|
|
473
|
+
expect(writeCharacteristic.writeWithoutResponse).not.toHaveBeenCalled();
|
|
474
|
+
await transport.release(uuid, true);
|
|
475
|
+
});
|
|
476
|
+
|
|
446
477
|
test('rejects no-probe acquire before the BLE endpoint has confirmed a protocol', async () => {
|
|
447
478
|
const { transport, uuid } = createHarness();
|
|
448
479
|
|
package/src/index.ts
CHANGED
|
@@ -888,24 +888,66 @@ export default class ReactNativeBleTransport {
|
|
|
888
888
|
const { uuid, forceCleanRunPromise, expectedProtocol, skipProtocolProbe } = input;
|
|
889
889
|
|
|
890
890
|
const cachedTransport = transportCache[uuid];
|
|
891
|
+
if (skipProtocolProbe && !cachedTransport && this.blePlxManager) {
|
|
892
|
+
Log?.debug(
|
|
893
|
+
'[ReactNativeBleTransport] refresh uncached BLE connection for firmware install:',
|
|
894
|
+
uuid
|
|
895
|
+
);
|
|
896
|
+
const manager = this.blePlxManager;
|
|
897
|
+
await this.runNativeTeardown(uuid, manager, async () => {
|
|
898
|
+
await this.runBestEffortNativeOperation(
|
|
899
|
+
'firmware install reconnect: cancel uncached device connection',
|
|
900
|
+
() => manager.cancelDeviceConnection(uuid)
|
|
901
|
+
);
|
|
902
|
+
});
|
|
903
|
+
}
|
|
891
904
|
if (cachedTransport) {
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
905
|
+
if (skipProtocolProbe) {
|
|
906
|
+
Log?.debug(
|
|
907
|
+
'[ReactNativeBleTransport] refresh cached BLE connection for firmware install:',
|
|
908
|
+
uuid
|
|
909
|
+
);
|
|
910
|
+
const manager = this.blePlxManager;
|
|
911
|
+
await this.releaseUnlocked(uuid, true);
|
|
912
|
+
await this.runNativeTeardown(uuid, manager, async () => {
|
|
913
|
+
const operations: Promise<unknown>[] = [];
|
|
914
|
+
if (manager) {
|
|
915
|
+
operations.push(
|
|
916
|
+
this.runBestEffortNativeOperation(
|
|
917
|
+
'firmware install reconnect: cancel device connection',
|
|
918
|
+
() => manager.cancelDeviceConnection(uuid)
|
|
919
|
+
)
|
|
920
|
+
);
|
|
921
|
+
}
|
|
922
|
+
operations.push(
|
|
923
|
+
this.runBestEffortNativeOperation(
|
|
924
|
+
'firmware install reconnect: device cancel connection',
|
|
925
|
+
() => cachedTransport.device.cancelConnection()
|
|
926
|
+
)
|
|
927
|
+
);
|
|
928
|
+
await Promise.all(operations);
|
|
929
|
+
});
|
|
930
|
+
} else {
|
|
931
|
+
const cachedProtocol = this.deviceProtocol.get(uuid);
|
|
932
|
+
const isCachedDeviceConnected = await cachedTransport.device
|
|
933
|
+
.isConnected()
|
|
934
|
+
.catch(() => false);
|
|
935
|
+
if (
|
|
936
|
+
isCachedDeviceConnected &&
|
|
937
|
+
cachedProtocol &&
|
|
938
|
+
(!expectedProtocol || cachedProtocol === expectedProtocol)
|
|
939
|
+
) {
|
|
940
|
+
Log?.debug('[ReactNativeBleTransport] reuse cached BLE transport:', uuid, cachedProtocol);
|
|
941
|
+
return { uuid, protocolType: cachedProtocol };
|
|
942
|
+
}
|
|
902
943
|
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
944
|
+
/**
|
|
945
|
+
* If the transport is not reusable due to a protocol mismatch or stale
|
|
946
|
+
* connection, clean it up before creating a new transport instance.
|
|
947
|
+
*/
|
|
948
|
+
Log?.debug('transport not reusable, will release: ', uuid);
|
|
949
|
+
await this.releaseUnlocked(uuid, true);
|
|
950
|
+
}
|
|
909
951
|
}
|
|
910
952
|
|
|
911
953
|
let device: Device | null = null;
|