Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/connect-examples/electron-example/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "hardware-example",
"productName": "HardwareExample",
"executableName": "onekey-hardware-example",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"author": "OneKey",
"description": "End-to-end encrypted workspaces for teams",
"main": "dist/index.js",
Expand All @@ -22,7 +22,7 @@
"ts:check": "yarn tsc --noEmit"
},
"dependencies": {
"@onekeyfe/hd-transport-electron": "1.1.20",
"@onekeyfe/hd-transport-electron": "1.1.21-alpha.1",
"@stoprocent/noble": "2.3.4",
"debug": "4.3.4",
"electron-is-dev": "^3.0.1",
Expand Down
10 changes: 5 additions & 5 deletions packages/connect-examples/expo-example/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "expo-example",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"scripts": {
"start": "cross-env CONNECT_SRC=https://localhost:8087/ yarn expo start --dev-client",
"android": "yarn expo run:android",
Expand All @@ -19,10 +19,10 @@
"@noble/ed25519": "^2.1.0",
"@noble/hashes": "^1.3.3",
"@noble/secp256k1": "^1.7.1",
"@onekeyfe/hd-ble-sdk": "1.1.20",
"@onekeyfe/hd-common-connect-sdk": "1.1.20",
"@onekeyfe/hd-core": "1.1.20",
"@onekeyfe/hd-web-sdk": "1.1.20",
"@onekeyfe/hd-ble-sdk": "1.1.21-alpha.1",
"@onekeyfe/hd-common-connect-sdk": "1.1.21-alpha.1",
"@onekeyfe/hd-core": "1.1.21-alpha.1",
"@onekeyfe/hd-web-sdk": "1.1.21-alpha.1",
"@onekeyfe/react-native-ble-utils": "^0.1.3",
"@polkadot/util-crypto": "13.1.1",
"@react-native-async-storage/async-storage": "1.21.0",
Expand Down
8 changes: 4 additions & 4 deletions packages/connect-examples/expo-playground/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "onekey-hardware-playground",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"private": true,
"sideEffects": [
"app/utils/shim.js",
Expand All @@ -17,9 +17,9 @@
},
"dependencies": {
"@noble/hashes": "^1.8.0",
"@onekeyfe/hd-common-connect-sdk": "1.1.20",
"@onekeyfe/hd-core": "1.1.20",
"@onekeyfe/hd-shared": "1.1.20",
"@onekeyfe/hd-common-connect-sdk": "1.1.21-alpha.1",
"@onekeyfe/hd-core": "1.1.21-alpha.1",
"@onekeyfe/hd-shared": "1.1.21-alpha.1",
"@radix-ui/react-checkbox": "^1.3.2",
"@radix-ui/react-dialog": "^1.1.14",
"@radix-ui/react-dropdown-menu": "^2.1.15",
Expand Down

Large diffs are not rendered by default.

5,458 changes: 2,729 additions & 2,729 deletions packages/connect-examples/native-ios-example/web/web_dist/index.e70e0048.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/hd-core",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"description": "Core processes and APIs for communicating with OneKey hardware devices.",
"author": "OneKey",
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
Expand All @@ -25,8 +25,8 @@
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
},
"dependencies": {
"@onekeyfe/hd-shared": "1.1.20",
"@onekeyfe/hd-transport": "1.1.20",
"@onekeyfe/hd-shared": "1.1.21-alpha.1",
"@onekeyfe/hd-transport": "1.1.21-alpha.1",
"axios": "1.12.2",
"bignumber.js": "^9.0.2",
"bytebuffer": "^5.0.1",
Expand Down
64 changes: 51 additions & 13 deletions packages/core/src/api/FirmwareUpdateV3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
}

this.postTipMessage(FirmwareUpdateTipMessage.StartTransferData);
// 处理资源文件
// Process resource zip contents
if (resourceBinary) {
const file = await JSZip.loadAsync(resourceBinary);
const files = Object.entries(file.files);
Expand Down Expand Up @@ -358,19 +358,21 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
const bootloaderVersion = getDeviceBootloaderVersion(features).join('.');
const bleVersion = getDeviceBLEFirmwareVersion(features).join('.');
const firmwareVersion = getDeviceFirmwareVersion(features).join('.');
this.postTipMessage(FirmwareUpdateTipMessage.FirmwareUpdateCompleted);
DevicePool.resetState();
return {
bootloaderVersion,
bleVersion,
firmwareVersion,
};
// Treat update as complete once firmware version becomes non-zero
if (firmwareVersion !== '0.0.0') {
this.postTipMessage(FirmwareUpdateTipMessage.FirmwareUpdateCompleted);
DevicePool.resetState();
return {
bootloaderVersion,
bleVersion,
firmwareVersion,
};
}
// Still in update mode; continue polling (e.g., iOS may return firmwareVersion 0.0.0 during switches)
await wait(1000);
} catch (error) {
// Hardware install firmware progress message
if (error.message && error.message.includes('Update mode')) {
const updateParts = error.message.split('Update mode ');
const progressValue = updateParts[1] ?? '0';
const progress = parseInt(progressValue, 10) || 0;
const progress = this.extractUpdateModeProgress(error);
if (progress !== null) {
this.postProgressMessage(progress, 'installingFirmware');
await wait(1000);
} else {
Expand All @@ -385,12 +387,48 @@ export default class FirmwareUpdateV3 extends FirmwareUpdateBaseMethod<FirmwareU
? 3 * 60 * 1000 // 3 minutes for BLE reconnect
: 60 * 1000; // 1 minute for normal reconnect

await this.ensureWebUsbBootloaderReauthPrompt();
await this.waitForDeviceReconnect(reconnectTimeout);
}
}
}
}

/**
* Parse “Update mode XX” progress value from device errors to avoid hardcoded message.includes.
*/
private extractUpdateModeProgress(error: unknown): number | null {
const message = this.normalizeErrorMessage(error);
if (!message) {
return null;
}
const match = message.match(/Update mode\s*(\d+)/i);
if (!match) {
return null;
}
const progress = parseInt(match[1], 10);
return Number.isNaN(progress) ? null : progress;
}

private normalizeErrorMessage(error: unknown): string {
if (!error) {
return '';
}
if (typeof error === 'string') {
return error;
}
if (typeof error === 'object') {
const { message } = error as { message?: unknown };
if (typeof message === 'string') {
return message;
}
if (message !== undefined && message !== null) {
return String(message);
}
}
return '';
}

/**
* @description Reconnect device - While update with bootloader, it will reconnect device
* @param {number} timeout - The timeout for the reconnection
Expand Down
27 changes: 26 additions & 1 deletion packages/core/src/api/firmware/FirmwareUpdateBaseMethod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ const isDeviceDisconnectedError = (error: unknown) => {
export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
checkPromise: Deferred<any> | null = null;

protected hasPromptedWebUsbBootloaderReauth = false;

init(): void {}

run(): Promise<any> {
Expand Down Expand Up @@ -153,7 +155,7 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
}
} catch (e) {
Log.log(
'FirmwareUpdateBaseMethod [checkDeviceToBootloader] promptDeviceInBootloaderForWebDevice failed: ',
'FirmwareUpdateBaseMethod [checkDeviceToBootloader] _promptDeviceInBootloaderForWebDevice failed: ',
e
);
this.checkPromise?.reject(e);
Expand Down Expand Up @@ -193,6 +195,29 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
}, 30000);
}

/**
* 仅在 firmware 被抹掉、需要重新授权的 bootloader 场景下才提示 WebUSB
* (比如 BTC-only 与通用固件互转后算作新设备)。
*/
protected async ensureWebUsbBootloaderReauthPrompt() {
if (
this.hasPromptedWebUsbBootloaderReauth ||
!DataManager.isBrowserWebUsb(DataManager.getSettings('env')) ||
this.device.listenerCount(DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE) === 0
) {
return;
}

this.hasPromptedWebUsbBootloaderReauth = true;
this.postTipMessage(FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);

try {
await this._promptDeviceInBootloaderForWebDevice();
} catch (error) {
Log.log('WebUSB 设备重新授权失败: ', error);
}
}

private async _checkDeviceInBootloaderMode(
connectId: string | undefined,
intervalTimer?: ReturnType<typeof setInterval>,
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/data-manager/DataManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ const Log = getLogger(LoggerNames.Core);
export const FIRMWARE_FIELDS = [
'firmware',
'firmware-v2',
'firmware-v7',
'firmware-btc-v7',
'firmware-v8',
'firmware-btc-v8',
] as const;

export type IFirmwareField = (typeof FIRMWARE_FIELDS)[number];
Expand All @@ -45,8 +45,8 @@ export type MessageVersion = 'latest' | 'v1';
const FIRMWARE_FIELD_TYPE_MAP: Readonly<Record<IFirmwareField, EFirmwareType>> = {
firmware: EFirmwareType.Universal,
'firmware-v2': EFirmwareType.Universal,
'firmware-v7': EFirmwareType.Universal,
'firmware-btc-v7': EFirmwareType.BitcoinOnly,
'firmware-v8': EFirmwareType.Universal,
'firmware-btc-v8': EFirmwareType.BitcoinOnly,
} as const;

function getFirmwareTypeFromField(firmwareField: IFirmwareField): EFirmwareType {
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/types/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,9 @@ type IKnownDevice = Exclude<IDeviceType, 'unknown'>;
* // {
* // firmware: IFirmwareReleaseInfo[];
* // 'firmware-v2'?: IFirmwareReleaseInfo[];
* // 'firmware-v7'?: IFirmwareReleaseInfo[];
* // 'firmware-v8'?: IFirmwareReleaseInfo[];
* // 'firmware-v8'?: IFirmwareReleaseInfo[]; // New
* // 'firmware-btc-v7'?: IFirmwareReleaseInfo[];
* // 'firmware-btc-v8'?: IFirmwareReleaseInfo[];
* // 'firmware-btc-v8'?: IFirmwareReleaseInfo[]; // New
* // ble: IBLEFirmwareReleaseInfo[];
* // }
Expand All @@ -112,9 +112,9 @@ export type DeviceTypeMap = {
/** Firmware v2 (Touch/Pro specific) */
'firmware-v2'?: IFirmwareReleaseInfo[];
/** Universal firmware v7 */
'firmware-v7'?: IFirmwareReleaseInfo[];
'firmware-v8'?: IFirmwareReleaseInfo[];
/** Bitcoin-only firmware v7 */
'firmware-btc-v7'?: IFirmwareReleaseInfo[];
'firmware-btc-v8'?: IFirmwareReleaseInfo[];
// Future firmware versions should be added here as optional fields:
// 'firmware-v8'?: IFirmwareReleaseInfo[];
// 'firmware-btc-v8'?: IFirmwareReleaseInfo[];
Expand Down
12 changes: 6 additions & 6 deletions packages/core/src/utils/deviceFeaturesUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -235,9 +235,9 @@ export const supportModifyHomescreen = (features?: Features): SupportFeatureType

export const getLatestFirmwareField = (firmwareType?: EFirmwareType): IFirmwareField => {
if (firmwareType === 'bitcoinonly') {
return `firmware-btc-v7`;
return `firmware-btc-v8`;
}
return `firmware-v7`;
return `firmware-v8`;
};

/**
Expand Down Expand Up @@ -300,25 +300,25 @@ export const getFirmwareUpdateFieldArray = (
deviceType === 'mini' ||
deviceType === 'classicpure'
) {
return ['firmware-v7'];
return ['firmware-v8'];
}

if (deviceType === 'touch') {
const currentVersion = getDeviceFirmwareVersion(features).join('.');
if (semver.gt(currentVersion, '4.0.0')) {
return ['firmware-v7', 'firmware'];
return ['firmware-v8', 'firmware'];
}
if (semver.gte(currentVersion, '4.0.0')) {
return ['firmware-v2', 'firmware'];
}
if (!currentVersion || semver.lt(currentVersion, '3.0.0')) {
return ['firmware-v7', 'firmware-v2', 'firmware'];
return ['firmware-v8', 'firmware-v2', 'firmware'];
}
return ['firmware'];
}

if (deviceType === 'pro') {
return ['firmware-v7'];
return ['firmware-v8'];
}

return ['firmware'];
Expand Down
8 changes: 4 additions & 4 deletions packages/hd-ble-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/hd-ble-sdk",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"author": "OneKey",
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
"license": "ISC",
Expand All @@ -20,8 +20,8 @@
"lint:fix": "eslint . --fix"
},
"dependencies": {
"@onekeyfe/hd-core": "1.1.20",
"@onekeyfe/hd-shared": "1.1.20",
"@onekeyfe/hd-transport-react-native": "1.1.20"
"@onekeyfe/hd-core": "1.1.21-alpha.1",
"@onekeyfe/hd-shared": "1.1.21-alpha.1",
"@onekeyfe/hd-transport-react-native": "1.1.21-alpha.1"
}
}
14 changes: 7 additions & 7 deletions packages/hd-common-connect-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/hd-common-connect-sdk",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"author": "OneKey",
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
"license": "ISC",
Expand All @@ -20,11 +20,11 @@
"lint:fix": "eslint . --fix"
},
"dependencies": {
"@onekeyfe/hd-core": "1.1.20",
"@onekeyfe/hd-shared": "1.1.20",
"@onekeyfe/hd-transport-emulator": "1.1.20",
"@onekeyfe/hd-transport-http": "1.1.20",
"@onekeyfe/hd-transport-lowlevel": "1.1.20",
"@onekeyfe/hd-transport-web-device": "1.1.20"
"@onekeyfe/hd-core": "1.1.21-alpha.1",
"@onekeyfe/hd-shared": "1.1.21-alpha.1",
"@onekeyfe/hd-transport-emulator": "1.1.21-alpha.1",
"@onekeyfe/hd-transport-http": "1.1.21-alpha.1",
"@onekeyfe/hd-transport-lowlevel": "1.1.21-alpha.1",
"@onekeyfe/hd-transport-web-device": "1.1.21-alpha.1"
}
}
8 changes: 4 additions & 4 deletions packages/hd-transport-electron/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/hd-transport-electron",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"author": "OneKey",
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
"license": "MIT",
Expand All @@ -25,9 +25,9 @@
"electron-log": ">=4.0.0"
},
"dependencies": {
"@onekeyfe/hd-core": "1.1.20",
"@onekeyfe/hd-shared": "1.1.20",
"@onekeyfe/hd-transport": "1.1.20",
"@onekeyfe/hd-core": "1.1.21-alpha.1",
"@onekeyfe/hd-shared": "1.1.21-alpha.1",
"@onekeyfe/hd-transport": "1.1.21-alpha.1",
"@stoprocent/noble": "2.3.4",
"p-retry": "^4.6.2"
},
Expand Down
6 changes: 3 additions & 3 deletions packages/hd-transport-emulator/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onekeyfe/hd-transport-emulator",
"version": "1.1.20",
"version": "1.1.21-alpha.1",
"description": "hardware emulator transport",
"author": "OneKey",
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
Expand All @@ -24,8 +24,8 @@
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
},
"dependencies": {
"@onekeyfe/hd-shared": "1.1.20",
"@onekeyfe/hd-transport": "1.1.20",
"@onekeyfe/hd-shared": "1.1.21-alpha.1",
"@onekeyfe/hd-transport": "1.1.21-alpha.1",
"axios": "1.12.2",
"secure-json-parse": "^4.0.0"
}
Expand Down
Loading
Loading