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

@ -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 */
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()),
)
}