@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
|
@@ -13,14 +13,11 @@ import { PROTOBUF_MESSAGE_CONFIG } from '../data-manager/MessagesConfig';
|
|
|
13
13
|
import { getDeviceType } from './deviceInfoUtils';
|
|
14
14
|
import { getDeviceFirmwareVersion } from './deviceVersionUtils';
|
|
15
15
|
import { existCapability } from './capabilitieUtils';
|
|
16
|
+
import { getProtocolV2WalletSession } from '../protocols/protocol-v2/walletSession';
|
|
16
17
|
|
|
17
18
|
import type { Device } from '../device/Device';
|
|
18
19
|
import type { Features, IDeviceType, SupportFeatureType } from '../types';
|
|
19
20
|
|
|
20
|
-
// 生成的 GetPassphraseState 已包含 _only_main_pin / allow_create_attach_pin,
|
|
21
|
-
// 不再需要手动扩展字段。
|
|
22
|
-
type GetPassphraseStateMessage = GetPassphraseState;
|
|
23
|
-
|
|
24
21
|
export const getSupportProtocolV1MessageSchema = (
|
|
25
22
|
features: Features | undefined
|
|
26
23
|
): { messages: JSON; protocolV1MessageSchema: ProtocolV1MessageSchema } => {
|
|
@@ -33,6 +30,18 @@ export const getSupportProtocolV1MessageSchema = (
|
|
|
33
30
|
const currentDeviceVersion = getDeviceFirmwareVersion(features).join('.');
|
|
34
31
|
const deviceType = getDeviceType(features);
|
|
35
32
|
|
|
33
|
+
// In bootloader mode the major/minor/patch fields carry the bootloader version, not the
|
|
34
|
+
// firmware version; normalizing them would mis-route to the legacy schema (e.g. 2.x < 3.3.0).
|
|
35
|
+
// The legacy getDeviceFirmwareVersion returned 0.0.0 here and landed on v1CurrentSchema, so
|
|
36
|
+
// force v1CurrentSchema for every bootloader device, including in-place upgrades on
|
|
37
|
+
// Classic1s/Touch/Pro where firmware is still present.
|
|
38
|
+
if (features.bootloaderMode === true) {
|
|
39
|
+
return {
|
|
40
|
+
messages: DataManager.messages.v1CurrentSchema,
|
|
41
|
+
protocolV1MessageSchema: 'v1CurrentSchema',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
36
45
|
const deviceVersionConfigs =
|
|
37
46
|
PROTOBUF_MESSAGE_CONFIG[deviceType] ||
|
|
38
47
|
(DeviceTypeToModels[deviceType] &&
|
|
@@ -58,11 +67,15 @@ export const getSupportProtocolV1MessageSchema = (
|
|
|
58
67
|
};
|
|
59
68
|
};
|
|
60
69
|
|
|
61
|
-
export const supportInputPinOnSoftware = (features
|
|
70
|
+
export const supportInputPinOnSoftware = (features?: Features): SupportFeatureType => {
|
|
62
71
|
if (!features) return { support: false };
|
|
63
72
|
|
|
64
73
|
const deviceType = getDeviceType(features);
|
|
65
|
-
if (
|
|
74
|
+
if (
|
|
75
|
+
deviceType === EDeviceType.Touch ||
|
|
76
|
+
deviceType === EDeviceType.Pro ||
|
|
77
|
+
deviceType === EDeviceType.Pro2
|
|
78
|
+
) {
|
|
66
79
|
return { support: false };
|
|
67
80
|
}
|
|
68
81
|
|
|
@@ -92,13 +105,33 @@ export const getPassphraseStateWithRefreshDeviceInfo = async (
|
|
|
92
105
|
options?: {
|
|
93
106
|
expectPassphraseState?: string;
|
|
94
107
|
onlyMainPin?: boolean;
|
|
95
|
-
|
|
108
|
+
initSession?: boolean;
|
|
96
109
|
}
|
|
97
110
|
) => {
|
|
111
|
+
if (device.isProtocolV2()) {
|
|
112
|
+
if (!device.features) {
|
|
113
|
+
return {
|
|
114
|
+
passphraseState: undefined,
|
|
115
|
+
newSession: undefined,
|
|
116
|
+
unlockedAttachPin: undefined,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return getProtocolV2WalletSession(device, {
|
|
121
|
+
initSession: options?.initSession,
|
|
122
|
+
expectedPassphraseState: options?.expectPassphraseState,
|
|
123
|
+
onlyMainPin: options?.onlyMainPin,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
98
127
|
const { features } = device;
|
|
99
128
|
const locked = features?.unlocked === false;
|
|
100
129
|
const deviceType = device.getCurrentDeviceType();
|
|
101
130
|
|
|
131
|
+
if (options?.initSession) {
|
|
132
|
+
device.clearInternalState();
|
|
133
|
+
}
|
|
134
|
+
|
|
102
135
|
const { passphraseState, newSession, unlockedAttachPin } = await getPassphraseState(device, {
|
|
103
136
|
...options,
|
|
104
137
|
});
|
|
@@ -128,14 +161,17 @@ export const getPassphraseStateWithRefreshDeviceInfo = async (
|
|
|
128
161
|
passphraseState,
|
|
129
162
|
deviceId,
|
|
130
163
|
newSession,
|
|
131
|
-
device.features?.sessionId
|
|
164
|
+
options?.initSession ? null : device.features?.sessionId
|
|
132
165
|
);
|
|
133
166
|
|
|
134
|
-
return {
|
|
167
|
+
return {
|
|
168
|
+
passphraseState,
|
|
169
|
+
newSession,
|
|
170
|
+
unlockedAttachPin: unlockedAttachPin ?? device.features?.unlockedAttachPin,
|
|
171
|
+
};
|
|
135
172
|
};
|
|
136
173
|
|
|
137
|
-
//
|
|
138
|
-
// (Pro2 在 getPassphraseState 中通过 isProtocolV2 直接判定支持)。
|
|
174
|
+
// Applies to Protocol V1 Pro only; Pro2 has an independent version line.
|
|
139
175
|
const supportProSeriesAttachPinPassphrase = (deviceType: IDeviceType, firmwareVersion: string) =>
|
|
140
176
|
deviceType === EDeviceType.Pro && semver.gte(firmwareVersion, '4.15.0');
|
|
141
177
|
|
|
@@ -144,7 +180,7 @@ export const getPassphraseState = async (
|
|
|
144
180
|
options?: {
|
|
145
181
|
expectPassphraseState?: string;
|
|
146
182
|
onlyMainPin?: boolean;
|
|
147
|
-
|
|
183
|
+
initSession?: boolean;
|
|
148
184
|
}
|
|
149
185
|
): Promise<{
|
|
150
186
|
passphraseState: string | undefined;
|
|
@@ -153,31 +189,32 @@ export const getPassphraseState = async (
|
|
|
153
189
|
}> => {
|
|
154
190
|
const { features, commands } = device;
|
|
155
191
|
|
|
156
|
-
//
|
|
192
|
+
// Preserve legacy empty-result semantics until the device has established state.
|
|
157
193
|
if (!features)
|
|
158
194
|
return { passphraseState: undefined, newSession: undefined, unlockedAttachPin: undefined };
|
|
159
195
|
|
|
160
196
|
const firmwareVersion = device.getCurrentFirmwareVersionString() ?? '0.0.0';
|
|
161
197
|
const deviceType = device.getCurrentDeviceType();
|
|
162
198
|
|
|
199
|
+
if (device.isProtocolV2()) {
|
|
200
|
+
return getProtocolV2WalletSession(device, {
|
|
201
|
+
initSession: options?.initSession,
|
|
202
|
+
expectedPassphraseState: options?.expectPassphraseState,
|
|
203
|
+
onlyMainPin: options?.onlyMainPin,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
|
|
163
207
|
const supportAttachPinCapability = existCapability(
|
|
164
208
|
features,
|
|
165
209
|
Enum_Capability.Capability_AttachToPin
|
|
166
210
|
);
|
|
167
|
-
// Pro2 (Protocol V2) 协议自带 GetPassphraseState(10028),固件从首个版本即支持,
|
|
168
|
-
// 不依赖 Pro 系列的 4.15.0 版本线;V2 也没有 GetAddress Testnet 探测这条 legacy 回退路径。
|
|
169
211
|
const supportGetPassphraseState =
|
|
170
|
-
|
|
171
|
-
supportAttachPinCapability ||
|
|
172
|
-
supportProSeriesAttachPinPassphrase(deviceType, firmwareVersion);
|
|
212
|
+
supportAttachPinCapability || supportProSeriesAttachPinPassphrase(deviceType, firmwareVersion);
|
|
173
213
|
|
|
174
214
|
if (supportGetPassphraseState) {
|
|
175
|
-
const payload:
|
|
176
|
-
?
|
|
177
|
-
|
|
178
|
-
if (options?.allowCreateAttachPin) {
|
|
179
|
-
payload.allow_create_attach_pin = true;
|
|
180
|
-
}
|
|
215
|
+
const payload: GetPassphraseState = {
|
|
216
|
+
passphrase_state: options?.onlyMainPin ? undefined : options?.expectPassphraseState,
|
|
217
|
+
};
|
|
181
218
|
|
|
182
219
|
const { message, type } = await commands.typedCall(
|
|
183
220
|
'GetPassphraseState',
|
|
@@ -276,6 +313,9 @@ export const getFirmwareUpdateField = ({
|
|
|
276
313
|
if (deviceType === EDeviceType.Pro) {
|
|
277
314
|
return latestFirmwareField;
|
|
278
315
|
}
|
|
316
|
+
if (deviceType === EDeviceType.Pro2) {
|
|
317
|
+
return 'firmware-v1';
|
|
318
|
+
}
|
|
279
319
|
return 'firmware';
|
|
280
320
|
};
|
|
281
321
|
/**
|
|
@@ -319,6 +359,10 @@ export const getFirmwareUpdateFieldArray = (
|
|
|
319
359
|
return ['firmware-v8'];
|
|
320
360
|
}
|
|
321
361
|
|
|
362
|
+
if (deviceType === 'pro2') {
|
|
363
|
+
return ['firmware-v1'];
|
|
364
|
+
}
|
|
365
|
+
|
|
322
366
|
return ['firmware'];
|
|
323
367
|
};
|
|
324
368
|
|
|
@@ -1,51 +1,22 @@
|
|
|
1
1
|
import { isEmpty } from 'lodash';
|
|
2
|
-
import { EDeviceType
|
|
3
|
-
import { Enum_Capability } from '@onekeyfe/hd-transport';
|
|
2
|
+
import { EDeviceType } from '@onekeyfe/hd-shared';
|
|
4
3
|
|
|
5
4
|
import { DeviceModelToTypes } from '../types';
|
|
6
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
resolveDeviceBleName,
|
|
7
|
+
resolveDeviceFirmwareType,
|
|
8
|
+
resolveDeviceSerialNo,
|
|
9
|
+
resolveDeviceType,
|
|
10
|
+
} from './deviceFeaturesCompat';
|
|
7
11
|
|
|
8
|
-
import type {
|
|
12
|
+
import type { IDeviceModel, IDeviceType, IVersionRange } from '../types';
|
|
13
|
+
import type { DeviceFeaturesInput } from './deviceFeaturesCompat';
|
|
9
14
|
|
|
10
15
|
/**
|
|
11
16
|
* get device type by features
|
|
12
17
|
*/
|
|
13
|
-
export const getDeviceType = (features?:
|
|
14
|
-
|
|
15
|
-
return EDeviceType.Unknown;
|
|
16
|
-
}
|
|
17
|
-
if (features.deviceType) {
|
|
18
|
-
return features.deviceType;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (features.model === EDeviceType.Pro2 || features.model === 'pro2') {
|
|
22
|
-
return EDeviceType.Pro2;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// low version hardware
|
|
26
|
-
// onekey_serial_no > onekey_serial > serial_no
|
|
27
|
-
const serialNo = getDeviceUUID(features);
|
|
28
|
-
|
|
29
|
-
// not exist serialNo, bootloader mode, model 1 is classic
|
|
30
|
-
if (isEmpty(serialNo) && features.bootloaderMode === true && features.model === '1') {
|
|
31
|
-
return EDeviceType.Classic;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (isEmpty(serialNo)) return EDeviceType.Unknown;
|
|
35
|
-
|
|
36
|
-
const miniFlag = serialNo.slice(0, 2);
|
|
37
|
-
// By May 2021, the miniFlag is 'bixin' for all classic devices
|
|
38
|
-
if (miniFlag.toLowerCase() === 'bi') return EDeviceType.Classic;
|
|
39
|
-
if (miniFlag.toLowerCase() === 'cl') return EDeviceType.Classic;
|
|
40
|
-
if (miniFlag.toLowerCase() === 'cp') return EDeviceType.ClassicPure;
|
|
41
|
-
if (miniFlag.toLowerCase() === 'mi') return EDeviceType.Mini;
|
|
42
|
-
if (miniFlag.toLowerCase() === 'tc') return EDeviceType.Touch;
|
|
43
|
-
if (miniFlag.toLowerCase() === 'pr') return EDeviceType.Pro;
|
|
44
|
-
if (miniFlag.toLowerCase() === 'p2') return EDeviceType.Pro2;
|
|
45
|
-
|
|
46
|
-
// unknown device
|
|
47
|
-
return EDeviceType.Unknown;
|
|
48
|
-
};
|
|
18
|
+
export const getDeviceType = (features?: DeviceFeaturesInput): IDeviceType =>
|
|
19
|
+
resolveDeviceType(features);
|
|
49
20
|
|
|
50
21
|
/**
|
|
51
22
|
* get device type by ble name
|
|
@@ -70,28 +41,30 @@ export const getDeviceTypeByBleName = (name?: string): IDeviceType => {
|
|
|
70
41
|
* Get Connected Device ble name by features
|
|
71
42
|
* @returns
|
|
72
43
|
*/
|
|
73
|
-
export const getDeviceBleName = (features?:
|
|
74
|
-
|
|
75
|
-
return features.bleName || null;
|
|
76
|
-
};
|
|
44
|
+
export const getDeviceBleName = (features?: DeviceFeaturesInput): string | null =>
|
|
45
|
+
resolveDeviceBleName(features);
|
|
77
46
|
|
|
78
47
|
/**
|
|
79
|
-
* Get Connected Device
|
|
48
|
+
* Get Connected Device serial number by features
|
|
80
49
|
*/
|
|
81
|
-
export const
|
|
82
|
-
|
|
83
|
-
|
|
50
|
+
export const getDeviceSerialNo = (features?: DeviceFeaturesInput): string =>
|
|
51
|
+
resolveDeviceSerialNo(features);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @deprecated Use getDeviceSerialNo instead.
|
|
55
|
+
*/
|
|
56
|
+
export const getDeviceUUID = getDeviceSerialNo;
|
|
84
57
|
|
|
85
58
|
/**
|
|
86
59
|
* Get Connected Device label by features
|
|
87
60
|
*/
|
|
88
|
-
export const getDeviceLabel = (features?:
|
|
61
|
+
export const getDeviceLabel = (features?: DeviceFeaturesInput) => {
|
|
89
62
|
if (!features) return null;
|
|
90
63
|
|
|
91
64
|
const deviceType = getDeviceType(features);
|
|
92
65
|
if (deviceType == null) return null;
|
|
93
66
|
|
|
94
|
-
if (typeof features.label === 'string' && !isEmpty(features.label)) {
|
|
67
|
+
if ('label' in features && typeof features.label === 'string' && !isEmpty(features.label)) {
|
|
95
68
|
return features.label;
|
|
96
69
|
}
|
|
97
70
|
|
|
@@ -110,7 +83,7 @@ export const getDeviceLabel = (features?: Features) => {
|
|
|
110
83
|
* Type has a higher priority than Model
|
|
111
84
|
*/
|
|
112
85
|
export const getMethodVersionRange = (
|
|
113
|
-
features:
|
|
86
|
+
features: DeviceFeaturesInput | undefined,
|
|
114
87
|
getVersionRange: (deviceModel: IDeviceType | IDeviceModel) => IVersionRange | undefined
|
|
115
88
|
): IVersionRange | undefined => {
|
|
116
89
|
const deviceType = getDeviceType(features);
|
|
@@ -141,16 +114,5 @@ export const getMethodVersionRange = (
|
|
|
141
114
|
export const isMethodVersionRangeUnsupported = (versionRange?: IVersionRange): boolean =>
|
|
142
115
|
versionRange?.unsupported === true;
|
|
143
116
|
|
|
144
|
-
export const getFirmwareType = (features
|
|
145
|
-
|
|
146
|
-
return EFirmwareType.Universal;
|
|
147
|
-
}
|
|
148
|
-
if (features.firmwareType) {
|
|
149
|
-
return features.firmwareType;
|
|
150
|
-
}
|
|
151
|
-
// old firmware
|
|
152
|
-
return features?.capabilities?.length > 0 &&
|
|
153
|
-
!existCapability(features, Enum_Capability.Capability_Bitcoin_like)
|
|
154
|
-
? EFirmwareType.BitcoinOnly
|
|
155
|
-
: EFirmwareType.Universal;
|
|
156
|
-
};
|
|
117
|
+
export const getFirmwareType = (features?: DeviceFeaturesInput) =>
|
|
118
|
+
resolveDeviceFirmwareType(features);
|
|
@@ -1,6 +1,52 @@
|
|
|
1
1
|
import { EDeviceType } from '@onekeyfe/hd-shared';
|
|
2
|
+
import { Enum_SafetyCheckLevel } from '@onekeyfe/hd-transport';
|
|
2
3
|
|
|
3
4
|
import type { IDeviceType } from '../types';
|
|
5
|
+
import type { DeviceSettingsParams } from '../types/api/deviceSettings';
|
|
6
|
+
import type { SafetyCheckLevel } from '@onekeyfe/hd-transport';
|
|
7
|
+
|
|
8
|
+
export type DeviceSettingsProtocol = 'V1' | 'V2';
|
|
9
|
+
export type DeviceSettingsField = keyof DeviceSettingsParams;
|
|
10
|
+
|
|
11
|
+
export const DEVICE_SETTINGS_SHARED_FIELDS = [
|
|
12
|
+
'language',
|
|
13
|
+
'label',
|
|
14
|
+
'usePassphrase',
|
|
15
|
+
'autoLockDelayMs',
|
|
16
|
+
'autoShutdownDelayMs',
|
|
17
|
+
'hapticFeedback',
|
|
18
|
+
'bluetoothEnabled',
|
|
19
|
+
] as const satisfies readonly DeviceSettingsField[];
|
|
20
|
+
|
|
21
|
+
export const DEVICE_SETTINGS_V1_ONLY_FIELDS = [
|
|
22
|
+
'homescreen',
|
|
23
|
+
'passphraseSource',
|
|
24
|
+
'displayRotation',
|
|
25
|
+
'passphraseAlwaysOnDevice',
|
|
26
|
+
'safetyChecks',
|
|
27
|
+
'experimentalFeatures',
|
|
28
|
+
'changeBrightness',
|
|
29
|
+
] as const satisfies readonly DeviceSettingsField[];
|
|
30
|
+
|
|
31
|
+
export const DEVICE_SETTINGS_V2_ONLY_FIELDS = [
|
|
32
|
+
'brightness',
|
|
33
|
+
'airgapMode',
|
|
34
|
+
'animationEnabled',
|
|
35
|
+
'tapToWake',
|
|
36
|
+
'deviceNameDisplayEnabled',
|
|
37
|
+
'fidoEnabled',
|
|
38
|
+
'usbLockEnabled',
|
|
39
|
+
'randomKeypad',
|
|
40
|
+
] as const satisfies readonly DeviceSettingsField[];
|
|
41
|
+
|
|
42
|
+
export const PROTOCOL_V2_NEVER_TIMEOUT_MS = 0x10000000;
|
|
43
|
+
|
|
44
|
+
export const normalizeSafetyCheckLevel = (
|
|
45
|
+
value: SafetyCheckLevel | null | undefined
|
|
46
|
+
): Enum_SafetyCheckLevel | null | undefined => {
|
|
47
|
+
if (typeof value === 'number' || value === null || value === undefined) return value;
|
|
48
|
+
return Enum_SafetyCheckLevel[value];
|
|
49
|
+
};
|
|
4
50
|
|
|
5
51
|
export const LANGUAGE_LABELS = {
|
|
6
52
|
en: 'English',
|
|
@@ -19,6 +65,40 @@ export const LANGUAGE_LABELS = {
|
|
|
19
65
|
export type LanguageKey = keyof typeof LANGUAGE_LABELS;
|
|
20
66
|
export type LanguageOption = { code: LanguageKey; label: (typeof LANGUAGE_LABELS)[LanguageKey] };
|
|
21
67
|
|
|
68
|
+
export const PROTOCOL_V2_LANGUAGE_BY_KEY: Record<LanguageKey, string> = {
|
|
69
|
+
en: 'en-Latn-US',
|
|
70
|
+
zh_cn: 'zh-Hans-CN',
|
|
71
|
+
zh_hk: 'zh-Hant-HK',
|
|
72
|
+
ja: 'ja-Jpan-JP',
|
|
73
|
+
ko: 'ko-Kore-KR',
|
|
74
|
+
fr: 'fr-Latn-FR',
|
|
75
|
+
de: 'de-Latn-DE',
|
|
76
|
+
ru: 'ru-Cyrl-RU',
|
|
77
|
+
es: 'es-Latn-ES',
|
|
78
|
+
it: 'it-Latn-IT',
|
|
79
|
+
pt_br: 'pt-Latn-BR',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export const mapLanguageToProtocolV2 = (language?: string) =>
|
|
83
|
+
language ? PROTOCOL_V2_LANGUAGE_BY_KEY[language as LanguageKey] ?? language : undefined;
|
|
84
|
+
|
|
85
|
+
const PROTOCOL_V2_LANGUAGE_KEY_BY_TAG = Object.fromEntries(
|
|
86
|
+
Object.entries(PROTOCOL_V2_LANGUAGE_BY_KEY).map(([key, tag]) => [tag, key])
|
|
87
|
+
) as Record<string, LanguageKey>;
|
|
88
|
+
|
|
89
|
+
export const mapLanguageFromProtocolV2 = (language?: string) =>
|
|
90
|
+
language ? PROTOCOL_V2_LANGUAGE_KEY_BY_TAG[language] ?? language : undefined;
|
|
91
|
+
|
|
92
|
+
const PRO2_LANGUAGE_OPTIONS = [
|
|
93
|
+
...Object.entries(LANGUAGE_LABELS).map(([code, label]) => ({ code, label })),
|
|
94
|
+
{ code: 'zh-Hant-TW', label: '繁體中文(台灣)' },
|
|
95
|
+
{ code: 'vi-Latn-VN', label: 'Tiếng Việt' },
|
|
96
|
+
{ code: 'tr-Latn-TR', label: 'Türkçe' },
|
|
97
|
+
{ code: 'id-Latn-ID', label: 'Bahasa Indonesia' },
|
|
98
|
+
{ code: 'fil-Latn-PH', label: 'Filipino' },
|
|
99
|
+
{ code: 'uk-Cyrl-UA', label: 'Українська' },
|
|
100
|
+
] as const;
|
|
101
|
+
|
|
22
102
|
export const getLanguageConfig = (deviceType: IDeviceType): Record<string, string>[] => {
|
|
23
103
|
let keys: LanguageKey[] = [];
|
|
24
104
|
|
|
@@ -36,6 +116,8 @@ export const getLanguageConfig = (deviceType: IDeviceType): Record<string, strin
|
|
|
36
116
|
case EDeviceType.Pro:
|
|
37
117
|
keys = Object.keys(LANGUAGE_LABELS) as LanguageKey[];
|
|
38
118
|
break;
|
|
119
|
+
case EDeviceType.Pro2:
|
|
120
|
+
return PRO2_LANGUAGE_OPTIONS.map(option => ({ ...option }));
|
|
39
121
|
default:
|
|
40
122
|
keys = [];
|
|
41
123
|
break;
|
|
@@ -44,66 +126,106 @@ export const getLanguageConfig = (deviceType: IDeviceType): Record<string, strin
|
|
|
44
126
|
return keys.map(key => ({ code: key, label: LANGUAGE_LABELS[key] }));
|
|
45
127
|
};
|
|
46
128
|
|
|
47
|
-
export type
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
hour: number;
|
|
51
|
-
day: number;
|
|
129
|
+
export type DeviceSettingsDurationOption = {
|
|
130
|
+
label: string;
|
|
131
|
+
valueMs: number;
|
|
52
132
|
};
|
|
53
133
|
|
|
54
|
-
export
|
|
55
|
-
|
|
134
|
+
export type DeviceSettingsValueOption<T> = {
|
|
135
|
+
label: string;
|
|
136
|
+
value: T;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const durationOption = (valueMs: number): DeviceSettingsDurationOption => {
|
|
140
|
+
if (valueMs === 0 || valueMs === PROTOCOL_V2_NEVER_TIMEOUT_MS) {
|
|
141
|
+
return { label: 'Never', valueMs };
|
|
142
|
+
}
|
|
143
|
+
if (valueMs < 60_000) {
|
|
144
|
+
return { label: `${valueMs / 1000} seconds`, valueMs };
|
|
145
|
+
}
|
|
146
|
+
const minutes = valueMs / 60_000;
|
|
147
|
+
return { label: `${minutes} ${minutes === 1 ? 'minute' : 'minutes'}`, valueMs };
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
const withNever = (
|
|
151
|
+
values: readonly number[],
|
|
152
|
+
protocol: DeviceSettingsProtocol
|
|
153
|
+
): DeviceSettingsDurationOption[] =>
|
|
154
|
+
[...values, protocol === 'V2' ? PROTOCOL_V2_NEVER_TIMEOUT_MS : 0].map(durationOption);
|
|
155
|
+
|
|
156
|
+
export const getAutoLockOptions = (
|
|
157
|
+
deviceType: IDeviceType,
|
|
158
|
+
protocol: DeviceSettingsProtocol
|
|
159
|
+
): DeviceSettingsDurationOption[] => {
|
|
160
|
+
switch (deviceType) {
|
|
56
161
|
case EDeviceType.Mini:
|
|
57
162
|
case EDeviceType.Classic:
|
|
58
163
|
case EDeviceType.Classic1s:
|
|
59
164
|
case EDeviceType.ClassicPure:
|
|
60
|
-
return [
|
|
61
|
-
{ seconds: 0, minute: 1, hour: 0, day: 0 },
|
|
62
|
-
{ seconds: 0, minute: 2, hour: 0, day: 0 },
|
|
63
|
-
{ seconds: 0, minute: 5, hour: 0, day: 0 },
|
|
64
|
-
{ seconds: 0, minute: 10, hour: 0, day: 0 },
|
|
65
|
-
{ seconds: 0, minute: 0, hour: 0, day: 0 },
|
|
66
|
-
];
|
|
165
|
+
return withNever([60_000, 120_000, 300_000, 600_000], protocol);
|
|
67
166
|
case EDeviceType.Touch:
|
|
68
167
|
case EDeviceType.Pro:
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
{ seconds: 0, minute: 1, hour: 0, day: 0 },
|
|
72
|
-
{ seconds: 0, minute: 2, hour: 0, day: 0 },
|
|
73
|
-
{ seconds: 0, minute: 5, hour: 0, day: 0 },
|
|
74
|
-
{ seconds: 0, minute: 10, hour: 0, day: 0 },
|
|
75
|
-
{ seconds: 0, minute: 30, hour: 0, day: 0 },
|
|
76
|
-
{ seconds: 0, minute: 0, hour: 0, day: 0 },
|
|
77
|
-
];
|
|
168
|
+
case EDeviceType.Pro2:
|
|
169
|
+
return withNever([30_000, 60_000, 120_000, 300_000, 600_000, 1_800_000], protocol);
|
|
78
170
|
default:
|
|
79
171
|
return [];
|
|
80
172
|
}
|
|
81
173
|
};
|
|
82
174
|
|
|
83
|
-
export const getAutoShutDownOptions = (
|
|
84
|
-
|
|
175
|
+
export const getAutoShutDownOptions = (
|
|
176
|
+
deviceType: IDeviceType,
|
|
177
|
+
protocol: DeviceSettingsProtocol
|
|
178
|
+
): DeviceSettingsDurationOption[] => {
|
|
179
|
+
switch (deviceType) {
|
|
85
180
|
case EDeviceType.Mini:
|
|
86
181
|
return [];
|
|
87
182
|
case EDeviceType.Classic:
|
|
88
183
|
case EDeviceType.Classic1s:
|
|
89
184
|
case EDeviceType.ClassicPure:
|
|
90
|
-
return [
|
|
91
|
-
{ seconds: 0, minute: 1, hour: 0, day: 0 },
|
|
92
|
-
{ seconds: 0, minute: 3, hour: 0, day: 0 },
|
|
93
|
-
{ seconds: 0, minute: 5, hour: 0, day: 0 },
|
|
94
|
-
{ seconds: 0, minute: 10, hour: 0, day: 0 },
|
|
95
|
-
{ seconds: 0, minute: 0, hour: 0, day: 0 },
|
|
96
|
-
];
|
|
185
|
+
return withNever([60_000, 180_000, 300_000, 600_000], protocol);
|
|
97
186
|
case EDeviceType.Touch:
|
|
98
187
|
case EDeviceType.Pro:
|
|
99
|
-
return [
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
{ seconds: 0, minute: 5, hour: 0, day: 0 },
|
|
103
|
-
{ seconds: 0, minute: 10, hour: 0, day: 0 },
|
|
104
|
-
{ seconds: 0, minute: 0, hour: 0, day: 0 },
|
|
105
|
-
];
|
|
188
|
+
return withNever([60_000, 120_000, 300_000, 600_000], protocol);
|
|
189
|
+
case EDeviceType.Pro2:
|
|
190
|
+
return withNever([60_000, 120_000, 300_000, 600_000, 1_800_000], protocol);
|
|
106
191
|
default:
|
|
107
192
|
return [];
|
|
108
193
|
}
|
|
109
194
|
};
|
|
195
|
+
|
|
196
|
+
export type DeviceSettingsCapabilities = {
|
|
197
|
+
protocol: DeviceSettingsProtocol;
|
|
198
|
+
supportedFields: readonly DeviceSettingsField[];
|
|
199
|
+
languageOptions: ReadonlyArray<Record<string, string>>;
|
|
200
|
+
autoLockDelayOptions: readonly DeviceSettingsDurationOption[];
|
|
201
|
+
autoShutdownDelayOptions: readonly DeviceSettingsDurationOption[];
|
|
202
|
+
ranges: {
|
|
203
|
+
brightness?: { min: number; max: number };
|
|
204
|
+
};
|
|
205
|
+
safetyCheckOptions: ReadonlyArray<DeviceSettingsValueOption<Enum_SafetyCheckLevel>>;
|
|
206
|
+
onDeviceConfirmationFields: readonly DeviceSettingsField[];
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
export const getDeviceSettingsCapabilities = (
|
|
210
|
+
deviceType: IDeviceType,
|
|
211
|
+
protocol: DeviceSettingsProtocol
|
|
212
|
+
): DeviceSettingsCapabilities => ({
|
|
213
|
+
protocol,
|
|
214
|
+
supportedFields:
|
|
215
|
+
protocol === 'V2'
|
|
216
|
+
? [...DEVICE_SETTINGS_SHARED_FIELDS, ...DEVICE_SETTINGS_V2_ONLY_FIELDS]
|
|
217
|
+
: [...DEVICE_SETTINGS_SHARED_FIELDS, ...DEVICE_SETTINGS_V1_ONLY_FIELDS],
|
|
218
|
+
languageOptions: getLanguageConfig(deviceType),
|
|
219
|
+
autoLockDelayOptions: getAutoLockOptions(deviceType, protocol),
|
|
220
|
+
autoShutdownDelayOptions: getAutoShutDownOptions(deviceType, protocol),
|
|
221
|
+
ranges: protocol === 'V2' ? { brightness: { min: 10, max: 100 } } : {},
|
|
222
|
+
safetyCheckOptions:
|
|
223
|
+
protocol === 'V1'
|
|
224
|
+
? [
|
|
225
|
+
{ label: 'Strict', value: Enum_SafetyCheckLevel.Strict },
|
|
226
|
+
{ label: 'Prompt Always', value: Enum_SafetyCheckLevel.PromptAlways },
|
|
227
|
+
{ label: 'Prompt Temporarily', value: Enum_SafetyCheckLevel.PromptTemporarily },
|
|
228
|
+
]
|
|
229
|
+
: [],
|
|
230
|
+
onDeviceConfirmationFields: protocol === 'V2' ? ['usePassphrase', 'airgapMode'] : [],
|
|
231
|
+
});
|
|
@@ -1,61 +1,42 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import {
|
|
4
|
+
resolveDeviceBleFirmwareVersion,
|
|
5
|
+
resolveDeviceBoardVersion,
|
|
6
|
+
resolveDeviceBootloaderVersion,
|
|
7
|
+
resolveDeviceFirmwareVersion,
|
|
8
|
+
} from './deviceFeaturesCompat';
|
|
4
9
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*/
|
|
8
|
-
export const getDeviceFirmwareVersion = (features: Features | undefined): IVersionArray => {
|
|
9
|
-
if (!features) return [0, 0, 0];
|
|
10
|
+
import type { IVersionArray } from '../types';
|
|
11
|
+
import type { DeviceFeaturesInput } from './deviceFeaturesCompat';
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
return features.firmwareVersion.split('.').map(Number) as IVersionArray;
|
|
13
|
-
}
|
|
13
|
+
const EMPTY_VERSION: IVersionArray = [0, 0, 0];
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
const parseDeviceVersion = (version?: string | null): IVersionArray => {
|
|
16
|
+
const parsed = version ? semver.parse(version) : null;
|
|
17
|
+
return parsed ? [parsed.major, parsed.minor, parsed.patch] : [...EMPTY_VERSION];
|
|
16
18
|
};
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
|
-
* Get Connected Device
|
|
21
|
+
* Get Connected Device version by features
|
|
20
22
|
*/
|
|
21
|
-
export const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (!bleVer) {
|
|
25
|
-
return [0, 0, 0];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (!semver.valid(bleVer)) {
|
|
29
|
-
return [0, 0, 0];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (bleVer) {
|
|
33
|
-
return bleVer.split('.').map(Number) as IVersionArray;
|
|
34
|
-
}
|
|
35
|
-
return [0, 0, 0];
|
|
36
|
-
};
|
|
23
|
+
export const getDeviceFirmwareVersion = (features?: DeviceFeaturesInput): IVersionArray =>
|
|
24
|
+
parseDeviceVersion(resolveDeviceFirmwareVersion(features));
|
|
37
25
|
|
|
38
26
|
/**
|
|
39
27
|
* Get Connected Device bootloader version by features
|
|
40
28
|
*/
|
|
41
|
-
export const getDeviceBootloaderVersion = (features
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
// classic1s 3.5.0 pro 4.6.0
|
|
45
|
-
if (features.bootloaderVersion && semver.valid(features.bootloaderVersion)) {
|
|
46
|
-
return features.bootloaderVersion.split('.').map(Number) as IVersionArray;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return [0, 0, 0];
|
|
50
|
-
};
|
|
29
|
+
export const getDeviceBootloaderVersion = (features?: DeviceFeaturesInput): IVersionArray =>
|
|
30
|
+
parseDeviceVersion(resolveDeviceBootloaderVersion(features));
|
|
51
31
|
|
|
52
32
|
/**
|
|
53
|
-
* Get Connected Device boardloader version by features
|
|
33
|
+
* Get Connected Device boardloader/romloader version by features
|
|
54
34
|
*/
|
|
55
|
-
export const getDeviceBoardloaderVersion = (features
|
|
56
|
-
|
|
57
|
-
return features.boardVersion.split('.').map(Number) as IVersionArray;
|
|
58
|
-
}
|
|
35
|
+
export const getDeviceBoardloaderVersion = (features?: DeviceFeaturesInput): IVersionArray =>
|
|
36
|
+
parseDeviceVersion(resolveDeviceBoardVersion(features));
|
|
59
37
|
|
|
60
|
-
|
|
61
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Get Connected Device bluetooth firmware version by features
|
|
40
|
+
*/
|
|
41
|
+
export const getDeviceBLEFirmwareVersion = (features?: DeviceFeaturesInput): IVersionArray =>
|
|
42
|
+
parseDeviceVersion(resolveDeviceBleFirmwareVersion(features));
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDeviceSerialNo, getDeviceType } from './deviceInfoUtils';
|
|
2
2
|
|
|
3
3
|
import type { Features } from '../types';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* 检测故障固件设备
|
|
7
7
|
* 检测规则:
|
|
8
|
-
* -
|
|
8
|
+
* - Serial number range: 21032200001 through 21032201500
|
|
9
9
|
* - SE版本为 1.1.0.2
|
|
10
10
|
*
|
|
11
11
|
* 对齐之前版本的检测逻辑
|
|
@@ -27,7 +27,7 @@ export const findDefectiveBatchDevice = (features: Features) => {
|
|
|
27
27
|
*/
|
|
28
28
|
export const getDefectiveDeviceInfo = (features: Features) => {
|
|
29
29
|
if (!findDefectiveBatchDevice(features)) return null;
|
|
30
|
-
const serialNo =
|
|
30
|
+
const serialNo = getDeviceSerialNo(features);
|
|
31
31
|
const deviceType = getDeviceType(features);
|
|
32
32
|
const { seVersion } = features;
|
|
33
33
|
|