@onekeyfe/hd-shared 1.2.8-alpha.9 → 1.2.10-alpha.1
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 +2 -0
- 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 +18 -3
- package/dist/index.js +16 -0
- package/package.json +2 -2
- package/src/HardwareError.test.ts +15 -0
- package/src/HardwareError.ts +16 -0
- package/src/constants.test.ts +28 -0
- package/src/constants.ts +22 -0
package/dist/HardwareError.d.ts
CHANGED
|
@@ -63,6 +63,8 @@ export declare const HardwareErrorCode: {
|
|
|
63
63
|
readonly TransportCallInProgress: 601;
|
|
64
64
|
readonly TransportNotFound: 602;
|
|
65
65
|
readonly TransportInvalidProtobuf: 603;
|
|
66
|
+
readonly TransportProtocolProbeFailed: 604;
|
|
67
|
+
readonly TransportProtocolMismatch: 605;
|
|
66
68
|
readonly BleScanError: 700;
|
|
67
69
|
readonly BlePermissionError: 701;
|
|
68
70
|
readonly BleLocationError: 702;
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgdpB,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,+BA8J7B,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 [903, 106, 107, 109, 112, 805, 801, 802, 812];
|
|
22
|
-
export declare const ERROR_CODES_REQUIRE_DISCONNECT: readonly [903, 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":"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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 [903, 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 [903, 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> = {
|
|
@@ -334,6 +339,16 @@ declare const HardwareErrorCode: {
|
|
|
334
339
|
* Transport invalid protobuf
|
|
335
340
|
*/
|
|
336
341
|
readonly TransportInvalidProtobuf: 603;
|
|
342
|
+
/**
|
|
343
|
+
* No supported device protocol answered the active probe.
|
|
344
|
+
* @params: { expectedProtocol?: 'V1' | 'V2'; attempts?: number }
|
|
345
|
+
*/
|
|
346
|
+
readonly TransportProtocolProbeFailed: 604;
|
|
347
|
+
/**
|
|
348
|
+
* The actively detected device protocol differs from the required protocol.
|
|
349
|
+
* @params: { expectedProtocol: 'V1' | 'V2'; detectedProtocol?: 'V1' | 'V2' }
|
|
350
|
+
*/
|
|
351
|
+
readonly TransportProtocolMismatch: 605;
|
|
337
352
|
/**
|
|
338
353
|
* Bluetooth error code
|
|
339
354
|
*/
|
|
@@ -584,4 +599,4 @@ declare enum EDeviceType {
|
|
|
584
599
|
Neo = "neo"
|
|
585
600
|
}
|
|
586
601
|
|
|
587
|
-
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, resolveOneKeyUsbDevicePath, serializeError, wait };
|
|
602
|
+
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
|
@@ -112,6 +112,8 @@ const HardwareErrorCode = {
|
|
|
112
112
|
TransportCallInProgress: 601,
|
|
113
113
|
TransportNotFound: 602,
|
|
114
114
|
TransportInvalidProtobuf: 603,
|
|
115
|
+
TransportProtocolProbeFailed: 604,
|
|
116
|
+
TransportProtocolMismatch: 605,
|
|
115
117
|
BleScanError: 700,
|
|
116
118
|
BlePermissionError: 701,
|
|
117
119
|
BleLocationError: 702,
|
|
@@ -222,6 +224,8 @@ const HardwareErrorCodeMessage = {
|
|
|
222
224
|
[HardwareErrorCode.TransportCallInProgress]: 'Transport call in progress',
|
|
223
225
|
[HardwareErrorCode.TransportNotFound]: 'Transport not found',
|
|
224
226
|
[HardwareErrorCode.TransportInvalidProtobuf]: 'Transport invalid protobuf',
|
|
227
|
+
[HardwareErrorCode.TransportProtocolProbeFailed]: 'Failed to detect the device communication protocol. Reconnect the device and try again.',
|
|
228
|
+
[HardwareErrorCode.TransportProtocolMismatch]: 'The device communication protocol does not match the expected protocol.',
|
|
225
229
|
[HardwareErrorCode.BleScanError]: 'BLE scan error',
|
|
226
230
|
[HardwareErrorCode.BlePermissionError]: 'Bluetooth required to be turned on',
|
|
227
231
|
[HardwareErrorCode.BleLocationError]: 'Bluetooth or location permissions for the application are not available',
|
|
@@ -415,6 +419,8 @@ const isKnownTrezorWebUsbDevice = (descriptor) => {
|
|
|
415
419
|
};
|
|
416
420
|
const ERROR_CODES_REQUIRE_RELEASE = [
|
|
417
421
|
HardwareErrorCode.WebUsbDeviceAccessError,
|
|
422
|
+
HardwareErrorCode.TransportProtocolProbeFailed,
|
|
423
|
+
HardwareErrorCode.TransportProtocolMismatch,
|
|
418
424
|
HardwareErrorCode.DeviceInitializeFailed,
|
|
419
425
|
HardwareErrorCode.DeviceInterruptedFromOutside,
|
|
420
426
|
HardwareErrorCode.DeviceInterruptedFromUser,
|
|
@@ -426,6 +432,8 @@ const ERROR_CODES_REQUIRE_RELEASE = [
|
|
|
426
432
|
];
|
|
427
433
|
const ERROR_CODES_REQUIRE_DISCONNECT = [
|
|
428
434
|
HardwareErrorCode.WebUsbDeviceAccessError,
|
|
435
|
+
HardwareErrorCode.TransportProtocolProbeFailed,
|
|
436
|
+
HardwareErrorCode.TransportProtocolMismatch,
|
|
429
437
|
HardwareErrorCode.DeviceInitializeFailed,
|
|
430
438
|
HardwareErrorCode.ResponseUnexpectTypeError,
|
|
431
439
|
];
|
|
@@ -644,6 +652,13 @@ const isPro2FamilyBleName = (value) => {
|
|
|
644
652
|
NEO_COMPACT_NAME_PATTERN.test(compact) ||
|
|
645
653
|
isPro2FindMyAdvertisementName(value));
|
|
646
654
|
};
|
|
655
|
+
const ONEKEY_BLE_COLOR_PAYLOAD_LENGTH = 5;
|
|
656
|
+
const parseOnekeyBleColorCode = (manufacturerData) => {
|
|
657
|
+
if ((manufacturerData === null || manufacturerData === void 0 ? void 0 : manufacturerData.length) !== ONEKEY_BLE_COLOR_PAYLOAD_LENGTH)
|
|
658
|
+
return undefined;
|
|
659
|
+
const code = manufacturerData[0];
|
|
660
|
+
return code >= 0x41 && code <= 0x5a ? String.fromCharCode(code) : undefined;
|
|
661
|
+
};
|
|
647
662
|
const isOnekeyBluetoothDevice = ({ id, name, localName, serviceUuids, }) => {
|
|
648
663
|
const advertisedServiceUuids = serviceUuids !== null && serviceUuids !== void 0 ? serviceUuids : [];
|
|
649
664
|
if (hasOnekeyCommunicationService(advertisedServiceUuids)) {
|
|
@@ -768,6 +783,7 @@ exports.isSameOnekeyBleName = isSameOnekeyBleName;
|
|
|
768
783
|
exports.matchesKnownBleUuid = matchesKnownBleUuid;
|
|
769
784
|
exports.normalizeBleUuid = normalizeBleUuid;
|
|
770
785
|
exports.normalizePro2FindMyAdvertisementName = normalizePro2FindMyAdvertisementName;
|
|
786
|
+
exports.parseOnekeyBleColorCode = parseOnekeyBleColorCode;
|
|
771
787
|
exports.resolveOneKeyUsbDevicePath = resolveOneKeyUsbDevicePath;
|
|
772
788
|
exports.serializeError = serializeError;
|
|
773
789
|
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.10-alpha.1",
|
|
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": "df785eba29f144fac2cfdcbd808426e0a2c259b2"
|
|
30
30
|
}
|
|
@@ -4,8 +4,23 @@ import {
|
|
|
4
4
|
TypedError,
|
|
5
5
|
serializeError,
|
|
6
6
|
} from './HardwareError';
|
|
7
|
+
import { ERROR_CODES_REQUIRE_DISCONNECT, ERROR_CODES_REQUIRE_RELEASE } from './constants';
|
|
7
8
|
|
|
8
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
|
+
|
|
9
24
|
test('preserves published Protocol V2 values while leaving code 829 unused', () => {
|
|
10
25
|
expect(HardwareErrorCode).not.toHaveProperty('KaspaPrevTxIdMismatch');
|
|
11
26
|
expect(HardwareErrorCode.DeviceLocked).toBe(830);
|
package/src/HardwareError.ts
CHANGED
|
@@ -319,6 +319,18 @@ export const HardwareErrorCode = {
|
|
|
319
319
|
*/
|
|
320
320
|
TransportInvalidProtobuf: 603,
|
|
321
321
|
|
|
322
|
+
/**
|
|
323
|
+
* No supported device protocol answered the active probe.
|
|
324
|
+
* @params: { expectedProtocol?: 'V1' | 'V2'; attempts?: number }
|
|
325
|
+
*/
|
|
326
|
+
TransportProtocolProbeFailed: 604,
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* The actively detected device protocol differs from the required protocol.
|
|
330
|
+
* @params: { expectedProtocol: 'V1' | 'V2'; detectedProtocol?: 'V1' | 'V2' }
|
|
331
|
+
*/
|
|
332
|
+
TransportProtocolMismatch: 605,
|
|
333
|
+
|
|
322
334
|
/**
|
|
323
335
|
* Bluetooth error code
|
|
324
336
|
*/
|
|
@@ -605,6 +617,10 @@ export const HardwareErrorCodeMessage: HardwareErrorCodeMessageMapping = {
|
|
|
605
617
|
[HardwareErrorCode.TransportCallInProgress]: 'Transport call in progress',
|
|
606
618
|
[HardwareErrorCode.TransportNotFound]: 'Transport not found',
|
|
607
619
|
[HardwareErrorCode.TransportInvalidProtobuf]: 'Transport invalid protobuf',
|
|
620
|
+
[HardwareErrorCode.TransportProtocolProbeFailed]:
|
|
621
|
+
'Failed to detect the device communication protocol. Reconnect the device and try again.',
|
|
622
|
+
[HardwareErrorCode.TransportProtocolMismatch]:
|
|
623
|
+
'The device communication protocol does not match the expected protocol.',
|
|
608
624
|
|
|
609
625
|
/**
|
|
610
626
|
* Bluetooth Error
|
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
|
@@ -44,6 +44,8 @@ export const isKnownTrezorWebUsbDevice = (descriptor: WebUsbIdentityDescriptor):
|
|
|
44
44
|
*/
|
|
45
45
|
export const ERROR_CODES_REQUIRE_RELEASE = [
|
|
46
46
|
HardwareErrorCode.WebUsbDeviceAccessError,
|
|
47
|
+
HardwareErrorCode.TransportProtocolProbeFailed,
|
|
48
|
+
HardwareErrorCode.TransportProtocolMismatch,
|
|
47
49
|
HardwareErrorCode.DeviceInitializeFailed,
|
|
48
50
|
HardwareErrorCode.DeviceInterruptedFromOutside,
|
|
49
51
|
HardwareErrorCode.DeviceInterruptedFromUser,
|
|
@@ -60,6 +62,8 @@ export const ERROR_CODES_REQUIRE_RELEASE = [
|
|
|
60
62
|
*/
|
|
61
63
|
export const ERROR_CODES_REQUIRE_DISCONNECT = [
|
|
62
64
|
HardwareErrorCode.WebUsbDeviceAccessError,
|
|
65
|
+
HardwareErrorCode.TransportProtocolProbeFailed,
|
|
66
|
+
HardwareErrorCode.TransportProtocolMismatch,
|
|
63
67
|
HardwareErrorCode.DeviceInitializeFailed,
|
|
64
68
|
HardwareErrorCode.ResponseUnexpectTypeError,
|
|
65
69
|
] as const;
|
|
@@ -370,6 +374,24 @@ export const isPro2FamilyBleName = (value?: string | null): boolean => {
|
|
|
370
374
|
);
|
|
371
375
|
};
|
|
372
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
|
+
|
|
373
395
|
export const isOnekeyBluetoothDevice = ({
|
|
374
396
|
id,
|
|
375
397
|
name,
|