Updated on 2026-08-14
This commit is contained in:
parent
ad3e6eb322
commit
cba839d8f2
8 changed files with 69 additions and 22 deletions
|
|
@ -23,12 +23,14 @@ sealed class ApiConfig {
|
|||
enum class ID {
|
||||
Express,
|
||||
TangemTech,
|
||||
StakeKit,
|
||||
}
|
||||
|
||||
private fun initializeId(): ID {
|
||||
return when (this) {
|
||||
is Express -> ID.Express
|
||||
is TangemTech -> ID.TangemTech
|
||||
is StakeKit -> ID.StakeKit
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
package com.tangem.datasource.api.common.config
|
||||
|
||||
import com.tangem.lib.auth.StakeKitAuthProvider
|
||||
import com.tangem.utils.Provider
|
||||
|
||||
/**
|
||||
* StakeKit [ApiConfig]
|
||||
*
|
||||
* @property stakeKitAuthProvider StakeKit auth provider
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
internal class StakeKit(
|
||||
private val stakeKitAuthProvider: StakeKitAuthProvider,
|
||||
) : ApiConfig() {
|
||||
|
||||
override val defaultEnvironment: ApiEnvironment = ApiEnvironment.PROD
|
||||
|
||||
override val environmentConfigs: List<ApiEnvironmentConfig> = listOf(
|
||||
createProdEnvironment(),
|
||||
)
|
||||
|
||||
private fun createProdEnvironment(): ApiEnvironmentConfig {
|
||||
return ApiEnvironmentConfig(
|
||||
environment = ApiEnvironment.PROD,
|
||||
baseUrl = "https://api.stakek.it/v1/",
|
||||
headers = mapOf(
|
||||
"X-API-KEY" to Provider(stakeKitAuthProvider::getApiKey),
|
||||
"accept" to Provider { "application/json" },
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -2,9 +2,11 @@ package com.tangem.datasource.di
|
|||
|
||||
import com.tangem.datasource.api.common.config.ApiConfig
|
||||
import com.tangem.datasource.api.common.config.Express
|
||||
import com.tangem.datasource.api.common.config.StakeKit
|
||||
import com.tangem.datasource.api.common.config.TangemTech
|
||||
import com.tangem.datasource.config.ConfigManager
|
||||
import com.tangem.lib.auth.ExpressAuthProvider
|
||||
import com.tangem.lib.auth.StakeKitAuthProvider
|
||||
import com.tangem.utils.version.AppVersionProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
|
|
@ -26,6 +28,12 @@ internal object ApiConfigsModule {
|
|||
return Express(configManager, expressAuthProvider, appVersionProvider)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideStakeKitConfig(stakeKitAuthProvider: StakeKitAuthProvider): ApiConfig {
|
||||
return StakeKit(stakeKitAuthProvider)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@IntoSet
|
||||
fun provideTangemTechConfig(appVersionProvider: AppVersionProvider): ApiConfig = TangemTech(appVersionProvider)
|
||||
|
|
|
|||
|
|
@ -17,8 +17,6 @@ import com.tangem.datasource.api.tangemTech.TangemTechApiV2
|
|||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.utils.*
|
||||
import com.tangem.datasource.utils.RequestHeader.AppVersionPlatformHeaders
|
||||
import com.tangem.datasource.utils.RequestHeader.StakeKit
|
||||
import com.tangem.lib.auth.StakeKitAuthProvider
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.version.AppVersionProvider
|
||||
import dagger.Module
|
||||
|
|
@ -65,8 +63,7 @@ class NetworkModule {
|
|||
.baseUrl(environmentConfig.baseUrl)
|
||||
.client(
|
||||
OkHttpClient.Builder()
|
||||
.addEnvironmentSwitcher(ApiConfig.ID.Express, apiConfigsManager)
|
||||
.addHeaders(environmentConfig.headers)
|
||||
.applyApiConfig(ApiConfig.ID.Express, apiConfigsManager)
|
||||
.addLoggers(context)
|
||||
.build(),
|
||||
)
|
||||
|
|
@ -79,15 +76,17 @@ class NetworkModule {
|
|||
fun provideStakeKitApi(
|
||||
@NetworkMoshi moshi: Moshi,
|
||||
@ApplicationContext context: Context,
|
||||
stakeKitAuthProvider: StakeKitAuthProvider,
|
||||
apiConfigsManager: ApiConfigsManager,
|
||||
): StakeKitApi {
|
||||
val environmentConfig = apiConfigsManager.getEnvironmentConfig(id = ApiConfig.ID.StakeKit)
|
||||
|
||||
return Retrofit.Builder()
|
||||
.addConverterFactory(MoshiConverterFactory.create(moshi))
|
||||
.addCallAdapterFactory(ApiResponseCallAdapterFactory.create())
|
||||
.baseUrl(STAKEKIT_BASE_URL)
|
||||
.baseUrl(environmentConfig.baseUrl)
|
||||
.client(
|
||||
OkHttpClient.Builder()
|
||||
.addHeaders(StakeKit(stakeKitAuthProvider))
|
||||
.applyApiConfig(id = ApiConfig.ID.StakeKit, apiConfigsManager = apiConfigsManager)
|
||||
.addLoggers(context)
|
||||
.build(),
|
||||
)
|
||||
|
|
@ -110,8 +109,7 @@ class NetworkModule {
|
|||
.baseUrl(environmentConfig.baseUrl)
|
||||
.client(
|
||||
OkHttpClient.Builder()
|
||||
.addEnvironmentSwitcher(id = ApiConfig.ID.TangemTech, apiConfigsManager = apiConfigsManager)
|
||||
.addHeaders(environmentConfig.headers)
|
||||
.applyApiConfig(id = ApiConfig.ID.TangemTech, apiConfigsManager = apiConfigsManager)
|
||||
.applyTimeoutAnnotations()
|
||||
.addLoggers(context)
|
||||
.build(),
|
||||
|
|
@ -189,7 +187,7 @@ class NetworkModule {
|
|||
requestHeaders: List<RequestHeader> = listOf(AppVersionPlatformHeaders(appVersionProvider)),
|
||||
): T {
|
||||
val client = OkHttpClient.Builder()
|
||||
.addEnvironmentSwitcher(id = ApiConfig.ID.TangemTech, apiConfigsManager = apiConfigsManager)
|
||||
.applyApiConfig(id = ApiConfig.ID.TangemTech, apiConfigsManager = apiConfigsManager)
|
||||
.applyTimeoutAnnotations()
|
||||
.let { builder ->
|
||||
var b = builder
|
||||
|
|
@ -232,8 +230,6 @@ class NetworkModule {
|
|||
)
|
||||
|
||||
private companion object {
|
||||
const val STAKEKIT_BASE_URL = "https://api.stakek.it/v1/"
|
||||
|
||||
const val DEV_V1_TANGEM_TECH_BASE_URL = "https://devapi.tangem-tech.com/v1/"
|
||||
|
||||
const val PROD_V2_TANGEM_TECH_BASE_URL = "https://api.tangem-tech.com/v2/"
|
||||
|
|
|
|||
|
|
@ -88,12 +88,12 @@ internal fun OkHttpClient.Builder.addLoggers(context: Context? = null): OkHttpCl
|
|||
}
|
||||
|
||||
/**
|
||||
* Add environment switcher
|
||||
* Apply api config
|
||||
*
|
||||
* @param id class of [ApiConfig]
|
||||
* @param apiConfigsManager api configs manager
|
||||
*/
|
||||
internal fun OkHttpClient.Builder.addEnvironmentSwitcher(
|
||||
internal fun OkHttpClient.Builder.applyApiConfig(
|
||||
id: ApiConfig.ID,
|
||||
apiConfigsManager: ApiConfigsManager,
|
||||
): OkHttpClient.Builder {
|
||||
|
|
@ -105,6 +105,8 @@ internal fun OkHttpClient.Builder.addEnvironmentSwitcher(
|
|||
),
|
||||
)
|
||||
} else {
|
||||
this
|
||||
val headers = apiConfigsManager.getEnvironmentConfig(id).headers
|
||||
|
||||
this.addHeaders(headers)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
package com.tangem.datasource.utils
|
||||
|
||||
import com.tangem.datasource.api.common.AuthProvider
|
||||
import com.tangem.lib.auth.StakeKitAuthProvider
|
||||
import com.tangem.utils.Provider
|
||||
import com.tangem.utils.version.AppVersionProvider
|
||||
|
||||
|
|
@ -26,9 +25,4 @@ sealed class RequestHeader(vararg pairs: Pair<String, Provider<String>>) {
|
|||
"version" to Provider(appVersionProvider::versionName),
|
||||
"platform" to Provider { "android" },
|
||||
)
|
||||
|
||||
class StakeKit(stakeKitAuthProvider: StakeKitAuthProvider) : RequestHeader(
|
||||
"X-API-KEY" to Provider(stakeKitAuthProvider::getApiKey),
|
||||
"accept" to Provider { "application/json" },
|
||||
)
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ import com.tangem.datasource.api.common.config.ApiConfig.Companion.INTERNAL_BUIL
|
|||
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.Express
|
||||
import com.tangem.datasource.api.common.config.StakeKit
|
||||
import com.tangem.datasource.api.common.config.TangemTech
|
||||
import io.mockk.mockk
|
||||
import org.junit.Test
|
||||
|
|
@ -37,6 +38,7 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
|
|||
val API_CONFIGS = setOf(
|
||||
Express(mockk(), mockk(), mockk()),
|
||||
TangemTech(mockk()),
|
||||
StakeKit(mockk()),
|
||||
|
||||
// Don't forget to add new config
|
||||
)
|
||||
|
|
@ -47,6 +49,7 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
|
|||
when (it) {
|
||||
is Express -> createExpressModel()
|
||||
is TangemTech -> createTangemTechModel()
|
||||
is StakeKit -> createStakeKitModel()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -72,5 +75,12 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
|
|||
expected = "https://api.tangem-tech.com/v1/",
|
||||
)
|
||||
}
|
||||
|
||||
private fun createStakeKitModel(): Model {
|
||||
return Model(
|
||||
id = ApiConfig.ID.StakeKit,
|
||||
expected = "https://api.stakek.it/v1/",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -63,9 +63,11 @@ internal class EnvironmentsTogglesViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun Map<ApiConfig, ApiEnvironment>.toUiModel(): ImmutableSet<EnvironmentTogglesScreenUM.ApiInfoUM> {
|
||||
return map {
|
||||
return mapNotNull {
|
||||
val (config, currentEnvironment) = it
|
||||
|
||||
if (config.environmentConfigs.size <= 1) return@mapNotNull null
|
||||
|
||||
EnvironmentTogglesScreenUM.ApiInfoUM(
|
||||
name = config.id.name,
|
||||
select = currentEnvironment.name,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue