@onekeyfe/hd-shared 1.2.8 → 1.2.9

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.
@@ -58,11 +58,14 @@ export declare const HardwareErrorCode: {
58
58
  readonly ForbiddenKeyPath: 416;
59
59
  readonly RepeatUnlocking: 417;
60
60
  readonly DefectiveFirmware: 418;
61
+ readonly DeviceNotSupportPath: 435;
61
62
  readonly NetworkError: 500;
62
63
  readonly TransportNotConfigured: 600;
63
64
  readonly TransportCallInProgress: 601;
64
65
  readonly TransportNotFound: 602;
65
66
  readonly TransportInvalidProtobuf: 603;
67
+ readonly TransportProtocolProbeFailed: 604;
68
+ readonly TransportProtocolMismatch: 605;
66
69
  readonly BleScanError: 700;
67
70
  readonly BlePermissionError: 701;
68
71
  readonly BleLocationError: 702;
@@ -123,11 +126,10 @@ export declare const HardwareErrorCode: {
123
126
  readonly LowlevelTrasnportConnectError: 900;
124
127
  readonly WebDeviceNotFoundOrNeedsPermission: 901;
125
128
  readonly WebDevicePromptAccessError: 902;
129
+ readonly WebUsbDeviceAccessError: 903;
126
130
  };
127
131
  export declare const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping;
128
132
  export declare const TypedError: (hardwareError: ErrorCodeUnion | string, message?: string, params?: any) => HardwareError;
129
- export declare const isBleStaleBondHardwareError: (error: unknown) => boolean;
130
- export declare const isBleStaleBondErrorText: (text: string) => boolean;
131
133
  export declare const serializeError: (payload: any) => any;
132
134
  export declare const CreateErrorByMessage: (message: string) => HardwareError;
133
135
  export declare const CreateHardwareErrorByBridgeError: (raw: string) => HardwareError;
@@ -1 +1 @@
1
- {"version":3,"file":"HardwareError.d.ts","sourceRoot":"","sources":["../src/HardwareError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,KAAK,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5C,KAAK,+BAA+B,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,OAAO,iBAAiB,CAAC,GAAG,MAAM;CAAE,CAAC;AAE5F,KAAK,cAAc,GAAG,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAsCxD,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAS,EAAE,cAAc,CAAkC;IAE3D,OAAO,SAAM;IAEb,MAAM,EAAE,GAAG,CAAM;gBAEL,aAAa,EAAE,cAAc,GAAG,MAAM;CAmBnD;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8bpB,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,+BAyJ7B,CAAC;AAEX,eAAO,MAAM,UAAU,kBACN,cAAc,GAAG,MAAM,YAC5B,MAAM,WACP,GAAG,kBAMb,CAAC;AAEF,eAAO,MAAM,2BAA2B,UAAW,OAAO,KAAG,OAO5D,CAAC;AAEF,eAAO,MAAM,uBAAuB,SAAU,MAAM,KAAG,OAStD,CAAC;AAEF,eAAO,MAAM,cAAc,YAAa,GAAG,QAe1C,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,aAOtD,CAAC;AAGF,eAAO,MAAM,gCAAgC,QAAS,MAAM,KAAG,aAQ9D,CAAC;AAEF,QAAA,MAAM,uCAAuC;oBAM3B,MAAM;oBACN,MAAM;;;mBAcvB,CAAC;AAEF,QAAA,MAAM,sCAAsC;oBAM1B,MAAM;oBACN,MAAM;;;mBAcvB,CAAC;AAEF,QAAA,MAAM,yCAAyC,cAClC,MAAM,GAAG,SAAS,YACnB,MAAM,GAAG,SAAS,iBACb,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,oBACnB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,kBAsBF,CAAC;AAEF,QAAA,MAAM,6BAA6B,mBACjB,MAAM,qBACH,MAAM,eACZ,MAAM,kBAQpB,CAAC;AAEF,QAAA,MAAM,4BAA4B,aACtB,MAAM,aACL,MAAM,cACL,MAAM,cACN,MAAM,aACP,MAAM,kBAWlB,CAAC;AAEF,QAAA,MAAM,iCAAiC,eAAgB,MAAM,gBAAgB,aAAa,kBAItF,CAAC;AAEL,OAAO,EACL,uCAAuC,EACvC,sCAAsC,EACtC,yCAAyC,EACzC,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,GAClC,CAAC"}
1
+ {"version":3,"file":"HardwareError.d.ts","sourceRoot":"","sources":["../src/HardwareError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,KAAK,OAAO,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5C,KAAK,+BAA+B,GAAG;KAAG,CAAC,IAAI,OAAO,CAAC,OAAO,iBAAiB,CAAC,GAAG,MAAM;CAAE,CAAC;AAE5F,KAAK,cAAc,GAAG,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAsCxD,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAS,EAAE,cAAc,CAAkC;IAE3D,OAAO,SAAM;IAEb,MAAM,EAAE,GAAG,CAAM;gBAEL,aAAa,EAAE,cAAc,GAAG,MAAM;CAmBnD;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqdpB,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,+BA+J7B,CAAC;AAEX,eAAO,MAAM,UAAU,kBACN,cAAc,GAAG,MAAM,YAC5B,MAAM,WACP,GAAG,kBAMb,CAAC;AAEF,eAAO,MAAM,cAAc,YAAa,GAAG,QAe1C,CAAC;AAEF,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,aAOtD,CAAC;AAGF,eAAO,MAAM,gCAAgC,QAAS,MAAM,KAAG,aAQ9D,CAAC;AAEF,QAAA,MAAM,uCAAuC;oBAM3B,MAAM;oBACN,MAAM;;;mBAcvB,CAAC;AAEF,QAAA,MAAM,sCAAsC;oBAM1B,MAAM;oBACN,MAAM;;;mBAcvB,CAAC;AAEF,QAAA,MAAM,yCAAyC,cAClC,MAAM,GAAG,SAAS,YACnB,MAAM,GAAG,SAAS,iBACb,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE,oBACnB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,kBAsBF,CAAC;AAEF,QAAA,MAAM,6BAA6B,mBACjB,MAAM,qBACH,MAAM,eACZ,MAAM,kBAQpB,CAAC;AAEF,QAAA,MAAM,4BAA4B,aACtB,MAAM,aACL,MAAM,cACL,MAAM,cACN,MAAM,aACP,MAAM,kBAWlB,CAAC;AAEF,QAAA,MAAM,iCAAiC,eAAgB,MAAM,gBAAgB,aAAa,kBAItF,CAAC;AAEL,OAAO,EACL,uCAAuC,EACvC,sCAAsC,EACtC,yCAAyC,EACzC,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,GAClC,CAAC"}
@@ -18,8 +18,8 @@ type WebUsbIdentityDescriptor = {
18
18
  manufacturerName?: string | null;
19
19
  };
20
20
  export declare const isKnownTrezorWebUsbDevice: (descriptor: WebUsbIdentityDescriptor) => boolean;
21
- export declare const ERROR_CODES_REQUIRE_RELEASE: readonly [106, 107, 109, 112, 805, 801, 802, 812];
22
- export declare const ERROR_CODES_REQUIRE_DISCONNECT: readonly [106, 805];
21
+ export declare const ERROR_CODES_REQUIRE_RELEASE: readonly [903, 604, 605, 106, 107, 109, 112, 805, 801, 802, 812];
22
+ export declare const ERROR_CODES_REQUIRE_DISCONNECT: readonly [903, 604, 605, 106, 805];
23
23
  export declare enum EOneKeyBleMessageKeys {
24
24
  BLE_SELECT = "$onekey-ble-select",
25
25
  BLE_SELECT_RESULT = "$onekey-ble-select-result",
@@ -78,6 +78,7 @@ export declare const canonicalizePro2BleAdvertisementName: (value: string) => st
78
78
  export declare const isSameOnekeyBleName: (left?: string | null, right?: string | null) => boolean;
79
79
  export declare const hasOnekeyCommunicationService: (serviceUuids: Array<string | null | undefined> | null | undefined) => boolean;
80
80
  export declare const isPro2FamilyBleName: (value?: string | null) => boolean;
81
+ export declare const parseOnekeyBleColorCode: (manufacturerData: Uint8Array | null | undefined) => string | undefined;
81
82
  export declare const isOnekeyBluetoothDevice: ({ id, name, localName, serviceUuids, }: BluetoothDeviceIdentity) => boolean;
82
83
  export {};
83
84
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -22,12 +22,12 @@ declare const isKnownTrezorWebUsbDevice: (descriptor: WebUsbIdentityDescriptor)
22
22
  * Error codes that require device release after occurrence
23
23
  * These errors indicate the device is in an invalid state and needs to be released
24
24
  */
25
- declare const ERROR_CODES_REQUIRE_RELEASE: readonly [106, 107, 109, 112, 805, 801, 802, 812];
25
+ declare const ERROR_CODES_REQUIRE_RELEASE: readonly [903, 604, 605, 106, 107, 109, 112, 805, 801, 802, 812];
26
26
  /**
27
27
  * Error codes that require device disconnect before release
28
28
  * These errors indicate a communication failure that requires full reconnection
29
29
  */
30
- declare const ERROR_CODES_REQUIRE_DISCONNECT: readonly [106, 805];
30
+ declare const ERROR_CODES_REQUIRE_DISCONNECT: readonly [903, 604, 605, 106, 805];
31
31
  declare enum EOneKeyBleMessageKeys {
32
32
  BLE_SELECT = "$onekey-ble-select",
33
33
  BLE_SELECT_RESULT = "$onekey-ble-select-result",
@@ -109,6 +109,11 @@ declare const hasOnekeyCommunicationService: (serviceUuids: Array<string | null
109
109
  * that carry no OneKey service UUID, so a scan cannot always see it.
110
110
  */
111
111
  declare const isPro2FamilyBleName: (value?: string | null) => boolean;
112
+ /**
113
+ * Reads the serial-number color letter from the raw 0xFF advertisement payload
114
+ * (the bytes after the AD type). Returns undefined when no valid letter is present.
115
+ */
116
+ declare const parseOnekeyBleColorCode: (manufacturerData: Uint8Array | null | undefined) => string | undefined;
112
117
  declare const isOnekeyBluetoothDevice: ({ id, name, localName, serviceUuids, }: BluetoothDeviceIdentity) => boolean;
113
118
 
114
119
  type Deferred<T, I = any, D = any> = {
@@ -314,6 +319,10 @@ declare const HardwareErrorCode: {
314
319
  * Defective firmware detected
315
320
  */
316
321
  readonly DefectiveFirmware: 418;
322
+ /**
323
+ * Device cannot derive this path, whatever the safety checks say
324
+ */
325
+ readonly DeviceNotSupportPath: 435;
317
326
  /**
318
327
  * Netword request error
319
328
  */
@@ -334,6 +343,16 @@ declare const HardwareErrorCode: {
334
343
  * Transport invalid protobuf
335
344
  */
336
345
  readonly TransportInvalidProtobuf: 603;
346
+ /**
347
+ * No supported device protocol answered the active probe.
348
+ * @params: { expectedProtocol?: 'V1' | 'V2'; attempts?: number }
349
+ */
350
+ readonly TransportProtocolProbeFailed: 604;
351
+ /**
352
+ * The actively detected device protocol differs from the required protocol.
353
+ * @params: { expectedProtocol: 'V1' | 'V2'; detectedProtocol?: 'V1' | 'V2' }
354
+ */
355
+ readonly TransportProtocolMismatch: 605;
337
356
  /**
338
357
  * Bluetooth error code
339
358
  */
@@ -449,7 +468,7 @@ declare const HardwareErrorCode: {
449
468
  */
450
469
  readonly FirmwareVerificationFailed: 820;
451
470
  /**
452
- * Web bridge coonect needs permission
471
+ * USB access needs OS permission (bridge/libusb or WebUSB).
453
472
  */
454
473
  readonly BridgeNeedsPermission: 821;
455
474
  readonly CallQueueActionCancelled: 822;
@@ -505,11 +524,14 @@ declare const HardwareErrorCode: {
505
524
  * Web USB or Web Bluetooth device prompt access error
506
525
  */
507
526
  readonly WebDevicePromptAccessError: 902;
527
+ /**
528
+ * WebUSB device is present, but its interface or endpoint is unavailable
529
+ * @params: { operation: 'open' | 'claimInterface' | 'transferIn' | 'transferOut'; nativeErrorName?: string; nativeErrorMessage?: string }
530
+ */
531
+ readonly WebUsbDeviceAccessError: 903;
508
532
  };
509
533
  declare const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping;
510
534
  declare const TypedError: (hardwareError: ErrorCodeUnion | string, message?: string, params?: any) => HardwareError;
511
- declare const isBleStaleBondHardwareError: (error: unknown) => boolean;
512
- declare const isBleStaleBondErrorText: (text: string) => boolean;
513
535
  declare const serializeError: (payload: any) => any;
514
536
  declare const CreateErrorByMessage: (message: string) => HardwareError;
515
537
  declare const CreateHardwareErrorByBridgeError: (raw: string) => HardwareError;
@@ -545,8 +567,6 @@ declare const HardwareError$1_HardwareError: typeof HardwareError;
545
567
  declare const HardwareError$1_HardwareErrorCode: typeof HardwareErrorCode;
546
568
  declare const HardwareError$1_HardwareErrorCodeMessage: typeof HardwareErrorCodeMessage;
547
569
  declare const HardwareError$1_TypedError: typeof TypedError;
548
- declare const HardwareError$1_isBleStaleBondHardwareError: typeof isBleStaleBondHardwareError;
549
- declare const HardwareError$1_isBleStaleBondErrorText: typeof isBleStaleBondErrorText;
550
570
  declare const HardwareError$1_serializeError: typeof serializeError;
551
571
  declare const HardwareError$1_CreateErrorByMessage: typeof CreateErrorByMessage;
552
572
  declare const HardwareError$1_CreateHardwareErrorByBridgeError: typeof CreateHardwareErrorByBridgeError;
@@ -563,8 +583,6 @@ declare namespace HardwareError$1 {
563
583
  HardwareError$1_HardwareErrorCode as HardwareErrorCode,
564
584
  HardwareError$1_HardwareErrorCodeMessage as HardwareErrorCodeMessage,
565
585
  HardwareError$1_TypedError as TypedError,
566
- HardwareError$1_isBleStaleBondHardwareError as isBleStaleBondHardwareError,
567
- HardwareError$1_isBleStaleBondErrorText as isBleStaleBondErrorText,
568
586
  HardwareError$1_serializeError as serializeError,
569
587
  HardwareError$1_CreateErrorByMessage as CreateErrorByMessage,
570
588
  HardwareError$1_CreateHardwareErrorByBridgeError as CreateHardwareErrorByBridgeError,
@@ -585,4 +603,4 @@ declare enum EDeviceType {
585
603
  Neo = "neo"
586
604
  }
587
605
 
588
- export { CreateErrorByMessage, CreateHardwareErrorByBridgeError, Deferred, EBleDisconnectReason, EDeviceType, EFirmwareType, EOneKeyBleMessageKeys, HardwareError$1 as ERRORS, ERROR_CODES_REQUIRE_DISCONNECT, ERROR_CODES_REQUIRE_RELEASE, HARDWARE_CONNECT_PROTOCOL, HardwareConnectProtocol, HardwareError, HardwareErrorCode, HardwareErrorCodeMessage, IHardwareError, ONEKEY_NOTIFY_CHARACTERISTIC_UUID, ONEKEY_PROTOCOL_V2_USB_IDS, ONEKEY_SERVICE_UUID, ONEKEY_WEBUSB_FILTER, ONEKEY_WRITE_CHARACTERISTIC_UUID, TypedError, canonicalizePro2BleAdvertisementName, createDefectiveFirmwareError, createDeferred, createDeprecatedHardwareError, createDeviceNotSupportMethodError, createKnownBleUuidAliases, createNeedUpgradeFirmwareHardwareError, createNewFirmwareForceUpdateHardwareError, createNewFirmwareUnReleaseHardwareError, hasOnekeyCommunicationService, inferProtocolHintFromUsbId, isBleStaleBondErrorText, isBleStaleBondHardwareError, isHeaderChunk, isKnownTrezorWebUsbDevice, isOnekeyBluetoothDevice, isOnekeyDevice, isPro2FamilyBleName, isPro2FindMyAdvertisementName, isSameOnekeyBleName, matchesKnownBleUuid, normalizeBleUuid, normalizePro2FindMyAdvertisementName, resolveOneKeyUsbDevicePath, serializeError, wait };
606
+ export { CreateErrorByMessage, CreateHardwareErrorByBridgeError, Deferred, EBleDisconnectReason, EDeviceType, EFirmwareType, EOneKeyBleMessageKeys, HardwareError$1 as ERRORS, ERROR_CODES_REQUIRE_DISCONNECT, ERROR_CODES_REQUIRE_RELEASE, HARDWARE_CONNECT_PROTOCOL, HardwareConnectProtocol, HardwareError, HardwareErrorCode, HardwareErrorCodeMessage, IHardwareError, ONEKEY_NOTIFY_CHARACTERISTIC_UUID, ONEKEY_PROTOCOL_V2_USB_IDS, ONEKEY_SERVICE_UUID, ONEKEY_WEBUSB_FILTER, ONEKEY_WRITE_CHARACTERISTIC_UUID, TypedError, canonicalizePro2BleAdvertisementName, createDefectiveFirmwareError, createDeferred, createDeprecatedHardwareError, createDeviceNotSupportMethodError, createKnownBleUuidAliases, createNeedUpgradeFirmwareHardwareError, createNewFirmwareForceUpdateHardwareError, createNewFirmwareUnReleaseHardwareError, hasOnekeyCommunicationService, inferProtocolHintFromUsbId, isHeaderChunk, isKnownTrezorWebUsbDevice, isOnekeyBluetoothDevice, isOnekeyDevice, isPro2FamilyBleName, isPro2FindMyAdvertisementName, isSameOnekeyBleName, matchesKnownBleUuid, normalizeBleUuid, normalizePro2FindMyAdvertisementName, parseOnekeyBleColorCode, resolveOneKeyUsbDevicePath, serializeError, wait };
package/dist/index.js CHANGED
@@ -107,11 +107,14 @@ const HardwareErrorCode = {
107
107
  ForbiddenKeyPath: 416,
108
108
  RepeatUnlocking: 417,
109
109
  DefectiveFirmware: 418,
110
+ DeviceNotSupportPath: 435,
110
111
  NetworkError: 500,
111
112
  TransportNotConfigured: 600,
112
113
  TransportCallInProgress: 601,
113
114
  TransportNotFound: 602,
114
115
  TransportInvalidProtobuf: 603,
116
+ TransportProtocolProbeFailed: 604,
117
+ TransportProtocolMismatch: 605,
115
118
  BleScanError: 700,
116
119
  BlePermissionError: 701,
117
120
  BleLocationError: 702,
@@ -172,6 +175,7 @@ const HardwareErrorCode = {
172
175
  LowlevelTrasnportConnectError: 900,
173
176
  WebDeviceNotFoundOrNeedsPermission: 901,
174
177
  WebDevicePromptAccessError: 902,
178
+ WebUsbDeviceAccessError: 903,
175
179
  };
176
180
  const HardwareErrorCodeMessage = {
177
181
  [HardwareErrorCode.UnknownError]: 'Unknown error occurred. Check message property.',
@@ -216,14 +220,17 @@ const HardwareErrorCodeMessage = {
216
220
  [HardwareErrorCode.ForbiddenKeyPath]: 'Forbidden key path',
217
221
  [HardwareErrorCode.RepeatUnlocking]: 'Repeat unlocking',
218
222
  [HardwareErrorCode.DefectiveFirmware]: 'Device firmware is defective, please update immediately',
223
+ [HardwareErrorCode.DeviceNotSupportPath]: 'Device not support this path',
219
224
  [HardwareErrorCode.NetworkError]: 'Network request error',
220
225
  [HardwareErrorCode.TransportNotConfigured]: 'Transport not configured',
221
226
  [HardwareErrorCode.TransportCallInProgress]: 'Transport call in progress',
222
227
  [HardwareErrorCode.TransportNotFound]: 'Transport not found',
223
228
  [HardwareErrorCode.TransportInvalidProtobuf]: 'Transport invalid protobuf',
229
+ [HardwareErrorCode.TransportProtocolProbeFailed]: 'Failed to detect the device communication protocol. Reconnect the device and try again.',
230
+ [HardwareErrorCode.TransportProtocolMismatch]: 'The device communication protocol does not match the expected protocol.',
224
231
  [HardwareErrorCode.BleScanError]: 'BLE scan error',
225
232
  [HardwareErrorCode.BlePermissionError]: 'Bluetooth required to be turned on',
226
- [HardwareErrorCode.BleLocationError]: 'Location permissions for the application are not available',
233
+ [HardwareErrorCode.BleLocationError]: 'Bluetooth or location permissions for the application are not available',
227
234
  [HardwareErrorCode.BleRequiredUUID]: 'uuid is required',
228
235
  [HardwareErrorCode.BleConnectedError]: 'connected error is always runtime error',
229
236
  [HardwareErrorCode.BleDeviceNotBonded]: 'device is not bonded',
@@ -281,6 +288,7 @@ const HardwareErrorCodeMessage = {
281
288
  [HardwareErrorCode.LowlevelTrasnportConnectError]: 'Lowlevel transport connect error',
282
289
  [HardwareErrorCode.WebDeviceNotFoundOrNeedsPermission]: 'Web-USB or Web-Bluetooth device not found or needs permission',
283
290
  [HardwareErrorCode.WebDevicePromptAccessError]: 'Web-USB or Web-Bluetooth device prompt access error',
291
+ [HardwareErrorCode.WebUsbDeviceAccessError]: 'WebUSB device access failed',
284
292
  };
285
293
  const TypedError = (hardwareError, message, params) => {
286
294
  if (typeof hardwareError === 'string') {
@@ -288,20 +296,6 @@ const TypedError = (hardwareError, message, params) => {
288
296
  }
289
297
  return new HardwareError({ errorCode: hardwareError, message: message !== null && message !== void 0 ? message : '', params });
290
298
  };
291
- const isBleStaleBondHardwareError = (error) => {
292
- const code = error === null || error === void 0 ? void 0 : error.errorCode;
293
- return (code === HardwareErrorCode.BleDeviceBondError ||
294
- code === HardwareErrorCode.BlePeerRemovedPairingInformation ||
295
- code === HardwareErrorCode.BleBondInvalid);
296
- };
297
- const isBleStaleBondErrorText = (text) => {
298
- const value = text.toLowerCase();
299
- return (value.includes('encryption is insufficient') ||
300
- value.includes('insufficient encryption') ||
301
- value.includes('peer removed pairing information') ||
302
- value.includes('cberrordomain:14') ||
303
- value.includes('gatt_insuf_authentication'));
304
- };
305
299
  const serializeError = (payload) => {
306
300
  if (payload && payload.error instanceof HardwareError) {
307
301
  return {
@@ -393,8 +387,6 @@ var HardwareError$1 = /*#__PURE__*/Object.freeze({
393
387
  HardwareErrorCode: HardwareErrorCode,
394
388
  HardwareErrorCodeMessage: HardwareErrorCodeMessage,
395
389
  TypedError: TypedError,
396
- isBleStaleBondHardwareError: isBleStaleBondHardwareError,
397
- isBleStaleBondErrorText: isBleStaleBondErrorText,
398
390
  serializeError: serializeError,
399
391
  CreateErrorByMessage: CreateErrorByMessage,
400
392
  CreateHardwareErrorByBridgeError: CreateHardwareErrorByBridgeError,
@@ -428,6 +420,9 @@ const isKnownTrezorWebUsbDevice = (descriptor) => {
428
420
  return manufacturerName != null && TREZOR_WEBUSB_MANUFACTURER_NAMES.has(manufacturerName);
429
421
  };
430
422
  const ERROR_CODES_REQUIRE_RELEASE = [
423
+ HardwareErrorCode.WebUsbDeviceAccessError,
424
+ HardwareErrorCode.TransportProtocolProbeFailed,
425
+ HardwareErrorCode.TransportProtocolMismatch,
431
426
  HardwareErrorCode.DeviceInitializeFailed,
432
427
  HardwareErrorCode.DeviceInterruptedFromOutside,
433
428
  HardwareErrorCode.DeviceInterruptedFromUser,
@@ -438,6 +433,9 @@ const ERROR_CODES_REQUIRE_RELEASE = [
438
433
  HardwareErrorCode.UnexpectPassphrase,
439
434
  ];
440
435
  const ERROR_CODES_REQUIRE_DISCONNECT = [
436
+ HardwareErrorCode.WebUsbDeviceAccessError,
437
+ HardwareErrorCode.TransportProtocolProbeFailed,
438
+ HardwareErrorCode.TransportProtocolMismatch,
441
439
  HardwareErrorCode.DeviceInitializeFailed,
442
440
  HardwareErrorCode.ResponseUnexpectTypeError,
443
441
  ];
@@ -656,6 +654,13 @@ const isPro2FamilyBleName = (value) => {
656
654
  NEO_COMPACT_NAME_PATTERN.test(compact) ||
657
655
  isPro2FindMyAdvertisementName(value));
658
656
  };
657
+ const ONEKEY_BLE_COLOR_PAYLOAD_LENGTH = 5;
658
+ const parseOnekeyBleColorCode = (manufacturerData) => {
659
+ if ((manufacturerData === null || manufacturerData === void 0 ? void 0 : manufacturerData.length) !== ONEKEY_BLE_COLOR_PAYLOAD_LENGTH)
660
+ return undefined;
661
+ const code = manufacturerData[0];
662
+ return code >= 0x41 && code <= 0x5a ? String.fromCharCode(code) : undefined;
663
+ };
659
664
  const isOnekeyBluetoothDevice = ({ id, name, localName, serviceUuids, }) => {
660
665
  const advertisedServiceUuids = serviceUuids !== null && serviceUuids !== void 0 ? serviceUuids : [];
661
666
  if (hasOnekeyCommunicationService(advertisedServiceUuids)) {
@@ -770,8 +775,6 @@ exports.createNewFirmwareForceUpdateHardwareError = createNewFirmwareForceUpdate
770
775
  exports.createNewFirmwareUnReleaseHardwareError = createNewFirmwareUnReleaseHardwareError;
771
776
  exports.hasOnekeyCommunicationService = hasOnekeyCommunicationService;
772
777
  exports.inferProtocolHintFromUsbId = inferProtocolHintFromUsbId;
773
- exports.isBleStaleBondErrorText = isBleStaleBondErrorText;
774
- exports.isBleStaleBondHardwareError = isBleStaleBondHardwareError;
775
778
  exports.isHeaderChunk = isHeaderChunk;
776
779
  exports.isKnownTrezorWebUsbDevice = isKnownTrezorWebUsbDevice;
777
780
  exports.isOnekeyBluetoothDevice = isOnekeyBluetoothDevice;
@@ -782,6 +785,7 @@ exports.isSameOnekeyBleName = isSameOnekeyBleName;
782
785
  exports.matchesKnownBleUuid = matchesKnownBleUuid;
783
786
  exports.normalizeBleUuid = normalizeBleUuid;
784
787
  exports.normalizePro2FindMyAdvertisementName = normalizePro2FindMyAdvertisementName;
788
+ exports.parseOnekeyBleColorCode = parseOnekeyBleColorCode;
785
789
  exports.resolveOneKeyUsbDevicePath = resolveOneKeyUsbDevicePath;
786
790
  exports.serializeError = serializeError;
787
791
  exports.wait = wait;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/hd-shared",
3
- "version": "1.2.8",
3
+ "version": "1.2.9",
4
4
  "description": "Hardware SDK's shared tool library",
5
5
  "keywords": [
6
6
  "Hardware-SDK",
@@ -26,5 +26,5 @@
26
26
  "lint": "eslint .",
27
27
  "lint:fix": "eslint . --fix"
28
28
  },
29
- "gitHead": "9f016278a7f395bf66b8502815dc63191e162fd3"
29
+ "gitHead": "36cc567ae08ffb9190b44efc6430d4199343be9e"
30
30
  }
@@ -2,11 +2,25 @@ import {
2
2
  HardwareErrorCode,
3
3
  HardwareErrorCodeMessage,
4
4
  TypedError,
5
- isBleStaleBondErrorText,
6
5
  serializeError,
7
6
  } from './HardwareError';
7
+ import { ERROR_CODES_REQUIRE_DISCONNECT, ERROR_CODES_REQUIRE_RELEASE } from './constants';
8
8
 
9
9
  describe('HardwareErrorCode compatibility', () => {
10
+ test.each([
11
+ ['TransportProtocolProbeFailed', 604, { expectedProtocol: 'V1' }],
12
+ ['TransportProtocolMismatch', 605, { expectedProtocol: 'V2', detectedProtocol: 'V1' }],
13
+ ] as const)('serializes the dedicated %s transport error', (name, code, params) => {
14
+ expect(HardwareErrorCode[name]).toBe(code);
15
+ const message = HardwareErrorCodeMessage[HardwareErrorCode[name]];
16
+ expect(message).toBeTruthy();
17
+ expect(ERROR_CODES_REQUIRE_RELEASE).toContain(code);
18
+ expect(ERROR_CODES_REQUIRE_DISCONNECT).toContain(code);
19
+ expect(
20
+ JSON.parse(JSON.stringify(serializeError({ error: TypedError(code, undefined, params) })))
21
+ ).toEqual({ code, error: message, params });
22
+ });
23
+
10
24
  test('preserves published Protocol V2 values while leaving code 829 unused', () => {
11
25
  expect(HardwareErrorCode).not.toHaveProperty('KaspaPrevTxIdMismatch');
12
26
  expect(HardwareErrorCode.DeviceLocked).toBe(830);
@@ -50,14 +64,4 @@ describe('HardwareErrorCode compatibility', () => {
50
64
  'pairing information is no longer valid'
51
65
  );
52
66
  });
53
-
54
- test('recognizes the macOS CoreBluetooth stale-pairing error without matching generic failures', () => {
55
- expect(
56
- isBleStaleBondErrorText(
57
- 'CBErrorDomain:14 Peer removed pairing information on the device side'
58
- )
59
- ).toBe(true);
60
- expect(isBleStaleBondErrorText('CBATTErrorDomain:14 localized native message')).toBe(false);
61
- expect(isBleStaleBondErrorText('connection failed')).toBe(false);
62
- });
63
67
  });
@@ -294,6 +294,11 @@ export const HardwareErrorCode = {
294
294
  */
295
295
  DefectiveFirmware: 418,
296
296
 
297
+ /**
298
+ * Device cannot derive this path, whatever the safety checks say
299
+ */
300
+ DeviceNotSupportPath: 435,
301
+
297
302
  /**
298
303
  * Netword request error
299
304
  */
@@ -319,6 +324,18 @@ export const HardwareErrorCode = {
319
324
  */
320
325
  TransportInvalidProtobuf: 603,
321
326
 
327
+ /**
328
+ * No supported device protocol answered the active probe.
329
+ * @params: { expectedProtocol?: 'V1' | 'V2'; attempts?: number }
330
+ */
331
+ TransportProtocolProbeFailed: 604,
332
+
333
+ /**
334
+ * The actively detected device protocol differs from the required protocol.
335
+ * @params: { expectedProtocol: 'V1' | 'V2'; detectedProtocol?: 'V1' | 'V2' }
336
+ */
337
+ TransportProtocolMismatch: 605,
338
+
322
339
  /**
323
340
  * Bluetooth error code
324
341
  */
@@ -456,7 +473,7 @@ export const HardwareErrorCode = {
456
473
  FirmwareVerificationFailed: 820,
457
474
 
458
475
  /**
459
- * Web bridge coonect needs permission
476
+ * USB access needs OS permission (bridge/libusb or WebUSB).
460
477
  */
461
478
  BridgeNeedsPermission: 821,
462
479
 
@@ -522,6 +539,12 @@ export const HardwareErrorCode = {
522
539
  * Web USB or Web Bluetooth device prompt access error
523
540
  */
524
541
  WebDevicePromptAccessError: 902,
542
+
543
+ /**
544
+ * WebUSB device is present, but its interface or endpoint is unavailable
545
+ * @params: { operation: 'open' | 'claimInterface' | 'transferIn' | 'transferOut'; nativeErrorName?: string; nativeErrorMessage?: string }
546
+ */
547
+ WebUsbDeviceAccessError: 903,
525
548
  } as const;
526
549
 
527
550
  export const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping = {
@@ -586,6 +609,7 @@ export const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping = {
586
609
  [HardwareErrorCode.ForbiddenKeyPath]: 'Forbidden key path',
587
610
  [HardwareErrorCode.RepeatUnlocking]: 'Repeat unlocking',
588
611
  [HardwareErrorCode.DefectiveFirmware]: 'Device firmware is defective, please update immediately',
612
+ [HardwareErrorCode.DeviceNotSupportPath]: 'Device not support this path',
589
613
 
590
614
  /**
591
615
  * Network Errors
@@ -599,6 +623,10 @@ export const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping = {
599
623
  [HardwareErrorCode.TransportCallInProgress]: 'Transport call in progress',
600
624
  [HardwareErrorCode.TransportNotFound]: 'Transport not found',
601
625
  [HardwareErrorCode.TransportInvalidProtobuf]: 'Transport invalid protobuf',
626
+ [HardwareErrorCode.TransportProtocolProbeFailed]:
627
+ 'Failed to detect the device communication protocol. Reconnect the device and try again.',
628
+ [HardwareErrorCode.TransportProtocolMismatch]:
629
+ 'The device communication protocol does not match the expected protocol.',
602
630
 
603
631
  /**
604
632
  * Bluetooth Error
@@ -606,7 +634,7 @@ export const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping = {
606
634
  [HardwareErrorCode.BleScanError]: 'BLE scan error',
607
635
  [HardwareErrorCode.BlePermissionError]: 'Bluetooth required to be turned on',
608
636
  [HardwareErrorCode.BleLocationError]:
609
- 'Location permissions for the application are not available',
637
+ 'Bluetooth or location permissions for the application are not available',
610
638
  [HardwareErrorCode.BleRequiredUUID]: 'uuid is required',
611
639
  [HardwareErrorCode.BleConnectedError]: 'connected error is always runtime error',
612
640
  [HardwareErrorCode.BleDeviceNotBonded]: 'device is not bonded',
@@ -677,6 +705,7 @@ export const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping = {
677
705
  'Web-USB or Web-Bluetooth device not found or needs permission',
678
706
  [HardwareErrorCode.WebDevicePromptAccessError]:
679
707
  'Web-USB or Web-Bluetooth device prompt access error',
708
+ [HardwareErrorCode.WebUsbDeviceAccessError]: 'WebUSB device access failed',
680
709
  } as const;
681
710
 
682
711
  export const TypedError = (
@@ -690,26 +719,6 @@ export const TypedError = (
690
719
  return new HardwareError({ errorCode: hardwareError, message: message ?? '', params });
691
720
  };
692
721
 
693
- export const isBleStaleBondHardwareError = (error: unknown): boolean => {
694
- const code = (error as { errorCode?: unknown })?.errorCode;
695
- return (
696
- code === HardwareErrorCode.BleDeviceBondError ||
697
- code === HardwareErrorCode.BlePeerRemovedPairingInformation ||
698
- code === HardwareErrorCode.BleBondInvalid
699
- );
700
- };
701
-
702
- export const isBleStaleBondErrorText = (text: string): boolean => {
703
- const value = text.toLowerCase();
704
- return (
705
- value.includes('encryption is insufficient') ||
706
- value.includes('insufficient encryption') ||
707
- value.includes('peer removed pairing information') ||
708
- value.includes('cberrordomain:14') ||
709
- value.includes('gatt_insuf_authentication')
710
- );
711
- };
712
-
713
722
  export const serializeError = (payload: any) => {
714
723
  if (payload && payload.error instanceof HardwareError) {
715
724
  return {
@@ -10,6 +10,7 @@ import {
10
10
  isSameOnekeyBleName,
11
11
  matchesKnownBleUuid,
12
12
  normalizePro2FindMyAdvertisementName,
13
+ parseOnekeyBleColorCode,
13
14
  resolveOneKeyUsbDevicePath,
14
15
  } from './constants';
15
16
 
@@ -251,3 +252,30 @@ describe('hardware device identity filters', () => {
251
252
  ).toBe(false);
252
253
  });
253
254
  });
255
+
256
+ describe('Pro2 / Neo BLE advertisement color', () => {
257
+ it('reads the serial-number color letter from the 5-byte payload', () => {
258
+ expect(parseOnekeyBleColorCode(Uint8Array.from([0x41, 0, 0, 0, 0]))).toBe('A');
259
+ expect(parseOnekeyBleColorCode(Uint8Array.from([0x46, 0x12, 0x34, 0x56, 0x78]))).toBe('F');
260
+ expect(parseOnekeyBleColorCode(Buffer.from([0x5a, 0, 0, 0, 0]))).toBe('Z');
261
+ });
262
+
263
+ it('treats a missing serial number or a non-letter byte as unknown', () => {
264
+ expect(parseOnekeyBleColorCode(Uint8Array.from([0x00, 0, 0, 0, 0]))).toBeUndefined();
265
+ expect(parseOnekeyBleColorCode(Uint8Array.from([0x61, 0, 0, 0, 0]))).toBeUndefined();
266
+ expect(parseOnekeyBleColorCode(Uint8Array.from([0x31, 0, 0, 0, 0]))).toBeUndefined();
267
+ });
268
+
269
+ it('does not read a color from other manufacturer data layouts', () => {
270
+ // Pro2 / Neo BLE firmware before the color: a 4-byte zero nonce.
271
+ expect(parseOnekeyBleColorCode(Uint8Array.from([0, 0, 0, 0]))).toBeUndefined();
272
+ // Classic: company ID 0x00FE followed by the MAC.
273
+ expect(
274
+ parseOnekeyBleColorCode(Uint8Array.from([0xfe, 0x00, 0x41, 1, 2, 3, 4, 5]))
275
+ ).toBeUndefined();
276
+ expect(parseOnekeyBleColorCode(Uint8Array.from([0x41, 0, 0, 0, 0, 0]))).toBeUndefined();
277
+ expect(parseOnekeyBleColorCode(new Uint8Array())).toBeUndefined();
278
+ expect(parseOnekeyBleColorCode(null)).toBeUndefined();
279
+ expect(parseOnekeyBleColorCode(undefined)).toBeUndefined();
280
+ });
281
+ });
package/src/constants.ts CHANGED
@@ -43,6 +43,9 @@ export const isKnownTrezorWebUsbDevice = (descriptor: WebUsbIdentityDescriptor):
43
43
  * These errors indicate the device is in an invalid state and needs to be released
44
44
  */
45
45
  export const ERROR_CODES_REQUIRE_RELEASE = [
46
+ HardwareErrorCode.WebUsbDeviceAccessError,
47
+ HardwareErrorCode.TransportProtocolProbeFailed,
48
+ HardwareErrorCode.TransportProtocolMismatch,
46
49
  HardwareErrorCode.DeviceInitializeFailed,
47
50
  HardwareErrorCode.DeviceInterruptedFromOutside,
48
51
  HardwareErrorCode.DeviceInterruptedFromUser,
@@ -58,6 +61,9 @@ export const ERROR_CODES_REQUIRE_RELEASE = [
58
61
  * These errors indicate a communication failure that requires full reconnection
59
62
  */
60
63
  export const ERROR_CODES_REQUIRE_DISCONNECT = [
64
+ HardwareErrorCode.WebUsbDeviceAccessError,
65
+ HardwareErrorCode.TransportProtocolProbeFailed,
66
+ HardwareErrorCode.TransportProtocolMismatch,
61
67
  HardwareErrorCode.DeviceInitializeFailed,
62
68
  HardwareErrorCode.ResponseUnexpectTypeError,
63
69
  ] as const;
@@ -368,6 +374,24 @@ export const isPro2FamilyBleName = (value?: string | null): boolean => {
368
374
  );
369
375
  };
370
376
 
377
+ // Pro2 / Neo manufacturer-specific data has no Bluetooth SIG company ID: byte 0 is
378
+ // serial_number[10] (the color letter, 0x00 before the SN is known) and bytes 1-4
379
+ // are a nonce. Older Pro2 / Neo firmware sends 4 zero bytes and Classic sends a
380
+ // company ID plus MAC, so any other length is not a color.
381
+ const ONEKEY_BLE_COLOR_PAYLOAD_LENGTH = 5;
382
+
383
+ /**
384
+ * Reads the serial-number color letter from the raw 0xFF advertisement payload
385
+ * (the bytes after the AD type). Returns undefined when no valid letter is present.
386
+ */
387
+ export const parseOnekeyBleColorCode = (
388
+ manufacturerData: Uint8Array | null | undefined
389
+ ): string | undefined => {
390
+ if (manufacturerData?.length !== ONEKEY_BLE_COLOR_PAYLOAD_LENGTH) return undefined;
391
+ const code = manufacturerData[0];
392
+ return code >= 0x41 && code <= 0x5a ? String.fromCharCode(code) : undefined;
393
+ };
394
+
371
395
  export const isOnekeyBluetoothDevice = ({
372
396
  id,
373
397
  name,