diff options
Diffstat (limited to 'packages/taler-wallet-core/src/balance.ts')
-rw-r--r-- | packages/taler-wallet-core/src/balance.ts | 80 |
1 files changed, 60 insertions, 20 deletions
diff --git a/packages/taler-wallet-core/src/balance.ts b/packages/taler-wallet-core/src/balance.ts index 1fef9876e..4f06e3756 100644 --- a/packages/taler-wallet-core/src/balance.ts +++ b/packages/taler-wallet-core/src/balance.ts @@ -57,6 +57,7 @@ import { assertUnreachable, BalanceFlag, BalancesResponse, + checkDbInvariant, GetBalanceDetailRequest, j2s, Logger, @@ -350,13 +351,15 @@ export async function getBalancesInsideTransaction( await tx.withdrawalGroups.indexes.byStatus .iter(keyRangeActive) - .forEachAsync(async (wgRecord) => { - const currency = Amounts.currencyOf(wgRecord.denomsSel.totalCoinValue); - switch (wgRecord.status) { + .forEachAsync(async (wg) => { + switch (wg.status) { case WithdrawalGroupStatus.AbortedBank: case WithdrawalGroupStatus.AbortedExchange: case WithdrawalGroupStatus.FailedAbortingBank: case WithdrawalGroupStatus.FailedBankAborted: + case WithdrawalGroupStatus.AbortedOtherWallet: + case WithdrawalGroupStatus.AbortedUserRefused: + case WithdrawalGroupStatus.DialogProposed: case WithdrawalGroupStatus.Done: // Does not count as pendingIncoming return; @@ -371,34 +374,71 @@ export async function getBalancesInsideTransaction( // Pending, but no special flag. break; case WithdrawalGroupStatus.SuspendedKyc: - case WithdrawalGroupStatus.PendingKyc: - await balanceStore.setFlagIncomingKyc( - currency, - wgRecord.exchangeBaseUrl, + case WithdrawalGroupStatus.PendingKyc: { + checkDbInvariant( + wg.denomsSel !== undefined, + "wg in kyc state should have been initialized", + ); + checkDbInvariant( + wg.exchangeBaseUrl !== undefined, + "wg in kyc state should have been initialized", ); + const currency = Amounts.currencyOf(wg.denomsSel.totalCoinValue); + await balanceStore.setFlagIncomingKyc(currency, wg.exchangeBaseUrl); break; + } case WithdrawalGroupStatus.PendingAml: - case WithdrawalGroupStatus.SuspendedAml: - await balanceStore.setFlagIncomingAml( - currency, - wgRecord.exchangeBaseUrl, + case WithdrawalGroupStatus.SuspendedAml: { + checkDbInvariant( + wg.denomsSel !== undefined, + "wg in aml state should have been initialized", ); + checkDbInvariant( + wg.exchangeBaseUrl !== undefined, + "wg in kyc state should have been initialized", + ); + const currency = Amounts.currencyOf(wg.denomsSel.totalCoinValue); + await balanceStore.setFlagIncomingAml(currency, wg.exchangeBaseUrl); + break; + } + case WithdrawalGroupStatus.PendingRegisteringBank: { + if (wg.denomsSel && wg.exchangeBaseUrl) { + const currency = Amounts.currencyOf(wg.denomsSel.totalCoinValue); + await balanceStore.setFlagIncomingConfirmation( + currency, + wg.exchangeBaseUrl, + ); + } break; - case WithdrawalGroupStatus.PendingRegisteringBank: - case WithdrawalGroupStatus.PendingWaitConfirmBank: + } + case WithdrawalGroupStatus.PendingWaitConfirmBank: { + checkDbInvariant( + wg.denomsSel !== undefined, + "wg in confirmed state should have been initialized", + ); + checkDbInvariant( + wg.exchangeBaseUrl !== undefined, + "wg in kyc state should have been initialized", + ); + const currency = Amounts.currencyOf(wg.denomsSel.totalCoinValue); await balanceStore.setFlagIncomingConfirmation( currency, - wgRecord.exchangeBaseUrl, + wg.exchangeBaseUrl, ); break; + } default: - assertUnreachable(wgRecord.status); + assertUnreachable(wg.status); + } + if (wg.denomsSel && wg.exchangeBaseUrl) { + // only inform pending incoming if amount and exchange has been selected + const currency = Amounts.currencyOf(wg.denomsSel.totalCoinValue); + await balanceStore.addPendingIncoming( + currency, + wg.exchangeBaseUrl, + wg.denomsSel.totalCoinValue, + ); } - await balanceStore.addPendingIncoming( - currency, - wgRecord.exchangeBaseUrl, - wgRecord.denomsSel.totalCoinValue, - ); }); await tx.peerPushDebit.indexes.byStatus |