From 4f88f3a7b01c2c01f3d3b854fb8df4b4a677e6f9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 8 Aug 2025 12:02:05 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../domain/walletconnect/WcAnalyticEvents.kt | 7 ++++--- .../transaction/model/WcAddNetworkModel.kt | 16 ++++++++++++++++ .../transaction/model/WcSignTransactionModel.kt | 16 ++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt index d4bff77def..e3f4cf7299 100644 --- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt +++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt @@ -11,6 +11,7 @@ import com.tangem.domain.walletconnect.model.WcSessionApprove import com.tangem.domain.walletconnect.model.WcSessionProposal import com.tangem.domain.walletconnect.model.sdkcopy.WcAppMetaData import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest +import com.tangem.utils.extensions.mapNotNullValues sealed class WcAnalyticEvents( event: String, @@ -103,7 +104,7 @@ sealed class WcAnalyticEvents( class SignatureRequestReceived( rawRequest: WcSdkSessionRequest, network: Network, - emulationStatus: EmulationStatus, + emulationStatus: EmulationStatus?, ) : WcAnalyticEvents( event = "Signature Request Received", params = mapOf( @@ -111,8 +112,8 @@ sealed class WcAnalyticEvents( AnalyticsParam.Key.DAPP_URL to rawRequest.dAppMetaData.url, AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method, AnalyticsParam.Key.BLOCKCHAIN to network.name, - AnalyticsParam.Key.EMULATION_STATUS to emulationStatus.status, - ), + AnalyticsParam.Key.EMULATION_STATUS to emulationStatus?.status, + ).mapNotNullValues { it.value }, ) { enum class EmulationStatus(val status: String) { Emulated("Emulated"), diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt index 1684d836c3..107e983abc 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt @@ -49,12 +49,14 @@ internal class WcAddNetworkModel @Inject constructor( private val params = paramsContainer.require() private var useCase by Delegates.notNull() + private val signatureReceivedAnalyticsSendState = MutableStateFlow(false) init { modelScope.launch { useCase = useCaseFactory.createUseCase(params.rawRequest) .onLeft { router.push(WcHandleMethodErrorConverter.convert(it)) } .getOrNull() ?: return@launch + sendSignatureReceivedAnalytics(useCase) _uiState.emit( wcAddEthereumChainUMConverter.convert( WcAddEthereumChainUMConverter.Input( @@ -114,4 +116,18 @@ internal class WcAddNetworkModel @Inject constructor( private fun copyData(text: String) { clipboardManager.setText(text = text, isSensitive = true) } + + private fun sendSignatureReceivedAnalytics(useCase: WcAddNetworkUseCase) { + if (signatureReceivedAnalyticsSendState.value) return + + analytics.send( + WcAnalyticEvents.SignatureRequestReceived( + rawRequest = useCase.rawSdkRequest, + network = useCase.network, + emulationStatus = null, + ), + ) + + signatureReceivedAnalyticsSendState.value = true + } } \ No newline at end of file diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt index 1283f3e84f..ccc4413ef4 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt @@ -59,12 +59,14 @@ internal class WcSignTransactionModel @Inject constructor( val stackNavigation = StackNavigation() private var useCase by Delegates.notNull() + private val signatureReceivedAnalyticsSendState = MutableStateFlow(false) init { modelScope.launch { useCase = useCaseFactory.createUseCase(params.rawRequest) .onLeft { router.push(WcHandleMethodErrorConverter.convert(it)) } .getOrNull() ?: return@launch + sendSignatureReceivedAnalytics(useCase) useCase.invoke() .onEach { signState -> if (signingIsDone(signState)) return@onEach @@ -145,4 +147,18 @@ internal class WcSignTransactionModel @Inject constructor( private fun copyData(text: String) { clipboardManager.setText(text = text, isSensitive = true) } + + private fun sendSignatureReceivedAnalytics(useCase: WcMessageSignUseCase) { + if (signatureReceivedAnalyticsSendState.value) return + + analytics.send( + WcAnalyticEvents.SignatureRequestReceived( + rawRequest = useCase.rawSdkRequest, + network = useCase.network, + emulationStatus = null, + ), + ) + + signatureReceivedAnalyticsSendState.value = true + } } \ No newline at end of file