@onekeyfe/hd-transport-web-device 1.2.8-alpha.10 → 1.2.8-alpha.101
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/__tests__/electron-ble-transport.test.ts +45 -30
- package/__tests__/webusb-identity-probe.test.ts +887 -0
- package/__tests__/webusb-protocol-cache.test.ts +121 -0
- package/__tests__/webusb-protocol-v2-timeout.test.ts +27 -8
- package/dist/electron-ble-transport.d.ts.map +1 -1
- package/dist/index.d.ts +24 -3
- package/dist/index.js +405 -35
- package/dist/webusb.d.ts +24 -3
- package/dist/webusb.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/electron-ble-transport.ts +10 -15
- package/src/webusb.ts +400 -35
package/dist/webusb.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface DeviceInfo extends OneKeyDeviceInfoBase {
|
|
|
9
9
|
protocolType?: ProtocolType;
|
|
10
10
|
}
|
|
11
11
|
export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string> {
|
|
12
|
+
private readonly identityProbe;
|
|
12
13
|
messages: ReturnType<typeof transport.parseConfigure> | undefined;
|
|
13
14
|
messagesV2: ReturnType<typeof transport.parseConfigure> | undefined;
|
|
14
15
|
private protocolV2SchemaSource;
|
|
@@ -17,6 +18,11 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
|
|
|
17
18
|
private deviceProtocolHints;
|
|
18
19
|
private staleProtocolPaths;
|
|
19
20
|
private acquiredPaths;
|
|
21
|
+
private identityProbeDevices;
|
|
22
|
+
private normalDevices;
|
|
23
|
+
private pendingHandleOperations;
|
|
24
|
+
private stopPromise?;
|
|
25
|
+
private identityProbeCleanupPaths;
|
|
20
26
|
private probedDeviceObjects;
|
|
21
27
|
private deviceEndpoints;
|
|
22
28
|
name: string;
|
|
@@ -29,8 +35,12 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
|
|
|
29
35
|
configurationId: number;
|
|
30
36
|
endpointId: number;
|
|
31
37
|
interfaceId: number;
|
|
32
|
-
constructor();
|
|
38
|
+
constructor(identityProbe?: boolean);
|
|
33
39
|
init(logger: any, emitter?: EventEmitter): void;
|
|
40
|
+
stop(): Promise<void>;
|
|
41
|
+
private stopResources;
|
|
42
|
+
private assertRunning;
|
|
43
|
+
private runHandleOperation;
|
|
34
44
|
emitDeviceDisconnect(path: string, device?: USBDevice): void;
|
|
35
45
|
markProtocolStale(path: string): void;
|
|
36
46
|
configure(signedData: any): void;
|
|
@@ -44,14 +54,25 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
|
|
|
44
54
|
private createProtocolDetectionError;
|
|
45
55
|
private detectProtocol;
|
|
46
56
|
findDevice(path: string): Promise<USBDevice>;
|
|
47
|
-
connect(path: string, first: boolean): Promise<
|
|
57
|
+
connect(path: string, first: boolean): Promise<undefined>;
|
|
48
58
|
private discoverEndpoints;
|
|
49
|
-
connectToDevice(path: string, first: boolean): Promise<
|
|
59
|
+
connectToDevice(path: string, first: boolean): Promise<undefined>;
|
|
60
|
+
private assertHandleAvailable;
|
|
61
|
+
private claimNormalHandle;
|
|
62
|
+
private releaseNormalHandles;
|
|
63
|
+
private isHandleOwnershipError;
|
|
64
|
+
private claimIdentityProbeHandle;
|
|
65
|
+
private releaseIdentityProbeHandle;
|
|
50
66
|
private closeOpenDevice;
|
|
51
67
|
private clearEndpointHalt;
|
|
52
68
|
private assertAcquired;
|
|
53
69
|
post(session: string, name: string, data: Record<string, unknown>): Promise<void>;
|
|
54
70
|
private getErrorMessage;
|
|
71
|
+
private getErrorName;
|
|
72
|
+
private isWebUsbIoHardwareError;
|
|
73
|
+
private isDeviceStillEnumerated;
|
|
74
|
+
private throwWebUsbIoError;
|
|
75
|
+
private isWebUsbPermissionDeniedMessage;
|
|
55
76
|
private isRetryablePacketIoError;
|
|
56
77
|
private reconnectForPacketIoRetry;
|
|
57
78
|
private getTransferInData;
|
package/dist/webusb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webusb.d.ts","sourceRoot":"","sources":["../src/webusb.ts"],"names":[],"mappings":";;AACA,OAAO,SAAS,EAAE,EAQhB,0BAA0B,EAG3B,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"webusb.d.ts","sourceRoot":"","sources":["../src/webusb.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-transport-web-device",
|
|
3
|
-
"version": "1.2.8-alpha.
|
|
3
|
+
"version": "1.2.8-alpha.101",
|
|
4
4
|
"author": "OneKey",
|
|
5
5
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
6
6
|
"license": "MIT",
|
|
@@ -21,13 +21,13 @@
|
|
|
21
21
|
"lint:fix": "eslint . --fix"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@onekeyfe/hd-shared": "1.2.8-alpha.
|
|
25
|
-
"@onekeyfe/hd-transport": "1.2.8-alpha.
|
|
24
|
+
"@onekeyfe/hd-shared": "1.2.8-alpha.101",
|
|
25
|
+
"@onekeyfe/hd-transport": "1.2.8-alpha.101"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@onekeyfe/hd-transport-electron": "1.2.8-alpha.
|
|
28
|
+
"@onekeyfe/hd-transport-electron": "1.2.8-alpha.101",
|
|
29
29
|
"@types/w3c-web-usb": "^1.0.6",
|
|
30
30
|
"@types/web-bluetooth": "^0.0.17"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "5670876ee082bbdf07bc1dcb17e0a93cda390085"
|
|
33
33
|
}
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
HardwareErrorCode,
|
|
19
19
|
HardwareErrorCodeMessage,
|
|
20
20
|
createDeferred,
|
|
21
|
-
isBleStaleBondHardwareError,
|
|
22
21
|
isHeaderChunk,
|
|
23
22
|
} from '@onekeyfe/hd-shared';
|
|
24
23
|
|
|
@@ -203,11 +202,14 @@ export default class ElectronBleTransport {
|
|
|
203
202
|
if (error.code === HardwareErrorCode.BlePermissionError) {
|
|
204
203
|
return ERRORS.TypedError(HardwareErrorCode.BlePermissionError);
|
|
205
204
|
}
|
|
205
|
+
if (error.code === HardwareErrorCode.BleLocationError) {
|
|
206
|
+
return ERRORS.TypedError(HardwareErrorCode.BleLocationError);
|
|
207
|
+
}
|
|
206
208
|
}
|
|
207
209
|
const errorMessage = error.message || String(error);
|
|
208
210
|
const poweredOffMessage = HardwareErrorCodeMessage[HardwareErrorCode.BlePoweredOff];
|
|
209
211
|
const unsupportedMessage = HardwareErrorCodeMessage[HardwareErrorCode.BleUnsupported];
|
|
210
|
-
const permissionMessage = HardwareErrorCodeMessage[HardwareErrorCode.
|
|
212
|
+
const permissionMessage = HardwareErrorCodeMessage[HardwareErrorCode.BleLocationError];
|
|
211
213
|
|
|
212
214
|
if (errorMessage.includes(poweredOffMessage) || errorMessage.includes('poweredOff')) {
|
|
213
215
|
return ERRORS.TypedError(HardwareErrorCode.BlePoweredOff);
|
|
@@ -216,7 +218,7 @@ export default class ElectronBleTransport {
|
|
|
216
218
|
return ERRORS.TypedError(HardwareErrorCode.BleUnsupported);
|
|
217
219
|
}
|
|
218
220
|
if (errorMessage.includes(permissionMessage) || errorMessage.includes('unauthorized')) {
|
|
219
|
-
return ERRORS.TypedError(HardwareErrorCode.
|
|
221
|
+
return ERRORS.TypedError(HardwareErrorCode.BleLocationError);
|
|
220
222
|
}
|
|
221
223
|
}
|
|
222
224
|
return error;
|
|
@@ -524,17 +526,13 @@ export default class ElectronBleTransport {
|
|
|
524
526
|
}
|
|
525
527
|
|
|
526
528
|
private createProtocolMismatchError(expected: ProtocolType) {
|
|
527
|
-
return ERRORS.TypedError(
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
);
|
|
529
|
+
return ERRORS.TypedError(HardwareErrorCode.TransportProtocolProbeFailed, undefined, {
|
|
530
|
+
expectedProtocol: expected,
|
|
531
|
+
});
|
|
531
532
|
}
|
|
532
533
|
|
|
533
534
|
private createProtocolDetectionError() {
|
|
534
|
-
return ERRORS.TypedError(
|
|
535
|
-
HardwareErrorCode.BleTimeoutError,
|
|
536
|
-
'Unable to detect BLE protocol: device did not respond to Protocol V1 GetFeatures or Protocol V2 Ping'
|
|
537
|
-
);
|
|
535
|
+
return ERRORS.TypedError(HardwareErrorCode.TransportProtocolProbeFailed);
|
|
538
536
|
}
|
|
539
537
|
|
|
540
538
|
private clearProbeProtocol(uuid: string, protocol: ProtocolType) {
|
|
@@ -676,10 +674,7 @@ export default class ElectronBleTransport {
|
|
|
676
674
|
this.resetProtocolV2Frames(uuid);
|
|
677
675
|
},
|
|
678
676
|
// A declared V2 protocol needs no fallback; preserve the actual link failure.
|
|
679
|
-
shouldRethrow: error =>
|
|
680
|
-
expectedProtocol === 'V2' ||
|
|
681
|
-
isBleStaleBondHardwareError(error) ||
|
|
682
|
-
isProtocolV2LinkDisabledError(error),
|
|
677
|
+
shouldRethrow: error => expectedProtocol === 'V2' || isProtocolV2LinkDisabledError(error),
|
|
683
678
|
});
|
|
684
679
|
if (!detected) {
|
|
685
680
|
this.clearProbeProtocol(uuid, 'V2');
|