Updated on 2026-08-14

This commit is contained in:
Tangem 2025-08-08 12:02:05 +05:00
parent ee69ff5fb3
commit 4f88f3a7b0
3 changed files with 36 additions and 3 deletions

View file

@ -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"),

View file

@ -49,12 +49,14 @@ internal class WcAddNetworkModel @Inject constructor(
private val params = paramsContainer.require<WcTransactionModelParams>()
private var useCase by Delegates.notNull<WcAddNetworkUseCase>()
private val signatureReceivedAnalyticsSendState = MutableStateFlow(false)
init {
modelScope.launch {
useCase = useCaseFactory.createUseCase<WcAddNetworkUseCase>(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
}
}

View file

@ -59,12 +59,14 @@ internal class WcSignTransactionModel @Inject constructor(
val stackNavigation = StackNavigation<WcTransactionRoutes>()
private var useCase by Delegates.notNull<WcMessageSignUseCase>()
private val signatureReceivedAnalyticsSendState = MutableStateFlow(false)
init {
modelScope.launch {
useCase = useCaseFactory.createUseCase<WcMessageSignUseCase>(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
}
}