Updated on 2026-08-14

This commit is contained in:
Tangem 2025-06-09 17:59:58 +08:00
parent b352bb6235
commit b699b723a8
13 changed files with 99 additions and 69 deletions

View file

@ -12,12 +12,14 @@ import com.tangem.data.walletconnect.sign.WcMethodUseCaseContext
import com.tangem.data.walletconnect.utils.BlockAidVerificationDelegate
import com.tangem.domain.transaction.usecase.PrepareForSendUseCase
import com.tangem.domain.walletconnect.model.WcSolanaMethod
import com.tangem.domain.walletconnect.usecase.method.BlockAidTransactionCheck
import com.tangem.domain.walletconnect.usecase.method.WcListTransactionUseCase
import com.tangem.domain.walletconnect.usecase.method.WcSignState
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import okio.ByteString.Companion.decodeBase64
import org.json.JSONArray
import org.json.JSONObject
@ -38,7 +40,7 @@ internal class WcSolanaSignAllTransactionUseCase @AssistedInject constructor(
rawSdkRequest = rawSdkRequest,
session = session,
accountAddress = context.accountAddress,
)
).map { lce -> lce.map { result -> BlockAidTransactionCheck.Result.Plain(result) } }
override suspend fun SignCollector<List<TransactionData>>.onSign(state: WcSignState<List<TransactionData>>) {
val hash = prepareForSend.invoke(transactionData = state.signModel, userWallet = wallet, network = network)

View file

@ -1,6 +1,10 @@
package com.tangem.data.walletconnect.request
import arrow.core.Either
import arrow.core.left
import arrow.core.right
import com.tangem.domain.walletconnect.WcRequestUseCaseFactory
import com.tangem.domain.walletconnect.model.WcMethod
import com.tangem.domain.walletconnect.model.sdkcopy.WcSdkSessionRequest
import com.tangem.domain.walletconnect.usecase.method.WcMethodUseCase
import javax.inject.Inject
@ -10,8 +14,10 @@ internal class DefaultWcRequestUseCaseFactory @Inject constructor(
) : WcRequestUseCaseFactory {
@Suppress("UNCHECKED_CAST")
override suspend fun <T : WcMethodUseCase> createUseCase(request: WcSdkSessionRequest): T {
return requestConverters.firstNotNullOf { it.toUseCase(request) } as? T
?: error("Should check request before in WcRouting")
override suspend fun <T : WcMethodUseCase> createUseCase(
request: WcSdkSessionRequest,
): Either<WcMethod.Unsupported, T> {
val useCase = requestConverters.firstNotNullOfOrNull { converter -> converter.toUseCase(request) }
return (useCase as? T)?.let { useCase.right() } ?: WcMethod.Unsupported(request).left()
}
}