aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/pay-merchant.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-05-30 15:58:28 +0200
committerFlorian Dold <florian@dold.me>2023-05-30 15:58:28 +0200
commit2a92ca8732195a3a317a0edc155efc0b72351272 (patch)
tree0a9acdb7014b3a4018f904ad307b32f7eb40f848 /packages/taler-wallet-core/src/operations/pay-merchant.ts
parent000359a5e746d9b704b05f2f3eb8442e10a31f75 (diff)
downloadwallet-core-2a92ca8732195a3a317a0edc155efc0b72351272.tar.xz
wallet-core: report possible actions in transactions list
Diffstat (limited to 'packages/taler-wallet-core/src/operations/pay-merchant.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/pay-merchant.ts77
1 files changed, 70 insertions, 7 deletions
diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts
index 8462f2fb9..dce2a30ed 100644
--- a/packages/taler-wallet-core/src/operations/pay-merchant.ts
+++ b/packages/taler-wallet-core/src/operations/pay-merchant.ts
@@ -70,6 +70,7 @@ import {
TalerProtocolTimestamp,
TalerProtocolViolationError,
TalerUriAction,
+ TransactionAction,
TransactionMajorState,
TransactionMinorState,
TransactionState,
@@ -547,7 +548,7 @@ async function processDownloadProposal(
await tx.purchases.put(p);
}
} else {
- p.purchaseStatus = PurchaseStatus.Proposed;
+ p.purchaseStatus = PurchaseStatus.DialogProposed;
await tx.purchases.put(p);
}
const newTxState = computePayMerchantTransactionState(p);
@@ -994,7 +995,7 @@ export async function checkPaymentByProposalId(
return tx.purchases.get(proposalId);
});
- if (!purchase || purchase.purchaseStatus === PurchaseStatus.Proposed) {
+ if (!purchase || purchase.purchaseStatus === PurchaseStatus.DialogProposed) {
// If not already paid, check if we could pay for it.
const res = await selectPayCoinsNew(ws, {
auditors: [],
@@ -1417,7 +1418,7 @@ export async function confirmPay(
}
const oldTxState = computePayMerchantTransactionState(p);
switch (p.purchaseStatus) {
- case PurchaseStatus.Proposed:
+ case PurchaseStatus.DialogProposed:
p.payInfo = {
payCoinSelection: coinSelection,
payCoinSelectionUid: encodeCrock(getRandomBytes(16)),
@@ -1498,7 +1499,7 @@ export async function processPurchase(
case PurchaseStatus.FailedClaim:
case PurchaseStatus.Done:
case PurchaseStatus.RepurchaseDetected:
- case PurchaseStatus.Proposed:
+ case PurchaseStatus.DialogProposed:
case PurchaseStatus.AbortedProposalRefused:
case PurchaseStatus.AbortedIncompletePayment:
case PurchaseStatus.SuspendedAbortingWithRefund:
@@ -1713,7 +1714,7 @@ export async function refuseProposal(
logger.trace(`proposal ${proposalId} not found, won't refuse proposal`);
return undefined;
}
- if (proposal.purchaseStatus !== PurchaseStatus.Proposed) {
+ if (proposal.purchaseStatus !== PurchaseStatus.DialogProposed) {
return undefined;
}
const oldTxState = computePayMerchantTransactionState(proposal);
@@ -1791,7 +1792,7 @@ export async function abortPayMerchant(
ws.workAvailable.trigger();
}
-export async function cancelAbortingPaymentTransaction(
+export async function failPaymentTransaction(
ws: InternalWalletState,
proposalId: string,
): Promise<void> {
@@ -2023,7 +2024,7 @@ export function computePayMerchantTransactionState(
major: TransactionMajorState.SuspendedAborting,
};
// Dialog States
- case PurchaseStatus.Proposed:
+ case PurchaseStatus.DialogProposed:
return {
major: TransactionMajorState.Dialog,
minor: TransactionMinorState.MerchantOrderProposed,
@@ -2060,6 +2061,68 @@ export function computePayMerchantTransactionState(
}
}
+export function computePayMerchantTransactionActions(
+ purchaseRecord: PurchaseRecord,
+): TransactionAction[] {
+ switch (purchaseRecord.purchaseStatus) {
+ // Pending States
+ case PurchaseStatus.PendingDownloadingProposal:
+ return [TransactionAction.Suspend, TransactionAction.Abort];
+ case PurchaseStatus.PendingPaying:
+ return [TransactionAction.Suspend, TransactionAction.Abort];
+ case PurchaseStatus.PendingPayingReplay:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Suspend, TransactionAction.Abort];
+ case PurchaseStatus.PendingQueryingAutoRefund:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Suspend, TransactionAction.Abort];
+ case PurchaseStatus.PendingQueryingRefund:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Suspend, TransactionAction.Abort];
+ case PurchaseStatus.PendingAcceptRefund:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Suspend, TransactionAction.Abort];
+ // Suspended Pending States
+ case PurchaseStatus.SuspendedDownloadingProposal:
+ return [TransactionAction.Resume, TransactionAction.Abort];
+ case PurchaseStatus.SuspendedPaying:
+ return [TransactionAction.Resume, TransactionAction.Abort];
+ case PurchaseStatus.SuspendedPayingReplay:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Resume, TransactionAction.Abort];
+ case PurchaseStatus.SuspendedQueryingAutoRefund:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Resume, TransactionAction.Abort];
+ case PurchaseStatus.SuspendedQueryingRefund:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Resume, TransactionAction.Abort];
+ case PurchaseStatus.SuspendedPendingAcceptRefund:
+ // Special "abort" since it goes back to "done".
+ return [TransactionAction.Resume, TransactionAction.Abort];
+ // Aborting States
+ case PurchaseStatus.AbortingWithRefund:
+ return [TransactionAction.Fail, TransactionAction.Suspend];
+ case PurchaseStatus.SuspendedAbortingWithRefund:
+ return [TransactionAction.Fail, TransactionAction.Resume];
+ // Dialog States
+ case PurchaseStatus.DialogProposed:
+ return [];
+ // Final States
+ case PurchaseStatus.AbortedProposalRefused:
+ return [TransactionAction.Delete];
+ case PurchaseStatus.Done:
+ return [TransactionAction.Delete];
+ case PurchaseStatus.RepurchaseDetected:
+ return [TransactionAction.Delete];
+ case PurchaseStatus.AbortedIncompletePayment:
+ return [TransactionAction.Delete];
+ case PurchaseStatus.FailedClaim:
+ return [TransactionAction.Delete];
+ case PurchaseStatus.FailedAbort:
+ return [TransactionAction.Delete];
+ }
+}
+
async function processPurchaseAutoRefund(
ws: InternalWalletState,
purchase: PurchaseRecord,