@onekeyfe/hd-core 1.2.0-alpha.17 → 1.2.0-alpha.170
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 +586 -9
- package/__tests__/DeviceEventRegistration.test.ts +9 -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 +878 -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 +752 -0
- package/__tests__/device-pool-state.test.ts +191 -0
- package/__tests__/device-settings.test.ts +665 -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 +344 -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 +168 -0
- package/__tests__/device-wallet-session-store.test.ts +474 -1
- package/__tests__/deviceFeaturesUtils.test.ts +13 -1
- package/__tests__/devicePoolBootloaderPath.test.ts +64 -0
- package/__tests__/deviceSettings.test.ts +117 -0
- package/__tests__/deviceUploadNft.test.ts +348 -0
- package/__tests__/evmLedgerLegacySafety.test.ts +10 -7
- package/__tests__/evmSignTransaction.test.ts +69 -0
- package/__tests__/evmSignTypedData.test.ts +80 -0
- package/__tests__/filesystemValidation.test.ts +53 -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 +297 -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 +212 -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 +58 -1
- 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 +74 -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 +371 -0
- package/__tests__/protocol-v2-ui-lifecycle.test.ts +91 -0
- package/__tests__/protocol-v2-unlock-policy.test.ts +507 -0
- package/__tests__/protocol-v2.test.ts +7558 -2213
- package/__tests__/protocolV2FileWrite.test.ts +193 -0
- package/__tests__/protocolV2UiInteraction.test.ts +63 -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 +192 -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 +10 -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 +1 -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 +65 -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/DeviceVerify.d.ts +1 -0
- package/dist/api/device/DeviceVerify.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/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 +57 -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 +10 -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 +2 -1
- 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 +5 -4
- 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 +2 -0
- package/dist/core/deviceEventRegistration.d.ts.map +1 -1
- package/dist/core/index.d.ts +8 -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 +82 -14
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +5 -5
- 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 +4 -0
- 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 +3 -1
- 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 +12 -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 +32 -2
- 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 +1720 -849
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11395 -4762
- 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 +31 -8
- 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 +17 -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 +7 -4
- package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -1
- 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 +16 -3
- 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 -95
- 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 +138 -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 +31 -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 +13 -1
- 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 +39 -25
- 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 +7 -4
- 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 +2176 -699
- 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 +34 -13
- package/src/api/OpenWalletSession.ts +268 -0
- package/src/api/PathInfo.ts +9 -4
- package/src/api/PromptWebDeviceAccess.ts +3 -8
- package/src/api/SearchDevices.ts +35 -5
- package/src/api/UploadPortfolio.ts +29 -5
- 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 +4 -0
- package/src/api/device/DeviceChangePin.ts +9 -1
- package/src/api/device/DeviceFullyUploadResource.ts +4 -5
- package/src/api/device/DeviceLock.ts +4 -0
- package/src/api/device/DeviceRebootToBoardloader.ts +8 -1
- package/src/api/device/DeviceRebootToBootloader.ts +8 -1
- package/src/api/device/DeviceSettings.ts +211 -3
- package/src/api/device/DeviceSupportFeatures.ts +4 -0
- package/src/api/device/DeviceUnlock.ts +12 -3
- package/src/api/device/DeviceUpdateBootloader.ts +152 -8
- package/src/api/device/DeviceVerify.ts +25 -0
- package/src/api/device/DeviceWipe.ts +11 -1
- 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/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 +905 -0
- package/src/api/firmware/FirmwareUpdatePreparedPlan.ts +490 -0
- package/src/api/firmware/getBinary.ts +8 -3
- package/src/api/firmware/protocolV2Release.ts +173 -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 +260 -60
- 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 -17
- package/src/api/protocol-v2/DeviceReboot.ts +12 -3
- package/src/api/protocol-v2/DeviceStatusGet.ts +5 -1
- package/src/api/protocol-v2/DeviceUploadNft.ts +249 -0
- package/src/api/protocol-v2/DeviceUploadWallpaper.ts +67 -20
- 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 +4 -0
- package/src/core/index.ts +486 -200
- package/src/core/uiPromiseRegistry.ts +63 -0
- package/src/data/messages/messages-protocol-v2.json +515 -540
- package/src/data/messages/messages.json +286 -1
- package/src/data-manager/DataManager.ts +162 -44
- package/src/data-manager/TransportManager.ts +10 -2
- package/src/data-manager/connectSettings.ts +11 -0
- package/src/device/Device.ts +1016 -254
- package/src/device/DeviceCommands.ts +175 -157
- package/src/device/DeviceConnector.ts +59 -22
- package/src/device/DeviceFeaturesState.ts +25 -0
- package/src/device/DevicePool.ts +96 -19
- package/src/device/DeviceStateMapper.ts +422 -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 +199 -188
- 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 +18 -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 +37 -2
- package/src/events/ui-response.ts +12 -2
- package/src/index.ts +7 -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 +104 -45
- package/src/protocols/protocol-v2/firmware.ts +3 -1
- package/src/protocols/protocol-v2/index.ts +9 -2
- package/src/protocols/protocol-v2/resources.ts +173 -0
- package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +65 -0
- package/src/protocols/protocol-v2/uiInteraction.ts +50 -9
- 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 +395 -130
- 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 -190
- package/src/types/api/sessionCache.ts +9 -4
- package/src/types/device.ts +206 -9
- package/src/types/params.ts +9 -2
- package/src/types/settings.ts +37 -25
- package/src/utils/assets.ts +4 -1
- package/src/utils/deviceFeaturesCompat.ts +196 -0
- package/src/utils/deviceFeaturesUtils.ts +34 -14
- package/src/utils/deviceInfoUtils.ts +37 -70
- 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 +37 -7
- 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 +241 -26
- 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/DeviceSessionOpen.d.ts +0 -28
- package/dist/api/protocol-v2/DeviceSessionOpen.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 -22
- package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/lockedError.d.ts +0 -2
- package/dist/protocols/protocol-v2/lockedError.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/unlockRetry.d.ts +0 -11
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
- package/dist/types/api/getDeviceInfo.d.ts +0 -88
- package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
- package/src/api/GetDeviceInfo.ts +0 -152
- package/src/api/firmware/progressThrottle.ts +0 -44
- package/src/api/protocol-v2/DeviceSessionOpen.ts +0 -100
- package/src/api/protocol-v2/DeviceSettingsGet.ts +0 -16
- package/src/api/protocol-v2/DeviceSettingsPageShow.ts +0 -67
- package/src/api/protocol-v2/DeviceSettingsSet.ts +0 -49
- package/src/deviceProfile/buildDeviceProfile.ts +0 -370
- package/src/protocols/protocol-v2/lockedError.ts +0 -10
- package/src/protocols/protocol-v2/unlockRetry.ts +0 -76
- package/src/types/api/getDeviceInfo.ts +0 -106
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,28 +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';
|
|
58
63
|
import { registerHardwareUiEventListeners } from './deviceEventRegistration';
|
|
59
64
|
import { getSynchronize } from '../utils/getSynchronize';
|
|
60
|
-
import {
|
|
65
|
+
import { runMethodWithUnlockPolicy } from '../protocols/protocol-v2/unlockPolicyRunner';
|
|
61
66
|
import {
|
|
62
67
|
ProtocolV2UiInteractionCoordinator,
|
|
63
68
|
isProtocolV2UiEnabled,
|
|
64
69
|
} from '../protocols/protocol-v2/uiInteraction';
|
|
70
|
+
import { createUiProgressMessageFilter } from '../utils/uiProgressThrottle';
|
|
65
71
|
|
|
66
72
|
import type { ConnectSettings, Features, KnownDevice } from '../types';
|
|
67
73
|
import type { CoreMessage, IFrameCallMessage, UiPromise, UiPromiseResponse } from '../events';
|
|
68
74
|
import type { DeviceEvents, InitOptions, RunOptions } from '../device/Device';
|
|
69
75
|
import type { SdkTracingContext } from '../utils/tracing';
|
|
70
76
|
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
71
|
-
import type {
|
|
77
|
+
import type {
|
|
78
|
+
LowlevelTransportSharedPlugin,
|
|
79
|
+
OneKeyDeviceInfo,
|
|
80
|
+
TransportDeviceDisconnectEvent,
|
|
81
|
+
} from '@onekeyfe/hd-transport';
|
|
72
82
|
import type { BaseMethod } from '../api/BaseMethod';
|
|
73
83
|
|
|
74
84
|
const Log = getLogger(LoggerNames.Core);
|
|
75
85
|
const PRE_INITIALIZE_TTL_MS = 60 * 1000;
|
|
86
|
+
const PRE_PENDING_CALL_TIMEOUT_MS = 15 * 1000;
|
|
76
87
|
|
|
77
88
|
// Dedup/coalesce state for "pre-warm signal" methods (isPreWarmSignal),
|
|
78
89
|
// keyed by getPreWarmKey(): coalesce in-flight, skip if warmed within TTL.
|
|
@@ -97,14 +108,15 @@ function hasDeriveCardano(method: BaseMethod): boolean {
|
|
|
97
108
|
|
|
98
109
|
const parseInitOptions = (method?: BaseMethod): InitOptions => ({
|
|
99
110
|
initSession: method?.payload.initSession,
|
|
100
|
-
passphraseState: method?.payload.passphraseState,
|
|
111
|
+
passphraseState: method?.payload.useEmptyPassphrase ? undefined : method?.payload.passphraseState,
|
|
101
112
|
deviceId: method?.payload.deviceId,
|
|
102
113
|
deriveCardano: method && hasDeriveCardano(method),
|
|
103
114
|
connectProtocol: method?.payload.connectProtocol,
|
|
115
|
+
forceProtocolDetection: method?.payload.forceProtocolDetection,
|
|
104
116
|
protocolV2DeviceInfoTimeoutMs: method?.payload.protocolV2DeviceInfoTimeoutMs,
|
|
105
117
|
});
|
|
106
118
|
|
|
107
|
-
let _core: Core;
|
|
119
|
+
let _core: Core | undefined;
|
|
108
120
|
let _deviceList: DeviceList | undefined;
|
|
109
121
|
let _connector: DeviceConnector | undefined;
|
|
110
122
|
let _uiPromises: UiPromise<UiPromiseResponse['type']>[] = []; // Waiting for ui response
|
|
@@ -129,6 +141,9 @@ const toError = (error: unknown): Error | undefined => {
|
|
|
129
141
|
}
|
|
130
142
|
};
|
|
131
143
|
|
|
144
|
+
const isExpectedCompatibilityError = (error: unknown) =>
|
|
145
|
+
error instanceof HardwareError && error.errorCode === HardwareErrorCode.DeviceNotSupportMethod;
|
|
146
|
+
|
|
132
147
|
const updateMethodRequestContext = (method: BaseMethod, updates: any) => {
|
|
133
148
|
if (method.requestContext) {
|
|
134
149
|
updateRequestContext(method.requestContext.responseID, updates);
|
|
@@ -148,11 +163,16 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
|
|
|
148
163
|
}
|
|
149
164
|
|
|
150
165
|
// find api method
|
|
151
|
-
let method
|
|
166
|
+
let method!: BaseMethod;
|
|
152
167
|
try {
|
|
153
168
|
method = findMethod(message as IFrameCallMessage);
|
|
154
169
|
method.connector = _connector;
|
|
155
|
-
|
|
170
|
+
const shouldPostMessage = createUiProgressMessageFilter();
|
|
171
|
+
method.postMessage = event => {
|
|
172
|
+
if (shouldPostMessage(event)) {
|
|
173
|
+
postMessage(event);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
156
176
|
method.setContext?.(context);
|
|
157
177
|
|
|
158
178
|
method.requestContext = createRequestContext(method.responseID, method.name, {
|
|
@@ -164,11 +184,13 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
|
|
|
164
184
|
|
|
165
185
|
method.init();
|
|
166
186
|
} catch (error) {
|
|
167
|
-
|
|
187
|
+
if (method) {
|
|
188
|
+
completeMethodRequestContext(method, error);
|
|
189
|
+
method.dispose();
|
|
190
|
+
}
|
|
191
|
+
return createResponseMessage(method?.responseID ?? message.id, false, { error });
|
|
168
192
|
}
|
|
169
193
|
|
|
170
|
-
DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
171
|
-
|
|
172
194
|
if (!method.useDevice) {
|
|
173
195
|
updateMethodRequestContext(method, { status: 'running' });
|
|
174
196
|
try {
|
|
@@ -275,26 +297,35 @@ const handlePreWarmSignal = async (
|
|
|
275
297
|
}
|
|
276
298
|
};
|
|
277
299
|
|
|
278
|
-
const waitWithTimeout = async (promise: Promise<any>, timeout: number) => {
|
|
279
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
280
|
-
setTimeout(() => reject(new Error('Request timeout')), timeout);
|
|
281
|
-
});
|
|
282
|
-
return Promise.race([promise, timeoutPromise]);
|
|
283
|
-
};
|
|
284
|
-
|
|
285
300
|
const waitForPendingPromise = async (
|
|
286
|
-
|
|
287
|
-
|
|
301
|
+
connectId: string,
|
|
302
|
+
getPrePendingCallPromise: (connectId: string) => Promise<void> | undefined,
|
|
303
|
+
removePrePendingCallPromise?: (connectId: string, promise: Promise<void>) => void
|
|
288
304
|
) => {
|
|
289
|
-
const pendingPromise = getPrePendingCallPromise();
|
|
305
|
+
const pendingPromise = getPrePendingCallPromise(connectId);
|
|
290
306
|
if (pendingPromise) {
|
|
291
307
|
Log.debug('pre pending call promise before call method, wait for it');
|
|
308
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
309
|
+
let timedOut = false;
|
|
292
310
|
try {
|
|
293
|
-
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
|
+
]);
|
|
294
320
|
} catch (error) {
|
|
295
|
-
//
|
|
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 });
|
|
296
328
|
}
|
|
297
|
-
removePrePendingCallPromise?.(pendingPromise);
|
|
298
329
|
Log.debug('pre pending call promise before call method done');
|
|
299
330
|
}
|
|
300
331
|
};
|
|
@@ -306,7 +337,7 @@ const onCallDevice = async (
|
|
|
306
337
|
): Promise<any> => {
|
|
307
338
|
let messageResponse: any;
|
|
308
339
|
|
|
309
|
-
const { requestQueue, getPrePendingCallPromise,
|
|
340
|
+
const { requestQueue, getPrePendingCallPromise, removePrePendingCallPromise } = context;
|
|
310
341
|
|
|
311
342
|
updateMethodRequestContext(method, { status: 'running' });
|
|
312
343
|
|
|
@@ -334,7 +365,11 @@ const onCallDevice = async (
|
|
|
334
365
|
await context.waitForCallbackTasks(method.connectId);
|
|
335
366
|
}
|
|
336
367
|
|
|
337
|
-
await waitForPendingPromise(
|
|
368
|
+
await waitForPendingPromise(
|
|
369
|
+
method.connectId ?? '',
|
|
370
|
+
getPrePendingCallPromise,
|
|
371
|
+
removePrePendingCallPromise
|
|
372
|
+
);
|
|
338
373
|
|
|
339
374
|
const task = requestQueue.createTask(method);
|
|
340
375
|
|
|
@@ -363,7 +398,7 @@ const onCallDevice = async (
|
|
|
363
398
|
);
|
|
364
399
|
} catch (e) {
|
|
365
400
|
preWarmCallbackTask?.resolve();
|
|
366
|
-
|
|
401
|
+
Log.debug('ensureConnected error: ', e);
|
|
367
402
|
|
|
368
403
|
completeMethodRequestContext(method, e);
|
|
369
404
|
|
|
@@ -402,6 +437,8 @@ const onCallDevice = async (
|
|
|
402
437
|
|
|
403
438
|
registerHardwareUiEventListeners(device, {
|
|
404
439
|
pin: onDevicePinHandler,
|
|
440
|
+
pinOnDevice: onEnterPinOnDeviceHandler,
|
|
441
|
+
pinOnDeviceComplete: onPinOnDeviceCompleteHandler,
|
|
405
442
|
button: onDeviceButtonHandler,
|
|
406
443
|
passphrase: message.payload.useEmptyPassphrase
|
|
407
444
|
? onEmptyPassphraseHandler
|
|
@@ -410,12 +447,16 @@ const onCallDevice = async (
|
|
|
410
447
|
attachPinOnDevice: onEnterAttachPinOnDeviceHandler,
|
|
411
448
|
});
|
|
412
449
|
device.on(DEVICE.FEATURES, onDeviceFeaturesHandler);
|
|
450
|
+
device.on(DEVICE.STATE, onDeviceStateHandler);
|
|
413
451
|
device.on(
|
|
414
452
|
DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,
|
|
415
453
|
onSelectDeviceInBootloaderForWebDeviceHandler
|
|
416
454
|
);
|
|
417
455
|
|
|
418
456
|
const protocolV2UiCoordinator = new ProtocolV2UiInteractionCoordinator(device, postMessage);
|
|
457
|
+
let protocolV2Operation = false;
|
|
458
|
+
let protocolV2CloseEmitted = false;
|
|
459
|
+
device.beginProtocolV2UiInteraction();
|
|
419
460
|
device.on(
|
|
420
461
|
DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,
|
|
421
462
|
onSelectDeviceForSwitchFirmwareWebDeviceHandler
|
|
@@ -427,14 +468,17 @@ const onCallDevice = async (
|
|
|
427
468
|
await context.waitForCallbackTasks(method.connectId, preWarmCallbackTask);
|
|
428
469
|
}
|
|
429
470
|
|
|
430
|
-
await waitForPendingPromise(
|
|
471
|
+
await waitForPendingPromise(
|
|
472
|
+
method.connectId ?? '',
|
|
473
|
+
getPrePendingCallPromise,
|
|
474
|
+
removePrePendingCallPromise
|
|
475
|
+
);
|
|
431
476
|
|
|
432
477
|
const inner = async (): Promise<void> => {
|
|
433
|
-
// Protocol
|
|
434
|
-
//
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
}
|
|
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();
|
|
438
482
|
|
|
439
483
|
// check firmware version
|
|
440
484
|
const versionRange = device.getCurrentMethodVersionRange(
|
|
@@ -445,8 +489,8 @@ const onCallDevice = async (
|
|
|
445
489
|
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
446
490
|
let newVersionStatus: ReturnType<typeof DataManager.getFirmwareStatus> | undefined;
|
|
447
491
|
|
|
448
|
-
//
|
|
449
|
-
// Pro2
|
|
492
|
+
// Defective-batch and forced-update gates depend on V1 features/remote config.
|
|
493
|
+
// Pro2 joins after DataManager supports its profile firmwareStatus.
|
|
450
494
|
if (device.features && !device.isProtocolV2()) {
|
|
451
495
|
await DataManager.checkAndReloadData();
|
|
452
496
|
|
|
@@ -494,10 +538,6 @@ const onCallDevice = async (
|
|
|
494
538
|
}
|
|
495
539
|
}
|
|
496
540
|
|
|
497
|
-
if (isMethodVersionRangeUnsupported(versionRange)) {
|
|
498
|
-
throw createDeviceNotSupportMethodError(method.name, deviceFirmwareType);
|
|
499
|
-
}
|
|
500
|
-
|
|
501
541
|
if (versionRange) {
|
|
502
542
|
if (semver.valid(versionRange.min) && semver.lt(currentFirmwareVersion, versionRange.min)) {
|
|
503
543
|
if (newVersionStatus === 'none' || newVersionStatus === 'valid') {
|
|
@@ -548,93 +588,102 @@ const onCallDevice = async (
|
|
|
548
588
|
);
|
|
549
589
|
}
|
|
550
590
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
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
|
+
}
|
|
562
610
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
611
|
+
/**
|
|
612
|
+
* check firmware release info
|
|
613
|
+
*/
|
|
614
|
+
method.checkFirmwareRelease();
|
|
567
615
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
616
|
+
/**
|
|
617
|
+
* check additional supported feature
|
|
618
|
+
*/
|
|
619
|
+
method.checkDeviceSupportFeature();
|
|
572
620
|
|
|
573
|
-
|
|
574
|
-
|
|
621
|
+
// reconfigure messages
|
|
622
|
+
if (_deviceList && device.features && !device.isProtocolV2()) {
|
|
623
|
+
await TransportManager.reconfigure(device.features);
|
|
624
|
+
}
|
|
575
625
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
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
|
+
);
|
|
586
640
|
}
|
|
587
|
-
)
|
|
588
|
-
);
|
|
589
|
-
}
|
|
590
641
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
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
|
+
);
|
|
597
649
|
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
if (!passphraseStateSafety) {
|
|
602
|
-
DevicePool.clearDeviceCache(method.payload.connectId);
|
|
603
|
-
return Promise.reject(
|
|
604
|
-
ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError)
|
|
605
|
-
);
|
|
606
|
-
}
|
|
650
|
+
// Double check, handles the special case of Touch/Pro
|
|
651
|
+
checkPassphraseEnableState(method, device.features);
|
|
607
652
|
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
653
|
+
if (!passphraseStateSafety) {
|
|
654
|
+
DevicePool.clearDeviceCache(method.payload.connectId);
|
|
655
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError);
|
|
656
|
+
}
|
|
611
657
|
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
? e
|
|
619
|
-
: ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
|
|
620
|
-
// messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
621
|
-
// requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
622
|
-
// return;
|
|
623
|
-
throw error;
|
|
624
|
-
}
|
|
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
|
+
}
|
|
625
664
|
|
|
626
|
-
|
|
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
|
+
}
|
|
627
673
|
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
device,
|
|
632
|
-
protocolV2UiCoordinator
|
|
633
|
-
);
|
|
674
|
+
method.device?.commands?.checkDisposed();
|
|
675
|
+
},
|
|
676
|
+
});
|
|
634
677
|
messageResponse = createResponseMessage(method.responseID, true, response);
|
|
635
678
|
requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
636
679
|
completeMethodRequestContext(method);
|
|
637
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
|
+
}
|
|
638
687
|
Log.debug(`Call API - Inner Method Run Error`, error);
|
|
639
688
|
messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
640
689
|
requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
@@ -648,7 +697,12 @@ const onCallDevice = async (
|
|
|
648
697
|
throw error;
|
|
649
698
|
}
|
|
650
699
|
} finally {
|
|
651
|
-
|
|
700
|
+
if (isProtocolV2UiEnabled(method)) {
|
|
701
|
+
protocolV2CloseEmitted = protocolV2UiCoordinator.close({
|
|
702
|
+
ensureOperationClose: protocolV2Operation,
|
|
703
|
+
protocolV2Operation,
|
|
704
|
+
});
|
|
705
|
+
}
|
|
652
706
|
}
|
|
653
707
|
};
|
|
654
708
|
Log.debug('Call API - Device Run: ', device.mainId);
|
|
@@ -664,7 +718,9 @@ const onCallDevice = async (
|
|
|
664
718
|
try {
|
|
665
719
|
return await task.callPromise.promise;
|
|
666
720
|
} catch (e) {
|
|
667
|
-
|
|
721
|
+
if (!isExpectedCompatibilityError(e)) {
|
|
722
|
+
Log.debug('Device Run Error: ', e);
|
|
723
|
+
}
|
|
668
724
|
completeMethodRequestContext(method, e);
|
|
669
725
|
return createResponseMessage(method.responseID, false, { error: e });
|
|
670
726
|
}
|
|
@@ -703,7 +759,15 @@ const onCallDevice = async (
|
|
|
703
759
|
requestQueue.releaseTask(method.responseID);
|
|
704
760
|
|
|
705
761
|
if (isProtocolV2UiEnabled(method)) {
|
|
706
|
-
|
|
762
|
+
if (!protocolV2CloseEmitted && protocolV2Operation) {
|
|
763
|
+
protocolV2CloseEmitted = protocolV2UiCoordinator.close({
|
|
764
|
+
ensureOperationClose: true,
|
|
765
|
+
protocolV2Operation: true,
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
if (!protocolV2CloseEmitted) {
|
|
769
|
+
closePopup();
|
|
770
|
+
}
|
|
707
771
|
}
|
|
708
772
|
|
|
709
773
|
cleanup();
|
|
@@ -850,24 +914,68 @@ function canSkipInitialize(method: BaseMethod, device: Device): boolean {
|
|
|
850
914
|
return true;
|
|
851
915
|
}
|
|
852
916
|
|
|
853
|
-
function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown) {
|
|
854
|
-
const
|
|
917
|
+
export function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown) {
|
|
918
|
+
const typedError = error as { errorCode?: unknown; message?: unknown };
|
|
919
|
+
const message =
|
|
920
|
+
typeof typedError?.message === 'string' ? typedError.message : String(error ?? '');
|
|
855
921
|
return (
|
|
856
922
|
method.payload.connectProtocol === 'V2' &&
|
|
923
|
+
typedError?.errorCode === HardwareErrorCode.RuntimeError &&
|
|
857
924
|
message.includes('Device protocol mismatch') &&
|
|
858
925
|
message.includes('expected V2') &&
|
|
859
926
|
message.includes('did not respond to expected protocol')
|
|
860
927
|
);
|
|
861
928
|
}
|
|
862
929
|
|
|
930
|
+
export function isRetryableBleConnectionError(method: BaseMethod, error: unknown) {
|
|
931
|
+
if (method.device?.wasInterruptedByUser()) {
|
|
932
|
+
return false;
|
|
933
|
+
}
|
|
934
|
+
const typedError = error as { errorCode?: unknown };
|
|
935
|
+
return (
|
|
936
|
+
typedError?.errorCode === HardwareErrorCode.BleTimeoutError ||
|
|
937
|
+
typedError?.errorCode === HardwareErrorCode.BleConnectedError ||
|
|
938
|
+
isRetryableBleProtocolV2ProbeError(method, error) ||
|
|
939
|
+
isMissingDetectedProtocolV2Error(method, error)
|
|
940
|
+
);
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
export function isMissingDetectedProtocolV2Error(method: BaseMethod, error: unknown) {
|
|
944
|
+
const typedError = error as { errorCode?: unknown; message?: unknown };
|
|
945
|
+
return (
|
|
946
|
+
method.payload.connectProtocol === 'V2' &&
|
|
947
|
+
typedError?.errorCode === HardwareErrorCode.RuntimeError &&
|
|
948
|
+
typeof typedError.message === 'string' &&
|
|
949
|
+
typedError.message.includes('Device protocol has not been detected')
|
|
950
|
+
);
|
|
951
|
+
}
|
|
952
|
+
|
|
863
953
|
/**
|
|
864
954
|
* If the Bluetooth connection times out, retry up to 6 times
|
|
865
955
|
* @param retryCount - Current retry count (default 0)
|
|
866
956
|
*/
|
|
867
957
|
async function connectDeviceForBle(method: BaseMethod, device: Device, retryCount = 0) {
|
|
868
958
|
try {
|
|
869
|
-
|
|
959
|
+
if (device.wasInterruptedByUser()) {
|
|
960
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceInterruptedFromUser);
|
|
961
|
+
}
|
|
962
|
+
if (method.payload.forceProtocolDetection && device.hasDeviceAcquire()) {
|
|
963
|
+
await device.release();
|
|
964
|
+
}
|
|
965
|
+
const shouldAcquire =
|
|
966
|
+
method.payload.forceProtocolDetection ||
|
|
967
|
+
!device.hasDeviceAcquire() ||
|
|
968
|
+
!device.commands ||
|
|
969
|
+
device.commands.disposed;
|
|
970
|
+
if (shouldAcquire) {
|
|
971
|
+
await device.acquire(method.payload.connectProtocol, {
|
|
972
|
+
forceProtocolDetection: method.payload.forceProtocolDetection,
|
|
973
|
+
});
|
|
974
|
+
}
|
|
870
975
|
if (method.payload?.onlyConnectBleDevice) {
|
|
976
|
+
if (shouldAcquire) {
|
|
977
|
+
DevicePool.emitter.emit(DEVICE.CONNECT, device);
|
|
978
|
+
}
|
|
871
979
|
return;
|
|
872
980
|
}
|
|
873
981
|
// Skip initialize if conditions are met
|
|
@@ -878,15 +986,29 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
|
|
|
878
986
|
passphraseState: initOptions.passphraseState,
|
|
879
987
|
});
|
|
880
988
|
}
|
|
989
|
+
if (shouldAcquire) {
|
|
990
|
+
DevicePool.emitter.emit(DEVICE.CONNECT, device);
|
|
991
|
+
}
|
|
881
992
|
} catch (err) {
|
|
993
|
+
const requiresColdReconnect = isMissingDetectedProtocolV2Error(method, err);
|
|
994
|
+
// Device.run()'s REQUIRE_DISCONNECT handling never sees acquire/initialize
|
|
995
|
+
// failures, so with keep-alive a wedged link would be reused by every retry
|
|
996
|
+
// (field case: Initialize timing out at 25s per attempt, forever). Drop it
|
|
997
|
+
// here so the next retry cold-connects.
|
|
882
998
|
if (
|
|
883
|
-
(err.errorCode
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
retryCount < 6
|
|
999
|
+
(ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) || requiresColdReconnect) &&
|
|
1000
|
+
device.mainId &&
|
|
1001
|
+
device.deviceConnector
|
|
887
1002
|
) {
|
|
1003
|
+
await device.deviceConnector.disconnect(device.mainId).catch(() => undefined);
|
|
1004
|
+
// The connector only drops the link; `deviceAcquired` is reset by
|
|
1005
|
+
// release()/markTransportDisconnected() alone. Leaving it set makes the
|
|
1006
|
+
// next attempt skip acquire and initialize onto the link we just cut.
|
|
1007
|
+
device.markTransportDisconnected();
|
|
1008
|
+
}
|
|
1009
|
+
if (isRetryableBleConnectionError(method, err) && retryCount < 6) {
|
|
888
1010
|
const nextRetry = retryCount + 1;
|
|
889
|
-
Log.debug(`Bluetooth
|
|
1011
|
+
Log.debug(`Bluetooth connection will retry, retry count: ${nextRetry}`);
|
|
890
1012
|
await wait(3000);
|
|
891
1013
|
await connectDeviceForBle(method, device, nextRetry);
|
|
892
1014
|
} else {
|
|
@@ -993,6 +1115,11 @@ const ensureConnected = async (
|
|
|
993
1115
|
if (abort()) {
|
|
994
1116
|
return;
|
|
995
1117
|
}
|
|
1118
|
+
// One generation per public ensureConnected() call, not per poll
|
|
1119
|
+
// iteration. A later poll must not clear a user cancel.
|
|
1120
|
+
if (tryCount === 1) {
|
|
1121
|
+
device.beginConnectionAttempt();
|
|
1122
|
+
}
|
|
996
1123
|
await connectDeviceForBle(method, device);
|
|
997
1124
|
}
|
|
998
1125
|
resolve(device);
|
|
@@ -1000,6 +1127,19 @@ const ensureConnected = async (
|
|
|
1000
1127
|
}
|
|
1001
1128
|
} catch (error) {
|
|
1002
1129
|
Log.debug('device error: ', error);
|
|
1130
|
+
if (error.errorCode === HardwareErrorCode.BleUnavailableWhileUsbConnected) {
|
|
1131
|
+
reject(error);
|
|
1132
|
+
return;
|
|
1133
|
+
}
|
|
1134
|
+
if (isProtocolV2LinkDisabledError(error)) {
|
|
1135
|
+
reject(
|
|
1136
|
+
ERRORS.TypedError(HardwareErrorCode.BleUnavailableWhileUsbConnected, undefined, {
|
|
1137
|
+
failureCode: error.failureCode,
|
|
1138
|
+
firmwareMessage: error.firmwareMessage,
|
|
1139
|
+
})
|
|
1140
|
+
);
|
|
1141
|
+
return;
|
|
1142
|
+
}
|
|
1003
1143
|
if ([HardwareErrorCode.BleCharacteristicNotifyChangeFailure].includes(error.errorCode)) {
|
|
1004
1144
|
postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE));
|
|
1005
1145
|
}
|
|
@@ -1022,6 +1162,8 @@ const ensureConnected = async (
|
|
|
1022
1162
|
HardwareErrorCode.DeviceDetectInBootloaderMode,
|
|
1023
1163
|
HardwareErrorCode.BleCharacteristicNotifyChangeFailure,
|
|
1024
1164
|
HardwareErrorCode.BridgeNeedsPermission,
|
|
1165
|
+
HardwareErrorCode.DeviceInterruptedFromUser,
|
|
1166
|
+
HardwareErrorCode.CallQueueActionCancelled,
|
|
1025
1167
|
].includes(error.errorCode)
|
|
1026
1168
|
) {
|
|
1027
1169
|
reject(error);
|
|
@@ -1078,23 +1220,34 @@ export const cancel = (context: CoreContext, connectId?: string) => {
|
|
|
1078
1220
|
','
|
|
1079
1221
|
)}`
|
|
1080
1222
|
);
|
|
1223
|
+
// Abort before rejecting: rejectRequest releases the task and would make
|
|
1224
|
+
// its AbortController unreachable to an in-flight method loop.
|
|
1225
|
+
requestQueue.abortRequestsByConnectId(connectId);
|
|
1081
1226
|
const canceledDevices: Device[] = [];
|
|
1227
|
+
const interruptDevice = (device: Device | undefined, deviceConnectId: string) => {
|
|
1228
|
+
if (!device || canceledDevices.includes(device)) {
|
|
1229
|
+
return;
|
|
1230
|
+
}
|
|
1231
|
+
setPrePendingCallPromise(deviceConnectId, device.interruptionFromUser());
|
|
1232
|
+
canceledDevices.push(device);
|
|
1233
|
+
};
|
|
1082
1234
|
for (const requestId of requestIds) {
|
|
1083
1235
|
const task = requestQueue.getTask(requestId);
|
|
1084
1236
|
Log.debug('Cancel Api connect task: ', task);
|
|
1085
|
-
if (task
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1237
|
+
if (task) {
|
|
1238
|
+
// During ensureConnected the method has a connectId but device is
|
|
1239
|
+
// assigned only after the poll succeeds. Interrupt the cached BLE
|
|
1240
|
+
// Device so an in-flight acquire/initialize cannot finish.
|
|
1241
|
+
interruptDevice(task.method?.device, task.method.connectId ?? connectId);
|
|
1242
|
+
interruptDevice(deviceCacheMap.get(connectId), connectId);
|
|
1091
1243
|
requestQueue.rejectRequest(
|
|
1092
1244
|
requestId,
|
|
1093
1245
|
ERRORS.TypedError(HardwareErrorCode.CallQueueActionCancelled)
|
|
1094
1246
|
);
|
|
1095
1247
|
}
|
|
1096
1248
|
}
|
|
1097
|
-
|
|
1249
|
+
interruptDevice(deviceCacheMap.get(connectId), connectId);
|
|
1250
|
+
pollingManager.stop(connectId);
|
|
1098
1251
|
} catch (e) {
|
|
1099
1252
|
Log.error('Cancel API Error: ', e);
|
|
1100
1253
|
}
|
|
@@ -1102,23 +1255,33 @@ export const cancel = (context: CoreContext, connectId?: string) => {
|
|
|
1102
1255
|
const env = DataManager.getSettings('env');
|
|
1103
1256
|
if (DataManager.isBleConnect(env)) {
|
|
1104
1257
|
Log.debug('Cancel Api all _deviceList: ');
|
|
1258
|
+
// Keep method abort signals observable until every active task is rejected.
|
|
1259
|
+
requestQueue.abortAllRequests();
|
|
1105
1260
|
const canceledDevices: Device[] = [];
|
|
1261
|
+
const interruptDevice = (device?: Device) => {
|
|
1262
|
+
if (!device || canceledDevices.includes(device)) {
|
|
1263
|
+
return;
|
|
1264
|
+
}
|
|
1265
|
+
device.interruptionFromUser().catch(() => undefined);
|
|
1266
|
+
canceledDevices.push(device);
|
|
1267
|
+
};
|
|
1106
1268
|
for (const requestId of requestQueue.getRequestTasksId()) {
|
|
1107
1269
|
const task = requestQueue.getTask(requestId);
|
|
1108
1270
|
Log.debug('Cancel Api connect task: ', task);
|
|
1109
|
-
if (task
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1271
|
+
if (task) {
|
|
1272
|
+
interruptDevice(task.method?.device);
|
|
1273
|
+
if (task.method.connectId) {
|
|
1274
|
+
interruptDevice(deviceCacheMap.get(task.method.connectId));
|
|
1275
|
+
pollingManager.stop(task.method.connectId);
|
|
1114
1276
|
}
|
|
1115
|
-
|
|
1116
1277
|
requestQueue.rejectRequest(
|
|
1117
1278
|
requestId,
|
|
1118
1279
|
ERRORS.TypedError(HardwareErrorCode.CallQueueActionCancelled)
|
|
1119
1280
|
);
|
|
1120
1281
|
}
|
|
1121
1282
|
}
|
|
1283
|
+
deviceCacheMap.forEach(interruptDevice);
|
|
1284
|
+
pollingManager.stopAll();
|
|
1122
1285
|
} else {
|
|
1123
1286
|
_deviceList?.allDevices().forEach(device => {
|
|
1124
1287
|
Log.debug('device: ', device, ' device.hasDeviceAcquire: ', device.hasDeviceAcquire());
|
|
@@ -1172,14 +1335,16 @@ const shouldCheckPassphraseState = (method: BaseMethod, device: Device) => {
|
|
|
1172
1335
|
};
|
|
1173
1336
|
|
|
1174
1337
|
const cleanup = () => {
|
|
1338
|
+
const pendingUiPromises = _uiPromises;
|
|
1175
1339
|
_uiPromises = [];
|
|
1176
|
-
|
|
1340
|
+
rejectUiPromises(
|
|
1341
|
+
pendingUiPromises,
|
|
1342
|
+
ERRORS.TypedError(HardwareErrorCode.ActionCancelled, 'UI request was cancelled')
|
|
1343
|
+
);
|
|
1177
1344
|
};
|
|
1178
1345
|
|
|
1179
1346
|
const removeDeviceListener = (device: Device) => {
|
|
1180
1347
|
device.removeAllListeners();
|
|
1181
|
-
DevicePool.emitter.removeAllListeners(DEVICE.CONNECT);
|
|
1182
|
-
// DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1183
1348
|
};
|
|
1184
1349
|
|
|
1185
1350
|
/**
|
|
@@ -1190,19 +1355,33 @@ const closePopup = () => {
|
|
|
1190
1355
|
};
|
|
1191
1356
|
|
|
1192
1357
|
const onDeviceConnectHandler = (device: Device) => {
|
|
1193
|
-
const
|
|
1194
|
-
|
|
1195
|
-
postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject
|
|
1358
|
+
const deviceObject = device.toMessageObject();
|
|
1359
|
+
if (!deviceObject) return;
|
|
1360
|
+
postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject }));
|
|
1196
1361
|
};
|
|
1197
1362
|
|
|
1198
1363
|
const onDeviceDisconnectHandler = (device: Device) => {
|
|
1199
1364
|
device.clearPreInitialized();
|
|
1200
|
-
const
|
|
1201
|
-
|
|
1202
|
-
postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject
|
|
1365
|
+
const deviceObject = device.toMessageObject();
|
|
1366
|
+
if (!deviceObject) return;
|
|
1367
|
+
postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject }));
|
|
1203
1368
|
};
|
|
1204
1369
|
|
|
1205
|
-
const
|
|
1370
|
+
const onTransportDeviceDisconnectHandler = (event: TransportDeviceDisconnectEvent) => {
|
|
1371
|
+
const device =
|
|
1372
|
+
deviceCacheMap.get(event.connectId) ??
|
|
1373
|
+
DevicePool.devicesCache[event.connectId] ??
|
|
1374
|
+
DevicePool.getDeviceByPath(event.connectId);
|
|
1375
|
+
if (!device) {
|
|
1376
|
+
Log.debug('Ignoring transport disconnect for an unknown device:', event.connectId);
|
|
1377
|
+
return;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
device.markTransportDisconnected();
|
|
1381
|
+
DevicePool.emitter.emit(DEVICE.DISCONNECT, device);
|
|
1382
|
+
};
|
|
1383
|
+
|
|
1384
|
+
const onDevicePinHandler = (...[device, type, callback]: DeviceEvents['pin']) => {
|
|
1206
1385
|
Log.log('request Input PIN');
|
|
1207
1386
|
// create ui promise
|
|
1208
1387
|
const uiPromise = createUiPromise(UI_RESPONSE.RECEIVE_PIN, device);
|
|
@@ -1211,12 +1390,14 @@ const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin
|
|
|
1211
1390
|
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1212
1391
|
device: device.toMessageObject() as unknown as KnownDevice,
|
|
1213
1392
|
type,
|
|
1393
|
+
responseCorrelation: uiPromise.responseCorrelation,
|
|
1214
1394
|
})
|
|
1215
1395
|
);
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1396
|
+
consumeUiPromise(
|
|
1397
|
+
uiPromise.promise,
|
|
1398
|
+
uiResp => callback(null, uiResp.payload),
|
|
1399
|
+
error => callback(error, '')
|
|
1400
|
+
);
|
|
1220
1401
|
};
|
|
1221
1402
|
|
|
1222
1403
|
export const onDeviceButtonHandler = (...[device, request]: [...DeviceEvents['button']]) => {
|
|
@@ -1240,7 +1421,11 @@ const onDeviceFeaturesHandler = (...[_, features]: [...DeviceEvents['features']]
|
|
|
1240
1421
|
postMessage(createDeviceMessage(DEVICE.FEATURES, { ...features }));
|
|
1241
1422
|
};
|
|
1242
1423
|
|
|
1243
|
-
const
|
|
1424
|
+
const onDeviceStateHandler = (...[_, stateEvent]: [...DeviceEvents['state']]) => {
|
|
1425
|
+
postMessage(createDeviceMessage(DEVICE.STATE, stateEvent));
|
|
1426
|
+
};
|
|
1427
|
+
|
|
1428
|
+
const onDevicePassphraseHandler = (
|
|
1244
1429
|
...[device, requestPayload, callback]: DeviceEvents['passphrase']
|
|
1245
1430
|
) => {
|
|
1246
1431
|
Log.debug('onDevicePassphraseHandler');
|
|
@@ -1250,21 +1435,27 @@ const onDevicePassphraseHandler = async (
|
|
|
1250
1435
|
device: device.toMessageObject() as KnownDevice,
|
|
1251
1436
|
passphraseState: device.passphraseState,
|
|
1252
1437
|
existsAttachPinUser: requestPayload.existsAttachPinUser,
|
|
1438
|
+
deviceOnly: requestPayload.deviceOnly,
|
|
1253
1439
|
source: requestPayload.source,
|
|
1254
1440
|
reason: requestPayload.reason,
|
|
1255
1441
|
expectedPassphraseState: requestPayload.expectedPassphraseState,
|
|
1442
|
+
...(requestPayload.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1443
|
+
responseCorrelation: uiPromise.responseCorrelation,
|
|
1256
1444
|
})
|
|
1257
1445
|
);
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1446
|
+
consumeUiPromise(
|
|
1447
|
+
uiPromise.promise,
|
|
1448
|
+
uiResp => {
|
|
1449
|
+
const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
|
|
1450
|
+
callback({
|
|
1451
|
+
passphrase: value.normalize('NFKD'),
|
|
1452
|
+
passphraseOnDevice,
|
|
1453
|
+
attachPinOnDevice,
|
|
1454
|
+
cache: save,
|
|
1455
|
+
});
|
|
1456
|
+
},
|
|
1457
|
+
error => callback({}, error)
|
|
1458
|
+
);
|
|
1268
1459
|
};
|
|
1269
1460
|
|
|
1270
1461
|
const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']) => {
|
|
@@ -1282,6 +1473,7 @@ const onEnterPassphraseOnDeviceHandler = (
|
|
|
1282
1473
|
passphraseState: device.passphraseState,
|
|
1283
1474
|
source: requestPayload?.source,
|
|
1284
1475
|
reason: requestPayload?.reason,
|
|
1476
|
+
...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1285
1477
|
})
|
|
1286
1478
|
);
|
|
1287
1479
|
};
|
|
@@ -1295,11 +1487,40 @@ const onEnterAttachPinOnDeviceHandler = (
|
|
|
1295
1487
|
type: 'ButtonRequest_AttachPin',
|
|
1296
1488
|
source: requestPayload?.source,
|
|
1297
1489
|
reason: requestPayload?.reason,
|
|
1490
|
+
...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1298
1491
|
})
|
|
1299
1492
|
);
|
|
1300
1493
|
};
|
|
1301
1494
|
|
|
1302
|
-
const
|
|
1495
|
+
const onEnterPinOnDeviceHandler = (
|
|
1496
|
+
...[device, pinType, metadata]: [...DeviceEvents['pin_on_device']]
|
|
1497
|
+
) => {
|
|
1498
|
+
postMessage(
|
|
1499
|
+
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1500
|
+
device: device.toMessageObject() as KnownDevice,
|
|
1501
|
+
type:
|
|
1502
|
+
pinType === DeviceSessionPinType.AttachToPin
|
|
1503
|
+
? 'ButtonRequest_AttachPin'
|
|
1504
|
+
: 'ButtonRequest_PinEntry',
|
|
1505
|
+
source: metadata?.source,
|
|
1506
|
+
reason: metadata?.reason,
|
|
1507
|
+
deviceOnly: metadata?.deviceOnly ?? true,
|
|
1508
|
+
completion: metadata?.completion,
|
|
1509
|
+
method: metadata?.method,
|
|
1510
|
+
page: metadata?.page,
|
|
1511
|
+
operation: metadata?.operation,
|
|
1512
|
+
...(metadata?.interaction ? { interaction: metadata.interaction } : {}),
|
|
1513
|
+
})
|
|
1514
|
+
);
|
|
1515
|
+
};
|
|
1516
|
+
|
|
1517
|
+
const onPinOnDeviceCompleteHandler = (
|
|
1518
|
+
...[_, metadata]: [...DeviceEvents['pin_on_device_complete']]
|
|
1519
|
+
) => {
|
|
1520
|
+
postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW, metadata));
|
|
1521
|
+
};
|
|
1522
|
+
|
|
1523
|
+
const onSelectDeviceInBootloaderForWebDeviceHandler = (
|
|
1303
1524
|
...[device, callback]: [...DeviceEvents['select_device_in_bootloader_for_web_device']]
|
|
1304
1525
|
) => {
|
|
1305
1526
|
Log.debug('onSelectDeviceInBootloaderForWebDeviceHandler');
|
|
@@ -1309,11 +1530,14 @@ const onSelectDeviceInBootloaderForWebDeviceHandler = async (
|
|
|
1309
1530
|
device: device.toMessageObject() as KnownDevice,
|
|
1310
1531
|
})
|
|
1311
1532
|
);
|
|
1312
|
-
|
|
1313
|
-
|
|
1533
|
+
consumeUiPromise(
|
|
1534
|
+
uiPromise.promise,
|
|
1535
|
+
uiResp => callback(null, uiResp.payload.deviceId),
|
|
1536
|
+
error => callback(error, '')
|
|
1537
|
+
);
|
|
1314
1538
|
};
|
|
1315
1539
|
|
|
1316
|
-
const onSelectDeviceForSwitchFirmwareWebDeviceHandler =
|
|
1540
|
+
const onSelectDeviceForSwitchFirmwareWebDeviceHandler = (
|
|
1317
1541
|
...[device, callback]: [...DeviceEvents['select_device_for_switch_firmware_web_device']]
|
|
1318
1542
|
) => {
|
|
1319
1543
|
Log.debug('onSelectDeviceForSwitchFirmwareWebDeviceHandler');
|
|
@@ -1326,8 +1550,11 @@ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
|
|
|
1326
1550
|
device: device.toMessageObject() as KnownDevice,
|
|
1327
1551
|
})
|
|
1328
1552
|
);
|
|
1329
|
-
|
|
1330
|
-
|
|
1553
|
+
consumeUiPromise(
|
|
1554
|
+
uiPromise.promise,
|
|
1555
|
+
uiResp => callback(null, uiResp.payload.deviceId),
|
|
1556
|
+
error => callback(error, '')
|
|
1557
|
+
);
|
|
1331
1558
|
};
|
|
1332
1559
|
|
|
1333
1560
|
/**
|
|
@@ -1346,14 +1573,21 @@ const postMessage = (message: CoreMessage) => {
|
|
|
1346
1573
|
|
|
1347
1574
|
const createUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T, device?: Device) => {
|
|
1348
1575
|
const uiPromise: UiPromise<T> = createDeferred(promiseEvent, device);
|
|
1576
|
+
if (
|
|
1577
|
+
device &&
|
|
1578
|
+
(promiseEvent === UI_RESPONSE.RECEIVE_PIN || promiseEvent === UI_RESPONSE.RECEIVE_PASSPHRASE)
|
|
1579
|
+
) {
|
|
1580
|
+
const publicDeviceId = device.toMessageObject()?.deviceId;
|
|
1581
|
+
uiPromise.responseCorrelation = {
|
|
1582
|
+
interactionId: generateInstanceId('UiResponse', device.sdkInstanceId),
|
|
1583
|
+
deviceId: publicDeviceId || device.instanceId,
|
|
1584
|
+
};
|
|
1585
|
+
}
|
|
1349
1586
|
_uiPromises.push(uiPromise as any);
|
|
1350
1587
|
|
|
1351
1588
|
return uiPromise;
|
|
1352
1589
|
};
|
|
1353
1590
|
|
|
1354
|
-
const findUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T) =>
|
|
1355
|
-
_uiPromises.find(p => p.id === promiseEvent);
|
|
1356
|
-
|
|
1357
1591
|
const removeUiPromise = (promise: Deferred<any>) => {
|
|
1358
1592
|
_uiPromises = _uiPromises.filter(p => p !== promise);
|
|
1359
1593
|
};
|
|
@@ -1365,8 +1599,10 @@ export default class Core extends EventEmitter {
|
|
|
1365
1599
|
|
|
1366
1600
|
private requestQueue = new RequestQueue();
|
|
1367
1601
|
|
|
1602
|
+
private disposePromise?: Promise<void>;
|
|
1603
|
+
|
|
1368
1604
|
// background task
|
|
1369
|
-
private
|
|
1605
|
+
private prePendingCallPromises = new Map<string, Promise<void>>();
|
|
1370
1606
|
|
|
1371
1607
|
private methodSynchronize = getSynchronize();
|
|
1372
1608
|
|
|
@@ -1377,19 +1613,24 @@ export default class Core extends EventEmitter {
|
|
|
1377
1613
|
Log.debug(`[Core] Created SDK instance: ${this.sdkInstanceId}`);
|
|
1378
1614
|
}
|
|
1379
1615
|
|
|
1380
|
-
cancelOperation(operationId: string) {
|
|
1381
|
-
this.requestQueue.abortOperation(operationId);
|
|
1382
|
-
}
|
|
1383
|
-
|
|
1384
1616
|
private getCoreContext() {
|
|
1385
1617
|
return {
|
|
1386
1618
|
sdkInstanceId: this.sdkInstanceId,
|
|
1387
1619
|
tracingContext: this.tracingContext,
|
|
1388
1620
|
requestQueue: this.requestQueue,
|
|
1389
1621
|
methodSynchronize: this.methodSynchronize,
|
|
1390
|
-
getPrePendingCallPromise: () => this.
|
|
1391
|
-
setPrePendingCallPromise: (
|
|
1392
|
-
|
|
1622
|
+
getPrePendingCallPromise: (connectId: string) => this.prePendingCallPromises.get(connectId),
|
|
1623
|
+
setPrePendingCallPromise: (connectId: string, promise?: Promise<void>) => {
|
|
1624
|
+
if (!promise) {
|
|
1625
|
+
this.prePendingCallPromises.delete(connectId);
|
|
1626
|
+
return;
|
|
1627
|
+
}
|
|
1628
|
+
this.prePendingCallPromises.set(connectId, promise);
|
|
1629
|
+
},
|
|
1630
|
+
removePrePendingCallPromise: (connectId: string, promise: Promise<void>) => {
|
|
1631
|
+
if (this.prePendingCallPromises.get(connectId) === promise) {
|
|
1632
|
+
this.prePendingCallPromises.delete(connectId);
|
|
1633
|
+
}
|
|
1393
1634
|
},
|
|
1394
1635
|
// callback 任务管理
|
|
1395
1636
|
registerCallbackTask: (connectId: string, callbackPromise: Deferred<any>) => {
|
|
@@ -1407,11 +1648,16 @@ export default class Core extends EventEmitter {
|
|
|
1407
1648
|
case UI_RESPONSE.RECEIVE_PASSPHRASE:
|
|
1408
1649
|
case UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:
|
|
1409
1650
|
case UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: {
|
|
1410
|
-
const uiPromise =
|
|
1651
|
+
const uiPromise = findUiPromiseForResponse(_uiPromises, message);
|
|
1411
1652
|
if (uiPromise) {
|
|
1412
1653
|
Log.log('receive UI Response: ', message.type);
|
|
1413
1654
|
uiPromise.resolve(message);
|
|
1414
1655
|
removeUiPromise(uiPromise);
|
|
1656
|
+
} else if (
|
|
1657
|
+
message.type === UI_RESPONSE.RECEIVE_PIN ||
|
|
1658
|
+
message.type === UI_RESPONSE.RECEIVE_PASSPHRASE
|
|
1659
|
+
) {
|
|
1660
|
+
Log.warn('Ignored unmatched or ambiguous sensitive UI response:', message.type);
|
|
1415
1661
|
}
|
|
1416
1662
|
break;
|
|
1417
1663
|
}
|
|
@@ -1427,10 +1673,17 @@ export default class Core extends EventEmitter {
|
|
|
1427
1673
|
}
|
|
1428
1674
|
|
|
1429
1675
|
case IFRAME.CALL: {
|
|
1430
|
-
|
|
1676
|
+
const logBlockLabel = getLogBlockLabel(message);
|
|
1677
|
+
Log.log(
|
|
1678
|
+
formatLogMethodLabel(`[${Date.now()}][CALL_API]`, logBlockLabel),
|
|
1679
|
+
getSafeLogPayload(message, logBlockLabel)
|
|
1680
|
+
);
|
|
1431
1681
|
const response = await callAPI(this.getCoreContext(), message);
|
|
1432
1682
|
const { success, payload } = response;
|
|
1433
|
-
Log.log(
|
|
1683
|
+
Log.log(
|
|
1684
|
+
formatLogMethodLabel(`[${Date.now()}][CALL_API_RESPONSE]`, logBlockLabel),
|
|
1685
|
+
getSafeLogPayload(response, logBlockLabel)
|
|
1686
|
+
);
|
|
1434
1687
|
if (success) {
|
|
1435
1688
|
return response;
|
|
1436
1689
|
}
|
|
@@ -1449,10 +1702,6 @@ export default class Core extends EventEmitter {
|
|
|
1449
1702
|
cancel(this.getCoreContext(), message.payload.connectId);
|
|
1450
1703
|
break;
|
|
1451
1704
|
}
|
|
1452
|
-
case IFRAME.CANCEL_OPERATION: {
|
|
1453
|
-
this.cancelOperation(message.payload.operationId);
|
|
1454
|
-
break;
|
|
1455
|
-
}
|
|
1456
1705
|
case IFRAME.CALLBACK: {
|
|
1457
1706
|
Log.log('callback message: ', message);
|
|
1458
1707
|
postMessage(message);
|
|
@@ -1464,25 +1713,65 @@ export default class Core extends EventEmitter {
|
|
|
1464
1713
|
return Promise.resolve(message);
|
|
1465
1714
|
}
|
|
1466
1715
|
|
|
1467
|
-
dispose() {
|
|
1716
|
+
dispose(): Promise<void> {
|
|
1717
|
+
if (!this.disposePromise) {
|
|
1718
|
+
this.disposePromise = this.disposeResources();
|
|
1719
|
+
}
|
|
1720
|
+
return this.disposePromise;
|
|
1721
|
+
}
|
|
1722
|
+
|
|
1723
|
+
private async disposeResources(): Promise<void> {
|
|
1724
|
+
Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
|
|
1725
|
+
pollingManager.stopAll();
|
|
1726
|
+
this.requestQueue.abortAllRequests();
|
|
1727
|
+
cleanup();
|
|
1728
|
+
|
|
1729
|
+
_connector?.stop();
|
|
1730
|
+
let transportCleanup: Promise<void>;
|
|
1731
|
+
try {
|
|
1732
|
+
transportCleanup = Promise.resolve(TransportManager.getTransport()?.stop?.()).catch(error => {
|
|
1733
|
+
Log.warn('[Core] Transport cleanup failed:', error);
|
|
1734
|
+
});
|
|
1735
|
+
} catch (error) {
|
|
1736
|
+
Log.warn('[Core] Transport cleanup failed:', error);
|
|
1737
|
+
transportCleanup = Promise.resolve();
|
|
1738
|
+
}
|
|
1739
|
+
|
|
1740
|
+
// Preserve synchronous dispose semantics for in-memory state and listeners.
|
|
1468
1741
|
_deviceList = undefined;
|
|
1469
1742
|
_connector = undefined;
|
|
1743
|
+
DevicePool.dispose();
|
|
1470
1744
|
deviceCacheMap.clear();
|
|
1471
1745
|
preWarmInflight.clear();
|
|
1472
1746
|
preWarmDoneAt.clear();
|
|
1473
|
-
|
|
1747
|
+
preConnectCache = { passphraseState: undefined };
|
|
1748
|
+
this.prePendingCallPromises.clear();
|
|
1749
|
+
this.removeAllListeners();
|
|
1474
1750
|
cleanupSdkInstance(this.sdkInstanceId);
|
|
1751
|
+
if (_core === this) _core = undefined;
|
|
1752
|
+
|
|
1753
|
+
// Transports, especially Node USB, may release native handles asynchronously.
|
|
1754
|
+
await transportCleanup;
|
|
1475
1755
|
}
|
|
1476
1756
|
}
|
|
1477
1757
|
|
|
1478
1758
|
export const initCore = () => {
|
|
1479
|
-
|
|
1480
|
-
|
|
1759
|
+
const core = new Core();
|
|
1760
|
+
_core = core;
|
|
1761
|
+
return core;
|
|
1481
1762
|
};
|
|
1482
1763
|
|
|
1483
1764
|
export const initConnector = () => {
|
|
1484
1765
|
_connector = new DeviceConnector();
|
|
1766
|
+
DevicePool.emitter.removeListener(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
1767
|
+
DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1768
|
+
DevicePool.emitter.removeListener(
|
|
1769
|
+
TRANSPORT_EVENT.DEVICE_DISCONNECT,
|
|
1770
|
+
onTransportDeviceDisconnectHandler
|
|
1771
|
+
);
|
|
1772
|
+
DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
1485
1773
|
DevicePool.emitter.on(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1774
|
+
DevicePool.emitter.on(TRANSPORT_EVENT.DEVICE_DISCONNECT, onTransportDeviceDisconnectHandler);
|
|
1486
1775
|
return _connector;
|
|
1487
1776
|
};
|
|
1488
1777
|
|
|
@@ -1496,12 +1785,8 @@ export const init = async (
|
|
|
1496
1785
|
plugin?: LowlevelTransportSharedPlugin
|
|
1497
1786
|
) => {
|
|
1498
1787
|
try {
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
initTransport(Transport, plugin);
|
|
1502
|
-
} catch {
|
|
1503
|
-
Log.error('DataManager.load error');
|
|
1504
|
-
}
|
|
1788
|
+
await DataManager.load(settings);
|
|
1789
|
+
initTransport(Transport, plugin);
|
|
1505
1790
|
enableLog(DataManager.getSettings('debug'));
|
|
1506
1791
|
if (DataManager.getSettings('env') !== 'react-native') {
|
|
1507
1792
|
setLoggerPostMessage(postMessage);
|
|
@@ -1512,6 +1797,7 @@ export const init = async (
|
|
|
1512
1797
|
return _core;
|
|
1513
1798
|
} catch (error) {
|
|
1514
1799
|
Log.error('core init', error);
|
|
1800
|
+
throw error;
|
|
1515
1801
|
}
|
|
1516
1802
|
};
|
|
1517
1803
|
|