Updated on 2026-08-14

This commit is contained in:
Tangem 2025-07-15 18:32:16 +07:00
parent fb32e4d5da
commit 67503c6c1a
11 changed files with 82 additions and 15 deletions

View file

@ -51,6 +51,7 @@ dependencies {
/* Other */
implementation(deps.kotlin.coroutines)
implementation(deps.arrow.core)
implementation(deps.jodatime)
implementation(projects.domain.blockaid)
implementation(projects.domain.blockaid.models)
implementation(projects.libs.crypto)

View file

@ -22,6 +22,7 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.*
import org.joda.time.DateTime
import timber.log.Timber
@Suppress("LongParameterList")
@ -94,6 +95,7 @@ internal class DefaultWcPairUseCase @AssistedInject constructor(
sdkModel = WcSdkSessionConverter.convert(settledSession.session),
securityStatus = proposalState.dAppSession.securityStatus,
networks = sessionForApprove.network.toSet(),
connectingTime = DateTime.now().millis,
)
sessionsManager.saveSession(newSession)
analytics.send(

View file

@ -23,6 +23,7 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.*
import org.joda.time.DateTime
import timber.log.Timber
import kotlin.coroutines.resume
@ -65,7 +66,14 @@ internal class DefaultWcSessionsManager(
}
override suspend fun saveSession(session: WcSession) {
store.saveSession(WcSessionDTO(session.sdkModel.topic, session.wallet.walletId, session.securityStatus))
store.saveSession(
WcSessionDTO(
topic = session.sdkModel.topic,
walletId = session.wallet.walletId,
securityStatus = session.securityStatus,
connectingTime = session.connectingTime ?: DateTime.now().millis,
),
)
}
override suspend fun removeSession(session: WcSession): Either<Throwable, Unit> {
@ -89,6 +97,7 @@ internal class DefaultWcSessionsManager(
sdkModel = WcSdkSessionConverter.convert(sdkSession),
securityStatus = storedSession.securityStatus,
networks = networks,
connectingTime = storedSession.connectingTime,
)
}
@ -137,6 +146,7 @@ internal class DefaultWcSessionsManager(
sdkModel = WcSdkSessionConverter.convert(sdkSession),
securityStatus = session.securityStatus,
networks = networks,
connectingTime = session.connectingTime,
)
}
return wcSessions

View file

@ -95,6 +95,7 @@ internal class DefaultWcPairUseCaseTest {
sdkModel = WcSdkSessionConverter.convert(this),
securityStatus = CheckDAppResult.SAFE,
networks = setOf(),
connectingTime = null,
)
private fun useCaseFactory() = DefaultWcPairUseCase(
@ -144,7 +145,7 @@ internal class DefaultWcPairUseCaseTest {
coEvery { sdkDelegate.pair(url) } returns sdkProposal.right()
coEvery { sdkDelegate.approve(sdkApprove) } returns sdkApproveSuccess.right()
coEvery { sessionsManager.saveSession(sessionForSave) } returns Unit
coEvery { sessionsManager.saveSession(any()) } returns Unit
coEvery { blockAidVerifier.verifyDApp(any()) } returns Either.catch { CheckDAppResult.SAFE }
val useCase = useCaseFactory()
@ -162,9 +163,12 @@ internal class DefaultWcPairUseCaseTest {
assertEquals(approveLoading, awaitItem())
coVerifyOrder {
sdkDelegate.approve(sdkApprove)
sessionsManager.saveSession(sessionForSave)
sessionsManager.saveSession(any())
}
assertEquals(result, awaitItem())
val actual: WcPairState = awaitItem()
assert(actual is WcPairState.Approving.Result)
actual as WcPairState.Approving.Result
assertEquals(result.session, actual.session)
awaitComplete()
}
}

View file

@ -51,6 +51,7 @@ internal class WcSignUseCaseDelegateTest {
wallet = MockUserWalletFactory.create(),
networks = setOf(),
securityStatus = CheckDAppResult.FAILED_TO_VERIFY,
connectingTime = 0L,
sdkModel = WcSdkSession(
topic = "",
appMetaData = WcAppMetaData(