@onekeyfe/hd-core 1.1.34-alpha.2 → 1.1.34-alpha.3
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 +217 -0
- package/__tests__/RequestQueue.test.ts +140 -0
- package/__tests__/UploadPortfolio.test.ts +46 -0
- package/__tests__/connectSettings.test.ts +61 -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 +286 -0
- package/__tests__/device-state-mapper.test.ts +229 -0
- package/__tests__/device-utils.test.ts +106 -0
- package/__tests__/device-wallet-session-store.test.ts +191 -0
- package/__tests__/evmLedgerLegacySafety.test.ts +15 -4
- package/__tests__/evmSignTransaction.test.ts +1 -1
- package/__tests__/evmSignTypedData.test.ts +1 -1
- package/__tests__/filesystemValidation.test.ts +53 -0
- package/__tests__/firmware-update/firmware-artifact-source.test.ts +119 -0
- package/__tests__/firmware-update/firmware-checkpoint.test.ts +105 -0
- package/__tests__/firmware-update/firmware-host-binding.test.ts +73 -0
- package/__tests__/firmware-update/firmware-update-capabilities.test.ts +17 -0
- package/__tests__/firmware-update/firmware-update-plan.test.ts +358 -0
- package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +200 -0
- package/__tests__/firmware-update/firmware-update-recovery.test.ts +81 -0
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +48 -31
- package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
- package/__tests__/get-device-state.test.ts +403 -0
- package/__tests__/logBlockEvent.test.ts +61 -0
- package/__tests__/logger.test.ts +34 -0
- package/__tests__/open-wallet-session.test.ts +565 -0
- package/__tests__/preInitialize.test.ts +33 -0
- package/__tests__/pro2Wallpaper.test.ts +39 -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 +6008 -0
- package/__tests__/protocolV2FileWrite.test.ts +67 -0
- package/__tests__/public-pro2-api-boundary.test.ts +66 -0
- package/__tests__/search-devices.test.ts +136 -0
- package/dist/api/BaseMethod.d.ts +12 -0
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.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 +10 -0
- package/dist/api/DirList.d.ts.map +1 -0
- package/dist/api/DirMake.d.ts +9 -0
- package/dist/api/DirMake.d.ts.map +1 -0
- package/dist/api/DirRemove.d.ts +9 -0
- package/dist/api/DirRemove.d.ts.map +1 -0
- package/dist/api/FileDelete.d.ts +9 -0
- package/dist/api/FileDelete.d.ts.map +1 -0
- package/dist/api/FileRead.d.ts +19 -0
- package/dist/api/FileRead.d.ts.map +1 -0
- package/dist/api/FileWrite.d.ts +25 -0
- package/dist/api/FileWrite.d.ts.map +1 -0
- package/dist/api/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +14 -3
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts +10 -3
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +75 -0
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -0
- 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.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 +10 -0
- package/dist/api/PathInfo.d.ts.map +1 -0
- package/dist/api/PromptWebDeviceAccess.d.ts.map +1 -1
- package/dist/api/SearchDevices.d.ts +5 -1
- package/dist/api/SearchDevices.d.ts.map +1 -1
- package/dist/api/UploadPortfolio.d.ts +18 -0
- package/dist/api/UploadPortfolio.d.ts.map +1 -0
- package/dist/api/alephium/AlephiumGetAddress.d.ts +2 -6
- package/dist/api/alephium/AlephiumGetAddress.d.ts.map +1 -1
- package/dist/api/alephium/AlephiumSignMessage.d.ts +2 -5
- package/dist/api/alephium/AlephiumSignMessage.d.ts.map +1 -1
- package/dist/api/alephium/AlephiumSignTransaction.d.ts +5 -8
- package/dist/api/alephium/AlephiumSignTransaction.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/aptos/AptosGetAddress.d.ts.map +1 -1
- package/dist/api/benfen/BenfenGetAddress.d.ts +2 -9
- package/dist/api/benfen/BenfenGetAddress.d.ts.map +1 -1
- package/dist/api/benfen/BenfenGetPublicKey.d.ts +2 -9
- package/dist/api/benfen/BenfenGetPublicKey.d.ts.map +1 -1
- package/dist/api/benfen/BenfenSignMessage.d.ts +2 -8
- package/dist/api/benfen/BenfenSignMessage.d.ts.map +1 -1
- package/dist/api/benfen/BenfenSignTransaction.d.ts +2 -8
- package/dist/api/benfen/BenfenSignTransaction.d.ts.map +1 -1
- package/dist/api/btc/BTCGetAddress.d.ts +1 -11
- package/dist/api/btc/BTCGetAddress.d.ts.map +1 -1
- package/dist/api/btc/BTCGetPublicKey.d.ts +1 -11
- package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
- package/dist/api/btc/BTCSignMessage.d.ts +1 -15
- package/dist/api/btc/BTCSignMessage.d.ts.map +1 -1
- package/dist/api/btc/BTCSignPsbt.d.ts.map +1 -1
- package/dist/api/btc/BTCSignTransaction.d.ts +1 -11
- package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
- package/dist/api/btc/BTCVerifyMessage.d.ts +1 -11
- package/dist/api/btc/BTCVerifyMessage.d.ts.map +1 -1
- package/dist/api/btc/helpers/versionLimit.d.ts +2 -11
- package/dist/api/btc/helpers/versionLimit.d.ts.map +1 -1
- package/dist/api/cardano/CardanoSignTransaction.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxSignTransaction.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 +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/DeviceSupportFeatures.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 +7 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/device/DeviceUploadResource.d.ts.map +1 -1
- package/dist/api/device/DeviceVerify.d.ts.map +1 -1
- package/dist/api/device/DeviceWipe.d.ts.map +1 -1
- package/dist/api/dynex/DnxGetAddress.d.ts.map +1 -1
- package/dist/api/dynex/DnxSignTransaction.d.ts.map +1 -1
- package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
- package/dist/api/evm/EVMSignMessageEIP712.d.ts +2 -8
- package/dist/api/evm/EVMSignMessageEIP712.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
- package/dist/api/evm/latest/signTypedData.d.ts +1 -1
- package/dist/api/evm/latest/signTypedData.d.ts.map +1 -1
- package/dist/api/evm/latest/signTypedHash.d.ts.map +1 -1
- package/dist/api/evm/legacyV1/getAddress.d.ts.map +1 -1
- package/dist/api/evm/legacyV1/getPublicKey.d.ts.map +1 -1
- package/dist/api/evm/legacyV1/signMessage.d.ts.map +1 -1
- package/dist/api/evm/legacyV1/signTypedData.d.ts +1 -1
- package/dist/api/evm/legacyV1/signTypedData.d.ts.map +1 -1
- package/dist/api/evm/legacyV1/signTypedHash.d.ts.map +1 -1
- package/dist/api/evm/legacyV1/verifyMessage.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareArtifactSource.d.ts +26 -0
- package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareCheckpoint.d.ts +15 -0
- package/dist/api/firmware/FirmwareCheckpoint.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +10 -1
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts +3 -0
- package/dist/api/firmware/FirmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts +29 -0
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +25 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/api/firmware/bootloaderHelper.d.ts.map +1 -1
- package/dist/api/firmware/getBinary.d.ts +11 -0
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/progressThrottle.d.ts +3 -0
- package/dist/api/firmware/progressThrottle.d.ts.map +1 -0
- package/dist/api/firmware/updateBootloader.d.ts +2 -0
- package/dist/api/firmware/updateBootloader.d.ts.map +1 -1
- package/dist/api/firmware/uploadFirmware.d.ts +9 -1
- package/dist/api/firmware/uploadFirmware.d.ts.map +1 -1
- package/dist/api/helpers/batchGetPublickeys.d.ts +3 -0
- package/dist/api/helpers/batchGetPublickeys.d.ts.map +1 -1
- package/dist/api/helpers/filesystemValidation.d.ts +10 -0
- package/dist/api/helpers/filesystemValidation.d.ts.map +1 -0
- 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 +29 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
- package/dist/api/lightning/LnurlAuth.d.ts +4 -0
- package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
- package/dist/api/neo/NeoGetAddress.d.ts +2 -8
- package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
- package/dist/api/neo/NeoSignTransaction.d.ts +2 -8
- package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
- package/dist/api/nervos/NervosGetAddress.d.ts +2 -9
- package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
- package/dist/api/nervos/NervosSignTransaction.d.ts +9 -12
- package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
- package/dist/api/nexa/NexaGetAddress.d.ts +2 -8
- package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
- package/dist/api/nexa/NexaSignTransaction.d.ts +2 -9
- package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts +3 -0
- package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
- package/dist/api/polkadot/networks.d.ts +3 -0
- package/dist/api/polkadot/networks.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 +7 -0
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +7 -0
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +6 -0
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -0
- 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 +7 -0
- package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceSessionOpen.d.ts +28 -0
- package/dist/api/protocol-v2/DeviceSessionOpen.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceSettingsGet.d.ts +6 -0
- package/dist/api/protocol-v2/DeviceSettingsGet.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts +16 -0
- package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceSettingsSet.d.ts +12 -0
- package/dist/api/protocol-v2/DeviceSettingsSet.d.ts.map +1 -0
- 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 +6 -0
- package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -0
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +6 -0
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -0
- package/dist/api/protocol-v2/Ping.d.ts +8 -0
- package/dist/api/protocol-v2/Ping.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 +42 -0
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -0
- package/dist/api/scdo/ScdoGetAddress.d.ts +2 -6
- package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
- package/dist/api/scdo/ScdoSignMessage.d.ts +2 -5
- package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
- package/dist/api/scdo/ScdoSignTransaction.d.ts +2 -5
- package/dist/api/scdo/ScdoSignTransaction.d.ts.map +1 -1
- package/dist/api/solana/SolGetAddress.d.ts +1 -0
- package/dist/api/solana/SolGetAddress.d.ts.map +1 -1
- package/dist/api/solana/SolSignMessage.d.ts +3 -0
- package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts +3 -0
- package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
- package/dist/api/solana/SolSignTransaction.d.ts +6 -0
- package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
- package/dist/api/stellar/StellarGetAddress.d.ts +2 -1
- package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
- package/dist/api/stellar/StellarSignTransaction.d.ts +3 -2
- package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
- package/dist/api/sui/SuiGetAddress.d.ts +3 -0
- package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts +3 -0
- package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
- package/dist/api/sui/SuiSignMessage.d.ts +3 -0
- package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts +5 -2
- package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
- package/dist/api/ton/TonGetAddress.d.ts +3 -0
- package/dist/api/ton/TonGetAddress.d.ts.map +1 -1
- package/dist/api/ton/TonSignData.d.ts +1 -0
- package/dist/api/ton/TonSignData.d.ts.map +1 -1
- package/dist/api/ton/TonSignMessage.d.ts +3 -0
- package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
- package/dist/api/ton/TonSignProof.d.ts +3 -0
- package/dist/api/ton/TonSignProof.d.ts.map +1 -1
- package/dist/api/tron/TronSignMessage.d.ts +3 -0
- package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
- package/dist/api/tron/TronSignTransaction.d.ts +3 -0
- package/dist/api/tron/TronSignTransaction.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 +19 -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 +4 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/data-manager/DataManager.d.ts +9 -5
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/data-manager/MessagesConfig.d.ts +2 -2
- package/dist/data-manager/MessagesConfig.d.ts.map +1 -1
- package/dist/data-manager/TransportManager.d.ts +5 -4
- package/dist/data-manager/TransportManager.d.ts.map +1 -1
- package/dist/data-manager/connectSettings.d.ts.map +1 -1
- package/dist/device/Device.d.ts +60 -16
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +16 -14
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DeviceConnector.d.ts +2 -1
- package/dist/device/DeviceConnector.d.ts.map +1 -1
- package/dist/device/DeviceFeaturesState.d.ts +4 -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 +15 -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 +12 -0
- package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -0
- package/dist/deviceProfile/index.d.ts +2 -0
- package/dist/deviceProfile/index.d.ts.map +1 -0
- package/dist/events/call.d.ts +7 -0
- package/dist/events/call.d.ts.map +1 -1
- package/dist/events/core.d.ts +2 -2
- package/dist/events/core.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/iframe.d.ts +1 -0
- package/dist/events/iframe.d.ts.map +1 -1
- package/dist/events/logBlockEvent.d.ts +1 -0
- package/dist/events/logBlockEvent.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +26 -2
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/index.d.ts +1797 -451
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26905 -5611
- package/dist/inject.d.ts +3 -2
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts +2 -1
- package/dist/lowLevelInject.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 +88 -0
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/firmware.d.ts +15 -0
- package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/index.d.ts +5 -0
- package/dist/protocols/protocol-v2/index.d.ts.map +1 -0
- 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 +21 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -0
- package/dist/topLevelInject.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +4 -2
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/deviceSettings.d.ts +9 -0
- package/dist/types/api/deviceSettings.d.ts.map +1 -1
- package/dist/types/api/deviceUnlock.d.ts +1 -1
- package/dist/types/api/deviceUnlock.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +6 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +4 -1
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +114 -1
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdateCapabilities.d.ts +13 -0
- package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts +35 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +43 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
- 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 -1
- package/dist/types/api/getPassphraseState.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +48 -2
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/openWalletSession.d.ts +35 -0
- package/dist/types/api/openWalletSession.d.ts.map +1 -0
- package/dist/types/api/protocolV2.d.ts +113 -0
- package/dist/types/api/protocolV2.d.ts.map +1 -0
- package/dist/types/api/searchDevices.d.ts +2 -2
- package/dist/types/api/searchDevices.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 +207 -5
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/params.d.ts +3 -0
- package/dist/types/params.d.ts.map +1 -1
- package/dist/types/settings.d.ts +33 -0
- package/dist/types/settings.d.ts.map +1 -1
- package/dist/utils/capabilitieUtils.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 +17 -9
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/deviceInfoUtils.d.ts +10 -8
- package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
- package/dist/utils/deviceSettings.d.ts +2 -0
- 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/findDefectiveBatchDevice.d.ts +1 -1
- package/dist/utils/homescreen.d.ts.map +1 -1
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/patch.d.ts +1 -1
- package/dist/utils/patch.d.ts.map +1 -1
- package/dist/utils/pro2Wallpaper.d.ts +12 -0
- package/dist/utils/pro2Wallpaper.d.ts.map +1 -0
- package/dist/utils/tracing.d.ts.map +1 -1
- package/dist/utils/versionUtils.d.ts +1 -1
- package/package.json +4 -4
- package/src/api/BaseMethod.ts +60 -23
- package/src/api/CheckAllFirmwareRelease.ts +16 -3
- 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 +33 -0
- package/src/api/DirMake.ts +23 -0
- package/src/api/DirRemove.ts +23 -0
- package/src/api/FileDelete.ts +23 -0
- package/src/api/FileRead.ts +183 -0
- package/src/api/FileWrite.ts +71 -0
- package/src/api/FirmwareUpdate.ts +15 -7
- package/src/api/FirmwareUpdateV2.ts +354 -148
- package/src/api/FirmwareUpdateV3.ts +376 -62
- package/src/api/FirmwareUpdateV4.ts +2279 -0
- package/src/api/GetDeviceState.ts +55 -0
- package/src/api/GetFeatures.ts +12 -4
- package/src/api/GetOnekeyFeatures.ts +15 -3
- package/src/api/GetPassphraseState.ts +9 -10
- package/src/api/OpenWalletSession.ts +211 -0
- package/src/api/PathInfo.ts +41 -0
- package/src/api/PromptWebDeviceAccess.ts +10 -1
- package/src/api/SearchDevices.ts +33 -3
- package/src/api/UploadPortfolio.ts +50 -0
- package/src/api/alephium/AlephiumGetAddress.ts +6 -2
- package/src/api/alephium/AlephiumSignMessage.ts +6 -1
- package/src/api/alephium/AlephiumSignTransaction.ts +15 -4
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +25 -21
- package/src/api/aptos/AptosGetAddress.ts +2 -3
- package/src/api/benfen/BenfenGetAddress.ts +11 -7
- package/src/api/benfen/BenfenGetPublicKey.ts +6 -2
- package/src/api/benfen/BenfenSignMessage.ts +6 -1
- package/src/api/benfen/BenfenSignTransaction.ts +6 -1
- package/src/api/btc/BTCGetPublicKey.ts +3 -2
- package/src/api/btc/BTCSignPsbt.ts +1 -2
- package/src/api/btc/helpers/versionLimit.ts +7 -1
- package/src/api/cardano/CardanoSignTransaction.ts +2 -4
- package/src/api/conflux/ConfluxSignTransaction.ts +5 -2
- package/src/api/device/DeviceCancel.ts +1 -0
- package/src/api/device/DeviceChangePin.ts +24 -0
- package/src/api/device/DeviceFullyUploadResource.ts +6 -7
- package/src/api/device/DeviceLock.ts +2 -3
- package/src/api/device/DeviceRebootToBoardloader.ts +11 -1
- package/src/api/device/DeviceRebootToBootloader.ts +11 -1
- package/src/api/device/DeviceSettings.ts +121 -0
- package/src/api/device/DeviceSupportFeatures.ts +2 -13
- package/src/api/device/DeviceUnlock.ts +9 -0
- package/src/api/device/DeviceUpdateBootloader.ts +175 -11
- package/src/api/device/DeviceUploadResource.ts +4 -5
- package/src/api/device/DeviceVerify.ts +1 -2
- package/src/api/device/DeviceWipe.ts +19 -0
- package/src/api/dynex/DnxGetAddress.ts +6 -0
- package/src/api/dynex/DnxSignTransaction.ts +6 -0
- package/src/api/evm/EVMGetAddress.ts +1 -1
- package/src/api/evm/EVMGetPublicKey.ts +3 -4
- package/src/api/evm/EVMSignMessage.ts +1 -1
- package/src/api/evm/EVMSignMessageEIP712.ts +14 -1
- package/src/api/evm/EVMSignTransaction.ts +1 -1
- package/src/api/evm/EVMSignTypedData.ts +30 -18
- package/src/api/evm/EVMVerifyMessage.ts +1 -1
- package/src/api/evm/latest/signTypedHash.ts +2 -4
- package/src/api/evm/legacyV1/getAddress.ts +5 -3
- package/src/api/evm/legacyV1/getPublicKey.ts +5 -3
- package/src/api/evm/legacyV1/signMessage.ts +5 -3
- package/src/api/evm/legacyV1/signTypedData.ts +9 -8
- package/src/api/evm/legacyV1/signTypedHash.ts +7 -7
- package/src/api/evm/legacyV1/verifyMessage.ts +5 -3
- package/src/api/firmware/FirmwareArtifactSource.ts +278 -0
- package/src/api/firmware/FirmwareCheckpoint.ts +188 -0
- package/src/api/firmware/FirmwareHostBinding.ts +108 -0
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +83 -15
- package/src/api/firmware/FirmwareUpdateCapabilities.ts +13 -0
- package/src/api/firmware/FirmwareUpdatePlan.ts +729 -0
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +403 -0
- package/src/api/firmware/bootloaderHelper.ts +3 -2
- package/src/api/firmware/getBinary.ts +1 -1
- package/src/api/firmware/progressThrottle.ts +44 -0
- package/src/api/firmware/releaseHelper.ts +3 -3
- package/src/api/firmware/updateBootloader.ts +19 -4
- package/src/api/firmware/uploadFirmware.ts +148 -34
- package/src/api/helpers/batchGetPublickeys.ts +51 -6
- package/src/api/helpers/filesystemValidation.ts +112 -0
- package/src/api/helpers/protocolV2FileWrite.ts +193 -0
- package/src/api/index.ts +32 -0
- package/src/api/kaspa/KaspaSignTransaction.ts +2 -3
- package/src/api/lightning/LnurlAuth.ts +4 -0
- package/src/api/neo/NeoGetAddress.ts +6 -1
- package/src/api/neo/NeoSignTransaction.ts +6 -1
- package/src/api/nervos/NervosGetAddress.ts +6 -2
- package/src/api/nervos/NervosSignTransaction.ts +14 -4
- package/src/api/nexa/NexaGetAddress.ts +6 -2
- package/src/api/nexa/NexaSignTransaction.ts +11 -12
- package/src/api/polkadot/networks.ts +9 -0
- package/src/api/protocol-v2/DeviceFactoryInfoGet.ts +20 -0
- package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +32 -0
- package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +61 -0
- package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +55 -0
- package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +18 -0
- package/src/api/protocol-v2/DeviceInfoGet.ts +145 -0
- package/src/api/protocol-v2/DeviceReboot.ts +26 -0
- package/src/api/protocol-v2/DeviceSessionOpen.ts +102 -0
- package/src/api/protocol-v2/DeviceSettingsGet.ts +18 -0
- package/src/api/protocol-v2/DeviceSettingsPageShow.ts +70 -0
- package/src/api/protocol-v2/DeviceSettingsSet.ts +44 -0
- 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 +19 -0
- package/src/api/protocol-v2/FilesystemPermissionFix.ts +16 -0
- package/src/api/protocol-v2/Ping.ts +18 -0
- package/src/api/protocol-v2/ProtocolInfoRequest.ts +16 -0
- package/src/api/protocol-v2/helpers.ts +203 -0
- package/src/api/scdo/ScdoGetAddress.ts +6 -2
- package/src/api/scdo/ScdoSignMessage.ts +6 -1
- package/src/api/scdo/ScdoSignTransaction.ts +6 -2
- package/src/api/solana/SolGetAddress.ts +4 -0
- package/src/api/solana/SolSignMessage.ts +3 -0
- package/src/api/solana/SolSignOffchainMessage.ts +3 -0
- package/src/api/solana/SolSignTransaction.ts +6 -0
- package/src/api/stellar/StellarGetAddress.ts +10 -1
- package/src/api/stellar/StellarSignTransaction.ts +14 -1
- package/src/api/sui/SuiGetAddress.ts +5 -3
- package/src/api/sui/SuiGetPublicKey.ts +3 -0
- package/src/api/sui/SuiSignMessage.ts +3 -0
- package/src/api/sui/SuiSignTransaction.ts +14 -12
- package/src/api/ton/TonGetAddress.ts +3 -0
- package/src/api/ton/TonSignData.ts +6 -3
- package/src/api/ton/TonSignMessage.ts +6 -5
- package/src/api/ton/TonSignProof.ts +3 -0
- package/src/api/tron/TronSignMessage.ts +4 -1
- package/src/api/tron/TronSignTransaction.ts +3 -0
- package/src/api/utils.ts +7 -3
- package/src/api/xrp/XrpSignTransaction.ts +1 -1
- package/src/constants/index.ts +7 -1
- package/src/core/RequestQueue.ts +124 -4
- package/src/core/deviceEventRegistration.ts +23 -0
- package/src/core/index.ts +253 -125
- package/src/data/messages/messages-protocol-v2.json +13544 -0
- package/src/data-manager/DataManager.ts +61 -49
- package/src/data-manager/MessagesConfig.ts +14 -14
- package/src/data-manager/TransportManager.ts +38 -12
- package/src/data-manager/connectSettings.ts +15 -0
- package/src/device/Device.ts +759 -164
- package/src/device/DeviceCommands.ts +245 -36
- package/src/device/DeviceConnector.ts +29 -4
- package/src/device/DeviceFeaturesState.ts +34 -0
- package/src/device/DevicePool.ts +69 -21
- package/src/device/DeviceStateMapper.ts +348 -0
- package/src/device/DeviceStateProjector.ts +95 -0
- package/src/device/DeviceStateStore.ts +201 -0
- package/src/device/DeviceWalletSessionStore.ts +78 -0
- package/src/device/cloneDeviceState.ts +39 -0
- package/src/device/deviceIdentity.ts +18 -0
- package/src/deviceProfile/buildDeviceFeatures.ts +391 -0
- package/src/deviceProfile/index.ts +4 -0
- package/src/events/call.ts +6 -0
- package/src/events/core.ts +2 -0
- package/src/events/device.ts +17 -1
- package/src/events/iframe.ts +1 -0
- package/src/events/logBlockEvent.ts +30 -0
- package/src/events/ui-request.ts +32 -2
- package/src/index.ts +9 -0
- package/src/inject.ts +75 -3
- package/src/lowLevelInject.ts +8 -1
- package/src/protocols/protocol-v2/deviceSession.ts +24 -0
- package/src/protocols/protocol-v2/features.ts +163 -0
- package/src/protocols/protocol-v2/firmware.ts +21 -0
- package/src/protocols/protocol-v2/index.ts +18 -0
- 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 +202 -0
- package/src/topLevelInject.ts +7 -1
- package/src/types/api/checkAllFirmwareRelease.ts +4 -2
- package/src/types/api/deviceSettings.ts +9 -0
- package/src/types/api/deviceUnlock.ts +1 -1
- package/src/types/api/deviceUpdateBootloader.ts +10 -1
- package/src/types/api/export.ts +25 -0
- package/src/types/api/firmwareUpdate.ts +163 -1
- package/src/types/api/firmwareUpdateCapabilities.ts +13 -0
- package/src/types/api/firmwareUpdatePlan.ts +52 -0
- package/src/types/api/firmwareUpdatePreparedPlan.ts +55 -0
- 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 +10 -2
- package/src/types/api/index.ts +89 -2
- package/src/types/api/openWalletSession.ts +54 -0
- package/src/types/api/protocolV2.ts +244 -0
- package/src/types/api/searchDevices.ts +2 -2
- package/src/types/api/sessionCache.ts +14 -0
- package/src/types/device.ts +266 -5
- package/src/types/params.ts +11 -0
- package/src/types/settings.ts +54 -29
- package/src/utils/capabilitieUtils.ts +1 -2
- package/src/utils/deviceFeaturesCompat.ts +173 -0
- package/src/utils/deviceFeaturesUtils.ts +122 -84
- package/src/utils/deviceInfoUtils.ts +38 -87
- package/src/utils/deviceSettings.ts +48 -0
- package/src/utils/deviceVersionUtils.ts +25 -62
- package/src/utils/findDefectiveBatchDevice.ts +8 -8
- package/src/utils/homescreen.ts +10 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/pro2Wallpaper.ts +109 -0
- package/src/utils/tracing.ts +3 -1
|
@@ -3,19 +3,14 @@ import { blake2s } from '@noble/hashes/blake2s';
|
|
|
3
3
|
import JSZip from 'jszip';
|
|
4
4
|
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
LoggerNames,
|
|
9
|
-
getDeviceBootloaderVersion,
|
|
10
|
-
getDeviceType,
|
|
11
|
-
getLogger,
|
|
12
|
-
wait,
|
|
13
|
-
} from '../../utils';
|
|
6
|
+
import { LoggerNames, getDeviceBootloaderVersion, getLogger, wait } from '../../utils';
|
|
14
7
|
import { DEVICE, UI_REQUEST, createUiMessage } from '../../events';
|
|
15
8
|
import { DeviceModelToTypes } from '../../types';
|
|
16
9
|
import { bytesToHex } from '../helpers/hexUtils';
|
|
17
10
|
import { DataManager } from '../../data-manager';
|
|
18
11
|
import { DevicePool } from '../../device/DevicePool';
|
|
12
|
+
import { buildProtocolV1FeaturesPayload } from '../../deviceProfile';
|
|
13
|
+
import { openFirmwareByteSource, readFirmwareByteSourceFully } from './FirmwareArtifactSource';
|
|
19
14
|
|
|
20
15
|
import type { KnownDevice } from '../../types';
|
|
21
16
|
import type { TypedCall, TypedResponseMessage } from '../../device/DeviceCommands';
|
|
@@ -23,6 +18,7 @@ import type { PROTO } from '../../constants';
|
|
|
23
18
|
import type { CoreMessage, IFirmwareUpdateProgressType } from '../../events';
|
|
24
19
|
import type { Success } from '@onekeyfe/hd-transport';
|
|
25
20
|
import type { Device } from '../../device/Device';
|
|
21
|
+
import type { FirmwareByteSource } from './FirmwareArtifactSource';
|
|
26
22
|
|
|
27
23
|
const NEW_BOOT_UPRATE_FIRMWARE_VERSION = '2.4.5';
|
|
28
24
|
const SESSION_ERROR = 'session not found';
|
|
@@ -41,7 +37,7 @@ const isDeviceDisconnectedError = (error: unknown) => {
|
|
|
41
37
|
|
|
42
38
|
const postConfirmationMessage = (device: Device) => {
|
|
43
39
|
// only if firmware is already installed. fresh device does not require button confirmation
|
|
44
|
-
if (device.features?.
|
|
40
|
+
if (device.features?.firmwarePresent) {
|
|
45
41
|
device.emit(DEVICE.BUTTON, device, { code: 'ButtonRequest_FirmwareUpdate' });
|
|
46
42
|
}
|
|
47
43
|
};
|
|
@@ -94,20 +90,23 @@ export const waitBleInstall = async (updateType: string) => {
|
|
|
94
90
|
}
|
|
95
91
|
};
|
|
96
92
|
|
|
97
|
-
|
|
93
|
+
const toArrayBuffer = (payload: ArrayBuffer | Buffer): ArrayBuffer => {
|
|
94
|
+
if (payload instanceof ArrayBuffer) {
|
|
95
|
+
return payload;
|
|
96
|
+
}
|
|
97
|
+
return new Uint8Array(payload.buffer, payload.byteOffset, payload.byteLength).slice().buffer;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export const uploadFirmwareFromSource = async (
|
|
98
101
|
updateType: 'firmware' | 'ble',
|
|
99
102
|
typedCall: TypedCall,
|
|
100
103
|
postMessage: (message: CoreMessage) => void,
|
|
101
104
|
device: Device,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
rebootOnSuccess,
|
|
105
|
-
}: PROTO.FirmwareUpload & {
|
|
106
|
-
rebootOnSuccess?: boolean;
|
|
107
|
-
},
|
|
105
|
+
source: FirmwareByteSource,
|
|
106
|
+
rebootOnSuccess?: boolean,
|
|
108
107
|
isUpdateBootloader?: boolean
|
|
109
108
|
) => {
|
|
110
|
-
const deviceType =
|
|
109
|
+
const deviceType = device.getCurrentDeviceType();
|
|
111
110
|
if (DeviceModelToTypes.model_mini.includes(deviceType)) {
|
|
112
111
|
postConfirmationMessage(device);
|
|
113
112
|
postProgressTip(device, 'ConfirmOnDevice', postMessage);
|
|
@@ -116,27 +115,29 @@ export const uploadFirmware = async (
|
|
|
116
115
|
|
|
117
116
|
if (isFirmware && !isUpdateBootloader) {
|
|
118
117
|
const newFeatures = await typedCall('GetFeatures', 'Features', {});
|
|
119
|
-
const deviceBootloaderVersion = getDeviceBootloaderVersion(
|
|
118
|
+
const deviceBootloaderVersion = getDeviceBootloaderVersion(
|
|
119
|
+
buildProtocolV1FeaturesPayload(newFeatures.message, device.features)
|
|
120
|
+
).join('.');
|
|
120
121
|
const supportUpgradeFileHeader = semver.gte(deviceBootloaderVersion, '2.1.0');
|
|
121
122
|
Log.debug('supportUpgradeFileHeader:', supportUpgradeFileHeader);
|
|
122
123
|
|
|
123
124
|
if (supportUpgradeFileHeader) {
|
|
124
125
|
// Extract and validate firmware header (first 1KB)
|
|
125
126
|
const HEADER_SIZE = 1024;
|
|
126
|
-
if (
|
|
127
|
+
if (source.size < HEADER_SIZE) {
|
|
127
128
|
throw ERRORS.TypedError(
|
|
128
129
|
HardwareErrorCode.RuntimeError,
|
|
129
|
-
`firmware payload too small: ${
|
|
130
|
+
`firmware payload too small: ${source.size} bytes, expected at least ${HEADER_SIZE} bytes`
|
|
130
131
|
);
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
Log.debug('Uploading firmware header:', {
|
|
134
135
|
size: HEADER_SIZE,
|
|
135
|
-
totalSize:
|
|
136
|
+
totalSize: source.size,
|
|
136
137
|
});
|
|
137
138
|
postProgressTip(device, 'UploadingFirmwareHeader', postMessage);
|
|
138
139
|
|
|
139
|
-
const header = new Uint8Array(
|
|
140
|
+
const header = new Uint8Array(await source.readAt(0, HEADER_SIZE));
|
|
140
141
|
|
|
141
142
|
try {
|
|
142
143
|
const headerRes = await typedCall('UpgradeFileHeader', 'Success', {
|
|
@@ -173,6 +174,9 @@ export const uploadFirmware = async (
|
|
|
173
174
|
postProgressMessage(device, 0, 'installingFirmware', postMessage);
|
|
174
175
|
let updateResponse: TypedResponseMessage<'Success'>;
|
|
175
176
|
try {
|
|
177
|
+
// Classic/Mini bootloaders accept one protobuf payload and do not expose
|
|
178
|
+
// a request-range protocol. Other device families remain fully streamed.
|
|
179
|
+
const payload = await readFirmwareByteSourceFully(source);
|
|
176
180
|
updateResponse = await typedCall('FirmwareUpload', 'Success', {
|
|
177
181
|
payload,
|
|
178
182
|
});
|
|
@@ -204,9 +208,7 @@ export const uploadFirmware = async (
|
|
|
204
208
|
updateType,
|
|
205
209
|
postMessage,
|
|
206
210
|
device,
|
|
207
|
-
|
|
208
|
-
payload,
|
|
209
|
-
},
|
|
211
|
+
source,
|
|
210
212
|
rebootOnSuccess
|
|
211
213
|
);
|
|
212
214
|
return response.message;
|
|
@@ -215,7 +217,7 @@ export const uploadFirmware = async (
|
|
|
215
217
|
|
|
216
218
|
postConfirmationMessage(device);
|
|
217
219
|
postProgressTip(device, 'ConfirmOnDevice', postMessage);
|
|
218
|
-
const length =
|
|
220
|
+
const length = source.size;
|
|
219
221
|
|
|
220
222
|
let response = await typedCall('FirmwareErase', ['FirmwareRequest', 'Success'], { length });
|
|
221
223
|
postProgressTip(device, 'FirmwareEraseSuccess', postMessage);
|
|
@@ -224,7 +226,7 @@ export const uploadFirmware = async (
|
|
|
224
226
|
const start = response.message.offset!;
|
|
225
227
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
226
228
|
const end = response.message.offset! + response.message.length!;
|
|
227
|
-
const chunk =
|
|
229
|
+
const chunk = await source.readAt(start, end - start);
|
|
228
230
|
|
|
229
231
|
if (start > 0) {
|
|
230
232
|
postProgressMessage(
|
|
@@ -253,11 +255,45 @@ export const uploadFirmware = async (
|
|
|
253
255
|
throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'uploadFirmware: unknown device model');
|
|
254
256
|
};
|
|
255
257
|
|
|
258
|
+
export const uploadFirmware = async (
|
|
259
|
+
updateType: 'firmware' | 'ble',
|
|
260
|
+
typedCall: TypedCall,
|
|
261
|
+
postMessage: (message: CoreMessage) => void,
|
|
262
|
+
device: Device,
|
|
263
|
+
{
|
|
264
|
+
payload,
|
|
265
|
+
rebootOnSuccess,
|
|
266
|
+
}: PROTO.FirmwareUpload & {
|
|
267
|
+
rebootOnSuccess?: boolean;
|
|
268
|
+
},
|
|
269
|
+
isUpdateBootloader?: boolean
|
|
270
|
+
) => {
|
|
271
|
+
const source = await openFirmwareByteSource({
|
|
272
|
+
binary: toArrayBuffer(payload),
|
|
273
|
+
});
|
|
274
|
+
if (!source) {
|
|
275
|
+
throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'firmware payload is empty');
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
return await uploadFirmwareFromSource(
|
|
279
|
+
updateType,
|
|
280
|
+
typedCall,
|
|
281
|
+
postMessage,
|
|
282
|
+
device,
|
|
283
|
+
source,
|
|
284
|
+
rebootOnSuccess,
|
|
285
|
+
isUpdateBootloader
|
|
286
|
+
);
|
|
287
|
+
} finally {
|
|
288
|
+
await source.close();
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
|
|
256
292
|
const newTouchUpdateProcess = async (
|
|
257
293
|
updateType: 'firmware' | 'ble',
|
|
258
294
|
postMessage: (message: CoreMessage) => void,
|
|
259
295
|
device: Device,
|
|
260
|
-
|
|
296
|
+
source: FirmwareByteSource,
|
|
261
297
|
rebootOnSuccess = true
|
|
262
298
|
) => {
|
|
263
299
|
let typedCall = device.getCommands().typedCall.bind(device.getCommands());
|
|
@@ -267,13 +303,13 @@ const newTouchUpdateProcess = async (
|
|
|
267
303
|
const env = DataManager.getSettings('env');
|
|
268
304
|
const perPackageSize = DataManager.isBleConnect(env) ? 16 : 128;
|
|
269
305
|
const chunkSize = 1024 * perPackageSize;
|
|
270
|
-
const totalChunks = Math.ceil(
|
|
306
|
+
const totalChunks = Math.ceil(source.size / chunkSize);
|
|
271
307
|
let offset = 0;
|
|
272
308
|
for (let i = 0; i < totalChunks; i++) {
|
|
273
309
|
const chunkStart = i * chunkSize;
|
|
274
|
-
const chunkEnd = Math.min(chunkStart + chunkSize,
|
|
310
|
+
const chunkEnd = Math.min(chunkStart + chunkSize, source.size);
|
|
275
311
|
const chunkLength = chunkEnd - chunkStart;
|
|
276
|
-
const chunk =
|
|
312
|
+
const chunk = await source.readAt(chunkStart, chunkLength);
|
|
277
313
|
const overwrite = i === 0;
|
|
278
314
|
const progress = Math.round(((i + 1) / totalChunks) * 100);
|
|
279
315
|
const writeRes = await emmcFileWriteWithRetry(
|
|
@@ -429,7 +465,7 @@ const emmcFileWriteWithRetry = async (
|
|
|
429
465
|
const deviceDiff = await device.deviceConnector?.enumerate();
|
|
430
466
|
const devicesDescriptor = deviceDiff?.descriptors ?? [];
|
|
431
467
|
const { deviceList } = await DevicePool.getDevices(devicesDescriptor, undefined);
|
|
432
|
-
if (deviceList.length === 1 && deviceList[0]?.
|
|
468
|
+
if (deviceList.length === 1 && deviceList[0]?.isBootloader()) {
|
|
433
469
|
device.updateFromCache(deviceList[0]);
|
|
434
470
|
await device.acquire();
|
|
435
471
|
device.getCommands().mainId = device.mainId ?? '';
|
|
@@ -494,6 +530,67 @@ export const updateResource = async (
|
|
|
494
530
|
return processResourceRequest(typedCall, res, data);
|
|
495
531
|
};
|
|
496
532
|
|
|
533
|
+
export const updateResourceFromSource = async (
|
|
534
|
+
typedCall: TypedCall,
|
|
535
|
+
fileName: string,
|
|
536
|
+
source: FirmwareByteSource,
|
|
537
|
+
onConfirmAfter?: () => void
|
|
538
|
+
) => {
|
|
539
|
+
const initialLength = Math.min(INIT_DATA_CHUNK_SIZE, source.size);
|
|
540
|
+
const initialChunk = new Uint8Array(await source.readAt(0, initialLength));
|
|
541
|
+
let response = await typedCall('ResourceUpdate', ['ResourceRequest', 'Success'], {
|
|
542
|
+
file_name: fileName,
|
|
543
|
+
data_length: source.size,
|
|
544
|
+
initial_data_chunk: bytesToHex(initialChunk),
|
|
545
|
+
hash: bytesToHex(blake2s(initialChunk)),
|
|
546
|
+
});
|
|
547
|
+
onConfirmAfter?.();
|
|
548
|
+
|
|
549
|
+
while (response.type !== 'Success') {
|
|
550
|
+
const { offset, data_length: dataLength } = response.message;
|
|
551
|
+
if (
|
|
552
|
+
!Number.isSafeInteger(offset) ||
|
|
553
|
+
offset === undefined ||
|
|
554
|
+
offset < 0 ||
|
|
555
|
+
!Number.isSafeInteger(dataLength) ||
|
|
556
|
+
dataLength === undefined ||
|
|
557
|
+
dataLength <= 0 ||
|
|
558
|
+
offset + dataLength > source.size
|
|
559
|
+
) {
|
|
560
|
+
throw ERRORS.TypedError(
|
|
561
|
+
HardwareErrorCode.RuntimeError,
|
|
562
|
+
'Device requested an invalid firmware resource range'
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
const chunk = new Uint8Array(await source.readAt(offset, dataLength));
|
|
566
|
+
response = await typedCall('ResourceAck', ['ResourceRequest', 'Success'], {
|
|
567
|
+
data_chunk: bytesToHex(chunk),
|
|
568
|
+
hash: bytesToHex(blake2s(chunk)),
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
return response.message;
|
|
572
|
+
};
|
|
573
|
+
|
|
574
|
+
export const updateResourcesFromSources = async (
|
|
575
|
+
typedCall: TypedCall,
|
|
576
|
+
postMessage: (message: CoreMessage) => void,
|
|
577
|
+
device: Device,
|
|
578
|
+
entries: ReadonlyArray<{ entryName: string; source: FirmwareByteSource }>
|
|
579
|
+
) => {
|
|
580
|
+
postProgressTip(device, 'UpdateSysResource', postMessage);
|
|
581
|
+
for (const [index, entry] of entries.entries()) {
|
|
582
|
+
await updateResourceFromSource(typedCall, entry.entryName, entry.source);
|
|
583
|
+
postProgressMessage(
|
|
584
|
+
device,
|
|
585
|
+
Math.floor(((index + 1) / entries.length) * 100),
|
|
586
|
+
'installingFirmware',
|
|
587
|
+
postMessage
|
|
588
|
+
);
|
|
589
|
+
}
|
|
590
|
+
postProgressTip(device, 'UpdateSysResourceSuccess', postMessage);
|
|
591
|
+
return true;
|
|
592
|
+
};
|
|
593
|
+
|
|
497
594
|
export const updateResources = async (
|
|
498
595
|
typedCall: TypedCall,
|
|
499
596
|
postMessage: (message: CoreMessage) => void,
|
|
@@ -528,11 +625,28 @@ export const updateBootloader = async (
|
|
|
528
625
|
typedCall: TypedCall,
|
|
529
626
|
postMessage: (message: CoreMessage) => void,
|
|
530
627
|
device: Device,
|
|
531
|
-
|
|
628
|
+
data: ArrayBuffer
|
|
629
|
+
) => {
|
|
630
|
+
const source = await openFirmwareByteSource({ binary: data });
|
|
631
|
+
if (!source) {
|
|
632
|
+
throw ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'bootloader payload is empty');
|
|
633
|
+
}
|
|
634
|
+
try {
|
|
635
|
+
return await updateBootloaderFromSource(typedCall, postMessage, device, source);
|
|
636
|
+
} finally {
|
|
637
|
+
await source.close();
|
|
638
|
+
}
|
|
639
|
+
};
|
|
640
|
+
|
|
641
|
+
export const updateBootloaderFromSource = async (
|
|
642
|
+
typedCall: TypedCall,
|
|
643
|
+
postMessage: (message: CoreMessage) => void,
|
|
644
|
+
device: Device,
|
|
645
|
+
source: FirmwareByteSource
|
|
532
646
|
) => {
|
|
533
647
|
postProgressTip(device, 'UpdateBootloader', postMessage);
|
|
534
648
|
postProgressMessage(device, Math.floor(0), 'installingFirmware', postMessage);
|
|
535
|
-
await
|
|
649
|
+
await updateResourceFromSource(typedCall, 'bootloader.bin', source, () => {
|
|
536
650
|
postProcessingMessage('resource', postMessage);
|
|
537
651
|
});
|
|
538
652
|
postProgressMessage(device, Math.floor(100), 'installingFirmware', postMessage);
|
|
@@ -1,18 +1,63 @@
|
|
|
1
|
+
import semver from 'semver';
|
|
1
2
|
import {
|
|
3
|
+
EDeviceType,
|
|
2
4
|
HardwareErrorCode,
|
|
3
5
|
TypedError,
|
|
4
6
|
createDeviceNotSupportMethodError,
|
|
5
7
|
} from '@onekeyfe/hd-shared';
|
|
6
8
|
|
|
7
|
-
import { supportBatchPublicKey } from '../../utils/deviceFeaturesUtils';
|
|
8
9
|
import { isEqualBip44CoinType } from './pathUtils';
|
|
9
10
|
import { splitArray } from '../../utils/arrayUtils';
|
|
10
|
-
import { getDeviceType, getFirmwareType } from '../../utils';
|
|
11
11
|
import { DeviceModelToTypes } from '../../types';
|
|
12
12
|
|
|
13
13
|
import type { EcdsaPublicKeys, Path } from '@onekeyfe/hd-transport';
|
|
14
14
|
import type { Device } from '../../device/Device';
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Protocol-agnostic version of `supportBatchPublicKey` (utils/deviceFeaturesUtils):
|
|
18
|
+
* derives device type and firmware version through Device accessors so that
|
|
19
|
+
* Protocol V2 devices (features === undefined, profile set) resolve correctly.
|
|
20
|
+
*/
|
|
21
|
+
export function supportBatchPublicKeyByDevice(
|
|
22
|
+
device: Device,
|
|
23
|
+
options?: {
|
|
24
|
+
includeNode?: boolean;
|
|
25
|
+
}
|
|
26
|
+
): boolean {
|
|
27
|
+
const currentVersion = device.getCurrentFirmwareVersionString() ?? '0.0.0';
|
|
28
|
+
const deviceType = device.getCurrentDeviceType();
|
|
29
|
+
|
|
30
|
+
// Pro2 (Protocol V2) follows its own firmware line and has supported batch / include_node
|
|
31
|
+
// since its first firmware release, so it must not be gated by the Pro-series 4.x thresholds below.
|
|
32
|
+
if (device.isProtocolV2() || deviceType === EDeviceType.Pro2) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// btc batch get public key
|
|
37
|
+
if (!!options?.includeNode && deviceType === EDeviceType.Pro) {
|
|
38
|
+
return semver.gte(currentVersion, '4.14.0');
|
|
39
|
+
}
|
|
40
|
+
if (!!options?.includeNode && deviceType === EDeviceType.Touch) {
|
|
41
|
+
return semver.gte(currentVersion, '4.11.0');
|
|
42
|
+
}
|
|
43
|
+
if (!!options?.includeNode && DeviceModelToTypes.model_classic1s.includes(deviceType)) {
|
|
44
|
+
return semver.gte(currentVersion, '3.12.0');
|
|
45
|
+
}
|
|
46
|
+
if (!!options?.includeNode && DeviceModelToTypes.model_mini.includes(deviceType)) {
|
|
47
|
+
return semver.gte(currentVersion, '3.10.0');
|
|
48
|
+
}
|
|
49
|
+
if (options?.includeNode) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// support batch get public key
|
|
54
|
+
if (deviceType === EDeviceType.Touch || deviceType === EDeviceType.Pro) {
|
|
55
|
+
return semver.gte(currentVersion, '3.1.0');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return semver.gte(currentVersion, '2.6.0');
|
|
59
|
+
}
|
|
60
|
+
|
|
16
61
|
export async function batchGetPublickeys(
|
|
17
62
|
device: Device,
|
|
18
63
|
paths: Path[],
|
|
@@ -28,9 +73,9 @@ export async function batchGetPublickeys(
|
|
|
28
73
|
throw TypedError(HardwareErrorCode.ForbiddenKeyPath, 'Path length must be greater than 3');
|
|
29
74
|
}
|
|
30
75
|
|
|
31
|
-
const supportsBatchPublicKey =
|
|
76
|
+
const supportsBatchPublicKey = supportBatchPublicKeyByDevice(device, options);
|
|
32
77
|
if (!supportsBatchPublicKey) {
|
|
33
|
-
throw createDeviceNotSupportMethodError('BatchGetPublickeys',
|
|
78
|
+
throw createDeviceNotSupportMethodError('BatchGetPublickeys', device.getCurrentFirmwareType());
|
|
34
79
|
}
|
|
35
80
|
|
|
36
81
|
const existsPathNotEqualCoinType = paths.find(p => !isEqualBip44CoinType(p.address_n, coinType));
|
|
@@ -39,7 +84,7 @@ export async function batchGetPublickeys(
|
|
|
39
84
|
}
|
|
40
85
|
|
|
41
86
|
let batchSize = 10;
|
|
42
|
-
const deviceType =
|
|
87
|
+
const deviceType = device.getCurrentDeviceType();
|
|
43
88
|
if (DeviceModelToTypes.model_mini.includes(deviceType)) {
|
|
44
89
|
batchSize = 10;
|
|
45
90
|
} else if (DeviceModelToTypes.model_touch.includes(deviceType)) {
|
|
@@ -60,7 +105,7 @@ export async function batchGetPublickeys(
|
|
|
60
105
|
if (res.type !== 'EcdsaPublicKeys') {
|
|
61
106
|
throw createDeviceNotSupportMethodError(
|
|
62
107
|
'BatchGetPublickeys',
|
|
63
|
-
|
|
108
|
+
device.getCurrentFirmwareType()
|
|
64
109
|
);
|
|
65
110
|
} else {
|
|
66
111
|
result.root_fingerprint = res.message.root_fingerprint;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { ERRORS, HardwareErrorCode } from '@onekeyfe/hd-shared';
|
|
2
|
+
|
|
3
|
+
export const invalidParameter = (message: string) =>
|
|
4
|
+
ERRORS.TypedError(HardwareErrorCode.CallMethodInvalidParameter, message);
|
|
5
|
+
|
|
6
|
+
export function validateNonEmptyString(value: unknown, name: string): string {
|
|
7
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
8
|
+
throw invalidParameter(`Parameter [${name}] is required and must be a non-empty string.`);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const PROTOCOL_V2_FILESYSTEM_VOLUMES = new Set(['vol0', 'vol1']);
|
|
14
|
+
// Bootloader and romloader reserve 128 bytes including the terminating NUL.
|
|
15
|
+
const MAX_PROTOCOL_V2_FILESYSTEM_PATH_BYTES = 127;
|
|
16
|
+
|
|
17
|
+
function getUtf8ByteLength(value: string) {
|
|
18
|
+
return Array.from(value).reduce((length, character) => {
|
|
19
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
20
|
+
if (codePoint <= 0x7f) return length + 1;
|
|
21
|
+
if (codePoint <= 0x7ff) return length + 2;
|
|
22
|
+
if (codePoint <= 0xffff) return length + 3;
|
|
23
|
+
return length + 4;
|
|
24
|
+
}, 0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function validateProtocolV2FilesystemPath(
|
|
28
|
+
value: unknown,
|
|
29
|
+
name: string,
|
|
30
|
+
options: { allowVolumeRoot?: boolean } = {}
|
|
31
|
+
): string {
|
|
32
|
+
const rawPath = validateNonEmptyString(value, name).trim();
|
|
33
|
+
const containsUnsupportedCharacter = Array.from(rawPath).some(character => {
|
|
34
|
+
const codePoint = character.charCodeAt(0);
|
|
35
|
+
return codePoint <= 0x1f || codePoint === 0x7f || character === '\\';
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
if (containsUnsupportedCharacter) {
|
|
39
|
+
throw invalidParameter(`Parameter [${name}] contains unsupported path characters.`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const match = /^([a-zA-Z0-9]+):(.*)$/.exec(rawPath);
|
|
43
|
+
if (!match) {
|
|
44
|
+
throw invalidParameter(
|
|
45
|
+
`Parameter [${name}] must use a supported Protocol V2 filesystem volume.`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const volume = match[1].toLowerCase();
|
|
50
|
+
if (!PROTOCOL_V2_FILESYSTEM_VOLUMES.has(volume)) {
|
|
51
|
+
throw invalidParameter(`Parameter [${name}] uses an unsupported filesystem volume.`);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const rawSuffix = match[2];
|
|
55
|
+
if (rawSuffix.length === 0) {
|
|
56
|
+
if (options.allowVolumeRoot) return `${volume}:`;
|
|
57
|
+
throw invalidParameter(`Parameter [${name}] must identify a filesystem entry.`);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const suffix = rawSuffix.startsWith('/') ? rawSuffix : `/${rawSuffix}`;
|
|
61
|
+
const segments = suffix.slice(1).split('/');
|
|
62
|
+
if (segments.some(segment => segment.length === 0 || segment === '.' || segment === '..')) {
|
|
63
|
+
throw invalidParameter(`Parameter [${name}] contains an invalid path segment.`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const canonicalPath = `${volume}:${rawSuffix.startsWith('/') ? '/' : ''}${segments.join('/')}`;
|
|
67
|
+
if (getUtf8ByteLength(canonicalPath) > MAX_PROTOCOL_V2_FILESYSTEM_PATH_BYTES) {
|
|
68
|
+
throw invalidParameter(`Parameter [${name}] exceeds the maximum filesystem path length.`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return canonicalPath;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function validateNonNegativeInteger(
|
|
75
|
+
value: unknown,
|
|
76
|
+
name: string,
|
|
77
|
+
defaultValue?: number
|
|
78
|
+
): number {
|
|
79
|
+
if (value === undefined || value === null) {
|
|
80
|
+
if (defaultValue !== undefined) return defaultValue;
|
|
81
|
+
throw invalidParameter(`Missing required parameter: ${name}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const numeric = typeof value === 'string' && value.trim() !== '' ? Number(value) : value;
|
|
85
|
+
if (typeof numeric !== 'number' || !Number.isSafeInteger(numeric) || numeric < 0) {
|
|
86
|
+
throw invalidParameter(`Parameter [${name}] must be a non-negative integer.`);
|
|
87
|
+
}
|
|
88
|
+
return numeric;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function validateOptionalNonNegativeInteger(
|
|
92
|
+
value: unknown,
|
|
93
|
+
name: string
|
|
94
|
+
): number | undefined {
|
|
95
|
+
if (value === undefined || value === null) return undefined;
|
|
96
|
+
return validateNonNegativeInteger(value, name);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function validateOptionalPercentage(value: unknown, name: string): number | undefined {
|
|
100
|
+
const numeric = validateOptionalNonNegativeInteger(value, name);
|
|
101
|
+
if (numeric === undefined) return undefined;
|
|
102
|
+
if (numeric > 100) {
|
|
103
|
+
throw invalidParameter(`Parameter [${name}] must be between 0 and 100.`);
|
|
104
|
+
}
|
|
105
|
+
return numeric;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function validateRequiredData(value: unknown, name: string): void {
|
|
109
|
+
if (value === undefined || value === null) {
|
|
110
|
+
throw invalidParameter(`Missing required parameter: ${name}`);
|
|
111
|
+
}
|
|
112
|
+
}
|