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:
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);