diff --git a/app/src/main/java/com/tangem/tap/TangemApplication.kt b/app/src/main/java/com/tangem/tap/TangemApplication.kt index 0114cc78ba..2be2d0310a 100644 --- a/app/src/main/java/com/tangem/tap/TangemApplication.kt +++ b/app/src/main/java/com/tangem/tap/TangemApplication.kt @@ -59,7 +59,7 @@ import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.features.onboarding.v2.OnboardingV2FeatureToggles import com.tangem.features.onramp.OnrampFeatureToggles import com.tangem.operations.attestation.OnlineCardVerifier -import com.tangem.operations.attestation.api.TangemApiServiceLogging +import com.tangem.operations.attestation.api.TangemApiServiceSettings import com.tangem.tap.common.analytics.AnalyticsFactory import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder import com.tangem.tap.common.analytics.handlers.BlockchainExceptionHandler @@ -311,7 +311,8 @@ abstract class TangemApplication : Application(), ImageLoaderFactory, Configurat createNetworkLoggingInterceptor(), ChuckerInterceptor(this), ) - TangemApiServiceLogging.addInterceptors( + + TangemApiServiceSettings.addInterceptors( createNetworkLoggingInterceptor(), ChuckerInterceptor(this), NetworkLogsSaveInterceptor(appLogsStore), diff --git a/app/src/main/java/com/tangem/tap/data/DefaultCardSdkProvider.kt b/app/src/main/java/com/tangem/tap/data/DefaultCardSdkProvider.kt index b162d5f389..052cdbf1e2 100644 --- a/app/src/main/java/com/tangem/tap/data/DefaultCardSdkProvider.kt +++ b/app/src/main/java/com/tangem/tap/data/DefaultCardSdkProvider.kt @@ -21,6 +21,9 @@ import com.tangem.datasource.api.common.config.managers.ApiConfigsManager import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.utils.getObjectMap +import com.tangem.datasource.utils.AddHeadersInterceptor +import com.tangem.datasource.utils.RequestHeader +import com.tangem.operations.attestation.api.TangemApiServiceSettings import com.tangem.sdk.DefaultSessionViewDelegate import com.tangem.sdk.api.featuretoggles.CardSdkFeatureToggles import com.tangem.sdk.extensions.* @@ -29,6 +32,8 @@ import com.tangem.sdk.nfc.NfcManager import com.tangem.sdk.storage.create import com.tangem.tap.foregroundActivityObserver import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import com.tangem.utils.info.AppInfoProvider +import com.tangem.utils.version.AppVersionProvider import com.tangem.wallet.BuildConfig import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob @@ -45,12 +50,15 @@ import javax.inject.Singleton * [REDACTED_AUTHOR] */ +@Suppress("LongParameterList") @Singleton internal class DefaultCardSdkProvider @Inject constructor( private val analyticsExceptionHandler: AnalyticsExceptionHandler, private val dispatchers: CoroutineDispatcherProvider, private val cardSdkFeatureToggles: CardSdkFeatureToggles, private val apiConfigsManager: ApiConfigsManager, + appVersionProvider: AppVersionProvider, + appInfoProvider: AppInfoProvider, appPreferencesStore: AppPreferencesStore, ) : CardSdkProvider, CardSdkOwner { @@ -82,6 +90,15 @@ internal class DefaultCardSdkProvider @Inject constructor( } .launchIn(CoroutineScope(SupervisorJob() + dispatchers.main)) } + + TangemApiServiceSettings.addInterceptors( + AddHeadersInterceptor( + requestHeader = RequestHeader.AppVersionPlatformHeaders( + appVersionProvider = appVersionProvider, + appInfoProvider = appInfoProvider, + ), + ), + ) } override fun register(activity: FragmentActivity) = runBlocking(dispatchers.mainImmediate) { diff --git a/core/datasource/src/main/java/com/tangem/datasource/utils/AddHeadersInterceptor.kt b/core/datasource/src/main/java/com/tangem/datasource/utils/AddHeadersInterceptor.kt new file mode 100644 index 0000000000..5a896ff3e1 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/utils/AddHeadersInterceptor.kt @@ -0,0 +1,35 @@ +package com.tangem.datasource.utils + +import kotlinx.coroutines.runBlocking +import okhttp3.Interceptor +import okhttp3.Response + +/** + * Interceptors for adding headers + * + * @property requestHeaders request headers + * +[REDACTED_AUTHOR] + */ +class AddHeadersInterceptor( + private val requestHeaders: Set, +) : Interceptor { + + constructor(requestHeader: RequestHeader) : this(requestHeaders = setOf(requestHeader)) + + override fun intercept(chain: Interceptor.Chain): Response { + val requestBuilder = chain.request().newBuilder() + + requestHeaders + .flatMap { it.values.toList() } + .forEach { (name, valueProvider) -> + val value = runBlocking { valueProvider() } + + requestBuilder.addHeader(name = name, value = value) + } + + val request = requestBuilder.build() + + return chain.proceed(request) + } +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt b/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt index c3b1cfb588..676cebfdaf 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/utils/HttpClientExt.kt @@ -19,15 +19,7 @@ import retrofit2.Invocation /** Extension for adding headers [requestHeaders] to every [OkHttpClient] request */ internal fun OkHttpClient.Builder.addHeaders(vararg requestHeaders: RequestHeader): OkHttpClient.Builder { return addInterceptor( - Interceptor { chain -> - val request = chain.request().newBuilder().apply { - requestHeaders - .flatMap { it.values.toList() } - .forEach { addHeader(it.first, runBlocking { it.second.invoke() }) } - }.build() - - chain.proceed(request) - }, + interceptor = AddHeadersInterceptor(requestHeaders = requestHeaders.toSet()), ) } diff --git a/gradle/tangem_dependencies.toml b/gradle/tangem_dependencies.toml index 437fbf0649..7d4da9d5f9 100644 --- a/gradle/tangem_dependencies.toml +++ b/gradle/tangem_dependencies.toml @@ -7,7 +7,7 @@ tangemBlockchainSdk = "develop-1079" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "develop-475" +tangemCardSdk = "develop-480" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem12" #tangemVico = "0.0.1" # Keep it! - used for local builds ^