Updated on 2026-08-14
This commit is contained in:
parent
c4de2ccd5f
commit
89eb1cae70
4 changed files with 42 additions and 25 deletions
|
|
@ -17,6 +17,7 @@ import com.tangem.network.api.paymentology.RegisterKYCRequest
|
|||
import com.tangem.network.api.paymentology.RegisterWalletRequest
|
||||
import com.tangem.network.api.paymentology.RegisterWalletResponse
|
||||
import com.tangem.network.api.paymentology.RegistrationResponse
|
||||
import com.tangem.network.api.paymentology.tryExtractError
|
||||
import com.tangem.operations.attestation.AttestWalletKeyResponse
|
||||
import com.tangem.tap.common.extensions.safeUpdate
|
||||
import com.tangem.tap.domain.getFirstToken
|
||||
|
|
@ -61,13 +62,15 @@ class SaltPayActivationManager(
|
|||
}
|
||||
|
||||
suspend fun checkRegistration(): Result<RegistrationResponse.Item> {
|
||||
val registrationResponse = paymentologyService.checkRegistration(cardId, cardPublicKey).successOr { return it }
|
||||
val response: RegistrationResponse = paymentologyService.checkRegistration(cardId, cardPublicKey)
|
||||
.successOr { return it }
|
||||
.tryExtractError<RegistrationResponse>()
|
||||
.successOr { return it }
|
||||
|
||||
return try {
|
||||
if (!registrationResponse.success || registrationResponse.results.isEmpty()) {
|
||||
throw SaltPayActivationError.EmptyResponse(registrationResponse.error)
|
||||
}
|
||||
Result.Success(registrationResponse.results[0])
|
||||
if (response.results.isEmpty()) throw SaltPayActivationError.EmptyResponse
|
||||
|
||||
Result.Success(response.results[0])
|
||||
} catch (ex: SaltPayActivationError) {
|
||||
Result.Failure(ex)
|
||||
}
|
||||
|
|
@ -75,6 +78,8 @@ class SaltPayActivationManager(
|
|||
|
||||
suspend fun requestAttestationChallenge(): Result<AttestationResponse> {
|
||||
return paymentologyService.requestAttestationChallenge(cardId, cardPublicKey)
|
||||
.successOr { return it }
|
||||
.tryExtractError()
|
||||
}
|
||||
|
||||
suspend fun sendTransactions(
|
||||
|
|
@ -97,8 +102,9 @@ class SaltPayActivationManager(
|
|||
cardSignature = attestResponse.cardSignature ?: byteArrayOf(),
|
||||
pin = pinCode,
|
||||
)
|
||||
|
||||
return paymentologyService.registerWallet(request)
|
||||
.successOr { return it }
|
||||
.tryExtractError()
|
||||
}
|
||||
|
||||
suspend fun getAmountToClaim(): Result<Amount> {
|
||||
|
|
|
|||
|
|
@ -37,8 +37,8 @@ sealed class SaltPayActivationError(
|
|||
|
||||
object NeedPin : SaltPayActivationError(3)
|
||||
object NoGas : SaltPayActivationError(5) //
|
||||
class EmptyResponse(message: String?) : SaltPayActivationError(6, message)
|
||||
class CardNotFound(message: String?) : SaltPayActivationError(8, message)
|
||||
object EmptyResponse : SaltPayActivationError(6)
|
||||
object CardNotFound : SaltPayActivationError(8)
|
||||
class CardDisabled(message: String?) : SaltPayActivationError(9, message)
|
||||
class CardNotPassed(message: String?) : SaltPayActivationError(10, message)
|
||||
object EmptyDynamicAttestResponse : SaltPayActivationError(11)
|
||||
|
|
|
|||
|
|
@ -99,11 +99,6 @@ private fun handleOnboardingSaltPayAction(anyAction: Action, appState: () -> App
|
|||
return@launch
|
||||
}
|
||||
|
||||
if (!attestationResponse.success) {
|
||||
onError(SaltPayActivationError.CardNotFound(attestationResponse.error))
|
||||
return@launch
|
||||
}
|
||||
|
||||
val registrationResponse = tangemSdkManager.runTaskAsync(
|
||||
runnable = saltPayManager.makeRegistrationTask(attestationResponse.challenge!!),
|
||||
cardId = saltPayManager.cardId,
|
||||
|
|
|
|||
|
|
@ -2,16 +2,32 @@ package com.tangem.network.api.paymentology
|
|||
|
||||
import com.squareup.moshi.Json
|
||||
import com.tangem.common.extensions.calculateHashCode
|
||||
import com.tangem.common.services.Result
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface ResponseError {
|
||||
val success: Boolean
|
||||
val error: String?
|
||||
val errorCode: Int?
|
||||
|
||||
fun makeErrorMessage(): String {
|
||||
return error ?: "unknown error"
|
||||
}
|
||||
}
|
||||
|
||||
inline fun <reified T> ResponseError.tryExtractError(): Result<T> = when (success) {
|
||||
true -> Result.Success(this as T)
|
||||
else -> Result.Failure(Throwable(makeErrorMessage()))
|
||||
}
|
||||
|
||||
data class RegistrationResponse(
|
||||
val results: List<Item> = listOf(),
|
||||
val success: Boolean,
|
||||
val error: String?,
|
||||
val errorCode: Int?,
|
||||
) {
|
||||
override val success: Boolean,
|
||||
override val error: String?,
|
||||
override val errorCode: Int?,
|
||||
) : ResponseError {
|
||||
|
||||
data class Item(
|
||||
@Json(name = "CID")
|
||||
|
|
@ -47,10 +63,10 @@ enum class KYCStatus {
|
|||
|
||||
data class AttestationResponse(
|
||||
val challenge: ByteArray?,
|
||||
val success: Boolean,
|
||||
val error: String?,
|
||||
val errorCode: Int?,
|
||||
) {
|
||||
override val success: Boolean,
|
||||
override val error: String?,
|
||||
override val errorCode: Int?,
|
||||
) : ResponseError {
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
|
|
@ -75,7 +91,7 @@ data class AttestationResponse(
|
|||
}
|
||||
|
||||
data class RegisterWalletResponse(
|
||||
val success: Boolean,
|
||||
val error: String?,
|
||||
val errorCode: Int?,
|
||||
)
|
||||
override val success: Boolean,
|
||||
override val error: String?,
|
||||
override val errorCode: Int?,
|
||||
) : ResponseError
|
||||
Loading…
Add table
Add a link
Reference in a new issue