taler-typescript-core

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

commit 7c44ca8644c80770ec049e0c50b65801125e8553
parent 9c5bfb3f9417c7fb8177285c65ad05909dd46aaa
Author: Florian Dold <florian@dold.me>
Date:   Thu,  5 Jun 2025 01:53:05 +0200

wallet-core: fall back to pending withdrawals for deposit account pub

Issue: https://bugs.taler.net/n/10053

Diffstat:
Mpackages/taler-wallet-core/src/deposits.ts | 38++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+), 0 deletions(-)

diff --git a/packages/taler-wallet-core/src/deposits.ts b/packages/taler-wallet-core/src/deposits.ts @@ -106,6 +106,7 @@ import { RefreshOperationStatus, WalletDbAllStoresReadOnlyTransaction, WalletDbReadWriteTransaction, + WithdrawalGroupStatus, timestampAbsoluteFromDb, timestampPreciseFromDb, timestampPreciseToDb, @@ -1270,6 +1271,43 @@ async function getLastWithdrawalKeyPair( }; } } + + if (candidateRes) { + // We already found a good candidate. + return; + } + + // No good candidate, try finding a withdrawal group that's at + // least currently pending, so it might be completed in the future. + for (const rec of withdrawalRecs) { + switch (rec.status) { + case WithdrawalGroupStatus.PendingBalanceKyc: + case WithdrawalGroupStatus.PendingBalanceKycInit: + case WithdrawalGroupStatus.PendingKyc: + case WithdrawalGroupStatus.PendingQueryingStatus: + case WithdrawalGroupStatus.PendingReady: + case WithdrawalGroupStatus.PendingRegisteringBank: + case WithdrawalGroupStatus.PendingWaitConfirmBank: + case WithdrawalGroupStatus.SuspendedBalanceKyc: + case WithdrawalGroupStatus.SuspendedBalanceKycInit: + case WithdrawalGroupStatus.SuspendedKyc: + case WithdrawalGroupStatus.SuspendedQueryingStatus: + case WithdrawalGroupStatus.SuspendedReady: + case WithdrawalGroupStatus.SuspendedRegisteringBank: + case WithdrawalGroupStatus.SuspendedWaitConfirmBank: + } + const currTimestamp = timestampAbsoluteFromDb(rec.timestampStart); + if ( + candidateTimestamp == null || + AbsoluteTime.cmp(currTimestamp, candidateTimestamp) > 0 + ) { + candidateTimestamp = currTimestamp; + candidateRes = { + priv: rec.reservePriv, + pub: rec.reservePub, + }; + } + } }); return candidateRes; }