Updated on 2026-08-14

This commit is contained in:
Tangem 2025-06-09 18:33:05 +04:00
parent 0551a8f2fe
commit 9cc51216bc
5 changed files with 57 additions and 12 deletions

View file

@ -59,7 +59,7 @@ import com.tangem.domain.wallets.repository.WalletsRepository
import com.tangem.features.onboarding.v2.OnboardingV2FeatureToggles import com.tangem.features.onboarding.v2.OnboardingV2FeatureToggles
import com.tangem.features.onramp.OnrampFeatureToggles import com.tangem.features.onramp.OnrampFeatureToggles
import com.tangem.operations.attestation.OnlineCardVerifier 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.AnalyticsFactory
import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder
import com.tangem.tap.common.analytics.handlers.BlockchainExceptionHandler import com.tangem.tap.common.analytics.handlers.BlockchainExceptionHandler
@ -311,7 +311,8 @@ abstract class TangemApplication : Application(), ImageLoaderFactory, Configurat
createNetworkLoggingInterceptor(), createNetworkLoggingInterceptor(),
ChuckerInterceptor(this), ChuckerInterceptor(this),
) )
TangemApiServiceLogging.addInterceptors(
TangemApiServiceSettings.addInterceptors(
createNetworkLoggingInterceptor(), createNetworkLoggingInterceptor(),
ChuckerInterceptor(this), ChuckerInterceptor(this),
NetworkLogsSaveInterceptor(appLogsStore), NetworkLogsSaveInterceptor(appLogsStore),

View file

@ -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.AppPreferencesStore
import com.tangem.datasource.local.preferences.PreferencesKeys import com.tangem.datasource.local.preferences.PreferencesKeys
import com.tangem.datasource.local.preferences.utils.getObjectMap 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.DefaultSessionViewDelegate
import com.tangem.sdk.api.featuretoggles.CardSdkFeatureToggles import com.tangem.sdk.api.featuretoggles.CardSdkFeatureToggles
import com.tangem.sdk.extensions.* import com.tangem.sdk.extensions.*
@ -29,6 +32,8 @@ import com.tangem.sdk.nfc.NfcManager
import com.tangem.sdk.storage.create import com.tangem.sdk.storage.create
import com.tangem.tap.foregroundActivityObserver import com.tangem.tap.foregroundActivityObserver
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.info.AppInfoProvider
import com.tangem.utils.version.AppVersionProvider
import com.tangem.wallet.BuildConfig import com.tangem.wallet.BuildConfig
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
@ -45,12 +50,15 @@ import javax.inject.Singleton
* *
[REDACTED_AUTHOR] [REDACTED_AUTHOR]
*/ */
@Suppress("LongParameterList")
@Singleton @Singleton
internal class DefaultCardSdkProvider @Inject constructor( internal class DefaultCardSdkProvider @Inject constructor(
private val analyticsExceptionHandler: AnalyticsExceptionHandler, private val analyticsExceptionHandler: AnalyticsExceptionHandler,
private val dispatchers: CoroutineDispatcherProvider, private val dispatchers: CoroutineDispatcherProvider,
private val cardSdkFeatureToggles: CardSdkFeatureToggles, private val cardSdkFeatureToggles: CardSdkFeatureToggles,
private val apiConfigsManager: ApiConfigsManager, private val apiConfigsManager: ApiConfigsManager,
appVersionProvider: AppVersionProvider,
appInfoProvider: AppInfoProvider,
appPreferencesStore: AppPreferencesStore, appPreferencesStore: AppPreferencesStore,
) : CardSdkProvider, CardSdkOwner { ) : CardSdkProvider, CardSdkOwner {
@ -82,6 +90,15 @@ internal class DefaultCardSdkProvider @Inject constructor(
} }
.launchIn(CoroutineScope(SupervisorJob() + dispatchers.main)) .launchIn(CoroutineScope(SupervisorJob() + dispatchers.main))
} }
TangemApiServiceSettings.addInterceptors(
AddHeadersInterceptor(
requestHeader = RequestHeader.AppVersionPlatformHeaders(
appVersionProvider = appVersionProvider,
appInfoProvider = appInfoProvider,
),
),
)
} }
override fun register(activity: FragmentActivity) = runBlocking(dispatchers.mainImmediate) { override fun register(activity: FragmentActivity) = runBlocking(dispatchers.mainImmediate) {

View file

@ -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<RequestHeader>,
) : 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)
}
}

View file

@ -19,15 +19,7 @@ import retrofit2.Invocation
/** Extension for adding headers [requestHeaders] to every [OkHttpClient] request */ /** Extension for adding headers [requestHeaders] to every [OkHttpClient] request */
internal fun OkHttpClient.Builder.addHeaders(vararg requestHeaders: RequestHeader): OkHttpClient.Builder { internal fun OkHttpClient.Builder.addHeaders(vararg requestHeaders: RequestHeader): OkHttpClient.Builder {
return addInterceptor( return addInterceptor(
Interceptor { chain -> interceptor = AddHeadersInterceptor(requestHeaders = requestHeaders.toSet()),
val request = chain.request().newBuilder().apply {
requestHeaders
.flatMap { it.values.toList() }
.forEach { addHeader(it.first, runBlocking { it.second.invoke() }) }
}.build()
chain.proceed(request)
},
) )
} }

View file

@ -7,7 +7,7 @@
tangemBlockchainSdk = "develop-1079" tangemBlockchainSdk = "develop-1079"
#tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds #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 ^ #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^
tangemVico = "2.0.0-alpha.25-tangem12" tangemVico = "2.0.0-alpha.25-tangem12"
#tangemVico = "0.0.1" # Keep it! - used for local builds ^ #tangemVico = "0.0.1" # Keep it! - used for local builds ^