diff options
Diffstat (limited to 'packages/taler-wallet-core')
| -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 () => { | 
