Updated on 2026-08-14

This commit is contained in:
Tangem 2025-04-02 18:54:22 +04:00
parent b73b6c3fe7
commit d5299f8094
15 changed files with 119 additions and 10 deletions

View file

@ -26,6 +26,7 @@ sealed class ApiConfig {
StakeKit,
TangemVisaAuth,
TangemVisa,
TangemCardSdk,
}
private fun initializeId(): ID {
@ -35,6 +36,7 @@ sealed class ApiConfig {
is StakeKit -> ID.StakeKit
is TangemVisaAuth -> ID.TangemVisaAuth
is TangemVisa -> ID.TangemVisa
is TangemCardSdk -> ID.TangemCardSdk
}
}

View file

@ -0,0 +1,26 @@
package com.tangem.datasource.api.common.config
/**
* Tangem API [ApiConfig] that used in CardSDK
*
[REDACTED_AUTHOR]
*/
internal class TangemCardSdk : ApiConfig() {
override val defaultEnvironment: ApiEnvironment = ApiEnvironment.PROD
override val environmentConfigs: List<ApiEnvironmentConfig> = listOf(
createDevEnvironment(),
createProdEnvironment(),
)
private fun createDevEnvironment(): ApiEnvironmentConfig = ApiEnvironmentConfig(
environment = ApiEnvironment.DEV,
baseUrl = "[REDACTED_ENV_URL]",
)
private fun createProdEnvironment(): ApiEnvironmentConfig = ApiEnvironmentConfig(
environment = ApiEnvironment.PROD,
baseUrl = "https://api.tangem-tech.com/",
)
}

View file

@ -11,7 +11,7 @@ import com.tangem.datasource.api.common.config.ApiEnvironmentConfig
interface ApiConfigsManager {
/** Initialize resources */
suspend fun initialize() {}
fun initialize() {}
/** Get environment config by [id] */
fun getEnvironmentConfig(id: ApiConfig.ID): ApiEnvironmentConfig

View file

@ -9,6 +9,7 @@ import com.tangem.datasource.local.preferences.PreferencesKeys
import com.tangem.datasource.local.preferences.utils.getObjectMap
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.flow.*
/**
@ -28,7 +29,7 @@ internal class DevApiConfigsManager(
private val _apiConfigs = MutableStateFlow(value = apiConfigs.associateWith { it.defaultEnvironment })
override suspend fun initialize() {
override fun initialize() {
// We can't use appPreferencesStore.getObjectMap as base flow,
// because we should keep possibility to work with configs synchronous.
// See [getBaseUrl]
@ -42,7 +43,7 @@ internal class DevApiConfigsManager(
}
}
}
.launchIn(CoroutineScope(dispatchers.main))
.launchIn(CoroutineScope(SupervisorJob() + dispatchers.main))
}
override fun getEnvironmentConfig(id: ApiConfig.ID): ApiEnvironmentConfig {

View file

@ -2,9 +2,6 @@ package com.tangem.datasource.di
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.api.common.config.*
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.local.config.environment.EnvironmentConfigStorage
import com.tangem.lib.auth.ExpressAuthProvider
import com.tangem.lib.auth.StakeKitAuthProvider
@ -48,4 +45,8 @@ internal object ApiConfigsModule {
@Provides
@IntoSet
fun provideTangemVisaConfig(appVersionProvider: AppVersionProvider): ApiConfig = TangemVisa(appVersionProvider)
@Provides
@IntoSet
fun provideTangemCardSdkConfig(): ApiConfig = TangemCardSdk()
}

View file

@ -89,6 +89,7 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
is StakeKit -> createStakeKitModel()
is TangemVisaAuth -> createVisaAuthModel()
is TangemVisa -> createVisaModel()
is TangemCardSdk -> createTangemCardSdkModel()
}
}
@ -204,6 +205,16 @@ internal class ProdApiConfigsManagerTest(private val model: Model) {
)
}
private fun createTangemCardSdkModel(): Model {
return Model(
id = ApiConfig.ID.TangemCardSdk,
expected = ApiEnvironmentConfig(
environment = ApiEnvironment.PROD,
baseUrl = "https://api.tangem-tech.com/",
),
)
}
private fun String.checkHeaderValueOrEmpty(): String {
for (i in this.indices) {
val c = this[i]