Updated on 2026-08-14

This commit is contained in:
Tangem 2024-09-24 10:58:42 +03:00
parent 7bec897552
commit 200d7d4c3a
13 changed files with 26 additions and 144 deletions

View file

@ -11,13 +11,4 @@ interface ConfigManager {
val config: Config
suspend fun load(configLoader: Loader<ConfigModel>, onComplete: ((config: Config) -> Unit)? = null)
fun turnOff(name: String)
fun resetToDefault(name: String)
companion object {
const val IS_CREATING_TWIN_CARDS_ALLOWED = "isCreatingTwinCardsAllowed"
const val IS_TOP_UP_ENABLED = "isTopUpEnabled"
}
}

View file

@ -1,12 +1,9 @@
package com.tangem.datasource.config
import com.tangem.blockchain.common.*
import com.tangem.datasource.config.ConfigManager.Companion.IS_CREATING_TWIN_CARDS_ALLOWED
import com.tangem.datasource.config.ConfigManager.Companion.IS_TOP_UP_ENABLED
import com.tangem.datasource.config.models.Config
import com.tangem.datasource.config.models.ConfigModel
import com.tangem.datasource.config.models.ConfigValueModel
import com.tangem.datasource.config.models.FeatureModel
import javax.inject.Inject
import javax.inject.Singleton
@ -16,59 +13,21 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager {
override var config: Config = Config()
private set
private var defaultConfig = Config()
override suspend fun load(configLoader: Loader<ConfigModel>, onComplete: ((config: Config) -> Unit)?) {
configLoader.load { configModel ->
setupFeature(configModel.features)
setupConfigValues(configModel.configValues)
onComplete?.invoke(config)
}
}
override fun turnOff(name: String) {
when (name) {
IS_TOP_UP_ENABLED -> config = config.copy(isTopUpEnabled = false)
IS_CREATING_TWIN_CARDS_ALLOWED -> config = config.copy(isCreatingTwinCardsAllowed = false)
}
}
override fun resetToDefault(name: String) {
when (name) {
IS_TOP_UP_ENABLED -> {
config = config.copy(isTopUpEnabled = defaultConfig.isTopUpEnabled)
}
IS_CREATING_TWIN_CARDS_ALLOWED -> {
config = config.copy(isCreatingTwinCardsAllowed = defaultConfig.isCreatingTwinCardsAllowed)
}
else -> Unit
}
}
private fun setupFeature(featureModel: FeatureModel?) {
val model = featureModel ?: return
config = config.copy(
isTopUpEnabled = model.isTopUpEnabled,
isCreatingTwinCardsAllowed = model.isCreatingTwinCardsAllowed,
)
defaultConfig = defaultConfig.copy(
isTopUpEnabled = model.isTopUpEnabled,
isCreatingTwinCardsAllowed = model.isCreatingTwinCardsAllowed,
)
}
private fun setupConfigValues(configValues: ConfigValueModel?) {
val values = configValues ?: return
config = createConfig(config, values)
defaultConfig = config.copy()
}
private fun createConfig(config: Config, configValues: ConfigValueModel): Config {
return config.copy(
coinMarketCapKey = configValues.coinMarketCapKey,
moonPayApiKey = configValues.moonPayApiKey,
moonPayApiSecretKey = configValues.moonPayApiSecretKey,
mercuryoWidgetId = configValues.mercuryoWidgetId,
@ -105,9 +64,7 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager {
koinosProApiKey = configValues.koinosProApiKey,
),
amplitudeApiKey = configValues.amplitudeApiKey,
sprinklr = configValues.sprinklr,
walletConnectProjectId = configValues.walletConnectProjectId,
tangemComAuthorization = configValues.tangemComAuthorization,
express = configValues.express,
devExpress = configValues.devExpress,
stakeKitApiKey = configValues.stakeKitApiKey,

View file

@ -3,7 +3,6 @@ package com.tangem.datasource.config
import com.tangem.datasource.asset.loader.AssetLoader
import com.tangem.datasource.config.models.ConfigModel
import com.tangem.datasource.config.models.ConfigValueModel
import com.tangem.datasource.config.models.FeatureModel
/**
[REDACTED_AUTHOR]
@ -13,12 +12,10 @@ class FeaturesLocalLoader(
buildEnvironment: String,
) : Loader<ConfigModel> {
private val featuresName = "features_$buildEnvironment"
private val configValuesName = "tangem-app-config/config_$buildEnvironment"
override suspend fun load(onComplete: (ConfigModel) -> Unit) {
ConfigModel(
features = assetLoader.load<FeatureModel>(fileName = featuresName),
configValues = assetLoader.load<ConfigValueModel>(fileName = configValuesName),
).also(onComplete)
}

View file

@ -1,13 +0,0 @@
package com.tangem.datasource.config.models
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
sealed interface ChatConfig
@JsonClass(generateAdapter = true)
data class SprinklrConfig(
@Json(name = "appID") val appId: String,
@Json(name = "apiKey") val apiKey: String,
@Json(name = "environment") val environment: String,
) : ChatConfig

View file

@ -3,19 +3,14 @@ package com.tangem.datasource.config.models
import com.tangem.blockchain.common.BlockchainSdkConfig
data class Config(
val coinMarketCapKey: String = "f6622117-c043-47a0-8975-9d673ce484de",
val moonPayApiKey: String = "pk_test_kc90oYTANy7UQdBavDKGfL4K9l6VEPE",
val moonPayApiSecretKey: String = "sk_test_V8w4M19LbDjjYOt170s0tGuvXAgyEb1C",
val mercuryoWidgetId: String = "",
val mercuryoSecret: String = "",
val amplitudeApiKey: String = "",
val blockchainSdkConfig: BlockchainSdkConfig = BlockchainSdkConfig(),
val isTopUpEnabled: Boolean = false,
@Deprecated("Not relevant since version 3.23")
val isCreatingTwinCardsAllowed: Boolean = false,
val sprinklr: SprinklrConfig? = null,
val walletConnectProjectId: String = "",
val tangemComAuthorization: String? = null,
val express: ExpressModel? = null,
val devExpress: ExpressModel? = null,
val stakeKitApiKey: String? = null,

View file

@ -3,47 +3,35 @@ package com.tangem.datasource.config.models
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
/**
[REDACTED_AUTHOR]
*/
// TODO remove
class FeatureModel(
val isTopUpEnabled: Boolean,
val isCreatingTwinCardsAllowed: Boolean,
)
@Suppress("LongParameterList")
@JsonClass(generateAdapter = true)
class ConfigValueModel(
val coinMarketCapKey: String,
val mercuryoWidgetId: String,
val mercuryoSecret: String,
val moonPayApiKey: String,
val moonPayApiSecretKey: String,
val blockchairApiKeys: List<String>,
val blockchairAuthorizationToken: String?,
val quiknodeSubdomain: String,
val quiknodeApiKey: String,
val bscQuiknodeSubdomain: String,
val bscQuiknodeApiKey: String,
val nowNodesApiKey: String,
@Json(name = "mercuryoWidgetId") val mercuryoWidgetId: String,
@Json(name = "mercuryoSecret") val mercuryoSecret: String,
@Json(name = "moonPayApiKey") val moonPayApiKey: String,
@Json(name = "moonPayApiSecretKey") val moonPayApiSecretKey: String,
@Json(name = "blockchairApiKeys") val blockchairApiKeys: List<String>,
@Json(name = "blockchairAuthorizationToken") val blockchairAuthorizationToken: String?,
@Json(name = "quiknodeSubdomain") val quiknodeSubdomain: String,
@Json(name = "quiknodeApiKey") val quiknodeApiKey: String,
@Json(name = "bscQuiknodeSubdomain") val bscQuiknodeSubdomain: String,
@Json(name = "bscQuiknodeApiKey") val bscQuiknodeApiKey: String,
@Json(name = "nowNodesApiKey") val nowNodesApiKey: String,
@Json(name = "getBlockAccessTokens") val getBlockAccessTokens: GetBlockAccessTokens?,
@Json(name = "tonCenterApiKey") val tonCenterKeys: TonCenterKeys,
val blockcypherTokens: Set<String>?,
val infuraProjectId: String?,
val sprinklr: SprinklrConfig?,
val tronGridApiKey: String,
val amplitudeApiKey: String,
val kaspaSecondaryApiUrl: String,
val walletConnectProjectId: String,
val tangemComAuthorization: String?,
val chiaFireAcademyApiKey: String?,
val chiaTangemApiKey: String?,
val devExpress: ExpressModel?,
val express: ExpressModel?,
@Json(name = "blockcypherTokens") val blockcypherTokens: Set<String>?,
@Json(name = "infuraProjectId") val infuraProjectId: String?,
@Json(name = "tronGridApiKey") val tronGridApiKey: String,
@Json(name = "amplitudeApiKey") val amplitudeApiKey: String,
@Json(name = "kaspaSecondaryApiUrl") val kaspaSecondaryApiUrl: String,
@Json(name = "walletConnectProjectId") val walletConnectProjectId: String,
@Json(name = "chiaFireAcademyApiKey") val chiaFireAcademyApiKey: String?,
@Json(name = "chiaTangemApiKey") val chiaTangemApiKey: String?,
@Json(name = "devExpress") val devExpress: ExpressModel?,
@Json(name = "express") val express: ExpressModel?,
@Json(name = "hederaArkhiaKey") val hederaArkhiaKey: String?,
val polygonScanApiKey: String?,
val stakeKitApiKey: String?,
@Json(name = "polygonScanApiKey") val polygonScanApiKey: String?,
@Json(name = "stakeKitApiKey") val stakeKitApiKey: String?,
@Json(name = "bittensorDwellirKey") val bittensorDwellirApiKey: String?,
@Json(name = "bittensorOnfinalityKey") val bittensorOnfinalityKey: String?,
@Json(name = "koinosProApiKey") val koinosProApiKey: String?,
@ -89,10 +77,9 @@ data class GetBlockToken(
)
class ConfigModel(
val features: FeatureModel?,
val configValues: ConfigValueModel?,
) {
companion object {
fun empty(): ConfigModel = ConfigModel(null, null)
fun empty(): ConfigModel = ConfigModel(null)
}
}

View file

@ -19,6 +19,4 @@ internal class MockConfigManager : ConfigManager {
)
override suspend fun load(configLoader: Loader<ConfigModel>, onComplete: ((config: Config) -> Unit)?) = Unit
override fun turnOff(name: String) = Unit
override fun resetToDefault(name: String) = Unit
}