From aeef2b394588f299249b77e9d522c27cc4f52f88 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 25 Feb 2026 15:24:36 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/ApplicationEntryPoint.kt | 6 +- .../java/com/tangem/tap/TangemApplication.kt | 15 ++--- .../java/com/tangem/tap/di/ActivityModule.kt | 8 +-- .../tap/network/auth/DefaultAuthProvider.kt | 14 ++-- .../auth/DefaultP2PEthPoolAuthProvider.kt | 6 +- .../auth/DefaultStakeKitAuthProvider.kt | 6 +- .../tangem/tap/network/auth/di/AuthModule.kt | 14 ++-- .../moonpay/MoonPayService.kt | 17 +++-- .../tap/proxy/redux/DaggerGraphState.kt | 2 - .../core/abtests/di/ABTestsManagerModule.kt | 7 +- .../manager/impl/AmplitudeABTestsManager.kt | 5 +- .../datasource/api/common/config/BlockAid.kt | 9 +-- .../datasource/api/common/config/Express.kt | 10 +-- .../datasource/api/common/config/TangemPay.kt | 16 ++--- .../api/common/config/YieldSupply.kt | 8 +-- .../crypto/Sha256SignatureVerifier.kt | 8 +-- .../tangem/datasource/di/ApiConfigsModule.kt | 22 +++--- .../tangem/datasource/di/SecurityModule.kt | 6 +- .../di/local/config/ConfigModule.kt | 10 +-- .../DefaultEnvironmentConfigStorage.kt | 41 ------------ .../environment/EnvironmentConfigStorage.kt | 20 ------ .../api/common/config/ApiConfigTest.kt | 12 ++-- .../managers/MockEnvironmentConfigStorage.kt | 45 ------------- .../managers/ProdApiConfigsManagerTest.kt | 67 +++++++++++++++---- .../tangem/data/onramp/di/OnrampDataModule.kt | 6 +- .../onramp/legacy/MercuryoTopUpRepository.kt | 4 +- .../DefaultBlockchainSDKFactory.kt | 8 +-- .../di/BlockchainSDKFactoryModule.kt | 6 +- 28 files changed, 158 insertions(+), 240 deletions(-) delete mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/config/environment/DefaultEnvironmentConfigStorage.kt delete mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/config/environment/EnvironmentConfigStorage.kt delete mode 100644 core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/MockEnvironmentConfigStorage.kt diff --git a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt index da98e59b92..ba01875acf 100644 --- a/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt +++ b/app/src/main/java/com/tangem/tap/ApplicationEntryPoint.kt @@ -19,7 +19,7 @@ import com.tangem.core.ui.clipboard.ClipboardManager import com.tangem.data.card.TransactionSignerFactory import com.tangem.datasource.api.common.config.managers.ApiConfigsManager import com.tangem.datasource.connection.NetworkConnectionManager -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.datasource.local.config.issuers.IssuersConfigStorage import com.tangem.datasource.local.logs.AppLogsStore import com.tangem.datasource.local.preferences.AppPreferencesStore @@ -57,12 +57,12 @@ import dagger.hilt.components.SingletonComponent @Suppress("TooManyFunctions") interface ApplicationEntryPoint { - fun getEnvironmentConfigStorage(): EnvironmentConfigStorage - fun getAppStateHolder(): AppStateHolder fun getIssuersConfigStorage(): IssuersConfigStorage + fun getEnvironmentConfig(): EnvironmentConfig + fun getFeatureTogglesManager(): FeatureTogglesManager fun getExcludedBlockchainsManager(): ExcludedBlockchainsManager diff --git a/app/src/main/java/com/tangem/tap/TangemApplication.kt b/app/src/main/java/com/tangem/tap/TangemApplication.kt index de3252872f..7e7ecd4baa 100644 --- a/app/src/main/java/com/tangem/tap/TangemApplication.kt +++ b/app/src/main/java/com/tangem/tap/TangemApplication.kt @@ -36,7 +36,6 @@ import com.tangem.datasource.api.common.config.managers.ApiConfigsManager import com.tangem.datasource.api.common.createNetworkLoggingInterceptor import com.tangem.datasource.connection.NetworkConnectionManager import com.tangem.datasource.local.config.environment.EnvironmentConfig -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.config.issuers.IssuersConfigStorage import com.tangem.datasource.local.logs.AppLogsStore import com.tangem.datasource.local.preferences.AppPreferencesStore @@ -80,7 +79,6 @@ import dagger.hilt.EntryPoints import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import org.rekotlin.Store import timber.log.Timber @@ -97,12 +95,12 @@ open class TangemApplication : Application(), ImageLoaderFactory, Configuration. private val appStateHolder: AppStateHolder get() = entryPoint.getAppStateHolder() - private val environmentConfigStorage: EnvironmentConfigStorage - get() = entryPoint.getEnvironmentConfigStorage() - private val issuersConfigStorage: IssuersConfigStorage get() = entryPoint.getIssuersConfigStorage() + private val environmentConfig: EnvironmentConfig + get() = entryPoint.getEnvironmentConfig() + private val featureTogglesManager: FeatureTogglesManager get() = entryPoint.getFeatureTogglesManager() @@ -306,9 +304,7 @@ open class TangemApplication : Application(), ImageLoaderFactory, Configuration. Timber.i(excludedBlockchainsManager.toString()) } - runBlocking { - initWithConfigDependency(environmentConfig = environmentConfigStorage.initialize()) - } + initWithConfigDependency(environmentConfig = environmentConfig) abTestsManager.init() @@ -345,7 +341,7 @@ open class TangemApplication : Application(), ImageLoaderFactory, Configuration. appStateHolder.mainStore = store wcInitializeUseCase.init( - projectId = environmentConfigStorage.getConfigSync().walletConnectProjectId, + projectId = environmentConfig.walletConnectProjectId, ) } @@ -376,7 +372,6 @@ open class TangemApplication : Application(), ImageLoaderFactory, Configuration. shareManager = shareManager, appRouter = appRouter, transactionSignerFactory = transactionSignerFactory, - environmentConfigStorage = environmentConfigStorage, onboardingV2FeatureToggles = onboardingV2FeatureToggles, onboardingRepository = onboardingRepository, excludedBlockchains = excludedBlockchains, diff --git a/app/src/main/java/com/tangem/tap/di/ActivityModule.kt b/app/src/main/java/com/tangem/tap/di/ActivityModule.kt index 1f40496096..e5600cc208 100644 --- a/app/src/main/java/com/tangem/tap/di/ActivityModule.kt +++ b/app/src/main/java/com/tangem/tap/di/ActivityModule.kt @@ -1,7 +1,7 @@ package com.tangem.tap.di import com.tangem.datasource.api.moonpay.MoonPayApi -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.domain.card.ScanCardUseCase import com.tangem.domain.card.repository.CardSdkConfigRepository import com.tangem.domain.exchange.RampStateManager @@ -69,14 +69,14 @@ internal object ActivityModule { @Provides @Singleton fun provideExchangeService( - environmentConfigStorage: EnvironmentConfigStorage, getSelectedWalletUseCase: GetSelectedWalletUseCase, moonPayApi: MoonPayApi, + environmentConfig: EnvironmentConfig, ): SellService { return MoonPayService( api = moonPayApi, - apiKeyProvider = Provider { environmentConfigStorage.getConfigSync().moonPayApiKey }, - secretKeyProvider = Provider { environmentConfigStorage.getConfigSync().moonPayApiSecretKey }, + apiKey = environmentConfig.moonPayApiKey, + secretKey = environmentConfig.moonPayApiSecretKey, userWalletProvider = { getSelectedWalletUseCase.sync().getOrNull() }, ) } diff --git a/app/src/main/java/com/tangem/tap/network/auth/DefaultAuthProvider.kt b/app/src/main/java/com/tangem/tap/network/auth/DefaultAuthProvider.kt index 1c102c9e0c..027441c202 100644 --- a/app/src/main/java/com/tangem/tap/network/auth/DefaultAuthProvider.kt +++ b/app/src/main/java/com/tangem/tap/network/auth/DefaultAuthProvider.kt @@ -3,7 +3,7 @@ package com.tangem.tap.network.auth import com.tangem.common.extensions.toHexString import com.tangem.datasource.api.common.AuthProvider import com.tangem.datasource.api.common.config.ApiEnvironment -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.utils.Provider @@ -11,7 +11,7 @@ import com.tangem.utils.ProviderSuspend internal class DefaultAuthProvider( private val userWalletsListRepository: UserWalletsListRepository, - private val environmentConfigStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, ) : AuthProvider { override suspend fun getCardPublicKey(): String { @@ -47,11 +47,11 @@ internal class DefaultAuthProvider( ApiEnvironment.DEV, ApiEnvironment.DEV_2, ApiEnvironment.DEV_3, - -> environmentConfigStorage.getConfigSync().tangemApiKeyDev + -> environmentConfig.tangemApiKeyDev ApiEnvironment.STAGE_2, ApiEnvironment.STAGE, - -> environmentConfigStorage.getConfigSync().tangemApiKeyStage - ApiEnvironment.PROD -> environmentConfigStorage.getConfigSync().tangemApiKey + -> environmentConfig.tangemApiKeyStage + ApiEnvironment.PROD -> environmentConfig.tangemApiKey } ?: error("No tangem tech api config provided") } } @@ -60,8 +60,8 @@ internal class DefaultAuthProvider( return ProviderSuspend { when (apiEnvironment.invoke()) { ApiEnvironment.DEV, - -> environmentConfigStorage.getConfigSync().gaslessTxApiKeyDev - ApiEnvironment.PROD -> environmentConfigStorage.getConfigSync().gaslessTxApiKey + -> environmentConfig.gaslessTxApiKeyDev + ApiEnvironment.PROD -> environmentConfig.gaslessTxApiKey else -> error("No gasless tx api config provided for ${apiEnvironment.invoke()}") } ?: error("No gasless tx api config provided") } diff --git a/app/src/main/java/com/tangem/tap/network/auth/DefaultP2PEthPoolAuthProvider.kt b/app/src/main/java/com/tangem/tap/network/auth/DefaultP2PEthPoolAuthProvider.kt index 93b0595647..9ed1541c3e 100644 --- a/app/src/main/java/com/tangem/tap/network/auth/DefaultP2PEthPoolAuthProvider.kt +++ b/app/src/main/java/com/tangem/tap/network/auth/DefaultP2PEthPoolAuthProvider.kt @@ -1,15 +1,15 @@ package com.tangem.tap.network.auth -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.domain.staking.model.ethpool.P2PEthPoolStakingConfig import com.tangem.lib.auth.P2PEthPoolAuthProvider internal class DefaultP2PEthPoolAuthProvider( - private val environmentConfigStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, ) : P2PEthPoolAuthProvider { override fun getApiKey(): String { - val keys = environmentConfigStorage.getConfigSync().p2pApiKey + val keys = environmentConfig.p2pApiKey ?: error("No P2P api keys provided") return if (P2PEthPoolStakingConfig.USE_TESTNET) keys.hoodi else keys.mainnet diff --git a/app/src/main/java/com/tangem/tap/network/auth/DefaultStakeKitAuthProvider.kt b/app/src/main/java/com/tangem/tap/network/auth/DefaultStakeKitAuthProvider.kt index ba0534ae88..079cad327a 100644 --- a/app/src/main/java/com/tangem/tap/network/auth/DefaultStakeKitAuthProvider.kt +++ b/app/src/main/java/com/tangem/tap/network/auth/DefaultStakeKitAuthProvider.kt @@ -1,13 +1,13 @@ package com.tangem.tap.network.auth -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.lib.auth.StakeKitAuthProvider internal class DefaultStakeKitAuthProvider( - private val environmentConfigStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, ) : StakeKitAuthProvider { override fun getApiKey(): String { - return environmentConfigStorage.getConfigSync().stakeKitApiKey ?: error("No StakeKit api key provided") + return environmentConfig.stakeKitApiKey ?: error("No StakeKit api key provided") } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt b/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt index e6cba79706..6ef9e06f96 100644 --- a/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt +++ b/app/src/main/java/com/tangem/tap/network/auth/di/AuthModule.kt @@ -1,7 +1,7 @@ package com.tangem.tap.network.auth.di import com.tangem.datasource.api.common.AuthProvider -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.lib.auth.ExpressAuthProvider import com.tangem.lib.auth.P2PEthPoolAuthProvider @@ -22,11 +22,11 @@ internal class AuthModule { @Singleton fun provideAuthProvider( userWalletsListRepository: UserWalletsListRepository, - environmentConfigStorage: EnvironmentConfigStorage, + environmentConfig: EnvironmentConfig, ): AuthProvider { return DefaultAuthProvider( userWalletsListRepository = userWalletsListRepository, - environmentConfigStorage = environmentConfigStorage, + environmentConfig = environmentConfig, ) } @@ -38,14 +38,14 @@ internal class AuthModule { @Provides @Singleton - fun provideStakeKitAuthProvider(environmentConfigStorage: EnvironmentConfigStorage): StakeKitAuthProvider { - return DefaultStakeKitAuthProvider(environmentConfigStorage) + fun provideStakeKitAuthProvider(environmentConfig: EnvironmentConfig): StakeKitAuthProvider { + return DefaultStakeKitAuthProvider(environmentConfig) } @Provides @Singleton - fun provideP2PEthPoolAuthProvider(environmentConfigStorage: EnvironmentConfigStorage): P2PEthPoolAuthProvider { - return DefaultP2PEthPoolAuthProvider(environmentConfigStorage) + fun provideP2PEthPoolAuthProvider(environmentConfig: EnvironmentConfig): P2PEthPoolAuthProvider { + return DefaultP2PEthPoolAuthProvider(environmentConfig) } @Provides diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt index 91e45c1573..742e44ec5e 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt @@ -19,7 +19,6 @@ import com.tangem.tap.domain.model.Currency import com.tangem.tap.network.exchangeServices.SellService import com.tangem.tap.network.exchangeServices.SellServiceInitializationStatus import com.tangem.tap.network.exchangeServices.moonpay.models.MoonPayAvailableCurrency -import com.tangem.utils.Provider import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import timber.log.Timber @@ -28,8 +27,8 @@ import javax.crypto.spec.SecretKeySpec class MoonPayService( private val api: MoonPayApi, - private val apiKeyProvider: Provider, - private val secretKeyProvider: Provider, + private val apiKey: String, + private val secretKey: String, private val userWalletProvider: () -> UserWallet?, ) : SellService { @@ -47,18 +46,18 @@ class MoonPayService( _initializationStatus.value = lceLoading() performRequest { - val userStatus = when (val result = performRequest { api.getUserStatus(apiKeyProvider()) }) { + val userStatus = when (val result = performRequest { api.getUserStatus(apiKey) }) { is Result.Failure -> { - Timber.e("Failed to load user status", result.error) + Timber.e(result.error, "Failed to load user status") _initializationStatus.value = result.error.lceError() return@performRequest } is Result.Success -> result.data } - val currencies = when (val result = performRequest { api.getCurrencies(apiKeyProvider()) }) { + val currencies = when (val result = performRequest { api.getCurrencies(apiKey) }) { is Result.Failure -> { - Timber.e("Failed to load currencies", result.error) + Timber.e(result.error, "Failed to load currencies") _initializationStatus.value = result.error.lceError() return@performRequest } @@ -163,7 +162,7 @@ class MoonPayService( val uri = Uri.Builder() .scheme(SCHEME) .authority(URL_SELL) - .appendQueryParameter("apiKey", apiKeyProvider()) + .appendQueryParameter("apiKey", apiKey) .appendQueryParameter("baseCurrencyCode", moonpayCurrency.currencyCode.uppercase()) .appendQueryParameter("refundWalletAddress", walletAddress) .appendQueryParameter("redirectURL", "tangem://redirect_sell?currency_id=${cryptoCurrency.id.value}") @@ -179,7 +178,7 @@ class MoonPayService( private fun createSignature(data: String): String { val sha256Hmac = Mac.getInstance("HmacSHA256") - val secretKey = SecretKeySpec(secretKeyProvider().toByteArray(), "HmacSHA256") + val secretKey = SecretKeySpec(secretKey.toByteArray(), "HmacSHA256") sha256Hmac.init(secretKey) val sha256encoded = sha256Hmac.doFinal("?$data".toByteArray()) return Base64.encodeToString(sha256encoded, Base64.NO_WRAP) diff --git a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt index 133c325afc..d86379f650 100644 --- a/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt +++ b/app/src/main/java/com/tangem/tap/proxy/redux/DaggerGraphState.kt @@ -11,7 +11,6 @@ import com.tangem.core.navigation.url.UrlOpener import com.tangem.core.ui.clipboard.ClipboardManager import com.tangem.data.card.TransactionSignerFactory import com.tangem.datasource.connection.NetworkConnectionManager -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.config.issuers.IssuersConfigStorage import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.token.UserTokensResponseStore @@ -63,7 +62,6 @@ data class DaggerGraphState( val shareManager: ShareManager? = null, val appRouter: AppRouter? = null, val transactionSignerFactory: TransactionSignerFactory? = null, - val environmentConfigStorage: EnvironmentConfigStorage? = null, val onboardingV2FeatureToggles: OnboardingV2FeatureToggles? = null, val onboardingRepository: OnboardingRepository? = null, val excludedBlockchains: ExcludedBlockchains? = null, diff --git a/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/di/ABTestsManagerModule.kt b/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/di/ABTestsManagerModule.kt index 3934f4ba5c..30c1e3b07e 100644 --- a/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/di/ABTestsManagerModule.kt +++ b/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/di/ABTestsManagerModule.kt @@ -5,8 +5,7 @@ import com.tangem.core.abtests.BuildConfig import com.tangem.core.abtests.manager.ABTestsManager import com.tangem.core.abtests.manager.impl.AmplitudeABTestsManager import com.tangem.core.abtests.manager.impl.StubABTestsManager -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage -import com.tangem.utils.Provider +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module import dagger.Provides @@ -24,7 +23,7 @@ internal object ABTestsManagerModule { @Singleton fun provideABTestsManager( application: Application, - environmentConfigStorage: EnvironmentConfigStorage, + environmentConfig: EnvironmentConfig, dispatchers: CoroutineDispatcherProvider, ): ABTestsManager { return if (BuildConfig.AB_TESTS_ENABLED) { @@ -32,7 +31,7 @@ internal object ABTestsManagerModule { } else { AmplitudeABTestsManager( application = application, - apiKeyProvider = Provider { environmentConfigStorage.getConfigSync().amplitudeApiKey }, + apiKey = environmentConfig.amplitudeApiKey, scope = CoroutineScope(context = dispatchers.io + SupervisorJob()), ) } diff --git a/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/manager/impl/AmplitudeABTestsManager.kt b/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/manager/impl/AmplitudeABTestsManager.kt index d2b6dbf52c..2307363d90 100644 --- a/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/manager/impl/AmplitudeABTestsManager.kt +++ b/core/ab-tests/src/main/kotlin/com/tangem/core/abtests/manager/impl/AmplitudeABTestsManager.kt @@ -7,14 +7,13 @@ import com.amplitude.experiment.ExperimentConfig import com.amplitude.experiment.ExperimentUser import com.tangem.core.abtests.manager.ABTestsManager import com.tangem.core.analytics.models.AnalyticsParam -import com.tangem.utils.Provider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber internal class AmplitudeABTestsManager( val application: Application, - val apiKeyProvider: Provider, + val apiKey: String, val scope: CoroutineScope, ) : ABTestsManager { @@ -28,7 +27,7 @@ internal class AmplitudeABTestsManager( client = Experiment.initializeWithAmplitudeAnalytics( application = application, - apiKey = apiKeyProvider(), + apiKey = apiKey, config = ExperimentConfig .builder() .automaticFetchOnAmplitudeIdentityChange(true) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/BlockAid.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/BlockAid.kt index f05797c816..7fcda27661 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/BlockAid.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/BlockAid.kt @@ -1,11 +1,10 @@ package com.tangem.datasource.api.common.config -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.utils.ProviderSuspend -import kotlinx.coroutines.flow.first internal class BlockAid( - private val configStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, ) : ApiConfig() { override val defaultEnvironment: ApiEnvironment = ApiEnvironment.PROD @@ -21,9 +20,7 @@ internal class BlockAid( put( key = "X-API-KEY", value = ProviderSuspend { - requireNotNull( - configStorage.getConfig().first { !it.blockAidApiKey.isNullOrEmpty() }.blockAidApiKey, - ) + requireNotNull(environmentConfig.blockAidApiKey) }, ) put("accept", ProviderSuspend { "application/json" }) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt index 4104dae025..b9923936b3 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/Express.kt @@ -1,7 +1,7 @@ package com.tangem.datasource.api.common.config import com.tangem.datasource.BuildConfig -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.datasource.utils.RequestHeader import com.tangem.lib.auth.ExpressAuthProvider import com.tangem.utils.ProviderSuspend @@ -11,13 +11,13 @@ import com.tangem.utils.version.AppVersionProvider /** * Express [ApiConfig] * - * @property environmentConfigStorage environment config storage + * @property environmentConfig environment config * @property expressAuthProvider express auth provider * @property appVersionProvider app version provider * @property appInfoProvider app info provider */ internal class Express( - private val environmentConfigStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, private val expressAuthProvider: ExpressAuthProvider, private val appVersionProvider: AppVersionProvider, private val appInfoProvider: AppInfoProvider, @@ -100,9 +100,9 @@ internal class Express( private fun getApiKey(isProd: Boolean): String { return if (isProd) { - environmentConfigStorage.getConfigSync().express + environmentConfig.express } else { - environmentConfigStorage.getConfigSync().devExpress + environmentConfig.devExpress } ?.apiKey ?: error("No express config provided") diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemPay.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemPay.kt index b494cbc70c..5c20eca2cf 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemPay.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/TangemPay.kt @@ -1,13 +1,13 @@ package com.tangem.datasource.api.common.config import com.tangem.datasource.BuildConfig -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.utils.ProviderSuspend import com.tangem.utils.version.AppVersionProvider internal sealed class TangemPay( + private val environmentConfig: EnvironmentConfig, private val appVersionProvider: AppVersionProvider, - private val environmentConfigStorage: EnvironmentConfigStorage, ) : ApiConfig() { override val defaultEnvironment: ApiEnvironment = getInitialEnvironment() @@ -61,8 +61,8 @@ internal sealed class TangemPay( return when (apiEnvironment) { ApiEnvironment.MOCK, ApiEnvironment.DEV, - -> environmentConfigStorage.getConfigSync().bffStaticTokenDev - ApiEnvironment.PROD -> environmentConfigStorage.getConfigSync().bffStaticToken + -> environmentConfig.bffStaticTokenDev + ApiEnvironment.PROD -> environmentConfig.bffStaticToken ApiEnvironment.STAGE, ApiEnvironment.STAGE_2, ApiEnvironment.DEV_2, @@ -72,9 +72,9 @@ internal sealed class TangemPay( } class Bff( + environmentConfig: EnvironmentConfig, appVersionProvider: AppVersionProvider, - environmentConfigStorage: EnvironmentConfigStorage, - ) : TangemPay(appVersionProvider, environmentConfigStorage) { + ) : TangemPay(environmentConfig, appVersionProvider) { override fun getBaseUrl(apiEnvironment: ApiEnvironment): String { return when (apiEnvironment) { ApiEnvironment.DEV -> "https://api.dev.us.paera.com/bff-v2/" @@ -90,9 +90,9 @@ internal sealed class TangemPay( } class Auth( + environmentConfig: EnvironmentConfig, appVersionProvider: AppVersionProvider, - environmentConfigStorage: EnvironmentConfigStorage, - ) : TangemPay(appVersionProvider, environmentConfigStorage) { + ) : TangemPay(environmentConfig, appVersionProvider) { override fun getBaseUrl(apiEnvironment: ApiEnvironment): String { return when (apiEnvironment) { ApiEnvironment.DEV -> "https://api.dev.us.paera.com/" diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/YieldSupply.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/YieldSupply.kt index b5e7ea38c6..ed04143824 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/config/YieldSupply.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/config/YieldSupply.kt @@ -2,7 +2,7 @@ package com.tangem.datasource.api.common.config import com.tangem.datasource.BuildConfig import com.tangem.datasource.api.common.AuthProvider -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.datasource.utils.RequestHeader import com.tangem.utils.ProviderSuspend import com.tangem.utils.info.AppInfoProvider @@ -10,7 +10,7 @@ import com.tangem.utils.version.AppVersionProvider /** YieldSupply [ApiConfig] */ internal class YieldSupply( - private val environmentConfigStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, private val appVersionProvider: AppVersionProvider, private val authProvider: AuthProvider, private val appInfoProvider: AppInfoProvider, @@ -78,8 +78,8 @@ internal class YieldSupply( ApiEnvironment.DEV_3, ApiEnvironment.STAGE, ApiEnvironment.STAGE_2, - -> environmentConfigStorage.getConfigSync().yieldModuleApiKeyDev - ApiEnvironment.PROD -> environmentConfigStorage.getConfigSync().yieldModuleApiKey + -> environmentConfig.yieldModuleApiKeyDev + ApiEnvironment.PROD -> environmentConfig.yieldModuleApiKey } ?: error("No tangem tech api config provided") } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/crypto/Sha256SignatureVerifier.kt b/core/datasource/src/main/java/com/tangem/datasource/crypto/Sha256SignatureVerifier.kt index 6938d499d7..40ffd06873 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/crypto/Sha256SignatureVerifier.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/crypto/Sha256SignatureVerifier.kt @@ -5,10 +5,10 @@ import com.tangem.crypto.CryptoUtils import com.tangem.datasource.api.common.config.ApiConfig import com.tangem.datasource.api.common.config.ApiEnvironment import com.tangem.datasource.api.common.config.managers.ApiConfigsManager -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig internal class Sha256SignatureVerifier( - private val environmentConfigStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, private val apiConfigsManager: ApiConfigsManager, ) : DataSignatureVerifier { @@ -24,8 +24,8 @@ internal class Sha256SignatureVerifier( private fun getPubKey(): String? { val expressConfig = apiConfigsManager.getEnvironmentConfig(ApiConfig.ID.Express) return when (expressConfig.environment) { - ApiEnvironment.PROD -> environmentConfigStorage.getConfigSync().express?.signVerifierPublicKey - else -> environmentConfigStorage.getConfigSync().devExpress?.signVerifierPublicKey + ApiEnvironment.PROD -> environmentConfig.express?.signVerifierPublicKey + else -> environmentConfig.devExpress?.signVerifierPublicKey } } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt index 20d4c632d5..e8db8ec219 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/ApiConfigsModule.kt @@ -2,7 +2,7 @@ package com.tangem.datasource.di import com.tangem.datasource.api.common.AuthProvider import com.tangem.datasource.api.common.config.* -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.lib.auth.ExpressAuthProvider import com.tangem.lib.auth.P2PEthPoolAuthProvider import com.tangem.lib.auth.StakeKitAuthProvider @@ -21,13 +21,13 @@ internal object ApiConfigsModule { @Provides @IntoSet fun provideExpressConfig( - environmentConfigStorage: EnvironmentConfigStorage, + environmentConfig: EnvironmentConfig, expressAuthProvider: ExpressAuthProvider, appVersionProvider: AppVersionProvider, appInfoProvider: AppInfoProvider, ): ApiConfig { return Express( - environmentConfigStorage = environmentConfigStorage, + environmentConfig = environmentConfig, expressAuthProvider = expressAuthProvider, appVersionProvider = appVersionProvider, appInfoProvider = appInfoProvider, @@ -73,12 +73,12 @@ internal object ApiConfigsModule { @Provides @IntoSet fun provideYieldSupplyConfig( - environmentConfigStorage: EnvironmentConfigStorage, + environmentConfig: EnvironmentConfig, appVersionProvider: AppVersionProvider, authProvider: AuthProvider, appInfoProvider: AppInfoProvider, ): ApiConfig = YieldSupply( - environmentConfigStorage = environmentConfigStorage, + environmentConfig = environmentConfig, appVersionProvider = appVersionProvider, authProvider = authProvider, appInfoProvider = appInfoProvider, @@ -87,21 +87,21 @@ internal object ApiConfigsModule { @Provides @IntoSet fun provideTangemPayBffConfig( + environmentConfig: EnvironmentConfig, appVersionProvider: AppVersionProvider, - environmentConfigStorage: EnvironmentConfigStorage, - ): ApiConfig = TangemPay.Bff(appVersionProvider, environmentConfigStorage) + ): ApiConfig = TangemPay.Bff(environmentConfig, appVersionProvider) @Provides @IntoSet fun provideTangemPayAuthConfig( + environmentConfig: EnvironmentConfig, appVersionProvider: AppVersionProvider, - environmentConfigStorage: EnvironmentConfigStorage, - ): ApiConfig = TangemPay.Auth(appVersionProvider, environmentConfigStorage) + ): ApiConfig = TangemPay.Auth(environmentConfig, appVersionProvider) @Provides @IntoSet - fun provideBlockAidConfig(environmentConfigStorage: EnvironmentConfigStorage): ApiConfig { - return BlockAid(environmentConfigStorage) + fun provideBlockAidConfig(environmentConfig: EnvironmentConfig): ApiConfig { + return BlockAid(environmentConfig) } @Provides diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/SecurityModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/SecurityModule.kt index 82d2ca69da..c04614c1f7 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/SecurityModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/SecurityModule.kt @@ -3,7 +3,7 @@ package com.tangem.datasource.di import com.tangem.datasource.api.common.config.managers.ApiConfigsManager import com.tangem.datasource.crypto.DataSignatureVerifier import com.tangem.datasource.crypto.Sha256SignatureVerifier -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -17,9 +17,9 @@ internal object SecurityModule { @Provides @Singleton fun provideDataSignatureVerifier( - environmentConfigStorage: EnvironmentConfigStorage, + environmentConfig: EnvironmentConfig, apiConfigsManager: ApiConfigsManager, ): DataSignatureVerifier { - return Sha256SignatureVerifier(environmentConfigStorage, apiConfigsManager) + return Sha256SignatureVerifier(environmentConfig, apiConfigsManager) } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/local/config/ConfigModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/local/config/ConfigModule.kt index 0ed4457201..c8052af564 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/local/config/ConfigModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/local/config/ConfigModule.kt @@ -1,9 +1,8 @@ package com.tangem.datasource.di.local.config import com.tangem.datasource.asset.loader.AssetLoader -import com.tangem.datasource.local.config.environment.DefaultEnvironmentConfigStorage import com.tangem.datasource.local.config.environment.EnvironmentConfig -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.converter.GeneratedEnvironmentConfigConverter import com.tangem.datasource.local.config.issuers.DefaultIssuersConfigStorage import com.tangem.datasource.local.config.issuers.IssuersConfigStorage import com.tangem.datasource.local.config.providers.BlockchainProvidersStorage @@ -23,11 +22,8 @@ internal object ConfigModule { @Provides @Singleton - fun provideEnvironmentConfigStorage(assetLoader: AssetLoader): EnvironmentConfigStorage { - return DefaultEnvironmentConfigStorage( - assetLoader = assetLoader, - environmentConfigStore = RuntimeStateStore(defaultValue = EnvironmentConfig()), - ) + fun provideEnvironmentConfig(): EnvironmentConfig { + return GeneratedEnvironmentConfigConverter.convert() } @Provides diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/config/environment/DefaultEnvironmentConfigStorage.kt b/core/datasource/src/main/java/com/tangem/datasource/local/config/environment/DefaultEnvironmentConfigStorage.kt deleted file mode 100644 index 1ad363973d..0000000000 --- a/core/datasource/src/main/java/com/tangem/datasource/local/config/environment/DefaultEnvironmentConfigStorage.kt +++ /dev/null @@ -1,41 +0,0 @@ -package com.tangem.datasource.local.config.environment - -import com.tangem.datasource.BuildConfig -import com.tangem.datasource.asset.loader.AssetLoader -import com.tangem.datasource.local.config.environment.converter.EnvironmentConfigConverter -import com.tangem.datasource.local.config.environment.models.EnvironmentConfigModel -import com.tangem.datasource.local.datastore.RuntimeStateStore -import kotlinx.coroutines.flow.Flow -import timber.log.Timber - -/** - * Default implementation for storing [EnvironmentConfig] - * - * @property assetLoader asset loader - * @property environmentConfigStore config store - */ -internal class DefaultEnvironmentConfigStorage( - private val assetLoader: AssetLoader, - private val environmentConfigStore: RuntimeStateStore, -) : EnvironmentConfigStorage { - - override suspend fun initialize(): EnvironmentConfig { - val environmentConfigModel = assetLoader.load(fileName = CONFIG_FILE_NAME) - ?: return environmentConfigStore.get().value - - val config = EnvironmentConfigConverter.convert(value = environmentConfigModel) - environmentConfigStore.store(value = config) - - Timber.i("Config [$CONFIG_FILE_NAME] loaded successfully") - - return config - } - - override fun getConfig(): Flow = environmentConfigStore.get() - - override fun getConfigSync(): EnvironmentConfig = environmentConfigStore.get().value - - private companion object { - const val CONFIG_FILE_NAME = "tangem-app-config/config_${BuildConfig.ENVIRONMENT}" - } -} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/config/environment/EnvironmentConfigStorage.kt b/core/datasource/src/main/java/com/tangem/datasource/local/config/environment/EnvironmentConfigStorage.kt deleted file mode 100644 index a46edc5d9a..0000000000 --- a/core/datasource/src/main/java/com/tangem/datasource/local/config/environment/EnvironmentConfigStorage.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.tangem.datasource.local.config.environment - -import kotlinx.coroutines.flow.Flow - -/** - * Storage for [EnvironmentConfig] - * -[REDACTED_AUTHOR] - */ -interface EnvironmentConfigStorage { - - /** Initialize and return [EnvironmentConfig] */ - suspend fun initialize(): EnvironmentConfig - - /** Get [EnvironmentConfig] as [Flow] */ - fun getConfig(): Flow - - /** Get [EnvironmentConfig] synchronously */ - fun getConfigSync(): EnvironmentConfig -} \ No newline at end of file diff --git a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/ApiConfigTest.kt b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/ApiConfigTest.kt index 2e0ccb145b..5650f72e16 100644 --- a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/ApiConfigTest.kt +++ b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/ApiConfigTest.kt @@ -2,6 +2,7 @@ package com.tangem.datasource.api.common.config import com.google.common.truth.Truth import com.tangem.datasource.api.common.AuthProvider +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.utils.ProviderSuspend import io.mockk.clearMocks import io.mockk.every @@ -19,6 +20,7 @@ class ApiConfigTest { private val appAuthProvider = mockk() private val apiKeyProvider = mockk>() + private val environmentConfig = mockk() @BeforeEach fun setup() { @@ -47,7 +49,7 @@ class ApiConfigTest { when (it) { ApiConfig.ID.Express -> { Express( - environmentConfigStorage = mockk(), + environmentConfig = environmentConfig, expressAuthProvider = mockk(), appVersionProvider = mockk(), appInfoProvider = mockk(), @@ -55,7 +57,7 @@ class ApiConfigTest { } ApiConfig.ID.YieldSupply -> { YieldSupply( - environmentConfigStorage = mockk(), + environmentConfig = environmentConfig, appVersionProvider = mockk(), authProvider = appAuthProvider, appInfoProvider = mockk(), @@ -70,14 +72,14 @@ class ApiConfigTest { } ApiConfig.ID.StakeKit -> StakeKit(stakeKitAuthProvider = mockk()) ApiConfig.ID.TangemPay -> TangemPay.Bff( + environmentConfig = environmentConfig, appVersionProvider = mockk(), - environmentConfigStorage = mockk() ) ApiConfig.ID.TangemPayAuth -> TangemPay.Auth( + environmentConfig = environmentConfig, appVersionProvider = mockk(), - environmentConfigStorage = mockk() ) - ApiConfig.ID.BlockAid -> BlockAid(configStorage = mockk()) + ApiConfig.ID.BlockAid -> BlockAid(environmentConfig = environmentConfig) ApiConfig.ID.MoonPay -> MoonPay() ApiConfig.ID.P2PEthPool -> P2PEthPool(p2pAuthProvider = mockk()) ApiConfig.ID.News -> News( diff --git a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/MockEnvironmentConfigStorage.kt b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/MockEnvironmentConfigStorage.kt deleted file mode 100644 index 530d4de06e..0000000000 --- a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/MockEnvironmentConfigStorage.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.tangem.datasource.api.common.config.managers - -import com.tangem.datasource.local.config.environment.EnvironmentConfig -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage -import com.tangem.datasource.local.config.environment.models.ExpressModel -import kotlinx.coroutines.flow.flowOf - -/** - * Mock [EnvironmentConfigStorage] implementation for [ProdApiConfigsManagerTest] - * -[REDACTED_AUTHOR] - */ -internal class MockEnvironmentConfigStorage : EnvironmentConfigStorage { - - private val environmentConfig = EnvironmentConfig( - express = ExpressModel(apiKey = EXPRESS_API_KEY, signVerifierPublicKey = "vocibus"), - devExpress = ExpressModel(apiKey = EXPRESS_DEV_API_KEY, signVerifierPublicKey = "pellentesque"), - blockAidApiKey = BLOCK_AID_API_KEY, - tangemApiKey = TANGEM_API_KEY, - tangemApiKeyDev = TANGEM_API_KEY_DEV, - bffStaticToken = TANGEM_PAY_BFF_KEY, - bffStaticTokenDev = TANGEM_PAY_BFF_KEY_DEV, - tangemApiKeyStage = TANGEM_API_KEY_STAGE, - yieldModuleApiKey = YIELD_MODULE_KEY, - yieldModuleApiKeyDev = YIELD_MODULE_KEY_DEV, - ) - - override suspend fun initialize() = environmentConfig - override fun getConfig() = flowOf(environmentConfig) - override fun getConfigSync() = environmentConfig - - companion object { - const val EXPRESS_API_KEY = "express_api_key" - const val EXPRESS_DEV_API_KEY = "express_dev_api_key" - const val BLOCK_AID_API_KEY = "block_aid_api_key" - const val TANGEM_API_KEY = "tangem_api_key" - const val TANGEM_API_KEY_DEV = "tangem_api_key_dev" - const val TANGEM_PAY_BFF_KEY = "tangem_pay_bff_key" - const val TANGEM_PAY_BFF_KEY_DEV = "tangem_pay_bff_key_dev" - const val TANGEM_GASLESS_API_KEY = "tangem_gasless_api_key" - const val TANGEM_API_KEY_STAGE = "tangem_api_key_stage" - const val YIELD_MODULE_KEY = "yield_module_api_key" - const val YIELD_MODULE_KEY_DEV = "yield_module_api_key_dev" - } -} \ No newline at end of file diff --git a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt index 76572d804f..7b324258f2 100644 --- a/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt +++ b/core/datasource/src/test/kotlin/com/tangem/datasource/api/common/config/managers/ProdApiConfigsManagerTest.kt @@ -10,10 +10,8 @@ import com.tangem.datasource.api.common.config.ApiConfig.Companion.EXTERNAL_BUIL import com.tangem.datasource.api.common.config.ApiConfig.Companion.INTERNAL_BUILD_TYPE import com.tangem.datasource.api.common.config.ApiConfig.Companion.MOCKED_BUILD_TYPE import com.tangem.datasource.api.common.config.ApiConfig.Companion.RELEASE_BUILD_TYPE -import com.tangem.datasource.api.common.config.managers.MockEnvironmentConfigStorage.Companion.BLOCK_AID_API_KEY -import com.tangem.datasource.api.common.config.managers.MockEnvironmentConfigStorage.Companion.TANGEM_API_KEY -import com.tangem.datasource.api.common.config.managers.MockEnvironmentConfigStorage.Companion.TANGEM_GASLESS_API_KEY -import com.tangem.datasource.api.common.config.managers.MockEnvironmentConfigStorage.Companion.TANGEM_PAY_BFF_KEY_DEV +import com.tangem.datasource.local.config.environment.EnvironmentConfig +import com.tangem.datasource.local.config.environment.models.ExpressModel import com.tangem.domain.staking.model.ethpool.P2PEthPoolStakingConfig import com.tangem.lib.auth.ExpressAuthProvider import com.tangem.lib.auth.P2PEthPoolAuthProvider @@ -39,7 +37,7 @@ import java.util.TimeZone @TestInstance(TestInstance.Lifecycle.PER_CLASS) internal class ProdApiConfigsManagerTest { - private val environmentConfigStorage = MockEnvironmentConfigStorage() + private val environmentConfig = createMockEnvironmentConfig() private val appVersionProvider = mockk() private val expressAuthProvider = mockk() private val stakeKitAuthProvider = mockk() @@ -94,7 +92,7 @@ internal class ProdApiConfigsManagerTest { when (it) { ApiConfig.ID.Express -> { Express( - environmentConfigStorage = environmentConfigStorage, + environmentConfig = environmentConfig, expressAuthProvider = expressAuthProvider, appVersionProvider = appVersionProvider, appInfoProvider = appInfoProvider, @@ -102,7 +100,7 @@ internal class ProdApiConfigsManagerTest { } ApiConfig.ID.YieldSupply -> { YieldSupply( - environmentConfigStorage = environmentConfigStorage, + environmentConfig = environmentConfig, appVersionProvider = appVersionProvider, authProvider = appAuthProvider, appInfoProvider = appInfoProvider, @@ -117,14 +115,14 @@ internal class ProdApiConfigsManagerTest { } ApiConfig.ID.StakeKit -> StakeKit(stakeKitAuthProvider = stakeKitAuthProvider) ApiConfig.ID.TangemPay -> TangemPay.Bff( + environmentConfig = environmentConfig, appVersionProvider = appVersionProvider, - environmentConfigStorage = environmentConfigStorage, ) ApiConfig.ID.TangemPayAuth -> TangemPay.Auth( + environmentConfig = environmentConfig, appVersionProvider = appVersionProvider, - environmentConfigStorage = environmentConfigStorage, ) - ApiConfig.ID.BlockAid -> BlockAid(configStorage = environmentConfigStorage) + ApiConfig.ID.BlockAid -> BlockAid(environmentConfig = environmentConfig) ApiConfig.ID.MoonPay -> MoonPay() ApiConfig.ID.P2PEthPool -> P2PEthPool(p2pAuthProvider = p2pEthPoolAuthProvider) ApiConfig.ID.News -> News( @@ -188,9 +186,9 @@ internal class ProdApiConfigsManagerTest { headers = mapOf( "api-key" to ProviderSuspend { if (environment == ApiEnvironment.PROD) { - MockEnvironmentConfigStorage.EXPRESS_API_KEY + EXPRESS_API_KEY } else { - MockEnvironmentConfigStorage.EXPRESS_DEV_API_KEY + EXPRESS_DEV_API_KEY } }, "session-id" to ProviderSuspend { EXPRESS_SESSION_ID }, @@ -237,7 +235,7 @@ internal class ProdApiConfigsManagerTest { environment = ApiEnvironment.PROD, baseUrl = "https://yield.tangem.org/", headers = mapOf( - "api-key" to ProviderSuspend { MockEnvironmentConfigStorage.YIELD_MODULE_KEY }, + "api-key" to ProviderSuspend { YIELD_MODULE_KEY }, "card_id" to ProviderSuspend { APP_CARD_ID }, "card_public_key" to ProviderSuspend { APP_CARD_PUBLIC_KEY }, "version" to ProviderSuspend { VERSION_NAME }, @@ -426,5 +424,48 @@ internal class ProdApiConfigsManagerTest { const val P2P_API_KEY = "p2p_api_key" const val APP_CARD_ID = "app_card_id" const val APP_CARD_PUBLIC_KEY = "Bearer app_public_key" + + // Mock config values + const val TANGEM_API_KEY = "tangem_api_key" + const val TANGEM_GASLESS_API_KEY = "tangem_gasless_api_key" + const val TANGEM_PAY_BFF_KEY_DEV = "tangem_pay_bff_key_dev" + const val BLOCK_AID_API_KEY = "block_aid_api_key" + const val EXPRESS_API_KEY = "express_api_key" + const val EXPRESS_DEV_API_KEY = "express_dev_api_key" + const val YIELD_MODULE_KEY = "yield_module_key" + + fun createMockEnvironmentConfig(): EnvironmentConfig { + return EnvironmentConfig( + moonPayApiKey = "moon_pay_api_key", + moonPayApiSecretKey = "moon_pay_secret_key", + mercuryoWidgetId = "mercuryo_widget_id", + mercuryoSecret = "mercuryo_secret", + blockchainSdkConfig = mockk(relaxed = true), + amplitudeApiKey = "amplitude_api_key", + appsFlyerApiKey = "appsflyer_api_key", + appsAppId = "apps_app_id", + walletConnectProjectId = "wallet_connect_project_id", + express = ExpressModel( + apiKey = EXPRESS_API_KEY, + signVerifierPublicKey = "express_public_key", + ), + devExpress = ExpressModel( + apiKey = EXPRESS_DEV_API_KEY, + signVerifierPublicKey = "express_dev_public_key", + ), + stakeKitApiKey = STAKE_KIT_API_KEY, + p2pApiKey = null, + blockAidApiKey = BLOCK_AID_API_KEY, + tangemApiKey = TANGEM_API_KEY, + tangemApiKeyDev = TANGEM_API_KEY, + tangemApiKeyStage = TANGEM_API_KEY, + yieldModuleApiKey = YIELD_MODULE_KEY, + yieldModuleApiKeyDev = YIELD_MODULE_KEY, + bffStaticToken = TANGEM_PAY_BFF_KEY_DEV, + bffStaticTokenDev = TANGEM_PAY_BFF_KEY_DEV, + gaslessTxApiKeyDev = TANGEM_GASLESS_API_KEY, + gaslessTxApiKey = TANGEM_GASLESS_API_KEY, + ) + } } } \ No newline at end of file diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt b/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt index 88a6e8f021..156a72544e 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt @@ -18,7 +18,7 @@ import com.tangem.datasource.appcurrency.AppCurrencyResponseStore import com.tangem.datasource.crypto.DataSignatureVerifier import com.tangem.datasource.di.NetworkMoshi import com.tangem.datasource.exchangeservice.hotcrypto.HotCryptoResponseStore -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.datasource.local.onramp.countries.OnrampCountriesStore import com.tangem.datasource.local.onramp.currencies.OnrampCurrenciesStore import com.tangem.datasource.local.onramp.pairs.OnrampPairsStore @@ -131,11 +131,11 @@ internal object OnrampDataModule { @Provides @Singleton fun provideMercuryoRepository( - environmentConfigStorage: EnvironmentConfigStorage, + environmentConfig: EnvironmentConfig, dispatchersProvider: CoroutineDispatcherProvider, ): LegacyTopUpRepository { return MercuryoTopUpRepository( - environmentConfigStorage = environmentConfigStorage, + environmentConfig = environmentConfig, dispatchersProvider = dispatchersProvider, ) } diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt index a2b80fec76..9eaee443e1 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt @@ -5,7 +5,6 @@ import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.extensions.calculateSha512 import com.tangem.common.extensions.toHexString import com.tangem.datasource.local.config.environment.EnvironmentConfig -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.onramp.repositories.LegacyTopUpRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -13,14 +12,13 @@ import kotlinx.coroutines.withContext import javax.inject.Inject internal class MercuryoTopUpRepository @Inject constructor( - private val environmentConfigStorage: EnvironmentConfigStorage, + private val environmentConfig: EnvironmentConfig, private val dispatchersProvider: CoroutineDispatcherProvider, ) : LegacyTopUpRepository { override suspend fun getTopUpUrl(cryptoCurrency: CryptoCurrency, walletAddress: String): String = withContext(dispatchersProvider.default) { val blockchain = cryptoCurrency.network.toBlockchain() - val environmentConfig = environmentConfigStorage.getConfigSync() val builder = Uri.Builder() .scheme(LegacyTopUpRepository.SCHEME) diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt index f4ca59e975..a812c22529 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/DefaultBlockchainSDKFactory.kt @@ -1,8 +1,8 @@ package com.tangem.blockchainsdk +import com.tangem.blockchain.common.BlockchainSdkConfig import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.blockchainsdk.providers.BlockchainProvidersTypesManager -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage import com.tangem.datasource.local.config.providers.models.ProviderModel import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.CoroutineScope @@ -15,16 +15,16 @@ internal typealias BlockchainProvidersResponse = Map /** * Implementation of Blockchain SDK components factory * + * @property blockchainSdkConfig blockchain SDK config * @property blockchainProvidersTypesManager blockchain providers types manager - * @property environmentConfigStorage environment config storage * @property walletManagerFactoryCreator wallet manager factory creator * @param dispatchers coroutine dispatchers provider * [REDACTED_AUTHOR] */ internal class DefaultBlockchainSDKFactory( + private val blockchainSdkConfig: BlockchainSdkConfig, private val blockchainProvidersTypesManager: BlockchainProvidersTypesManager, - private val environmentConfigStorage: EnvironmentConfigStorage, private val walletManagerFactoryCreator: WalletManagerFactoryCreator, dispatchers: CoroutineDispatcherProvider, ) : BlockchainSDKFactory { @@ -43,7 +43,7 @@ internal class DefaultBlockchainSDKFactory( private fun createWalletManagerFactory(): Flow { return combine( - flow = environmentConfigStorage.getConfig().map { it.blockchainSdkConfig }, + flow = flowOf(blockchainSdkConfig), flow2 = blockchainProvidersTypesManager.get(), // flow3 = subscribe on feature toggles changes, TODO: [REDACTED_JIRA] transform = walletManagerFactoryCreator::create, diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt index cce9a8c942..a8c5f4b3f5 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/di/BlockchainSDKFactoryModule.kt @@ -19,7 +19,7 @@ import com.tangem.blockchainsdk.providers.ProdBlockchainProvidersTypesManager import com.tangem.blockchainsdk.providers.dev.BlockchainProvidersResponseSerializer import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.di.NetworkMoshi -import com.tangem.datasource.local.config.environment.EnvironmentConfigStorage +import com.tangem.datasource.local.config.environment.EnvironmentConfig import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.libs.blockchain_sdk.BuildConfig import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -39,14 +39,14 @@ internal object BlockchainSDKFactoryModule { @Provides @Singleton fun provideBlockchainSDKFactory( + environmentConfig: EnvironmentConfig, blockchainProvidersTypesManager: BlockchainProvidersTypesManager, - environmentConfigStorage: EnvironmentConfigStorage, walletManagerFactoryCreator: WalletManagerFactoryCreator, dispatchers: CoroutineDispatcherProvider, ): BlockchainSDKFactory { return DefaultBlockchainSDKFactory( + blockchainSdkConfig = environmentConfig.blockchainSdkConfig, blockchainProvidersTypesManager = blockchainProvidersTypesManager, - environmentConfigStorage = environmentConfigStorage, walletManagerFactoryCreator = walletManagerFactoryCreator, dispatchers = dispatchers, )