taler-typescript-core

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

commit 5b07bb1a5ed3ccb4fbbf63a91e43e63757215b1e
parent ebb7ad193edea72ce0d455a171e484e9af37afa5
Author: Florian Dold <florian@dold.me>
Date:   Wed, 16 Apr 2025 15:42:12 +0200

wallet-core: use finalizing state for deposit tracking

Diffstat:
Mpackages/taler-wallet-core/src/balance.ts | 4++--
Mpackages/taler-wallet-core/src/db.ts | 9+++++++--
Mpackages/taler-wallet-core/src/deposits.ts | 72+++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
3 files changed, 60 insertions(+), 25 deletions(-)

diff --git a/packages/taler-wallet-core/src/balance.ts b/packages/taler-wallet-core/src/balance.ts @@ -593,10 +593,10 @@ export async function getBalancesInsideTransaction( switch (dgRecord.operationStatus) { case DepositOperationStatus.SuspendedAggregateKyc: case DepositOperationStatus.PendingAggregateKyc: - case DepositOperationStatus.PendingTrack: + case DepositOperationStatus.LegacyPendingTrack: case DepositOperationStatus.SuspendedAborting: case DepositOperationStatus.SuspendedDeposit: - case DepositOperationStatus.SuspendedTrack: + case DepositOperationStatus.LegacySuspendedTrack: case DepositOperationStatus.PendingDeposit: { const perExchange = dgRecord.infoPerExchange; if (perExchange) { diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts @@ -1778,8 +1778,10 @@ export enum DepositOperationStatus { PendingDeposit = 0x0100_0000, SuspendedDeposit = 0x0110_0000, - PendingTrack = 0x0100_0001, - SuspendedTrack = 0x0110_0001, + // Legacy states, we we now show + // the tracking state as a finalizing state. + LegacyPendingTrack = 0x0100_0001, + LegacySuspendedTrack = 0x0110_0001, PendingAggregateKyc = 0x0100_0002, SuspendedAggregateKyc = 0x0110_0002, @@ -1793,6 +1795,9 @@ export enum DepositOperationStatus { Aborting = 0x0103_0000, SuspendedAborting = 0x0113_0000, + FinalizingTrack = 0x0200_0001, + SuspendedFinalizingTrack = 0x0210_0001, + Finished = 0x0500_0000, FailedDeposit = 0x0501_0000, diff --git a/packages/taler-wallet-core/src/deposits.ts b/packages/taler-wallet-core/src/deposits.ts @@ -367,8 +367,12 @@ export class DepositTransactionContext implements TransactionContext { case DepositOperationStatus.SuspendedAggregateKyc: case DepositOperationStatus.SuspendedDeposit: case DepositOperationStatus.SuspendedDepositKyc: - case DepositOperationStatus.SuspendedTrack: + case DepositOperationStatus.LegacySuspendedTrack: case DepositOperationStatus.SuspendedDepositKycAuth: + case DepositOperationStatus.SuspendedFinalizingTrack: + break; + case DepositOperationStatus.FinalizingTrack: + newOpStatus = DepositOperationStatus.SuspendedFinalizingTrack; break; case DepositOperationStatus.PendingDepositKyc: newOpStatus = DepositOperationStatus.SuspendedDepositKyc; @@ -379,8 +383,8 @@ export class DepositTransactionContext implements TransactionContext { case DepositOperationStatus.PendingAggregateKyc: newOpStatus = DepositOperationStatus.SuspendedAggregateKyc; break; - case DepositOperationStatus.PendingTrack: - newOpStatus = DepositOperationStatus.SuspendedTrack; + case DepositOperationStatus.LegacyPendingTrack: + newOpStatus = DepositOperationStatus.LegacySuspendedTrack; break; case DepositOperationStatus.Aborting: newOpStatus = DepositOperationStatus.SuspendedAborting; @@ -438,8 +442,10 @@ export class DepositTransactionContext implements TransactionContext { balanceEffect: BalanceEffect.Any, }; } - case DepositOperationStatus.PendingTrack: - case DepositOperationStatus.SuspendedTrack: + case DepositOperationStatus.FinalizingTrack: + case DepositOperationStatus.SuspendedFinalizingTrack: + case DepositOperationStatus.LegacyPendingTrack: + case DepositOperationStatus.LegacySuspendedTrack: case DepositOperationStatus.AbortedDeposit: case DepositOperationStatus.Aborting: case DepositOperationStatus.FailedDeposit: @@ -483,8 +489,9 @@ export class DepositTransactionContext implements TransactionContext { case DepositOperationStatus.PendingAggregateKyc: case DepositOperationStatus.PendingDeposit: case DepositOperationStatus.PendingDepositKyc: - case DepositOperationStatus.PendingTrack: + case DepositOperationStatus.LegacyPendingTrack: case DepositOperationStatus.PendingDepositKycAuth: + case DepositOperationStatus.FinalizingTrack: break; case DepositOperationStatus.SuspendedDepositKyc: newOpStatus = DepositOperationStatus.PendingDepositKyc; @@ -498,12 +505,15 @@ export class DepositTransactionContext implements TransactionContext { case DepositOperationStatus.SuspendedAggregateKyc: newOpStatus = DepositOperationStatus.PendingAggregateKyc; break; - case DepositOperationStatus.SuspendedTrack: - newOpStatus = DepositOperationStatus.PendingTrack; + case DepositOperationStatus.LegacySuspendedTrack: + newOpStatus = DepositOperationStatus.LegacyPendingTrack; break; case DepositOperationStatus.SuspendedDepositKycAuth: newOpStatus = DepositOperationStatus.PendingDepositKycAuth; break; + case DepositOperationStatus.SuspendedFinalizingTrack: + newOpStatus = DepositOperationStatus.FinalizingTrack; + break; default: assertUnreachable(dg.operationStatus); } @@ -546,8 +556,8 @@ export class DepositTransactionContext implements TransactionContext { newState = DepositOperationStatus.FailedDeposit; break; } - case DepositOperationStatus.PendingTrack: - case DepositOperationStatus.SuspendedTrack: { + case DepositOperationStatus.LegacyPendingTrack: + case DepositOperationStatus.LegacySuspendedTrack: { newState = DepositOperationStatus.FailedTrack; break; } @@ -561,6 +571,8 @@ export class DepositTransactionContext implements TransactionContext { case DepositOperationStatus.SuspendedDeposit: case DepositOperationStatus.SuspendedDepositKyc: case DepositOperationStatus.SuspendedDepositKycAuth: + case DepositOperationStatus.FinalizingTrack: + case DepositOperationStatus.SuspendedFinalizingTrack: throw Error("failing not supported in current state"); default: assertUnreachable(dg.operationStatus); @@ -603,7 +615,7 @@ export function computeDepositTransactionStatus( major: TransactionMajorState.Pending, minor: TransactionMinorState.KycRequired, }; - case DepositOperationStatus.PendingTrack: + case DepositOperationStatus.LegacyPendingTrack: return { major: TransactionMajorState.Pending, minor: TransactionMinorState.Track, @@ -613,7 +625,7 @@ export function computeDepositTransactionStatus( major: TransactionMajorState.Suspended, minor: TransactionMinorState.KycRequired, }; - case DepositOperationStatus.SuspendedTrack: + case DepositOperationStatus.LegacySuspendedTrack: return { major: TransactionMajorState.Suspended, minor: TransactionMinorState.Track, @@ -668,6 +680,17 @@ export function computeDepositTransactionStatus( // We lie to the UI by hiding the specific KYC state. minor: TransactionMinorState.KycAuthRequired, }; + case DepositOperationStatus.FinalizingTrack: { + return { + major: TransactionMajorState.Finalizing, + minor: TransactionMinorState.Track, + }; + } + case DepositOperationStatus.SuspendedFinalizingTrack: + return { + major: TransactionMajorState.SuspendedFinalizing, + minor: TransactionMinorState.Track, + }; default: assertUnreachable(dg.operationStatus); } @@ -710,7 +733,7 @@ export function computeDepositTransactionActions( TransactionAction.Suspend, TransactionAction.Fail, ]; - case DepositOperationStatus.PendingTrack: + case DepositOperationStatus.LegacyPendingTrack: return [ TransactionAction.Retry, TransactionAction.Suspend, @@ -718,7 +741,7 @@ export function computeDepositTransactionActions( ]; case DepositOperationStatus.SuspendedAggregateKyc: return [TransactionAction.Resume, TransactionAction.Fail]; - case DepositOperationStatus.SuspendedTrack: + case DepositOperationStatus.LegacySuspendedTrack: return [TransactionAction.Resume, TransactionAction.Fail]; case DepositOperationStatus.PendingDepositKyc: return [TransactionAction.Resume, TransactionAction.Abort]; @@ -728,6 +751,10 @@ export function computeDepositTransactionActions( return [TransactionAction.Suspend, TransactionAction.Abort]; case DepositOperationStatus.SuspendedDepositKycAuth: return [TransactionAction.Resume, TransactionAction.Abort]; + case DepositOperationStatus.FinalizingTrack: + return [TransactionAction.Suspend, TransactionAction.Delete]; + case DepositOperationStatus.SuspendedFinalizingTrack: + return [TransactionAction.Resume, TransactionAction.Delete]; default: assertUnreachable(dg.operationStatus); } @@ -1027,7 +1054,7 @@ async function processDepositGroupPendingKyc( const oldTxState = computeDepositTransactionStatus(newDg); switch (newDg.operationStatus) { case DepositOperationStatus.PendingAggregateKyc: - newDg.operationStatus = DepositOperationStatus.PendingTrack; + newDg.operationStatus = DepositOperationStatus.FinalizingTrack; break; case DepositOperationStatus.PendingDepositKyc: newDg.operationStatus = DepositOperationStatus.PendingDeposit; @@ -1240,7 +1267,8 @@ async function transitionToKycRequired( } const oldTxState = computeDepositTransactionStatus(dg); switch (dg.operationStatus) { - case DepositOperationStatus.PendingTrack: + case DepositOperationStatus.LegacyPendingTrack: + case DepositOperationStatus.FinalizingTrack: dg.operationStatus = DepositOperationStatus.PendingAggregateKyc; break; case DepositOperationStatus.PendingDeposit: @@ -1289,7 +1317,8 @@ async function transitionToKycAuthRequired( } const oldTxState = computeDepositTransactionStatus(dg); switch (dg.operationStatus) { - case DepositOperationStatus.PendingTrack: + case DepositOperationStatus.LegacyPendingTrack: + case DepositOperationStatus.FinalizingTrack: throw Error("not yet supported"); break; case DepositOperationStatus.PendingDeposit: @@ -1312,7 +1341,7 @@ async function transitionToKycAuthRequired( return TaskRunResult.progress(); } -async function processDepositGroupPendingTrack( +async function processDepositGroupTrack( wex: WalletExecutionContext, depositGroup: DepositGroupRecord, ): Promise<TaskRunResult> { @@ -1726,7 +1755,7 @@ async function processDepositGroupPendingDeposit( return undefined; } const oldTxState = computeDepositTransactionStatus(dg); - dg.operationStatus = DepositOperationStatus.PendingTrack; + dg.operationStatus = DepositOperationStatus.FinalizingTrack; await tx.depositGroups.put(dg); await ctx.updateTransactionMeta(tx); const newTxState = computeDepositTransactionStatus(dg); @@ -1761,8 +1790,9 @@ export async function processDepositGroup( } switch (depositGroup.operationStatus) { - case DepositOperationStatus.PendingTrack: - return processDepositGroupPendingTrack(wex, depositGroup); + case DepositOperationStatus.LegacyPendingTrack: + case DepositOperationStatus.FinalizingTrack: + return processDepositGroupTrack(wex, depositGroup); case DepositOperationStatus.PendingAggregateKyc: case DepositOperationStatus.PendingDepositKyc: return processDepositGroupPendingKyc(wex, depositGroup);