diff options
Diffstat (limited to 'packages')
-rw-r--r-- | packages/taler-wallet-core/src/operations/pay-merchant.ts | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts index 2f1f3375c..586f2638f 100644 --- a/packages/taler-wallet-core/src/operations/pay-merchant.ts +++ b/packages/taler-wallet-core/src/operations/pay-merchant.ts @@ -2811,34 +2811,43 @@ export async function abortPay( if (!purchase) { throw Error("purchase not found"); } + const oldStatus = purchase.purchaseStatus; if (purchase.timestampFirstSuccessfulPay) { // No point in aborting it. We don't even report an error. logger.warn(`tried to abort successful payment`); return; } - if (purchase.purchaseStatus === PurchaseStatus.Paying) { + if (oldStatus === PurchaseStatus.Paying) { purchase.purchaseStatus = PurchaseStatus.AbortingWithRefund; } + if ( + cancelImmediately && + oldStatus === PurchaseStatus.AbortingWithRefund + ) { + purchase.purchaseStatus = PurchaseStatus.PaymentAbortFinished; + } await tx.purchases.put(purchase); - await tx.operationRetries.delete(opId); - if (purchase.payInfo) { - const coinSel = purchase.payInfo.payCoinSelection; - const currency = Amounts.currencyOf(purchase.payInfo.totalPayCost); - const refreshCoins: CoinRefreshRequest[] = []; - for (let i = 0; i < coinSel.coinPubs.length; i++) { - refreshCoins.push({ - amount: coinSel.coinContributions[i], - coinPub: coinSel.coinPubs[i], - }); + if (oldStatus === PurchaseStatus.Paying) { + if (purchase.payInfo) { + const coinSel = purchase.payInfo.payCoinSelection; + const currency = Amounts.currencyOf(purchase.payInfo.totalPayCost); + const refreshCoins: CoinRefreshRequest[] = []; + for (let i = 0; i < coinSel.coinPubs.length; i++) { + refreshCoins.push({ + amount: coinSel.coinContributions[i], + coinPub: coinSel.coinPubs[i], + }); + } + await createRefreshGroup( + ws, + tx, + currency, + refreshCoins, + RefreshReason.AbortPay, + ); } - await createRefreshGroup( - ws, - tx, - currency, - refreshCoins, - RefreshReason.AbortPay, - ); } + await tx.operationRetries.delete(opId); }); runOperationWithErrorReporting(ws, opId, async () => { |