From 68255809a6b12bf8b02d1a9903a582ee863e4a53 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 28 Aug 2025 17:17:14 +0700 Subject: [PATCH] Updated on 2026-08-14 --- .../walletconnect/pair/DefaultWcPairService.kt | 14 ++++++++++++-- .../domain/walletconnect/model/WcEthMethod.kt | 2 +- .../model/WcEthSignTypedDataParams.kt | 10 ++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairService.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairService.kt index d0749f0362..8a49571b5c 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairService.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairService.kt @@ -1,6 +1,5 @@ package com.tangem.data.walletconnect.pair -import androidx.core.net.toUri import com.tangem.domain.walletconnect.WcPairService import com.tangem.domain.walletconnect.model.WcPairRequest import com.tangem.domain.walletconnect.repository.WcSessionsManager @@ -38,8 +37,19 @@ class DefaultWcPairService @Inject constructor( } private suspend fun existSessionTopic(uri: String) = runCatching { - val sessionTopic = uri.toUri().getQueryParameter("sessionTopic") ?: return@runCatching false + val deeplinkRegex = Regex(WC_PARAM_REGEX) + val matched = deeplinkRegex.findAll(uri) + val sessionTopic = matched + .firstOrNull { it.value.contains(WC_TOPIC_QUERY_NAME) } + ?.groupValues + ?.lastOrNull() + ?: return@runCatching false val isExistSession = sessionsManager.findSessionByTopic(sessionTopic) != null return@runCatching isExistSession } + + private companion object { + const val WC_TOPIC_QUERY_NAME = "sessionTopic" + const val WC_PARAM_REGEX = "([a-zA-Z\\d-]+)=([a-zA-Z\\d]+)" + } } \ No newline at end of file diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt index 0157a3dc6c..34b43e11bb 100644 --- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthMethod.kt @@ -13,7 +13,7 @@ sealed interface WcEthMethod : WcMethod { val account: String, val dataForSign: String, ) : WcEthMethod { - val humanMsg: String = params.message.orEmpty() + val humanMsg: String = params.message?.contents.orEmpty() } data class SendTransaction( diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt index 60ff88d729..193a13c172 100644 --- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt +++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcEthSignTypedDataParams.kt @@ -6,5 +6,11 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) data class WcEthSignTypedDataParams( @Json(name = "message") - val message: String?, -) \ No newline at end of file + val message: Message?, +) { + @JsonClass(generateAdapter = true) + data class Message( + @Json(name = "contents") + val contents: String?, + ) +} \ No newline at end of file