@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.
- package/dist/HardwareError.d.ts +4 -2
- package/dist/HardwareError.d.ts.map +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/index.d.ts +28 -10
- package/dist/index.js +23 -19
- package/package.json +2 -2
- package/src/HardwareError.test.ts +15 -11
- package/src/HardwareError.ts +31 -22
- package/src/constants.test.ts +28 -0
- package/src/constants.ts +24 -0
package/dist/HardwareError.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -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
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,yBAAyB;;;CAG5B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,OAAO,yBAAyB,CAAC,CAAC;AAE7E,eAAO,MAAM,oBAAoB;;;GAOhC,CAAC;AAGF,eAAO,MAAM,0BAA0B;;;EAAqD,CAAC;AAE7F,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAIF,eAAO,MAAM,yBAAyB,eAAgB,wBAAwB,KAAG,OAQhF,CAAC;AAMF,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,yBAAyB;;;CAG5B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,OAAO,yBAAyB,CAAC,CAAC;AAE7E,eAAO,MAAM,oBAAoB;;;GAOhC,CAAC;AAGF,eAAO,MAAM,0BAA0B;;;EAAqD,CAAC;AAE7F,KAAK,wBAAwB,GAAG;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAIF,eAAO,MAAM,yBAAyB,eAAgB,wBAAwB,KAAG,OAQhF,CAAC;AAMF,eAAO,MAAM,2BAA2B,kEAY9B,CAAC;AAMX,eAAO,MAAM,8BAA8B,oCAMjC,CAAC;AAGX,oBAAY,qBAAqB;IAE/B,UAAU,uBAAuB;IACjC,iBAAiB,8BAA8B;IAC/C,aAAa,0BAA0B;IACvC,kBAAkB,+BAA+B;IACjD,cAAc,2BAA2B;IACzC,oBAAoB,iCAAiC;IAGrD,mBAAmB,gCAAgC;IACnD,oBAAoB,iCAAiC;IAGrD,aAAa,0BAA0B;IACvC,oBAAoB,iCAAiC;IAGrD,uBAAuB,oCAAoC;IAC3D,sBAAsB,mCAAmC;IAGzD,mBAAmB,gCAAgC;IACnD,mBAAmB,gCAAgC;IACnD,oBAAoB,iCAAiC;IACrD,iBAAiB,8BAA8B;IAG/C,iBAAiB,8BAA8B;IAC/C,oBAAoB,iCAAiC;IACrD,eAAe,4BAA4B;IAC3C,mBAAmB,gCAAgC;IACnD,qBAAqB,kCAAkC;IACvD,sBAAsB,mCAAmC;IACzD,qBAAqB,kCAAkC;IACvD,wBAAwB,qCAAqC;CAC9D;AAUD,oBAAY,oBAAoB;IAE9B,kBAAkB,wBAAwB;IAE1C,aAAa,oBAAoB;CAClC;AAED,eAAO,MAAM,mBAAmB,yCAAyC,CAAC;AAC1E,eAAO,MAAM,gCAAgC,yCAAyC,CAAC;AACvF,eAAO,MAAM,iCAAiC,yCAAyC,CAAC;AAIxF,eAAO,MAAM,aAAa,UAAW,MAAM,GAAG,UAAU,KAAG,OAa1D,CAAC;AAkBF,eAAO,MAAM,cAAc,SAAU,MAAM,GAAG,IAAI,OAAO,MAAM,KAAG,OA2BjE,CAAC;AAEF,eAAO,MAAM,0BAA0B,cAAe,MAAM,GAAG,IAAI,cAAc,MAAM,GAAG,IAAI,qBAG/E,CAAC;AAEhB,KAAK,kBAAkB,GAAG;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,WAAY,kBAAkB,KAAG,MAAM,GAAG,SAehF,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;CACxD,CAAC;AAIF,eAAO,MAAM,gBAAgB,UAAW,MAAM,GAAG,IAAI,WACP,CAAC;AAE/C,eAAO,MAAM,yBAAyB,SAAU,MAAM,KAAG,YAAY,MAAM,CAc1E,CAAC;AAEF,eAAO,MAAM,mBAAmB,eAClB,MAAM,GAAG,IAAI,GAAG,SAAS,WAC5B,YAAY,MAAM,CAAC,YACgB,CAAC;AAmC/C,eAAO,MAAM,6BAA6B,WAAY,MAAM,GAAG,IAAI,YAWlE,CAAC;AAEF,eAAO,MAAM,oCAAoC,UAAW,MAAM,WAejE,CAAC;AAUF,eAAO,MAAM,oCAAoC,UAAW,MAAM,WAWjE,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAAW,MAAM,GAAG,IAAI,UAAU,MAAM,GAAG,IAAI,YAO9E,CAAC;AAEF,eAAO,MAAM,6BAA6B,iBAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,YAIhE,CAAC;AAOJ,eAAO,MAAM,mBAAmB,WAAY,MAAM,GAAG,IAAI,KAAG,OAiB3D,CAAC;AAYF,eAAO,MAAM,uBAAuB,qBAChB,UAAU,GAAG,IAAI,GAAG,SAAS,KAC9C,MAAM,GAAG,SAIX,CAAC;AAEF,eAAO,MAAM,uBAAuB,2CAKjC,uBAAuB,KAAG,OAiB5B,CAAC"}
|
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
|
-
*
|
|
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,
|
|
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]: '
|
|
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.
|
|
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": "
|
|
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
|
});
|
package/src/HardwareError.ts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
'
|
|
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 {
|
package/src/constants.test.ts
CHANGED
|
@@ -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,
|