aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/pay-merchant.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-core/src/pay-merchant.ts')
-rw-r--r--packages/taler-wallet-core/src/pay-merchant.ts45
1 files changed, 40 insertions, 5 deletions
diff --git a/packages/taler-wallet-core/src/pay-merchant.ts b/packages/taler-wallet-core/src/pay-merchant.ts
index 91ea4bd1d..ee154252f 100644
--- a/packages/taler-wallet-core/src/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/pay-merchant.ts
@@ -2093,6 +2093,7 @@ export async function processPurchase(
case PurchaseStatus.PendingPayingReplay:
return processPurchasePay(wex, proposalId);
case PurchaseStatus.PendingQueryingRefund:
+ case PurchaseStatus.FinalizingQueryingAutoRefund:
return processPurchaseQueryRefund(wex, purchase);
case PurchaseStatus.PendingQueryingAutoRefund:
return processPurchaseAutoRefund(wex, purchase);
@@ -2117,6 +2118,7 @@ export async function processPurchase(
case PurchaseStatus.SuspendedPendingAcceptRefund:
case PurchaseStatus.SuspendedQueryingAutoRefund:
case PurchaseStatus.SuspendedQueryingRefund:
+ case PurchaseStatus.SuspendedFinalizingQueryingAutoRefund:
case PurchaseStatus.FailedAbort:
case PurchaseStatus.FailedPaidByOther:
return TaskRunResult.finished();
@@ -2494,6 +2496,9 @@ const transitionSuspend: {
[PurchaseStatus.PendingQueryingAutoRefund]: {
next: PurchaseStatus.SuspendedQueryingAutoRefund,
},
+ [PurchaseStatus.FinalizingQueryingAutoRefund]: {
+ next: PurchaseStatus.SuspendedFinalizingQueryingAutoRefund,
+ },
};
const transitionResume: {
@@ -2516,6 +2521,9 @@ const transitionResume: {
[PurchaseStatus.SuspendedQueryingAutoRefund]: {
next: PurchaseStatus.PendingQueryingAutoRefund,
},
+ [PurchaseStatus.SuspendedFinalizingQueryingAutoRefund]: {
+ next: PurchaseStatus.FinalizingQueryingAutoRefund,
+ },
};
export function computePayMerchantTransactionState(
@@ -2644,6 +2652,16 @@ export function computePayMerchantTransactionState(
major: TransactionMajorState.Failed,
minor: TransactionMinorState.PaidByOther,
};
+ case PurchaseStatus.FinalizingQueryingAutoRefund:
+ return {
+ major: TransactionMajorState.Finalizing,
+ minor: TransactionMinorState.AutoRefund,
+ };
+ case PurchaseStatus.SuspendedFinalizingQueryingAutoRefund:
+ return {
+ major: TransactionMajorState.SuspendedFinalizing,
+ minor: TransactionMinorState.AutoRefund,
+ };
default:
assertUnreachable(purchaseRecord.purchaseStatus);
}
@@ -2742,6 +2760,14 @@ export function computePayMerchantTransactionActions(
return [TransactionAction.Delete];
case PurchaseStatus.FailedPaidByOther:
return [TransactionAction.Delete];
+ case PurchaseStatus.FinalizingQueryingAutoRefund:
+ return [
+ TransactionAction.Suspend,
+ TransactionAction.Retry,
+ TransactionAction.Delete,
+ ];
+ case PurchaseStatus.SuspendedFinalizingQueryingAutoRefund:
+ return [TransactionAction.Resume, TransactionAction.Delete];
default:
assertUnreachable(purchaseRecord.purchaseStatus);
}
@@ -2944,8 +2970,12 @@ async function processPurchaseAutoRefund(
logger.warn("purchase does not exist anymore");
return;
}
- if (p.purchaseStatus !== PurchaseStatus.PendingQueryingAutoRefund) {
- return;
+ switch (p.purchaseStatus) {
+ case PurchaseStatus.PendingQueryingAutoRefund:
+ case PurchaseStatus.FinalizingQueryingAutoRefund:
+ break;
+ default:
+ return;
}
const oldTxState = computePayMerchantTransactionState(p);
p.purchaseStatus = PurchaseStatus.Done;
@@ -2991,8 +3021,12 @@ async function processPurchaseAutoRefund(
logger.warn("purchase does not exist anymore");
return;
}
- if (p.purchaseStatus !== PurchaseStatus.PendingQueryingAutoRefund) {
- return;
+ switch (p.purchaseStatus) {
+ case PurchaseStatus.PendingQueryingAutoRefund:
+ case PurchaseStatus.FinalizingQueryingAutoRefund:
+ break;
+ default:
+ return;
}
const oldTxState = computePayMerchantTransactionState(p);
p.purchaseStatus = PurchaseStatus.PendingAcceptRefund;
@@ -3536,7 +3570,8 @@ async function storeRefunds(
if (isAborting) {
myPurchase.purchaseStatus = PurchaseStatus.AbortedRefunded;
} else if (shouldCheckAutoRefund) {
- myPurchase.purchaseStatus = PurchaseStatus.PendingQueryingAutoRefund;
+ myPurchase.purchaseStatus =
+ PurchaseStatus.FinalizingQueryingAutoRefund;
} else {
myPurchase.purchaseStatus = PurchaseStatus.Done;
}