@onekeyfe/hd-transport-web-device 1.2.8-alpha.2 → 1.2.8-alpha.21
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 +25 -7
- package/__tests__/webusb-identity-probe.test.ts +887 -0
- package/__tests__/webusb-protocol-v2-timeout.test.ts +18 -5
- package/dist/electron-ble-transport.d.ts.map +1 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +301 -29
- package/dist/webusb.d.ts +17 -1
- package/dist/webusb.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/electron-ble-transport.ts +9 -10
- package/src/webusb.ts +290 -32
|
@@ -102,7 +102,7 @@ describe('WebUsbTransport Protocol V2 timeout recovery', () => {
|
|
|
102
102
|
expect(webusb.deviceProtocol.get(path)).toBe('V2');
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
-
test('reports
|
|
105
|
+
test('reports a typed probe failure when automatic detection exhausts both protocols', async () => {
|
|
106
106
|
const webusb = new WebUsbTransport() as any;
|
|
107
107
|
const path = 'unresponsive-webusb';
|
|
108
108
|
webusb.probeProtocolV1 = jest.fn().mockResolvedValue(false);
|
|
@@ -111,7 +111,7 @@ describe('WebUsbTransport Protocol V2 timeout recovery', () => {
|
|
|
111
111
|
webusb.closeConnectionAfterProbe = jest.fn().mockResolvedValue(undefined);
|
|
112
112
|
|
|
113
113
|
await expect(webusb.detectProtocol(path)).rejects.toMatchObject({
|
|
114
|
-
errorCode: HardwareErrorCode.
|
|
114
|
+
errorCode: HardwareErrorCode.TransportProtocolProbeFailed,
|
|
115
115
|
});
|
|
116
116
|
|
|
117
117
|
expect(webusb.probeProtocolV1).toHaveBeenCalledTimes(1);
|
|
@@ -154,7 +154,20 @@ describe('WebUsbTransport Protocol V2 timeout recovery', () => {
|
|
|
154
154
|
expect(webusb.deviceProtocol.get(path)).toBe('V2');
|
|
155
155
|
});
|
|
156
156
|
|
|
157
|
-
test('reports a
|
|
157
|
+
test('reports a strict V1 probe miss without falling back to another protocol', async () => {
|
|
158
|
+
const webusb = new WebUsbTransport() as any;
|
|
159
|
+
webusb.probeProtocolV1 = jest.fn().mockResolvedValue(false);
|
|
160
|
+
webusb.probeProtocolV2 = jest.fn();
|
|
161
|
+
webusb.closeConnectionAfterProbe = jest.fn().mockResolvedValue(undefined);
|
|
162
|
+
await expect(webusb.detectProtocol('classic-webusb', 'V1')).rejects.toMatchObject({
|
|
163
|
+
errorCode: HardwareErrorCode.TransportProtocolProbeFailed,
|
|
164
|
+
params: { expectedProtocol: 'V1' },
|
|
165
|
+
});
|
|
166
|
+
expect(webusb.probeProtocolV2).not.toHaveBeenCalled();
|
|
167
|
+
expect(webusb.closeConnectionAfterProbe).toHaveBeenCalledTimes(1);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
test('reports a typed protocol probe failure only after the bounded retry is exhausted', async () => {
|
|
158
171
|
const webusb = new WebUsbTransport() as any;
|
|
159
172
|
const path = 'pro2-webusb';
|
|
160
173
|
webusb.probeProtocolV1 = jest.fn();
|
|
@@ -163,8 +176,8 @@ describe('WebUsbTransport Protocol V2 timeout recovery', () => {
|
|
|
163
176
|
webusb.closeConnectionAfterProbe = jest.fn().mockResolvedValue(undefined);
|
|
164
177
|
|
|
165
178
|
await expect(webusb.detectProtocol(path, 'V2')).rejects.toMatchObject({
|
|
166
|
-
errorCode: HardwareErrorCode.
|
|
167
|
-
|
|
179
|
+
errorCode: HardwareErrorCode.TransportProtocolProbeFailed,
|
|
180
|
+
params: { expectedProtocol: 'V2', attempts: 2 },
|
|
168
181
|
});
|
|
169
182
|
|
|
170
183
|
expect(webusb.probeProtocolV2).toHaveBeenCalledTimes(2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"electron-ble-transport.d.ts","sourceRoot":"","sources":["../src/electron-ble-transport.ts"],"names":[],"mappings":";AAyBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,iCAAiC,CAAC;AAC5F,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EAEZ,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAIvC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;CACF;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,YAAY,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAiDF,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAAC,SAAS,CAA0D;IAE3E,OAAO,CAAC,WAAW,CAA0D;IAE7E,OAAO,CAAC,6BAA6B,CAAqB;IAE1D,IAAI,SAA0B;IAE9B,UAAU,UAAS;IAEnB,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,IAAI,CAAQ;IAExD,OAAO,CAAC,kBAAkB,CAAuB;IAEjD,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,OAAO,CAAC,gBAAgB,CAA0B;IASlD,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,cAAc,CAAwC;IAE9D,OAAO,CAAC,mBAAmB,CAAwC;IAEnE,OAAO,CAAC,UAAU,CAAkC;IAEpD,OAAO,CAAC,sBAAsB,CAAkC;IAEhE,OAAO,CAAC,SAAS,CAAsE;IAEvF,OAAO,CAAC,YAAY,CAAoD;IAExE,OAAO,CAAC,aAAa,CAAwC;IAE7D,OAAO,CAAC,eAAe,CAAgD;IAEvE,OAAO,CAAC,eAAe,CAmBpB;IAGH,OAAO,CAAC,oBAAoB,CAAS;IAErC,OAAO,CAAC,oBAAoB,CAAsC;IAElE,OAAO,CAAC,WAAW,CAAsC;IAUzD,OAAO,CAAC,qBAAqB,CAAC,CAAa;IAE3C,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,uBAAuB;
|
|
1
|
+
{"version":3,"file":"electron-ble-transport.d.ts","sourceRoot":"","sources":["../src/electron-ble-transport.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ interface DeviceInfo extends OneKeyDeviceInfoBase {
|
|
|
13
13
|
protocolType?: ProtocolType;
|
|
14
14
|
}
|
|
15
15
|
declare class WebUsbTransport extends ProtocolV2UsbTransportBase<string> {
|
|
16
|
+
private readonly identityProbe;
|
|
16
17
|
messages: ReturnType<typeof _onekeyfe_hd_transport__default.parseConfigure> | undefined;
|
|
17
18
|
/** Protobuf schema for Protocol V2 transports. */
|
|
18
19
|
messagesV2: ReturnType<typeof _onekeyfe_hd_transport__default.parseConfigure> | undefined;
|
|
@@ -29,6 +30,11 @@ declare class WebUsbTransport extends ProtocolV2UsbTransportBase<string> {
|
|
|
29
30
|
private staleProtocolPaths;
|
|
30
31
|
/** Paths currently acquired (between a successful acquire() and its release()). */
|
|
31
32
|
private acquiredPaths;
|
|
33
|
+
private identityProbeDevices;
|
|
34
|
+
private normalDevices;
|
|
35
|
+
private pendingHandleOperations;
|
|
36
|
+
private stopPromise?;
|
|
37
|
+
private identityProbeCleanupPaths;
|
|
32
38
|
/**
|
|
33
39
|
* The exact USBDevice object each cached protocol was probed against. The
|
|
34
40
|
* browser returns the same object identity for a device as long as it stays
|
|
@@ -53,11 +59,15 @@ declare class WebUsbTransport extends ProtocolV2UsbTransportBase<string> {
|
|
|
53
59
|
configurationId: number;
|
|
54
60
|
endpointId: number;
|
|
55
61
|
interfaceId: number;
|
|
56
|
-
constructor();
|
|
62
|
+
constructor(identityProbe?: boolean);
|
|
57
63
|
/**
|
|
58
64
|
* Initialize WebUSB transport
|
|
59
65
|
*/
|
|
60
66
|
init(logger: any, emitter?: EventEmitter): void;
|
|
67
|
+
stop(): Promise<void>;
|
|
68
|
+
private stopResources;
|
|
69
|
+
private assertRunning;
|
|
70
|
+
private runHandleOperation;
|
|
61
71
|
/**
|
|
62
72
|
* Announce that a USB device left. Called from the module-scoped disconnect
|
|
63
73
|
* listener, which is why it is public rather than inlined.
|
|
@@ -129,6 +139,12 @@ declare class WebUsbTransport extends ProtocolV2UsbTransportBase<string> {
|
|
|
129
139
|
* Discovers interface/endpoint numbers from USB descriptors on first connection.
|
|
130
140
|
*/
|
|
131
141
|
connectToDevice(path: string, first: boolean): Promise<undefined>;
|
|
142
|
+
private assertHandleAvailable;
|
|
143
|
+
private claimNormalHandle;
|
|
144
|
+
private releaseNormalHandles;
|
|
145
|
+
private isHandleOwnershipError;
|
|
146
|
+
private claimIdentityProbeHandle;
|
|
147
|
+
private releaseIdentityProbeHandle;
|
|
132
148
|
private closeOpenDevice;
|
|
133
149
|
private clearEndpointHalt;
|
|
134
150
|
/**
|