From cf6b5dbabb26cdf91979ba10405b91f183180dde Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 13 Aug 2025 19:05:20 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../common/SwitchEnvironmentInterceptor.kt | 13 +++++++++---- .../datasource/di/utils/RetrofitApiBuilder.kt | 19 ++++++++++++++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/SwitchEnvironmentInterceptor.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/SwitchEnvironmentInterceptor.kt index 1b2a53ec3c..ee59740bff 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/SwitchEnvironmentInterceptor.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/SwitchEnvironmentInterceptor.kt @@ -15,12 +15,14 @@ import okio.IOException * Switch api environment [Interceptor] * * @property id api config id [ApiConfig.ID] + * @property baseUrls base urls for all api config environments * @property apiConfigsManager api configs manager * [REDACTED_AUTHOR] */ internal class SwitchEnvironmentInterceptor( private val id: ApiConfig.ID, + private val baseUrls: Set, private val apiConfigsManager: ApiConfigsManager, ) : Interceptor { @@ -39,10 +41,13 @@ internal class SwitchEnvironmentInterceptor( return chain.proceed(request) } - private fun HttpUrl.adjustBaseUrl(url: String): HttpUrl { - return this.newBuilder() - .host(host = url.toHttpUrl().host) - .build() + private fun HttpUrl.adjustBaseUrl(newBaseUrl: String): HttpUrl { + val currentUrl = this.toString() + val currentBaseUrl = baseUrls.first { currentUrl.contains(it) } + + return currentUrl + .replace(oldValue = currentBaseUrl, newValue = newBaseUrl) + .toHttpUrl() } private fun Request.Builder.addHeaders(headers: Map>): Request.Builder { diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/utils/RetrofitApiBuilder.kt b/core/datasource/src/main/java/com/tangem/datasource/di/utils/RetrofitApiBuilder.kt index 87de60fbd0..ee3a3cffd6 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/utils/RetrofitApiBuilder.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/utils/RetrofitApiBuilder.kt @@ -8,6 +8,7 @@ import com.tangem.datasource.BuildConfig import com.tangem.datasource.api.common.SwitchEnvironmentInterceptor import com.tangem.datasource.api.common.config.ApiConfig import com.tangem.datasource.api.common.config.ApiConfig.Companion.MOCKED_BUILD_TYPE +import com.tangem.datasource.api.common.config.ApiConfigs import com.tangem.datasource.api.common.config.ApiEnvironmentConfig import com.tangem.datasource.api.common.config.managers.ApiConfigsManager import com.tangem.datasource.api.common.createNetworkLoggingInterceptor @@ -42,6 +43,7 @@ import javax.inject.Singleton */ @Singleton internal class RetrofitApiBuilder @Inject constructor( + private val apiConfigs: ApiConfigs, private val apiConfigsManager: ApiConfigsManager, @NetworkMoshi private val moshi: Moshi, private val analyticsErrorHandler: AnalyticsErrorHandler, @@ -49,6 +51,8 @@ internal class RetrofitApiBuilder @Inject constructor( private val appLogsStore: AppLogsStore, ) { + private val configsBaseUrls: Map> = getConfigsBaseUrls() + /** * Builds a Retrofit API instance for the specified API configuration ID * @@ -95,13 +99,26 @@ internal class RetrofitApiBuilder @Inject constructor( val writeTimeoutSeconds: Long? = null, ) + private fun getConfigsBaseUrls(): Map> { + return apiConfigs.associate { config -> + val allBaseUrls = config.environmentConfigs.mapTo(hashSetOf(), ApiEnvironmentConfig::baseUrl) + + config.id to allBaseUrls + } + } + private fun OkHttpClient.Builder.applyApiConfig( apiConfigId: ApiConfig.ID, environmentConfig: ApiEnvironmentConfig, ): OkHttpClient.Builder { return if (BuildConfig.TESTER_MENU_ENABLED || BuildConfig.BUILD_TYPE == MOCKED_BUILD_TYPE) { addInterceptor( - interceptor = SwitchEnvironmentInterceptor(id = apiConfigId, apiConfigsManager = apiConfigsManager), + interceptor = SwitchEnvironmentInterceptor( + id = apiConfigId, + baseUrls = configsBaseUrls[apiConfigId] + ?: error("Base URLs for ApiConfig with id [$apiConfigId] not found"), + apiConfigsManager = apiConfigsManager, + ), ) } else { val headers = environmentConfig.headers