diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt index 40593c27e5..0ee7dab28e 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/di/WalletConnectDataModule.kt @@ -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 diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt index 53ad5c917a..31791fd91c 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt @@ -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, + private val namespaceConverters: Set, + 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) } } \ No newline at end of file diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt index 2dea8ba415..af4f00d088 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt @@ -43,7 +43,6 @@ internal class WcSignUseCaseDelegate( 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( 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( }, ifRight = { WcAnalyticEvents.SignatureRequestHandled( - session = context.session, rawRequest = context.rawSdkRequest, network = context.network, ) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/WcSdkSessionRequestConverter.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/WcSdkSessionRequestConverter.kt index 603699848e..3c0fd55daa 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/WcSdkSessionRequestConverter.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/utils/WcSdkSessionRequestConverter.kt @@ -10,6 +10,8 @@ internal object WcSdkSessionRequestConverter : Converter