@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/utils/tracing.ts"],"names":[],"mappings":"AAmBA,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AASD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/E;AAOD,MAAM,WAAW,cAAc;IAE7B,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;IAEnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,iBAAiB;IAEhC,aAAa,EAAE,MAAM,CAAC;IAEtB,SAAS,EAAE,MAAM,CAAC;IAElB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC7C;AAWD,wBAAgB,uBAAuB,IAAI,iBAAiB,CAW3D;AAQD,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACA,cAAc,CAyBhB;AAKD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAK/F;AAKD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/utils/tracing.ts"],"names":[],"mappings":"AAmBA,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AASD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAK/E;AAOD,MAAM,WAAW,cAAc;IAE7B,UAAU,EAAE,MAAM,CAAC;IAEnB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;IAEnE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,iBAAiB;IAEhC,aAAa,EAAE,MAAM,CAAC;IAEtB,SAAS,EAAE,MAAM,CAAC;IAElB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC7C;AAWD,wBAAgB,uBAAuB,IAAI,iBAAiB,CAW3D;AAQD,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GACA,cAAc,CAyBhB;AAKD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAK/F;AAKD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAyB9E;AAOD,wBAAgB,iCAAiC,CAAC,gBAAgB,EAAE,MAAM,GAAG,cAAc,EAAE,CAI5F;AAOD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAmBpE;AAOD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAW9D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/hd-core",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.21",
|
|
4
4
|
"description": "Core processes and APIs for communicating with OneKey hardware devices.",
|
|
5
5
|
"author": "OneKey",
|
|
6
6
|
"homepage": "https://github.com/OneKeyHQ/hardware-js-sdk#readme",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"url": "https://github.com/OneKeyHQ/hardware-js-sdk/issues"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@onekeyfe/hd-shared": "1.2.0-alpha.
|
|
29
|
-
"@onekeyfe/hd-transport": "1.2.0-alpha.
|
|
28
|
+
"@onekeyfe/hd-shared": "1.2.0-alpha.21",
|
|
29
|
+
"@onekeyfe/hd-transport": "1.2.0-alpha.21",
|
|
30
30
|
"axios": "1.15.2",
|
|
31
31
|
"bignumber.js": "^9.0.2",
|
|
32
32
|
"bytebuffer": "^5.0.1",
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"@types/w3c-web-usb": "^1.0.10",
|
|
45
45
|
"@types/web-bluetooth": "^0.0.21"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "efe594367fb3b196a5126baee7e2aba3e94986cd"
|
|
48
48
|
}
|
package/src/api/BaseMethod.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
import {
|
|
3
|
+
ERRORS,
|
|
4
|
+
HardwareErrorCode,
|
|
3
5
|
createDeviceNotSupportMethodError,
|
|
4
6
|
createNeedUpgradeFirmwareHardwareError,
|
|
5
7
|
} from '@onekeyfe/hd-shared';
|
|
8
|
+
import { Enum_SafetyCheckLevel } from '@onekeyfe/hd-transport';
|
|
6
9
|
|
|
7
10
|
import { createDeviceMessage } from '../events/device';
|
|
8
11
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
9
12
|
import { DEVICE, FIRMWARE, createFirmwareMessage, createUiMessage } from '../events';
|
|
10
13
|
import { getHDPath, toHardened } from './helpers/pathUtils';
|
|
11
14
|
import { getBleFirmwareReleaseInfo, getFirmwareReleaseInfo } from './firmware/releaseHelper';
|
|
12
|
-
import { LoggerNames,
|
|
15
|
+
import { LoggerNames, getLogger, isMethodVersionRangeUnsupported } from '../utils';
|
|
13
16
|
import { generateInstanceId } from '../utils/tracing';
|
|
14
17
|
import { DeviceModelToTypes } from '../types';
|
|
15
18
|
|
|
@@ -17,9 +20,13 @@ import type { Device } from '../device/Device';
|
|
|
17
20
|
import type DeviceConnector from '../device/DeviceConnector';
|
|
18
21
|
import type { DeviceFirmwareRange, KnownDevice } from '../types';
|
|
19
22
|
import type { CoreMessage } from '../events';
|
|
23
|
+
import type { ProtocolV2InteractionDescriptor } from '../protocols/protocol-v2/uiInteraction';
|
|
20
24
|
import type { RequestContext } from '../utils/tracing';
|
|
21
25
|
import type { CoreContext } from '../core';
|
|
22
26
|
|
|
27
|
+
export type UnlockPolicy = 'none' | 'retry-on-locked';
|
|
28
|
+
export type ProtocolV2UiMode = 'auto' | 'none';
|
|
29
|
+
|
|
23
30
|
const Log = getLogger(LoggerNames.Method);
|
|
24
31
|
|
|
25
32
|
const isEvmLedgerLegacyPathWithHighIndex = (path: unknown) => {
|
|
@@ -48,6 +55,8 @@ const isEvmLedgerLegacyPathWithHighIndex = (path: unknown) => {
|
|
|
48
55
|
const EVM_LEDGER_LEGACY_METHODS = ['evmGetAddress', 'evmGetPublicKey'];
|
|
49
56
|
|
|
50
57
|
export abstract class BaseMethod<Params = undefined> {
|
|
58
|
+
abortSignal?: AbortSignal;
|
|
59
|
+
|
|
51
60
|
responseID: number;
|
|
52
61
|
|
|
53
62
|
// @ts-expect-error
|
|
@@ -155,13 +164,31 @@ export abstract class BaseMethod<Params = undefined> {
|
|
|
155
164
|
strictCheckDeviceSupport = false;
|
|
156
165
|
|
|
157
166
|
/**
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
167
|
+
* Whether this method supports Protocol V2 devices (Pro2) only.
|
|
168
|
+
* Core enforces this after the protocol is established during acquire and initialize,
|
|
169
|
+
* so implementations do not need to repeat the check.
|
|
161
170
|
* @default false
|
|
162
171
|
*/
|
|
163
172
|
requireProtocolV2 = false;
|
|
164
173
|
|
|
174
|
+
/** Core unlocks and retries Protocol V2 business methods once when the device is locked. */
|
|
175
|
+
unlockPolicy: UnlockPolicy = 'retry-on-locked';
|
|
176
|
+
|
|
177
|
+
/** Non-blocking Protocol V2 interaction synthesized by the SDK. */
|
|
178
|
+
protocolV2UiInteraction?: ProtocolV2InteractionDescriptor;
|
|
179
|
+
|
|
180
|
+
/** Special background methods may suppress all synthesized Protocol V2 UI events. */
|
|
181
|
+
protocolV2UiMode: ProtocolV2UiMode = 'auto';
|
|
182
|
+
|
|
183
|
+
protected throwIfAborted() {
|
|
184
|
+
if (this.abortSignal?.aborted) {
|
|
185
|
+
throw ERRORS.TypedError(
|
|
186
|
+
HardwareErrorCode.CallQueueActionCancelled,
|
|
187
|
+
'Hardware operation cancelled'
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
165
192
|
// @ts-expect-error: strictPropertyInitialization
|
|
166
193
|
postMessage: (message: CoreMessage) => void;
|
|
167
194
|
|
|
@@ -225,11 +252,11 @@ export abstract class BaseMethod<Params = undefined> {
|
|
|
225
252
|
}
|
|
226
253
|
|
|
227
254
|
checkFirmwareRelease() {
|
|
228
|
-
//
|
|
229
|
-
// Pro2
|
|
255
|
+
// DataManager release metadata currently covers Protocol V1 devices only.
|
|
256
|
+
// firmwareUpdateV4 manages Pro2 updates, so skip them explicitly.
|
|
230
257
|
if (!this.device || this.device.isProtocolV2()) return;
|
|
231
258
|
if (!this.device.features) return;
|
|
232
|
-
const firmwareType =
|
|
259
|
+
const firmwareType = this.device.getCurrentFirmwareType();
|
|
233
260
|
const releaseInfo = getFirmwareReleaseInfo(this.device.features, firmwareType);
|
|
234
261
|
this.postMessage(
|
|
235
262
|
createFirmwareMessage(FIRMWARE.RELEASE_INFO, {
|
|
@@ -333,10 +360,10 @@ export abstract class BaseMethod<Params = undefined> {
|
|
|
333
360
|
if (this.shouldPromptSafetyCheckForEvmLedgerLegacyPath()) {
|
|
334
361
|
checkFlag = true;
|
|
335
362
|
}
|
|
336
|
-
if (checkFlag && this.device.getCurrentSafetyChecks() ===
|
|
363
|
+
if (checkFlag && this.device.getCurrentSafetyChecks() === Enum_SafetyCheckLevel.Strict) {
|
|
337
364
|
Log.debug('will change safety_checks level');
|
|
338
365
|
await this.device.commands.typedCall('ApplySettings', 'Success', {
|
|
339
|
-
safety_checks:
|
|
366
|
+
safety_checks: Enum_SafetyCheckLevel.PromptTemporarily,
|
|
340
367
|
});
|
|
341
368
|
this.temporarySafetyCheckPrompted = true;
|
|
342
369
|
return true;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { BaseMethod } from './BaseMethod';
|
|
2
2
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
3
3
|
import { getBootloaderReleaseInfo } from './firmware/releaseHelper';
|
|
4
|
-
import { getFirmwareType } from '../utils';
|
|
5
4
|
|
|
6
5
|
import type { CheckBootloaderReleaseParams } from '../types/api/checkBootloaderRelease';
|
|
7
6
|
|
|
@@ -19,7 +18,7 @@ export default class CheckBootloaderRelease extends BaseMethod {
|
|
|
19
18
|
const { features } = this.device;
|
|
20
19
|
const payload = this.payload as CheckBootloaderReleaseParams;
|
|
21
20
|
|
|
22
|
-
const deviceFirmwareType =
|
|
21
|
+
const deviceFirmwareType = this.device.getCurrentFirmwareType();
|
|
23
22
|
const firmwareType = payload.firmwareType ?? deviceFirmwareType;
|
|
24
23
|
|
|
25
24
|
const releaseInfo = getBootloaderReleaseInfo({
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { BaseMethod } from './BaseMethod';
|
|
2
2
|
import { UI_REQUEST } from '../constants/ui-request';
|
|
3
3
|
import { getFirmwareReleaseInfo } from './firmware/releaseHelper';
|
|
4
|
-
import { getFirmwareType } from '../utils';
|
|
5
4
|
|
|
6
5
|
import type { CheckFirmwareReleaseParams } from '../types/api/checkFirmwareRelease';
|
|
7
6
|
|
|
@@ -20,7 +19,7 @@ export default class CheckFirmwareRelease extends BaseMethod {
|
|
|
20
19
|
const payload = this.payload as CheckFirmwareReleaseParams;
|
|
21
20
|
|
|
22
21
|
if (this.device.features) {
|
|
23
|
-
const deviceFirmwareType =
|
|
22
|
+
const deviceFirmwareType = this.device.getCurrentFirmwareType();
|
|
24
23
|
const firmwareType = payload.firmwareType ?? deviceFirmwareType;
|
|
25
24
|
|
|
26
25
|
const releaseInfo = getFirmwareReleaseInfo(this.device.features, firmwareType);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { BaseMethod } from './BaseMethod';
|
|
2
|
+
import { deviceWalletSessionStore } from '../device/DeviceWalletSessionStore';
|
|
3
|
+
|
|
4
|
+
import type { ClearSessionCacheParams } from '../types/api/sessionCache';
|
|
5
|
+
|
|
6
|
+
export default class ClearSessionCache extends BaseMethod<ClearSessionCacheParams> {
|
|
7
|
+
init() {
|
|
8
|
+
this.useDevice = false;
|
|
9
|
+
this.useDevicePassphraseState = false;
|
|
10
|
+
this.skipForceUpdateCheck = true;
|
|
11
|
+
this.params = {
|
|
12
|
+
deviceId: this.payload.deviceId,
|
|
13
|
+
passphraseState: this.payload.passphraseState,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
run() {
|
|
18
|
+
const { deviceId, passphraseState } = this.params;
|
|
19
|
+
if (!deviceId) {
|
|
20
|
+
deviceWalletSessionStore.clear();
|
|
21
|
+
} else if (!passphraseState) {
|
|
22
|
+
deviceWalletSessionStore.deleteDevice(deviceId);
|
|
23
|
+
} else {
|
|
24
|
+
deviceWalletSessionStore.delete(deviceId, passphraseState);
|
|
25
|
+
}
|
|
26
|
+
return Promise.resolve({ cleared: true as const });
|
|
27
|
+
}
|
|
28
|
+
}
|
package/src/api/DirList.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseMethod } from './BaseMethod';
|
|
2
2
|
import {
|
|
3
|
-
validateNonEmptyString,
|
|
4
3
|
validateOptionalNonNegativeInteger,
|
|
4
|
+
validateProtocolV2FilesystemPath,
|
|
5
5
|
} from './helpers/filesystemValidation';
|
|
6
6
|
|
|
7
7
|
export type DirListParams = {
|
|
@@ -11,12 +11,14 @@ export type DirListParams = {
|
|
|
11
11
|
|
|
12
12
|
export default class DirList extends BaseMethod<DirListParams> {
|
|
13
13
|
init() {
|
|
14
|
-
// Protocol V2 (Pro2)
|
|
14
|
+
// Protocol V2 (Pro2) only; Core rejects non-V2 devices.
|
|
15
15
|
this.requireProtocolV2 = true;
|
|
16
16
|
this.skipForceUpdateCheck = true;
|
|
17
17
|
this.useDevicePassphraseState = false;
|
|
18
18
|
this.params = {
|
|
19
|
-
path:
|
|
19
|
+
path: validateProtocolV2FilesystemPath(this.payload.path, 'path', {
|
|
20
|
+
allowVolumeRoot: true,
|
|
21
|
+
}),
|
|
20
22
|
depth: validateOptionalNonNegativeInteger(this.payload.depth, 'depth'),
|
|
21
23
|
};
|
|
22
24
|
}
|
package/src/api/DirMake.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseMethod } from './BaseMethod';
|
|
2
|
-
import {
|
|
2
|
+
import { validateProtocolV2FilesystemPath } from './helpers/filesystemValidation';
|
|
3
3
|
|
|
4
4
|
export type DirMakeParams = {
|
|
5
5
|
path: string;
|
|
@@ -7,11 +7,11 @@ export type DirMakeParams = {
|
|
|
7
7
|
|
|
8
8
|
export default class DirMake extends BaseMethod<DirMakeParams> {
|
|
9
9
|
init() {
|
|
10
|
-
// Protocol V2 (Pro2)
|
|
10
|
+
// Protocol V2 (Pro2) only; Core rejects non-V2 devices.
|
|
11
11
|
this.requireProtocolV2 = true;
|
|
12
12
|
this.skipForceUpdateCheck = true;
|
|
13
13
|
this.useDevicePassphraseState = false;
|
|
14
|
-
this.params = { path:
|
|
14
|
+
this.params = { path: validateProtocolV2FilesystemPath(this.payload.path, 'path') };
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
async run() {
|
package/src/api/DirRemove.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseMethod } from './BaseMethod';
|
|
2
|
-
import {
|
|
2
|
+
import { validateProtocolV2FilesystemPath } from './helpers/filesystemValidation';
|
|
3
3
|
|
|
4
4
|
export type DirRemoveParams = {
|
|
5
5
|
path: string;
|
|
@@ -7,11 +7,11 @@ export type DirRemoveParams = {
|
|
|
7
7
|
|
|
8
8
|
export default class DirRemove extends BaseMethod<DirRemoveParams> {
|
|
9
9
|
init() {
|
|
10
|
-
// Protocol V2 (Pro2)
|
|
10
|
+
// Protocol V2 (Pro2) only; Core rejects non-V2 devices.
|
|
11
11
|
this.requireProtocolV2 = true;
|
|
12
12
|
this.skipForceUpdateCheck = true;
|
|
13
13
|
this.useDevicePassphraseState = false;
|
|
14
|
-
this.params = { path:
|
|
14
|
+
this.params = { path: validateProtocolV2FilesystemPath(this.payload.path, 'path') };
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
async run() {
|
package/src/api/FileDelete.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseMethod } from './BaseMethod';
|
|
2
|
-
import {
|
|
2
|
+
import { validateProtocolV2FilesystemPath } from './helpers/filesystemValidation';
|
|
3
3
|
|
|
4
4
|
export type FileDeleteParams = {
|
|
5
5
|
path: string;
|
|
@@ -7,11 +7,11 @@ export type FileDeleteParams = {
|
|
|
7
7
|
|
|
8
8
|
export default class FileDelete extends BaseMethod<FileDeleteParams> {
|
|
9
9
|
init() {
|
|
10
|
-
// Protocol V2 (Pro2)
|
|
10
|
+
// Protocol V2 (Pro2) only; Core rejects non-V2 devices.
|
|
11
11
|
this.requireProtocolV2 = true;
|
|
12
12
|
this.skipForceUpdateCheck = true;
|
|
13
13
|
this.useDevicePassphraseState = false;
|
|
14
|
-
this.params = { path:
|
|
14
|
+
this.params = { path: validateProtocolV2FilesystemPath(this.payload.path, 'path') };
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
async run() {
|
package/src/api/FileRead.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
PROTOCOL_V2_BLE_FILE_READ_CHUNK_SIZE,
|
|
3
3
|
PROTOCOL_V2_WEBUSB_FILE_CHUNK_SIZE,
|
|
4
4
|
} from '@onekeyfe/hd-transport';
|
|
5
5
|
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
6
6
|
|
|
7
7
|
import { BaseMethod } from './BaseMethod';
|
|
8
8
|
import {
|
|
9
|
-
validateNonEmptyString,
|
|
10
9
|
validateNonNegativeInteger,
|
|
11
10
|
validateOptionalNonNegativeInteger,
|
|
12
11
|
validateOptionalPercentage,
|
|
12
|
+
validateProtocolV2FilesystemPath,
|
|
13
13
|
} from './helpers/filesystemValidation';
|
|
14
14
|
import { hexToBytes, isHexString, stripHexPrefix } from './helpers/hexUtils';
|
|
15
15
|
import { DataManager } from '../data-manager';
|
|
@@ -27,7 +27,7 @@ const MIN_FILE_READ_CHUNK_SIZE = 64;
|
|
|
27
27
|
function getProtocolV2FileReadChunkLimit() {
|
|
28
28
|
const env = DataManager.getSettings('env');
|
|
29
29
|
if (env && DataManager.isBleConnect(env)) {
|
|
30
|
-
return
|
|
30
|
+
return PROTOCOL_V2_BLE_FILE_READ_CHUNK_SIZE;
|
|
31
31
|
}
|
|
32
32
|
return PROTOCOL_V2_WEBUSB_FILE_CHUNK_SIZE;
|
|
33
33
|
}
|
|
@@ -69,13 +69,30 @@ function toUint8Array(value: unknown): Uint8Array {
|
|
|
69
69
|
return new Uint8Array(0);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
function getDeviceTransferProgress(
|
|
73
|
+
bytesBeforeChunk: number,
|
|
74
|
+
bytesAfterChunk: number,
|
|
75
|
+
totalBytes: number
|
|
76
|
+
) {
|
|
77
|
+
if (!Number.isFinite(totalBytes) || totalBytes <= 0) {
|
|
78
|
+
return 100;
|
|
79
|
+
}
|
|
80
|
+
if (bytesBeforeChunk <= 0 && bytesAfterChunk < totalBytes) {
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
if (bytesAfterChunk >= totalBytes) {
|
|
84
|
+
return 100;
|
|
85
|
+
}
|
|
86
|
+
return Math.min(Math.max(Math.ceil((bytesAfterChunk / totalBytes) * 100), 1), 99);
|
|
87
|
+
}
|
|
88
|
+
|
|
72
89
|
export default class FileRead extends BaseMethod<FileReadParams> {
|
|
73
90
|
init() {
|
|
74
|
-
// Protocol V2 (Pro2)
|
|
91
|
+
// Protocol V2 (Pro2) only; Core rejects non-V2 devices.
|
|
75
92
|
this.requireProtocolV2 = true;
|
|
76
93
|
this.skipForceUpdateCheck = true;
|
|
77
94
|
this.useDevicePassphraseState = false;
|
|
78
|
-
const path =
|
|
95
|
+
const path = validateProtocolV2FilesystemPath(this.payload.path, 'path');
|
|
79
96
|
this.params = {
|
|
80
97
|
path,
|
|
81
98
|
offset: validateNonNegativeInteger(this.payload.offset, 'offset', 0),
|
|
@@ -123,8 +140,7 @@ export default class FileRead extends BaseMethod<FileReadParams> {
|
|
|
123
140
|
const readLen = Math.min(chunkSize, totalLength - read);
|
|
124
141
|
const offset = startOffset + read;
|
|
125
142
|
const progress =
|
|
126
|
-
this.params.uiPercentage ??
|
|
127
|
-
Math.min(Math.ceil(((read + readLen) / Math.max(totalLength, 1)) * 100), 99);
|
|
143
|
+
this.params.uiPercentage ?? getDeviceTransferProgress(read, read + readLen, totalLength);
|
|
128
144
|
const res = await this.device.commands.typedCall('FilesystemFileRead', 'FilesystemFile', {
|
|
129
145
|
file: {
|
|
130
146
|
path: this.params.path,
|
package/src/api/FileWrite.ts
CHANGED
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PROTOCOL_V2_BLE_FILE_CHUNK_SIZE,
|
|
3
|
-
PROTOCOL_V2_WEBUSB_FILE_CHUNK_SIZE,
|
|
4
|
-
} from '@onekeyfe/hd-transport';
|
|
5
|
-
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
6
|
-
|
|
7
1
|
import { BaseMethod } from './BaseMethod';
|
|
8
2
|
import {
|
|
9
|
-
validateNonEmptyString,
|
|
10
3
|
validateNonNegativeInteger,
|
|
11
4
|
validateOptionalNonNegativeInteger,
|
|
12
5
|
validateOptionalPercentage,
|
|
6
|
+
validateProtocolV2FilesystemPath,
|
|
13
7
|
validateRequiredData,
|
|
14
8
|
} from './helpers/filesystemValidation';
|
|
9
|
+
import { writeProtocolV2File } from './helpers/protocolV2FileWrite';
|
|
15
10
|
import { UI_REQUEST, createUiMessage } from '../events/ui-request';
|
|
16
|
-
import { DataManager } from '../data-manager';
|
|
17
11
|
|
|
18
12
|
export type FileWriteParams = {
|
|
19
13
|
path: string;
|
|
@@ -24,74 +18,19 @@ export type FileWriteParams = {
|
|
|
24
18
|
chunkLen?: number;
|
|
25
19
|
overwrite?: boolean;
|
|
26
20
|
append?: boolean;
|
|
21
|
+
emitProgress?: boolean;
|
|
27
22
|
uiPercentage?: number;
|
|
28
23
|
timeoutMs?: number | string;
|
|
29
24
|
};
|
|
30
25
|
|
|
31
|
-
const MIN_FILE_CHUNK_SIZE = 64;
|
|
32
|
-
|
|
33
|
-
function getProtocolV2FileChunkLimit() {
|
|
34
|
-
const env = DataManager.getSettings('env');
|
|
35
|
-
if (env && DataManager.isBleConnect(env)) {
|
|
36
|
-
return PROTOCOL_V2_BLE_FILE_CHUNK_SIZE;
|
|
37
|
-
}
|
|
38
|
-
return PROTOCOL_V2_WEBUSB_FILE_CHUNK_SIZE;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
async function dataToUint8Array(data: FileWriteParams['data'] | Blob): Promise<Uint8Array> {
|
|
42
|
-
if (typeof data === 'string') {
|
|
43
|
-
return new TextEncoder().encode(data);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (data instanceof ArrayBuffer) {
|
|
47
|
-
return new Uint8Array(data);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (ArrayBuffer.isView(data)) {
|
|
51
|
-
return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (typeof Blob !== 'undefined' && data instanceof Blob) {
|
|
55
|
-
return new Uint8Array(await data.arrayBuffer());
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
throw ERRORS.TypedError(
|
|
59
|
-
HardwareErrorCode.CallMethodInvalidParameter,
|
|
60
|
-
'Unsupported FilesystemFileWrite data'
|
|
61
|
-
);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function normalizeChunkSize(value: unknown, maxChunkSize: number): number {
|
|
65
|
-
const numeric = Number(value);
|
|
66
|
-
if (!Number.isFinite(numeric) || numeric <= 0) return maxChunkSize;
|
|
67
|
-
return Math.min(Math.max(Math.floor(numeric), MIN_FILE_CHUNK_SIZE), maxChunkSize);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function getConfirmedProgress(
|
|
71
|
-
processedByte: number,
|
|
72
|
-
totalSize: number,
|
|
73
|
-
written: number,
|
|
74
|
-
dataLength: number
|
|
75
|
-
) {
|
|
76
|
-
if (Number.isFinite(processedByte) && Number.isFinite(totalSize) && totalSize > 0) {
|
|
77
|
-
if (processedByte >= totalSize) return 100;
|
|
78
|
-
return Math.min(Math.max(Math.floor((processedByte / totalSize) * 100), 0), 99);
|
|
79
|
-
}
|
|
80
|
-
if (dataLength > 0) {
|
|
81
|
-
if (written >= dataLength) return 100;
|
|
82
|
-
return Math.min(Math.max(Math.floor((written / dataLength) * 100), 0), 99);
|
|
83
|
-
}
|
|
84
|
-
return 100;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
26
|
export default class FileWrite extends BaseMethod<FileWriteParams> {
|
|
88
27
|
init() {
|
|
89
|
-
// Protocol V2 (Pro2)
|
|
28
|
+
// Protocol V2 (Pro2) only; Core rejects non-V2 devices.
|
|
90
29
|
this.requireProtocolV2 = true;
|
|
91
30
|
this.skipForceUpdateCheck = true;
|
|
92
31
|
this.useDevicePassphraseState = false;
|
|
93
32
|
validateRequiredData(this.payload.data, 'data');
|
|
94
|
-
const path =
|
|
33
|
+
const path = validateProtocolV2FilesystemPath(this.payload.path, 'path');
|
|
95
34
|
const offset = validateNonNegativeInteger(this.payload.offset, 'offset', 0);
|
|
96
35
|
this.params = {
|
|
97
36
|
path,
|
|
@@ -102,115 +41,31 @@ export default class FileWrite extends BaseMethod<FileWriteParams> {
|
|
|
102
41
|
chunkLen: validateOptionalNonNegativeInteger(this.payload.chunkLen, 'chunkLen'),
|
|
103
42
|
overwrite: this.payload.overwrite ?? offset === 0,
|
|
104
43
|
append: this.payload.append ?? false,
|
|
44
|
+
emitProgress: this.payload.emitProgress ?? true,
|
|
105
45
|
uiPercentage: validateOptionalPercentage(this.payload.uiPercentage, 'uiPercentage'),
|
|
106
46
|
timeoutMs: validateOptionalNonNegativeInteger(this.payload.timeoutMs, 'timeoutMs'),
|
|
107
47
|
};
|
|
108
48
|
}
|
|
109
49
|
|
|
110
50
|
async run() {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const offsetValue = Number(this.params.offset ?? 0);
|
|
114
|
-
const startOffset = Number.isFinite(offsetValue) && offsetValue > 0 ? offsetValue : 0;
|
|
115
|
-
const payloadTotalSize = Number(this.params.totalSize);
|
|
116
|
-
const totalSize =
|
|
117
|
-
Number.isFinite(payloadTotalSize) && payloadTotalSize > 0
|
|
118
|
-
? payloadTotalSize
|
|
119
|
-
: startOffset + dataLength;
|
|
120
|
-
|
|
121
|
-
if (totalSize < startOffset + dataLength) {
|
|
122
|
-
throw ERRORS.TypedError(
|
|
123
|
-
HardwareErrorCode.RuntimeError,
|
|
124
|
-
`FilesystemFileWrite totalSize ${totalSize} is smaller than offset + data length ${
|
|
125
|
-
startOffset + dataLength
|
|
126
|
-
}`
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
const chunkSize = normalizeChunkSize(
|
|
131
|
-
this.params.chunkSize ?? this.params.chunkLen,
|
|
132
|
-
getProtocolV2FileChunkLimit()
|
|
133
|
-
);
|
|
134
|
-
const overwrite = this.params.overwrite ?? false;
|
|
135
|
-
const append = this.params.append ?? false;
|
|
136
|
-
let written = 0;
|
|
137
|
-
let chunkIndex = 0;
|
|
138
|
-
let lastMessage: Record<string, unknown> | undefined;
|
|
139
|
-
const startTime = Date.now();
|
|
140
|
-
const timeoutMs =
|
|
141
|
-
this.params.timeoutMs === undefined ? undefined : Number(this.params.timeoutMs);
|
|
142
|
-
|
|
143
|
-
while (written < dataLength) {
|
|
144
|
-
const chunkEnd = Math.min(written + chunkSize, dataLength);
|
|
145
|
-
const chunk = data.slice(written, chunkEnd);
|
|
146
|
-
const offset = startOffset + written;
|
|
147
|
-
const isFirstChunk = chunkIndex === 0;
|
|
148
|
-
const progress =
|
|
149
|
-
this.params.uiPercentage ??
|
|
150
|
-
Math.min(Math.ceil(((written + chunk.byteLength) / dataLength) * 100), 99);
|
|
151
|
-
|
|
152
|
-
const res = await this.device.commands.typedCall(
|
|
153
|
-
'FilesystemFileWrite',
|
|
154
|
-
'FilesystemFile',
|
|
155
|
-
{
|
|
156
|
-
file: {
|
|
157
|
-
path: this.params.path,
|
|
158
|
-
offset,
|
|
159
|
-
total_size: totalSize,
|
|
160
|
-
data: chunk,
|
|
161
|
-
},
|
|
162
|
-
overwrite: isFirstChunk ? overwrite : false,
|
|
163
|
-
append,
|
|
164
|
-
ui_percentage: progress,
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
timeoutMs,
|
|
168
|
-
}
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
lastMessage = res.message;
|
|
172
|
-
const processedByte = Number(res.message?.processed_byte);
|
|
173
|
-
if (Number.isFinite(processedByte) && processedByte > offset) {
|
|
174
|
-
written = processedByte - startOffset;
|
|
175
|
-
} else {
|
|
176
|
-
written += chunk.byteLength;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (written > dataLength) {
|
|
180
|
-
throw ERRORS.TypedError(
|
|
181
|
-
HardwareErrorCode.RuntimeError,
|
|
182
|
-
`FilesystemFileWrite invalid processed_byte ${processedByte}`
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const confirmedProcessedByte =
|
|
187
|
-
Number.isFinite(processedByte) && processedByte > offset
|
|
188
|
-
? processedByte
|
|
189
|
-
: startOffset + written;
|
|
190
|
-
if (typeof this.postMessage === 'function') {
|
|
191
|
-
const elapsedMs = Date.now() - startTime;
|
|
192
|
-
const transferredBytes = Math.min(written, dataLength);
|
|
193
|
-
this.postMessage(
|
|
194
|
-
createUiMessage(UI_REQUEST.DEVICE_PROGRESS, {
|
|
195
|
-
progress: getConfirmedProgress(confirmedProcessedByte, totalSize, written, dataLength),
|
|
196
|
-
transferredBytes,
|
|
197
|
-
totalBytes: dataLength,
|
|
198
|
-
rateBytesPerSecond:
|
|
199
|
-
elapsedMs > 0 ? Math.round((transferredBytes / elapsedMs) * 1000) : undefined,
|
|
200
|
-
elapsedMs,
|
|
201
|
-
})
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
chunkIndex += 1;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
return Promise.resolve({
|
|
208
|
-
...lastMessage,
|
|
51
|
+
return writeProtocolV2File({
|
|
52
|
+
commands: this.device.commands,
|
|
209
53
|
path: this.params.path,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
54
|
+
data: this.params.data,
|
|
55
|
+
offset: this.params.offset,
|
|
56
|
+
totalSize: this.params.totalSize,
|
|
57
|
+
chunkSize: this.params.chunkSize,
|
|
58
|
+
chunkLen: this.params.chunkLen,
|
|
59
|
+
overwrite: this.params.overwrite,
|
|
60
|
+
append: this.params.append,
|
|
61
|
+
uiPercentage: this.params.uiPercentage,
|
|
62
|
+
timeoutMs: this.params.timeoutMs === undefined ? undefined : Number(this.params.timeoutMs),
|
|
63
|
+
throwIfAborted: () => this.throwIfAborted(),
|
|
64
|
+
onProgress: payload => {
|
|
65
|
+
if (this.params.emitProgress && typeof this.postMessage === 'function') {
|
|
66
|
+
this.postMessage(createUiMessage(UI_REQUEST.DEVICE_PROGRESS, payload));
|
|
67
|
+
}
|
|
68
|
+
},
|
|
214
69
|
});
|
|
215
70
|
}
|
|
216
71
|
}
|
|
@@ -14,7 +14,7 @@ import { uploadFirmware } from './firmware/uploadFirmware';
|
|
|
14
14
|
import { createUiMessage } from '../events';
|
|
15
15
|
import { DeviceModelToTypes, type KnownDevice } from '../types';
|
|
16
16
|
import { isEnteredManuallyBoot } from './firmware/bootloaderHelper';
|
|
17
|
-
import { LoggerNames,
|
|
17
|
+
import { LoggerNames, getLogger, wait } from '../utils';
|
|
18
18
|
import { DataManager } from '../data-manager';
|
|
19
19
|
import { DevicePool } from '../device/DevicePool';
|
|
20
20
|
|
|
@@ -133,7 +133,7 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
|
|
|
133
133
|
const { features, commands } = device;
|
|
134
134
|
const deviceType = device.getCurrentDeviceType();
|
|
135
135
|
|
|
136
|
-
// Protocol V2 (Pro2)
|
|
136
|
+
// Protocol V2 (Pro2) uses DeviceFirmwareUpdate and must not enter this legacy flow.
|
|
137
137
|
if (device.isProtocolV2()) {
|
|
138
138
|
throw ERRORS.TypedError(
|
|
139
139
|
HardwareErrorCode.RuntimeError,
|
|
@@ -142,7 +142,7 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
if (!device.isBootloader() && features) {
|
|
145
|
-
const
|
|
145
|
+
const serialNo = device.getCurrentSerialNo();
|
|
146
146
|
// should go to bootloader mode manually
|
|
147
147
|
if (isEnteredManuallyBoot(features, params.updateType)) {
|
|
148
148
|
return Promise.reject(ERRORS.TypedError(HardwareErrorCode.FirmwareUpdateManuallyEnterBoot));
|
|
@@ -161,7 +161,7 @@ export default class FirmwareUpdate extends BaseMethod<Params> {
|
|
|
161
161
|
|
|
162
162
|
// force clean classic device cache so that the device can initialize again
|
|
163
163
|
if (DeviceModelToTypes.model_classic.includes(deviceType)) {
|
|
164
|
-
DevicePool.clearDeviceCache(
|
|
164
|
+
DevicePool.clearDeviceCache(serialNo);
|
|
165
165
|
}
|
|
166
166
|
delete DevicePool.devicesCache[''];
|
|
167
167
|
await this.checkPromise?.promise;
|