@onekeyfe/hd-transport-web-device 1.2.8-alpha.105 → 1.2.8-alpha.107
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.
|
@@ -594,9 +594,10 @@ describe('WebUSB identity probe ownership', () => {
|
|
|
594
594
|
};
|
|
595
595
|
jest.spyOn(internals, 'rotateProtocolV2UsbGeneration').mockResolvedValue(undefined);
|
|
596
596
|
jest.spyOn(internals, 'detectProtocol').mockResolvedValue('V1');
|
|
597
|
+
const acquireFailure = new Error('probe failed');
|
|
597
598
|
jest.spyOn(probe, 'connect').mockImplementation(() => {
|
|
598
599
|
device.opened = true;
|
|
599
|
-
if (phase === 'acquire failure') return Promise.reject(
|
|
600
|
+
if (phase === 'acquire failure') return Promise.reject(acquireFailure);
|
|
600
601
|
return Promise.resolve();
|
|
601
602
|
});
|
|
602
603
|
const closeFailure = new Error('native close failed');
|
|
@@ -605,7 +606,7 @@ describe('WebUSB identity probe ownership', () => {
|
|
|
605
606
|
await probe.acquire({ path: 'USB_PATH' });
|
|
606
607
|
await expect(probe.release('USB_PATH')).rejects.toBe(closeFailure);
|
|
607
608
|
} else {
|
|
608
|
-
await expect(probe.acquire({ path: 'USB_PATH' })).rejects.toBe(
|
|
609
|
+
await expect(probe.acquire({ path: 'USB_PATH' })).rejects.toBe(acquireFailure);
|
|
609
610
|
}
|
|
610
611
|
expect(device.opened).toBe(true);
|
|
611
612
|
const active = new WebUsbTransport();
|
|
@@ -64,6 +64,66 @@ describe('WebUsbTransport protocol probe cache', () => {
|
|
|
64
64
|
}
|
|
65
65
|
);
|
|
66
66
|
|
|
67
|
+
test.each([undefined, 2, 1])(
|
|
68
|
+
'configures a replacement V1 handle only when needed during packet recovery: %s',
|
|
69
|
+
async configurationValue => {
|
|
70
|
+
const webusb = new WebUsbTransport();
|
|
71
|
+
const path = 'replacement-v1-device';
|
|
72
|
+
const state = webusb as unknown as {
|
|
73
|
+
Log: { debug: jest.Mock };
|
|
74
|
+
deviceProtocol: Map<string, 'V1' | 'V2'>;
|
|
75
|
+
reconnectForPacketIoRetry: (
|
|
76
|
+
path: string,
|
|
77
|
+
direction: 'in' | 'out',
|
|
78
|
+
attempt: number,
|
|
79
|
+
error: unknown
|
|
80
|
+
) => Promise<void>;
|
|
81
|
+
};
|
|
82
|
+
state.Log = { debug: jest.fn() };
|
|
83
|
+
state.deviceProtocol.set(path, 'V1');
|
|
84
|
+
const replacement = {
|
|
85
|
+
opened: false,
|
|
86
|
+
configuration: configurationValue ? { configurationValue } : undefined,
|
|
87
|
+
configurations: [],
|
|
88
|
+
open: jest.fn().mockImplementation(() => {
|
|
89
|
+
replacement.opened = true;
|
|
90
|
+
return Promise.resolve();
|
|
91
|
+
}),
|
|
92
|
+
selectConfiguration: jest.fn().mockImplementation((value: number) => {
|
|
93
|
+
replacement.configuration = { configurationValue: value };
|
|
94
|
+
return Promise.resolve();
|
|
95
|
+
}),
|
|
96
|
+
reset: jest.fn(),
|
|
97
|
+
clearHalt: jest.fn(),
|
|
98
|
+
claimInterface: jest.fn().mockImplementation(() => {
|
|
99
|
+
if (replacement.configuration?.configurationValue !== 1) {
|
|
100
|
+
return Promise.reject(new Error('USB configuration is not selected'));
|
|
101
|
+
}
|
|
102
|
+
return Promise.resolve();
|
|
103
|
+
}),
|
|
104
|
+
};
|
|
105
|
+
let current = { opened: false } as USBDevice;
|
|
106
|
+
jest.spyOn(webusb, 'findDevice').mockImplementation(() => Promise.resolve(current));
|
|
107
|
+
jest.spyOn(webusb, 'getConnectedDevices').mockImplementation(() => {
|
|
108
|
+
current = replacement as unknown as USBDevice;
|
|
109
|
+
return Promise.resolve([]);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
await state.reconnectForPacketIoRetry(path, 'in', 0, new Error('transferIn failed'));
|
|
113
|
+
|
|
114
|
+
expect(replacement.selectConfiguration).toHaveBeenCalledTimes(
|
|
115
|
+
configurationValue === 1 ? 0 : 1
|
|
116
|
+
);
|
|
117
|
+
if (configurationValue !== 1) {
|
|
118
|
+
expect(replacement.selectConfiguration).toHaveBeenCalledWith(1);
|
|
119
|
+
}
|
|
120
|
+
expect(replacement.open).toHaveBeenCalledTimes(1);
|
|
121
|
+
expect(replacement.claimInterface).toHaveBeenCalledWith(0);
|
|
122
|
+
expect(replacement.reset).not.toHaveBeenCalled();
|
|
123
|
+
expect(replacement.clearHalt).not.toHaveBeenCalled();
|
|
124
|
+
}
|
|
125
|
+
);
|
|
126
|
+
|
|
67
127
|
test('uses the SDK 1.1.31 WebUSB sequence with descriptor endpoints for Protocol V1', async () => {
|
|
68
128
|
const webusb = new WebUsbTransport() as any;
|
|
69
129
|
const logger = { debug: jest.fn() };
|
|
@@ -225,7 +285,7 @@ describe('WebUsbTransport protocol probe cache', () => {
|
|
|
225
285
|
expect(webusb.connectToDevice).toHaveBeenCalledTimes(2);
|
|
226
286
|
});
|
|
227
287
|
|
|
228
|
-
test('
|
|
288
|
+
test.each([false, true])('retains claim error when cleanup fails=%s', async cleanupFails => {
|
|
229
289
|
const webusb = new WebUsbTransport() as any;
|
|
230
290
|
const logger = { debug: jest.fn() };
|
|
231
291
|
const path = 'sensitive-device-path';
|
|
@@ -275,6 +335,9 @@ describe('WebUsbTransport protocol probe cache', () => {
|
|
|
275
335
|
}),
|
|
276
336
|
clearHalt: jest.fn().mockResolvedValue(undefined),
|
|
277
337
|
};
|
|
338
|
+
if (cleanupFails) {
|
|
339
|
+
replacementDevice.close.mockRejectedValueOnce(new Error('native close failed'));
|
|
340
|
+
}
|
|
278
341
|
webusb.Log = logger;
|
|
279
342
|
webusb.usb = { getDevices: jest.fn().mockResolvedValue([replacementDevice]) };
|
|
280
343
|
webusb.deviceList = [{ path, device: originalDevice, commType: 'webusb' }];
|
|
@@ -291,7 +354,26 @@ describe('WebUsbTransport protocol probe cache', () => {
|
|
|
291
354
|
expect(originalDevice.close).toHaveBeenCalledTimes(1);
|
|
292
355
|
expect(replacementDevice.close).toHaveBeenCalledTimes(1);
|
|
293
356
|
expect(originalDevice.opened).toBe(false);
|
|
294
|
-
expect(replacementDevice.opened).toBe(
|
|
357
|
+
expect(replacementDevice.opened).toBe(cleanupFails);
|
|
358
|
+
if (cleanupFails) {
|
|
359
|
+
expect(logger.debug).toHaveBeenCalledWith(
|
|
360
|
+
'[WebUsbTransport][lifecycle]',
|
|
361
|
+
expect.objectContaining({
|
|
362
|
+
event: 'acquire-cleanup',
|
|
363
|
+
phase: 'error',
|
|
364
|
+
errorMessage: 'native close failed',
|
|
365
|
+
})
|
|
366
|
+
);
|
|
367
|
+
const competing = new WebUsbTransport();
|
|
368
|
+
jest
|
|
369
|
+
.spyOn(competing, 'findDevice')
|
|
370
|
+
.mockResolvedValue(replacementDevice as unknown as USBDevice);
|
|
371
|
+
await expect(competing.connectToDevice(path, true)).rejects.toThrow(
|
|
372
|
+
'USB device is already in use'
|
|
373
|
+
);
|
|
374
|
+
await webusb.release(path);
|
|
375
|
+
expect(replacementDevice.opened).toBe(false);
|
|
376
|
+
}
|
|
295
377
|
expect(logger.debug).toHaveBeenCalledWith(
|
|
296
378
|
'[WebUsbTransport][lifecycle]',
|
|
297
379
|
expect.objectContaining({
|
package/dist/index.js
CHANGED
|
@@ -542,6 +542,9 @@ class WebUsbTransport extends transport.ProtocolV2UsbTransportBase {
|
|
|
542
542
|
try {
|
|
543
543
|
yield this.closeOpenDevice(input.path);
|
|
544
544
|
}
|
|
545
|
+
catch (cleanupError) {
|
|
546
|
+
this.logLifecycle('acquire-cleanup', Object.assign({ phase: 'error' }, this.getDiagnosticError(cleanupError, input.path)));
|
|
547
|
+
}
|
|
545
548
|
finally {
|
|
546
549
|
this.releaseIdentityProbeHandle(input.path);
|
|
547
550
|
this.releaseNormalHandles(input.path);
|
|
@@ -738,13 +741,17 @@ class WebUsbTransport extends transport.ProtocolV2UsbTransportBase {
|
|
|
738
741
|
}
|
|
739
742
|
}
|
|
740
743
|
if (this.shouldUseLegacyV1Connection(path, options)) {
|
|
741
|
-
if (first
|
|
744
|
+
if (first ||
|
|
745
|
+
!device.configuration ||
|
|
746
|
+
device.configuration.configurationValue !== this.configurationId) {
|
|
742
747
|
yield this.runLoggedHandleOperation({
|
|
743
748
|
operation: 'selectConfiguration',
|
|
744
749
|
device,
|
|
745
750
|
path,
|
|
746
751
|
task: () => device.selectConfiguration(this.configurationId),
|
|
747
752
|
});
|
|
753
|
+
}
|
|
754
|
+
if (first) {
|
|
748
755
|
try {
|
|
749
756
|
yield this.runLoggedHandleOperation({
|
|
750
757
|
operation: 'reset',
|
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;AAahC,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AA0BhC,MAAM,WAAW,UAAW,SAAQ,oBAAoB;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AA2BD,UAAU,oBAAoB;IAC5B,gBAAgB,CAAC,EAAE,YAAY,CAAC;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAmCD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,0BAA0B,CAAC,MAAM,CAAC;IA+EjE,OAAO,CAAC,QAAQ,CAAC,aAAa;IA9E1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmC;IAEvE,OAAO,CAAC,uBAAuB,CAAK;IAEpC,OAAO,CAAC,iBAAiB,CAAK;IAE9B,OAAO,CAAC,YAAY,CAAoC;IAExD,QAAQ,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAGlE,UAAU,EAAE,UAAU,CAAC,OAAO,SAAS,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAEpE,OAAO,CAAC,sBAAsB,CAAqB;IAGnD,OAAO,CAAC,cAAc,CAAwC;IAG9D,OAAO,CAAC,wBAAwB,CAAwC;IAExE,OAAO,CAAC,mBAAmB,CAAwC;IAMnE,OAAO,CAAC,kBAAkB,CAA0B;IAGpD,OAAO,CAAC,aAAa,CAA0B;IAE/C,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,OAAO,CAAC,aAAa,CAAgC;IAErD,OAAO,CAAC,uBAAuB,CAA+B;IAE9D,OAAO,CAAC,WAAW,CAAC,CAAgB;IAEpC,OAAO,CAAC,yBAAyB,CAAqB;IAStD,OAAO,CAAC,mBAAmB,CAAqC;IAGhE,OAAO,CAAC,eAAe,CAA2C;IAElE,IAAI,SAAqB;IAEzB,OAAO,UAAS;IAEhB,UAAU,UAAS;IAEnB,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,OAAO,CAAC,EAAE,YAAY,CAAC;IAMvB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAM;IAEnC,eAAe,SAAoB;IAEnC,UAAU,SAAe;IAEzB,WAAW,SAAgB;gBAEE,aAAa,UAAQ;IAWlD,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IAexC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA6BP,aAAa;IA+E3B,OAAO,CAAC,aAAa;YAMP,kBAAkB;IAahC,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,yBAAyB;YAgBnB,wBAAwB;IAsDtC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS;IAkBrD,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAQ9B,SAAS,CAAC,UAAU,EAAE,GAAG;IASzB,mBAAmB,CAAC,UAAU,EAAE,GAAG;IAsB7B,kBAAkB;IA+BlB,SAAS;IAmCT,mBAAmB;IAgEnB,OAAO,CAAC,KAAK,EAAE,YAAY;
|
|
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.107",
|
|
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.107",
|
|
25
|
+
"@onekeyfe/hd-transport": "1.2.8-alpha.107"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@onekeyfe/hd-transport-electron": "1.2.8-alpha.
|
|
28
|
+
"@onekeyfe/hd-transport-electron": "1.2.8-alpha.107",
|
|
29
29
|
"@types/w3c-web-usb": "^1.0.6",
|
|
30
30
|
"@types/web-bluetooth": "^0.0.17"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "727ca38ba11acbed3c08433ebd8958d9c43e9198"
|
|
33
33
|
}
|
package/src/webusb.ts
CHANGED
|
@@ -783,6 +783,11 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
|
|
|
783
783
|
this.acquiredPaths.delete(input.path);
|
|
784
784
|
try {
|
|
785
785
|
await this.closeOpenDevice(input.path);
|
|
786
|
+
} catch (cleanupError) {
|
|
787
|
+
this.logLifecycle('acquire-cleanup', {
|
|
788
|
+
phase: 'error',
|
|
789
|
+
...this.getDiagnosticError(cleanupError, input.path),
|
|
790
|
+
});
|
|
786
791
|
} finally {
|
|
787
792
|
this.releaseIdentityProbeHandle(input.path);
|
|
788
793
|
this.releaseNormalHandles(input.path);
|
|
@@ -1031,13 +1036,19 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
|
|
|
1031
1036
|
if (this.shouldUseLegacyV1Connection(path, options)) {
|
|
1032
1037
|
// Match the last V1-only WebUSB lifecycle from SDK 1.1.31. Legacy devices
|
|
1033
1038
|
// configure before reset and keep the same USBDevice object afterwards.
|
|
1034
|
-
if (
|
|
1039
|
+
if (
|
|
1040
|
+
first ||
|
|
1041
|
+
!device.configuration ||
|
|
1042
|
+
device.configuration.configurationValue !== this.configurationId
|
|
1043
|
+
) {
|
|
1035
1044
|
await this.runLoggedHandleOperation({
|
|
1036
1045
|
operation: 'selectConfiguration',
|
|
1037
1046
|
device,
|
|
1038
1047
|
path,
|
|
1039
1048
|
task: () => device.selectConfiguration(this.configurationId),
|
|
1040
1049
|
});
|
|
1050
|
+
}
|
|
1051
|
+
if (first) {
|
|
1041
1052
|
try {
|
|
1042
1053
|
await this.runLoggedHandleOperation({
|
|
1043
1054
|
operation: 'reset',
|