@onekeyfe/hd-core 1.2.0-alpha.13 → 1.2.0-alpha.131
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 +390 -0
- package/__tests__/DeviceCommands.test.ts +701 -0
- package/__tests__/DeviceEventRegistration.test.ts +49 -0
- package/__tests__/base64Data.test.ts +69 -0
- package/__tests__/chain-params-onekey-compatibility.test.ts +229 -0
- package/__tests__/check-all-firmware-release-protocol-v2.test.ts +830 -0
- package/__tests__/check-firmware-release-protocol-v2.test.ts +270 -0
- package/__tests__/connectSettings.test.ts +45 -5
- package/__tests__/core-dispose.test.ts +34 -0
- package/__tests__/core-error-output.test.ts +39 -0
- package/__tests__/core-initialization.test.ts +23 -0
- package/__tests__/device-connector-protocol.test.ts +102 -0
- package/__tests__/device-features-state.test.ts +78 -0
- package/__tests__/device-identity.test.ts +52 -0
- package/__tests__/device-initialize-timeout.test.ts +56 -0
- package/__tests__/device-lifecycle-events.test.ts +535 -0
- package/__tests__/device-pool-state.test.ts +191 -0
- package/__tests__/device-settings.test.ts +569 -0
- package/__tests__/device-state-contract.test.ts +28 -0
- package/__tests__/device-state-events.test.ts +286 -0
- package/__tests__/device-state-mapper.test.ts +297 -0
- package/__tests__/device-state-projector.test.ts +114 -0
- package/__tests__/device-state-store.test.ts +109 -0
- package/__tests__/device-utils.test.ts +154 -0
- package/__tests__/device-wallet-session-store.test.ts +348 -1
- package/__tests__/deviceFeaturesUtils.test.ts +39 -0
- package/__tests__/devicePoolBootloaderPath.test.ts +64 -0
- package/__tests__/deviceSettings.test.ts +117 -0
- package/__tests__/deviceUploadNft.test.ts +345 -0
- package/__tests__/evmLedgerLegacySafety.test.ts +12 -6
- package/__tests__/evmSignTransaction.test.ts +69 -0
- package/__tests__/evmSignTypedData.test.ts +80 -0
- package/__tests__/filesystemValidation.test.ts +53 -0
- package/__tests__/firmware-memory-host.test.ts +126 -0
- package/__tests__/firmware-update/check-all-firmware-release.test.ts +175 -0
- package/__tests__/firmware-update/device-update-bootloader.test.ts +109 -0
- package/__tests__/firmware-update/firmware-artifact-source.test.ts +171 -0
- package/__tests__/firmware-update/firmware-host-binding.test.ts +79 -0
- package/__tests__/firmware-update/firmware-preparation-error.test.ts +27 -0
- package/__tests__/firmware-update/firmware-prepared-host-digest.test.ts +583 -0
- package/__tests__/firmware-update/firmware-prepared-resource-archive.test.ts +171 -0
- package/__tests__/firmware-update/firmware-update-bootloader-poll.test.ts +438 -0
- package/__tests__/firmware-update/firmware-update-capabilities.test.ts +13 -0
- package/__tests__/firmware-update/firmware-update-plan-bootloader-identity.test.ts +474 -0
- package/__tests__/firmware-update/firmware-update-plan.test.ts +819 -0
- package/__tests__/firmware-update/firmware-update-prepared-plan.test.ts +287 -0
- package/__tests__/firmware-update/firmware-update-prepared-resource-executors.test.ts +326 -0
- package/__tests__/firmware-update/firmware-update-v2-download-before-boot.test.ts +457 -0
- package/__tests__/firmware-update/firmware-update-v3-reconnect.test.ts +237 -0
- package/__tests__/firmware-update/firmware-update-v4-install-poll.test.ts +130 -0
- package/__tests__/firmware-update/firmware-update-v4-parameters.test.ts +85 -0
- package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
- package/__tests__/get-device-state.test.ts +617 -0
- package/__tests__/homescreen.test.ts +81 -0
- package/__tests__/kaspa-public-types.type-test.ts +16 -0
- package/__tests__/kaspa-use-tweak-pro2.test.ts +20 -0
- package/__tests__/kaspaSignTransaction.test.ts +578 -0
- package/__tests__/known-device-public-types.type-test.ts +3 -0
- package/__tests__/logBlockEvent.test.ts +140 -1
- package/__tests__/method-protocol-support.test.ts +144 -0
- package/__tests__/networkUtils.test.ts +406 -0
- package/__tests__/open-wallet-session-error-response.test.ts +43 -0
- package/__tests__/open-wallet-session.test.ts +1899 -0
- package/__tests__/pro2Nft.test.ts +108 -0
- package/__tests__/pro2Wallpaper.test.ts +8 -19
- package/__tests__/protocol-binding.test.ts +89 -0
- package/__tests__/protocol-v2-firmware-targets.test.ts +105 -0
- package/__tests__/protocol-v2-ping.test.ts +28 -0
- package/__tests__/protocol-v2-resources.test.ts +385 -0
- package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
- package/__tests__/protocol-v2-unlock-policy.test.ts +339 -0
- package/__tests__/protocol-v2.test.ts +8084 -2515
- package/__tests__/protocolV2FileWrite.test.ts +221 -3
- package/__tests__/protocolV2UiInteraction.test.ts +329 -0
- package/__tests__/public-device-state-api.test.ts +275 -0
- package/__tests__/public-pro2-api-boundary.test.ts +107 -0
- package/__tests__/refresh-device-state.test.ts +103 -0
- package/__tests__/request-context-logging.test.ts +16 -0
- package/__tests__/resourceBase64Boundary.test.ts +48 -0
- package/__tests__/search-devices.test.ts +191 -0
- package/__tests__/ton-sign-message.test.ts +84 -0
- package/__tests__/tron-sign-message-init.test.ts +74 -0
- package/__tests__/uiProgressThrottle.test.ts +74 -0
- package/__tests__/uiPromiseRegistry.test.ts +115 -0
- package/dist/api/BaseMethod.d.ts +14 -2
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts +25 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CheckBLEFirmwareRelease.d.ts +3 -2
- package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CheckBootloaderRelease.d.ts +2 -1
- package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
- package/dist/api/CheckFirmwareRelease.d.ts +3 -2
- package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CipherKeyValue.d.ts +1 -0
- package/dist/api/CipherKeyValue.d.ts.map +1 -1
- package/dist/api/ClearSessionCache.d.ts.map +1 -1
- package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
- package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
- package/dist/api/DirList.d.ts +1 -0
- package/dist/api/DirList.d.ts.map +1 -1
- package/dist/api/DirMake.d.ts +1 -0
- package/dist/api/DirMake.d.ts.map +1 -1
- package/dist/api/DirRemove.d.ts +1 -0
- package/dist/api/DirRemove.d.ts.map +1 -1
- package/dist/api/FileDelete.d.ts +1 -0
- package/dist/api/FileDelete.d.ts.map +1 -1
- package/dist/api/FileRead.d.ts +1 -0
- package/dist/api/FileRead.d.ts.map +1 -1
- package/dist/api/FileWrite.d.ts +2 -0
- package/dist/api/FileWrite.d.ts.map +1 -1
- package/dist/api/FirmwareUpdate.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV2.d.ts +13 -2
- package/dist/api/FirmwareUpdateV2.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV3.d.ts +7 -3
- package/dist/api/FirmwareUpdateV3.d.ts.map +1 -1
- package/dist/api/FirmwareUpdateV4.d.ts +57 -14
- package/dist/api/FirmwareUpdateV4.d.ts.map +1 -1
- package/dist/api/GetDeviceState.d.ts +8 -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 -0
- package/dist/api/GetPassphraseState.d.ts.map +1 -1
- package/dist/api/OpenWalletSession.d.ts +8 -0
- package/dist/api/OpenWalletSession.d.ts.map +1 -0
- package/dist/api/PathInfo.d.ts +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 +1 -2
- package/dist/api/UploadPortfolio.d.ts.map +1 -1
- package/dist/api/alephium/AlephiumGetAddress.d.ts.map +1 -1
- package/dist/api/alephium/AlephiumSignMessage.d.ts.map +1 -1
- package/dist/api/alephium/AlephiumSignTransaction.d.ts.map +1 -1
- package/dist/api/algo/AlgoGetAddress.d.ts +1 -0
- package/dist/api/algo/AlgoGetAddress.d.ts.map +1 -1
- package/dist/api/algo/AlgoSignTransaction.d.ts +1 -0
- package/dist/api/algo/AlgoSignTransaction.d.ts.map +1 -1
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts +1 -0
- package/dist/api/allnetwork/AllNetworkGetAddressBase.d.ts.map +1 -1
- package/dist/api/aptos/AptosGetAddress.d.ts +1 -0
- package/dist/api/aptos/AptosGetAddress.d.ts.map +1 -1
- package/dist/api/aptos/AptosGetPublicKey.d.ts +1 -0
- package/dist/api/aptos/AptosGetPublicKey.d.ts.map +1 -1
- package/dist/api/aptos/AptosSignInMessage.d.ts +1 -0
- package/dist/api/aptos/AptosSignInMessage.d.ts.map +1 -1
- package/dist/api/aptos/AptosSignMessage.d.ts +1 -0
- package/dist/api/aptos/AptosSignMessage.d.ts.map +1 -1
- package/dist/api/aptos/AptosSignTransaction.d.ts +1 -0
- package/dist/api/aptos/AptosSignTransaction.d.ts.map +1 -1
- package/dist/api/benfen/BenfenGetAddress.d.ts.map +1 -1
- package/dist/api/benfen/BenfenGetPublicKey.d.ts.map +1 -1
- package/dist/api/benfen/BenfenSignMessage.d.ts.map +1 -1
- package/dist/api/benfen/BenfenSignTransaction.d.ts.map +1 -1
- package/dist/api/btc/BTCGetAddress.d.ts +1 -0
- package/dist/api/btc/BTCGetAddress.d.ts.map +1 -1
- package/dist/api/btc/BTCGetPublicKey.d.ts +1 -0
- package/dist/api/btc/BTCGetPublicKey.d.ts.map +1 -1
- package/dist/api/btc/BTCSignMessage.d.ts +1 -0
- package/dist/api/btc/BTCSignMessage.d.ts.map +1 -1
- package/dist/api/btc/BTCSignPsbt.d.ts +1 -0
- package/dist/api/btc/BTCSignPsbt.d.ts.map +1 -1
- package/dist/api/btc/BTCSignTransaction.d.ts +1 -0
- package/dist/api/btc/BTCSignTransaction.d.ts.map +1 -1
- package/dist/api/btc/BTCVerifyMessage.d.ts +1 -0
- package/dist/api/btc/BTCVerifyMessage.d.ts.map +1 -1
- package/dist/api/btc/helpers/versionLimit.d.ts +2 -0
- package/dist/api/btc/helpers/versionLimit.d.ts.map +1 -1
- package/dist/api/cardano/CardanoGetAddress.d.ts +1 -0
- package/dist/api/cardano/CardanoGetAddress.d.ts.map +1 -1
- package/dist/api/cardano/CardanoGetPublicKey.d.ts +1 -0
- package/dist/api/cardano/CardanoGetPublicKey.d.ts.map +1 -1
- package/dist/api/cardano/CardanoSignMessage.d.ts +1 -0
- package/dist/api/cardano/CardanoSignMessage.d.ts.map +1 -1
- package/dist/api/cardano/CardanoSignTransaction.d.ts +1 -0
- package/dist/api/cardano/CardanoSignTransaction.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxGetAddress.d.ts +2 -0
- package/dist/api/conflux/ConfluxGetAddress.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxSignMessage.d.ts +2 -0
- package/dist/api/conflux/ConfluxSignMessage.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts +2 -0
- package/dist/api/conflux/ConfluxSignMessageCIP23.d.ts.map +1 -1
- package/dist/api/conflux/ConfluxSignTransaction.d.ts +2 -0
- package/dist/api/conflux/ConfluxSignTransaction.d.ts.map +1 -1
- package/dist/api/cosmos/CosmosGetAddress.d.ts +1 -0
- package/dist/api/cosmos/CosmosGetAddress.d.ts.map +1 -1
- package/dist/api/cosmos/CosmosGetPublicKey.d.ts +1 -0
- package/dist/api/cosmos/CosmosGetPublicKey.d.ts.map +1 -1
- package/dist/api/cosmos/CosmosSignTransaction.d.ts +1 -0
- package/dist/api/cosmos/CosmosSignTransaction.d.ts.map +1 -1
- package/dist/api/device/DeviceCancel.d.ts +1 -0
- package/dist/api/device/DeviceCancel.d.ts.map +1 -1
- package/dist/api/device/DeviceChangePin.d.ts +1 -0
- 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 +1 -0
- package/dist/api/device/DeviceLock.d.ts.map +1 -1
- package/dist/api/device/DeviceRebootToBoardloader.d.ts +1 -0
- package/dist/api/device/DeviceRebootToBoardloader.d.ts.map +1 -1
- package/dist/api/device/DeviceRebootToBootloader.d.ts +1 -0
- package/dist/api/device/DeviceRebootToBootloader.d.ts.map +1 -1
- package/dist/api/device/DeviceSettings.d.ts +1 -0
- package/dist/api/device/DeviceSettings.d.ts.map +1 -1
- package/dist/api/device/DeviceSupportFeatures.d.ts +1 -0
- package/dist/api/device/DeviceSupportFeatures.d.ts.map +1 -1
- package/dist/api/device/DeviceUnlock.d.ts +3 -2
- package/dist/api/device/DeviceUnlock.d.ts.map +1 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts +5 -1
- package/dist/api/device/DeviceUpdateBootloader.d.ts.map +1 -1
- package/dist/api/device/DeviceWipe.d.ts +1 -0
- package/dist/api/device/DeviceWipe.d.ts.map +1 -1
- package/dist/api/device/PreInitialize.d.ts +1 -0
- package/dist/api/device/PreInitialize.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/EVMGetAddress.d.ts +1 -0
- package/dist/api/evm/EVMGetAddress.d.ts.map +1 -1
- package/dist/api/evm/EVMGetPublicKey.d.ts +1 -0
- package/dist/api/evm/EVMGetPublicKey.d.ts.map +1 -1
- package/dist/api/evm/EVMSignMessage.d.ts +1 -0
- package/dist/api/evm/EVMSignMessage.d.ts.map +1 -1
- package/dist/api/evm/EVMSignMessageEIP712.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTransaction.d.ts +1 -0
- package/dist/api/evm/EVMSignTransaction.d.ts.map +1 -1
- package/dist/api/evm/EVMSignTypedData.d.ts +1 -0
- package/dist/api/evm/EVMSignTypedData.d.ts.map +1 -1
- package/dist/api/evm/EVMVerifyMessage.d.ts +1 -0
- package/dist/api/evm/EVMVerifyMessage.d.ts.map +1 -1
- package/dist/api/evm/protocol.d.ts +3 -0
- package/dist/api/evm/protocol.d.ts.map +1 -0
- package/dist/api/filecoin/FilecoinGetAddress.d.ts +1 -0
- package/dist/api/filecoin/FilecoinGetAddress.d.ts.map +1 -1
- package/dist/api/filecoin/FilecoinSignTransaction.d.ts +1 -0
- package/dist/api/filecoin/FilecoinSignTransaction.d.ts.map +1 -1
- package/dist/api/firmware/FirmwareArtifactSource.d.ts +29 -0
- package/dist/api/firmware/FirmwareArtifactSource.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts +6 -0
- package/dist/api/firmware/FirmwareHostBinding.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareMemoryHost.d.ts +22 -0
- package/dist/api/firmware/FirmwareMemoryHost.d.ts.map +1 -0
- package/dist/api/firmware/FirmwarePreparationError.d.ts +3 -0
- package/dist/api/firmware/FirmwarePreparationError.d.ts.map +1 -0
- package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts +11 -0
- package/dist/api/firmware/FirmwarePreparedResourceArchive.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdateBaseMethod.d.ts +12 -3
- 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 +72 -0
- package/dist/api/firmware/FirmwareUpdatePlan.d.ts.map +1 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts +38 -0
- package/dist/api/firmware/FirmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/api/firmware/getBinary.d.ts +15 -4
- package/dist/api/firmware/getBinary.d.ts.map +1 -1
- package/dist/api/firmware/protocolV2Release.d.ts +33 -0
- package/dist/api/firmware/protocolV2Release.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/base64Data.d.ts +16 -0
- package/dist/api/helpers/base64Data.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 +11 -0
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/index.d.ts +5 -29
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaGetAddress.d.ts +4 -0
- package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts +9 -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/lightning/LnurlAuth.d.ts +0 -4
- package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
- package/dist/api/near/NearGetAddress.d.ts +1 -0
- package/dist/api/near/NearGetAddress.d.ts.map +1 -1
- package/dist/api/near/NearSignTransaction.d.ts +1 -0
- package/dist/api/near/NearSignTransaction.d.ts.map +1 -1
- package/dist/api/nem/NEMGetAddress.d.ts +1 -0
- package/dist/api/nem/NEMGetAddress.d.ts.map +1 -1
- package/dist/api/nem/NEMSignTransaction.d.ts +1 -0
- package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
- package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
- package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
- package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
- package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
- package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
- package/dist/api/nexa/NexaSignTransaction.d.ts +1 -0
- package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
- package/dist/api/nostr/NostrDecryptMessage.d.ts +1 -0
- package/dist/api/nostr/NostrDecryptMessage.d.ts.map +1 -1
- package/dist/api/nostr/NostrEncryptMessage.d.ts +1 -0
- package/dist/api/nostr/NostrEncryptMessage.d.ts.map +1 -1
- package/dist/api/nostr/NostrGetPublicKey.d.ts +1 -0
- package/dist/api/nostr/NostrGetPublicKey.d.ts.map +1 -1
- package/dist/api/nostr/NostrSignEvent.d.ts +1 -0
- package/dist/api/nostr/NostrSignEvent.d.ts.map +1 -1
- package/dist/api/nostr/NostrSignSchnorr.d.ts +1 -0
- package/dist/api/nostr/NostrSignSchnorr.d.ts.map +1 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts +2 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
- package/dist/api/polkadot/PolkadotSignTransaction.d.ts +1 -0
- package/dist/api/polkadot/PolkadotSignTransaction.d.ts.map +1 -1
- package/dist/api/polkadot/networks.d.ts +1 -1
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +4 -1
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +2 -1
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceInfoGet.d.ts +2 -2
- package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceReboot.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceReboot.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceStatusGet.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceStatusGet.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts +30 -0
- package/dist/api/protocol-v2/DeviceUploadNft.d.ts.map +1 -0
- package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts +3 -3
- package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
- package/dist/api/protocol-v2/FilesystemFormat.d.ts +1 -0
- package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +1 -0
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -1
- package/dist/api/protocol-v2/Ping.d.ts +3 -0
- package/dist/api/protocol-v2/Ping.d.ts.map +1 -1
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +1 -0
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
- package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
- package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
- 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 +2 -1
- package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts +2 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
- package/dist/api/solana/SolSignTransaction.d.ts +3 -2
- package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinGetAddress.d.ts +1 -0
- package/dist/api/starcoin/StarcoinGetAddress.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinGetPublicKey.d.ts +1 -0
- package/dist/api/starcoin/StarcoinGetPublicKey.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinSignMessage.d.ts +1 -0
- package/dist/api/starcoin/StarcoinSignMessage.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinSignTransaction.d.ts +1 -0
- package/dist/api/starcoin/StarcoinSignTransaction.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinVerifyMessage.d.ts +1 -0
- package/dist/api/starcoin/StarcoinVerifyMessage.d.ts.map +1 -1
- package/dist/api/stellar/StellarGetAddress.d.ts +1 -2
- package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
- package/dist/api/stellar/StellarSignTransaction.d.ts +2 -3
- package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
- package/dist/api/sui/SuiGetAddress.d.ts +2 -1
- package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts +2 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
- package/dist/api/sui/SuiSignMessage.d.ts +2 -1
- package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts +2 -1
- package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
- package/dist/api/ton/TonGetAddress.d.ts +2 -1
- 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 +2 -1
- package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
- package/dist/api/ton/TonSignProof.d.ts +2 -1
- package/dist/api/ton/TonSignProof.d.ts.map +1 -1
- package/dist/api/tron/TronGetAddress.d.ts +1 -0
- package/dist/api/tron/TronGetAddress.d.ts.map +1 -1
- package/dist/api/tron/TronSignMessage.d.ts +6 -1
- package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
- package/dist/api/tron/TronSignTransaction.d.ts +2 -1
- package/dist/api/tron/TronSignTransaction.d.ts.map +1 -1
- package/dist/api/utils.d.ts +4 -1
- package/dist/api/utils.d.ts.map +1 -1
- package/dist/api/xrp/XrpGetAddress.d.ts +1 -0
- package/dist/api/xrp/XrpGetAddress.d.ts.map +1 -1
- package/dist/api/xrp/XrpSignTransaction.d.ts +1 -0
- package/dist/api/xrp/XrpSignTransaction.d.ts.map +1 -1
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/core/RequestQueue.d.ts +0 -2
- package/dist/core/RequestQueue.d.ts.map +1 -1
- package/dist/core/deviceEventRegistration.d.ts +13 -0
- package/dist/core/deviceEventRegistration.d.ts.map +1 -0
- package/dist/core/index.d.ts +4 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/uiPromiseRegistry.d.ts +6 -0
- package/dist/core/uiPromiseRegistry.d.ts.map +1 -0
- package/dist/data-manager/DataManager.d.ts +14 -5
- package/dist/data-manager/DataManager.d.ts.map +1 -1
- package/dist/data-manager/TransportManager.d.ts.map +1 -1
- package/dist/data-manager/connectSettings.d.ts.map +1 -1
- package/dist/device/Device.d.ts +78 -16
- 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/DeviceConnector.d.ts +4 -3
- package/dist/device/DeviceConnector.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 +6 -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 +13 -1
- package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -1
- 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 +8 -2
- 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/deviceProfile/protocolV2DeviceIdentity.d.ts +7 -0
- package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -0
- package/dist/events/call.d.ts +0 -7
- 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 +16 -2
- package/dist/events/device.d.ts.map +1 -1
- package/dist/events/iframe.d.ts +0 -1
- package/dist/events/iframe.d.ts.map +1 -1
- package/dist/events/logBlockEvent.d.ts +2 -0
- package/dist/events/logBlockEvent.d.ts.map +1 -1
- package/dist/events/ui-promise.d.ts +4 -2
- package/dist/events/ui-promise.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +50 -4
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/events/ui-response.d.ts +10 -2
- package/dist/events/ui-response.d.ts.map +1 -1
- package/dist/index.d.ts +1765 -829
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11723 -4704
- package/dist/inject.d.ts +7 -3
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts +1 -2
- 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 +33 -22
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/index.d.ts +2 -2
- package/dist/protocols/protocol-v2/index.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/resources.d.ts +12 -0
- package/dist/protocols/protocol-v2/resources.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts +17 -0
- package/dist/protocols/protocol-v2/settingsUnlockPolicy.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts +42 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts +2 -0
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts +18 -4
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
- package/dist/topLevelInject.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +48 -9
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkBLEFirmwareRelease.d.ts +2 -13
- package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkBootloaderRelease.d.ts +2 -6
- package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
- package/dist/types/api/checkFirmwareRelease.d.ts +2 -13
- package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkFirmwareTypeAvailable.d.ts +2 -2
- package/dist/types/api/checkFirmwareTypeAvailable.d.ts.map +1 -1
- package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
- package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
- 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 +6 -2
- package/dist/types/api/deviceUnlock.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +8 -3
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +67 -5
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
- package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/types/api/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.map +1 -1
- package/dist/types/api/index.d.ts +25 -35
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/kaspaSignTransaction.d.ts +42 -4
- package/dist/types/api/kaspaSignTransaction.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 +11 -93
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/api/sessionCache.d.ts +4 -1
- package/dist/types/api/sessionCache.d.ts.map +1 -1
- package/dist/types/device.d.ts +139 -8
- 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 +44 -16
- 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 +14 -0
- package/dist/utils/deviceFeaturesCompat.d.ts.map +1 -0
- package/dist/utils/deviceFeaturesUtils.d.ts +10 -1
- package/dist/utils/deviceFeaturesUtils.d.ts.map +1 -1
- package/dist/utils/deviceInfoUtils.d.ts +9 -9
- package/dist/utils/deviceInfoUtils.d.ts.map +1 -1
- package/dist/utils/deviceSettings.d.ts +39 -7
- package/dist/utils/deviceSettings.d.ts.map +1 -1
- package/dist/utils/deviceVersionUtils.d.ts +7 -5
- package/dist/utils/deviceVersionUtils.d.ts.map +1 -1
- package/dist/utils/homescreen.d.ts +4 -0
- package/dist/utils/homescreen.d.ts.map +1 -1
- package/dist/utils/index.d.ts +5 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/networkUtils.d.ts +10 -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/pro2Nft.d.ts +38 -0
- package/dist/utils/pro2Nft.d.ts.map +1 -0
- package/dist/utils/pro2Wallpaper.d.ts +10 -0
- package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
- package/dist/utils/tracing.d.ts.map +1 -1
- package/dist/utils/uiProgressThrottle.d.ts +3 -0
- package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
- package/package.json +6 -4
- package/src/api/BaseMethod.ts +45 -23
- package/src/api/CheckAllFirmwareRelease.ts +440 -4
- package/src/api/CheckBLEFirmwareRelease.ts +37 -5
- package/src/api/CheckBootloaderRelease.ts +37 -5
- package/src/api/CheckFirmwareRelease.ts +36 -9
- package/src/api/CipherKeyValue.ts +4 -0
- package/src/api/ClearSessionCache.ts +4 -0
- package/src/api/DetectDeviceConnectProtocol.ts +18 -0
- package/src/api/DirList.ts +9 -4
- package/src/api/DirMake.ts +7 -4
- package/src/api/DirRemove.ts +7 -4
- package/src/api/FileDelete.ts +7 -4
- package/src/api/FileRead.ts +13 -7
- package/src/api/FileWrite.ts +10 -5
- package/src/api/FirmwareUpdate.ts +30 -15
- package/src/api/FirmwareUpdateV2.ts +535 -169
- package/src/api/FirmwareUpdateV3.ts +349 -91
- package/src/api/FirmwareUpdateV4.ts +2300 -710
- package/src/api/GetDeviceState.ts +59 -0
- package/src/api/GetFeatures.ts +6 -4
- package/src/api/GetOnekeyFeatures.ts +1 -75
- package/src/api/GetPassphraseState.ts +36 -12
- package/src/api/OpenWalletSession.ts +268 -0
- package/src/api/PathInfo.ts +9 -4
- package/src/api/PromptWebDeviceAccess.ts +2 -7
- package/src/api/SearchDevices.ts +35 -5
- package/src/api/UploadPortfolio.ts +32 -4
- package/src/api/alephium/AlephiumGetAddress.ts +0 -4
- package/src/api/alephium/AlephiumSignMessage.ts +0 -4
- package/src/api/alephium/AlephiumSignTransaction.ts +2 -6
- package/src/api/algo/AlgoGetAddress.ts +4 -0
- package/src/api/algo/AlgoSignTransaction.ts +4 -0
- package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +45 -32
- package/src/api/aptos/AptosGetAddress.ts +4 -0
- package/src/api/aptos/AptosGetPublicKey.ts +4 -0
- package/src/api/aptos/AptosSignInMessage.ts +4 -0
- package/src/api/aptos/AptosSignMessage.ts +4 -0
- package/src/api/aptos/AptosSignTransaction.ts +4 -0
- package/src/api/benfen/BenfenGetAddress.ts +11 -7
- package/src/api/benfen/BenfenGetPublicKey.ts +0 -4
- package/src/api/benfen/BenfenSignMessage.ts +0 -4
- package/src/api/benfen/BenfenSignTransaction.ts +0 -4
- package/src/api/btc/BTCGetAddress.ts +8 -1
- package/src/api/btc/BTCGetPublicKey.ts +9 -2
- package/src/api/btc/BTCSignMessage.ts +8 -1
- package/src/api/btc/BTCSignPsbt.ts +4 -0
- package/src/api/btc/BTCSignTransaction.ts +8 -1
- package/src/api/btc/BTCVerifyMessage.ts +8 -1
- package/src/api/btc/helpers/versionLimit.ts +7 -4
- package/src/api/cardano/CardanoGetAddress.ts +4 -0
- package/src/api/cardano/CardanoGetPublicKey.ts +4 -0
- package/src/api/cardano/CardanoSignMessage.ts +4 -0
- package/src/api/cardano/CardanoSignTransaction.ts +4 -0
- package/src/api/conflux/ConfluxGetAddress.ts +6 -0
- package/src/api/conflux/ConfluxSignMessage.ts +6 -0
- package/src/api/conflux/ConfluxSignMessageCIP23.ts +6 -0
- package/src/api/conflux/ConfluxSignTransaction.ts +8 -5
- package/src/api/cosmos/CosmosGetAddress.ts +4 -0
- package/src/api/cosmos/CosmosGetPublicKey.ts +4 -0
- package/src/api/cosmos/CosmosSignTransaction.ts +4 -0
- package/src/api/device/DeviceCancel.ts +5 -0
- package/src/api/device/DeviceChangePin.ts +28 -0
- package/src/api/device/DeviceFullyUploadResource.ts +4 -5
- package/src/api/device/DeviceLock.ts +5 -0
- package/src/api/device/DeviceRebootToBoardloader.ts +5 -0
- package/src/api/device/DeviceRebootToBootloader.ts +5 -0
- package/src/api/device/DeviceSettings.ts +211 -3
- package/src/api/device/DeviceSupportFeatures.ts +4 -0
- package/src/api/device/DeviceUnlock.ts +21 -3
- package/src/api/device/DeviceUpdateBootloader.ts +152 -8
- package/src/api/device/DeviceWipe.ts +25 -0
- package/src/api/device/PreInitialize.ts +4 -0
- package/src/api/dynex/DnxGetAddress.ts +0 -6
- package/src/api/dynex/DnxSignTransaction.ts +0 -6
- package/src/api/evm/EVMGetAddress.ts +6 -2
- package/src/api/evm/EVMGetPublicKey.ts +6 -2
- package/src/api/evm/EVMSignMessage.ts +6 -2
- package/src/api/evm/EVMSignMessageEIP712.ts +1 -11
- package/src/api/evm/EVMSignTransaction.ts +6 -2
- package/src/api/evm/EVMSignTypedData.ts +42 -50
- package/src/api/evm/EVMVerifyMessage.ts +6 -2
- 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/evm/protocol.ts +6 -0
- package/src/api/filecoin/FilecoinGetAddress.ts +4 -0
- package/src/api/filecoin/FilecoinSignTransaction.ts +4 -0
- package/src/api/firmware/FirmwareArtifactSource.ts +305 -0
- package/src/api/firmware/FirmwareHostBinding.ts +123 -0
- package/src/api/firmware/FirmwareMemoryHost.ts +143 -0
- package/src/api/firmware/FirmwarePreparationError.ts +12 -0
- package/src/api/firmware/FirmwarePreparedResourceArchive.ts +196 -0
- package/src/api/firmware/FirmwareUpdateBaseMethod.ts +214 -77
- package/src/api/firmware/FirmwareUpdateCapabilities.ts +9 -0
- package/src/api/firmware/FirmwareUpdatePlan.ts +946 -0
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +486 -0
- package/src/api/firmware/getBinary.ts +8 -3
- package/src/api/firmware/protocolV2Release.ts +168 -0
- package/src/api/firmware/updateBootloader.ts +19 -4
- package/src/api/firmware/uploadFirmware.ts +157 -26
- package/src/api/helpers/base64Data.ts +85 -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 +266 -42
- package/src/api/index.ts +6 -30
- package/src/api/kaspa/KaspaGetAddress.ts +7 -0
- package/src/api/kaspa/KaspaSignTransaction.ts +369 -29
- package/src/api/kaspa/helpers/TransferSerialize.ts +17 -7
- package/src/api/lightning/LnurlAuth.ts +0 -4
- package/src/api/near/NearGetAddress.ts +4 -0
- package/src/api/near/NearSignTransaction.ts +4 -0
- package/src/api/nem/NEMGetAddress.ts +4 -0
- package/src/api/nem/NEMSignTransaction.ts +4 -0
- package/src/api/neo/NeoGetAddress.ts +0 -4
- package/src/api/neo/NeoSignTransaction.ts +0 -4
- package/src/api/nervos/NervosGetAddress.ts +0 -4
- package/src/api/nervos/NervosSignTransaction.ts +2 -6
- package/src/api/nexa/NexaGetAddress.ts +0 -4
- package/src/api/nexa/NexaSignTransaction.ts +3 -5
- package/src/api/nostr/NostrDecryptMessage.ts +4 -0
- package/src/api/nostr/NostrEncryptMessage.ts +4 -0
- package/src/api/nostr/NostrGetPublicKey.ts +4 -0
- package/src/api/nostr/NostrSignEvent.ts +4 -0
- package/src/api/nostr/NostrSignSchnorr.ts +4 -0
- package/src/api/polkadot/PolkadotGetAddress.ts +4 -0
- package/src/api/polkadot/PolkadotSignTransaction.ts +4 -0
- package/src/api/polkadot/networks.ts +3 -3
- package/src/api/protocol-v2/DeviceFactoryInfoGet.ts +5 -2
- package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +6 -3
- package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +13 -32
- package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +10 -6
- package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +6 -3
- package/src/api/protocol-v2/DeviceInfoGet.ts +11 -18
- package/src/api/protocol-v2/DeviceReboot.ts +7 -3
- package/src/api/protocol-v2/DeviceStatusGet.ts +6 -1
- package/src/api/protocol-v2/DeviceUploadNft.ts +245 -0
- package/src/api/protocol-v2/DeviceUploadWallpaper.ts +45 -21
- package/src/api/protocol-v2/FilesystemFormat.ts +5 -2
- package/src/api/protocol-v2/FilesystemPermissionFix.ts +5 -2
- package/src/api/protocol-v2/Ping.ts +37 -3
- package/src/api/protocol-v2/ProtocolInfoRequest.ts +8 -3
- package/src/api/protocol-v2/helpers.ts +1 -1
- package/src/api/scdo/ScdoGetAddress.ts +0 -4
- package/src/api/scdo/ScdoSignMessage.ts +0 -4
- package/src/api/scdo/ScdoSignTransaction.ts +0 -4
- package/src/api/solana/SolGetAddress.ts +4 -0
- package/src/api/solana/SolSignMessage.ts +5 -1
- package/src/api/solana/SolSignOffchainMessage.ts +5 -1
- package/src/api/solana/SolSignTransaction.ts +6 -2
- package/src/api/starcoin/StarcoinGetAddress.ts +4 -0
- package/src/api/starcoin/StarcoinGetPublicKey.ts +4 -0
- package/src/api/starcoin/StarcoinSignMessage.ts +4 -0
- package/src/api/starcoin/StarcoinSignTransaction.ts +4 -0
- package/src/api/starcoin/StarcoinVerifyMessage.ts +4 -0
- package/src/api/stellar/StellarGetAddress.ts +1 -10
- package/src/api/stellar/StellarSignTransaction.ts +1 -14
- package/src/api/sui/SuiGetAddress.ts +5 -1
- package/src/api/sui/SuiGetPublicKey.ts +5 -1
- package/src/api/sui/SuiSignMessage.ts +5 -1
- package/src/api/sui/SuiSignTransaction.ts +5 -1
- package/src/api/ton/TonGetAddress.ts +5 -1
- package/src/api/ton/TonSignData.ts +5 -1
- package/src/api/ton/TonSignMessage.ts +10 -4
- package/src/api/ton/TonSignProof.ts +5 -1
- package/src/api/tron/TronGetAddress.ts +4 -0
- package/src/api/tron/TronSignMessage.ts +19 -8
- package/src/api/tron/TronSignTransaction.ts +5 -1
- package/src/api/utils.ts +32 -3
- package/src/api/xrp/XrpGetAddress.ts +4 -0
- package/src/api/xrp/XrpSignTransaction.ts +5 -1
- package/src/constants/index.ts +1 -4
- package/src/core/RequestQueue.ts +0 -18
- package/src/core/deviceEventRegistration.ts +27 -0
- package/src/core/index.ts +468 -186
- package/src/core/uiPromiseRegistry.ts +63 -0
- package/src/data/messages/messages-protocol-v2.json +523 -449
- package/src/data/messages/messages.json +286 -1
- package/src/data-manager/DataManager.ts +162 -44
- package/src/data-manager/TransportManager.ts +7 -1
- package/src/data-manager/connectSettings.ts +11 -0
- package/src/device/Device.ts +909 -269
- package/src/device/DeviceCommands.ts +198 -160
- package/src/device/DeviceConnector.ts +51 -21
- package/src/device/DeviceFeaturesState.ts +25 -0
- package/src/device/DevicePool.ts +105 -23
- package/src/device/DeviceStateMapper.ts +418 -0
- package/src/device/DeviceStateProjector.ts +152 -0
- package/src/device/DeviceStateStore.ts +232 -0
- package/src/device/DeviceWalletSessionStore.ts +72 -6
- package/src/device/cloneDeviceState.ts +39 -0
- package/src/device/deviceIdentity.ts +18 -0
- package/src/deviceProfile/buildDeviceFeatures.ts +209 -191
- package/src/deviceProfile/index.ts +0 -1
- package/src/deviceProfile/protocolV2DeviceIdentity.ts +35 -0
- package/src/events/call.ts +0 -6
- package/src/events/core.ts +0 -2
- package/src/events/device.ts +22 -1
- package/src/events/iframe.ts +0 -1
- package/src/events/logBlockEvent.ts +93 -2
- package/src/events/ui-promise.ts +4 -2
- package/src/events/ui-request.ts +61 -4
- package/src/events/ui-response.ts +12 -2
- package/src/index.ts +17 -4
- package/src/inject.ts +89 -55
- package/src/lowLevelInject.ts +11 -7
- package/src/protocols/protocol-v2/deviceSession.ts +24 -0
- package/src/protocols/protocol-v2/features.ts +118 -52
- package/src/protocols/protocol-v2/firmware.ts +3 -1
- package/src/protocols/protocol-v2/index.ts +9 -3
- package/src/protocols/protocol-v2/resources.ts +171 -0
- package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +65 -0
- package/src/protocols/protocol-v2/uiInteraction.ts +250 -0
- package/src/protocols/protocol-v2/unlockPolicy.ts +1 -0
- package/src/protocols/protocol-v2/unlockPolicyRunner.ts +136 -0
- package/src/protocols/protocol-v2/walletSession.ts +420 -49
- package/src/topLevelInject.ts +11 -6
- package/src/types/api/checkAllFirmwareRelease.ts +72 -9
- package/src/types/api/checkBLEFirmwareRelease.ts +4 -13
- package/src/types/api/checkBootloaderRelease.ts +2 -6
- package/src/types/api/checkFirmwareRelease.ts +2 -13
- package/src/types/api/checkFirmwareTypeAvailable.ts +2 -2
- package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
- package/src/types/api/deviceSettings.ts +26 -2
- package/src/types/api/deviceUnlock.ts +13 -2
- package/src/types/api/deviceUpdateBootloader.ts +7 -0
- package/src/types/api/export.ts +33 -1
- package/src/types/api/firmwareUpdate.ts +85 -11
- package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
- package/src/types/api/firmwareUpdatePlan.ts +38 -0
- package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
- package/src/types/api/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 +7 -0
- package/src/types/api/index.ts +43 -73
- package/src/types/api/kaspaSignTransaction.ts +60 -4
- package/src/types/api/openWalletSession.ts +54 -0
- package/src/types/api/protocolV2.ts +23 -188
- package/src/types/api/sessionCache.ts +9 -4
- package/src/types/device.ts +211 -9
- package/src/types/params.ts +9 -2
- package/src/types/settings.ts +52 -25
- package/src/utils/assets.ts +4 -1
- package/src/utils/deviceFeaturesCompat.ts +191 -0
- package/src/utils/deviceFeaturesUtils.ts +42 -9
- package/src/utils/deviceInfoUtils.ts +29 -69
- package/src/utils/deviceSettings.ts +181 -39
- package/src/utils/deviceVersionUtils.ts +25 -44
- package/src/utils/findDefectiveBatchDevice.ts +3 -3
- package/src/utils/homescreen.ts +40 -0
- package/src/utils/index.ts +26 -7
- package/src/utils/networkUtils.ts +274 -16
- package/src/utils/pro2Nft.ts +165 -0
- package/src/utils/pro2Wallpaper.ts +44 -25
- package/src/utils/tracing.ts +3 -1
- package/src/utils/uiProgressThrottle.ts +63 -0
- package/tsconfig.type-tests.json +12 -0
- package/__tests__/RequestQueue.test.ts +0 -34
- package/dist/api/GetDeviceInfo.d.ts +0 -9
- package/dist/api/GetDeviceInfo.d.ts.map +0 -1
- package/dist/api/firmware/progressThrottle.d.ts +0 -3
- package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSessionGet.d.ts +0 -6
- package/dist/api/protocol-v2/DeviceSessionGet.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSettingsGet.d.ts +0 -6
- package/dist/api/protocol-v2/DeviceSettingsGet.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts +0 -16
- package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSettingsSet.d.ts +0 -12
- package/dist/api/protocol-v2/DeviceSettingsSet.d.ts.map +0 -1
- package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
- package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -9
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
- package/dist/types/api/getDeviceInfo.d.ts +0 -87
- package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
- package/src/api/GetDeviceInfo.ts +0 -145
- package/src/api/firmware/progressThrottle.ts +0 -44
- package/src/api/protocol-v2/DeviceSessionGet.ts +0 -15
- package/src/api/protocol-v2/DeviceSettingsGet.ts +0 -16
- package/src/api/protocol-v2/DeviceSettingsPageShow.ts +0 -59
- package/src/api/protocol-v2/DeviceSettingsSet.ts +0 -39
- package/src/deviceProfile/buildDeviceProfile.ts +0 -354
- package/src/protocols/protocol-v2/unlockRetry.ts +0 -46
- package/src/types/api/getDeviceInfo.ts +0 -101
package/src/core/index.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
import EventEmitter from 'events';
|
|
3
|
+
import {
|
|
4
|
+
DeviceSessionPinType,
|
|
5
|
+
TRANSPORT_EVENT,
|
|
6
|
+
isProtocolV2LinkDisabledError,
|
|
7
|
+
} from '@onekeyfe/hd-transport';
|
|
3
8
|
import {
|
|
4
9
|
ERRORS,
|
|
10
|
+
ERROR_CODES_REQUIRE_DISCONNECT,
|
|
5
11
|
ERROR_CODES_REQUIRE_RELEASE,
|
|
6
12
|
HardwareError,
|
|
7
13
|
HardwareErrorCode,
|
|
@@ -14,14 +20,7 @@ import {
|
|
|
14
20
|
createNewFirmwareUnReleaseHardwareError,
|
|
15
21
|
} from '@onekeyfe/hd-shared';
|
|
16
22
|
|
|
17
|
-
import {
|
|
18
|
-
LoggerNames,
|
|
19
|
-
enableLog,
|
|
20
|
-
getLogger,
|
|
21
|
-
isMethodVersionRangeUnsupported,
|
|
22
|
-
setLoggerPostMessage,
|
|
23
|
-
wait,
|
|
24
|
-
} from '../utils';
|
|
23
|
+
import { LoggerNames, enableLog, getLogger, setLoggerPostMessage, wait } from '../utils';
|
|
25
24
|
import {
|
|
26
25
|
findDefectiveBatchDevice,
|
|
27
26
|
getDefectiveDeviceInfo,
|
|
@@ -32,10 +31,12 @@ import {
|
|
|
32
31
|
createRequestContext,
|
|
33
32
|
createSdkTracingContext,
|
|
34
33
|
formatRequestContext,
|
|
34
|
+
generateInstanceId,
|
|
35
35
|
getActiveRequestsByDeviceInstance,
|
|
36
36
|
updateRequestContext,
|
|
37
37
|
} from '../utils/tracing';
|
|
38
38
|
import { Device } from '../device/Device';
|
|
39
|
+
import { checkLiveDeviceId } from '../device/deviceIdentity';
|
|
39
40
|
import { DeviceList } from '../device/DeviceList';
|
|
40
41
|
import { DevicePool } from '../device/DevicePool';
|
|
41
42
|
import { PollingStateManager } from './PollingStateManager';
|
|
@@ -51,23 +52,38 @@ import {
|
|
|
51
52
|
createDeviceMessage,
|
|
52
53
|
createResponseMessage,
|
|
53
54
|
createUiMessage,
|
|
55
|
+
formatLogMethodLabel,
|
|
56
|
+
getLogBlockLabel,
|
|
57
|
+
getSafeLogPayload,
|
|
54
58
|
} from '../events';
|
|
55
59
|
import TransportManager from '../data-manager/TransportManager';
|
|
56
60
|
import DeviceConnector from '../device/DeviceConnector';
|
|
57
61
|
import RequestQueue from './RequestQueue';
|
|
62
|
+
import { consumeUiPromise, findUiPromiseForResponse, rejectUiPromises } from './uiPromiseRegistry';
|
|
63
|
+
import { registerHardwareUiEventListeners } from './deviceEventRegistration';
|
|
58
64
|
import { getSynchronize } from '../utils/getSynchronize';
|
|
59
|
-
import {
|
|
65
|
+
import { runMethodWithUnlockPolicy } from '../protocols/protocol-v2/unlockPolicyRunner';
|
|
66
|
+
import {
|
|
67
|
+
ProtocolV2UiInteractionCoordinator,
|
|
68
|
+
isProtocolV2UiEnabled,
|
|
69
|
+
} from '../protocols/protocol-v2/uiInteraction';
|
|
70
|
+
import { createUiProgressMessageFilter } from '../utils/uiProgressThrottle';
|
|
60
71
|
|
|
61
72
|
import type { ConnectSettings, Features, KnownDevice } from '../types';
|
|
62
73
|
import type { CoreMessage, IFrameCallMessage, UiPromise, UiPromiseResponse } from '../events';
|
|
63
74
|
import type { DeviceEvents, InitOptions, RunOptions } from '../device/Device';
|
|
64
75
|
import type { SdkTracingContext } from '../utils/tracing';
|
|
65
76
|
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
66
|
-
import type {
|
|
77
|
+
import type {
|
|
78
|
+
LowlevelTransportSharedPlugin,
|
|
79
|
+
OneKeyDeviceInfo,
|
|
80
|
+
TransportDeviceDisconnectEvent,
|
|
81
|
+
} from '@onekeyfe/hd-transport';
|
|
67
82
|
import type { BaseMethod } from '../api/BaseMethod';
|
|
68
83
|
|
|
69
84
|
const Log = getLogger(LoggerNames.Core);
|
|
70
85
|
const PRE_INITIALIZE_TTL_MS = 60 * 1000;
|
|
86
|
+
const PRE_PENDING_CALL_TIMEOUT_MS = 15 * 1000;
|
|
71
87
|
|
|
72
88
|
// Dedup/coalesce state for "pre-warm signal" methods (isPreWarmSignal),
|
|
73
89
|
// keyed by getPreWarmKey(): coalesce in-flight, skip if warmed within TTL.
|
|
@@ -92,14 +108,15 @@ function hasDeriveCardano(method: BaseMethod): boolean {
|
|
|
92
108
|
|
|
93
109
|
const parseInitOptions = (method?: BaseMethod): InitOptions => ({
|
|
94
110
|
initSession: method?.payload.initSession,
|
|
95
|
-
passphraseState: method?.payload.passphraseState,
|
|
111
|
+
passphraseState: method?.payload.useEmptyPassphrase ? undefined : method?.payload.passphraseState,
|
|
96
112
|
deviceId: method?.payload.deviceId,
|
|
97
113
|
deriveCardano: method && hasDeriveCardano(method),
|
|
98
114
|
connectProtocol: method?.payload.connectProtocol,
|
|
115
|
+
forceProtocolDetection: method?.payload.forceProtocolDetection,
|
|
99
116
|
protocolV2DeviceInfoTimeoutMs: method?.payload.protocolV2DeviceInfoTimeoutMs,
|
|
100
117
|
});
|
|
101
118
|
|
|
102
|
-
let _core: Core;
|
|
119
|
+
let _core: Core | undefined;
|
|
103
120
|
let _deviceList: DeviceList | undefined;
|
|
104
121
|
let _connector: DeviceConnector | undefined;
|
|
105
122
|
let _uiPromises: UiPromise<UiPromiseResponse['type']>[] = []; // Waiting for ui response
|
|
@@ -124,6 +141,9 @@ const toError = (error: unknown): Error | undefined => {
|
|
|
124
141
|
}
|
|
125
142
|
};
|
|
126
143
|
|
|
144
|
+
const isExpectedCompatibilityError = (error: unknown) =>
|
|
145
|
+
error instanceof HardwareError && error.errorCode === HardwareErrorCode.DeviceNotSupportMethod;
|
|
146
|
+
|
|
127
147
|
const updateMethodRequestContext = (method: BaseMethod, updates: any) => {
|
|
128
148
|
if (method.requestContext) {
|
|
129
149
|
updateRequestContext(method.requestContext.responseID, updates);
|
|
@@ -143,11 +163,16 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
|
|
|
143
163
|
}
|
|
144
164
|
|
|
145
165
|
// find api method
|
|
146
|
-
let method
|
|
166
|
+
let method!: BaseMethod;
|
|
147
167
|
try {
|
|
148
168
|
method = findMethod(message as IFrameCallMessage);
|
|
149
169
|
method.connector = _connector;
|
|
150
|
-
|
|
170
|
+
const shouldPostMessage = createUiProgressMessageFilter();
|
|
171
|
+
method.postMessage = event => {
|
|
172
|
+
if (shouldPostMessage(event)) {
|
|
173
|
+
postMessage(event);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
151
176
|
method.setContext?.(context);
|
|
152
177
|
|
|
153
178
|
method.requestContext = createRequestContext(method.responseID, method.name, {
|
|
@@ -159,11 +184,13 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
|
|
|
159
184
|
|
|
160
185
|
method.init();
|
|
161
186
|
} catch (error) {
|
|
162
|
-
|
|
187
|
+
if (method) {
|
|
188
|
+
completeMethodRequestContext(method, error);
|
|
189
|
+
method.dispose();
|
|
190
|
+
}
|
|
191
|
+
return createResponseMessage(method?.responseID ?? message.id, false, { error });
|
|
163
192
|
}
|
|
164
193
|
|
|
165
|
-
DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
166
|
-
|
|
167
194
|
if (!method.useDevice) {
|
|
168
195
|
updateMethodRequestContext(method, { status: 'running' });
|
|
169
196
|
try {
|
|
@@ -270,26 +297,35 @@ const handlePreWarmSignal = async (
|
|
|
270
297
|
}
|
|
271
298
|
};
|
|
272
299
|
|
|
273
|
-
const waitWithTimeout = async (promise: Promise<any>, timeout: number) => {
|
|
274
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
275
|
-
setTimeout(() => reject(new Error('Request timeout')), timeout);
|
|
276
|
-
});
|
|
277
|
-
return Promise.race([promise, timeoutPromise]);
|
|
278
|
-
};
|
|
279
|
-
|
|
280
300
|
const waitForPendingPromise = async (
|
|
281
|
-
|
|
282
|
-
|
|
301
|
+
connectId: string,
|
|
302
|
+
getPrePendingCallPromise: (connectId: string) => Promise<void> | undefined,
|
|
303
|
+
removePrePendingCallPromise?: (connectId: string, promise: Promise<void>) => void
|
|
283
304
|
) => {
|
|
284
|
-
const pendingPromise = getPrePendingCallPromise();
|
|
305
|
+
const pendingPromise = getPrePendingCallPromise(connectId);
|
|
285
306
|
if (pendingPromise) {
|
|
286
307
|
Log.debug('pre pending call promise before call method, wait for it');
|
|
308
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
309
|
+
let timedOut = false;
|
|
287
310
|
try {
|
|
288
|
-
await
|
|
311
|
+
await Promise.race([
|
|
312
|
+
pendingPromise,
|
|
313
|
+
new Promise<void>(resolve => {
|
|
314
|
+
timer = setTimeout(() => {
|
|
315
|
+
timedOut = true;
|
|
316
|
+
resolve();
|
|
317
|
+
}, PRE_PENDING_CALL_TIMEOUT_MS);
|
|
318
|
+
}),
|
|
319
|
+
]);
|
|
289
320
|
} catch (error) {
|
|
290
|
-
//
|
|
321
|
+
// Cancellation is best-effort; the transport teardown owns recovery.
|
|
322
|
+
} finally {
|
|
323
|
+
if (timer) clearTimeout(timer);
|
|
324
|
+
removePrePendingCallPromise?.(connectId, pendingPromise);
|
|
325
|
+
}
|
|
326
|
+
if (timedOut) {
|
|
327
|
+
Log.warn('pre pending call promise timed out before call method', { connectId });
|
|
291
328
|
}
|
|
292
|
-
removePrePendingCallPromise?.(pendingPromise);
|
|
293
329
|
Log.debug('pre pending call promise before call method done');
|
|
294
330
|
}
|
|
295
331
|
};
|
|
@@ -301,7 +337,7 @@ const onCallDevice = async (
|
|
|
301
337
|
): Promise<any> => {
|
|
302
338
|
let messageResponse: any;
|
|
303
339
|
|
|
304
|
-
const { requestQueue, getPrePendingCallPromise,
|
|
340
|
+
const { requestQueue, getPrePendingCallPromise, removePrePendingCallPromise } = context;
|
|
305
341
|
|
|
306
342
|
updateMethodRequestContext(method, { status: 'running' });
|
|
307
343
|
|
|
@@ -329,7 +365,11 @@ const onCallDevice = async (
|
|
|
329
365
|
await context.waitForCallbackTasks(method.connectId);
|
|
330
366
|
}
|
|
331
367
|
|
|
332
|
-
await waitForPendingPromise(
|
|
368
|
+
await waitForPendingPromise(
|
|
369
|
+
method.connectId ?? '',
|
|
370
|
+
getPrePendingCallPromise,
|
|
371
|
+
removePrePendingCallPromise
|
|
372
|
+
);
|
|
333
373
|
|
|
334
374
|
const task = requestQueue.createTask(method);
|
|
335
375
|
|
|
@@ -358,7 +398,7 @@ const onCallDevice = async (
|
|
|
358
398
|
);
|
|
359
399
|
} catch (e) {
|
|
360
400
|
preWarmCallbackTask?.resolve();
|
|
361
|
-
|
|
401
|
+
Log.debug('ensureConnected error: ', e);
|
|
362
402
|
|
|
363
403
|
completeMethodRequestContext(method, e);
|
|
364
404
|
|
|
@@ -395,18 +435,28 @@ const onCallDevice = async (
|
|
|
395
435
|
);
|
|
396
436
|
}
|
|
397
437
|
|
|
398
|
-
device
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
438
|
+
registerHardwareUiEventListeners(device, {
|
|
439
|
+
pin: onDevicePinHandler,
|
|
440
|
+
pinOnDevice: onEnterPinOnDeviceHandler,
|
|
441
|
+
pinOnDeviceComplete: onPinOnDeviceCompleteHandler,
|
|
442
|
+
button: onDeviceButtonHandler,
|
|
443
|
+
passphrase: message.payload.useEmptyPassphrase
|
|
444
|
+
? onEmptyPassphraseHandler
|
|
445
|
+
: onDevicePassphraseHandler,
|
|
446
|
+
passphraseOnDevice: onEnterPassphraseOnDeviceHandler,
|
|
447
|
+
attachPinOnDevice: onEnterAttachPinOnDeviceHandler,
|
|
448
|
+
});
|
|
405
449
|
device.on(DEVICE.FEATURES, onDeviceFeaturesHandler);
|
|
450
|
+
device.on(DEVICE.STATE, onDeviceStateHandler);
|
|
406
451
|
device.on(
|
|
407
452
|
DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,
|
|
408
453
|
onSelectDeviceInBootloaderForWebDeviceHandler
|
|
409
454
|
);
|
|
455
|
+
|
|
456
|
+
const protocolV2UiCoordinator = new ProtocolV2UiInteractionCoordinator(device, postMessage);
|
|
457
|
+
let protocolV2Operation = false;
|
|
458
|
+
let protocolV2CloseEmitted = false;
|
|
459
|
+
device.beginProtocolV2UiInteraction();
|
|
410
460
|
device.on(
|
|
411
461
|
DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,
|
|
412
462
|
onSelectDeviceForSwitchFirmwareWebDeviceHandler
|
|
@@ -418,14 +468,17 @@ const onCallDevice = async (
|
|
|
418
468
|
await context.waitForCallbackTasks(method.connectId, preWarmCallbackTask);
|
|
419
469
|
}
|
|
420
470
|
|
|
421
|
-
await waitForPendingPromise(
|
|
471
|
+
await waitForPendingPromise(
|
|
472
|
+
method.connectId ?? '',
|
|
473
|
+
getPrePendingCallPromise,
|
|
474
|
+
removePrePendingCallPromise
|
|
475
|
+
);
|
|
422
476
|
|
|
423
477
|
const inner = async (): Promise<void> => {
|
|
424
|
-
// Protocol
|
|
425
|
-
//
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
}
|
|
478
|
+
// Protocol is established from an active device response during acquire/initialize.
|
|
479
|
+
// Reject unsupported methods before any method-specific device command is sent.
|
|
480
|
+
method.assertProtocolSupported(device.getProtocol(), device.getCurrentFirmwareType());
|
|
481
|
+
protocolV2Operation = device.isProtocolV2();
|
|
429
482
|
|
|
430
483
|
// check firmware version
|
|
431
484
|
const versionRange = device.getCurrentMethodVersionRange(
|
|
@@ -436,8 +489,8 @@ const onCallDevice = async (
|
|
|
436
489
|
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
437
490
|
let newVersionStatus: ReturnType<typeof DataManager.getFirmwareStatus> | undefined;
|
|
438
491
|
|
|
439
|
-
//
|
|
440
|
-
// Pro2
|
|
492
|
+
// Defective-batch and forced-update gates depend on V1 features/remote config.
|
|
493
|
+
// Pro2 joins after DataManager supports its profile firmwareStatus.
|
|
441
494
|
if (device.features && !device.isProtocolV2()) {
|
|
442
495
|
await DataManager.checkAndReloadData();
|
|
443
496
|
|
|
@@ -485,10 +538,6 @@ const onCallDevice = async (
|
|
|
485
538
|
}
|
|
486
539
|
}
|
|
487
540
|
|
|
488
|
-
if (isMethodVersionRangeUnsupported(versionRange)) {
|
|
489
|
-
throw createDeviceNotSupportMethodError(method.name, deviceFirmwareType);
|
|
490
|
-
}
|
|
491
|
-
|
|
492
541
|
if (versionRange) {
|
|
493
542
|
if (semver.valid(versionRange.min) && semver.lt(currentFirmwareVersion, versionRange.min)) {
|
|
494
543
|
if (newVersionStatus === 'none' || newVersionStatus === 'valid') {
|
|
@@ -539,89 +588,102 @@ const onCallDevice = async (
|
|
|
539
588
|
);
|
|
540
589
|
}
|
|
541
590
|
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
591
|
+
try {
|
|
592
|
+
let deviceIdCheckedDuringUnlockPreflight = false;
|
|
593
|
+
const response = await runMethodWithUnlockPolicy<object>(method, device, {
|
|
594
|
+
uiCoordinator: protocolV2UiCoordinator,
|
|
595
|
+
afterStatusBeforeUnlock: () => {
|
|
596
|
+
if (method.deviceId && method.checkDeviceId) {
|
|
597
|
+
if (!device.checkDeviceId(method.deviceId)) {
|
|
598
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
|
|
599
|
+
}
|
|
600
|
+
deviceIdCheckedDuringUnlockPreflight = true;
|
|
601
|
+
}
|
|
602
|
+
},
|
|
603
|
+
prepare: async () => {
|
|
604
|
+
if (method.deviceId && method.checkDeviceId && !deviceIdCheckedDuringUnlockPreflight) {
|
|
605
|
+
const isSameDeviceID = await checkLiveDeviceId(device, method.deviceId);
|
|
606
|
+
if (!isSameDeviceID) {
|
|
607
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckDeviceIdError);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
553
610
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
611
|
+
/**
|
|
612
|
+
* check firmware release info
|
|
613
|
+
*/
|
|
614
|
+
method.checkFirmwareRelease();
|
|
558
615
|
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
616
|
+
/**
|
|
617
|
+
* check additional supported feature
|
|
618
|
+
*/
|
|
619
|
+
method.checkDeviceSupportFeature();
|
|
563
620
|
|
|
564
|
-
|
|
565
|
-
|
|
621
|
+
// reconfigure messages
|
|
622
|
+
if (_deviceList && device.features && !device.isProtocolV2()) {
|
|
623
|
+
await TransportManager.reconfigure(device.features);
|
|
624
|
+
}
|
|
566
625
|
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
626
|
+
// Check to see if it is safe to use Passphrase
|
|
627
|
+
checkPassphraseEnableState(method, device.features);
|
|
628
|
+
|
|
629
|
+
if (shouldCheckPassphraseState(method, device)) {
|
|
630
|
+
// check version
|
|
631
|
+
const support = device.supportNewPassphrase();
|
|
632
|
+
if (!support.support) {
|
|
633
|
+
throw ERRORS.TypedError(
|
|
634
|
+
HardwareErrorCode.DeviceNotSupportPassphrase,
|
|
635
|
+
`Device not support passphrase, please update to ${support.require}`,
|
|
636
|
+
{
|
|
637
|
+
require: support.require,
|
|
638
|
+
}
|
|
639
|
+
);
|
|
577
640
|
}
|
|
578
|
-
)
|
|
579
|
-
);
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
// Check Device passphrase State
|
|
583
|
-
const passphraseStateSafety = await device.checkPassphraseStateSafety(
|
|
584
|
-
method.payload?.passphraseState,
|
|
585
|
-
method.payload?.useEmptyPassphrase,
|
|
586
|
-
method.payload?.skipPassphraseCheck
|
|
587
|
-
);
|
|
588
641
|
|
|
589
|
-
|
|
590
|
-
|
|
642
|
+
// Check Device passphrase State after the Protocol V2 pre-unlock gate.
|
|
643
|
+
const passphraseStateSafety = await device.checkPassphraseStateSafety(
|
|
644
|
+
method.payload?.passphraseState,
|
|
645
|
+
method.payload?.useEmptyPassphrase,
|
|
646
|
+
method.payload?.skipPassphraseCheck,
|
|
647
|
+
hasDeriveCardano(method)
|
|
648
|
+
);
|
|
591
649
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
return Promise.reject(
|
|
595
|
-
ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError)
|
|
596
|
-
);
|
|
597
|
-
}
|
|
650
|
+
// Double check, handles the special case of Touch/Pro
|
|
651
|
+
checkPassphraseEnableState(method, device.features);
|
|
598
652
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
653
|
+
if (!passphraseStateSafety) {
|
|
654
|
+
DevicePool.clearDeviceCache(method.payload.connectId);
|
|
655
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError);
|
|
656
|
+
}
|
|
602
657
|
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
? e
|
|
610
|
-
: ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
|
|
611
|
-
// messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
612
|
-
// requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
613
|
-
// return;
|
|
614
|
-
throw error;
|
|
615
|
-
}
|
|
658
|
+
// Protocol V2 emits the PIN phase completion from DeviceSessionAskPin.
|
|
659
|
+
// Keep the legacy compatibility close for Protocol V1 only.
|
|
660
|
+
if (!device.isProtocolV2()) {
|
|
661
|
+
postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW));
|
|
662
|
+
}
|
|
663
|
+
}
|
|
616
664
|
|
|
617
|
-
|
|
665
|
+
// Automatic check safety_check level for Kovan, Ropsten, Rinkeby, Goerli test networks.
|
|
666
|
+
try {
|
|
667
|
+
await method.checkSafetyLevelOnTestNet();
|
|
668
|
+
} catch (e) {
|
|
669
|
+
throw e instanceof HardwareError
|
|
670
|
+
? e
|
|
671
|
+
: ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
|
|
672
|
+
}
|
|
618
673
|
|
|
619
|
-
|
|
620
|
-
|
|
674
|
+
method.device?.commands?.checkDisposed();
|
|
675
|
+
},
|
|
676
|
+
});
|
|
621
677
|
messageResponse = createResponseMessage(method.responseID, true, response);
|
|
622
678
|
requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
623
679
|
completeMethodRequestContext(method);
|
|
624
680
|
} catch (error) {
|
|
681
|
+
// Device.run may release the request before transport callbacks finish after a timeout.
|
|
682
|
+
// Ignore the stale callback because the caller already received the connection error.
|
|
683
|
+
if (!requestQueue.getTask(method.responseID)) {
|
|
684
|
+
Log.debug(`Call API - Ignore late inner method result`, error);
|
|
685
|
+
return;
|
|
686
|
+
}
|
|
625
687
|
Log.debug(`Call API - Inner Method Run Error`, error);
|
|
626
688
|
messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
627
689
|
requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
@@ -634,6 +696,13 @@ const onCallDevice = async (
|
|
|
634
696
|
) {
|
|
635
697
|
throw error;
|
|
636
698
|
}
|
|
699
|
+
} finally {
|
|
700
|
+
if (isProtocolV2UiEnabled(method)) {
|
|
701
|
+
protocolV2CloseEmitted = protocolV2UiCoordinator.close({
|
|
702
|
+
ensureOperationClose: protocolV2Operation,
|
|
703
|
+
protocolV2Operation,
|
|
704
|
+
});
|
|
705
|
+
}
|
|
637
706
|
}
|
|
638
707
|
};
|
|
639
708
|
Log.debug('Call API - Device Run: ', device.mainId);
|
|
@@ -649,7 +718,9 @@ const onCallDevice = async (
|
|
|
649
718
|
try {
|
|
650
719
|
return await task.callPromise.promise;
|
|
651
720
|
} catch (e) {
|
|
652
|
-
|
|
721
|
+
if (!isExpectedCompatibilityError(e)) {
|
|
722
|
+
Log.debug('Device Run Error: ', e);
|
|
723
|
+
}
|
|
653
724
|
completeMethodRequestContext(method, e);
|
|
654
725
|
return createResponseMessage(method.responseID, false, { error: e });
|
|
655
726
|
}
|
|
@@ -687,7 +758,17 @@ const onCallDevice = async (
|
|
|
687
758
|
|
|
688
759
|
requestQueue.releaseTask(method.responseID);
|
|
689
760
|
|
|
690
|
-
|
|
761
|
+
if (isProtocolV2UiEnabled(method)) {
|
|
762
|
+
if (!protocolV2CloseEmitted && protocolV2Operation) {
|
|
763
|
+
protocolV2CloseEmitted = protocolV2UiCoordinator.close({
|
|
764
|
+
ensureOperationClose: true,
|
|
765
|
+
protocolV2Operation: true,
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
if (!protocolV2CloseEmitted) {
|
|
769
|
+
closePopup();
|
|
770
|
+
}
|
|
771
|
+
}
|
|
691
772
|
|
|
692
773
|
cleanup();
|
|
693
774
|
|
|
@@ -843,14 +924,38 @@ function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown)
|
|
|
843
924
|
);
|
|
844
925
|
}
|
|
845
926
|
|
|
927
|
+
function isMissingDetectedProtocolError(error: unknown) {
|
|
928
|
+
const typedError = error as { errorCode?: unknown; message?: unknown };
|
|
929
|
+
return (
|
|
930
|
+
typedError?.errorCode === HardwareErrorCode.RuntimeError &&
|
|
931
|
+
typeof typedError.message === 'string' &&
|
|
932
|
+
typedError.message.includes('Device protocol has not been detected')
|
|
933
|
+
);
|
|
934
|
+
}
|
|
935
|
+
|
|
846
936
|
/**
|
|
847
937
|
* If the Bluetooth connection times out, retry up to 6 times
|
|
848
938
|
* @param retryCount - Current retry count (default 0)
|
|
849
939
|
*/
|
|
850
940
|
async function connectDeviceForBle(method: BaseMethod, device: Device, retryCount = 0) {
|
|
851
941
|
try {
|
|
852
|
-
|
|
942
|
+
if (method.payload.forceProtocolDetection && device.hasDeviceAcquire()) {
|
|
943
|
+
await device.release();
|
|
944
|
+
}
|
|
945
|
+
const shouldAcquire =
|
|
946
|
+
method.payload.forceProtocolDetection ||
|
|
947
|
+
!device.hasDeviceAcquire() ||
|
|
948
|
+
!device.commands ||
|
|
949
|
+
device.commands.disposed;
|
|
950
|
+
if (shouldAcquire) {
|
|
951
|
+
await device.acquire(method.payload.connectProtocol, {
|
|
952
|
+
forceProtocolDetection: method.payload.forceProtocolDetection,
|
|
953
|
+
});
|
|
954
|
+
}
|
|
853
955
|
if (method.payload?.onlyConnectBleDevice) {
|
|
956
|
+
if (shouldAcquire) {
|
|
957
|
+
DevicePool.emitter.emit(DEVICE.CONNECT, device);
|
|
958
|
+
}
|
|
854
959
|
return;
|
|
855
960
|
}
|
|
856
961
|
// Skip initialize if conditions are met
|
|
@@ -861,15 +966,35 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
|
|
|
861
966
|
passphraseState: initOptions.passphraseState,
|
|
862
967
|
});
|
|
863
968
|
}
|
|
969
|
+
if (shouldAcquire) {
|
|
970
|
+
DevicePool.emitter.emit(DEVICE.CONNECT, device);
|
|
971
|
+
}
|
|
864
972
|
} catch (err) {
|
|
973
|
+
const requiresColdReconnect = isMissingDetectedProtocolError(err);
|
|
974
|
+
// Device.run()'s REQUIRE_DISCONNECT handling never sees acquire/initialize
|
|
975
|
+
// failures, so with keep-alive a wedged link would be reused by every retry
|
|
976
|
+
// (field case: Initialize timing out at 25s per attempt, forever). Drop it
|
|
977
|
+
// here so the next retry cold-connects.
|
|
978
|
+
if (
|
|
979
|
+
(ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) || requiresColdReconnect) &&
|
|
980
|
+
device.mainId &&
|
|
981
|
+
device.deviceConnector
|
|
982
|
+
) {
|
|
983
|
+
await device.deviceConnector.disconnect(device.mainId).catch(() => undefined);
|
|
984
|
+
// The connector only drops the link; `deviceAcquired` is reset by
|
|
985
|
+
// release()/markTransportDisconnected() alone. Leaving it set makes the
|
|
986
|
+
// next attempt skip acquire and initialize onto the link we just cut.
|
|
987
|
+
device.markTransportDisconnected();
|
|
988
|
+
}
|
|
865
989
|
if (
|
|
866
990
|
(err.errorCode === HardwareErrorCode.BleTimeoutError ||
|
|
867
991
|
err.errorCode === HardwareErrorCode.BleConnectedError ||
|
|
868
|
-
isRetryableBleProtocolV2ProbeError(method, err)
|
|
992
|
+
isRetryableBleProtocolV2ProbeError(method, err) ||
|
|
993
|
+
requiresColdReconnect) &&
|
|
869
994
|
retryCount < 6
|
|
870
995
|
) {
|
|
871
996
|
const nextRetry = retryCount + 1;
|
|
872
|
-
Log.debug(`Bluetooth
|
|
997
|
+
Log.debug(`Bluetooth connection will retry, retry count: ${nextRetry}`);
|
|
873
998
|
await wait(3000);
|
|
874
999
|
await connectDeviceForBle(method, device, nextRetry);
|
|
875
1000
|
} else {
|
|
@@ -983,6 +1108,19 @@ const ensureConnected = async (
|
|
|
983
1108
|
}
|
|
984
1109
|
} catch (error) {
|
|
985
1110
|
Log.debug('device error: ', error);
|
|
1111
|
+
if (error.errorCode === HardwareErrorCode.BleUnavailableWhileUsbConnected) {
|
|
1112
|
+
reject(error);
|
|
1113
|
+
return;
|
|
1114
|
+
}
|
|
1115
|
+
if (isProtocolV2LinkDisabledError(error)) {
|
|
1116
|
+
reject(
|
|
1117
|
+
ERRORS.TypedError(HardwareErrorCode.BleUnavailableWhileUsbConnected, undefined, {
|
|
1118
|
+
failureCode: error.failureCode,
|
|
1119
|
+
firmwareMessage: error.firmwareMessage,
|
|
1120
|
+
})
|
|
1121
|
+
);
|
|
1122
|
+
return;
|
|
1123
|
+
}
|
|
986
1124
|
if ([HardwareErrorCode.BleCharacteristicNotifyChangeFailure].includes(error.errorCode)) {
|
|
987
1125
|
postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE));
|
|
988
1126
|
}
|
|
@@ -1068,7 +1206,10 @@ export const cancel = (context: CoreContext, connectId?: string) => {
|
|
|
1068
1206
|
if (task && task.method?.device) {
|
|
1069
1207
|
if (!canceledDevices.includes(task.method.device)) {
|
|
1070
1208
|
const { device } = task.method;
|
|
1071
|
-
setPrePendingCallPromise(
|
|
1209
|
+
setPrePendingCallPromise(
|
|
1210
|
+
task.method.connectId ?? connectId,
|
|
1211
|
+
device.interruptionFromUser()
|
|
1212
|
+
);
|
|
1072
1213
|
canceledDevices.push(device);
|
|
1073
1214
|
}
|
|
1074
1215
|
requestQueue.rejectRequest(
|
|
@@ -1155,14 +1296,16 @@ const shouldCheckPassphraseState = (method: BaseMethod, device: Device) => {
|
|
|
1155
1296
|
};
|
|
1156
1297
|
|
|
1157
1298
|
const cleanup = () => {
|
|
1299
|
+
const pendingUiPromises = _uiPromises;
|
|
1158
1300
|
_uiPromises = [];
|
|
1159
|
-
|
|
1301
|
+
rejectUiPromises(
|
|
1302
|
+
pendingUiPromises,
|
|
1303
|
+
ERRORS.TypedError(HardwareErrorCode.ActionCancelled, 'UI request was cancelled')
|
|
1304
|
+
);
|
|
1160
1305
|
};
|
|
1161
1306
|
|
|
1162
1307
|
const removeDeviceListener = (device: Device) => {
|
|
1163
1308
|
device.removeAllListeners();
|
|
1164
|
-
DevicePool.emitter.removeAllListeners(DEVICE.CONNECT);
|
|
1165
|
-
// DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1166
1309
|
};
|
|
1167
1310
|
|
|
1168
1311
|
/**
|
|
@@ -1173,19 +1316,33 @@ const closePopup = () => {
|
|
|
1173
1316
|
};
|
|
1174
1317
|
|
|
1175
1318
|
const onDeviceConnectHandler = (device: Device) => {
|
|
1176
|
-
const
|
|
1177
|
-
|
|
1178
|
-
postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject
|
|
1319
|
+
const deviceObject = device.toMessageObject();
|
|
1320
|
+
if (!deviceObject) return;
|
|
1321
|
+
postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject }));
|
|
1179
1322
|
};
|
|
1180
1323
|
|
|
1181
1324
|
const onDeviceDisconnectHandler = (device: Device) => {
|
|
1182
1325
|
device.clearPreInitialized();
|
|
1183
|
-
const
|
|
1184
|
-
|
|
1185
|
-
postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject
|
|
1326
|
+
const deviceObject = device.toMessageObject();
|
|
1327
|
+
if (!deviceObject) return;
|
|
1328
|
+
postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject }));
|
|
1186
1329
|
};
|
|
1187
1330
|
|
|
1188
|
-
const
|
|
1331
|
+
const onTransportDeviceDisconnectHandler = (event: TransportDeviceDisconnectEvent) => {
|
|
1332
|
+
const device =
|
|
1333
|
+
deviceCacheMap.get(event.connectId) ??
|
|
1334
|
+
DevicePool.devicesCache[event.connectId] ??
|
|
1335
|
+
DevicePool.getDeviceByPath(event.connectId);
|
|
1336
|
+
if (!device) {
|
|
1337
|
+
Log.debug('Ignoring transport disconnect for an unknown device:', event.connectId);
|
|
1338
|
+
return;
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
device.markTransportDisconnected();
|
|
1342
|
+
DevicePool.emitter.emit(DEVICE.DISCONNECT, device);
|
|
1343
|
+
};
|
|
1344
|
+
|
|
1345
|
+
const onDevicePinHandler = (...[device, type, callback]: DeviceEvents['pin']) => {
|
|
1189
1346
|
Log.log('request Input PIN');
|
|
1190
1347
|
// create ui promise
|
|
1191
1348
|
const uiPromise = createUiPromise(UI_RESPONSE.RECEIVE_PIN, device);
|
|
@@ -1194,12 +1351,14 @@ const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin
|
|
|
1194
1351
|
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1195
1352
|
device: device.toMessageObject() as unknown as KnownDevice,
|
|
1196
1353
|
type,
|
|
1354
|
+
responseCorrelation: uiPromise.responseCorrelation,
|
|
1197
1355
|
})
|
|
1198
1356
|
);
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1357
|
+
consumeUiPromise(
|
|
1358
|
+
uiPromise.promise,
|
|
1359
|
+
uiResp => callback(null, uiResp.payload),
|
|
1360
|
+
error => callback(error, '')
|
|
1361
|
+
);
|
|
1203
1362
|
};
|
|
1204
1363
|
|
|
1205
1364
|
export const onDeviceButtonHandler = (...[device, request]: [...DeviceEvents['button']]) => {
|
|
@@ -1223,7 +1382,11 @@ const onDeviceFeaturesHandler = (...[_, features]: [...DeviceEvents['features']]
|
|
|
1223
1382
|
postMessage(createDeviceMessage(DEVICE.FEATURES, { ...features }));
|
|
1224
1383
|
};
|
|
1225
1384
|
|
|
1226
|
-
const
|
|
1385
|
+
const onDeviceStateHandler = (...[_, stateEvent]: [...DeviceEvents['state']]) => {
|
|
1386
|
+
postMessage(createDeviceMessage(DEVICE.STATE, stateEvent));
|
|
1387
|
+
};
|
|
1388
|
+
|
|
1389
|
+
const onDevicePassphraseHandler = (
|
|
1227
1390
|
...[device, requestPayload, callback]: DeviceEvents['passphrase']
|
|
1228
1391
|
) => {
|
|
1229
1392
|
Log.debug('onDevicePassphraseHandler');
|
|
@@ -1233,18 +1396,27 @@ const onDevicePassphraseHandler = async (
|
|
|
1233
1396
|
device: device.toMessageObject() as KnownDevice,
|
|
1234
1397
|
passphraseState: device.passphraseState,
|
|
1235
1398
|
existsAttachPinUser: requestPayload.existsAttachPinUser,
|
|
1399
|
+
deviceOnly: requestPayload.deviceOnly,
|
|
1400
|
+
source: requestPayload.source,
|
|
1401
|
+
reason: requestPayload.reason,
|
|
1402
|
+
expectedPassphraseState: requestPayload.expectedPassphraseState,
|
|
1403
|
+
...(requestPayload.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1404
|
+
responseCorrelation: uiPromise.responseCorrelation,
|
|
1236
1405
|
})
|
|
1237
1406
|
);
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1407
|
+
consumeUiPromise(
|
|
1408
|
+
uiPromise.promise,
|
|
1409
|
+
uiResp => {
|
|
1410
|
+
const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
|
|
1411
|
+
callback({
|
|
1412
|
+
passphrase: value.normalize('NFKD'),
|
|
1413
|
+
passphraseOnDevice,
|
|
1414
|
+
attachPinOnDevice,
|
|
1415
|
+
cache: save,
|
|
1416
|
+
});
|
|
1417
|
+
},
|
|
1418
|
+
error => callback({}, error)
|
|
1419
|
+
);
|
|
1248
1420
|
};
|
|
1249
1421
|
|
|
1250
1422
|
const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']) => {
|
|
@@ -1254,17 +1426,62 @@ const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']
|
|
|
1254
1426
|
};
|
|
1255
1427
|
|
|
1256
1428
|
const onEnterPassphraseOnDeviceHandler = (
|
|
1257
|
-
...[device]: [...DeviceEvents['passphrase_on_device']]
|
|
1429
|
+
...[device, requestPayload]: [...DeviceEvents['passphrase_on_device']]
|
|
1258
1430
|
) => {
|
|
1259
1431
|
postMessage(
|
|
1260
1432
|
createUiMessage(UI_REQUEST.REQUEST_PASSPHRASE_ON_DEVICE, {
|
|
1261
1433
|
device: device.toMessageObject() as KnownDevice,
|
|
1262
1434
|
passphraseState: device.passphraseState,
|
|
1435
|
+
source: requestPayload?.source,
|
|
1436
|
+
reason: requestPayload?.reason,
|
|
1437
|
+
...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1438
|
+
})
|
|
1439
|
+
);
|
|
1440
|
+
};
|
|
1441
|
+
|
|
1442
|
+
const onEnterAttachPinOnDeviceHandler = (
|
|
1443
|
+
...[device, requestPayload]: [...DeviceEvents['attach_pin_on_device']]
|
|
1444
|
+
) => {
|
|
1445
|
+
postMessage(
|
|
1446
|
+
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1447
|
+
device: device.toMessageObject() as KnownDevice,
|
|
1448
|
+
type: 'ButtonRequest_AttachPin',
|
|
1449
|
+
source: requestPayload?.source,
|
|
1450
|
+
reason: requestPayload?.reason,
|
|
1451
|
+
...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1263
1452
|
})
|
|
1264
1453
|
);
|
|
1265
1454
|
};
|
|
1266
1455
|
|
|
1267
|
-
const
|
|
1456
|
+
const onEnterPinOnDeviceHandler = (
|
|
1457
|
+
...[device, pinType, metadata]: [...DeviceEvents['pin_on_device']]
|
|
1458
|
+
) => {
|
|
1459
|
+
postMessage(
|
|
1460
|
+
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1461
|
+
device: device.toMessageObject() as KnownDevice,
|
|
1462
|
+
type:
|
|
1463
|
+
pinType === DeviceSessionPinType.AttachToPin
|
|
1464
|
+
? 'ButtonRequest_AttachPin'
|
|
1465
|
+
: 'ButtonRequest_PinEntry',
|
|
1466
|
+
source: metadata?.source,
|
|
1467
|
+
reason: metadata?.reason,
|
|
1468
|
+
deviceOnly: metadata?.deviceOnly ?? true,
|
|
1469
|
+
completion: metadata?.completion,
|
|
1470
|
+
method: metadata?.method,
|
|
1471
|
+
page: metadata?.page,
|
|
1472
|
+
operation: metadata?.operation,
|
|
1473
|
+
...(metadata?.interaction ? { interaction: metadata.interaction } : {}),
|
|
1474
|
+
})
|
|
1475
|
+
);
|
|
1476
|
+
};
|
|
1477
|
+
|
|
1478
|
+
const onPinOnDeviceCompleteHandler = (
|
|
1479
|
+
...[_, metadata]: [...DeviceEvents['pin_on_device_complete']]
|
|
1480
|
+
) => {
|
|
1481
|
+
postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW, metadata));
|
|
1482
|
+
};
|
|
1483
|
+
|
|
1484
|
+
const onSelectDeviceInBootloaderForWebDeviceHandler = (
|
|
1268
1485
|
...[device, callback]: [...DeviceEvents['select_device_in_bootloader_for_web_device']]
|
|
1269
1486
|
) => {
|
|
1270
1487
|
Log.debug('onSelectDeviceInBootloaderForWebDeviceHandler');
|
|
@@ -1274,11 +1491,14 @@ const onSelectDeviceInBootloaderForWebDeviceHandler = async (
|
|
|
1274
1491
|
device: device.toMessageObject() as KnownDevice,
|
|
1275
1492
|
})
|
|
1276
1493
|
);
|
|
1277
|
-
|
|
1278
|
-
|
|
1494
|
+
consumeUiPromise(
|
|
1495
|
+
uiPromise.promise,
|
|
1496
|
+
uiResp => callback(null, uiResp.payload.deviceId),
|
|
1497
|
+
error => callback(error, '')
|
|
1498
|
+
);
|
|
1279
1499
|
};
|
|
1280
1500
|
|
|
1281
|
-
const onSelectDeviceForSwitchFirmwareWebDeviceHandler =
|
|
1501
|
+
const onSelectDeviceForSwitchFirmwareWebDeviceHandler = (
|
|
1282
1502
|
...[device, callback]: [...DeviceEvents['select_device_for_switch_firmware_web_device']]
|
|
1283
1503
|
) => {
|
|
1284
1504
|
Log.debug('onSelectDeviceForSwitchFirmwareWebDeviceHandler');
|
|
@@ -1291,8 +1511,11 @@ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
|
|
|
1291
1511
|
device: device.toMessageObject() as KnownDevice,
|
|
1292
1512
|
})
|
|
1293
1513
|
);
|
|
1294
|
-
|
|
1295
|
-
|
|
1514
|
+
consumeUiPromise(
|
|
1515
|
+
uiPromise.promise,
|
|
1516
|
+
uiResp => callback(null, uiResp.payload.deviceId),
|
|
1517
|
+
error => callback(error, '')
|
|
1518
|
+
);
|
|
1296
1519
|
};
|
|
1297
1520
|
|
|
1298
1521
|
/**
|
|
@@ -1311,14 +1534,21 @@ const postMessage = (message: CoreMessage) => {
|
|
|
1311
1534
|
|
|
1312
1535
|
const createUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T, device?: Device) => {
|
|
1313
1536
|
const uiPromise: UiPromise<T> = createDeferred(promiseEvent, device);
|
|
1537
|
+
if (
|
|
1538
|
+
device &&
|
|
1539
|
+
(promiseEvent === UI_RESPONSE.RECEIVE_PIN || promiseEvent === UI_RESPONSE.RECEIVE_PASSPHRASE)
|
|
1540
|
+
) {
|
|
1541
|
+
const publicDeviceId = device.toMessageObject()?.deviceId;
|
|
1542
|
+
uiPromise.responseCorrelation = {
|
|
1543
|
+
interactionId: generateInstanceId('UiResponse', device.sdkInstanceId),
|
|
1544
|
+
deviceId: publicDeviceId || device.instanceId,
|
|
1545
|
+
};
|
|
1546
|
+
}
|
|
1314
1547
|
_uiPromises.push(uiPromise as any);
|
|
1315
1548
|
|
|
1316
1549
|
return uiPromise;
|
|
1317
1550
|
};
|
|
1318
1551
|
|
|
1319
|
-
const findUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T) =>
|
|
1320
|
-
_uiPromises.find(p => p.id === promiseEvent);
|
|
1321
|
-
|
|
1322
1552
|
const removeUiPromise = (promise: Deferred<any>) => {
|
|
1323
1553
|
_uiPromises = _uiPromises.filter(p => p !== promise);
|
|
1324
1554
|
};
|
|
@@ -1330,8 +1560,10 @@ export default class Core extends EventEmitter {
|
|
|
1330
1560
|
|
|
1331
1561
|
private requestQueue = new RequestQueue();
|
|
1332
1562
|
|
|
1563
|
+
private disposePromise?: Promise<void>;
|
|
1564
|
+
|
|
1333
1565
|
// background task
|
|
1334
|
-
private
|
|
1566
|
+
private prePendingCallPromises = new Map<string, Promise<void>>();
|
|
1335
1567
|
|
|
1336
1568
|
private methodSynchronize = getSynchronize();
|
|
1337
1569
|
|
|
@@ -1342,19 +1574,24 @@ export default class Core extends EventEmitter {
|
|
|
1342
1574
|
Log.debug(`[Core] Created SDK instance: ${this.sdkInstanceId}`);
|
|
1343
1575
|
}
|
|
1344
1576
|
|
|
1345
|
-
cancelOperation(operationId: string) {
|
|
1346
|
-
this.requestQueue.abortOperation(operationId);
|
|
1347
|
-
}
|
|
1348
|
-
|
|
1349
1577
|
private getCoreContext() {
|
|
1350
1578
|
return {
|
|
1351
1579
|
sdkInstanceId: this.sdkInstanceId,
|
|
1352
1580
|
tracingContext: this.tracingContext,
|
|
1353
1581
|
requestQueue: this.requestQueue,
|
|
1354
1582
|
methodSynchronize: this.methodSynchronize,
|
|
1355
|
-
getPrePendingCallPromise: () => this.
|
|
1356
|
-
setPrePendingCallPromise: (
|
|
1357
|
-
|
|
1583
|
+
getPrePendingCallPromise: (connectId: string) => this.prePendingCallPromises.get(connectId),
|
|
1584
|
+
setPrePendingCallPromise: (connectId: string, promise?: Promise<void>) => {
|
|
1585
|
+
if (!promise) {
|
|
1586
|
+
this.prePendingCallPromises.delete(connectId);
|
|
1587
|
+
return;
|
|
1588
|
+
}
|
|
1589
|
+
this.prePendingCallPromises.set(connectId, promise);
|
|
1590
|
+
},
|
|
1591
|
+
removePrePendingCallPromise: (connectId: string, promise: Promise<void>) => {
|
|
1592
|
+
if (this.prePendingCallPromises.get(connectId) === promise) {
|
|
1593
|
+
this.prePendingCallPromises.delete(connectId);
|
|
1594
|
+
}
|
|
1358
1595
|
},
|
|
1359
1596
|
// callback 任务管理
|
|
1360
1597
|
registerCallbackTask: (connectId: string, callbackPromise: Deferred<any>) => {
|
|
@@ -1372,11 +1609,16 @@ export default class Core extends EventEmitter {
|
|
|
1372
1609
|
case UI_RESPONSE.RECEIVE_PASSPHRASE:
|
|
1373
1610
|
case UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:
|
|
1374
1611
|
case UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: {
|
|
1375
|
-
const uiPromise =
|
|
1612
|
+
const uiPromise = findUiPromiseForResponse(_uiPromises, message);
|
|
1376
1613
|
if (uiPromise) {
|
|
1377
1614
|
Log.log('receive UI Response: ', message.type);
|
|
1378
1615
|
uiPromise.resolve(message);
|
|
1379
1616
|
removeUiPromise(uiPromise);
|
|
1617
|
+
} else if (
|
|
1618
|
+
message.type === UI_RESPONSE.RECEIVE_PIN ||
|
|
1619
|
+
message.type === UI_RESPONSE.RECEIVE_PASSPHRASE
|
|
1620
|
+
) {
|
|
1621
|
+
Log.warn('Ignored unmatched or ambiguous sensitive UI response:', message.type);
|
|
1380
1622
|
}
|
|
1381
1623
|
break;
|
|
1382
1624
|
}
|
|
@@ -1392,10 +1634,17 @@ export default class Core extends EventEmitter {
|
|
|
1392
1634
|
}
|
|
1393
1635
|
|
|
1394
1636
|
case IFRAME.CALL: {
|
|
1395
|
-
|
|
1637
|
+
const logBlockLabel = getLogBlockLabel(message);
|
|
1638
|
+
Log.log(
|
|
1639
|
+
formatLogMethodLabel(`[${Date.now()}][CALL_API]`, logBlockLabel),
|
|
1640
|
+
getSafeLogPayload(message, logBlockLabel)
|
|
1641
|
+
);
|
|
1396
1642
|
const response = await callAPI(this.getCoreContext(), message);
|
|
1397
1643
|
const { success, payload } = response;
|
|
1398
|
-
Log.log(
|
|
1644
|
+
Log.log(
|
|
1645
|
+
formatLogMethodLabel(`[${Date.now()}][CALL_API_RESPONSE]`, logBlockLabel),
|
|
1646
|
+
getSafeLogPayload(response, logBlockLabel)
|
|
1647
|
+
);
|
|
1399
1648
|
if (success) {
|
|
1400
1649
|
return response;
|
|
1401
1650
|
}
|
|
@@ -1414,10 +1663,6 @@ export default class Core extends EventEmitter {
|
|
|
1414
1663
|
cancel(this.getCoreContext(), message.payload.connectId);
|
|
1415
1664
|
break;
|
|
1416
1665
|
}
|
|
1417
|
-
case IFRAME.CANCEL_OPERATION: {
|
|
1418
|
-
this.cancelOperation(message.payload.operationId);
|
|
1419
|
-
break;
|
|
1420
|
-
}
|
|
1421
1666
|
case IFRAME.CALLBACK: {
|
|
1422
1667
|
Log.log('callback message: ', message);
|
|
1423
1668
|
postMessage(message);
|
|
@@ -1429,25 +1674,65 @@ export default class Core extends EventEmitter {
|
|
|
1429
1674
|
return Promise.resolve(message);
|
|
1430
1675
|
}
|
|
1431
1676
|
|
|
1432
|
-
dispose() {
|
|
1677
|
+
dispose(): Promise<void> {
|
|
1678
|
+
if (!this.disposePromise) {
|
|
1679
|
+
this.disposePromise = this.disposeResources();
|
|
1680
|
+
}
|
|
1681
|
+
return this.disposePromise;
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
private async disposeResources(): Promise<void> {
|
|
1685
|
+
Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
|
|
1686
|
+
pollingManager.stopAll();
|
|
1687
|
+
this.requestQueue.abortAllRequests();
|
|
1688
|
+
cleanup();
|
|
1689
|
+
|
|
1690
|
+
_connector?.stop();
|
|
1691
|
+
let transportCleanup: Promise<void>;
|
|
1692
|
+
try {
|
|
1693
|
+
transportCleanup = Promise.resolve(TransportManager.getTransport()?.stop?.()).catch(error => {
|
|
1694
|
+
Log.warn('[Core] Transport cleanup failed:', error);
|
|
1695
|
+
});
|
|
1696
|
+
} catch (error) {
|
|
1697
|
+
Log.warn('[Core] Transport cleanup failed:', error);
|
|
1698
|
+
transportCleanup = Promise.resolve();
|
|
1699
|
+
}
|
|
1700
|
+
|
|
1701
|
+
// Preserve synchronous dispose semantics for in-memory state and listeners.
|
|
1433
1702
|
_deviceList = undefined;
|
|
1434
1703
|
_connector = undefined;
|
|
1704
|
+
DevicePool.dispose();
|
|
1435
1705
|
deviceCacheMap.clear();
|
|
1436
1706
|
preWarmInflight.clear();
|
|
1437
1707
|
preWarmDoneAt.clear();
|
|
1438
|
-
|
|
1708
|
+
preConnectCache = { passphraseState: undefined };
|
|
1709
|
+
this.prePendingCallPromises.clear();
|
|
1710
|
+
this.removeAllListeners();
|
|
1439
1711
|
cleanupSdkInstance(this.sdkInstanceId);
|
|
1712
|
+
if (_core === this) _core = undefined;
|
|
1713
|
+
|
|
1714
|
+
// Transports, especially Node USB, may release native handles asynchronously.
|
|
1715
|
+
await transportCleanup;
|
|
1440
1716
|
}
|
|
1441
1717
|
}
|
|
1442
1718
|
|
|
1443
1719
|
export const initCore = () => {
|
|
1444
|
-
|
|
1445
|
-
|
|
1720
|
+
const core = new Core();
|
|
1721
|
+
_core = core;
|
|
1722
|
+
return core;
|
|
1446
1723
|
};
|
|
1447
1724
|
|
|
1448
1725
|
export const initConnector = () => {
|
|
1449
1726
|
_connector = new DeviceConnector();
|
|
1727
|
+
DevicePool.emitter.removeListener(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
1728
|
+
DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1729
|
+
DevicePool.emitter.removeListener(
|
|
1730
|
+
TRANSPORT_EVENT.DEVICE_DISCONNECT,
|
|
1731
|
+
onTransportDeviceDisconnectHandler
|
|
1732
|
+
);
|
|
1733
|
+
DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
1450
1734
|
DevicePool.emitter.on(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1735
|
+
DevicePool.emitter.on(TRANSPORT_EVENT.DEVICE_DISCONNECT, onTransportDeviceDisconnectHandler);
|
|
1451
1736
|
return _connector;
|
|
1452
1737
|
};
|
|
1453
1738
|
|
|
@@ -1461,12 +1746,8 @@ export const init = async (
|
|
|
1461
1746
|
plugin?: LowlevelTransportSharedPlugin
|
|
1462
1747
|
) => {
|
|
1463
1748
|
try {
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
initTransport(Transport, plugin);
|
|
1467
|
-
} catch {
|
|
1468
|
-
Log.error('DataManager.load error');
|
|
1469
|
-
}
|
|
1749
|
+
await DataManager.load(settings);
|
|
1750
|
+
initTransport(Transport, plugin);
|
|
1470
1751
|
enableLog(DataManager.getSettings('debug'));
|
|
1471
1752
|
if (DataManager.getSettings('env') !== 'react-native') {
|
|
1472
1753
|
setLoggerPostMessage(postMessage);
|
|
@@ -1477,6 +1758,7 @@ export const init = async (
|
|
|
1477
1758
|
return _core;
|
|
1478
1759
|
} catch (error) {
|
|
1479
1760
|
Log.error('core init', error);
|
|
1761
|
+
throw error;
|
|
1480
1762
|
}
|
|
1481
1763
|
};
|
|
1482
1764
|
|