From 9a02d97e96f6a0031dccb72e2fb916278a5bcdf1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 19 Jun 2024 20:52:51 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../BlockchainProviderTypesConverter.kt | 30 ++--------------- .../BlockchainProvidersResponseLoader.kt | 13 +++++++- .../blockchainsdk/utils/ProviderTypeExt.kt | 32 +++++++++++++++++++ .../BlockchainProvidersResponseLoaderTest.kt | 6 ++-- 4 files changed, 49 insertions(+), 32 deletions(-) create mode 100644 libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/converters/BlockchainProviderTypesConverter.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/converters/BlockchainProviderTypesConverter.kt index 54ff6683f2..f348d06b21 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/converters/BlockchainProviderTypesConverter.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/converters/BlockchainProviderTypesConverter.kt @@ -4,6 +4,7 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.network.providers.ProviderType import com.tangem.blockchainsdk.BlockchainProviderTypes import com.tangem.blockchainsdk.BlockchainProvidersResponse +import com.tangem.blockchainsdk.utils.createPrivateProviderType import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.datasource.config.models.ProviderModel import com.tangem.utils.converter.Converter @@ -24,7 +25,7 @@ internal object BlockchainProviderTypesConverter : val providerTypes = blockchainProviders.mapNotNull { provider -> when (provider) { is ProviderModel.Public -> ProviderType.Public(url = provider.url) - is ProviderModel.Private -> createPrivateProviderType(blockchain = blockchain, name = provider.name) + is ProviderModel.Private -> createPrivateProviderType(name = provider.name) ProviderModel.UnsupportedType -> { Timber.e("$blockchain provider type is not supported") null @@ -36,31 +37,4 @@ internal object BlockchainProviderTypesConverter : } .toMap() } - - @Suppress("CyclomaticComplexMethod") - private fun createPrivateProviderType(blockchain: Blockchain, name: String): ProviderType? { - return when (name) { - "blockchair" -> ProviderType.BitcoinLike.Blockchair - "blockcypher" -> ProviderType.BitcoinLike.Blockcypher - "adalite" -> ProviderType.Cardano.Adalite - "tangemRosetta" -> ProviderType.Cardano.Rosetta - "fireAcademy" -> ProviderType.Chia.FireAcademy - "tangemChia" -> ProviderType.Chia.Tangem - "infura" -> ProviderType.EthereumLike.Infura - "getblock" -> ProviderType.GetBlock - "arkhiaHedera" -> ProviderType.Hedera.Arkhia - "kaspa" -> ProviderType.Kaspa.SecondaryAPI - "nownodes" -> ProviderType.NowNodes - "quicknode" -> ProviderType.QuickNode - "solana" -> ProviderType.Solana.Official - "ton" -> ProviderType.Ton.TonCentral - "tron" -> ProviderType.Tron.TronGrid - "dwellirBittensor" -> ProviderType.Bittensor.Dwellir - "onfinalityBittensor" -> ProviderType.Bittensor.Onfinality - else -> { - Timber.e("$blockchain private provider ($name) is not supported") - null - } - } - } } \ No newline at end of file diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoader.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoader.kt index bb0a9800a6..bfb8f6107d 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoader.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoader.kt @@ -3,6 +3,7 @@ package com.tangem.blockchainsdk.loader import androidx.core.util.PatternsCompat import com.google.firebase.crashlytics.FirebaseCrashlytics import com.tangem.blockchainsdk.BlockchainProvidersResponse +import com.tangem.blockchainsdk.utils.createPrivateProviderType import com.tangem.datasource.api.tangemTech.TangemTechServiceApi import com.tangem.datasource.asset.loader.AssetLoader import com.tangem.datasource.config.models.ProviderModel @@ -82,7 +83,17 @@ internal class BlockchainProvidersResponseLoader @Inject constructor( return result.guaranteeUrlsEndWithSlash() } - private fun List.filterUnsupportedProviders() = filter { it !is ProviderModel.UnsupportedType } + private fun List.filterUnsupportedProviders() = filter { + val isSupportedType = it !is ProviderModel.UnsupportedType + + val isSupportedPrivateType = if (it is ProviderModel.Private) { + createPrivateProviderType(it.name) != null + } else { + true + } + + isSupportedType && isSupportedPrivateType + } private fun List.filterInvalidProviders() = mapNotNull { provider -> if (provider is ProviderModel.Public) { diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt new file mode 100644 index 0000000000..ba4a4fafd8 --- /dev/null +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt @@ -0,0 +1,32 @@ +package com.tangem.blockchainsdk.utils + +import com.tangem.blockchain.common.network.providers.ProviderType +import timber.log.Timber + +/** Create private provider by [name] or return null */ +@Suppress("CyclomaticComplexMethod") +fun createPrivateProviderType(name: String): ProviderType? { + return when (name) { + "blockchair" -> ProviderType.BitcoinLike.Blockchair + "blockcypher" -> ProviderType.BitcoinLike.Blockcypher + "adalite" -> ProviderType.Cardano.Adalite + "tangemRosetta" -> ProviderType.Cardano.Rosetta + "fireAcademy" -> ProviderType.Chia.FireAcademy + "tangemChia" -> ProviderType.Chia.Tangem + "infura" -> ProviderType.EthereumLike.Infura + "getblock" -> ProviderType.GetBlock + "arkhiaHedera" -> ProviderType.Hedera.Arkhia + "kaspa" -> ProviderType.Kaspa.SecondaryAPI + "nownodes" -> ProviderType.NowNodes + "quicknode" -> ProviderType.QuickNode + "solana" -> ProviderType.Solana.Official + "ton" -> ProviderType.Ton.TonCentral + "tron" -> ProviderType.Tron.TronGrid + "dwellirBittensor" -> ProviderType.Bittensor.Dwellir + "onfinalityBittensor" -> ProviderType.Bittensor.Onfinality + else -> { + Timber.e("Private provider with name $name is not supported") + null + } + } +} \ No newline at end of file diff --git a/libs/blockchain-sdk/src/test/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoaderTest.kt b/libs/blockchain-sdk/src/test/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoaderTest.kt index 5f1f5fb283..afbf3601ee 100644 --- a/libs/blockchain-sdk/src/test/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoaderTest.kt +++ b/libs/blockchain-sdk/src/test/java/com/tangem/blockchainsdk/loader/BlockchainProvidersResponseLoaderTest.kt @@ -279,15 +279,15 @@ internal class BlockchainProvidersResponseLoaderTest { const val LOCAL_PROVIDERS_JSON = "doesn't matter" val localProviders: BlockchainProvidersResponse = mapOf( - "aptos" to listOf(ProviderModel.Private(name = "private_apt")), + "aptos" to listOf(ProviderModel.Private(name = "nownodes")), "algorand" to listOf( - ProviderModel.Private(name = "private_alg"), + ProviderModel.Private(name = "nownodes"), ProviderModel.Public(url = "https://public_alg.com/"), ), ) val remoteProviders: BlockchainProvidersResponse = localProviders + mapOf( - "bitcoin" to listOf(ProviderModel.Private(name = "private_btc")), + "bitcoin" to listOf(ProviderModel.Private(name = "blockchair")), ) } } \ No newline at end of file