@onekeyfe/hd-core 1.2.0-alpha.16 → 1.2.0-alpha.160
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 +754 -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 +39 -0
- 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 +12 -6
- package/__tests__/evmSignTransaction.test.ts +69 -0
- package/__tests__/evmSignTypedData.test.ts +80 -0
- package/__tests__/filesystemValidation.test.ts +53 -0
- package/__tests__/firmware-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 +166 -0
- package/__tests__/firmware-update/firmware-update-v4-parameters.test.ts +85 -0
- package/__tests__/firmware-update/firmware-upload-source.test.ts +70 -0
- package/__tests__/get-device-state.test.ts +617 -0
- package/__tests__/homescreen.test.ts +81 -0
- package/__tests__/kaspa-public-types.type-test.ts +16 -0
- package/__tests__/kaspa-use-tweak-pro2.test.ts +20 -0
- package/__tests__/kaspaSignTransaction.test.ts +578 -0
- package/__tests__/known-device-public-types.type-test.ts +3 -0
- package/__tests__/logBlockEvent.test.ts +140 -1
- package/__tests__/method-protocol-support.test.ts +144 -0
- package/__tests__/networkUtils.test.ts +406 -0
- package/__tests__/open-wallet-session-error-response.test.ts +43 -0
- package/__tests__/open-wallet-session.test.ts +1899 -0
- package/__tests__/pro2Nft.test.ts +108 -0
- package/__tests__/pro2Wallpaper.test.ts +8 -19
- package/__tests__/protocol-binding.test.ts +89 -0
- package/__tests__/protocol-v2-firmware-targets.test.ts +105 -0
- package/__tests__/protocol-v2-ping.test.ts +28 -0
- package/__tests__/protocol-v2-resources.test.ts +364 -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 +7901 -2129
- package/__tests__/protocolV2FileWrite.test.ts +221 -3
- package/__tests__/protocolV2UiInteraction.test.ts +329 -0
- package/__tests__/public-device-state-api.test.ts +275 -0
- package/__tests__/public-pro2-api-boundary.test.ts +107 -0
- package/__tests__/refresh-device-state.test.ts +103 -0
- package/__tests__/request-context-logging.test.ts +16 -0
- package/__tests__/resourceBase64Boundary.test.ts +48 -0
- package/__tests__/search-devices.test.ts +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 +14 -2
- package/dist/api/BaseMethod.d.ts.map +1 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts +25 -1
- package/dist/api/CheckAllFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CheckBLEFirmwareRelease.d.ts +3 -2
- package/dist/api/CheckBLEFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CheckBootloaderRelease.d.ts +2 -1
- package/dist/api/CheckBootloaderRelease.d.ts.map +1 -1
- package/dist/api/CheckFirmwareRelease.d.ts +3 -2
- package/dist/api/CheckFirmwareRelease.d.ts.map +1 -1
- package/dist/api/CipherKeyValue.d.ts +1 -0
- package/dist/api/CipherKeyValue.d.ts.map +1 -1
- package/dist/api/ClearSessionCache.d.ts.map +1 -1
- package/dist/api/DetectDeviceConnectProtocol.d.ts +7 -0
- package/dist/api/DetectDeviceConnectProtocol.d.ts.map +1 -0
- package/dist/api/DirList.d.ts +1 -0
- package/dist/api/DirList.d.ts.map +1 -1
- package/dist/api/DirMake.d.ts +1 -0
- package/dist/api/DirMake.d.ts.map +1 -1
- package/dist/api/DirRemove.d.ts +1 -0
- package/dist/api/DirRemove.d.ts.map +1 -1
- package/dist/api/FileDelete.d.ts +1 -0
- package/dist/api/FileDelete.d.ts.map +1 -1
- package/dist/api/FileRead.d.ts +1 -0
- package/dist/api/FileRead.d.ts.map +1 -1
- package/dist/api/FileWrite.d.ts +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 +62 -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 +11 -0
- package/dist/api/helpers/protocolV2FileWrite.d.ts.map +1 -1
- package/dist/api/index.d.ts +5 -29
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaGetAddress.d.ts +4 -0
- package/dist/api/kaspa/KaspaGetAddress.d.ts.map +1 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts +9 -1
- package/dist/api/kaspa/KaspaSignTransaction.d.ts.map +1 -1
- package/dist/api/kaspa/helpers/TransferSerialize.d.ts.map +1 -1
- package/dist/api/lightning/LnurlAuth.d.ts +0 -4
- package/dist/api/lightning/LnurlAuth.d.ts.map +1 -1
- package/dist/api/near/NearGetAddress.d.ts +1 -0
- package/dist/api/near/NearGetAddress.d.ts.map +1 -1
- package/dist/api/near/NearSignTransaction.d.ts +1 -0
- package/dist/api/near/NearSignTransaction.d.ts.map +1 -1
- package/dist/api/nem/NEMGetAddress.d.ts +1 -0
- package/dist/api/nem/NEMGetAddress.d.ts.map +1 -1
- package/dist/api/nem/NEMSignTransaction.d.ts +1 -0
- package/dist/api/nem/NEMSignTransaction.d.ts.map +1 -1
- package/dist/api/neo/NeoGetAddress.d.ts.map +1 -1
- package/dist/api/neo/NeoSignTransaction.d.ts.map +1 -1
- package/dist/api/nervos/NervosGetAddress.d.ts.map +1 -1
- package/dist/api/nervos/NervosSignTransaction.d.ts.map +1 -1
- package/dist/api/nexa/NexaGetAddress.d.ts.map +1 -1
- package/dist/api/nexa/NexaSignTransaction.d.ts +1 -0
- package/dist/api/nexa/NexaSignTransaction.d.ts.map +1 -1
- package/dist/api/nostr/NostrDecryptMessage.d.ts +1 -0
- package/dist/api/nostr/NostrDecryptMessage.d.ts.map +1 -1
- package/dist/api/nostr/NostrEncryptMessage.d.ts +1 -0
- package/dist/api/nostr/NostrEncryptMessage.d.ts.map +1 -1
- package/dist/api/nostr/NostrGetPublicKey.d.ts +1 -0
- package/dist/api/nostr/NostrGetPublicKey.d.ts.map +1 -1
- package/dist/api/nostr/NostrSignEvent.d.ts +1 -0
- package/dist/api/nostr/NostrSignEvent.d.ts.map +1 -1
- package/dist/api/nostr/NostrSignSchnorr.d.ts +1 -0
- package/dist/api/nostr/NostrSignSchnorr.d.ts.map +1 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts +2 -1
- package/dist/api/polkadot/PolkadotGetAddress.d.ts.map +1 -1
- package/dist/api/polkadot/PolkadotSignTransaction.d.ts +1 -0
- package/dist/api/polkadot/PolkadotSignTransaction.d.ts.map +1 -1
- package/dist/api/polkadot/networks.d.ts +1 -1
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoGet.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceFactoryInfoSet.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts +4 -1
- package/dist/api/protocol-v2/DeviceFirmwareUpdate.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts +1 -0
- package/dist/api/protocol-v2/DeviceGetFirmwareUpdateStatus.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts +2 -1
- package/dist/api/protocol-v2/DeviceGetOnboardingStatus.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceInfoGet.d.ts +2 -2
- package/dist/api/protocol-v2/DeviceInfoGet.d.ts.map +1 -1
- package/dist/api/protocol-v2/DeviceReboot.d.ts +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 +3 -3
- package/dist/api/protocol-v2/DeviceUploadWallpaper.d.ts.map +1 -1
- package/dist/api/protocol-v2/FilesystemFormat.d.ts +1 -0
- package/dist/api/protocol-v2/FilesystemFormat.d.ts.map +1 -1
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts +1 -0
- package/dist/api/protocol-v2/FilesystemPermissionFix.d.ts.map +1 -1
- package/dist/api/protocol-v2/Ping.d.ts +3 -0
- package/dist/api/protocol-v2/Ping.d.ts.map +1 -1
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts +1 -0
- package/dist/api/protocol-v2/ProtocolInfoRequest.d.ts.map +1 -1
- package/dist/api/protocol-v2/helpers.d.ts.map +1 -1
- package/dist/api/scdo/ScdoGetAddress.d.ts.map +1 -1
- package/dist/api/scdo/ScdoSignMessage.d.ts.map +1 -1
- package/dist/api/scdo/ScdoSignTransaction.d.ts.map +1 -1
- package/dist/api/solana/SolGetAddress.d.ts +1 -0
- package/dist/api/solana/SolGetAddress.d.ts.map +1 -1
- package/dist/api/solana/SolSignMessage.d.ts +2 -1
- package/dist/api/solana/SolSignMessage.d.ts.map +1 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts +2 -1
- package/dist/api/solana/SolSignOffchainMessage.d.ts.map +1 -1
- package/dist/api/solana/SolSignTransaction.d.ts +3 -2
- package/dist/api/solana/SolSignTransaction.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinGetAddress.d.ts +1 -0
- package/dist/api/starcoin/StarcoinGetAddress.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinGetPublicKey.d.ts +1 -0
- package/dist/api/starcoin/StarcoinGetPublicKey.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinSignMessage.d.ts +1 -0
- package/dist/api/starcoin/StarcoinSignMessage.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinSignTransaction.d.ts +1 -0
- package/dist/api/starcoin/StarcoinSignTransaction.d.ts.map +1 -1
- package/dist/api/starcoin/StarcoinVerifyMessage.d.ts +1 -0
- package/dist/api/starcoin/StarcoinVerifyMessage.d.ts.map +1 -1
- package/dist/api/stellar/StellarGetAddress.d.ts +1 -2
- package/dist/api/stellar/StellarGetAddress.d.ts.map +1 -1
- package/dist/api/stellar/StellarSignTransaction.d.ts +2 -3
- package/dist/api/stellar/StellarSignTransaction.d.ts.map +1 -1
- package/dist/api/sui/SuiGetAddress.d.ts +2 -1
- package/dist/api/sui/SuiGetAddress.d.ts.map +1 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts +2 -1
- package/dist/api/sui/SuiGetPublicKey.d.ts.map +1 -1
- package/dist/api/sui/SuiSignMessage.d.ts +2 -1
- package/dist/api/sui/SuiSignMessage.d.ts.map +1 -1
- package/dist/api/sui/SuiSignTransaction.d.ts +2 -1
- package/dist/api/sui/SuiSignTransaction.d.ts.map +1 -1
- package/dist/api/ton/TonGetAddress.d.ts +2 -1
- package/dist/api/ton/TonGetAddress.d.ts.map +1 -1
- package/dist/api/ton/TonSignData.d.ts +1 -0
- package/dist/api/ton/TonSignData.d.ts.map +1 -1
- package/dist/api/ton/TonSignMessage.d.ts +2 -1
- package/dist/api/ton/TonSignMessage.d.ts.map +1 -1
- package/dist/api/ton/TonSignProof.d.ts +2 -1
- package/dist/api/ton/TonSignProof.d.ts.map +1 -1
- package/dist/api/tron/TronGetAddress.d.ts +1 -0
- package/dist/api/tron/TronGetAddress.d.ts.map +1 -1
- package/dist/api/tron/TronSignMessage.d.ts +6 -1
- package/dist/api/tron/TronSignMessage.d.ts.map +1 -1
- package/dist/api/tron/TronSignTransaction.d.ts +2 -1
- package/dist/api/tron/TronSignTransaction.d.ts.map +1 -1
- package/dist/api/utils.d.ts +4 -1
- package/dist/api/utils.d.ts.map +1 -1
- package/dist/api/xrp/XrpGetAddress.d.ts +1 -0
- package/dist/api/xrp/XrpGetAddress.d.ts.map +1 -1
- package/dist/api/xrp/XrpSignTransaction.d.ts +1 -0
- package/dist/api/xrp/XrpSignTransaction.d.ts.map +1 -1
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/core/RequestQueue.d.ts +0 -2
- package/dist/core/RequestQueue.d.ts.map +1 -1
- package/dist/core/deviceEventRegistration.d.ts +3 -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 +84 -16
- package/dist/device/Device.d.ts.map +1 -1
- package/dist/device/DeviceCommands.d.ts +8 -6
- package/dist/device/DeviceCommands.d.ts.map +1 -1
- package/dist/device/DeviceConnector.d.ts +4 -3
- package/dist/device/DeviceConnector.d.ts.map +1 -1
- package/dist/device/DeviceFeaturesState.d.ts +3 -0
- package/dist/device/DeviceFeaturesState.d.ts.map +1 -0
- package/dist/device/DevicePool.d.ts +6 -2
- package/dist/device/DevicePool.d.ts.map +1 -1
- package/dist/device/DeviceStateMapper.d.ts +13 -0
- package/dist/device/DeviceStateMapper.d.ts.map +1 -0
- package/dist/device/DeviceStateProjector.d.ts +7 -0
- package/dist/device/DeviceStateProjector.d.ts.map +1 -0
- package/dist/device/DeviceStateStore.d.ts +21 -0
- package/dist/device/DeviceStateStore.d.ts.map +1 -0
- package/dist/device/DeviceWalletSessionStore.d.ts +13 -1
- package/dist/device/DeviceWalletSessionStore.d.ts.map +1 -1
- package/dist/device/cloneDeviceState.d.ts +2 -0
- package/dist/device/cloneDeviceState.d.ts.map +1 -0
- package/dist/device/deviceIdentity.d.ts +5 -0
- package/dist/device/deviceIdentity.d.ts.map +1 -0
- package/dist/deviceProfile/buildDeviceFeatures.d.ts +8 -2
- package/dist/deviceProfile/buildDeviceFeatures.d.ts.map +1 -1
- package/dist/deviceProfile/index.d.ts +0 -1
- package/dist/deviceProfile/index.d.ts.map +1 -1
- package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts +7 -0
- package/dist/deviceProfile/protocolV2DeviceIdentity.d.ts.map +1 -0
- package/dist/events/call.d.ts +0 -7
- package/dist/events/call.d.ts.map +1 -1
- package/dist/events/core.d.ts +2 -2
- package/dist/events/core.d.ts.map +1 -1
- package/dist/events/device.d.ts +16 -2
- package/dist/events/device.d.ts.map +1 -1
- package/dist/events/iframe.d.ts +0 -1
- package/dist/events/iframe.d.ts.map +1 -1
- package/dist/events/logBlockEvent.d.ts +2 -0
- package/dist/events/logBlockEvent.d.ts.map +1 -1
- package/dist/events/ui-promise.d.ts +4 -2
- package/dist/events/ui-promise.d.ts.map +1 -1
- package/dist/events/ui-request.d.ts +50 -4
- package/dist/events/ui-request.d.ts.map +1 -1
- package/dist/events/ui-response.d.ts +10 -2
- package/dist/events/ui-response.d.ts.map +1 -1
- package/dist/index.d.ts +1743 -830
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11463 -4629
- package/dist/inject.d.ts +7 -3
- package/dist/inject.d.ts.map +1 -1
- package/dist/lowLevelInject.d.ts +1 -2
- package/dist/lowLevelInject.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/deviceSession.d.ts +7 -0
- package/dist/protocols/protocol-v2/deviceSession.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/features.d.ts +33 -22
- package/dist/protocols/protocol-v2/features.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/firmware.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/index.d.ts +2 -2
- package/dist/protocols/protocol-v2/index.d.ts.map +1 -1
- package/dist/protocols/protocol-v2/resources.d.ts +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 +42 -0
- package/dist/protocols/protocol-v2/uiInteraction.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts +2 -0
- package/dist/protocols/protocol-v2/unlockPolicy.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts +22 -0
- package/dist/protocols/protocol-v2/unlockPolicyRunner.d.ts.map +1 -0
- package/dist/protocols/protocol-v2/walletSession.d.ts +18 -4
- package/dist/protocols/protocol-v2/walletSession.d.ts.map +1 -1
- package/dist/topLevelInject.d.ts.map +1 -1
- package/dist/types/api/checkAllFirmwareRelease.d.ts +48 -9
- package/dist/types/api/checkAllFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkBLEFirmwareRelease.d.ts +2 -13
- package/dist/types/api/checkBLEFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkBootloaderRelease.d.ts +2 -6
- package/dist/types/api/checkBootloaderRelease.d.ts.map +1 -1
- package/dist/types/api/checkFirmwareRelease.d.ts +2 -13
- package/dist/types/api/checkFirmwareRelease.d.ts.map +1 -1
- package/dist/types/api/checkFirmwareTypeAvailable.d.ts +2 -2
- package/dist/types/api/checkFirmwareTypeAvailable.d.ts.map +1 -1
- package/dist/types/api/detectDeviceConnectProtocol.d.ts +4 -0
- package/dist/types/api/detectDeviceConnectProtocol.d.ts.map +1 -0
- package/dist/types/api/deviceSettings.d.ts +11 -2
- package/dist/types/api/deviceSettings.d.ts.map +1 -1
- package/dist/types/api/deviceUnlock.d.ts +6 -2
- package/dist/types/api/deviceUnlock.d.ts.map +1 -1
- package/dist/types/api/deviceUpdateBootloader.d.ts +6 -0
- package/dist/types/api/deviceUpdateBootloader.d.ts.map +1 -1
- package/dist/types/api/export.d.ts +8 -3
- package/dist/types/api/export.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdate.d.ts +67 -5
- package/dist/types/api/firmwareUpdate.d.ts.map +1 -1
- package/dist/types/api/firmwareUpdateCapabilities.d.ts +9 -0
- package/dist/types/api/firmwareUpdateCapabilities.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts +28 -0
- package/dist/types/api/firmwareUpdatePlan.d.ts.map +1 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts +42 -0
- package/dist/types/api/firmwareUpdatePreparedPlan.d.ts.map +1 -0
- package/dist/types/api/getDeviceState.d.ts +12 -0
- package/dist/types/api/getDeviceState.d.ts.map +1 -0
- package/dist/types/api/getFeatures.d.ts.map +1 -1
- package/dist/types/api/getOnekeyFeatures.d.ts.map +1 -1
- package/dist/types/api/getPassphraseState.d.ts.map +1 -1
- package/dist/types/api/index.d.ts +25 -35
- package/dist/types/api/index.d.ts.map +1 -1
- package/dist/types/api/kaspaSignTransaction.d.ts +42 -4
- package/dist/types/api/kaspaSignTransaction.d.ts.map +1 -1
- package/dist/types/api/openWalletSession.d.ts +35 -0
- package/dist/types/api/openWalletSession.d.ts.map +1 -0
- package/dist/types/api/protocolV2.d.ts +11 -93
- package/dist/types/api/protocolV2.d.ts.map +1 -1
- package/dist/types/api/sessionCache.d.ts +4 -1
- package/dist/types/api/sessionCache.d.ts.map +1 -1
- package/dist/types/device.d.ts +139 -8
- package/dist/types/device.d.ts.map +1 -1
- package/dist/types/params.d.ts +1 -0
- package/dist/types/params.d.ts.map +1 -1
- package/dist/types/settings.d.ts +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 +10 -0
- package/dist/utils/pro2Wallpaper.d.ts.map +1 -1
- package/dist/utils/tracing.d.ts.map +1 -1
- package/dist/utils/uiProgressThrottle.d.ts +3 -0
- package/dist/utils/uiProgressThrottle.d.ts.map +1 -0
- package/package.json +6 -4
- package/src/api/BaseMethod.ts +45 -23
- package/src/api/CheckAllFirmwareRelease.ts +440 -4
- package/src/api/CheckBLEFirmwareRelease.ts +37 -5
- package/src/api/CheckBootloaderRelease.ts +37 -5
- package/src/api/CheckFirmwareRelease.ts +36 -9
- package/src/api/CipherKeyValue.ts +4 -0
- package/src/api/ClearSessionCache.ts +4 -0
- package/src/api/DetectDeviceConnectProtocol.ts +18 -0
- package/src/api/DirList.ts +9 -4
- package/src/api/DirMake.ts +7 -4
- package/src/api/DirRemove.ts +7 -4
- package/src/api/FileDelete.ts +7 -4
- package/src/api/FileRead.ts +13 -7
- package/src/api/FileWrite.ts +7 -4
- package/src/api/FirmwareUpdate.ts +30 -15
- package/src/api/FirmwareUpdateV2.ts +535 -169
- package/src/api/FirmwareUpdateV3.ts +350 -91
- package/src/api/FirmwareUpdateV4.ts +2036 -744
- package/src/api/GetDeviceState.ts +59 -0
- package/src/api/GetFeatures.ts +6 -4
- package/src/api/GetOnekeyFeatures.ts +1 -75
- package/src/api/GetPassphraseState.ts +36 -12
- package/src/api/OpenWalletSession.ts +268 -0
- package/src/api/PathInfo.ts +9 -4
- package/src/api/PromptWebDeviceAccess.ts +3 -8
- package/src/api/SearchDevices.ts +35 -5
- package/src/api/UploadPortfolio.ts +30 -4
- package/src/api/alephium/AlephiumGetAddress.ts +0 -4
- package/src/api/alephium/AlephiumSignMessage.ts +0 -4
- package/src/api/alephium/AlephiumSignTransaction.ts +2 -6
- package/src/api/algo/AlgoGetAddress.ts +4 -0
- package/src/api/algo/AlgoSignTransaction.ts +4 -0
- package/src/api/allnetwork/AllNetworkGetAddress.ts +21 -21
- package/src/api/allnetwork/AllNetworkGetAddressBase.ts +45 -32
- package/src/api/aptos/AptosGetAddress.ts +4 -0
- package/src/api/aptos/AptosGetPublicKey.ts +4 -0
- package/src/api/aptos/AptosSignInMessage.ts +4 -0
- package/src/api/aptos/AptosSignMessage.ts +4 -0
- package/src/api/aptos/AptosSignTransaction.ts +4 -0
- package/src/api/benfen/BenfenGetAddress.ts +11 -7
- package/src/api/benfen/BenfenGetPublicKey.ts +0 -4
- package/src/api/benfen/BenfenSignMessage.ts +0 -4
- package/src/api/benfen/BenfenSignTransaction.ts +0 -4
- package/src/api/btc/BTCGetAddress.ts +8 -1
- package/src/api/btc/BTCGetPublicKey.ts +9 -2
- package/src/api/btc/BTCSignMessage.ts +8 -1
- package/src/api/btc/BTCSignPsbt.ts +4 -0
- package/src/api/btc/BTCSignTransaction.ts +8 -1
- package/src/api/btc/BTCVerifyMessage.ts +8 -1
- package/src/api/btc/helpers/versionLimit.ts +7 -4
- package/src/api/cardano/CardanoGetAddress.ts +4 -0
- package/src/api/cardano/CardanoGetPublicKey.ts +4 -0
- package/src/api/cardano/CardanoSignMessage.ts +4 -0
- package/src/api/cardano/CardanoSignTransaction.ts +4 -0
- package/src/api/conflux/ConfluxGetAddress.ts +6 -0
- package/src/api/conflux/ConfluxSignMessage.ts +6 -0
- package/src/api/conflux/ConfluxSignMessageCIP23.ts +6 -0
- package/src/api/conflux/ConfluxSignTransaction.ts +8 -5
- package/src/api/cosmos/CosmosGetAddress.ts +4 -0
- package/src/api/cosmos/CosmosGetPublicKey.ts +4 -0
- package/src/api/cosmos/CosmosSignTransaction.ts +4 -0
- package/src/api/device/DeviceCancel.ts +5 -0
- package/src/api/device/DeviceChangePin.ts +31 -0
- package/src/api/device/DeviceFullyUploadResource.ts +4 -5
- package/src/api/device/DeviceLock.ts +5 -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 +21 -3
- package/src/api/device/DeviceUpdateBootloader.ts +152 -8
- package/src/api/device/DeviceVerify.ts +25 -0
- package/src/api/device/DeviceWipe.ts +28 -0
- package/src/api/device/PreInitialize.ts +4 -0
- package/src/api/dynex/DnxGetAddress.ts +0 -6
- package/src/api/dynex/DnxSignTransaction.ts +0 -6
- package/src/api/evm/EVMGetAddress.ts +6 -2
- package/src/api/evm/EVMGetPublicKey.ts +6 -2
- package/src/api/evm/EVMSignMessage.ts +6 -2
- package/src/api/evm/EVMSignMessageEIP712.ts +1 -11
- package/src/api/evm/EVMSignTransaction.ts +6 -2
- package/src/api/evm/EVMSignTypedData.ts +42 -50
- package/src/api/evm/EVMVerifyMessage.ts +6 -2
- package/src/api/evm/legacyV1/getAddress.ts +2 -2
- package/src/api/evm/legacyV1/getPublicKey.ts +2 -2
- package/src/api/evm/legacyV1/signMessage.ts +2 -2
- package/src/api/evm/legacyV1/signTypedData.ts +2 -2
- package/src/api/evm/legacyV1/signTypedHash.ts +2 -2
- package/src/api/evm/legacyV1/verifyMessage.ts +2 -2
- package/src/api/evm/protocol.ts +6 -0
- package/src/api/filecoin/FilecoinGetAddress.ts +4 -0
- package/src/api/filecoin/FilecoinSignTransaction.ts +4 -0
- package/src/api/firmware/FirmwareArtifactSource.ts +305 -0
- package/src/api/firmware/FirmwareHostBinding.ts +123 -0
- package/src/api/firmware/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 +266 -42
- package/src/api/index.ts +6 -30
- package/src/api/kaspa/KaspaGetAddress.ts +7 -0
- package/src/api/kaspa/KaspaSignTransaction.ts +369 -29
- package/src/api/kaspa/helpers/TransferSerialize.ts +17 -7
- package/src/api/lightning/LnurlAuth.ts +0 -4
- package/src/api/near/NearGetAddress.ts +4 -0
- package/src/api/near/NearSignTransaction.ts +4 -0
- package/src/api/nem/NEMGetAddress.ts +4 -0
- package/src/api/nem/NEMSignTransaction.ts +4 -0
- package/src/api/neo/NeoGetAddress.ts +0 -4
- package/src/api/neo/NeoSignTransaction.ts +0 -4
- package/src/api/nervos/NervosGetAddress.ts +0 -4
- package/src/api/nervos/NervosSignTransaction.ts +2 -6
- package/src/api/nexa/NexaGetAddress.ts +0 -4
- package/src/api/nexa/NexaSignTransaction.ts +3 -5
- package/src/api/nostr/NostrDecryptMessage.ts +4 -0
- package/src/api/nostr/NostrEncryptMessage.ts +4 -0
- package/src/api/nostr/NostrGetPublicKey.ts +4 -0
- package/src/api/nostr/NostrSignEvent.ts +4 -0
- package/src/api/nostr/NostrSignSchnorr.ts +4 -0
- package/src/api/polkadot/PolkadotGetAddress.ts +4 -0
- package/src/api/polkadot/PolkadotSignTransaction.ts +4 -0
- package/src/api/polkadot/networks.ts +3 -3
- package/src/api/protocol-v2/DeviceFactoryInfoGet.ts +5 -2
- package/src/api/protocol-v2/DeviceFactoryInfoSet.ts +6 -3
- package/src/api/protocol-v2/DeviceFirmwareUpdate.ts +13 -32
- package/src/api/protocol-v2/DeviceGetFirmwareUpdateStatus.ts +10 -6
- package/src/api/protocol-v2/DeviceGetOnboardingStatus.ts +6 -3
- package/src/api/protocol-v2/DeviceInfoGet.ts +11 -18
- package/src/api/protocol-v2/DeviceReboot.ts +12 -3
- package/src/api/protocol-v2/DeviceStatusGet.ts +6 -1
- package/src/api/protocol-v2/DeviceUploadNft.ts +249 -0
- package/src/api/protocol-v2/DeviceUploadWallpaper.ts +59 -21
- package/src/api/protocol-v2/FilesystemFormat.ts +5 -2
- package/src/api/protocol-v2/FilesystemPermissionFix.ts +5 -2
- package/src/api/protocol-v2/Ping.ts +37 -3
- package/src/api/protocol-v2/ProtocolInfoRequest.ts +8 -3
- package/src/api/protocol-v2/helpers.ts +1 -1
- package/src/api/scdo/ScdoGetAddress.ts +0 -4
- package/src/api/scdo/ScdoSignMessage.ts +0 -4
- package/src/api/scdo/ScdoSignTransaction.ts +0 -4
- package/src/api/solana/SolGetAddress.ts +4 -0
- package/src/api/solana/SolSignMessage.ts +5 -1
- package/src/api/solana/SolSignOffchainMessage.ts +5 -1
- package/src/api/solana/SolSignTransaction.ts +6 -2
- package/src/api/starcoin/StarcoinGetAddress.ts +4 -0
- package/src/api/starcoin/StarcoinGetPublicKey.ts +4 -0
- package/src/api/starcoin/StarcoinSignMessage.ts +4 -0
- package/src/api/starcoin/StarcoinSignTransaction.ts +4 -0
- package/src/api/starcoin/StarcoinVerifyMessage.ts +4 -0
- package/src/api/stellar/StellarGetAddress.ts +1 -10
- package/src/api/stellar/StellarSignTransaction.ts +1 -14
- package/src/api/sui/SuiGetAddress.ts +5 -1
- package/src/api/sui/SuiGetPublicKey.ts +5 -1
- package/src/api/sui/SuiSignMessage.ts +5 -1
- package/src/api/sui/SuiSignTransaction.ts +5 -1
- package/src/api/ton/TonGetAddress.ts +5 -1
- package/src/api/ton/TonSignData.ts +5 -1
- package/src/api/ton/TonSignMessage.ts +10 -4
- package/src/api/ton/TonSignProof.ts +5 -1
- package/src/api/tron/TronGetAddress.ts +4 -0
- package/src/api/tron/TronSignMessage.ts +19 -8
- package/src/api/tron/TronSignTransaction.ts +5 -1
- package/src/api/utils.ts +32 -3
- package/src/api/xrp/XrpGetAddress.ts +4 -0
- package/src/api/xrp/XrpSignTransaction.ts +5 -1
- package/src/constants/index.ts +1 -4
- package/src/core/RequestQueue.ts +0 -18
- package/src/core/deviceEventRegistration.ts +6 -0
- package/src/core/index.ts +512 -195
- package/src/core/uiPromiseRegistry.ts +63 -0
- package/src/data/messages/messages-protocol-v2.json +523 -449
- package/src/data/messages/messages.json +286 -1
- package/src/data-manager/DataManager.ts +162 -44
- package/src/data-manager/TransportManager.ts +10 -2
- package/src/data-manager/connectSettings.ts +11 -0
- package/src/device/Device.ts +1021 -267
- package/src/device/DeviceCommands.ts +204 -162
- package/src/device/DeviceConnector.ts +54 -21
- package/src/device/DeviceFeaturesState.ts +25 -0
- package/src/device/DevicePool.ts +108 -23
- 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 +215 -192
- package/src/deviceProfile/index.ts +0 -1
- package/src/deviceProfile/protocolV2DeviceIdentity.ts +35 -0
- package/src/events/call.ts +0 -6
- package/src/events/core.ts +0 -2
- package/src/events/device.ts +22 -1
- package/src/events/iframe.ts +0 -1
- package/src/events/logBlockEvent.ts +93 -2
- package/src/events/ui-promise.ts +4 -2
- package/src/events/ui-request.ts +61 -4
- package/src/events/ui-response.ts +12 -2
- package/src/index.ts +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 +118 -52
- package/src/protocols/protocol-v2/firmware.ts +3 -1
- package/src/protocols/protocol-v2/index.ts +9 -3
- package/src/protocols/protocol-v2/resources.ts +165 -0
- package/src/protocols/protocol-v2/settingsUnlockPolicy.ts +65 -0
- package/src/protocols/protocol-v2/uiInteraction.ts +250 -0
- package/src/protocols/protocol-v2/unlockPolicy.ts +1 -0
- package/src/protocols/protocol-v2/unlockPolicyRunner.ts +136 -0
- package/src/protocols/protocol-v2/walletSession.ts +417 -61
- package/src/topLevelInject.ts +11 -6
- package/src/types/api/checkAllFirmwareRelease.ts +72 -9
- package/src/types/api/checkBLEFirmwareRelease.ts +4 -13
- package/src/types/api/checkBootloaderRelease.ts +2 -6
- package/src/types/api/checkFirmwareRelease.ts +2 -13
- package/src/types/api/checkFirmwareTypeAvailable.ts +2 -2
- package/src/types/api/detectDeviceConnectProtocol.ts +6 -0
- package/src/types/api/deviceSettings.ts +26 -2
- package/src/types/api/deviceUnlock.ts +13 -2
- package/src/types/api/deviceUpdateBootloader.ts +7 -0
- package/src/types/api/export.ts +33 -1
- package/src/types/api/firmwareUpdate.ts +85 -11
- package/src/types/api/firmwareUpdateCapabilities.ts +9 -0
- package/src/types/api/firmwareUpdatePlan.ts +38 -0
- package/src/types/api/firmwareUpdatePreparedPlan.ts +53 -0
- package/src/types/api/getDeviceState.ts +19 -0
- package/src/types/api/getFeatures.ts +3 -0
- package/src/types/api/getOnekeyFeatures.ts +3 -0
- package/src/types/api/getPassphraseState.ts +7 -0
- package/src/types/api/index.ts +43 -73
- package/src/types/api/kaspaSignTransaction.ts +60 -4
- package/src/types/api/openWalletSession.ts +54 -0
- package/src/types/api/protocolV2.ts +23 -188
- package/src/types/api/sessionCache.ts +9 -4
- package/src/types/device.ts +211 -9
- package/src/types/params.ts +9 -2
- package/src/types/settings.ts +37 -25
- package/src/utils/assets.ts +4 -1
- package/src/utils/deviceFeaturesCompat.ts +196 -0
- package/src/utils/deviceFeaturesUtils.ts +42 -9
- 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 +40 -0
- package/src/utils/index.ts +26 -7
- package/src/utils/networkUtils.ts +274 -16
- package/src/utils/pro2Nft.ts +165 -0
- package/src/utils/pro2Wallpaper.ts +44 -25
- package/src/utils/tracing.ts +3 -1
- package/src/utils/uiProgressThrottle.ts +63 -0
- package/tsconfig.type-tests.json +12 -0
- package/__tests__/RequestQueue.test.ts +0 -34
- package/dist/api/GetDeviceInfo.d.ts +0 -9
- package/dist/api/GetDeviceInfo.d.ts.map +0 -1
- package/dist/api/firmware/progressThrottle.d.ts +0 -3
- package/dist/api/firmware/progressThrottle.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSessionGet.d.ts +0 -6
- package/dist/api/protocol-v2/DeviceSessionGet.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSettingsGet.d.ts +0 -6
- package/dist/api/protocol-v2/DeviceSettingsGet.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts +0 -16
- package/dist/api/protocol-v2/DeviceSettingsPageShow.d.ts.map +0 -1
- package/dist/api/protocol-v2/DeviceSettingsSet.d.ts +0 -12
- package/dist/api/protocol-v2/DeviceSettingsSet.d.ts.map +0 -1
- package/dist/deviceProfile/buildDeviceProfile.d.ts +0 -21
- package/dist/deviceProfile/buildDeviceProfile.d.ts.map +0 -1
- package/dist/protocols/protocol-v2/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 -9
- package/dist/protocols/protocol-v2/unlockRetry.d.ts.map +0 -1
- package/dist/types/api/getDeviceInfo.d.ts +0 -87
- package/dist/types/api/getDeviceInfo.d.ts.map +0 -1
- package/src/api/GetDeviceInfo.ts +0 -145
- package/src/api/firmware/progressThrottle.ts +0 -44
- package/src/api/protocol-v2/DeviceSessionGet.ts +0 -15
- package/src/api/protocol-v2/DeviceSettingsGet.ts +0 -16
- package/src/api/protocol-v2/DeviceSettingsPageShow.ts +0 -59
- package/src/api/protocol-v2/DeviceSettingsSet.ts +0 -39
- package/src/deviceProfile/buildDeviceProfile.ts +0 -354
- package/src/protocols/protocol-v2/lockedError.ts +0 -10
- package/src/protocols/protocol-v2/unlockRetry.ts +0 -36
- package/src/types/api/getDeviceInfo.ts +0 -101
package/src/core/index.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
import EventEmitter from 'events';
|
|
3
|
+
import {
|
|
4
|
+
DeviceSessionPinType,
|
|
5
|
+
TRANSPORT_EVENT,
|
|
6
|
+
isProtocolV2LinkDisabledError,
|
|
7
|
+
} from '@onekeyfe/hd-transport';
|
|
3
8
|
import {
|
|
4
9
|
ERRORS,
|
|
10
|
+
ERROR_CODES_REQUIRE_DISCONNECT,
|
|
5
11
|
ERROR_CODES_REQUIRE_RELEASE,
|
|
6
12
|
HardwareError,
|
|
7
13
|
HardwareErrorCode,
|
|
@@ -14,14 +20,7 @@ import {
|
|
|
14
20
|
createNewFirmwareUnReleaseHardwareError,
|
|
15
21
|
} from '@onekeyfe/hd-shared';
|
|
16
22
|
|
|
17
|
-
import {
|
|
18
|
-
LoggerNames,
|
|
19
|
-
enableLog,
|
|
20
|
-
getLogger,
|
|
21
|
-
isMethodVersionRangeUnsupported,
|
|
22
|
-
setLoggerPostMessage,
|
|
23
|
-
wait,
|
|
24
|
-
} from '../utils';
|
|
23
|
+
import { LoggerNames, enableLog, getLogger, setLoggerPostMessage, wait } from '../utils';
|
|
25
24
|
import {
|
|
26
25
|
findDefectiveBatchDevice,
|
|
27
26
|
getDefectiveDeviceInfo,
|
|
@@ -32,10 +31,12 @@ import {
|
|
|
32
31
|
createRequestContext,
|
|
33
32
|
createSdkTracingContext,
|
|
34
33
|
formatRequestContext,
|
|
34
|
+
generateInstanceId,
|
|
35
35
|
getActiveRequestsByDeviceInstance,
|
|
36
36
|
updateRequestContext,
|
|
37
37
|
} from '../utils/tracing';
|
|
38
38
|
import { Device } from '../device/Device';
|
|
39
|
+
import { checkLiveDeviceId } from '../device/deviceIdentity';
|
|
39
40
|
import { DeviceList } from '../device/DeviceList';
|
|
40
41
|
import { DevicePool } from '../device/DevicePool';
|
|
41
42
|
import { PollingStateManager } from './PollingStateManager';
|
|
@@ -51,24 +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';
|
|
66
|
+
import {
|
|
67
|
+
ProtocolV2UiInteractionCoordinator,
|
|
68
|
+
isProtocolV2UiEnabled,
|
|
69
|
+
} from '../protocols/protocol-v2/uiInteraction';
|
|
70
|
+
import { createUiProgressMessageFilter } from '../utils/uiProgressThrottle';
|
|
61
71
|
|
|
62
72
|
import type { ConnectSettings, Features, KnownDevice } from '../types';
|
|
63
73
|
import type { CoreMessage, IFrameCallMessage, UiPromise, UiPromiseResponse } from '../events';
|
|
64
74
|
import type { DeviceEvents, InitOptions, RunOptions } from '../device/Device';
|
|
65
75
|
import type { SdkTracingContext } from '../utils/tracing';
|
|
66
76
|
import type { Deferred } from '@onekeyfe/hd-shared';
|
|
67
|
-
import type {
|
|
77
|
+
import type {
|
|
78
|
+
LowlevelTransportSharedPlugin,
|
|
79
|
+
OneKeyDeviceInfo,
|
|
80
|
+
TransportDeviceDisconnectEvent,
|
|
81
|
+
} from '@onekeyfe/hd-transport';
|
|
68
82
|
import type { BaseMethod } from '../api/BaseMethod';
|
|
69
83
|
|
|
70
84
|
const Log = getLogger(LoggerNames.Core);
|
|
71
85
|
const PRE_INITIALIZE_TTL_MS = 60 * 1000;
|
|
86
|
+
const PRE_PENDING_CALL_TIMEOUT_MS = 15 * 1000;
|
|
72
87
|
|
|
73
88
|
// Dedup/coalesce state for "pre-warm signal" methods (isPreWarmSignal),
|
|
74
89
|
// keyed by getPreWarmKey(): coalesce in-flight, skip if warmed within TTL.
|
|
@@ -93,14 +108,15 @@ function hasDeriveCardano(method: BaseMethod): boolean {
|
|
|
93
108
|
|
|
94
109
|
const parseInitOptions = (method?: BaseMethod): InitOptions => ({
|
|
95
110
|
initSession: method?.payload.initSession,
|
|
96
|
-
passphraseState: method?.payload.passphraseState,
|
|
111
|
+
passphraseState: method?.payload.useEmptyPassphrase ? undefined : method?.payload.passphraseState,
|
|
97
112
|
deviceId: method?.payload.deviceId,
|
|
98
113
|
deriveCardano: method && hasDeriveCardano(method),
|
|
99
114
|
connectProtocol: method?.payload.connectProtocol,
|
|
115
|
+
forceProtocolDetection: method?.payload.forceProtocolDetection,
|
|
100
116
|
protocolV2DeviceInfoTimeoutMs: method?.payload.protocolV2DeviceInfoTimeoutMs,
|
|
101
117
|
});
|
|
102
118
|
|
|
103
|
-
let _core: Core;
|
|
119
|
+
let _core: Core | undefined;
|
|
104
120
|
let _deviceList: DeviceList | undefined;
|
|
105
121
|
let _connector: DeviceConnector | undefined;
|
|
106
122
|
let _uiPromises: UiPromise<UiPromiseResponse['type']>[] = []; // Waiting for ui response
|
|
@@ -125,6 +141,9 @@ const toError = (error: unknown): Error | undefined => {
|
|
|
125
141
|
}
|
|
126
142
|
};
|
|
127
143
|
|
|
144
|
+
const isExpectedCompatibilityError = (error: unknown) =>
|
|
145
|
+
error instanceof HardwareError && error.errorCode === HardwareErrorCode.DeviceNotSupportMethod;
|
|
146
|
+
|
|
128
147
|
const updateMethodRequestContext = (method: BaseMethod, updates: any) => {
|
|
129
148
|
if (method.requestContext) {
|
|
130
149
|
updateRequestContext(method.requestContext.responseID, updates);
|
|
@@ -144,11 +163,16 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
|
|
|
144
163
|
}
|
|
145
164
|
|
|
146
165
|
// find api method
|
|
147
|
-
let method
|
|
166
|
+
let method!: BaseMethod;
|
|
148
167
|
try {
|
|
149
168
|
method = findMethod(message as IFrameCallMessage);
|
|
150
169
|
method.connector = _connector;
|
|
151
|
-
|
|
170
|
+
const shouldPostMessage = createUiProgressMessageFilter();
|
|
171
|
+
method.postMessage = event => {
|
|
172
|
+
if (shouldPostMessage(event)) {
|
|
173
|
+
postMessage(event);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
152
176
|
method.setContext?.(context);
|
|
153
177
|
|
|
154
178
|
method.requestContext = createRequestContext(method.responseID, method.name, {
|
|
@@ -160,11 +184,13 @@ export const callAPI = async (context: CoreContext, message: CoreMessage) => {
|
|
|
160
184
|
|
|
161
185
|
method.init();
|
|
162
186
|
} catch (error) {
|
|
163
|
-
|
|
187
|
+
if (method) {
|
|
188
|
+
completeMethodRequestContext(method, error);
|
|
189
|
+
method.dispose();
|
|
190
|
+
}
|
|
191
|
+
return createResponseMessage(method?.responseID ?? message.id, false, { error });
|
|
164
192
|
}
|
|
165
193
|
|
|
166
|
-
DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
167
|
-
|
|
168
194
|
if (!method.useDevice) {
|
|
169
195
|
updateMethodRequestContext(method, { status: 'running' });
|
|
170
196
|
try {
|
|
@@ -271,26 +297,35 @@ const handlePreWarmSignal = async (
|
|
|
271
297
|
}
|
|
272
298
|
};
|
|
273
299
|
|
|
274
|
-
const waitWithTimeout = async (promise: Promise<any>, timeout: number) => {
|
|
275
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
276
|
-
setTimeout(() => reject(new Error('Request timeout')), timeout);
|
|
277
|
-
});
|
|
278
|
-
return Promise.race([promise, timeoutPromise]);
|
|
279
|
-
};
|
|
280
|
-
|
|
281
300
|
const waitForPendingPromise = async (
|
|
282
|
-
|
|
283
|
-
|
|
301
|
+
connectId: string,
|
|
302
|
+
getPrePendingCallPromise: (connectId: string) => Promise<void> | undefined,
|
|
303
|
+
removePrePendingCallPromise?: (connectId: string, promise: Promise<void>) => void
|
|
284
304
|
) => {
|
|
285
|
-
const pendingPromise = getPrePendingCallPromise();
|
|
305
|
+
const pendingPromise = getPrePendingCallPromise(connectId);
|
|
286
306
|
if (pendingPromise) {
|
|
287
307
|
Log.debug('pre pending call promise before call method, wait for it');
|
|
308
|
+
let timer: ReturnType<typeof setTimeout> | undefined;
|
|
309
|
+
let timedOut = false;
|
|
288
310
|
try {
|
|
289
|
-
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
|
+
]);
|
|
290
320
|
} catch (error) {
|
|
291
|
-
//
|
|
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 });
|
|
292
328
|
}
|
|
293
|
-
removePrePendingCallPromise?.(pendingPromise);
|
|
294
329
|
Log.debug('pre pending call promise before call method done');
|
|
295
330
|
}
|
|
296
331
|
};
|
|
@@ -302,7 +337,7 @@ const onCallDevice = async (
|
|
|
302
337
|
): Promise<any> => {
|
|
303
338
|
let messageResponse: any;
|
|
304
339
|
|
|
305
|
-
const { requestQueue, getPrePendingCallPromise,
|
|
340
|
+
const { requestQueue, getPrePendingCallPromise, removePrePendingCallPromise } = context;
|
|
306
341
|
|
|
307
342
|
updateMethodRequestContext(method, { status: 'running' });
|
|
308
343
|
|
|
@@ -330,7 +365,11 @@ const onCallDevice = async (
|
|
|
330
365
|
await context.waitForCallbackTasks(method.connectId);
|
|
331
366
|
}
|
|
332
367
|
|
|
333
|
-
await waitForPendingPromise(
|
|
368
|
+
await waitForPendingPromise(
|
|
369
|
+
method.connectId ?? '',
|
|
370
|
+
getPrePendingCallPromise,
|
|
371
|
+
removePrePendingCallPromise
|
|
372
|
+
);
|
|
334
373
|
|
|
335
374
|
const task = requestQueue.createTask(method);
|
|
336
375
|
|
|
@@ -359,7 +398,7 @@ const onCallDevice = async (
|
|
|
359
398
|
);
|
|
360
399
|
} catch (e) {
|
|
361
400
|
preWarmCallbackTask?.resolve();
|
|
362
|
-
|
|
401
|
+
Log.debug('ensureConnected error: ', e);
|
|
363
402
|
|
|
364
403
|
completeMethodRequestContext(method, e);
|
|
365
404
|
|
|
@@ -398,17 +437,26 @@ const onCallDevice = async (
|
|
|
398
437
|
|
|
399
438
|
registerHardwareUiEventListeners(device, {
|
|
400
439
|
pin: onDevicePinHandler,
|
|
440
|
+
pinOnDevice: onEnterPinOnDeviceHandler,
|
|
441
|
+
pinOnDeviceComplete: onPinOnDeviceCompleteHandler,
|
|
401
442
|
button: onDeviceButtonHandler,
|
|
402
443
|
passphrase: message.payload.useEmptyPassphrase
|
|
403
444
|
? onEmptyPassphraseHandler
|
|
404
445
|
: onDevicePassphraseHandler,
|
|
405
446
|
passphraseOnDevice: onEnterPassphraseOnDeviceHandler,
|
|
447
|
+
attachPinOnDevice: onEnterAttachPinOnDeviceHandler,
|
|
406
448
|
});
|
|
407
449
|
device.on(DEVICE.FEATURES, onDeviceFeaturesHandler);
|
|
450
|
+
device.on(DEVICE.STATE, onDeviceStateHandler);
|
|
408
451
|
device.on(
|
|
409
452
|
DEVICE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE,
|
|
410
453
|
onSelectDeviceInBootloaderForWebDeviceHandler
|
|
411
454
|
);
|
|
455
|
+
|
|
456
|
+
const protocolV2UiCoordinator = new ProtocolV2UiInteractionCoordinator(device, postMessage);
|
|
457
|
+
let protocolV2Operation = false;
|
|
458
|
+
let protocolV2CloseEmitted = false;
|
|
459
|
+
device.beginProtocolV2UiInteraction();
|
|
412
460
|
device.on(
|
|
413
461
|
DEVICE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE,
|
|
414
462
|
onSelectDeviceForSwitchFirmwareWebDeviceHandler
|
|
@@ -420,14 +468,17 @@ const onCallDevice = async (
|
|
|
420
468
|
await context.waitForCallbackTasks(method.connectId, preWarmCallbackTask);
|
|
421
469
|
}
|
|
422
470
|
|
|
423
|
-
await waitForPendingPromise(
|
|
471
|
+
await waitForPendingPromise(
|
|
472
|
+
method.connectId ?? '',
|
|
473
|
+
getPrePendingCallPromise,
|
|
474
|
+
removePrePendingCallPromise
|
|
475
|
+
);
|
|
424
476
|
|
|
425
477
|
const inner = async (): Promise<void> => {
|
|
426
|
-
// Protocol
|
|
427
|
-
//
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
}
|
|
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();
|
|
431
482
|
|
|
432
483
|
// check firmware version
|
|
433
484
|
const versionRange = device.getCurrentMethodVersionRange(
|
|
@@ -438,8 +489,8 @@ const onCallDevice = async (
|
|
|
438
489
|
const deviceFirmwareType = device.getCurrentFirmwareType();
|
|
439
490
|
let newVersionStatus: ReturnType<typeof DataManager.getFirmwareStatus> | undefined;
|
|
440
491
|
|
|
441
|
-
//
|
|
442
|
-
// Pro2
|
|
492
|
+
// Defective-batch and forced-update gates depend on V1 features/remote config.
|
|
493
|
+
// Pro2 joins after DataManager supports its profile firmwareStatus.
|
|
443
494
|
if (device.features && !device.isProtocolV2()) {
|
|
444
495
|
await DataManager.checkAndReloadData();
|
|
445
496
|
|
|
@@ -487,10 +538,6 @@ const onCallDevice = async (
|
|
|
487
538
|
}
|
|
488
539
|
}
|
|
489
540
|
|
|
490
|
-
if (isMethodVersionRangeUnsupported(versionRange)) {
|
|
491
|
-
throw createDeviceNotSupportMethodError(method.name, deviceFirmwareType);
|
|
492
|
-
}
|
|
493
|
-
|
|
494
541
|
if (versionRange) {
|
|
495
542
|
if (semver.valid(versionRange.min) && semver.lt(currentFirmwareVersion, versionRange.min)) {
|
|
496
543
|
if (newVersionStatus === 'none' || newVersionStatus === 'valid') {
|
|
@@ -541,89 +588,102 @@ const onCallDevice = async (
|
|
|
541
588
|
);
|
|
542
589
|
}
|
|
543
590
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
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
|
+
}
|
|
555
610
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
611
|
+
/**
|
|
612
|
+
* check firmware release info
|
|
613
|
+
*/
|
|
614
|
+
method.checkFirmwareRelease();
|
|
560
615
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
616
|
+
/**
|
|
617
|
+
* check additional supported feature
|
|
618
|
+
*/
|
|
619
|
+
method.checkDeviceSupportFeature();
|
|
565
620
|
|
|
566
|
-
|
|
567
|
-
|
|
621
|
+
// reconfigure messages
|
|
622
|
+
if (_deviceList && device.features && !device.isProtocolV2()) {
|
|
623
|
+
await TransportManager.reconfigure(device.features);
|
|
624
|
+
}
|
|
568
625
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
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
|
+
);
|
|
579
640
|
}
|
|
580
|
-
)
|
|
581
|
-
);
|
|
582
|
-
}
|
|
583
641
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
// Double check, handles the special case of Touch/Pro
|
|
592
|
-
checkPassphraseEnableState(method, device.features);
|
|
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
|
+
);
|
|
593
649
|
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
return Promise.reject(
|
|
597
|
-
ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError)
|
|
598
|
-
);
|
|
599
|
-
}
|
|
650
|
+
// Double check, handles the special case of Touch/Pro
|
|
651
|
+
checkPassphraseEnableState(method, device.features);
|
|
600
652
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
653
|
+
if (!passphraseStateSafety) {
|
|
654
|
+
DevicePool.clearDeviceCache(method.payload.connectId);
|
|
655
|
+
throw ERRORS.TypedError(HardwareErrorCode.DeviceCheckPassphraseStateError);
|
|
656
|
+
}
|
|
604
657
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
? e
|
|
612
|
-
: ERRORS.TypedError(HardwareErrorCode.RuntimeError, 'open safety check failed.');
|
|
613
|
-
// messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
614
|
-
// requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
615
|
-
// return;
|
|
616
|
-
throw error;
|
|
617
|
-
}
|
|
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
|
+
}
|
|
618
664
|
|
|
619
|
-
|
|
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
|
+
}
|
|
620
673
|
|
|
621
|
-
|
|
622
|
-
|
|
674
|
+
method.device?.commands?.checkDisposed();
|
|
675
|
+
},
|
|
676
|
+
});
|
|
623
677
|
messageResponse = createResponseMessage(method.responseID, true, response);
|
|
624
678
|
requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
625
679
|
completeMethodRequestContext(method);
|
|
626
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
|
+
}
|
|
627
687
|
Log.debug(`Call API - Inner Method Run Error`, error);
|
|
628
688
|
messageResponse = createResponseMessage(method.responseID, false, { error });
|
|
629
689
|
requestQueue.resolveRequest(method.responseID, messageResponse);
|
|
@@ -636,6 +696,13 @@ const onCallDevice = async (
|
|
|
636
696
|
) {
|
|
637
697
|
throw error;
|
|
638
698
|
}
|
|
699
|
+
} finally {
|
|
700
|
+
if (isProtocolV2UiEnabled(method)) {
|
|
701
|
+
protocolV2CloseEmitted = protocolV2UiCoordinator.close({
|
|
702
|
+
ensureOperationClose: protocolV2Operation,
|
|
703
|
+
protocolV2Operation,
|
|
704
|
+
});
|
|
705
|
+
}
|
|
639
706
|
}
|
|
640
707
|
};
|
|
641
708
|
Log.debug('Call API - Device Run: ', device.mainId);
|
|
@@ -651,7 +718,9 @@ const onCallDevice = async (
|
|
|
651
718
|
try {
|
|
652
719
|
return await task.callPromise.promise;
|
|
653
720
|
} catch (e) {
|
|
654
|
-
|
|
721
|
+
if (!isExpectedCompatibilityError(e)) {
|
|
722
|
+
Log.debug('Device Run Error: ', e);
|
|
723
|
+
}
|
|
655
724
|
completeMethodRequestContext(method, e);
|
|
656
725
|
return createResponseMessage(method.responseID, false, { error: e });
|
|
657
726
|
}
|
|
@@ -689,7 +758,17 @@ const onCallDevice = async (
|
|
|
689
758
|
|
|
690
759
|
requestQueue.releaseTask(method.responseID);
|
|
691
760
|
|
|
692
|
-
|
|
761
|
+
if (isProtocolV2UiEnabled(method)) {
|
|
762
|
+
if (!protocolV2CloseEmitted && protocolV2Operation) {
|
|
763
|
+
protocolV2CloseEmitted = protocolV2UiCoordinator.close({
|
|
764
|
+
ensureOperationClose: true,
|
|
765
|
+
protocolV2Operation: true,
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
if (!protocolV2CloseEmitted) {
|
|
769
|
+
closePopup();
|
|
770
|
+
}
|
|
771
|
+
}
|
|
693
772
|
|
|
694
773
|
cleanup();
|
|
695
774
|
|
|
@@ -835,24 +914,68 @@ function canSkipInitialize(method: BaseMethod, device: Device): boolean {
|
|
|
835
914
|
return true;
|
|
836
915
|
}
|
|
837
916
|
|
|
838
|
-
function isRetryableBleProtocolV2ProbeError(method: BaseMethod, error: unknown) {
|
|
839
|
-
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 ?? '');
|
|
840
921
|
return (
|
|
841
922
|
method.payload.connectProtocol === 'V2' &&
|
|
923
|
+
typedError?.errorCode === HardwareErrorCode.RuntimeError &&
|
|
842
924
|
message.includes('Device protocol mismatch') &&
|
|
843
925
|
message.includes('expected V2') &&
|
|
844
926
|
message.includes('did not respond to expected protocol')
|
|
845
927
|
);
|
|
846
928
|
}
|
|
847
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
|
+
|
|
848
953
|
/**
|
|
849
954
|
* If the Bluetooth connection times out, retry up to 6 times
|
|
850
955
|
* @param retryCount - Current retry count (default 0)
|
|
851
956
|
*/
|
|
852
957
|
async function connectDeviceForBle(method: BaseMethod, device: Device, retryCount = 0) {
|
|
853
958
|
try {
|
|
854
|
-
|
|
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
|
+
}
|
|
855
975
|
if (method.payload?.onlyConnectBleDevice) {
|
|
976
|
+
if (shouldAcquire) {
|
|
977
|
+
DevicePool.emitter.emit(DEVICE.CONNECT, device);
|
|
978
|
+
}
|
|
856
979
|
return;
|
|
857
980
|
}
|
|
858
981
|
// Skip initialize if conditions are met
|
|
@@ -863,15 +986,29 @@ async function connectDeviceForBle(method: BaseMethod, device: Device, retryCoun
|
|
|
863
986
|
passphraseState: initOptions.passphraseState,
|
|
864
987
|
});
|
|
865
988
|
}
|
|
989
|
+
if (shouldAcquire) {
|
|
990
|
+
DevicePool.emitter.emit(DEVICE.CONNECT, device);
|
|
991
|
+
}
|
|
866
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.
|
|
867
998
|
if (
|
|
868
|
-
(err.errorCode
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
retryCount < 6
|
|
999
|
+
(ERROR_CODES_REQUIRE_DISCONNECT.includes(err.errorCode) || requiresColdReconnect) &&
|
|
1000
|
+
device.mainId &&
|
|
1001
|
+
device.deviceConnector
|
|
872
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) {
|
|
873
1010
|
const nextRetry = retryCount + 1;
|
|
874
|
-
Log.debug(`Bluetooth
|
|
1011
|
+
Log.debug(`Bluetooth connection will retry, retry count: ${nextRetry}`);
|
|
875
1012
|
await wait(3000);
|
|
876
1013
|
await connectDeviceForBle(method, device, nextRetry);
|
|
877
1014
|
} else {
|
|
@@ -978,6 +1115,11 @@ const ensureConnected = async (
|
|
|
978
1115
|
if (abort()) {
|
|
979
1116
|
return;
|
|
980
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
|
+
}
|
|
981
1123
|
await connectDeviceForBle(method, device);
|
|
982
1124
|
}
|
|
983
1125
|
resolve(device);
|
|
@@ -985,6 +1127,19 @@ const ensureConnected = async (
|
|
|
985
1127
|
}
|
|
986
1128
|
} catch (error) {
|
|
987
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
|
+
}
|
|
988
1143
|
if ([HardwareErrorCode.BleCharacteristicNotifyChangeFailure].includes(error.errorCode)) {
|
|
989
1144
|
postMessage(createUiMessage(UI_REQUEST.BLUETOOTH_CHARACTERISTIC_NOTIFY_CHANGE_FAILURE));
|
|
990
1145
|
}
|
|
@@ -997,6 +1152,7 @@ const ensureConnected = async (
|
|
|
997
1152
|
HardwareErrorCode.BleLocationServicesDisabled,
|
|
998
1153
|
HardwareErrorCode.BleDeviceNotBonded,
|
|
999
1154
|
HardwareErrorCode.BleDeviceBondError,
|
|
1155
|
+
HardwareErrorCode.BlePeerRemovedPairingInformation,
|
|
1000
1156
|
HardwareErrorCode.BleDeviceBondedCanceled,
|
|
1001
1157
|
HardwareErrorCode.BleCharacteristicNotifyError,
|
|
1002
1158
|
HardwareErrorCode.BleTimeoutError,
|
|
@@ -1007,6 +1163,8 @@ const ensureConnected = async (
|
|
|
1007
1163
|
HardwareErrorCode.DeviceDetectInBootloaderMode,
|
|
1008
1164
|
HardwareErrorCode.BleCharacteristicNotifyChangeFailure,
|
|
1009
1165
|
HardwareErrorCode.BridgeNeedsPermission,
|
|
1166
|
+
HardwareErrorCode.DeviceInterruptedFromUser,
|
|
1167
|
+
HardwareErrorCode.CallQueueActionCancelled,
|
|
1010
1168
|
].includes(error.errorCode)
|
|
1011
1169
|
) {
|
|
1012
1170
|
reject(error);
|
|
@@ -1064,22 +1222,31 @@ export const cancel = (context: CoreContext, connectId?: string) => {
|
|
|
1064
1222
|
)}`
|
|
1065
1223
|
);
|
|
1066
1224
|
const canceledDevices: Device[] = [];
|
|
1225
|
+
const interruptDevice = (device: Device | undefined, deviceConnectId: string) => {
|
|
1226
|
+
if (!device || canceledDevices.includes(device)) {
|
|
1227
|
+
return;
|
|
1228
|
+
}
|
|
1229
|
+
setPrePendingCallPromise(deviceConnectId, device.interruptionFromUser());
|
|
1230
|
+
canceledDevices.push(device);
|
|
1231
|
+
};
|
|
1067
1232
|
for (const requestId of requestIds) {
|
|
1068
1233
|
const task = requestQueue.getTask(requestId);
|
|
1069
1234
|
Log.debug('Cancel Api connect task: ', task);
|
|
1070
|
-
if (task
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1235
|
+
if (task) {
|
|
1236
|
+
// During ensureConnected the method has a connectId but device is
|
|
1237
|
+
// assigned only after the poll succeeds. Interrupt the cached BLE
|
|
1238
|
+
// Device so an in-flight acquire/initialize cannot finish.
|
|
1239
|
+
interruptDevice(task.method?.device, task.method.connectId ?? connectId);
|
|
1240
|
+
interruptDevice(deviceCacheMap.get(connectId), connectId);
|
|
1076
1241
|
requestQueue.rejectRequest(
|
|
1077
1242
|
requestId,
|
|
1078
1243
|
ERRORS.TypedError(HardwareErrorCode.CallQueueActionCancelled)
|
|
1079
1244
|
);
|
|
1080
1245
|
}
|
|
1081
1246
|
}
|
|
1247
|
+
interruptDevice(deviceCacheMap.get(connectId), connectId);
|
|
1082
1248
|
requestQueue.abortRequestsByConnectId(connectId);
|
|
1249
|
+
pollingManager.stop(connectId);
|
|
1083
1250
|
} catch (e) {
|
|
1084
1251
|
Log.error('Cancel API Error: ', e);
|
|
1085
1252
|
}
|
|
@@ -1088,22 +1255,31 @@ export const cancel = (context: CoreContext, connectId?: string) => {
|
|
|
1088
1255
|
if (DataManager.isBleConnect(env)) {
|
|
1089
1256
|
Log.debug('Cancel Api all _deviceList: ');
|
|
1090
1257
|
const canceledDevices: Device[] = [];
|
|
1258
|
+
const interruptDevice = (device?: Device) => {
|
|
1259
|
+
if (!device || canceledDevices.includes(device)) {
|
|
1260
|
+
return;
|
|
1261
|
+
}
|
|
1262
|
+
device.interruptionFromUser().catch(() => undefined);
|
|
1263
|
+
canceledDevices.push(device);
|
|
1264
|
+
};
|
|
1091
1265
|
for (const requestId of requestQueue.getRequestTasksId()) {
|
|
1092
1266
|
const task = requestQueue.getTask(requestId);
|
|
1093
1267
|
Log.debug('Cancel Api connect task: ', task);
|
|
1094
|
-
if (task
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1268
|
+
if (task) {
|
|
1269
|
+
interruptDevice(task.method?.device);
|
|
1270
|
+
if (task.method.connectId) {
|
|
1271
|
+
interruptDevice(deviceCacheMap.get(task.method.connectId));
|
|
1272
|
+
pollingManager.stop(task.method.connectId);
|
|
1099
1273
|
}
|
|
1100
|
-
|
|
1101
1274
|
requestQueue.rejectRequest(
|
|
1102
1275
|
requestId,
|
|
1103
1276
|
ERRORS.TypedError(HardwareErrorCode.CallQueueActionCancelled)
|
|
1104
1277
|
);
|
|
1105
1278
|
}
|
|
1106
1279
|
}
|
|
1280
|
+
deviceCacheMap.forEach(interruptDevice);
|
|
1281
|
+
requestQueue.abortAllRequests();
|
|
1282
|
+
pollingManager.stopAll();
|
|
1107
1283
|
} else {
|
|
1108
1284
|
_deviceList?.allDevices().forEach(device => {
|
|
1109
1285
|
Log.debug('device: ', device, ' device.hasDeviceAcquire: ', device.hasDeviceAcquire());
|
|
@@ -1157,14 +1333,16 @@ const shouldCheckPassphraseState = (method: BaseMethod, device: Device) => {
|
|
|
1157
1333
|
};
|
|
1158
1334
|
|
|
1159
1335
|
const cleanup = () => {
|
|
1336
|
+
const pendingUiPromises = _uiPromises;
|
|
1160
1337
|
_uiPromises = [];
|
|
1161
|
-
|
|
1338
|
+
rejectUiPromises(
|
|
1339
|
+
pendingUiPromises,
|
|
1340
|
+
ERRORS.TypedError(HardwareErrorCode.ActionCancelled, 'UI request was cancelled')
|
|
1341
|
+
);
|
|
1162
1342
|
};
|
|
1163
1343
|
|
|
1164
1344
|
const removeDeviceListener = (device: Device) => {
|
|
1165
1345
|
device.removeAllListeners();
|
|
1166
|
-
DevicePool.emitter.removeAllListeners(DEVICE.CONNECT);
|
|
1167
|
-
// DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1168
1346
|
};
|
|
1169
1347
|
|
|
1170
1348
|
/**
|
|
@@ -1175,19 +1353,33 @@ const closePopup = () => {
|
|
|
1175
1353
|
};
|
|
1176
1354
|
|
|
1177
1355
|
const onDeviceConnectHandler = (device: Device) => {
|
|
1178
|
-
const
|
|
1179
|
-
|
|
1180
|
-
postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject
|
|
1356
|
+
const deviceObject = device.toMessageObject();
|
|
1357
|
+
if (!deviceObject) return;
|
|
1358
|
+
postMessage(createDeviceMessage(DEVICE.CONNECT, { device: deviceObject }));
|
|
1181
1359
|
};
|
|
1182
1360
|
|
|
1183
1361
|
const onDeviceDisconnectHandler = (device: Device) => {
|
|
1184
1362
|
device.clearPreInitialized();
|
|
1185
|
-
const
|
|
1186
|
-
|
|
1187
|
-
postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject
|
|
1363
|
+
const deviceObject = device.toMessageObject();
|
|
1364
|
+
if (!deviceObject) return;
|
|
1365
|
+
postMessage(createDeviceMessage(DEVICE.DISCONNECT, { device: deviceObject }));
|
|
1366
|
+
};
|
|
1367
|
+
|
|
1368
|
+
const onTransportDeviceDisconnectHandler = (event: TransportDeviceDisconnectEvent) => {
|
|
1369
|
+
const device =
|
|
1370
|
+
deviceCacheMap.get(event.connectId) ??
|
|
1371
|
+
DevicePool.devicesCache[event.connectId] ??
|
|
1372
|
+
DevicePool.getDeviceByPath(event.connectId);
|
|
1373
|
+
if (!device) {
|
|
1374
|
+
Log.debug('Ignoring transport disconnect for an unknown device:', event.connectId);
|
|
1375
|
+
return;
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
device.markTransportDisconnected();
|
|
1379
|
+
DevicePool.emitter.emit(DEVICE.DISCONNECT, device);
|
|
1188
1380
|
};
|
|
1189
1381
|
|
|
1190
|
-
const onDevicePinHandler =
|
|
1382
|
+
const onDevicePinHandler = (...[device, type, callback]: DeviceEvents['pin']) => {
|
|
1191
1383
|
Log.log('request Input PIN');
|
|
1192
1384
|
// create ui promise
|
|
1193
1385
|
const uiPromise = createUiPromise(UI_RESPONSE.RECEIVE_PIN, device);
|
|
@@ -1196,12 +1388,14 @@ const onDevicePinHandler = async (...[device, type, callback]: DeviceEvents['pin
|
|
|
1196
1388
|
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1197
1389
|
device: device.toMessageObject() as unknown as KnownDevice,
|
|
1198
1390
|
type,
|
|
1391
|
+
responseCorrelation: uiPromise.responseCorrelation,
|
|
1199
1392
|
})
|
|
1200
1393
|
);
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1394
|
+
consumeUiPromise(
|
|
1395
|
+
uiPromise.promise,
|
|
1396
|
+
uiResp => callback(null, uiResp.payload),
|
|
1397
|
+
error => callback(error, '')
|
|
1398
|
+
);
|
|
1205
1399
|
};
|
|
1206
1400
|
|
|
1207
1401
|
export const onDeviceButtonHandler = (...[device, request]: [...DeviceEvents['button']]) => {
|
|
@@ -1225,7 +1419,11 @@ const onDeviceFeaturesHandler = (...[_, features]: [...DeviceEvents['features']]
|
|
|
1225
1419
|
postMessage(createDeviceMessage(DEVICE.FEATURES, { ...features }));
|
|
1226
1420
|
};
|
|
1227
1421
|
|
|
1228
|
-
const
|
|
1422
|
+
const onDeviceStateHandler = (...[_, stateEvent]: [...DeviceEvents['state']]) => {
|
|
1423
|
+
postMessage(createDeviceMessage(DEVICE.STATE, stateEvent));
|
|
1424
|
+
};
|
|
1425
|
+
|
|
1426
|
+
const onDevicePassphraseHandler = (
|
|
1229
1427
|
...[device, requestPayload, callback]: DeviceEvents['passphrase']
|
|
1230
1428
|
) => {
|
|
1231
1429
|
Log.debug('onDevicePassphraseHandler');
|
|
@@ -1235,18 +1433,27 @@ const onDevicePassphraseHandler = async (
|
|
|
1235
1433
|
device: device.toMessageObject() as KnownDevice,
|
|
1236
1434
|
passphraseState: device.passphraseState,
|
|
1237
1435
|
existsAttachPinUser: requestPayload.existsAttachPinUser,
|
|
1436
|
+
deviceOnly: requestPayload.deviceOnly,
|
|
1437
|
+
source: requestPayload.source,
|
|
1438
|
+
reason: requestPayload.reason,
|
|
1439
|
+
expectedPassphraseState: requestPayload.expectedPassphraseState,
|
|
1440
|
+
...(requestPayload.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1441
|
+
responseCorrelation: uiPromise.responseCorrelation,
|
|
1238
1442
|
})
|
|
1239
1443
|
);
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1444
|
+
consumeUiPromise(
|
|
1445
|
+
uiPromise.promise,
|
|
1446
|
+
uiResp => {
|
|
1447
|
+
const { value, passphraseOnDevice, save, attachPinOnDevice } = uiResp.payload;
|
|
1448
|
+
callback({
|
|
1449
|
+
passphrase: value.normalize('NFKD'),
|
|
1450
|
+
passphraseOnDevice,
|
|
1451
|
+
attachPinOnDevice,
|
|
1452
|
+
cache: save,
|
|
1453
|
+
});
|
|
1454
|
+
},
|
|
1455
|
+
error => callback({}, error)
|
|
1456
|
+
);
|
|
1250
1457
|
};
|
|
1251
1458
|
|
|
1252
1459
|
const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']) => {
|
|
@@ -1256,17 +1463,62 @@ const onEmptyPassphraseHandler = (...[_, , callback]: DeviceEvents['passphrase']
|
|
|
1256
1463
|
};
|
|
1257
1464
|
|
|
1258
1465
|
const onEnterPassphraseOnDeviceHandler = (
|
|
1259
|
-
...[device]: [...DeviceEvents['passphrase_on_device']]
|
|
1466
|
+
...[device, requestPayload]: [...DeviceEvents['passphrase_on_device']]
|
|
1260
1467
|
) => {
|
|
1261
1468
|
postMessage(
|
|
1262
1469
|
createUiMessage(UI_REQUEST.REQUEST_PASSPHRASE_ON_DEVICE, {
|
|
1263
1470
|
device: device.toMessageObject() as KnownDevice,
|
|
1264
1471
|
passphraseState: device.passphraseState,
|
|
1472
|
+
source: requestPayload?.source,
|
|
1473
|
+
reason: requestPayload?.reason,
|
|
1474
|
+
...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1475
|
+
})
|
|
1476
|
+
);
|
|
1477
|
+
};
|
|
1478
|
+
|
|
1479
|
+
const onEnterAttachPinOnDeviceHandler = (
|
|
1480
|
+
...[device, requestPayload]: [...DeviceEvents['attach_pin_on_device']]
|
|
1481
|
+
) => {
|
|
1482
|
+
postMessage(
|
|
1483
|
+
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1484
|
+
device: device.toMessageObject() as KnownDevice,
|
|
1485
|
+
type: 'ButtonRequest_AttachPin',
|
|
1486
|
+
source: requestPayload?.source,
|
|
1487
|
+
reason: requestPayload?.reason,
|
|
1488
|
+
...(requestPayload?.interaction ? { interaction: requestPayload.interaction } : {}),
|
|
1489
|
+
})
|
|
1490
|
+
);
|
|
1491
|
+
};
|
|
1492
|
+
|
|
1493
|
+
const onEnterPinOnDeviceHandler = (
|
|
1494
|
+
...[device, pinType, metadata]: [...DeviceEvents['pin_on_device']]
|
|
1495
|
+
) => {
|
|
1496
|
+
postMessage(
|
|
1497
|
+
createUiMessage(UI_REQUEST.REQUEST_PIN, {
|
|
1498
|
+
device: device.toMessageObject() as KnownDevice,
|
|
1499
|
+
type:
|
|
1500
|
+
pinType === DeviceSessionPinType.AttachToPin
|
|
1501
|
+
? 'ButtonRequest_AttachPin'
|
|
1502
|
+
: 'ButtonRequest_PinEntry',
|
|
1503
|
+
source: metadata?.source,
|
|
1504
|
+
reason: metadata?.reason,
|
|
1505
|
+
deviceOnly: metadata?.deviceOnly ?? true,
|
|
1506
|
+
completion: metadata?.completion,
|
|
1507
|
+
method: metadata?.method,
|
|
1508
|
+
page: metadata?.page,
|
|
1509
|
+
operation: metadata?.operation,
|
|
1510
|
+
...(metadata?.interaction ? { interaction: metadata.interaction } : {}),
|
|
1265
1511
|
})
|
|
1266
1512
|
);
|
|
1267
1513
|
};
|
|
1268
1514
|
|
|
1269
|
-
const
|
|
1515
|
+
const onPinOnDeviceCompleteHandler = (
|
|
1516
|
+
...[_, metadata]: [...DeviceEvents['pin_on_device_complete']]
|
|
1517
|
+
) => {
|
|
1518
|
+
postMessage(createUiMessage(UI_REQUEST.CLOSE_UI_PIN_WINDOW, metadata));
|
|
1519
|
+
};
|
|
1520
|
+
|
|
1521
|
+
const onSelectDeviceInBootloaderForWebDeviceHandler = (
|
|
1270
1522
|
...[device, callback]: [...DeviceEvents['select_device_in_bootloader_for_web_device']]
|
|
1271
1523
|
) => {
|
|
1272
1524
|
Log.debug('onSelectDeviceInBootloaderForWebDeviceHandler');
|
|
@@ -1276,11 +1528,14 @@ const onSelectDeviceInBootloaderForWebDeviceHandler = async (
|
|
|
1276
1528
|
device: device.toMessageObject() as KnownDevice,
|
|
1277
1529
|
})
|
|
1278
1530
|
);
|
|
1279
|
-
|
|
1280
|
-
|
|
1531
|
+
consumeUiPromise(
|
|
1532
|
+
uiPromise.promise,
|
|
1533
|
+
uiResp => callback(null, uiResp.payload.deviceId),
|
|
1534
|
+
error => callback(error, '')
|
|
1535
|
+
);
|
|
1281
1536
|
};
|
|
1282
1537
|
|
|
1283
|
-
const onSelectDeviceForSwitchFirmwareWebDeviceHandler =
|
|
1538
|
+
const onSelectDeviceForSwitchFirmwareWebDeviceHandler = (
|
|
1284
1539
|
...[device, callback]: [...DeviceEvents['select_device_for_switch_firmware_web_device']]
|
|
1285
1540
|
) => {
|
|
1286
1541
|
Log.debug('onSelectDeviceForSwitchFirmwareWebDeviceHandler');
|
|
@@ -1293,8 +1548,11 @@ const onSelectDeviceForSwitchFirmwareWebDeviceHandler = async (
|
|
|
1293
1548
|
device: device.toMessageObject() as KnownDevice,
|
|
1294
1549
|
})
|
|
1295
1550
|
);
|
|
1296
|
-
|
|
1297
|
-
|
|
1551
|
+
consumeUiPromise(
|
|
1552
|
+
uiPromise.promise,
|
|
1553
|
+
uiResp => callback(null, uiResp.payload.deviceId),
|
|
1554
|
+
error => callback(error, '')
|
|
1555
|
+
);
|
|
1298
1556
|
};
|
|
1299
1557
|
|
|
1300
1558
|
/**
|
|
@@ -1313,14 +1571,21 @@ const postMessage = (message: CoreMessage) => {
|
|
|
1313
1571
|
|
|
1314
1572
|
const createUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T, device?: Device) => {
|
|
1315
1573
|
const uiPromise: UiPromise<T> = createDeferred(promiseEvent, device);
|
|
1574
|
+
if (
|
|
1575
|
+
device &&
|
|
1576
|
+
(promiseEvent === UI_RESPONSE.RECEIVE_PIN || promiseEvent === UI_RESPONSE.RECEIVE_PASSPHRASE)
|
|
1577
|
+
) {
|
|
1578
|
+
const publicDeviceId = device.toMessageObject()?.deviceId;
|
|
1579
|
+
uiPromise.responseCorrelation = {
|
|
1580
|
+
interactionId: generateInstanceId('UiResponse', device.sdkInstanceId),
|
|
1581
|
+
deviceId: publicDeviceId || device.instanceId,
|
|
1582
|
+
};
|
|
1583
|
+
}
|
|
1316
1584
|
_uiPromises.push(uiPromise as any);
|
|
1317
1585
|
|
|
1318
1586
|
return uiPromise;
|
|
1319
1587
|
};
|
|
1320
1588
|
|
|
1321
|
-
const findUiPromise = <T extends UiPromiseResponse['type']>(promiseEvent: T) =>
|
|
1322
|
-
_uiPromises.find(p => p.id === promiseEvent);
|
|
1323
|
-
|
|
1324
1589
|
const removeUiPromise = (promise: Deferred<any>) => {
|
|
1325
1590
|
_uiPromises = _uiPromises.filter(p => p !== promise);
|
|
1326
1591
|
};
|
|
@@ -1332,8 +1597,10 @@ export default class Core extends EventEmitter {
|
|
|
1332
1597
|
|
|
1333
1598
|
private requestQueue = new RequestQueue();
|
|
1334
1599
|
|
|
1600
|
+
private disposePromise?: Promise<void>;
|
|
1601
|
+
|
|
1335
1602
|
// background task
|
|
1336
|
-
private
|
|
1603
|
+
private prePendingCallPromises = new Map<string, Promise<void>>();
|
|
1337
1604
|
|
|
1338
1605
|
private methodSynchronize = getSynchronize();
|
|
1339
1606
|
|
|
@@ -1344,19 +1611,24 @@ export default class Core extends EventEmitter {
|
|
|
1344
1611
|
Log.debug(`[Core] Created SDK instance: ${this.sdkInstanceId}`);
|
|
1345
1612
|
}
|
|
1346
1613
|
|
|
1347
|
-
cancelOperation(operationId: string) {
|
|
1348
|
-
this.requestQueue.abortOperation(operationId);
|
|
1349
|
-
}
|
|
1350
|
-
|
|
1351
1614
|
private getCoreContext() {
|
|
1352
1615
|
return {
|
|
1353
1616
|
sdkInstanceId: this.sdkInstanceId,
|
|
1354
1617
|
tracingContext: this.tracingContext,
|
|
1355
1618
|
requestQueue: this.requestQueue,
|
|
1356
1619
|
methodSynchronize: this.methodSynchronize,
|
|
1357
|
-
getPrePendingCallPromise: () => this.
|
|
1358
|
-
setPrePendingCallPromise: (
|
|
1359
|
-
|
|
1620
|
+
getPrePendingCallPromise: (connectId: string) => this.prePendingCallPromises.get(connectId),
|
|
1621
|
+
setPrePendingCallPromise: (connectId: string, promise?: Promise<void>) => {
|
|
1622
|
+
if (!promise) {
|
|
1623
|
+
this.prePendingCallPromises.delete(connectId);
|
|
1624
|
+
return;
|
|
1625
|
+
}
|
|
1626
|
+
this.prePendingCallPromises.set(connectId, promise);
|
|
1627
|
+
},
|
|
1628
|
+
removePrePendingCallPromise: (connectId: string, promise: Promise<void>) => {
|
|
1629
|
+
if (this.prePendingCallPromises.get(connectId) === promise) {
|
|
1630
|
+
this.prePendingCallPromises.delete(connectId);
|
|
1631
|
+
}
|
|
1360
1632
|
},
|
|
1361
1633
|
// callback 任务管理
|
|
1362
1634
|
registerCallbackTask: (connectId: string, callbackPromise: Deferred<any>) => {
|
|
@@ -1374,11 +1646,16 @@ export default class Core extends EventEmitter {
|
|
|
1374
1646
|
case UI_RESPONSE.RECEIVE_PASSPHRASE:
|
|
1375
1647
|
case UI_RESPONSE.SELECT_DEVICE_IN_BOOTLOADER_FOR_WEB_DEVICE:
|
|
1376
1648
|
case UI_RESPONSE.SELECT_DEVICE_FOR_SWITCH_FIRMWARE_WEB_DEVICE: {
|
|
1377
|
-
const uiPromise =
|
|
1649
|
+
const uiPromise = findUiPromiseForResponse(_uiPromises, message);
|
|
1378
1650
|
if (uiPromise) {
|
|
1379
1651
|
Log.log('receive UI Response: ', message.type);
|
|
1380
1652
|
uiPromise.resolve(message);
|
|
1381
1653
|
removeUiPromise(uiPromise);
|
|
1654
|
+
} else if (
|
|
1655
|
+
message.type === UI_RESPONSE.RECEIVE_PIN ||
|
|
1656
|
+
message.type === UI_RESPONSE.RECEIVE_PASSPHRASE
|
|
1657
|
+
) {
|
|
1658
|
+
Log.warn('Ignored unmatched or ambiguous sensitive UI response:', message.type);
|
|
1382
1659
|
}
|
|
1383
1660
|
break;
|
|
1384
1661
|
}
|
|
@@ -1394,10 +1671,17 @@ export default class Core extends EventEmitter {
|
|
|
1394
1671
|
}
|
|
1395
1672
|
|
|
1396
1673
|
case IFRAME.CALL: {
|
|
1397
|
-
|
|
1674
|
+
const logBlockLabel = getLogBlockLabel(message);
|
|
1675
|
+
Log.log(
|
|
1676
|
+
formatLogMethodLabel(`[${Date.now()}][CALL_API]`, logBlockLabel),
|
|
1677
|
+
getSafeLogPayload(message, logBlockLabel)
|
|
1678
|
+
);
|
|
1398
1679
|
const response = await callAPI(this.getCoreContext(), message);
|
|
1399
1680
|
const { success, payload } = response;
|
|
1400
|
-
Log.log(
|
|
1681
|
+
Log.log(
|
|
1682
|
+
formatLogMethodLabel(`[${Date.now()}][CALL_API_RESPONSE]`, logBlockLabel),
|
|
1683
|
+
getSafeLogPayload(response, logBlockLabel)
|
|
1684
|
+
);
|
|
1401
1685
|
if (success) {
|
|
1402
1686
|
return response;
|
|
1403
1687
|
}
|
|
@@ -1416,10 +1700,6 @@ export default class Core extends EventEmitter {
|
|
|
1416
1700
|
cancel(this.getCoreContext(), message.payload.connectId);
|
|
1417
1701
|
break;
|
|
1418
1702
|
}
|
|
1419
|
-
case IFRAME.CANCEL_OPERATION: {
|
|
1420
|
-
this.cancelOperation(message.payload.operationId);
|
|
1421
|
-
break;
|
|
1422
|
-
}
|
|
1423
1703
|
case IFRAME.CALLBACK: {
|
|
1424
1704
|
Log.log('callback message: ', message);
|
|
1425
1705
|
postMessage(message);
|
|
@@ -1431,25 +1711,65 @@ export default class Core extends EventEmitter {
|
|
|
1431
1711
|
return Promise.resolve(message);
|
|
1432
1712
|
}
|
|
1433
1713
|
|
|
1434
|
-
dispose() {
|
|
1714
|
+
dispose(): Promise<void> {
|
|
1715
|
+
if (!this.disposePromise) {
|
|
1716
|
+
this.disposePromise = this.disposeResources();
|
|
1717
|
+
}
|
|
1718
|
+
return this.disposePromise;
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
private async disposeResources(): Promise<void> {
|
|
1722
|
+
Log.debug(`[Core] Disposing SDK instance: ${this.sdkInstanceId}`);
|
|
1723
|
+
pollingManager.stopAll();
|
|
1724
|
+
this.requestQueue.abortAllRequests();
|
|
1725
|
+
cleanup();
|
|
1726
|
+
|
|
1727
|
+
_connector?.stop();
|
|
1728
|
+
let transportCleanup: Promise<void>;
|
|
1729
|
+
try {
|
|
1730
|
+
transportCleanup = Promise.resolve(TransportManager.getTransport()?.stop?.()).catch(error => {
|
|
1731
|
+
Log.warn('[Core] Transport cleanup failed:', error);
|
|
1732
|
+
});
|
|
1733
|
+
} catch (error) {
|
|
1734
|
+
Log.warn('[Core] Transport cleanup failed:', error);
|
|
1735
|
+
transportCleanup = Promise.resolve();
|
|
1736
|
+
}
|
|
1737
|
+
|
|
1738
|
+
// Preserve synchronous dispose semantics for in-memory state and listeners.
|
|
1435
1739
|
_deviceList = undefined;
|
|
1436
1740
|
_connector = undefined;
|
|
1741
|
+
DevicePool.dispose();
|
|
1437
1742
|
deviceCacheMap.clear();
|
|
1438
1743
|
preWarmInflight.clear();
|
|
1439
1744
|
preWarmDoneAt.clear();
|
|
1440
|
-
|
|
1745
|
+
preConnectCache = { passphraseState: undefined };
|
|
1746
|
+
this.prePendingCallPromises.clear();
|
|
1747
|
+
this.removeAllListeners();
|
|
1441
1748
|
cleanupSdkInstance(this.sdkInstanceId);
|
|
1749
|
+
if (_core === this) _core = undefined;
|
|
1750
|
+
|
|
1751
|
+
// Transports, especially Node USB, may release native handles asynchronously.
|
|
1752
|
+
await transportCleanup;
|
|
1442
1753
|
}
|
|
1443
1754
|
}
|
|
1444
1755
|
|
|
1445
1756
|
export const initCore = () => {
|
|
1446
|
-
|
|
1447
|
-
|
|
1757
|
+
const core = new Core();
|
|
1758
|
+
_core = core;
|
|
1759
|
+
return core;
|
|
1448
1760
|
};
|
|
1449
1761
|
|
|
1450
1762
|
export const initConnector = () => {
|
|
1451
1763
|
_connector = new DeviceConnector();
|
|
1764
|
+
DevicePool.emitter.removeListener(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
1765
|
+
DevicePool.emitter.removeListener(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1766
|
+
DevicePool.emitter.removeListener(
|
|
1767
|
+
TRANSPORT_EVENT.DEVICE_DISCONNECT,
|
|
1768
|
+
onTransportDeviceDisconnectHandler
|
|
1769
|
+
);
|
|
1770
|
+
DevicePool.emitter.on(DEVICE.CONNECT, onDeviceConnectHandler);
|
|
1452
1771
|
DevicePool.emitter.on(DEVICE.DISCONNECT, onDeviceDisconnectHandler);
|
|
1772
|
+
DevicePool.emitter.on(TRANSPORT_EVENT.DEVICE_DISCONNECT, onTransportDeviceDisconnectHandler);
|
|
1453
1773
|
return _connector;
|
|
1454
1774
|
};
|
|
1455
1775
|
|
|
@@ -1463,12 +1783,8 @@ export const init = async (
|
|
|
1463
1783
|
plugin?: LowlevelTransportSharedPlugin
|
|
1464
1784
|
) => {
|
|
1465
1785
|
try {
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
initTransport(Transport, plugin);
|
|
1469
|
-
} catch {
|
|
1470
|
-
Log.error('DataManager.load error');
|
|
1471
|
-
}
|
|
1786
|
+
await DataManager.load(settings);
|
|
1787
|
+
initTransport(Transport, plugin);
|
|
1472
1788
|
enableLog(DataManager.getSettings('debug'));
|
|
1473
1789
|
if (DataManager.getSettings('env') !== 'react-native') {
|
|
1474
1790
|
setLoggerPostMessage(postMessage);
|
|
@@ -1479,6 +1795,7 @@ export const init = async (
|
|
|
1479
1795
|
return _core;
|
|
1480
1796
|
} catch (error) {
|
|
1481
1797
|
Log.error('core init', error);
|
|
1798
|
+
throw error;
|
|
1482
1799
|
}
|
|
1483
1800
|
};
|
|
1484
1801
|
|