diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/WalletConnectRepositoryImpl.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/WalletConnectRepositoryImpl.kt index da78bbdf84..ab1355fae2 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/WalletConnectRepositoryImpl.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/data/WalletConnectRepositoryImpl.kt @@ -251,7 +251,7 @@ class WalletConnectRepositoryImpl @Inject constructor( }.groupBy { pair -> pair.first } .mapValues { entry -> entry.value.map { pair -> pair.second }.toSet() } - val preparedNamespaces = sessionProposal.requiredNamespaces + val preparedRequiredNamespaces = sessionProposal.requiredNamespaces .map { requiredNamespace -> val accountsRequired = requiredNamespace.value.chains ?.mapNotNull { chain -> userChains[chain] } @@ -272,7 +272,9 @@ class WalletConnectRepositoryImpl @Inject constructor( val sessionApproval = Wallet.Params.SessionApprove( proposerPublicKey = sessionProposal.proposerPublicKey, - namespaces = preparedNamespaces, + namespaces = preparedRequiredNamespaces.ifEmpty { + sessionProposal.createPreparedOptionalNamespaces(userChains) + }, ) Timber.d("Session approval is prepared for sending: $sessionApproval") @@ -301,6 +303,25 @@ class WalletConnectRepositoryImpl @Inject constructor( ) } + private fun Wallet.Model.SessionProposal.createPreparedOptionalNamespaces( + userChains: Map>, + ): Map { + return optionalNamespaces + .map { optionalNamespace -> + val accountsOptional = optionalNamespace.value.chains + ?.mapNotNull { chain -> userChains[chain] } + ?.flatten() ?: emptyList() + + val methods = optionalNamespace.value.methods + optionalNamespace.key to Wallet.Model.Namespace.Session( + accounts = accountsOptional.distinct(), + methods = methods, + events = optionalNamespace.value.events, + ) + } + .toMap() + } + override fun sendRequest(requestData: RequestData, result: String) { val session = currentSessions.find { it.topic == requestData.topic } // Add Ethereum Chain method is processed without user input, skip logging it