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