aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-core/src/operations/deposits.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/deposits.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/deposits.ts')
-rw-r--r--packages/taler-wallet-core/src/operations/deposits.ts59
1 files changed, 54 insertions, 5 deletions
diff --git a/packages/taler-wallet-core/src/operations/deposits.ts b/packages/taler-wallet-core/src/operations/deposits.ts
index 1ed2a705e..6387fc9b7 100644
--- a/packages/taler-wallet-core/src/operations/deposits.ts
+++ b/packages/taler-wallet-core/src/operations/deposits.ts
@@ -59,11 +59,11 @@ import {
TransactionType,
URL,
WireFee,
+ TransactionAction,
} from "@gnu-taler/taler-util";
import {
DenominationRecord,
DepositGroupRecord,
- OperationStatus,
DepositElementStatus,
} from "../db.js";
import { TalerError } from "@gnu-taler/taler-util";
@@ -115,6 +115,7 @@ export function computeDepositTransactionStatus(
major: TransactionMajorState.Done,
};
}
+ // FIXME: We should actually use separate pending states for this!
case DepositOperationStatus.Pending: {
const numTotal = dg.payCoinSelection.coinPubs.length;
let numDeposited = 0;
@@ -134,9 +135,6 @@ export function computeDepositTransactionStatus(
}
}
- logger.info(`num total ${numTotal}`);
- logger.info(`num deposited ${numDeposited}`);
-
if (numKycRequired > 0) {
return {
major: TransactionMajorState.Pending,
@@ -181,6 +179,57 @@ export function computeDepositTransactionStatus(
}
}
+export function computeDepositTransactionActions(
+ dg: DepositGroupRecord,
+): TransactionAction[] {
+ switch (dg.operationStatus) {
+ case DepositOperationStatus.Finished: {
+ return [TransactionAction.Delete];
+ }
+ case DepositOperationStatus.Pending: {
+ const numTotal = dg.payCoinSelection.coinPubs.length;
+ let numDeposited = 0;
+ let numKycRequired = 0;
+ let numWired = 0;
+ for (let i = 0; i < numTotal; i++) {
+ if (dg.depositedPerCoin[i]) {
+ numDeposited++;
+ }
+ switch (dg.transactionPerCoin[i]) {
+ case DepositElementStatus.KycRequired:
+ numKycRequired++;
+ break;
+ case DepositElementStatus.Wired:
+ numWired++;
+ break;
+ }
+ }
+
+ if (numKycRequired > 0) {
+ return [TransactionAction.Suspend, TransactionAction.Fail];
+ }
+
+ if (numDeposited == numTotal) {
+ return [TransactionAction.Suspend, TransactionAction.Fail];
+ }
+
+ return [TransactionAction.Suspend, TransactionAction.Abort];
+ }
+ case DepositOperationStatus.Suspended:
+ return [TransactionAction.Resume];
+ case DepositOperationStatus.Aborting:
+ return [TransactionAction.Fail, TransactionAction.Suspend];
+ case DepositOperationStatus.Aborted:
+ return [TransactionAction.Delete];
+ case DepositOperationStatus.Failed:
+ return [TransactionAction.Delete];
+ case DepositOperationStatus.SuspendedAborting:
+ return [TransactionAction.Resume, TransactionAction.Fail];
+ default:
+ throw Error(`unexpected deposit group state (${dg.operationStatus})`);
+ }
+}
+
export async function suspendDepositGroup(
ws: InternalWalletState,
depositGroupId: string,
@@ -309,7 +358,7 @@ export async function abortDepositGroup(
notifyTransition(ws, transactionId, transitionInfo);
}
-export async function cancelAbortingDepositGroup(
+export async function failDepositTransaction(
ws: InternalWalletState,
depositGroupId: string,
): Promise<void> {