diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt index 2ef036c212..4712dadadc 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeProvider.kt @@ -32,6 +32,9 @@ data class ExchangeProvider( @Json(name = "slippage") val slippage: BigDecimal?, + + @Json(name = "exchangeOnlyWithinSingleAddress") + val isExchangeOnlyWithinSingleAddress: Boolean = false, ) @JsonClass(generateAdapter = false) diff --git a/data/express/src/main/java/com/tangem/data/express/converter/ExpressProviderConverter.kt b/data/express/src/main/java/com/tangem/data/express/converter/ExpressProviderConverter.kt index 36c5e88460..09a2f55b15 100644 --- a/data/express/src/main/java/com/tangem/data/express/converter/ExpressProviderConverter.kt +++ b/data/express/src/main/java/com/tangem/data/express/converter/ExpressProviderConverter.kt @@ -19,6 +19,7 @@ internal class ExpressProviderConverter : Converter async { @@ -125,11 +125,11 @@ internal class DefaultSwapRepositoryV2 @Inject constructor( swapTxType = swapTxType, ) - val providers = expressRepository.getProviders( + val mappedProviders = expressRepository.getFilteredProviders( userWallet = userWallet, filterProviderTypes = filterProviderTypes, - ) - val mappedProviders = providers.associateBy(ExpressProvider::providerId) + swapTxType = swapTxType, + ).associateBy(ExpressProvider::providerId) allPairs.map { pair -> async { @@ -434,4 +434,20 @@ internal class DefaultSwapRepositoryV2 @Inject constructor( true } } +} + +private suspend fun ExpressRepository.getFilteredProviders( + userWallet: UserWallet, + filterProviderTypes: List, + swapTxType: SwapTxType, +): List { + return getProviders( + userWallet = userWallet, + filterProviderTypes = filterProviderTypes, + ).let { allProviders -> + when (swapTxType) { + SwapTxType.SendWithSwap -> allProviders.filterNot { it.isExchangeOnlyWithinSingleAddress } + SwapTxType.Swap -> allProviders + } + } } \ No newline at end of file diff --git a/domain/express/models/src/main/java/com/tangem/domain/express/models/ExpressProvider.kt b/domain/express/models/src/main/java/com/tangem/domain/express/models/ExpressProvider.kt index 9a26b89580..49b5797e0d 100644 --- a/domain/express/models/src/main/java/com/tangem/domain/express/models/ExpressProvider.kt +++ b/domain/express/models/src/main/java/com/tangem/domain/express/models/ExpressProvider.kt @@ -16,6 +16,7 @@ import java.math.BigDecimal * @property privacyPolicy privacy policy link * @property isRecommended flag that indicates if this provider is recommended * @property slippage provider slippage + * @property isExchangeOnlyWithinSingleAddress flag that indicates if exchange is only allowed within a single address * * Uses to store transaction data in datastore, when extends - should always add default value * to support backward compatibility @@ -40,4 +41,6 @@ data class ExpressProvider( val isRecommended: Boolean = false, @Json(name = "slippage") val slippage: BigDecimal?, + @Json(name = "exchangeOnlyWithinSingleAddress") + val isExchangeOnlyWithinSingleAddress: Boolean = false, ) \ No newline at end of file diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/common/SwapUtils.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/common/SwapUtils.kt index a8a7a45905..fee7ec431c 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/common/SwapUtils.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/common/SwapUtils.kt @@ -14,7 +14,10 @@ internal object SwapUtils { const val INCREASE_GAS_LIMIT_FOR_CEX = 105 // 5% /** List of supported provider types in Send with Swap */ - internal val SEND_WITH_SWAP_PROVIDER_TYPES = listOf(ExpressProviderType.CEX) + internal val SEND_WITH_SWAP_PROVIDER_TYPES = listOf( + ExpressProviderType.CEX, + ExpressProviderType.DEX, + ) fun getExpressErrorMessage(expressError: ExpressError): TextReference { return when (expressError) {