@onekeyfe/hd-transport-electron 1.2.2-alpha.11 → 1.2.2-alpha.12
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/{index-00297050.js → index-eea100c1.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{noble-ble-handler-95c5cf0d.js → noble-ble-handler-e4eaea92.js} +17 -3
- package/dist/noble-ble-handler.d.ts +1 -0
- package/dist/noble-ble-handler.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/__tests__/noble-ble-handler.test.ts +19 -1
- package/src/noble-ble-handler.ts +18 -7
|
@@ -32,7 +32,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
32
32
|
|
|
33
33
|
function initNobleBleSupport(webContents) {
|
|
34
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
const { setupNobleBleHandlers } = yield Promise.resolve().then(function () { return require('./noble-ble-handler-
|
|
35
|
+
const { setupNobleBleHandlers } = yield Promise.resolve().then(function () { return require('./noble-ble-handler-e4eaea92.js'); });
|
|
36
36
|
setupNobleBleHandlers(webContents);
|
|
37
37
|
});
|
|
38
38
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-eea100c1.js');
|
|
4
4
|
var hdShared = require('@onekeyfe/hd-shared');
|
|
5
5
|
var pRetry = require('p-retry');
|
|
6
6
|
|
|
@@ -100,6 +100,19 @@ const NOBLE_BLE_CONNECTION_TIMEOUT_MS = 10000;
|
|
|
100
100
|
|
|
101
101
|
let noble = null;
|
|
102
102
|
let logger = null;
|
|
103
|
+
function createNobleBleConnectionError(error, messagePrefix = '') {
|
|
104
|
+
const errorMessage = error.message;
|
|
105
|
+
const normalizedErrorMessage = errorMessage.toLowerCase();
|
|
106
|
+
let errorCode = hdShared.HardwareErrorCode.BleConnectedError;
|
|
107
|
+
if (hdShared.isBleStaleBondErrorText(errorMessage)) {
|
|
108
|
+
errorCode =
|
|
109
|
+
normalizedErrorMessage.includes('peer removed pairing information') ||
|
|
110
|
+
normalizedErrorMessage.includes('cberrordomain:14')
|
|
111
|
+
? hdShared.HardwareErrorCode.BlePeerRemovedPairingInformation
|
|
112
|
+
: hdShared.HardwareErrorCode.BleDeviceBondError;
|
|
113
|
+
}
|
|
114
|
+
return hdShared.ERRORS.TypedError(errorCode, `${messagePrefix}${errorMessage}`);
|
|
115
|
+
}
|
|
103
116
|
const bluetoothState = {
|
|
104
117
|
available: false,
|
|
105
118
|
unsupported: false,
|
|
@@ -949,7 +962,7 @@ function freshScanAndDiscover(deviceId, webContents) {
|
|
|
949
962
|
yield new Promise((resolve, reject) => {
|
|
950
963
|
freshPeripheral.connect((error) => {
|
|
951
964
|
if (error) {
|
|
952
|
-
reject(
|
|
965
|
+
reject(createNobleBleConnectionError(error, 'Fresh peripheral connection failed: '));
|
|
953
966
|
}
|
|
954
967
|
else {
|
|
955
968
|
connectedDevices.set(deviceId, freshPeripheral);
|
|
@@ -1197,7 +1210,7 @@ function connectDevice(deviceId, webContents) {
|
|
|
1197
1210
|
}
|
|
1198
1211
|
if (error) {
|
|
1199
1212
|
logger === null || logger === void 0 ? void 0 : logger.error('[NobleBLE] Connection failed:', error);
|
|
1200
|
-
reject(
|
|
1213
|
+
reject(createNobleBleConnectionError(error));
|
|
1201
1214
|
return;
|
|
1202
1215
|
}
|
|
1203
1216
|
logger === null || logger === void 0 ? void 0 : logger.info('[NobleBLE] Connected to device:', deviceId);
|
|
@@ -1469,5 +1482,6 @@ function setupNobleBleHandlers(webContents) {
|
|
|
1469
1482
|
}
|
|
1470
1483
|
}
|
|
1471
1484
|
|
|
1485
|
+
exports.createNobleBleConnectionError = createNobleBleConnectionError;
|
|
1472
1486
|
exports.resolveNobleBleWritePacingDelay = resolveNobleBleWritePacingDelay;
|
|
1473
1487
|
exports.setupNobleBleHandlers = setupNobleBleHandlers;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { WebContents } from 'electron';
|
|
2
2
|
import type { NobleBleWriteOptions } from './types/desktop-api';
|
|
3
|
+
export declare function createNobleBleConnectionError(error: Error, messagePrefix?: string): import("@onekeyfe/hd-shared").HardwareError;
|
|
3
4
|
export declare function resolveNobleBleWritePacingDelay(options?: NobleBleWriteOptions): number;
|
|
4
5
|
export declare function setupNobleBleHandlers(webContents: WebContents): void;
|
|
5
6
|
//# sourceMappingURL=noble-ble-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noble-ble-handler.d.ts","sourceRoot":"","sources":["../src/noble-ble-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"noble-ble-handler.d.ts","sourceRoot":"","sources":["../src/noble-ble-handler.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAA+B,WAAW,EAAE,MAAM,UAAU,CAAC;AAEzE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAOhE,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,SAAK,+CAa7E;AA+ED,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE,oBAAoB,UAI7E;AAovDD,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAkMpE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-transport-electron",
|
|
3
|
-
"version": "1.2.2-alpha.
|
|
3
|
+
"version": "1.2.2-alpha.12",
|
|
4
4
|
"author": "OneKey",
|
|
5
5
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"electron-log": ">=4.0.0"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@onekeyfe/hd-core": "1.2.2-alpha.
|
|
29
|
-
"@onekeyfe/hd-shared": "1.2.2-alpha.
|
|
30
|
-
"@onekeyfe/hd-transport": "1.2.2-alpha.
|
|
28
|
+
"@onekeyfe/hd-core": "1.2.2-alpha.12",
|
|
29
|
+
"@onekeyfe/hd-shared": "1.2.2-alpha.12",
|
|
30
|
+
"@onekeyfe/hd-transport": "1.2.2-alpha.12",
|
|
31
31
|
"@stoprocent/noble": "2.3.16",
|
|
32
32
|
"p-retry": "^4.6.2"
|
|
33
33
|
},
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"electron": "^25.0.0",
|
|
37
37
|
"typescript": "^5.3.3"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "9b5a45bc55819d22ed752899b4c40aad70de4527"
|
|
40
40
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
|
-
import { EOneKeyBleMessageKeys } from '@onekeyfe/hd-shared';
|
|
2
|
+
import { EOneKeyBleMessageKeys, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
3
3
|
|
|
4
4
|
import {
|
|
5
5
|
NOBLE_BLE_CONNECTION_TIMEOUT_MS,
|
|
@@ -31,6 +31,24 @@ describe('Electron Noble BLE device discovery', () => {
|
|
|
31
31
|
expect(NOBLE_BLE_CONNECTION_TIMEOUT_MS).toBe(10_000);
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
+
test('maps macOS stale pairing failures without reclassifying generic connection errors', async () => {
|
|
35
|
+
const { createNobleBleConnectionError } = await import('../noble-ble-handler');
|
|
36
|
+
|
|
37
|
+
expect(
|
|
38
|
+
createNobleBleConnectionError(
|
|
39
|
+
new Error('CBErrorDomain:14 Peer removed pairing information on the device side')
|
|
40
|
+
)
|
|
41
|
+
).toMatchObject({
|
|
42
|
+
errorCode: HardwareErrorCode.BlePeerRemovedPairingInformation,
|
|
43
|
+
});
|
|
44
|
+
expect(createNobleBleConnectionError(new Error('Encryption is insufficient'))).toMatchObject({
|
|
45
|
+
errorCode: HardwareErrorCode.BleDeviceBondError,
|
|
46
|
+
});
|
|
47
|
+
expect(createNobleBleConnectionError(new Error('connection failed'))).toMatchObject({
|
|
48
|
+
errorCode: HardwareErrorCode.BleConnectedError,
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
34
52
|
test('keeps safe pacing by default and allows an explicit high-throughput bypass', async () => {
|
|
35
53
|
const { resolveNobleBleWritePacingDelay } = await import('../noble-ble-handler');
|
|
36
54
|
|
package/src/noble-ble-handler.ts
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
ONEKEY_WRITE_CHARACTERISTIC_UUID,
|
|
16
16
|
createKnownBleUuidAliases,
|
|
17
17
|
hasOnekeyCommunicationService,
|
|
18
|
+
isBleStaleBondErrorText,
|
|
18
19
|
isOnekeyBluetoothDevice,
|
|
19
20
|
isPro2FamilyBleName,
|
|
20
21
|
matchesKnownBleUuid,
|
|
@@ -39,6 +40,21 @@ import type { CharacteristicPair, DeviceInfo, Logger, NobleModule } from './type
|
|
|
39
40
|
let noble: NobleModule | null = null;
|
|
40
41
|
let logger: Logger | null = null;
|
|
41
42
|
|
|
43
|
+
export function createNobleBleConnectionError(error: Error, messagePrefix = '') {
|
|
44
|
+
const errorMessage = error.message;
|
|
45
|
+
const normalizedErrorMessage = errorMessage.toLowerCase();
|
|
46
|
+
let errorCode = HardwareErrorCode.BleConnectedError;
|
|
47
|
+
if (isBleStaleBondErrorText(errorMessage)) {
|
|
48
|
+
errorCode =
|
|
49
|
+
normalizedErrorMessage.includes('peer removed pairing information') ||
|
|
50
|
+
normalizedErrorMessage.includes('cberrordomain:14')
|
|
51
|
+
? HardwareErrorCode.BlePeerRemovedPairingInformation
|
|
52
|
+
: HardwareErrorCode.BleDeviceBondError;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return ERRORS.TypedError(errorCode, `${messagePrefix}${errorMessage}`);
|
|
56
|
+
}
|
|
57
|
+
|
|
42
58
|
// Bluetooth state management
|
|
43
59
|
const bluetoothState: {
|
|
44
60
|
available: boolean;
|
|
@@ -1296,12 +1312,7 @@ async function freshScanAndDiscover(
|
|
|
1296
1312
|
await new Promise<void>((resolve, reject) => {
|
|
1297
1313
|
freshPeripheral.connect((error: Error | undefined) => {
|
|
1298
1314
|
if (error) {
|
|
1299
|
-
reject(
|
|
1300
|
-
ERRORS.TypedError(
|
|
1301
|
-
HardwareErrorCode.BleConnectedError,
|
|
1302
|
-
`Fresh peripheral connection failed: ${error.message}`
|
|
1303
|
-
)
|
|
1304
|
-
);
|
|
1315
|
+
reject(createNobleBleConnectionError(error, 'Fresh peripheral connection failed: '));
|
|
1305
1316
|
} else {
|
|
1306
1317
|
connectedDevices.set(deviceId, freshPeripheral);
|
|
1307
1318
|
resolve();
|
|
@@ -1692,7 +1703,7 @@ async function connectDevice(deviceId: string, webContents: WebContents): Promis
|
|
|
1692
1703
|
|
|
1693
1704
|
if (error) {
|
|
1694
1705
|
logger?.error('[NobleBLE] Connection failed:', error);
|
|
1695
|
-
reject(
|
|
1706
|
+
reject(createNobleBleConnectionError(error));
|
|
1696
1707
|
return;
|
|
1697
1708
|
}
|
|
1698
1709
|
|