diff --git a/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoCardStatusHandler.swift b/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoCardStatusHandler.swift index 71736fd359..ac9fc013b8 100644 --- a/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoCardStatusHandler.swift +++ b/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoCardStatusHandler.swift @@ -23,14 +23,15 @@ extension MercuryoCardStatusHandler: PayCardMessageHandling { } let statusChange = try JSONDecoder().decode(MercuryoCallbackBody.self, from: message) + let statusData = statusChange.data logger.debug("New status: \(statusChange)") - guard statusChange.type == MercuryoStatusType.fiatCardSell.rawValue else { + guard statusData.type == MercuryoStatusType.fiatCardSell.rawValue else { return } - switch MercuryoStatus(rawValue: statusChange.status) { + switch MercuryoStatus(rawValue: statusData.status) { case .succeeded: delegate?.didOpenCard() case .failed: diff --git a/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoSellRequestResponseHandler.swift b/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoSellRequestResponseHandler.swift index ec92f6f5d8..75b090c465 100644 --- a/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoSellRequestResponseHandler.swift +++ b/novawallet/Modules/PayCard/Mercuryo/MessageHandlers/MercuryoSellRequestResponseHandler.swift @@ -47,7 +47,8 @@ extension MercuryoSellRequestResponseHandler: PayCardMessageHandling { lastTransactionStatus = data.status - if data.status == .new { + switch data.status { + case .new: let model = PayCardTopupModel( chainAsset: chainAsset, amount: data.amounts.request.amount.decimalValue, @@ -55,6 +56,10 @@ extension MercuryoSellRequestResponseHandler: PayCardMessageHandling { ) delegate?.didRequestTopup(from: model) + case .pending: + delegate?.didReceivePendingCardOpen() + case .completed: + delegate?.didOpenCard() } } catch { logger.error("Unexpected error: \(error)") diff --git a/novawallet/Modules/PayCard/Mercuryo/Model/MercuryoStatusChange.swift b/novawallet/Modules/PayCard/Mercuryo/Model/MercuryoStatusChange.swift index 1d7fc3c4f5..2277603085 100644 --- a/novawallet/Modules/PayCard/Mercuryo/Model/MercuryoStatusChange.swift +++ b/novawallet/Modules/PayCard/Mercuryo/Model/MercuryoStatusChange.swift @@ -3,6 +3,7 @@ import Foundation struct MercuryoCallbackBody: Decodable { let data: MercuryoStatusChange } + struct MercuryoStatusChange: Decodable { let id: String let amount: AmountDecimal @@ -16,6 +17,7 @@ enum MercuryoStatus: String, Decodable { case new case pending case succeeded + case completed case failed } diff --git a/novawallet/Modules/PayCard/Model/PayCardHook.swift b/novawallet/Modules/PayCard/Model/PayCardHook.swift index 59728e344c..4c227c3200 100644 --- a/novawallet/Modules/PayCard/Model/PayCardHook.swift +++ b/novawallet/Modules/PayCard/Model/PayCardHook.swift @@ -12,6 +12,7 @@ protocol PayCardHookDelegate: AnyObject { func didReceiveNoCard() func didOpenCard() func didFailToOpenCard() + func didReceivePendingCardOpen() } protocol PayCardHookFactoryProtocol { diff --git a/novawallet/Modules/PayCard/PayCardInteractor.swift b/novawallet/Modules/PayCard/PayCardInteractor.swift index 062156d28c..6ffc3a404c 100644 --- a/novawallet/Modules/PayCard/PayCardInteractor.swift +++ b/novawallet/Modules/PayCard/PayCardInteractor.swift @@ -143,4 +143,12 @@ extension PayCardInteractor: PayCardHookDelegate { presenter?.didReceiveCardStatus(failedStatus) } + + func didReceivePendingCardOpen() { + if let cardOpenTimestamp = settingsManager.novaCardOpenTimestamp { + checkPendingTimeout() + } else { + processIssueInit() + } + } }