From c925d7cf61ed24382a5003a962a54aa0bcdd20a7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 2 Dec 2025 19:38:44 +0700 Subject: [PATCH] Updated on 2026-08-14 --- .../api/pay/models/response/OrderResponse.kt | 2 +- .../pay/repository/DefaultOnboardingRepository.kt | 3 ++- .../DefaultTangemPayCardDetailsRepository.kt | 12 ++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/OrderResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/OrderResponse.kt index e75134b059..806012dfa3 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/OrderResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/OrderResponse.kt @@ -24,7 +24,7 @@ data class OrderResponse( data class Data( @Json(name = "type") val type: String?, @Json(name = "specification_name") val specificationName: String?, - @Json(name = "customer_wallet_address") val customerWalletAddress: String, + @Json(name = "customer_wallet_address") val customerWalletAddress: String?, @Json(name = "emboss_name") val embossName: String?, @Json(name = "product_instance_id") val productInstanceId: String?, @Json(name = "payment_account_id") val paymentAccountId: String?, diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt index 32806ec772..7fa6ae71fa 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt @@ -115,7 +115,8 @@ internal class DefaultOnboardingRepository @Inject constructor( tangemPayApi.createOrder(authHeader, body = OrderRequest(walletAddress)) }.result ?: error("Create order result is null") - tangemPayStorage.storeOrderId(result.data.customerWalletAddress, result.id) + val customerWalletAddress = requireNotNull(result.data.customerWalletAddress) + tangemPayStorage.storeOrderId(customerWalletAddress, result.id) } } } diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayCardDetailsRepository.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayCardDetailsRepository.kt index 09a67952da..51c702ce61 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayCardDetailsRepository.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultTangemPayCardDetailsRepository.kt @@ -211,6 +211,7 @@ internal class DefaultTangemPayCardDetailsRepository @Inject constructor( if (pollingJobs.containsKey(orderId)) return val pollingJob = pollingScope.launch { try { + var retryCount = 0 while (isActive && pollingJobs.containsKey(orderId)) { delay(duration = 5.seconds) @@ -235,7 +236,14 @@ internal class DefaultTangemPayCardDetailsRepository @Inject constructor( cardFrozenStateStore.store(cardId, finalState) } + }.onLeft { error -> + Timber.e("error ${error.errorCode}") + // stop retrying after 3 errors + if (retryCount > MAX_POLLING_RETRIES) { + pollingJobs.remove(key = orderId) + } } + retryCount++ } } catch (e: Exception) { Timber.e(e) @@ -268,4 +276,8 @@ internal class DefaultTangemPayCardDetailsRepository @Inject constructor( ApiEnvironment.PROD -> visaLibLoader.getOrCreateConfig().rainRSAPublicKey.prod } } + + private companion object { + const val MAX_POLLING_RETRIES = 3 + } } \ No newline at end of file