taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 3641e4cf0cfdd1569e4a85582676699f92aabfe3
parent 143a4fe4ac5b8724cf6e13a704e88daa99dd4202
Author: Florian Dold <florian@dold.me>
Date:   Wed, 11 Jan 2023 17:16:15 +0100

-check in integration test

Diffstat:
Mpackages/taler-wallet-core/src/operations/pay-merchant.ts | 45+++++++++++++++++++++++++++------------------
1 file 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 @@ -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 () => {