Updated on 2026-08-14
This commit is contained in:
parent
75a96e0d30
commit
bccf17effe
8 changed files with 61 additions and 15 deletions
|
|
@ -225,8 +225,12 @@ internal object WalletConnectDataModule {
|
|||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun wcRequestUseCaseFactory(diHelperBox: DiHelperBox): WcRequestUseCaseFactory {
|
||||
return DefaultWcRequestUseCaseFactory(diHelperBox.handlers)
|
||||
fun wcRequestUseCaseFactory(
|
||||
diHelperBox: DiHelperBox,
|
||||
namespaceConverters: Set<@JvmSuppressWildcards WcNamespaceConverter>,
|
||||
analytics: AnalyticsEventHandler,
|
||||
): WcRequestUseCaseFactory {
|
||||
return DefaultWcRequestUseCaseFactory(diHelperBox.handlers, namespaceConverters, analytics)
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
|||
|
|
@ -3,10 +3,14 @@ package com.tangem.data.walletconnect.request
|
|||
import arrow.core.Either
|
||||
import arrow.core.left
|
||||
import arrow.core.right
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.data.walletconnect.utils.WC_TAG
|
||||
import com.tangem.data.walletconnect.utils.WcNamespaceConverter
|
||||
import com.tangem.domain.walletconnect.WcAnalyticEvents
|
||||
import com.tangem.domain.walletconnect.WcRequestUseCaseFactory
|
||||
import com.tangem.domain.walletconnect.model.HandleMethodError
|
||||
import com.tangem.domain.walletconnect.model.WcMethod
|
||||
import com.tangem.domain.walletconnect.model.WcRequestError.Companion.code
|
||||
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
|
||||
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
|
||||
import timber.log.Timber
|
||||
|
|
@ -14,6 +18,8 @@ import javax.inject.Inject
|
|||
|
||||
internal class DefaultWcRequestUseCaseFactory @Inject constructor(
|
||||
private val requestConverters: Set<WcRequestToUseCaseConverter>,
|
||||
private val namespaceConverters: Set<WcNamespaceConverter>,
|
||||
private val analytics: AnalyticsEventHandler,
|
||||
) : WcRequestUseCaseFactory {
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
|
|
@ -25,12 +31,26 @@ internal class DefaultWcRequestUseCaseFactory @Inject constructor(
|
|||
?.toUseCase(request)
|
||||
?: HandleMethodError.UnknownError("Failed to create WcUseCase").left()
|
||||
|
||||
return useCase.fold(
|
||||
val result = useCase.fold(
|
||||
ifLeft = {
|
||||
Timber.tag(WC_TAG).e("$it")
|
||||
it.left()
|
||||
},
|
||||
ifRight = { (it as? T)?.right() ?: HandleMethodError.Unsupported(WcMethod.Unsupported(request)).left() },
|
||||
)
|
||||
result.onLeft { logError(it, request) }
|
||||
return result
|
||||
}
|
||||
|
||||
private fun logError(error: HandleMethodError, request: WcSdkSessionRequest) {
|
||||
val blockchainName = namespaceConverters
|
||||
.firstNotNullOfOrNull { it.toBlockchain(request.chainId.orEmpty()) }
|
||||
?.getCoinName().orEmpty()
|
||||
val event = WcAnalyticEvents.SignatureRequestReceivedFailed(
|
||||
rawRequest = request,
|
||||
errorCode = error.code().orEmpty(),
|
||||
blockchain = blockchainName,
|
||||
)
|
||||
analytics.send(event)
|
||||
}
|
||||
}
|
||||
|
|
@ -43,7 +43,6 @@ internal class WcSignUseCaseDelegate<MiddleAction, SignModel>(
|
|||
val state = MutableStateFlow(WcSignState(initModel, WcSignStep.PreSign))
|
||||
analytics.send(
|
||||
WcAnalyticEvents.SignatureRequestReceived(
|
||||
session = context.session,
|
||||
rawRequest = context.rawSdkRequest,
|
||||
network = context.network,
|
||||
),
|
||||
|
|
@ -73,7 +72,6 @@ internal class WcSignUseCaseDelegate<MiddleAction, SignModel>(
|
|||
val event = step.result.fold(
|
||||
ifLeft = { error ->
|
||||
WcAnalyticEvents.SignatureRequestFailed(
|
||||
session = context.session,
|
||||
rawRequest = context.rawSdkRequest,
|
||||
network = context.network,
|
||||
errorCode = error.code() ?: error::class.simpleName.orEmpty(),
|
||||
|
|
@ -81,7 +79,6 @@ internal class WcSignUseCaseDelegate<MiddleAction, SignModel>(
|
|||
},
|
||||
ifRight = {
|
||||
WcAnalyticEvents.SignatureRequestHandled(
|
||||
session = context.session,
|
||||
rawRequest = context.rawSdkRequest,
|
||||
network = context.network,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ internal object WcSdkSessionRequestConverter : Converter<Wallet.Model.SessionReq
|
|||
return WcSdkSessionRequest(
|
||||
topic = value.topic,
|
||||
chainId = value.chainId,
|
||||
dAppMetaData = value.peerMetaData?.let { WcAppMetaDataConverter.convert(it) }
|
||||
?: WcAppMetaDataConverter.empty,
|
||||
request = JSONRPCRequestConverter.convert(value.request),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,13 @@ internal class WcSignUseCaseDelegateTest {
|
|||
private val rawRequestMock = WcSdkSessionRequest(
|
||||
topic = "",
|
||||
chainId = "",
|
||||
dAppMetaData = WcAppMetaData(
|
||||
name = "",
|
||||
description = "",
|
||||
url = "",
|
||||
icons = listOf(),
|
||||
redirect = "",
|
||||
),
|
||||
request = WcSdkSessionRequest.JSONRPCRequest(
|
||||
id = 0L,
|
||||
method = "",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue