@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(new Error('probe failed'));
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(closeFailure);
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('closes every owned handle after claimInterface fails across re-enumeration', async () => {
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(false);
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',
@@ -1 +1 @@
1
- {"version":3,"file":"webusb.d.ts","sourceRoot":"","sources":["../src/webusb.ts"],"names":[],"mappings":"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"}
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;IAwIjC,OAAO,CAAC,2BAA2B;IAMnC,OAAO,CAAC,+BAA+B;IAOvC,OAAO,CAAC,4BAA4B;YAItB,cAAc;IAmEtB,UAAU,CAAC,IAAI,EAAE,MAAM;IAwBvB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,oBAAyB;IAwD9E,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,iBAAiB;IAiCnB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,oBAAyB;YA4HxE,oBAAoB;IAclC,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,0BAA0B;YAapB,eAAe;YAwBf,iBAAiB;YAwCjB,iBAAiB;IA+B/B,OAAO,CAAC,cAAc;IAOhB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IASvE,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,uBAAuB;YASjB,uBAAuB;YAWvB,kBAAkB;IAyChC,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,wBAAwB;YAgBlB,yBAAyB;IA+DvC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,aAAa;YASP,oBAAoB;YA6BpB,eAAe;YAsBf,mBAAmB;YA+CnB,cAAc;YAad,yBAAyB;YAKzB,yBAAyB;YAMzB,uBAAuB;YA0CvB,eAAe;YAqBf,eAAe;IAiBvB,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,oBAAoB;YA2BlB,cAAc;YAkCd,cAAc;IAkBtB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAgD5C,OAAO,CAAC,IAAI,EAAE,MAAM;IA8B1B,SAAS,CAAC,uBAAuB,IAAI,iBAAiB;IAUtD,SAAS,CAAC,sBAAsB;cAIhB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,IAAI,CAAC;cAIA,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,UAAU,CAAC;cASN,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1F,SAAS,CAAC,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKrE,SAAS,CAAC,+BAA+B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK;IAWjF,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAGxD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-transport-web-device",
3
- "version": "1.2.8-alpha.105",
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.105",
25
- "@onekeyfe/hd-transport": "1.2.8-alpha.105"
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.105",
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": "dab4ffe21ce85e811885bf6e90ab40f874e5288c"
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 (first) {
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',