@onekeyfe/hd-core 1.2.0-alpha.2 → 1.2.0-alpha.21
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 +75 -0
- package/__tests__/DeviceCommands.test.ts +285 -0
- package/__tests__/DeviceEventRegistration.test.ts +43 -0
- package/__tests__/connectSettings.test.ts +19 -0
- package/__tests__/core-dispose.test.ts +34 -0
- package/__tests__/core-error-output.test.ts +39 -0
- package/__tests__/device-features-state.test.ts +78 -0
- package/__tests__/device-identity.test.ts +30 -0
- package/__tests__/device-lifecycle-events.test.ts +117 -0
- package/__tests__/device-pool-state.test.ts +132 -0
- package/__tests__/device-settings.test.ts +391 -0
- package/__tests__/device-state-contract.test.ts +27 -0
- package/__tests__/device-state-events.test.ts +162 -0
- package/__tests__/device-state-mapper.test.ts +241 -0
- package/__tests__/device-state-projector.test.ts +94 -0
- package/__tests__/device-state-store.test.ts +82 -0
- package/__tests__/device-utils.test.ts +106 -0
- package/__tests__/device-wallet-session-store.test.ts +213 -0
- package/__tests__/deviceFeaturesUtils.test.ts +39 -0
- package/__tests__/deviceSettings.test.ts +103 -0
- package/__tests__/evmLedgerLegacySafety.test.ts +10 -6
- package/__tests__/evmSignTypedData.test.ts +80 -0
- package/__tests__/filesystemValidation.test.ts +53 -0
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +402 -0
- package/__tests__/get-device-state.test.ts +410 -0
- package/__tests__/homescreen.test.ts +24 -0
- package/__tests__/kaspaSignTransaction.test.ts +591 -0
- package/__tests__/logBlockEvent.test.ts +26 -0
- package/__tests__/networkUtils.test.ts +386 -0
- package/__tests__/open-wallet-session-error-response.test.ts +43 -0
- package/__tests__/open-wallet-session.test.ts +559 -0
- package/__tests__/preInitialize.test.ts +33 -0
- package/__tests__/pro2Wallpaper.test.ts +50 -0
- package/__tests__/protocol-v2-bootloader-mode.test.ts +37 -0
- package/__tests__/protocol-v2-firmware-targets.test.ts +19 -0
- package/__tests__/protocol-v2.test.ts +3954 -1191
- package/__tests__/protocolV2FileWrite.test.ts +92 -0
- package/__tests__/protocolV2UiInteraction.test.ts +266 -0
- package/__tests__/public-device-state-api.test.ts +257 -0
- package/__tests__/public-pro2-api-boundary.test.ts +110 -0
- package/__tests__/refresh-device-state.test.ts +101 -0
- package/__tests__/request-context-logging.test.ts +16 -0
- package/__tests__/search-devices.test.ts +136 -0
- package/dist/api/BaseMethod.d.ts +8 -0
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
- package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
- package/dist/api/ClearSessionCache.d.ts +9 -0
- package/dist/api/ClearSessionCache.d.ts.map +1 -0
- package/dist/api/DirList.d.ts.map +1 -1
- package/dist/api/FileRead.d.ts.map +1 -1
- package/dist/api/FileWrite.d.ts +1 -0
- package/dist/api/FileWrite.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +2 -2
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +25 -5
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/GetDeviceState.d.ts +7 -0
- package/dist/api/GetDeviceState.d.ts.map +1 -0
- package/dist/api/GetFeatures.d.ts +1 -1
- package/dist/api/GetFeatures.d.ts.map +1 -1
- package/dist/api/GetOnekeyFeatures.d.ts.map +1 -1
- package/dist/api/GetPassphraseState.d.ts +1 -6
- package/dist/api/GetPassphraseState.d.ts.map +1 -1
- package/dist/api/OpenWalletSession.d.ts +14 -0
- package/dist/api/OpenWalletSession.d.ts.map +1 -0
- package/dist/api/PathInfo.d.ts.map +1 -1
- package/dist/api/PromptWebDeviceAccess.d.ts.map +1 -1
- package/dist/api/SearchDevices.d.ts +3 -0
- package/dist/api/SearchDevices.d.ts.map +1 -1
- package/dist/api/UploadPortfolio.d.ts +17 -0
- package/dist/api/UploadPortfolio.d.ts.map +1 -0
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/device/DeviceCancel.d.ts.map +1 -1
- package/dist/api/device/DeviceChangePin.d.ts.map +1 -1
- package/dist/api/device/DeviceFullyUploadResource.d.ts +1 -2
- package/dist/api/device/DeviceFullyUploadResource.d.ts.map +1 -1
- package/dist/api/device/DeviceLock.d.ts.map +1 -1
- package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
- package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
- package/dist/api/device/DeviceSettings.d.ts.map +1 -1
- package/dist/api/device/DeviceUnlock.d.ts +1 -1
- package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/device/DeviceWipe.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +1 -0
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/getBinary.d.ts +11 -3
- 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/helpers/filesystemValidation.d.ts +3 -0
- package/dist/api/helpers/filesystemValidation.d.ts.map +1 -1
- package/dist/api/helpers/paramsValidator.d.ts +1 -0
- package/dist/api/helpers/paramsValidator.d.ts.map +1 -1
- package/dist/api/helpers/protocolV2FileWrite.d.ts +33 -0
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -0
- package/dist/api/index.d.ts +12 -19
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts +5 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
- package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +6 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +7 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +1 -1
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +3 -2
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +1 -1
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceInfoGet.d.ts +28 -0
- package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceStatusGet.d.ts +6 -0
- package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +26 -0
- package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -0
- package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
- package/dist/api/protocol-v2/{FilesystemFixPermission.d.ts → FilesystemPermissionFix.d.ts} +2 -2
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -0
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +6 -0
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -0
- package/dist/api/protocol-v2/helpers.d.ts +27 -19
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
- package/dist/api/ton/TonSignData.d.ts +1 -5
- package/dist/api/ton/TonSignData.d.ts.map +1 -1
- package/dist/api/utils.d.ts +2 -1
- package/dist/api/utils.d.ts.map +1 -1
- package/dist/constants/index.d.ts +2 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/core/RequestQueue.d.ts.map +1 -1
- package/dist/core/deviceEventRegistration.d.ts +11 -0
- package/dist/core/deviceEventRegistration.d.ts.map +1 -0
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/data-manager/DataManager.d.ts +1 -1
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/data-manager/connectSettings.d.ts.map +1 -1
- package/dist/device/Device.d.ts +35 -11
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +8 -6
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DeviceFeaturesState.d.ts +3 -0
- package/dist/device/DeviceFeaturesState.d.ts.map +1 -0
- package/dist/device/DevicePool.d.ts +4 -2
- package/dist/device/DevicePool.d.ts.map +1 -1
- package/dist/device/DeviceStateMapper.d.ts +13 -0
- package/dist/device/DeviceStateMapper.d.ts.map +1 -0
- package/dist/device/DeviceStateProjector.d.ts +7 -0
- package/dist/device/DeviceStateProjector.d.ts.map +1 -0
- package/dist/device/DeviceStateStore.d.ts +21 -0
- package/dist/device/DeviceStateStore.d.ts.map +1 -0
- package/dist/device/DeviceWalletSessionStore.d.ts +20 -0
- package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -0
- package/dist/device/cloneDeviceState.d.ts +2 -0
- package/dist/device/cloneDeviceState.d.ts.map +1 -0
- package/dist/device/deviceIdentity.d.ts +5 -0
- package/dist/device/deviceIdentity.d.ts.map +1 -0
- package/dist/deviceProfile/buildDeviceFeatures.d.ts +9 -3
- package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
- package/dist/deviceProfile/index.d.ts +0 -1
- package/dist/deviceProfile/index.d.ts.map +1 -1
- package/dist/events/device.d.ts +11 -2
- package/dist/events/device.d.ts.map +1 -1
- package/dist/events/logBlockEvent.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +18 -2
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/index.d.ts +1361 -609
- package/dist/index.js +5898 -2860
- package/dist/inject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/deviceSession.d.ts +7 -0
- package/dist/protocols/protocol-v2/deviceSession.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/features.d.ts +23 -28
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/firmware.d.ts +11 -9
- package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/index.d.ts +3 -2
- package/dist/protocols/protocol-v2/index.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/settingsUnlockPolicy.d.ts +16 -0
- package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts +39 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/unlockRetry.d.ts +11 -0
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts +19 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -0
- package/dist/types/api/checkAllFirmwareRelease.d.ts +1 -2
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceSettings.d.ts +11 -2
- package/dist/types/api/deviceSettings.d.ts.map +1 -1
- package/dist/types/api/deviceUnlock.d.ts +2 -2
- package/dist/types/api/deviceUnlock.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +6 -6
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/getDeviceState.d.ts +12 -0
- package/dist/types/api/getDeviceState.d.ts.map +1 -0
- package/dist/types/api/getFeatures.d.ts.map +1 -1
- package/dist/types/api/getOnekeyFeatures.d.ts.map +1 -1
- package/dist/types/api/getPassphraseState.d.ts +2 -10
- package/dist/types/api/getPassphraseState.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +22 -25
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/kaspaSignTransaction.d.ts +27 -2
- package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
- package/dist/types/api/openWalletSession.d.ts +41 -0
- package/dist/types/api/openWalletSession.d.ts.map +1 -0
- package/dist/types/api/protocolV2.d.ts +23 -28
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/api/sessionCache.d.ts +10 -0
- package/dist/types/api/sessionCache.d.ts.map +1 -0
- package/dist/types/device.d.ts +121 -5
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/params.d.ts +1 -0
- package/dist/types/params.d.ts.map +1 -1
- package/dist/types/settings.d.ts +21 -1
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/assets.d.ts +2 -1
- package/dist/utils/assets.d.ts.map +1 -1
- package/dist/utils/deviceFeaturesCompat.d.ts +13 -0
- package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -0
- package/dist/utils/deviceFeaturesUtils.d.ts +13 -3
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/deviceInfoUtils.d.ts +9 -8
- package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
- package/dist/utils/deviceSettings.d.ts +38 -7
- package/dist/utils/deviceSettings.d.ts.map +1 -1
- package/dist/utils/deviceVersionUtils.d.ts +6 -5
- package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
- package/dist/utils/homescreen.d.ts.map +1 -1
- package/dist/utils/index.d.ts +5 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/networkUtils.d.ts +9 -1
- package/dist/utils/networkUtils.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 +12 -0
- package/dist/utils/pro2Wallpaper.d.ts.map +1 -0
- package/dist/utils/tracing.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +36 -9
- package/src/api/CheckBootloaderRelease.ts +1 -2
- package/src/api/CheckFirmwareRelease.ts +1 -2
- package/src/api/ClearSessionCache.ts +28 -0
- package/src/api/DirList.ts +5 -3
- package/src/api/DirMake.ts +3 -3
- package/src/api/DirRemove.ts +3 -3
- package/src/api/FileDelete.ts +3 -3
- package/src/api/FileRead.ts +23 -7
- package/src/api/FileWrite.ts +23 -168
- package/src/api/FirmwareUpdate.ts +4 -4
- package/src/api/FirmwareUpdateV2.ts +133 -45
- package/src/api/FirmwareUpdateV3.ts +3 -5
- package/src/api/FirmwareUpdateV4.ts +1138 -357
- package/src/api/GetDeviceState.ts +55 -0
- package/src/api/GetFeatures.ts +8 -3
- package/src/api/GetOnekeyFeatures.ts +3 -72
- package/src/api/GetPassphraseState.ts +11 -18
- package/src/api/OpenWalletSession.ts +221 -0
- package/src/api/PathInfo.ts +5 -3
- package/src/api/PromptWebDeviceAccess.ts +2 -3
- package/src/api/SearchDevices.ts +29 -4
- package/src/api/UploadPortfolio.ts +40 -0
- package/src/api/alephium/AlephiumSignTransaction.ts +2 -2
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +4 -8
- package/src/api/benfen/BenfenGetAddress.ts +1 -1
- package/src/api/btc/BTCGetPublicKey.ts +1 -1
- package/src/api/cardano/CardanoSignMessage.ts +1 -1
- package/src/api/cardano/CardanoSignTransaction.ts +1 -1
- package/src/api/device/DeviceCancel.ts +1 -0
- package/src/api/device/DeviceChangePin.ts +24 -0
- package/src/api/device/DeviceFullyUploadResource.ts +4 -5
- package/src/api/device/DeviceLock.ts +1 -0
- package/src/api/device/DeviceRebootToBoardloader.ts +5 -4
- package/src/api/device/DeviceRebootToBootloader.ts +5 -4
- package/src/api/device/DeviceSettings.ts +183 -1
- package/src/api/device/DeviceUnlock.ts +11 -1
- package/src/api/device/DeviceUpdateBootloader.ts +1 -2
- package/src/api/device/DeviceWipe.ts +19 -0
- package/src/api/evm/EVMSignTypedData.ts +3 -5
- package/src/api/evm/legacyV1/getAddress.ts +2 -2
- package/src/api/evm/legacyV1/getPublicKey.ts +2 -2
- package/src/api/evm/legacyV1/signMessage.ts +2 -2
- package/src/api/evm/legacyV1/signTypedData.ts +2 -2
- package/src/api/evm/legacyV1/signTypedHash.ts +2 -2
- package/src/api/evm/legacyV1/verifyMessage.ts +2 -2
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +21 -7
- package/src/api/firmware/getBinary.ts +8 -3
- package/src/api/firmware/progressThrottle.ts +44 -0
- package/src/api/helpers/batchGetPublickeys.ts +2 -2
- package/src/api/helpers/filesystemValidation.ts +61 -0
- package/src/api/helpers/paramsValidator.ts +1 -1
- package/src/api/helpers/protocolV2FileWrite.ts +193 -0
- package/src/api/index.ts +14 -20
- package/src/api/kaspa/KaspaSignTransaction.ts +341 -22
- package/src/api/kaspa/helpers/TransferSerialize.ts +14 -0
- package/src/api/nervos/NervosSignTransaction.ts +2 -2
- package/src/api/nexa/NexaSignTransaction.ts +1 -1
- package/src/api/protocol-v2/{FactoryGetDeviceInfo.ts → DeviceFactoryInfoGet.ts} +4 -4
- package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +32 -0
- package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +7 -9
- package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +41 -6
- package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +6 -4
- package/src/api/protocol-v2/DeviceInfoGet.ts +145 -0
- package/src/api/protocol-v2/DeviceReboot.ts +5 -3
- package/src/api/protocol-v2/DeviceStatusGet.ts +16 -0
- package/src/api/protocol-v2/DeviceUploadWallpaper.ts +131 -0
- package/src/api/protocol-v2/FilesystemFormat.ts +5 -2
- package/src/api/protocol-v2/{FilesystemFixPermission.ts → FilesystemPermissionFix.ts} +3 -3
- package/src/api/protocol-v2/Ping.ts +1 -1
- package/src/api/protocol-v2/{GetProtoVersion.ts → ProtocolInfoRequest.ts} +3 -3
- package/src/api/protocol-v2/helpers.ts +58 -62
- package/src/api/ton/TonSignData.ts +1 -5
- package/src/api/utils.ts +7 -3
- package/src/constants/index.ts +7 -1
- package/src/core/RequestQueue.ts +1 -0
- package/src/core/deviceEventRegistration.ts +23 -0
- package/src/core/index.ts +140 -35
- package/src/data/messages/messages-protocol-v2.json +825 -709
- package/src/data/messages/messages.json +286 -1
- package/src/data-manager/DataManager.ts +13 -6
- package/src/data-manager/connectSettings.ts +4 -0
- package/src/device/Device.ts +480 -192
- package/src/device/DeviceCommands.ts +81 -25
- package/src/device/DeviceFeaturesState.ts +25 -0
- package/src/device/DevicePool.ts +67 -19
- package/src/device/DeviceStateMapper.ts +349 -0
- package/src/device/DeviceStateProjector.ts +95 -0
- package/src/device/DeviceStateStore.ts +201 -0
- package/src/device/DeviceWalletSessionStore.ts +105 -0
- package/src/device/cloneDeviceState.ts +39 -0
- package/src/device/deviceIdentity.ts +18 -0
- package/src/deviceProfile/buildDeviceFeatures.ts +235 -210
- package/src/deviceProfile/index.ts +0 -1
- package/src/events/device.ts +17 -1
- package/src/events/logBlockEvent.ts +8 -1
- package/src/events/ui-request.ts +24 -2
- package/src/inject.ts +23 -34
- package/src/protocols/protocol-v2/deviceSession.ts +24 -0
- package/src/protocols/protocol-v2/features.ts +68 -82
- package/src/protocols/protocol-v2/firmware.ts +12 -36
- package/src/protocols/protocol-v2/index.ts +3 -1
- package/src/protocols/protocol-v2/lockedError.ts +10 -0
- package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +61 -0
- package/src/protocols/protocol-v2/uiInteraction.ts +210 -0
- package/src/protocols/protocol-v2/unlockRetry.ts +76 -0
- package/src/protocols/protocol-v2/walletSession.ts +107 -0
- package/src/types/api/checkAllFirmwareRelease.ts +1 -2
- package/src/types/api/deviceSettings.ts +26 -2
- package/src/types/api/deviceUnlock.ts +5 -2
- package/src/types/api/firmwareUpdate.ts +28 -20
- package/src/types/api/getDeviceState.ts +19 -0
- package/src/types/api/getFeatures.ts +3 -0
- package/src/types/api/getOnekeyFeatures.ts +3 -0
- package/src/types/api/getPassphraseState.ts +8 -11
- package/src/types/api/index.ts +30 -53
- package/src/types/api/kaspaSignTransaction.ts +40 -2
- package/src/types/api/openWalletSession.ts +64 -0
- package/src/types/api/protocolV2.ts +58 -55
- package/src/types/api/sessionCache.ts +14 -0
- package/src/types/device.ts +170 -4
- package/src/types/params.ts +4 -0
- package/src/types/settings.ts +42 -30
- package/src/utils/assets.ts +4 -1
- package/src/utils/deviceFeaturesCompat.ts +173 -0
- package/src/utils/deviceFeaturesUtils.ts +68 -24
- package/src/utils/deviceInfoUtils.ts +26 -64
- package/src/utils/deviceSettings.ts +161 -39
- package/src/utils/deviceVersionUtils.ts +25 -44
- package/src/utils/findDefectiveBatchDevice.ts +3 -3
- package/src/utils/homescreen.ts +10 -0
- package/src/utils/index.ts +21 -1
- package/src/utils/networkUtils.ts +270 -14
- package/src/utils/pro2Wallpaper.ts +109 -0
- package/src/utils/tracing.ts +3 -1
- package/dist/api/GetDeviceInfo.d.ts +0 -9
- package/dist/api/GetDeviceInfo.d.ts.map +0 -1
- package/dist/api/protocol-v2/DevReboot.d.ts +0 -7
- package/dist/api/protocol-v2/DevReboot.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts +0 -29
- package/dist/api/protocol-v2/DeviceGetDeviceInfo.d.ts.map +0 -1
- package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts +0 -7
- package/dist/api/protocol-v2/FactoryDeviceInfoSettings.d.ts.map +0 -1
- package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts +0 -6
- package/dist/api/protocol-v2/FactoryGetDeviceInfo.d.ts.map +0 -1
- package/dist/api/protocol-v2/FilesystemDiskControl.d.ts +0 -13
- package/dist/api/protocol-v2/FilesystemDiskControl.d.ts.map +0 -1
- package/dist/api/protocol-v2/FilesystemFixPermission.d.ts.map +0 -1
- package/dist/api/protocol-v2/GetProtoVersion.d.ts +0 -6
- package/dist/api/protocol-v2/GetProtoVersion.d.ts.map +0 -1
- package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
- package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
- package/dist/types/api/getDeviceInfo.d.ts +0 -85
- package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
- package/src/api/GetDeviceInfo.ts +0 -145
- package/src/api/protocol-v2/DevReboot.ts +0 -24
- package/src/api/protocol-v2/DeviceGetDeviceInfo.ts +0 -118
- package/src/api/protocol-v2/FactoryDeviceInfoSettings.ts +0 -29
- package/src/api/protocol-v2/FilesystemDiskControl.ts +0 -50
- package/src/deviceProfile/buildDeviceProfile.ts +0 -334
- package/src/types/api/getDeviceInfo.ts +0 -99
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { DeviceSettingsPage } from '@onekeyfe/hd-transport';
|
|
2
|
+
|
|
1
3
|
import { BaseMethod } from '../BaseMethod';
|
|
2
4
|
import { validateParams } from '../helpers/paramsValidator';
|
|
5
|
+
import { invalidParameter } from '../helpers/filesystemValidation';
|
|
3
6
|
|
|
4
7
|
import type { ChangePin } from '@onekeyfe/hd-transport';
|
|
5
8
|
|
|
6
9
|
export default class DeviceChangePin extends BaseMethod<ChangePin> {
|
|
7
10
|
init() {
|
|
11
|
+
this.unlockPolicy = 'retry-on-locked';
|
|
8
12
|
this.useDevicePassphraseState = false;
|
|
9
13
|
|
|
10
14
|
// check payload
|
|
@@ -13,9 +17,29 @@ export default class DeviceChangePin extends BaseMethod<ChangePin> {
|
|
|
13
17
|
this.params = {
|
|
14
18
|
remove: this.payload.remove,
|
|
15
19
|
};
|
|
20
|
+
this.protocolV2UiInteraction = {
|
|
21
|
+
request: 'button',
|
|
22
|
+
source: 'method-lifecycle',
|
|
23
|
+
reason: 'change-pin',
|
|
24
|
+
completion: 'operation-completed',
|
|
25
|
+
deviceOnly: true,
|
|
26
|
+
page: DeviceSettingsPage.DevicePinChange,
|
|
27
|
+
};
|
|
16
28
|
}
|
|
17
29
|
|
|
18
30
|
async run() {
|
|
31
|
+
if (this.device.isProtocolV2()) {
|
|
32
|
+
if (this.params.remove) {
|
|
33
|
+
throw invalidParameter(
|
|
34
|
+
'Parameter [remove=true] is not supported by the Pro2 device PIN page.'
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
const res = await this.device.commands.typedCall('DeviceSettingsPageShow', 'Success', {
|
|
38
|
+
page: DeviceSettingsPage.DevicePinChange,
|
|
39
|
+
});
|
|
40
|
+
return Promise.resolve(res.message);
|
|
41
|
+
}
|
|
42
|
+
|
|
19
43
|
const res = await this.device.commands.typedCall('ChangePin', 'Success', {
|
|
20
44
|
...this.params,
|
|
21
45
|
});
|
|
@@ -5,12 +5,11 @@ import { UI_REQUEST } from '../../constants/ui-request';
|
|
|
5
5
|
import { BaseMethod } from '../BaseMethod';
|
|
6
6
|
import { getSysResourceBinary } from '../firmware/getBinary';
|
|
7
7
|
import { updateResources } from '../firmware/uploadFirmware';
|
|
8
|
-
import { getDeviceFirmwareVersion, getFirmwareType } from '../../utils';
|
|
9
8
|
import { createUiMessage } from '../../events/ui-request';
|
|
10
9
|
import { DataManager } from '../../data-manager';
|
|
11
10
|
|
|
12
11
|
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
13
|
-
import type {
|
|
12
|
+
import type { KnownDevice } from '../../types';
|
|
14
13
|
import type { DeviceFullyUploadResourceParams } from '../../types/api/deviceFullyUploadResource';
|
|
15
14
|
|
|
16
15
|
export default class DeviceFullyUploadResource extends BaseMethod {
|
|
@@ -33,12 +32,12 @@ export default class DeviceFullyUploadResource extends BaseMethod {
|
|
|
33
32
|
);
|
|
34
33
|
};
|
|
35
34
|
|
|
36
|
-
isSupportResourceUpdate(
|
|
35
|
+
isSupportResourceUpdate(updateType: string) {
|
|
37
36
|
if (updateType !== 'firmware') return false;
|
|
38
37
|
|
|
39
38
|
const deviceType = this.device.getCurrentDeviceType();
|
|
40
39
|
const isTouchMode = deviceType === EDeviceType.Touch || deviceType === EDeviceType.Pro;
|
|
41
|
-
const currentVersion =
|
|
40
|
+
const currentVersion = this.device.getCurrentFirmwareVersionString() ?? '0.0.0';
|
|
42
41
|
|
|
43
42
|
return isTouchMode && semver.gte(currentVersion, '3.4.0');
|
|
44
43
|
}
|
|
@@ -49,7 +48,7 @@ export default class DeviceFullyUploadResource extends BaseMethod {
|
|
|
49
48
|
|
|
50
49
|
const payload = this.payload as DeviceFullyUploadResourceParams;
|
|
51
50
|
|
|
52
|
-
const deviceFirmwareType =
|
|
51
|
+
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
53
52
|
const firmwareType = payload.firmwareType ?? deviceFirmwareType;
|
|
54
53
|
|
|
55
54
|
if (!device.isBootloader() && features) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DeviceRebootType } from '@onekeyfe/hd-transport';
|
|
2
2
|
|
|
3
3
|
import { BaseMethod } from '../BaseMethod';
|
|
4
4
|
|
|
@@ -23,11 +23,12 @@ export default class DeviceRebootToBoardloader extends BaseMethod<RebootToBoardl
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
async run() {
|
|
26
|
-
// Protocol V2 submodule firmware uses
|
|
26
|
+
// Protocol V2 submodule firmware uses DeviceReboot with reboot_type enum.
|
|
27
27
|
if (this.device.isProtocolV2()) {
|
|
28
|
-
const res = await this.device.commands.typedCall('
|
|
29
|
-
reboot_type:
|
|
28
|
+
const res = await this.device.commands.typedCall('DeviceReboot', 'Success', {
|
|
29
|
+
reboot_type: DeviceRebootType.Romloader,
|
|
30
30
|
});
|
|
31
|
+
this.device.markProtocolV2Reboot(DeviceRebootType.Romloader);
|
|
31
32
|
return Promise.resolve(res.message);
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DeviceRebootType } from '@onekeyfe/hd-transport';
|
|
2
2
|
|
|
3
3
|
import { BaseMethod } from '../BaseMethod';
|
|
4
4
|
|
|
@@ -23,11 +23,12 @@ export default class DeviceRebootToBootloader extends BaseMethod<RebootToBootloa
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
async run() {
|
|
26
|
-
// Protocol V2 submodule firmware uses
|
|
26
|
+
// Protocol V2 submodule firmware uses DeviceReboot with reboot_type enum.
|
|
27
27
|
if (this.device.isProtocolV2()) {
|
|
28
|
-
const res = await this.device.commands.typedCall('
|
|
29
|
-
reboot_type:
|
|
28
|
+
const res = await this.device.commands.typedCall('DeviceReboot', 'Success', {
|
|
29
|
+
reboot_type: DeviceRebootType.Bootloader,
|
|
30
30
|
});
|
|
31
|
+
this.device.markProtocolV2Reboot(DeviceRebootType.Bootloader);
|
|
31
32
|
return Promise.resolve(res.message);
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -1,10 +1,76 @@
|
|
|
1
1
|
import { HardwareErrorCode, TypedError } from '@onekeyfe/hd-shared';
|
|
2
|
+
import { DeviceSettingsPage } from '@onekeyfe/hd-transport';
|
|
2
3
|
|
|
3
4
|
import { BaseMethod } from '../BaseMethod';
|
|
5
|
+
import { invalidParameter } from '../helpers/filesystemValidation';
|
|
4
6
|
import { validateParams } from '../helpers/paramsValidator';
|
|
5
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
mapApplySettingsToState,
|
|
9
|
+
mapCommonSettingsToProtocolV2,
|
|
10
|
+
mapDeviceSettingsToState,
|
|
11
|
+
} from '../../device/DeviceStateMapper';
|
|
12
|
+
import { getProtocolV2SettingsBehavior } from '../../protocols/protocol-v2/settingsUnlockPolicy';
|
|
13
|
+
import {
|
|
14
|
+
DEVICE_SETTINGS_V1_ONLY_FIELDS,
|
|
15
|
+
DEVICE_SETTINGS_V2_ONLY_FIELDS,
|
|
16
|
+
LANGUAGE_LABELS,
|
|
17
|
+
getDeviceSettingsCapabilities,
|
|
18
|
+
} from '../../utils/deviceSettings';
|
|
6
19
|
|
|
7
20
|
import type { ApplySettings } from '@onekeyfe/hd-transport';
|
|
21
|
+
import type { DeviceSettingsParams } from '../../types/api/deviceSettings';
|
|
22
|
+
|
|
23
|
+
const assertSettingsSupported = (
|
|
24
|
+
payload: DeviceSettingsParams,
|
|
25
|
+
unsupported: readonly (keyof DeviceSettingsParams)[],
|
|
26
|
+
protocol: 'Protocol V1' | 'Protocol V2'
|
|
27
|
+
) => {
|
|
28
|
+
const provided = unsupported.filter(key => payload[key] !== undefined);
|
|
29
|
+
if (provided.length > 0) {
|
|
30
|
+
throw invalidParameter(`${protocol} does not support settings: ${provided.join(', ')}.`);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const assertProtocolV2SettingValues = (
|
|
35
|
+
payload: DeviceSettingsParams,
|
|
36
|
+
capabilities: ReturnType<typeof getDeviceSettingsCapabilities>
|
|
37
|
+
) => {
|
|
38
|
+
const brightnessRange = capabilities.ranges.brightness;
|
|
39
|
+
if (
|
|
40
|
+
payload.brightness !== undefined &&
|
|
41
|
+
brightnessRange &&
|
|
42
|
+
(payload.brightness < brightnessRange.min || payload.brightness > brightnessRange.max)
|
|
43
|
+
) {
|
|
44
|
+
throw invalidParameter(
|
|
45
|
+
`Protocol V2 brightness must be between ${brightnessRange.min} and ${brightnessRange.max}.`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const delayFields = [
|
|
50
|
+
['autoLockDelayMs', capabilities.autoLockDelayOptions],
|
|
51
|
+
['autoShutdownDelayMs', capabilities.autoShutdownDelayOptions],
|
|
52
|
+
] as const;
|
|
53
|
+
delayFields.forEach(([field, options]) => {
|
|
54
|
+
const value = payload[field];
|
|
55
|
+
if (value !== undefined && !options.some(option => option.valueMs === value)) {
|
|
56
|
+
throw invalidParameter(
|
|
57
|
+
`Protocol V2 ${field} must be one of: ${options.map(option => option.valueMs).join(', ')}.`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const settingsPageForPayload = (
|
|
64
|
+
payload: DeviceSettingsParams
|
|
65
|
+
): DeviceSettingsPage.DevicePassphrase | DeviceSettingsPage.DeviceAirgap | undefined => {
|
|
66
|
+
if (payload.usePassphrase !== undefined) {
|
|
67
|
+
return DeviceSettingsPage.DevicePassphrase;
|
|
68
|
+
}
|
|
69
|
+
if (payload.airgapMode !== undefined) {
|
|
70
|
+
return DeviceSettingsPage.DeviceAirgap;
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
};
|
|
8
74
|
|
|
9
75
|
export default class DeviceSettings extends BaseMethod<ApplySettings> {
|
|
10
76
|
init() {
|
|
@@ -24,7 +90,16 @@ export default class DeviceSettings extends BaseMethod<ApplySettings> {
|
|
|
24
90
|
{ name: 'experimentalFeatures', type: 'boolean' },
|
|
25
91
|
{ name: 'autoShutdownDelayMs', type: 'number' },
|
|
26
92
|
{ name: 'changeBrightness', type: 'boolean' },
|
|
93
|
+
{ name: 'brightness', type: 'number' },
|
|
27
94
|
{ name: 'hapticFeedback', type: 'boolean' },
|
|
95
|
+
{ name: 'bluetoothEnabled', type: 'boolean' },
|
|
96
|
+
{ name: 'airgapMode', type: 'boolean' },
|
|
97
|
+
{ name: 'animationEnabled', type: 'boolean' },
|
|
98
|
+
{ name: 'tapToWake', type: 'boolean' },
|
|
99
|
+
{ name: 'deviceNameDisplayEnabled', type: 'boolean' },
|
|
100
|
+
{ name: 'fidoEnabled', type: 'boolean' },
|
|
101
|
+
{ name: 'usbLockEnabled', type: 'boolean' },
|
|
102
|
+
{ name: 'randomKeypad', type: 'boolean' },
|
|
28
103
|
]);
|
|
29
104
|
|
|
30
105
|
// init params
|
|
@@ -40,11 +115,34 @@ export default class DeviceSettings extends BaseMethod<ApplySettings> {
|
|
|
40
115
|
safety_checks: this.payload.safetyChecks,
|
|
41
116
|
experimental_features: this.payload.experimentalFeatures,
|
|
42
117
|
auto_shutdown_delay_ms: this.payload.autoShutdownDelayMs,
|
|
118
|
+
use_ble: this.payload.bluetoothEnabled,
|
|
43
119
|
...(this.payload.changeBrightness
|
|
44
120
|
? { change_brightness: this.payload.changeBrightness }
|
|
45
121
|
: undefined),
|
|
46
122
|
haptic_feedback: this.payload.hapticFeedback,
|
|
47
123
|
};
|
|
124
|
+
const page = settingsPageForPayload(this.payload);
|
|
125
|
+
const directSettings = mapCommonSettingsToProtocolV2(this.payload);
|
|
126
|
+
const hasConflictingPages =
|
|
127
|
+
this.payload.usePassphrase !== undefined && this.payload.airgapMode !== undefined;
|
|
128
|
+
const combinesPageWithDirectSettings =
|
|
129
|
+
page !== undefined && Object.keys(directSettings).length > 0;
|
|
130
|
+
if (hasConflictingPages || combinesPageWithDirectSettings) {
|
|
131
|
+
// V1 may still accept passphrase plus direct settings. Suppress only the
|
|
132
|
+
// Protocol V2 pre-run interaction; run() returns the protocol-specific error.
|
|
133
|
+
this.unlockPolicy = 'none';
|
|
134
|
+
this.protocolV2UiInteraction = undefined;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const behavior =
|
|
138
|
+
page === undefined
|
|
139
|
+
? getProtocolV2SettingsBehavior({
|
|
140
|
+
kind: 'direct',
|
|
141
|
+
settings: directSettings,
|
|
142
|
+
})
|
|
143
|
+
: getProtocolV2SettingsBehavior({ kind: 'page', page });
|
|
144
|
+
this.unlockPolicy = behavior.unlockPolicy;
|
|
145
|
+
this.protocolV2UiInteraction = behavior.uiInteraction;
|
|
48
146
|
}
|
|
49
147
|
|
|
50
148
|
getVersionRange() {
|
|
@@ -60,9 +158,93 @@ export default class DeviceSettings extends BaseMethod<ApplySettings> {
|
|
|
60
158
|
|
|
61
159
|
async run() {
|
|
62
160
|
try {
|
|
161
|
+
if (this.device.isProtocolV2()) {
|
|
162
|
+
assertSettingsSupported(this.payload, DEVICE_SETTINGS_V1_ONLY_FIELDS, 'Protocol V2');
|
|
163
|
+
const capabilities = getDeviceSettingsCapabilities(
|
|
164
|
+
this.device.getCurrentDeviceType(),
|
|
165
|
+
'V2'
|
|
166
|
+
);
|
|
167
|
+
assertProtocolV2SettingValues(this.payload, capabilities);
|
|
168
|
+
const settings = mapCommonSettingsToProtocolV2(this.payload);
|
|
169
|
+
const requestedPassphrase = this.payload.usePassphrase;
|
|
170
|
+
const requestedAirgap = this.payload.airgapMode;
|
|
171
|
+
const hasPassphrasePage = requestedPassphrase !== undefined;
|
|
172
|
+
const hasAirgapPage = requestedAirgap !== undefined;
|
|
173
|
+
|
|
174
|
+
if (hasPassphrasePage && hasAirgapPage) {
|
|
175
|
+
throw invalidParameter(
|
|
176
|
+
'Protocol V2 passphrase and air-gap settings must be changed in separate calls.'
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
if ((hasPassphrasePage || hasAirgapPage) && Object.keys(settings).length > 0) {
|
|
180
|
+
throw invalidParameter(
|
|
181
|
+
'Protocol V2 on-device settings must not be combined with direct settings.'
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
if (requestedPassphrase !== undefined) {
|
|
185
|
+
const current = await this.device.getDeviceState({ refreshSections: ['status'] });
|
|
186
|
+
if (current.status.passphraseProtection === requestedPassphrase) {
|
|
187
|
+
return { message: 'Settings already match requested value.' };
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const res = await this.device.commands.typedCall('DeviceSettingsPageShow', 'Success', {
|
|
191
|
+
page: DeviceSettingsPage.DevicePassphrase,
|
|
192
|
+
});
|
|
193
|
+
const updated = await this.device.getDeviceState({ refreshSections: ['status'] });
|
|
194
|
+
if (updated.status.passphraseProtection !== requestedPassphrase) {
|
|
195
|
+
throw TypedError(
|
|
196
|
+
HardwareErrorCode.RuntimeError,
|
|
197
|
+
'Protocol V2 passphrase setting did not reach the requested value.'
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
return res.message;
|
|
201
|
+
}
|
|
202
|
+
if (requestedAirgap !== undefined) {
|
|
203
|
+
const current = await this.device.getDeviceState({ refreshSections: ['settings'] });
|
|
204
|
+
if (current.settings.airgapMode === requestedAirgap) {
|
|
205
|
+
return { message: 'Settings already match requested value.' };
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const res = await this.device.commands.typedCall('DeviceSettingsPageShow', 'Success', {
|
|
209
|
+
page: DeviceSettingsPage.DeviceAirgap,
|
|
210
|
+
});
|
|
211
|
+
const updated = await this.device.getDeviceState({ refreshSections: ['settings'] });
|
|
212
|
+
if (updated.settings.airgapMode !== requestedAirgap) {
|
|
213
|
+
throw TypedError(
|
|
214
|
+
HardwareErrorCode.RuntimeError,
|
|
215
|
+
'Protocol V2 air-gap setting did not reach the requested value.'
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
return res.message;
|
|
219
|
+
}
|
|
220
|
+
if (Object.keys(settings).length === 0) {
|
|
221
|
+
throw invalidParameter('No Protocol V2 compatible setting provided.');
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const res = await this.device.commands.typedCall('DeviceSettingsSet', 'Success', {
|
|
225
|
+
settings,
|
|
226
|
+
});
|
|
227
|
+
this.device.updateState(mapDeviceSettingsToState(settings), 'settings-write');
|
|
228
|
+
return res.message;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
assertSettingsSupported(this.payload, DEVICE_SETTINGS_V2_ONLY_FIELDS, 'Protocol V1');
|
|
232
|
+
const capabilities = getDeviceSettingsCapabilities(this.device.getCurrentDeviceType(), 'V1');
|
|
233
|
+
if (
|
|
234
|
+
this.payload.safetyChecks !== undefined &&
|
|
235
|
+
!capabilities.safetyCheckOptions.some(option => option.value === this.payload.safetyChecks)
|
|
236
|
+
) {
|
|
237
|
+
throw invalidParameter(
|
|
238
|
+
`Protocol V1 safetyChecks must be one of: ${capabilities.safetyCheckOptions
|
|
239
|
+
.map(option => option.value)
|
|
240
|
+
.join(', ')}.`
|
|
241
|
+
);
|
|
242
|
+
}
|
|
243
|
+
|
|
63
244
|
const res = await this.device.commands.typedCall('ApplySettings', 'Success', {
|
|
64
245
|
...this.params,
|
|
65
246
|
});
|
|
247
|
+
this.device.updateState(mapApplySettingsToState(this.params), 'settings-write');
|
|
66
248
|
return res.message;
|
|
67
249
|
} catch (error) {
|
|
68
250
|
if (error.message?.toLowerCase().includes('no setting provided')) {
|
|
@@ -5,9 +5,19 @@ import type { LockDevice } from '@onekeyfe/hd-transport';
|
|
|
5
5
|
export default class DeviceUnlock extends BaseMethod<LockDevice> {
|
|
6
6
|
init() {
|
|
7
7
|
this.useDevicePassphraseState = false;
|
|
8
|
+
this.unlockPolicy = 'none';
|
|
9
|
+
this.protocolV2UiInteraction = {
|
|
10
|
+
request: 'pin',
|
|
11
|
+
source: 'method-lifecycle',
|
|
12
|
+
reason: 'device-unlock',
|
|
13
|
+
completion: 'operation-completed',
|
|
14
|
+
deviceOnly: true,
|
|
15
|
+
operation: 'unlock-device',
|
|
16
|
+
};
|
|
8
17
|
}
|
|
9
18
|
|
|
10
19
|
async run() {
|
|
11
|
-
|
|
20
|
+
await this.device.unlockDevice();
|
|
21
|
+
return this.device.getDeviceState();
|
|
12
22
|
}
|
|
13
23
|
}
|
|
@@ -9,7 +9,6 @@ import { updateBootloader } from '../firmware/uploadFirmware';
|
|
|
9
9
|
import { DeviceModelToTypes } from '../../types';
|
|
10
10
|
import { DataManager } from '../../data-manager';
|
|
11
11
|
import { checkBootloaderLength } from '../firmware/updateBootloader';
|
|
12
|
-
import { getFirmwareType } from '../../utils';
|
|
13
12
|
|
|
14
13
|
import type { DeviceUpdateBootloaderParams } from '../../types/api/deviceUpdateBootloader';
|
|
15
14
|
import type { EFirmwareType } from '@onekeyfe/hd-shared';
|
|
@@ -99,7 +98,7 @@ export default class DeviceUpdateBootloader extends FirmwareUpdateBaseMethod<any
|
|
|
99
98
|
const payload = this.payload as DeviceUpdateBootloaderParams;
|
|
100
99
|
|
|
101
100
|
const deviceType = device.getCurrentDeviceType();
|
|
102
|
-
const deviceFirmwareType =
|
|
101
|
+
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
103
102
|
const firmwareType = payload.firmwareType ?? deviceFirmwareType;
|
|
104
103
|
|
|
105
104
|
if (DeviceModelToTypes.model_touch.includes(deviceType)) {
|
|
@@ -1,13 +1,32 @@
|
|
|
1
|
+
import { DeviceSettingsPage } from '@onekeyfe/hd-transport';
|
|
2
|
+
|
|
1
3
|
import { BaseMethod } from '../BaseMethod';
|
|
2
4
|
|
|
3
5
|
import type { WipeDevice } from '@onekeyfe/hd-transport';
|
|
4
6
|
|
|
5
7
|
export default class DeviceWipe extends BaseMethod<WipeDevice> {
|
|
6
8
|
init() {
|
|
9
|
+
this.unlockPolicy = 'retry-on-locked';
|
|
7
10
|
this.useDevicePassphraseState = false;
|
|
11
|
+
this.protocolV2UiInteraction = {
|
|
12
|
+
request: 'button',
|
|
13
|
+
source: 'method-lifecycle',
|
|
14
|
+
reason: 'device-management',
|
|
15
|
+
completion: 'operation-completed',
|
|
16
|
+
deviceOnly: true,
|
|
17
|
+
page: DeviceSettingsPage.DeviceReset,
|
|
18
|
+
operation: 'wipe-device',
|
|
19
|
+
};
|
|
8
20
|
}
|
|
9
21
|
|
|
10
22
|
async run() {
|
|
23
|
+
if (this.device.isProtocolV2()) {
|
|
24
|
+
const res = await this.device.commands.typedCall('DeviceSettingsPageShow', 'Success', {
|
|
25
|
+
page: DeviceSettingsPage.DeviceReset,
|
|
26
|
+
});
|
|
27
|
+
return Promise.resolve(res.message);
|
|
28
|
+
}
|
|
29
|
+
|
|
11
30
|
const res = await this.device.commands.typedCall('WipeDevice', 'Success');
|
|
12
31
|
|
|
13
32
|
return Promise.resolve(res.message);
|
|
@@ -32,9 +32,8 @@ import type {
|
|
|
32
32
|
} from '@onekeyfe/hd-transport';
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* EthereumTypedDataStructAckOneKey
|
|
36
|
-
*
|
|
37
|
-
* 这里做无运行时成本的名义转换,避免在调用点散落 any。
|
|
35
|
+
* EthereumTypedDataStructAckOneKey and EthereumTypedDataStructAck have identical
|
|
36
|
+
* fields and enum values. This zero-cost nominal conversion avoids scattered `any`.
|
|
38
37
|
*/
|
|
39
38
|
const toOneKeyStructAck = (ack: EthereumTypedDataStructAck): EthereumTypedDataStructAckOneKey =>
|
|
40
39
|
ack as unknown as EthereumTypedDataStructAckOneKey;
|
|
@@ -227,8 +226,7 @@ export default class EVMSignTypedData extends BaseMethod<EVMSignTypedDataParams>
|
|
|
227
226
|
if (response.type === 'EthereumGnosisSafeTxRequest') {
|
|
228
227
|
const { data } = this.params;
|
|
229
228
|
const verifyingContract = data.domain?.verifyingContract;
|
|
230
|
-
//
|
|
231
|
-
// Gnosis Safe 签名缺少 verifyingContract 没有意义,这里给出明确的参数错误。
|
|
229
|
+
// verifyingContract is required by proto and essential to a Gnosis Safe signature.
|
|
232
230
|
if (!verifyingContract) {
|
|
233
231
|
throw ERRORS.TypedError(
|
|
234
232
|
HardwareErrorCode.CallMethodInvalidParameter,
|
|
@@ -7,8 +7,8 @@ export default async function ({
|
|
|
7
7
|
typedCall: TypedCall;
|
|
8
8
|
param: EthereumGetAddressOneKey;
|
|
9
9
|
}): Promise<MessageResponse<'EthereumAddress'>> {
|
|
10
|
-
// legacy
|
|
11
|
-
//
|
|
10
|
+
// The generated legacy type omits chain_id, but old firmware accepts the OneKey
|
|
11
|
+
// extension. A non-fresh object preserves that runtime field without a type cast.
|
|
12
12
|
const message = {
|
|
13
13
|
address_n: param.address_n,
|
|
14
14
|
show_display: param.show_display,
|
|
@@ -11,8 +11,8 @@ export default async function ({
|
|
|
11
11
|
typedCall: TypedCall;
|
|
12
12
|
param: EthereumGetPublicKeyOneKey;
|
|
13
13
|
}): Promise<MessageResponse<'EthereumPublicKey'>> {
|
|
14
|
-
// legacy
|
|
15
|
-
//
|
|
14
|
+
// The generated legacy type omits chain_id, but old firmware accepts the OneKey
|
|
15
|
+
// extension. A non-fresh object preserves that runtime field without a type cast.
|
|
16
16
|
const message = {
|
|
17
17
|
address_n: param.address_n,
|
|
18
18
|
show_display: param.show_display,
|
|
@@ -11,8 +11,8 @@ export default async function ({
|
|
|
11
11
|
typedCall: TypedCall;
|
|
12
12
|
params: EthereumSignMessageOneKey;
|
|
13
13
|
}): Promise<EthereumMessageSignature> {
|
|
14
|
-
// legacy
|
|
15
|
-
//
|
|
14
|
+
// The generated legacy type omits chain_id, but old firmware accepts the OneKey
|
|
15
|
+
// extension. A non-fresh object preserves that runtime field without a type cast.
|
|
16
16
|
const message = {
|
|
17
17
|
address_n: params.address_n,
|
|
18
18
|
message: params.message,
|
|
@@ -16,8 +16,8 @@ export const signTypedData = async ({
|
|
|
16
16
|
}) => {
|
|
17
17
|
const { primaryType }: EthereumSignTypedDataMessage<EthereumSignTypedDataTypes> = data;
|
|
18
18
|
|
|
19
|
-
// legacy
|
|
20
|
-
//
|
|
19
|
+
// The generated legacy type omits chain_id, but old firmware accepts the OneKey
|
|
20
|
+
// extension. A non-fresh object preserves that runtime field without a type cast.
|
|
21
21
|
const message = {
|
|
22
22
|
address_n: addressN,
|
|
23
23
|
primary_type: primaryType as string,
|
|
@@ -38,8 +38,8 @@ export const signTypedHash = async ({
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
// legacy
|
|
42
|
-
//
|
|
41
|
+
// The generated legacy type omits chain_id, but old firmware accepts the OneKey
|
|
42
|
+
// extension. A non-fresh object preserves that runtime field without a type cast.
|
|
43
43
|
const message = {
|
|
44
44
|
address_n: addressN,
|
|
45
45
|
domain_separator_hash: domainHash ?? '',
|
|
@@ -7,8 +7,8 @@ export default async function ({
|
|
|
7
7
|
typedCall: TypedCall;
|
|
8
8
|
params: EthereumVerifyMessageOneKey;
|
|
9
9
|
}): Promise<Success> {
|
|
10
|
-
// legacy
|
|
11
|
-
//
|
|
10
|
+
// The generated legacy type omits chain_id, but old firmware accepts the OneKey
|
|
11
|
+
// extension. A non-fresh object preserves that runtime field without a type cast.
|
|
12
12
|
const message = {
|
|
13
13
|
signature: params.signature,
|
|
14
14
|
message: params.message,
|
|
@@ -8,11 +8,12 @@ import {
|
|
|
8
8
|
|
|
9
9
|
import { FirmwareUpdateTipMessage, UI_REQUEST, createUiMessage } from '../../events/ui-request';
|
|
10
10
|
import { DevicePool } from '../../device/DevicePool';
|
|
11
|
-
import { LoggerNames,
|
|
11
|
+
import { LoggerNames, getLogger, wait } from '../../utils';
|
|
12
12
|
import { DeviceModelToTypes } from '../../types';
|
|
13
13
|
import { DataManager } from '../../data-manager';
|
|
14
14
|
import { BaseMethod } from '../BaseMethod';
|
|
15
15
|
import { DEVICE } from '../../events';
|
|
16
|
+
import { createFirmwareProgressThrottle } from './progressThrottle';
|
|
16
17
|
|
|
17
18
|
import type {
|
|
18
19
|
IFirmwareUpdateProgressType,
|
|
@@ -40,6 +41,8 @@ const isDeviceDisconnectedError = (error: unknown) => {
|
|
|
40
41
|
export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
41
42
|
checkPromise: Deferred<any> | null = null;
|
|
42
43
|
|
|
44
|
+
private shouldPostFirmwareProgress = createFirmwareProgressThrottle();
|
|
45
|
+
|
|
43
46
|
init(): void {}
|
|
44
47
|
|
|
45
48
|
run(): Promise<any> {
|
|
@@ -83,6 +86,10 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
|
83
86
|
* @param progress Post the percentage of the progress
|
|
84
87
|
*/
|
|
85
88
|
postProgressMessage = (progress: number, progressType: IFirmwareUpdateProgressType) => {
|
|
89
|
+
if (!this.shouldPostFirmwareProgress(progress, progressType)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
|
|
86
93
|
this.postMessage(
|
|
87
94
|
createUiMessage(UI_REQUEST.FIRMWARE_PROGRESS, {
|
|
88
95
|
device: this.device.toMessageObject() as KnownDevice,
|
|
@@ -138,6 +145,8 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
|
138
145
|
// check device goto bootloader mode
|
|
139
146
|
let isFirstCheck = true;
|
|
140
147
|
let checkCount = 0;
|
|
148
|
+
let hasPromptedWebDevice = false;
|
|
149
|
+
let isPromptingWebDevice = false;
|
|
141
150
|
// eslint-disable-next-line prefer-const
|
|
142
151
|
let timeoutTimer: ReturnType<typeof setTimeout> | undefined;
|
|
143
152
|
|
|
@@ -158,23 +167,28 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
|
158
167
|
if (
|
|
159
168
|
checkCount > 4 &&
|
|
160
169
|
DataManager.isBrowserWebUsb(DataManager.getSettings('env')) &&
|
|
161
|
-
!this.payload.skipWebDevicePrompt
|
|
170
|
+
!this.payload.skipWebDevicePrompt &&
|
|
171
|
+
!hasPromptedWebDevice &&
|
|
172
|
+
!isPromptingWebDevice
|
|
162
173
|
) {
|
|
163
|
-
|
|
164
|
-
clearTimeout(timeoutTimer);
|
|
165
|
-
|
|
174
|
+
isPromptingWebDevice = true;
|
|
166
175
|
try {
|
|
167
176
|
this.postTipMessage(FirmwareUpdateTipMessage.SelectDeviceInBootloaderForWebDevice);
|
|
168
177
|
const confirmed = await this._promptDeviceInBootloaderForWebDevice();
|
|
178
|
+
hasPromptedWebDevice = true;
|
|
169
179
|
if (confirmed) {
|
|
170
180
|
await this._checkDeviceInBootloaderMode(connectId, intervalTimer, timeoutTimer);
|
|
171
181
|
}
|
|
172
182
|
} catch (e) {
|
|
183
|
+
clearInterval(intervalTimer);
|
|
184
|
+
clearTimeout(timeoutTimer);
|
|
173
185
|
Log.log(
|
|
174
186
|
'FirmwareUpdateBaseMethod [checkDeviceToBootloader] _promptDeviceInBootloaderForWebDevice failed: ',
|
|
175
187
|
e
|
|
176
188
|
);
|
|
177
189
|
this.checkPromise?.reject(e);
|
|
190
|
+
} finally {
|
|
191
|
+
isPromptingWebDevice = false;
|
|
178
192
|
}
|
|
179
193
|
return;
|
|
180
194
|
}
|
|
@@ -237,7 +251,7 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
|
237
251
|
async enterBootloaderMode() {
|
|
238
252
|
const typedCall = this.device.getCommands().typedCall.bind(this.device.getCommands());
|
|
239
253
|
if (this.device.features && !this.device.isBootloader()) {
|
|
240
|
-
const
|
|
254
|
+
const serialNo = this.device.getCurrentSerialNo();
|
|
241
255
|
const deviceType = this.device.getCurrentDeviceType();
|
|
242
256
|
// auto go to bootloader mode
|
|
243
257
|
try {
|
|
@@ -252,7 +266,7 @@ export class FirmwareUpdateBaseMethod<Params> extends BaseMethod<Params> {
|
|
|
252
266
|
|
|
253
267
|
// force clean classic device cache so that the device can initialize again
|
|
254
268
|
if (DeviceModelToTypes.model_classic.includes(deviceType)) {
|
|
255
|
-
DevicePool.clearDeviceCache(
|
|
269
|
+
DevicePool.clearDeviceCache(serialNo);
|
|
256
270
|
}
|
|
257
271
|
delete DevicePool.devicesCache[''];
|
|
258
272
|
await this.checkPromise?.promise;
|