@onekeyfe/hd-transport-web-device 1.2.0-alpha.30 → 1.2.0-alpha.32

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.
@@ -3,6 +3,7 @@ import transport, {
3
3
  ProtocolV2,
4
4
  ProtocolV2LinkError,
5
5
  } from '@onekeyfe/hd-transport';
6
+ import { ONEKEY_WEBUSB_FILTER } from '@onekeyfe/hd-shared';
6
7
 
7
8
  import WebUsbTransport from '../src/webusb';
8
9
 
@@ -20,6 +21,34 @@ const schema = {
20
21
  };
21
22
 
22
23
  describe('WebUsbTransport Protocol V2 timeout recovery', () => {
24
+ test('only enumerates devices with real USB serial numbers', async () => {
25
+ const filter = ONEKEY_WEBUSB_FILTER[0];
26
+ const deviceWithSerial = {
27
+ ...filter,
28
+ manufacturerName: 'OneKey',
29
+ productName: 'OneKey Pro 2',
30
+ serialNumber: 'PRO2-SERIAL',
31
+ } as USBDevice;
32
+ const deviceWithoutSerial = {
33
+ ...filter,
34
+ manufacturerName: 'OneKey',
35
+ productName: 'OneKey Pro 2',
36
+ serialNumber: null,
37
+ } as USBDevice;
38
+ const webusb = new WebUsbTransport();
39
+ webusb.usb = {
40
+ getDevices: jest.fn().mockResolvedValue([deviceWithSerial, deviceWithoutSerial]),
41
+ } as unknown as USB;
42
+
43
+ await expect(webusb.getConnectedDevices()).resolves.toEqual([
44
+ {
45
+ path: 'PRO2-SERIAL',
46
+ device: deviceWithSerial,
47
+ commType: 'webusb',
48
+ },
49
+ ]);
50
+ });
51
+
23
52
  test('keeps active links when the Protocol V2 schema is configured repeatedly', () => {
24
53
  const webusb = new WebUsbTransport() as any;
25
54
  webusb.invalidateAllProtocolV2UsbLinks = jest.fn().mockResolvedValue(undefined);
@@ -53,6 +53,7 @@ export default class ElectronBleTransport {
53
53
  protocolType?: ProtocolType | undefined;
54
54
  }>;
55
55
  release(id: string): Promise<void>;
56
+ private releaseNative;
56
57
  private createProtocolMismatchError;
57
58
  private createProtocolDetectionError;
58
59
  private clearProbeProtocol;
@@ -1 +1 @@
1
- {"version":3,"file":"electron-ble-transport.d.ts","sourceRoot":"","sources":["../src/electron-ble-transport.ts"],"names":[],"mappings":";AAsBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,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;CACjC,CAAC;AAoCF,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,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,cAAc,CAAwC;IAE9D,OAAO,CAAC,mBAAmB,CAAwC;IAEnE,OAAO,CAAC,SAAS,CAAsE;IAEvF,OAAO,CAAC,YAAY,CAAoD;IAExE,OAAO,CAAC,aAAa,CAAwC;IAE7D,OAAO,CAAC,eAAe,CAAgD;IAEvE,OAAO,CAAC,eAAe,CAmBpB;IAEH,OAAO,CAAC,oBAAoB,CAAsC;IAElE,OAAO,CAAC,kBAAkB,CAAsC;IAEhE,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,kBAAkB;IA0B1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IAcxC,SAAS,CAAC,UAAU,EAAE,GAAG;IAKzB,mBAAmB,CAAC,UAAU,EAAE,GAAG;IAgB7B,MAAM;IAIN,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAqBxC,OAAO,CAAC,KAAK,EAAE,eAAe;;;;;;;;;;;IAoF9B,OAAO,CAAC,EAAE,EAAE,MAAM;IAgBxB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,kBAAkB;YAMZ,cAAc;IA+C5B,OAAO,CAAC,8BAA8B;YAgBxB,iCAAiC;YAqCjC,eAAe;YAgBf,eAAe;YAuBf,SAAS;IASvB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,4BAA4B;IAkBpC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,sBAAsB;YAShB,mBAAmB;IAiBjC,OAAO,CAAC,4BAA4B;IAgB9B,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;YAuEd,cAAc;IA0B5B,OAAO,CAAC,uBAAuB;IAyC/B,OAAO,CAAC,6BAA6B;IAsCrC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAGxD"}
1
+ {"version":3,"file":"electron-ble-transport.d.ts","sourceRoot":"","sources":["../src/electron-ble-transport.ts"],"names":[],"mappings":";AAsBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,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;CACjC,CAAC;AAoCF,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,GAAG,CAAC,EAAE,GAAG,CAAC;IAEV,OAAO,CAAC,EAAE,YAAY,CAAC;IAEvB,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,cAAc,CAAwC;IAE9D,OAAO,CAAC,mBAAmB,CAAwC;IAEnE,OAAO,CAAC,SAAS,CAAsE;IAEvF,OAAO,CAAC,YAAY,CAAoD;IAExE,OAAO,CAAC,aAAa,CAAwC;IAE7D,OAAO,CAAC,eAAe,CAAgD;IAEvE,OAAO,CAAC,eAAe,CAmBpB;IAEH,OAAO,CAAC,oBAAoB,CAAsC;IAElE,OAAO,CAAC,kBAAkB,CAAsC;IAEhE,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,kBAAkB;IA0B1B,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY;IAcxC,SAAS,CAAC,UAAU,EAAE,GAAG;IAKzB,mBAAmB,CAAC,UAAU,EAAE,GAAG;IAgB7B,MAAM;IAIN,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAqBxC,OAAO,CAAC,KAAK,EAAE,eAAe;;;;;;;;;;;IAoF9B,OAAO,CAAC,EAAE,EAAE,MAAM;YAUV,aAAa;IAe3B,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,4BAA4B;IAOpC,OAAO,CAAC,kBAAkB;YAMZ,cAAc;IA+C5B,OAAO,CAAC,8BAA8B;YAgBxB,iCAAiC;YAqCjC,eAAe;YAgBf,eAAe;YAuBf,SAAS;IASvB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,4BAA4B;IAkBpC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,sBAAsB;YAShB,mBAAmB;IAiBjC,OAAO,CAAC,4BAA4B;IAgB9B,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;YAuEd,cAAc;IA0B5B,OAAO,CAAC,uBAAuB;IAyC/B,OAAO,CAAC,6BAA6B;IAsCrC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;CAGxD"}
package/dist/index.d.ts CHANGED
@@ -22,12 +22,6 @@ declare class WebUsbTransport extends ProtocolV2UsbTransportBase<string> {
22
22
  private deviceProtocolHints;
23
23
  /** Per-path USB endpoint / interface numbers (discovered from USB descriptors) */
24
24
  private deviceEndpoints;
25
- /**
26
- * Early Pro2 boards have no USB serial number. Assign a session-stable mock path per
27
- * USBDevice instance so discovery retains them; reconnecting creates a new instance/path.
28
- */
29
- private mockSerialPaths;
30
- private mockSerialCounter;
31
25
  name: string;
32
26
  stopped: boolean;
33
27
  configured: boolean;
@@ -66,10 +60,6 @@ declare class WebUsbTransport extends ProtocolV2UsbTransportBase<string> {
66
60
  * It does NOT prompt the user to select a device
67
61
  */
68
62
  enumerate(): Promise<DeviceInfo[]>;
69
- /**
70
- * Use the USB serial as the device path, falling back to a session-stable mock path.
71
- */
72
- private getDevicePath;
73
63
  /**
74
64
  * Get list of connected devices
75
65
  */
@@ -211,6 +201,7 @@ declare class ElectronBleTransport {
211
201
  protocolType?: ProtocolType | undefined;
212
202
  }>;
213
203
  release(id: string): Promise<void>;
204
+ private releaseNative;
214
205
  private createProtocolMismatchError;
215
206
  private createProtocolDetectionError;
216
207
  private clearProbeProtocol;
package/dist/index.js CHANGED
@@ -74,8 +74,6 @@ class WebUsbTransport extends transport.ProtocolV2UsbTransportBase {
74
74
  this.deviceProtocol = new Map();
75
75
  this.deviceProtocolHints = new Map();
76
76
  this.deviceEndpoints = new Map();
77
- this.mockSerialPaths = new WeakMap();
78
- this.mockSerialCounter = 0;
79
77
  this.name = 'WebUsbTransport';
80
78
  this.stopped = false;
81
79
  this.configured = false;
@@ -131,20 +129,6 @@ class WebUsbTransport extends transport.ProtocolV2UsbTransportBase {
131
129
  return this.deviceList;
132
130
  });
133
131
  }
134
- getDevicePath(device) {
135
- var _a;
136
- if (typeof device.serialNumber === 'string' && device.serialNumber.length > 0) {
137
- return device.serialNumber;
138
- }
139
- let path = this.mockSerialPaths.get(device);
140
- if (!path) {
141
- this.mockSerialCounter += 1;
142
- path = `mock-serial:${device.vendorId.toString(16)}:${device.productId.toString(16)}:${this.mockSerialCounter}`;
143
- this.mockSerialPaths.set(device, path);
144
- (_a = this.Log) === null || _a === void 0 ? void 0 : _a.debug(`[WebUSB] device has no serial number, using mock path: ${path}`);
145
- }
146
- return path;
147
- }
148
132
  getConnectedDevices() {
149
133
  return __awaiter(this, void 0, void 0, function* () {
150
134
  if (!this.usb)
@@ -152,10 +136,11 @@ class WebUsbTransport extends transport.ProtocolV2UsbTransportBase {
152
136
  const devices = yield this.usb.getDevices();
153
137
  const onekeyDevices = devices.filter(dev => {
154
138
  const isOneKey = hdShared.ONEKEY_WEBUSB_FILTER.some((desc) => dev.vendorId === desc.vendorId && dev.productId === desc.productId);
155
- return isOneKey && !hdShared.isKnownTrezorWebUsbDevice(dev);
139
+ const hasSerialNumber = typeof dev.serialNumber === 'string' && dev.serialNumber.length > 0;
140
+ return isOneKey && hasSerialNumber && !hdShared.isKnownTrezorWebUsbDevice(dev);
156
141
  });
157
142
  this.deviceList = onekeyDevices.map(device => {
158
- const path = this.getDevicePath(device);
143
+ const path = device.serialNumber;
159
144
  const protocolHint = inferProtocolHintFromDeviceName$1(device.productName);
160
145
  if (protocolHint) {
161
146
  this.deviceProtocolHints.set(path, protocolHint);
@@ -786,7 +771,7 @@ class ElectronBleTransport {
786
771
  this.rejectProtocolV2Frames(uuid, new Error(reason));
787
772
  (_b = this.Log) === null || _b === void 0 ? void 0 : _b.debug('[Electron BLE] Protocol V2 link invalidated:', uuid, reason);
788
773
  if (reason.startsWith('Protocol V2 link-fatal error:')) {
789
- yield this.release(uuid);
774
+ yield this.releaseNative(uuid);
790
775
  }
791
776
  }),
792
777
  });
@@ -975,10 +960,22 @@ class ElectronBleTransport {
975
960
  });
976
961
  }
977
962
  release(id) {
978
- var _a, _b;
963
+ var _a;
979
964
  return __awaiter(this, void 0, void 0, function* () {
980
965
  try {
981
966
  yield this.protocolV2Links.invalidateLink(id, 'Electron BLE transport released');
967
+ yield this.releaseNative(id);
968
+ }
969
+ catch (error) {
970
+ (_a = this.Log) === null || _a === void 0 ? void 0 : _a.error('[Electron BLE] release failed:', error);
971
+ this.cleanupDeviceState(id);
972
+ }
973
+ });
974
+ }
975
+ releaseNative(id) {
976
+ var _a, _b;
977
+ return __awaiter(this, void 0, void 0, function* () {
978
+ try {
982
979
  if (this.connectedDevices.has(id)) {
983
980
  if ((_a = window.desktopApi) === null || _a === void 0 ? void 0 : _a.nobleBle) {
984
981
  yield window.desktopApi.nobleBle.unsubscribe(id);
package/dist/webusb.d.ts CHANGED
@@ -13,8 +13,6 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
13
13
  private deviceProtocol;
14
14
  private deviceProtocolHints;
15
15
  private deviceEndpoints;
16
- private mockSerialPaths;
17
- private mockSerialCounter;
18
16
  name: string;
19
17
  stopped: boolean;
20
18
  configured: boolean;
@@ -30,7 +28,6 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
30
28
  configureProtocolV2(signedData: any): void;
31
29
  promptDeviceAccess(): Promise<USBDevice | null>;
32
30
  enumerate(): Promise<DeviceInfo[]>;
33
- private getDevicePath;
34
31
  getConnectedDevices(): Promise<DeviceInfo[]>;
35
32
  acquire(input: AcquireInput): Promise<string | undefined>;
36
33
  private createProtocolMismatchError;
@@ -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":"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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.0-alpha.30",
3
+ "version": "1.2.0-alpha.32",
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.0-alpha.30",
25
- "@onekeyfe/hd-transport": "1.2.0-alpha.30"
24
+ "@onekeyfe/hd-shared": "1.2.0-alpha.32",
25
+ "@onekeyfe/hd-transport": "1.2.0-alpha.32"
26
26
  },
27
27
  "devDependencies": {
28
- "@onekeyfe/hd-transport-electron": "1.2.0-alpha.30",
28
+ "@onekeyfe/hd-transport-electron": "1.2.0-alpha.32",
29
29
  "@types/w3c-web-usb": "^1.0.6",
30
30
  "@types/web-bluetooth": "^0.0.17"
31
31
  },
32
- "gitHead": "07405d2e3dcdd0ba351ae98b7cf4f61690ef2913"
32
+ "gitHead": "468888b93df8b147a512f63a8cbdc40ca1c5c1cf"
33
33
  }
@@ -125,7 +125,7 @@ export default class ElectronBleTransport {
125
125
  this.rejectProtocolV2Frames(uuid, new Error(reason));
126
126
  this.Log?.debug('[Electron BLE] Protocol V2 link invalidated:', uuid, reason);
127
127
  if (reason.startsWith('Protocol V2 link-fatal error:')) {
128
- await this.release(uuid);
128
+ await this.releaseNative(uuid);
129
129
  }
130
130
  },
131
131
  });
@@ -342,6 +342,15 @@ export default class ElectronBleTransport {
342
342
  async release(id: string) {
343
343
  try {
344
344
  await this.protocolV2Links.invalidateLink(id, 'Electron BLE transport released');
345
+ await this.releaseNative(id);
346
+ } catch (error) {
347
+ this.Log?.error('[Electron BLE] release failed:', error);
348
+ this.cleanupDeviceState(id);
349
+ }
350
+ }
351
+
352
+ private async releaseNative(id: string) {
353
+ try {
345
354
  if (this.connectedDevices.has(id)) {
346
355
  if (window.desktopApi?.nobleBle) {
347
356
  await window.desktopApi.nobleBle.unsubscribe(id);
package/src/webusb.ts CHANGED
@@ -83,14 +83,6 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
83
83
  /** Per-path USB endpoint / interface numbers (discovered from USB descriptors) */
84
84
  private deviceEndpoints: Map<string, DeviceEndpoints> = new Map();
85
85
 
86
- /**
87
- * Early Pro2 boards have no USB serial number. Assign a session-stable mock path per
88
- * USBDevice instance so discovery retains them; reconnecting creates a new instance/path.
89
- */
90
- private mockSerialPaths: WeakMap<USBDevice, string> = new WeakMap();
91
-
92
- private mockSerialCounter = 0;
93
-
94
86
  name = 'WebUsbTransport';
95
87
 
96
88
  stopped = false;
@@ -195,25 +187,6 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
195
187
  return this.deviceList;
196
188
  }
197
189
 
198
- /**
199
- * Use the USB serial as the device path, falling back to a session-stable mock path.
200
- */
201
- private getDevicePath(device: USBDevice): string {
202
- if (typeof device.serialNumber === 'string' && device.serialNumber.length > 0) {
203
- return device.serialNumber;
204
- }
205
- let path = this.mockSerialPaths.get(device);
206
- if (!path) {
207
- this.mockSerialCounter += 1;
208
- path = `mock-serial:${device.vendorId.toString(16)}:${device.productId.toString(16)}:${
209
- this.mockSerialCounter
210
- }`;
211
- this.mockSerialPaths.set(device, path);
212
- this.Log?.debug(`[WebUSB] device has no serial number, using mock path: ${path}`);
213
- }
214
- return path;
215
- }
216
-
217
190
  /**
218
191
  * Get list of connected devices
219
192
  */
@@ -226,11 +199,12 @@ export default class WebUsbTransport extends ProtocolV2UsbTransportBase<string>
226
199
  (desc: { vendorId: number; productId: number }) =>
227
200
  dev.vendorId === desc.vendorId && dev.productId === desc.productId
228
201
  );
229
- return isOneKey && !isKnownTrezorWebUsbDevice(dev);
202
+ const hasSerialNumber = typeof dev.serialNumber === 'string' && dev.serialNumber.length > 0;
203
+ return isOneKey && hasSerialNumber && !isKnownTrezorWebUsbDevice(dev);
230
204
  });
231
205
 
232
206
  this.deviceList = onekeyDevices.map(device => {
233
- const path = this.getDevicePath(device);
207
+ const path = device.serialNumber as string;
234
208
  const protocolHint = inferProtocolHintFromDeviceName(device.productName);
235
209
  if (protocolHint) {
236
210
  this.deviceProtocolHints.set(path, protocolHint);