Updated on 2026-08-14

This commit is contained in:
Tangem 2026-01-15 11:56:24 +03:00
parent d77875be51
commit e45d91b15e
15 changed files with 389 additions and 67 deletions

View file

@ -3,6 +3,7 @@ package com.tangem.data.wallets
import arrow.core.Either
import arrow.core.left
import arrow.core.right
import com.tangem.data.common.wallet.WalletServerBinder
import com.tangem.data.wallets.converters.UserWalletRemoteInfoConverter
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.api.common.response.ApiResponse
@ -14,6 +15,7 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.api.tangemTech.converters.WalletIdBodyConverter
import com.tangem.datasource.api.tangemTech.models.*
import com.tangem.datasource.api.tangemTech.models.SeedPhraseNotificationDTO.Status
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
import com.tangem.datasource.local.datastore.RuntimeStateStore
import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.datasource.local.preferences.PreferencesKeys
@ -46,6 +48,8 @@ internal class DefaultWalletsRepository(
private val seedPhraseNotificationVisibilityStore: RuntimeStateStore<SeedPhraseNotificationsStatuses>,
private val dispatchers: CoroutineDispatcherProvider,
private val authProvider: AuthProvider,
private val walletServerBinder: WalletServerBinder,
private val appsFlyerConversionStore: AppsFlyerConversionStore,
private val accountsFeatureToggles: AccountsFeatureToggles,
private val moshi: com.squareup.moshi.Moshi,
) : WalletsRepository {
@ -250,13 +254,7 @@ internal class DefaultWalletsRepository(
}
override suspend fun createWallet(userWalletId: UserWalletId) {
runCatching(dispatchers.io) {
val userWallet = userWalletsStore.getSyncStrict(key = userWalletId)
tangemTechApi.createWallet(
body = WalletIdBodyConverter.convert(userWallet = userWallet),
)
}
walletServerBinder.bind(userWalletId)
}
override suspend fun rejectSeedPhraseSecondNotification(userWalletId: UserWalletId) {
@ -413,10 +411,12 @@ internal class DefaultWalletsRepository(
associateApplicationIdWithWallets().getOrThrow()
}
} else {
val conversionData = appsFlyerConversionStore.get()
val publicKeys = authProvider.getCardsPublicKeys()
val walletsBody = wallets.map { userWallet ->
WalletIdBodyConverter.convert(
userWallet = userWallet,
conversionData = conversionData,
publicKeys = if (userWallet is UserWallet.Cold) {
publicKeys.filterKeys {
userWallet.cardsInWallet.contains(it)

View file

@ -1,6 +1,7 @@
package com.tangem.data.wallets.di
import com.squareup.moshi.Moshi
import com.tangem.data.common.wallet.WalletServerBinder
import com.tangem.data.wallets.DefaultWalletNamesMigrationRepository
import com.tangem.data.wallets.DefaultWalletsRepository
import com.tangem.data.wallets.cold.DefaultColdMapDerivationsRepository
@ -10,6 +11,7 @@ import com.tangem.data.wallets.hot.DefaultHotWalletAccessCodeAttemptsRepository
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.di.NetworkMoshi
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
import com.tangem.datasource.local.datastore.RuntimeStateStore
import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.datasource.local.userwallet.UserWalletsStore
@ -40,6 +42,8 @@ internal object WalletsDataModule {
userWalletsStore: UserWalletsStore,
dispatchers: CoroutineDispatcherProvider,
authProvider: AuthProvider,
walletServerBinder: WalletServerBinder,
appsFlyerConversionStore: AppsFlyerConversionStore,
accountsFeatureToggles: AccountsFeatureToggles,
@NetworkMoshi moshi: Moshi,
): WalletsRepository {
@ -50,6 +54,8 @@ internal object WalletsDataModule {
seedPhraseNotificationVisibilityStore = RuntimeStateStore(defaultValue = emptyMap()),
dispatchers = dispatchers,
authProvider = authProvider,
walletServerBinder = walletServerBinder,
appsFlyerConversionStore = appsFlyerConversionStore,
accountsFeatureToggles = accountsFeatureToggles,
moshi = moshi,
)

View file

@ -4,6 +4,7 @@ import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import com.google.common.truth.Truth.assertThat
import com.squareup.moshi.Moshi
import com.tangem.data.common.wallet.WalletServerBinder
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.api.common.response.ApiResponse
import com.tangem.datasource.api.common.response.ApiResponseError.HttpException
@ -11,6 +12,7 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.api.tangemTech.models.PromocodeActivationBody
import com.tangem.datasource.api.tangemTech.models.PromocodeActivationResponse
import com.tangem.datasource.api.tangemTech.models.WalletResponse
import com.tangem.datasource.local.appsflyer.AppsFlyerConversionStore
import com.tangem.datasource.local.preferences.AppPreferencesStore
import com.tangem.datasource.local.preferences.PreferencesKeys
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
@ -38,12 +40,16 @@ class DefaultWalletsRepositoryTest {
)
private lateinit var tangemTechApi: TangemTechApi
private lateinit var dispatchers: CoroutineDispatcherProvider
private lateinit var walletServerBinder: WalletServerBinder
private lateinit var appsFlyerConversionStore: AppsFlyerConversionStore
private val testWalletId = UserWalletId("1234567890abcdef")
@Before
fun setup() {
tangemTechApi = mockk()
walletServerBinder = mockk()
appsFlyerConversionStore = mockk()
dispatchers = TestingCoroutineDispatcherProvider()
repository = DefaultWalletsRepository(
appPreferencesStore = appPreferenceStore,
@ -52,6 +58,8 @@ class DefaultWalletsRepositoryTest {
seedPhraseNotificationVisibilityStore = mockk(),
dispatchers = dispatchers,
authProvider = mockk(),
walletServerBinder = walletServerBinder,
appsFlyerConversionStore = appsFlyerConversionStore,
accountsFeatureToggles = mockk(),
moshi = mockk(),
)
@ -218,10 +226,14 @@ class DefaultWalletsRepositoryTest {
seedPhraseNotificationVisibilityStore = mockk(),
dispatchers = dispatchers,
authProvider = authProvider,
walletServerBinder = walletServerBinder,
appsFlyerConversionStore = appsFlyerConversionStore,
accountsFeatureToggles = accountsFeatureToggles,
moshi = mockk(),
)
coEvery { appsFlyerConversionStore.get() } returns null
coEvery {
tangemTechApi.associateApplicationIdWithWallets(
eq(applicationId),