From a93ef065b746d9136d32ef4381cc9e19d268c990 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 15 May 2023 18:13:40 +0300 Subject: [PATCH 1/2] Updated on 2026-08-14 --- .../com/tangem/tap/domain/TapWalletManager.kt | 7 ---- .../twins/redux/TwinCardsMiddleware.kt | 34 +++++-------------- 2 files changed, 9 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 7d5a21594a..cb9553ad37 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -14,7 +14,6 @@ import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.setContext import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.model.UserWallet -import com.tangem.tap.domain.model.builders.UserWalletIdBuilder import com.tangem.tap.domain.walletStores.WalletStoresError import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction import com.tangem.tap.features.disclaimer.createDisclaimer @@ -36,12 +35,6 @@ class TapWalletManager { } suspend fun onWalletSelected(userWallet: UserWallet, refresh: Boolean, sendAnalyticsEvent: Boolean) { - // do nothing if its the same wallet - store.state.globalState.scanResponse?.let { - val userWalletId = UserWalletIdBuilder.scanResponse(it).build() - if (userWalletId == userWallet.walletId) return - } - Analytics.setContext(userWallet.scanResponse) if (sendAnalyticsEvent) { Analytics.send(Basic.WalletOpened()) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt index c2af40ad5d..036482c623 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt @@ -7,17 +7,10 @@ import com.tangem.core.analytics.Analytics import com.tangem.domain.common.extensions.withMainContext import com.tangem.domain.common.util.twinsIsTwinned import com.tangem.domain.models.scan.ScanResponse -import com.tangem.tap.DELAY_SDK_DIALOG_CLOSE +import com.tangem.tap.* import com.tangem.tap.common.analytics.events.AnalyticsParam import com.tangem.tap.common.analytics.events.Onboarding -import com.tangem.tap.common.extensions.dispatchDebugErrorNotification -import com.tangem.tap.common.extensions.dispatchDialogShow -import com.tangem.tap.common.extensions.dispatchErrorNotification -import com.tangem.tap.common.extensions.dispatchOnMain -import com.tangem.tap.common.extensions.dispatchOpenUrl -import com.tangem.tap.common.extensions.getAddressData -import com.tangem.tap.common.extensions.getTopUpUrl -import com.tangem.tap.common.extensions.onUserWalletSelected +import com.tangem.tap.common.extensions.* import com.tangem.tap.common.postUi import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.common.redux.AppState @@ -36,10 +29,6 @@ import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.features.wallet.redux.models.WalletDialog -import com.tangem.tap.preferencesStorage -import com.tangem.tap.scope -import com.tangem.tap.store -import com.tangem.tap.userWalletsListManager import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.rekotlin.Action @@ -130,20 +119,9 @@ private fun handle(action: Action, dispatch: DispatchFunction) { Analytics.send(Onboarding.Twins.ScreenOpened()) preferencesStorage.saveTwinsOnboardingShown() } - TwinCardsStep.CreateFirstWallet -> { + is TwinCardsStep.CreateFirstWallet -> { Analytics.send(Onboarding.CreateWallet.ScreenOpened()) Analytics.send(Onboarding.Twins.SetupStarted()) - scope.launch { - userWalletsListManager.delete( - listOfNotNull(UserWalletIdBuilder.scanResponse(getScanResponse()).build()), - ) - userWalletsListManager.selectedUserWalletSync?.let { selectedWallet -> - store.onUserWalletSelected( - userWallet = selectedWallet, - sendAnalyticsEvent = false, - ) - } - } } TwinCardsStep.TopUpWallet -> { Analytics.send(Onboarding.Topup.ScreenOpened()) @@ -170,6 +148,12 @@ private fun handle(action: Action, dispatch: DispatchFunction) { scope.launch { when (val result = manager.createFirstWallet(action.initialMessage)) { is CompletionResult.Success -> { + // remove wallet only after first step of retwin + scope.launch { + userWalletsListManager.delete( + listOfNotNull(UserWalletIdBuilder.scanResponse(getScanResponse()).build()), + ) + } Analytics.send(Onboarding.CreateWallet.WalletCreatedSuccessfully()) startCardActivation(result.data.cardId) delay(DELAY_SDK_DIALOG_CLOSE) From 6e21d6d6210a8d5ece5490bc78b479eaa3509fa2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 15 May 2023 18:14:04 +0300 Subject: [PATCH 2/2] Updated on 2026-08-14 --- .../api/tangemTech/TangemTechApi.kt | 27 +++++++++---------- .../com/tangem/datasource/di/NetworkModule.kt | 6 ++--- features/referral/data/build.gradle.kts | 4 +++ .../referral/data/ReferralRepositoryImpl.kt | 14 ++++++++-- .../referral/di/ReferralRepositoryModule.kt | 3 +++ 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt index 56963e7456..4125f7ed48 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt @@ -1,18 +1,7 @@ package com.tangem.datasource.api.tangemTech -import com.tangem.datasource.api.tangemTech.models.CoinsResponse -import com.tangem.datasource.api.tangemTech.models.CurrenciesResponse -import com.tangem.datasource.api.tangemTech.models.GeoResponse -import com.tangem.datasource.api.tangemTech.models.RatesResponse -import com.tangem.datasource.api.tangemTech.models.ReferralResponse -import com.tangem.datasource.api.tangemTech.models.StartReferralBody -import com.tangem.datasource.api.tangemTech.models.UserTokensResponse -import retrofit2.http.Body -import retrofit2.http.GET -import retrofit2.http.POST -import retrofit2.http.PUT -import retrofit2.http.Path -import retrofit2.http.Query +import com.tangem.datasource.api.tangemTech.models.* +import retrofit2.http.* /** * Interface of Tangem Tech API @@ -49,9 +38,17 @@ interface TangemTechApi { /** Returns referral status by [walletId] */ @GET("referral/{walletId}") - suspend fun getReferralStatus(@Path("walletId") walletId: String): ReferralResponse + suspend fun getReferralStatus( + @Header("card_public_key") cardPublicKey: String, + @Header("card_id") cardId: String, + @Path("walletId") walletId: String, + ): ReferralResponse /** Make user referral, requires [StartReferralBody] */ @POST("referral") - suspend fun startReferral(@Body startReferralBody: StartReferralBody): ReferralResponse + suspend fun startReferral( + @Header("card_public_key") cardPublicKey: String, + @Header("card_id") cardId: String, + @Body startReferralBody: StartReferralBody, + ): ReferralResponse } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt index d0a72c025c..4ecc2b2529 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt @@ -6,7 +6,6 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.utils.RequestHeader.* import com.tangem.datasource.utils.addHeaders import com.tangem.datasource.utils.allowLogging -import com.tangem.lib.auth.AuthProvider import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -22,7 +21,7 @@ class NetworkModule { @Provides @Singleton - fun provideTangemTechApi(authProvider: AuthProvider, @NetworkMoshi moshi: Moshi): TangemTechApi { + fun provideTangemTechApi(@NetworkMoshi moshi: Moshi): TangemTechApi { return Retrofit.Builder() .addConverterFactory(MoshiConverterFactory.create(moshi)) .baseUrl(PROD_TANGEM_TECH_BASE_URL) @@ -30,7 +29,8 @@ class NetworkModule { OkHttpClient.Builder() .addHeaders( CacheControlHeader, - AuthenticationHeader(authProvider), + // TODO("refactor header init") get auth data after biometric auth to avoid race condition + // AuthenticationHeader(authProvider), ) .allowLogging() .build(), diff --git a/features/referral/data/build.gradle.kts b/features/referral/data/build.gradle.kts index ab23b2ba7a..15aaa39fdf 100644 --- a/features/referral/data/build.gradle.kts +++ b/features/referral/data/build.gradle.kts @@ -12,6 +12,10 @@ dependencies { implementation(project(":core:datasource")) implementation(project(":core:utils")) implementation(project(":features:referral:domain")) + + + /** Libs */ + implementation(project(":libs:auth")) /** Time */ implementation(deps.jodatime) diff --git a/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt b/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt index c6f2151478..7f8d7470e7 100644 --- a/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt +++ b/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt @@ -6,6 +6,7 @@ import com.tangem.datasource.demo.DemoModeDatasource import com.tangem.feature.referral.converters.ReferralConverter import com.tangem.feature.referral.domain.ReferralRepository import com.tangem.feature.referral.domain.models.ReferralData +import com.tangem.lib.auth.AuthProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext import javax.inject.Inject @@ -15,6 +16,7 @@ internal class ReferralRepositoryImpl @Inject constructor( private val referralConverter: ReferralConverter, private val coroutineDispatcher: CoroutineDispatcherProvider, private val demoModeDatasource: DemoModeDatasource, + private val authProvider: AuthProvider, ) : ReferralRepository { override val isDemoMode: Boolean @@ -22,7 +24,13 @@ internal class ReferralRepositoryImpl @Inject constructor( override suspend fun getReferralStatus(walletId: String): ReferralData { return withContext(coroutineDispatcher.io) { - referralConverter.convert(referralApi.getReferralStatus(walletId)) + referralConverter.convert( + referralApi.getReferralStatus( + cardPublicKey = authProvider.getCardPublicKey(), + cardId = authProvider.getCardId(), + walletId = walletId, + ), + ) } } @@ -35,7 +43,9 @@ internal class ReferralRepositoryImpl @Inject constructor( return withContext(coroutineDispatcher.io) { referralConverter.convert( referralApi.startReferral( - StartReferralBody( + cardPublicKey = authProvider.getCardPublicKey(), + cardId = authProvider.getCardId(), + startReferralBody = StartReferralBody( walletId = walletId, networkId = networkId, tokenId = tokenId, diff --git a/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt b/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt index 98454f3c3f..4d1da6230a 100644 --- a/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt +++ b/features/referral/data/src/main/java/com/tangem/feature/referral/di/ReferralRepositoryModule.kt @@ -5,6 +5,7 @@ import com.tangem.datasource.demo.DemoModeDatasource import com.tangem.feature.referral.converters.ReferralConverter import com.tangem.feature.referral.data.ReferralRepositoryImpl import com.tangem.feature.referral.domain.ReferralRepository +import com.tangem.lib.auth.AuthProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module import dagger.Provides @@ -23,12 +24,14 @@ class ReferralRepositoryModule { referralConverter: ReferralConverter, coroutineDispatcherProvider: CoroutineDispatcherProvider, demoModeDatasource: DemoModeDatasource, + authProvider: AuthProvider, ): ReferralRepository { return ReferralRepositoryImpl( referralApi = tangemTechApi, referralConverter = referralConverter, coroutineDispatcher = coroutineDispatcherProvider, demoModeDatasource = demoModeDatasource, + authProvider = authProvider, ) } } \ No newline at end of file