Updated on 2026-08-14
This commit is contained in:
parent
1f97352e5a
commit
c6dac76deb
16 changed files with 269 additions and 303 deletions
|
|
@ -9,20 +9,25 @@ import com.tangem.blockchain.common.TransactionSigner
|
|||
import com.tangem.blockchain.extensions.successOr
|
||||
import com.tangem.common.extensions.guard
|
||||
import com.tangem.common.extensions.isZero
|
||||
import com.tangem.common.extensions.toHexString
|
||||
import com.tangem.common.services.Result
|
||||
import com.tangem.common.services.performRequest
|
||||
import com.tangem.datasource.api.paymentology.PaymentologyApiService
|
||||
import com.tangem.datasource.api.paymentology.models.request.CheckRegistrationRequests
|
||||
import com.tangem.datasource.api.paymentology.models.request.RegisterKYCRequest
|
||||
import com.tangem.datasource.api.paymentology.models.request.RegisterWalletRequest
|
||||
import com.tangem.datasource.api.paymentology.models.response.AttestationResponse
|
||||
import com.tangem.datasource.api.paymentology.models.response.RegisterWalletResponse
|
||||
import com.tangem.datasource.api.paymentology.models.response.RegistrationResponse
|
||||
import com.tangem.datasource.api.paymentology.models.response.tryExtractError
|
||||
import com.tangem.domain.common.extensions.successOr
|
||||
import com.tangem.domain.common.util.UserWalletId
|
||||
import com.tangem.datasource.api.paymentology.AttestationResponse
|
||||
import com.tangem.datasource.api.paymentology.PaymentologyApiService
|
||||
import com.tangem.datasource.api.paymentology.RegisterKYCRequest
|
||||
import com.tangem.datasource.api.paymentology.RegisterWalletRequest
|
||||
import com.tangem.datasource.api.paymentology.RegisterWalletResponse
|
||||
import com.tangem.datasource.api.paymentology.RegistrationResponse
|
||||
import com.tangem.datasource.api.paymentology.tryExtractError
|
||||
import com.tangem.operations.attestation.AttestWalletKeyResponse
|
||||
import com.tangem.tap.common.extensions.safeUpdate
|
||||
import com.tangem.tap.domain.getFirstToken
|
||||
import com.tangem.tap.features.onboarding.products.wallet.saltPay.message.SaltPayActivationError
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.math.BigDecimal
|
||||
|
||||
/**
|
||||
|
|
@ -55,14 +60,30 @@ class SaltPayActivationManager(
|
|||
}
|
||||
|
||||
suspend fun registerKYC(): Result<Unit> {
|
||||
return when (val result = paymentologyService.registerKYC(makeRegisterKYCRequest())) {
|
||||
val result = withContext(Dispatchers.IO) {
|
||||
performRequest { paymentologyService.api.registerKYC(makeRegisterKYCRequest()) }
|
||||
}
|
||||
return when (result) {
|
||||
is Result.Success -> Result.Success(Unit)
|
||||
is Result.Failure -> result
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun checkRegistration(): Result<RegistrationResponse.Item> {
|
||||
val response: RegistrationResponse = paymentologyService.checkRegistration(cardId, cardPublicKey)
|
||||
val response: RegistrationResponse = withContext(Dispatchers.IO) {
|
||||
performRequest {
|
||||
paymentologyService.api.checkRegistration(
|
||||
request = CheckRegistrationRequests(
|
||||
requests = listOf(
|
||||
CheckRegistrationRequests.Item(
|
||||
cardId = cardId,
|
||||
publicKey = cardPublicKey.toHexString(),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
.successOr { return it }
|
||||
.tryExtractError<RegistrationResponse>()
|
||||
.successOr { return it }
|
||||
|
|
@ -80,7 +101,16 @@ class SaltPayActivationManager(
|
|||
}
|
||||
|
||||
suspend fun requestAttestationChallenge(): Result<AttestationResponse> {
|
||||
return paymentologyService.requestAttestationChallenge(cardId, cardPublicKey)
|
||||
return withContext(Dispatchers.IO) {
|
||||
performRequest {
|
||||
paymentologyService.api.requestAttestationChallenge(
|
||||
request = CheckRegistrationRequests.Item(
|
||||
cardId = cardId,
|
||||
publicKey = cardPublicKey.toHexString(),
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
.successOr { return it }
|
||||
.tryExtractError()
|
||||
}
|
||||
|
|
@ -105,7 +135,9 @@ class SaltPayActivationManager(
|
|||
cardSignature = attestResponse.cardSignature ?: byteArrayOf(),
|
||||
pin = pinCode,
|
||||
)
|
||||
return paymentologyService.registerWallet(request)
|
||||
return withContext(Dispatchers.IO) {
|
||||
performRequest { paymentologyService.api.registerWallet(request) }
|
||||
}
|
||||
.successOr { return it }
|
||||
.tryExtractError()
|
||||
}
|
||||
|
|
@ -163,7 +195,7 @@ class SaltPayActivationManager(
|
|||
companion object {
|
||||
fun stub(): SaltPayActivationManager = SaltPayActivationManager(
|
||||
kycProvider = SaltPayConfig.stub().kycProvider,
|
||||
paymentologyService = PaymentologyApiService.stub(),
|
||||
paymentologyService = PaymentologyApiService,
|
||||
gnosisRegistrator = GnosisRegistrator.stub(),
|
||||
cardId = "",
|
||||
cardPublicKey = byteArrayOf(),
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@ import com.tangem.blockchain.extensions.successOr
|
|||
import com.tangem.common.Filter
|
||||
import com.tangem.common.extensions.guard
|
||||
import com.tangem.common.services.Result
|
||||
import com.tangem.core.analytics.Analytics
|
||||
import com.tangem.datasource.api.paymentology.models.response.KYCStatus
|
||||
import com.tangem.datasource.api.paymentology.models.response.RegistrationResponse
|
||||
import com.tangem.domain.common.extensions.successOr
|
||||
import com.tangem.domain.common.extensions.withMainContext
|
||||
import com.tangem.datasource.api.paymentology.KYCStatus
|
||||
import com.tangem.datasource.api.paymentology.RegistrationResponse
|
||||
import com.tangem.core.analytics.Analytics
|
||||
import com.tangem.tap.common.analytics.events.Onboarding
|
||||
import com.tangem.tap.common.extensions.dispatchDebugErrorNotification
|
||||
import com.tangem.tap.common.extensions.dispatchOnMain
|
||||
|
|
@ -412,34 +412,6 @@ private suspend fun checkGasIfNeeded(
|
|||
return result
|
||||
}
|
||||
|
||||
@Throws(SaltPayActivationError::class)
|
||||
fun RegistrationResponse.Item.toSaltPayStep(currentStep: SaltPayActivationStep): SaltPayActivationStep {
|
||||
return when {
|
||||
passed != true -> throw SaltPayActivationError.CardNotPassed(this.error)
|
||||
disabledByAdmin == true -> throw SaltPayActivationError.CardDisabled(this.error)
|
||||
|
||||
// go to claim screen
|
||||
active == true -> SaltPayActivationStep.Claim
|
||||
|
||||
// pinSet is false, go toPin screen
|
||||
pinSet == false -> SaltPayActivationStep.NeedPin
|
||||
|
||||
kycStatus != null -> {
|
||||
when (kycStatus) {
|
||||
KYCStatus.NOT_STARTED, KYCStatus.STARTED -> SaltPayActivationStep.KycIntro
|
||||
KYCStatus.WAITING_FOR_APPROVAL -> SaltPayActivationStep.KycWaiting
|
||||
KYCStatus.CORRECTION_REQUESTED, KYCStatus.REJECTED -> SaltPayActivationStep.KycReject
|
||||
KYCStatus.APPROVED -> SaltPayActivationStep.Claim
|
||||
null -> throw UnsupportedOperationException()
|
||||
}
|
||||
}
|
||||
// kycDate is set, go to kyc waiting screen
|
||||
kycDate != null -> SaltPayActivationStep.KycWaiting
|
||||
|
||||
else -> SaltPayActivationStep.KycIntro
|
||||
}
|
||||
}
|
||||
|
||||
@Throws(SaltPayActivationError::class)
|
||||
private fun assertPinValid(pin: String, pinLength: Int) {
|
||||
val array = pin.toCharArray()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue