taler-typescript-core

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

commit c1c0603b3a3684c541e22f55e83323a795f134eb
parent bcc864d5dc871cbe264ed7b4a000160873d018e2
Author: Florian Dold <florian@dold.me>
Date:   Thu, 12 Sep 2024 11:43:49 +0200

wallet-core: support abort/fail in new deposit states

Diffstat:
Mpackages/taler-wallet-core/src/db.ts | 8++++++--
Mpackages/taler-wallet-core/src/deposits.ts | 45++++++++++++++++++++++++++++++---------------
2 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts @@ -1749,8 +1749,12 @@ export enum DepositOperationStatus { SuspendedAborting = 0x0113_0000, Finished = 0x0500_0000, - Failed = 0x0501_0000, - Aborted = 0x0503_0000, + + FailedDeposit = 0x0501_0000, + + FailedTrack = 0x0501_0001, + + AbortedDeposit = 0x0503_0000, } export interface DepositTrackingInfo { diff --git a/packages/taler-wallet-core/src/deposits.ts b/packages/taler-wallet-core/src/deposits.ts @@ -293,8 +293,9 @@ export class DepositTransactionContext implements TransactionContext { const oldState = computeDepositTransactionStatus(dg); let newOpStatus: DepositOperationStatus | undefined; switch (dg.operationStatus) { - case DepositOperationStatus.Aborted: - case DepositOperationStatus.Failed: + case DepositOperationStatus.AbortedDeposit: + case DepositOperationStatus.FailedDeposit: + case DepositOperationStatus.FailedTrack: case DepositOperationStatus.Finished: case DepositOperationStatus.SuspendedAborting: case DepositOperationStatus.SuspendedAggregateKyc: @@ -354,8 +355,10 @@ export class DepositTransactionContext implements TransactionContext { } const oldState = computeDepositTransactionStatus(dg); switch (dg.operationStatus) { - case DepositOperationStatus.Finished: - return undefined; + case DepositOperationStatus.PendingDepositKyc: + case DepositOperationStatus.SuspendedDepositKyc: + case DepositOperationStatus.PendingDepositKycAuth: + case DepositOperationStatus.SuspendedDepositKycAuth: case DepositOperationStatus.PendingDeposit: case DepositOperationStatus.SuspendedDeposit: { dg.operationStatus = DepositOperationStatus.Aborting; @@ -394,9 +397,10 @@ export class DepositTransactionContext implements TransactionContext { const oldState = computeDepositTransactionStatus(dg); let newOpStatus: DepositOperationStatus | undefined; switch (dg.operationStatus) { - case DepositOperationStatus.Aborted: + case DepositOperationStatus.AbortedDeposit: case DepositOperationStatus.Aborting: - case DepositOperationStatus.Failed: + case DepositOperationStatus.FailedDeposit: + case DepositOperationStatus.FailedTrack: case DepositOperationStatus.Finished: case DepositOperationStatus.PendingAggregateKyc: case DepositOperationStatus.PendingDeposit: @@ -455,9 +459,13 @@ export class DepositTransactionContext implements TransactionContext { } const oldState = computeDepositTransactionStatus(dg); switch (dg.operationStatus) { + case DepositOperationStatus.PendingAggregateKyc: + case DepositOperationStatus.SuspendedAggregateKyc: + case DepositOperationStatus.PendingTrack: + case DepositOperationStatus.SuspendedTrack: case DepositOperationStatus.SuspendedAborting: case DepositOperationStatus.Aborting: { - dg.operationStatus = DepositOperationStatus.Failed; + dg.operationStatus = DepositOperationStatus.FailedDeposit; await tx.depositGroups.put(dg); await this.updateTransactionMeta(tx); return { @@ -523,13 +531,19 @@ export function computeDepositTransactionStatus( return { major: TransactionMajorState.Aborting, }; - case DepositOperationStatus.Aborted: + case DepositOperationStatus.AbortedDeposit: return { major: TransactionMajorState.Aborted, }; - case DepositOperationStatus.Failed: + case DepositOperationStatus.FailedDeposit: + return { + major: TransactionMajorState.Failed, + minor: TransactionMinorState.Deposit, + }; + case DepositOperationStatus.FailedTrack: return { major: TransactionMajorState.Failed, + minor: TransactionMinorState.Track, }; case DepositOperationStatus.SuspendedAborting: return { @@ -588,9 +602,10 @@ export function computeDepositTransactionActions( TransactionAction.Fail, TransactionAction.Suspend, ]; - case DepositOperationStatus.Aborted: + case DepositOperationStatus.AbortedDeposit: return [TransactionAction.Delete]; - case DepositOperationStatus.Failed: + case DepositOperationStatus.FailedDeposit: + case DepositOperationStatus.FailedTrack: return [TransactionAction.Delete]; case DepositOperationStatus.SuspendedAborting: return [TransactionAction.Resume, TransactionAction.Fail]; @@ -609,7 +624,7 @@ export function computeDepositTransactionActions( case DepositOperationStatus.SuspendedAggregateKyc: return [TransactionAction.Resume, TransactionAction.Fail]; case DepositOperationStatus.SuspendedTrack: - return [TransactionAction.Resume, TransactionAction.Abort]; + return [TransactionAction.Resume, TransactionAction.Fail]; case DepositOperationStatus.PendingDepositKyc: return [TransactionAction.Resume, TransactionAction.Abort]; case DepositOperationStatus.SuspendedDepositKyc: @@ -798,14 +813,14 @@ async function waitForRefreshOnDepositGroup( // Maybe it got manually deleted? Means that we should // just go into aborted. logger.warn("no aborting refresh group found for deposit group"); - newOpState = DepositOperationStatus.Aborted; + newOpState = DepositOperationStatus.AbortedDeposit; } else { if (refreshGroup.operationStatus === RefreshOperationStatus.Finished) { - newOpState = DepositOperationStatus.Aborted; + newOpState = DepositOperationStatus.AbortedDeposit; } else if ( refreshGroup.operationStatus === RefreshOperationStatus.Failed ) { - newOpState = DepositOperationStatus.Aborted; + newOpState = DepositOperationStatus.AbortedDeposit; } } if (newOpState) {