@onekeyfe/hd-core 1.2.0-alpha.66 → 1.2.0-alpha.67
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/__tests__/AllNetworkGetAddressBase.tracing.test.ts +0 -313
- package/__tests__/DeviceCommands.test.ts +13 -59
- package/__tests__/DeviceEventRegistration.test.ts +0 -6
- package/__tests__/check-all-firmware-release-protocol-v2.test.ts +3 -198
- package/__tests__/connectSettings.test.ts +47 -5
- package/__tests__/device-initialize-timeout.test.ts +56 -0
- package/__tests__/device-lifecycle-events.test.ts +3 -105
- package/__tests__/device-pool-state.test.ts +0 -22
- package/__tests__/device-settings.test.ts +18 -39
- package/__tests__/device-state-contract.test.ts +0 -1
- package/__tests__/device-state-mapper.test.ts +1 -13
- package/__tests__/device-utils.test.ts +1 -48
- package/__tests__/deviceSettings.test.ts +1 -11
- package/__tests__/firmware-update/check-all-firmware-release.test.ts +175 -0
- package/__tests__/firmware-update/device-update-bootloader.test.ts +87 -0
- package/__tests__/firmware-update/firmware-artifact-source.test.ts +119 -0
- package/__tests__/firmware-update/firmware-host-binding.test.ts +70 -0
- package/__tests__/firmware-update/firmware-preparation-error.test.ts +27 -0
- package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +200 -0
- package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
- package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +394 -0
- package/__tests__/firmware-update/firmware-update-plan.test.ts +593 -0
- package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +231 -0
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +59 -31
- package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +58 -0
- package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
- package/__tests__/get-device-state.test.ts +12 -132
- package/__tests__/homescreen.test.ts +1 -41
- package/__tests__/kaspa-use-tweak-pro2.test.ts +2 -2
- package/__tests__/kaspaSignTransaction.test.ts +26 -3
- package/__tests__/logBlockEvent.test.ts +1 -1
- package/__tests__/method-protocol-support.test.ts +0 -19
- package/__tests__/open-wallet-session.test.ts +37 -568
- package/__tests__/protocol-v2-unlock-policy.test.ts +37 -300
- package/__tests__/protocol-v2.test.ts +1153 -1458
- package/__tests__/protocolV2FileWrite.test.ts +0 -152
- package/__tests__/protocolV2UiInteraction.test.ts +0 -63
- package/__tests__/public-pro2-api-boundary.test.ts +0 -1
- package/__tests__/search-devices.test.ts +3 -12
- package/__tests__/tron-sign-message-init.test.ts +2 -2
- package/dist/api/BaseMethod.d.ts +1 -3
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts +1 -2
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +10 -0
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts +7 -3
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +27 -13
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/GetPassphraseState.d.ts.map +1 -1
- package/dist/api/OpenWalletSession.d.ts.map +1 -1
- package/dist/api/SearchDevices.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/device/DeviceSettings.d.ts.map +1 -1
- package/dist/api/device/DeviceUnlock.d.ts +2 -2
- package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareArtifactSource.d.ts +25 -0
- package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
- package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
- package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +11 -4
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts +25 -0
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +32 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/api/firmware/getBinary.d.ts +7 -0
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/progressThrottle.d.ts +3 -0
- package/dist/api/firmware/progressThrottle.d.ts.map +1 -0
- package/dist/api/firmware/updateBootloader.d.ts +2 -0
- package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/uploadFirmware.d.ts +9 -1
- package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
- package/dist/api/helpers/protocolV2FileWrite.d.ts +0 -9
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/index.d.ts +0 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaGetAddress.d.ts +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts +1 -1
- package/dist/api/polkadot/networks.d.ts +1 -1
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
- package/dist/api/solana/SolSignMessage.d.ts +1 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts +1 -1
- package/dist/api/solana/SolSignTransaction.d.ts +2 -2
- package/dist/api/stellar/StellarSignTransaction.d.ts +1 -1
- package/dist/api/sui/SuiGetAddress.d.ts +1 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts +1 -1
- package/dist/api/sui/SuiSignMessage.d.ts +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts +1 -1
- package/dist/api/ton/TonGetAddress.d.ts +1 -1
- package/dist/api/ton/TonSignMessage.d.ts +1 -1
- package/dist/api/ton/TonSignProof.d.ts +1 -1
- package/dist/api/tron/TronSignMessage.d.ts +2 -2
- package/dist/api/tron/TronSignTransaction.d.ts +1 -1
- package/dist/core/deviceEventRegistration.d.ts +0 -2
- package/dist/core/deviceEventRegistration.d.ts.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/data-manager/DataManager.d.ts +4 -9
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/data-manager/TransportManager.d.ts.map +1 -1
- package/dist/data-manager/connectSettings.d.ts.map +1 -1
- package/dist/device/Device.d.ts +6 -29
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +4 -4
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DeviceConnector.d.ts +1 -2
- package/dist/device/DeviceConnector.d.ts.map +1 -1
- package/dist/device/DevicePool.d.ts.map +1 -1
- package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -1
- package/dist/events/device.d.ts +0 -4
- package/dist/events/device.d.ts.map +1 -1
- package/dist/events/logBlockEvent.d.ts.map +1 -1
- package/dist/events/ui-promise.d.ts +2 -4
- package/dist/events/ui-promise.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +2 -31
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/events/ui-response.d.ts +2 -10
- package/dist/events/ui-response.d.ts.map +1 -1
- package/dist/index.d.ts +247 -243
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3773 -3054
- package/dist/inject.d.ts +1 -6
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/features.d.ts +4 -0
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/lockedError.d.ts +2 -0
- package/dist/protocols/protocol-v2/lockedError.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts +4 -7
- package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts +3 -1
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/unlockRetry.d.ts +10 -0
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts +1 -6
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
- package/dist/topLevelInject.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +5 -3
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceUnlock.d.ts +1 -5
- package/dist/types/api/deviceUnlock.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +4 -2
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +70 -4
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
- package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/types/api/index.d.ts +10 -7
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/protocolV2.d.ts +0 -3
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/device.d.ts +2 -2
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/params.d.ts +0 -1
- package/dist/types/params.d.ts.map +1 -1
- package/dist/types/settings.d.ts +21 -38
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesCompat.d.ts +1 -0
- package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesUtils.d.ts +0 -4
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
- package/dist/utils/deviceSettings.d.ts.map +1 -1
- package/dist/utils/homescreen.d.ts +0 -4
- package/dist/utils/homescreen.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/dist/utils/pro2Wallpaper.d.ts +0 -10
- package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +10 -8
- package/src/api/CheckAllFirmwareRelease.ts +60 -59
- package/src/api/FirmwareUpdate.ts +15 -7
- package/src/api/FirmwareUpdateV2.ts +298 -126
- package/src/api/FirmwareUpdateV3.ts +265 -63
- package/src/api/FirmwareUpdateV4.ts +1017 -602
- package/src/api/GetPassphraseState.ts +1 -7
- package/src/api/OpenWalletSession.ts +17 -71
- package/src/api/SearchDevices.ts +1 -3
- package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +11 -36
- package/src/api/device/DeviceSettings.ts +4 -5
- package/src/api/device/DeviceUnlock.ts +3 -8
- package/src/api/device/DeviceUpdateBootloader.ts +125 -6
- package/src/api/firmware/FirmwareArtifactSource.ts +278 -0
- package/src/api/firmware/FirmwareHostBinding.ts +100 -0
- package/src/api/firmware/FirmwarePreparationError.ts +12 -0
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +83 -27
- package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
- package/src/api/firmware/FirmwareUpdatePlan.ts +772 -0
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +449 -0
- package/src/api/firmware/progressThrottle.ts +44 -0
- package/src/api/firmware/updateBootloader.ts +19 -4
- package/src/api/firmware/uploadFirmware.ts +144 -39
- package/src/api/helpers/protocolV2FileWrite.ts +63 -202
- package/src/api/index.ts +0 -2
- package/src/api/kaspa/KaspaGetAddress.ts +1 -1
- package/src/api/kaspa/KaspaSignTransaction.ts +13 -2
- package/src/api/polkadot/networks.ts +3 -3
- package/src/api/protocol-v2/ProtocolInfoRequest.ts +1 -3
- package/src/api/protocol-v2/helpers.ts +1 -1
- package/src/api/solana/SolSignMessage.ts +1 -1
- package/src/api/solana/SolSignOffchainMessage.ts +1 -1
- package/src/api/solana/SolSignTransaction.ts +2 -2
- package/src/api/sui/SuiGetAddress.ts +1 -1
- package/src/api/sui/SuiGetPublicKey.ts +1 -1
- package/src/api/sui/SuiSignMessage.ts +1 -1
- package/src/api/sui/SuiSignTransaction.ts +1 -1
- package/src/api/ton/TonGetAddress.ts +1 -1
- package/src/api/ton/TonSignMessage.ts +1 -1
- package/src/api/ton/TonSignProof.ts +1 -1
- package/src/api/tron/TronSignMessage.ts +2 -2
- package/src/api/tron/TronSignTransaction.ts +1 -1
- package/src/core/deviceEventRegistration.ts +0 -4
- package/src/core/index.ts +111 -213
- package/src/data/messages/messages-protocol-v2.json +0 -25
- package/src/data-manager/DataManager.ts +41 -113
- package/src/data-manager/TransportManager.ts +0 -6
- package/src/data-manager/connectSettings.ts +11 -0
- package/src/device/Device.ts +49 -274
- package/src/device/DeviceCommands.ts +4 -31
- package/src/device/DeviceConnector.ts +13 -33
- package/src/device/DevicePool.ts +7 -21
- package/src/deviceProfile/buildDeviceFeatures.ts +2 -2
- package/src/deviceProfile/protocolV2DeviceIdentity.ts +0 -3
- package/src/events/device.ts +0 -4
- package/src/events/logBlockEvent.ts +0 -1
- package/src/events/ui-promise.ts +2 -4
- package/src/events/ui-request.ts +2 -36
- package/src/events/ui-response.ts +2 -12
- package/src/index.ts +5 -0
- package/src/inject.ts +24 -60
- package/src/lowLevelInject.ts +8 -7
- package/src/protocols/protocol-v2/features.ts +7 -10
- package/src/protocols/protocol-v2/firmware.ts +0 -2
- package/src/protocols/protocol-v2/lockedError.ts +10 -0
- package/src/protocols/protocol-v2/uiInteraction.ts +6 -46
- package/src/protocols/protocol-v2/unlockPolicy.ts +105 -1
- package/src/protocols/protocol-v2/unlockRetry.ts +109 -0
- package/src/protocols/protocol-v2/walletSession.ts +36 -214
- package/src/topLevelInject.ts +8 -7
- package/src/types/api/checkAllFirmwareRelease.ts +5 -3
- package/src/types/api/deviceUnlock.ts +1 -12
- package/src/types/api/deviceUpdateBootloader.ts +6 -0
- package/src/types/api/export.ts +18 -1
- package/src/types/api/firmwareUpdate.ts +78 -6
- package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
- package/src/types/api/firmwareUpdatePlan.ts +38 -0
- package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
- package/src/types/api/index.ts +14 -13
- package/src/types/api/protocolV2.ts +0 -13
- package/src/types/device.ts +3 -15
- package/src/types/params.ts +1 -7
- package/src/types/settings.ts +22 -60
- package/src/utils/deviceFeaturesCompat.ts +6 -5
- package/src/utils/deviceFeaturesUtils.ts +3 -14
- package/src/utils/deviceInfoUtils.ts +0 -2
- package/src/utils/deviceSettings.ts +0 -3
- package/src/utils/homescreen.ts +6 -32
- package/src/utils/index.ts +1 -6
- package/src/utils/pro2Wallpaper.ts +8 -35
- package/__tests__/core-initialization.test.ts +0 -23
- package/__tests__/device-connector-protocol.test.ts +0 -81
- package/__tests__/deviceUploadNft.test.ts +0 -316
- package/__tests__/pro2Nft.test.ts +0 -108
- package/__tests__/protocol-binding.test.ts +0 -89
- package/__tests__/protocol-v2-resources.test.ts +0 -340
- package/__tests__/protocol-v2-ui-lifecycle.test.ts +0 -91
- package/__tests__/uiProgressThrottle.test.ts +0 -74
- package/__tests__/uiPromiseRegistry.test.ts +0 -115
- package/dist/api/DetectDeviceConnectProtocol.d.ts +0 -7
- package/dist/api/DetectDeviceConnectProtocol.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts +0 -31
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +0 -1
- package/dist/core/uiPromiseRegistry.d.ts +0 -6
- package/dist/core/uiPromiseRegistry.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/resources.d.ts +0 -30
- package/dist/protocols/protocol-v2/resources.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +0 -22
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +0 -1
- package/dist/types/api/detectDeviceConnectProtocol.d.ts +0 -4
- package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +0 -1
- package/dist/utils/pro2Nft.d.ts +0 -31
- package/dist/utils/pro2Nft.d.ts.map +0 -1
- package/dist/utils/uiProgressThrottle.d.ts +0 -3
- package/dist/utils/uiProgressThrottle.d.ts.map +0 -1
- package/src/api/DetectDeviceConnectProtocol.ts +0 -18
- package/src/api/protocol-v2/DeviceUploadNft.ts +0 -197
- package/src/core/uiPromiseRegistry.ts +0 -63
- package/src/protocols/protocol-v2/resources.ts +0 -390
- package/src/protocols/protocol-v2/unlockPolicyRunner.ts +0 -131
- package/src/types/api/detectDeviceConnectProtocol.ts +0 -6
- package/src/utils/pro2Nft.ts +0 -142
- package/src/utils/uiProgressThrottle.ts +0 -63
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EFirmwareType, ERRORS, HardwareError, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
2
|
import semver from 'semver';
|
|
3
3
|
|
|
4
|
+
import { BaseMethod } from './BaseMethod';
|
|
4
5
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
5
6
|
import { DataManager } from '../data-manager';
|
|
6
7
|
import {
|
|
@@ -8,13 +9,18 @@ import {
|
|
|
8
9
|
getBootloaderReleaseInfo,
|
|
9
10
|
getFirmwareReleaseInfo,
|
|
10
11
|
} from './firmware/releaseHelper';
|
|
12
|
+
import {
|
|
13
|
+
buildFirmwareUpdatePlan,
|
|
14
|
+
validateFirmwareUpdatePlanForceTargets,
|
|
15
|
+
} from './firmware/FirmwareUpdatePlan';
|
|
11
16
|
import { getBridgeReleaseInfo } from '../utils/bridgeUpdate';
|
|
12
|
-
import { getDeviceFirmwareVersion, getDeviceType, getFirmwareType } from '../utils';
|
|
13
|
-
import { BaseMethod } from './BaseMethod';
|
|
14
17
|
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
LoggerNames,
|
|
19
|
+
getDeviceFirmwareVersion,
|
|
20
|
+
getDeviceType,
|
|
21
|
+
getFirmwareType,
|
|
22
|
+
getLogger,
|
|
23
|
+
} from '../utils';
|
|
18
24
|
|
|
19
25
|
import type {
|
|
20
26
|
AllFirmwareRelease,
|
|
@@ -30,6 +36,7 @@ import type {
|
|
|
30
36
|
IProtocolV2FirmwareComponent,
|
|
31
37
|
IProtocolV2FirmwareComponentTarget,
|
|
32
38
|
} from '../types';
|
|
39
|
+
import type { FirmwareUpdatePlan } from '../types/api/firmwareUpdatePlan';
|
|
33
40
|
|
|
34
41
|
const UPDATE_TARGET_BY_COMPONENT_TARGET: Readonly<
|
|
35
42
|
Partial<Record<IProtocolV2FirmwareComponentTarget, FirmwareUpdateV4Target>>
|
|
@@ -94,7 +101,6 @@ function buildComponentRelease({
|
|
|
94
101
|
component,
|
|
95
102
|
currentVersions,
|
|
96
103
|
currentVerification,
|
|
97
|
-
checkFirmwareHash,
|
|
98
104
|
remotePayloadHash,
|
|
99
105
|
releaseRequired,
|
|
100
106
|
}: {
|
|
@@ -102,7 +108,6 @@ function buildComponentRelease({
|
|
|
102
108
|
component: IProtocolV2FirmwareComponent;
|
|
103
109
|
currentVersions: DeviceStateVersions;
|
|
104
110
|
currentVerification: Partial<DeviceFeaturesVerify>;
|
|
105
|
-
checkFirmwareHash: boolean;
|
|
106
111
|
remotePayloadHash: string | null | undefined;
|
|
107
112
|
releaseRequired: boolean;
|
|
108
113
|
}): ProtocolV2FirmwareComponentRelease {
|
|
@@ -131,7 +136,7 @@ function buildComponentRelease({
|
|
|
131
136
|
status = 'valid';
|
|
132
137
|
} else {
|
|
133
138
|
const currentHashKey = CURRENT_HASH_BY_COMPONENT_TARGET[componentTarget];
|
|
134
|
-
if (!
|
|
139
|
+
if (!currentHashKey) {
|
|
135
140
|
status = 'valid';
|
|
136
141
|
} else {
|
|
137
142
|
const currentHash = normalizeHex(currentVerification[currentHashKey]);
|
|
@@ -170,14 +175,12 @@ type ProtocolV2FirmwareReleasePlan = {
|
|
|
170
175
|
export function buildProtocolV2FirmwareRelease({
|
|
171
176
|
currentVersions,
|
|
172
177
|
currentVerification = {},
|
|
173
|
-
checkFirmwareHash = false,
|
|
174
178
|
remotePayloadHashes = {},
|
|
175
179
|
firmwareType,
|
|
176
180
|
release,
|
|
177
181
|
}: {
|
|
178
182
|
currentVersions: DeviceStateVersions;
|
|
179
183
|
currentVerification?: Partial<DeviceFeaturesVerify>;
|
|
180
|
-
checkFirmwareHash?: boolean;
|
|
181
184
|
remotePayloadHashes?: Readonly<Record<string, string | null>>;
|
|
182
185
|
firmwareType: EFirmwareType;
|
|
183
186
|
release: IFirmwareReleaseInfo | undefined;
|
|
@@ -201,7 +204,6 @@ export function buildProtocolV2FirmwareRelease({
|
|
|
201
204
|
component,
|
|
202
205
|
currentVersions,
|
|
203
206
|
currentVerification,
|
|
204
|
-
checkFirmwareHash,
|
|
205
207
|
remotePayloadHash: Object.prototype.hasOwnProperty.call(remotePayloadHashes, configKey)
|
|
206
208
|
? remotePayloadHashes[configKey]
|
|
207
209
|
: normalizeHex(component.payloadHash),
|
|
@@ -228,6 +230,9 @@ export function buildProtocolV2FirmwareRelease({
|
|
|
228
230
|
const targetsToUpdate = components.flatMap(component =>
|
|
229
231
|
component.status === 'outdated' && component.updateTarget ? [component.updateTarget] : []
|
|
230
232
|
);
|
|
233
|
+
if (targetsToUpdate.length > 0 && release.resourceBundles?.length) {
|
|
234
|
+
targetsToUpdate.push('resource');
|
|
235
|
+
}
|
|
231
236
|
const uniqueTargetsToUpdate = Array.from(new Set(targetsToUpdate));
|
|
232
237
|
const hasUpgrade = uniqueTargetsToUpdate.length > 0;
|
|
233
238
|
const required = release.required && hasUpgrade;
|
|
@@ -252,6 +257,8 @@ export function buildProtocolV2FirmwareRelease({
|
|
|
252
257
|
};
|
|
253
258
|
}
|
|
254
259
|
|
|
260
|
+
const Log = getLogger(LoggerNames.Method);
|
|
261
|
+
|
|
255
262
|
export default class CheckAllFirmwareRelease extends BaseMethod {
|
|
256
263
|
getSupportedProtocols() {
|
|
257
264
|
return ['V1', 'V2'] as const;
|
|
@@ -269,8 +276,13 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
|
|
|
269
276
|
}
|
|
270
277
|
|
|
271
278
|
const { features } = this.device;
|
|
272
|
-
const {
|
|
273
|
-
|
|
279
|
+
const {
|
|
280
|
+
checkBridgeRelease,
|
|
281
|
+
firmwareType: firmwareTypeParams,
|
|
282
|
+
platform,
|
|
283
|
+
forceUpdateTargets,
|
|
284
|
+
} = this.payload as CheckAllFirmwareReleaseParams;
|
|
285
|
+
const validatedForceUpdateTargets = validateFirmwareUpdatePlanForceTargets(forceUpdateTargets);
|
|
274
286
|
|
|
275
287
|
if (!features) {
|
|
276
288
|
return Promise.resolve(null);
|
|
@@ -301,6 +313,32 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
|
|
|
301
313
|
firmwareType,
|
|
302
314
|
});
|
|
303
315
|
const bleFirmwareReleaseInfo = getBleFirmwareReleaseInfo(features);
|
|
316
|
+
let firmwareUpdatePlan: FirmwareUpdatePlan | undefined;
|
|
317
|
+
try {
|
|
318
|
+
firmwareUpdatePlan = buildFirmwareUpdatePlan({
|
|
319
|
+
features,
|
|
320
|
+
firmwareType,
|
|
321
|
+
platform: platform ?? 'web',
|
|
322
|
+
firmware: firmwareRelease,
|
|
323
|
+
ble: bleFirmwareReleaseInfo,
|
|
324
|
+
bootloader: bootloaderRelease,
|
|
325
|
+
forceUpdateTargets: validatedForceUpdateTargets,
|
|
326
|
+
});
|
|
327
|
+
} catch (error) {
|
|
328
|
+
if (
|
|
329
|
+
validatedForceUpdateTargets.length > 0 ||
|
|
330
|
+
!(error instanceof HardwareError) ||
|
|
331
|
+
error.params?.firmwareUpdateCode !== 'FirmwarePlanInvalid'
|
|
332
|
+
) {
|
|
333
|
+
throw error;
|
|
334
|
+
}
|
|
335
|
+
// A Plan is an optional external-host capability. Release checks remain
|
|
336
|
+
// available for legacy and recovery flows when a Plan cannot be built.
|
|
337
|
+
Log.warn(
|
|
338
|
+
'[CheckAllFirmwareRelease] Optional firmware Plan is unavailable; using the legacy release result'
|
|
339
|
+
);
|
|
340
|
+
firmwareUpdatePlan = undefined;
|
|
341
|
+
}
|
|
304
342
|
|
|
305
343
|
return {
|
|
306
344
|
firmware: firmwareRelease,
|
|
@@ -315,21 +353,18 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
|
|
|
315
353
|
}
|
|
316
354
|
: undefined,
|
|
317
355
|
features,
|
|
318
|
-
|
|
356
|
+
firmwareUpdatePlan,
|
|
357
|
+
} as unknown as AllFirmwareRelease;
|
|
319
358
|
}
|
|
320
359
|
|
|
321
360
|
private async runProtocolV2(): Promise<AllFirmwareRelease> {
|
|
322
|
-
const { checkFirmwareHash = false, firmwareType: firmwareTypeParam } = this
|
|
323
|
-
.payload as CheckAllFirmwareReleaseParams;
|
|
324
361
|
const state = await this.device.getDeviceState({
|
|
325
|
-
refreshSections:
|
|
326
|
-
? ['identity', 'versions', 'verification']
|
|
327
|
-
: ['identity', 'versions'],
|
|
362
|
+
refreshSections: ['identity', 'versions', 'verification'],
|
|
328
363
|
});
|
|
329
|
-
if (state.identity.deviceType !== 'pro2'
|
|
364
|
+
if (state.identity.deviceType !== 'pro2') {
|
|
330
365
|
throw ERRORS.TypedError(
|
|
331
366
|
HardwareErrorCode.DeviceNotSupportMethod,
|
|
332
|
-
'checkAllFirmwareRelease requires a Pro2
|
|
367
|
+
'checkAllFirmwareRelease requires a Pro2 device for Protocol V2'
|
|
333
368
|
);
|
|
334
369
|
}
|
|
335
370
|
|
|
@@ -341,47 +376,16 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
|
|
|
341
376
|
);
|
|
342
377
|
}
|
|
343
378
|
|
|
379
|
+
const { firmwareType: firmwareTypeParam } = this.payload as CheckAllFirmwareReleaseParams;
|
|
344
380
|
const firmwareType =
|
|
345
381
|
firmwareTypeParam ?? state.identity.firmwareType ?? EFirmwareType.Universal;
|
|
346
382
|
const release = DataManager.getFirmwareLatestRelease(features, firmwareType);
|
|
347
383
|
const plan = buildProtocolV2FirmwareRelease({
|
|
348
384
|
currentVersions: state.versions,
|
|
349
|
-
currentVerification:
|
|
350
|
-
checkFirmwareHash,
|
|
385
|
+
currentVerification: state.verification,
|
|
351
386
|
firmwareType,
|
|
352
387
|
release,
|
|
353
388
|
});
|
|
354
|
-
const resourceDeviceType =
|
|
355
|
-
state.identity.deviceType === 'neo' ? EDeviceType.Neo : EDeviceType.Pro2;
|
|
356
|
-
const resources = DataManager.getProtocolV2Resources(resourceDeviceType);
|
|
357
|
-
let resourceStatus: 'valid' | 'outdated' | 'unknown' = 'unknown';
|
|
358
|
-
if (resources?.length) {
|
|
359
|
-
const loaderMode = state.status.mode === 'bootloader' || state.status.mode === 'romloader';
|
|
360
|
-
// Application mode rejects host access to vol0:/bundles. Resource inventory is
|
|
361
|
-
// resolved after FirmwareUpdateV4 enters a loader instead of probing here.
|
|
362
|
-
if (loaderMode) {
|
|
363
|
-
try {
|
|
364
|
-
const inventory = await readProtocolV2ResourceInventory({
|
|
365
|
-
commands: this.device.getCommands(),
|
|
366
|
-
resources,
|
|
367
|
-
});
|
|
368
|
-
resourceStatus = buildProtocolV2ResourceUpdatePlan({
|
|
369
|
-
resources,
|
|
370
|
-
inventory,
|
|
371
|
-
mode: 'bootloader-recovery',
|
|
372
|
-
}).status;
|
|
373
|
-
} catch {
|
|
374
|
-
resourceStatus = buildProtocolV2ResourceUpdatePlan({
|
|
375
|
-
resources,
|
|
376
|
-
mode: 'bootloader-recovery',
|
|
377
|
-
}).status;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
const targetsToUpdate = [
|
|
382
|
-
...plan.targetsToUpdate,
|
|
383
|
-
...(resourceStatus === 'outdated' ? (['resource'] as const) : []),
|
|
384
|
-
];
|
|
385
389
|
const firmwareStatus = plan.status === 'unavailable' ? 'unknown' : plan.status;
|
|
386
390
|
const emptyRelease = 'none' as const;
|
|
387
391
|
|
|
@@ -402,11 +406,8 @@ export default class CheckAllFirmwareRelease extends BaseMethod {
|
|
|
402
406
|
},
|
|
403
407
|
features,
|
|
404
408
|
protocol: 'V2',
|
|
405
|
-
deviceType:
|
|
409
|
+
deviceType: 'pro2',
|
|
406
410
|
...plan,
|
|
407
|
-
resourceStatus,
|
|
408
|
-
hasUpgrade: plan.hasUpgrade || resourceStatus === 'outdated',
|
|
409
|
-
targetsToUpdate,
|
|
410
411
|
};
|
|
411
412
|
}
|
|
412
413
|
}
|
|
@@ -10,6 +10,7 @@ import { UI_REQUEST } from '../constants/ui-request';
|
|
|
10
10
|
import { BaseMethod } from './BaseMethod';
|
|
11
11
|
import { validateParams } from './helpers/paramsValidator';
|
|
12
12
|
import { getBinary } from './firmware/getBinary';
|
|
13
|
+
import { BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS } from './firmware/FirmwareUpdateBaseMethod';
|
|
13
14
|
import { uploadFirmware } from './firmware/uploadFirmware';
|
|
14
15
|
import { createUiMessage } from '../events';
|
|
15
16
|
import { DeviceModelToTypes, type KnownDevice } from '../types';
|
|
@@ -78,6 +79,10 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
|
|
|
78
79
|
this.checkPromise = createDeferred();
|
|
79
80
|
const env = DataManager.getSettings('env');
|
|
80
81
|
const isBleReconnect = connectId && DataManager.isBleConnect(env);
|
|
82
|
+
// Tracks the in-flight BLE probe so interval ticks never overlap: a superseded
|
|
83
|
+
// Initialize left pending on the V1 transport is exactly what later times out
|
|
84
|
+
// and used to tear down the connection mid-firmware-upload.
|
|
85
|
+
let bleProbeInFlight = false;
|
|
81
86
|
|
|
82
87
|
Log.log('FirmwareUpdate [checkDeviceToBootloader] isBleReconnect: ', isBleReconnect);
|
|
83
88
|
|
|
@@ -85,14 +90,18 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
|
|
|
85
90
|
const intervalTimer: ReturnType<typeof setInterval> | undefined = setInterval(
|
|
86
91
|
async () => {
|
|
87
92
|
if (isBleReconnect) {
|
|
93
|
+
if (bleProbeInFlight) return;
|
|
94
|
+
bleProbeInFlight = true;
|
|
88
95
|
try {
|
|
89
96
|
await this.device.deviceConnector?.acquire(
|
|
90
97
|
this.device.originalDescriptor.id,
|
|
91
98
|
null,
|
|
92
|
-
true
|
|
93
|
-
this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType
|
|
99
|
+
true
|
|
94
100
|
);
|
|
95
|
-
|
|
101
|
+
// Bound each probe so a request the rebooting device never received
|
|
102
|
+
// frees the slot for the next tick instead of hanging into the
|
|
103
|
+
// 30s reboot budget.
|
|
104
|
+
await this.device.initialize({ timeoutMs: BOOTLOADER_POLL_INITIALIZE_TIMEOUT_MS });
|
|
96
105
|
if (this.device.isBootloader()) {
|
|
97
106
|
clearInterval(intervalTimer);
|
|
98
107
|
this.checkPromise?.resolve(true);
|
|
@@ -100,14 +109,13 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
|
|
|
100
109
|
} catch (e) {
|
|
101
110
|
// ignore error because of device is not connected
|
|
102
111
|
Log.log('catch Bluetooth error when device is restarting: ', e);
|
|
112
|
+
} finally {
|
|
113
|
+
bleProbeInFlight = false;
|
|
103
114
|
}
|
|
104
115
|
} else {
|
|
105
116
|
const deviceDiff = await this.device.deviceConnector?.enumerate();
|
|
106
117
|
const devicesDescriptor = deviceDiff?.descriptors ?? [];
|
|
107
|
-
const { deviceList } = await DevicePool.getDevices(devicesDescriptor, connectId
|
|
108
|
-
connectProtocol:
|
|
109
|
-
this.payload.connectProtocol ?? this.device.originalDescriptor.protocolType,
|
|
110
|
-
});
|
|
118
|
+
const { deviceList } = await DevicePool.getDevices(devicesDescriptor, connectId);
|
|
111
119
|
|
|
112
120
|
if (deviceList.length === 1 && deviceList[0]?.isBootloader()) {
|
|
113
121
|
// should update current device from cache
|