taler-typescript-core

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

commit d8d214942cc2544d46448811303cedf15809f5b3
parent 698f356659b1c2b029eaaa22c74f3474ff2f99c1
Author: Florian Dold <florian@dold.me>
Date:   Tue,  6 Jun 2023 17:25:17 +0200

wallet-core: truncate withdrawal errors

Diffstat:
Mpackages/taler-util/src/errors.ts | 1+
Mpackages/taler-wallet-core/src/operations/withdraw.ts | 8+++++++-
2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/packages/taler-util/src/errors.ts b/packages/taler-util/src/errors.ts @@ -98,6 +98,7 @@ export interface DetailsMap { }; [TalerErrorCode.WALLET_EXCHANGE_COIN_SIGNATURE_INVALID]: empty; [TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE]: { + numErrors: number, errorsPerCoin: Record<number, TalerErrorDetail>; }; [TalerErrorCode.WALLET_CORE_NOT_AVAILABLE]: empty; diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts @@ -1426,6 +1426,8 @@ async function processWithdrawalGroupPendingReady( let numKycRequired = 0; let finishedForFirstTime = false; const errorsPerCoin: Record<number, TalerErrorDetail> = {}; + let numPlanchetErrors = 0; + const maxReportedErrors = 5; const res = await ws.db .mktx((x) => [x.coins, x.withdrawalGroups, x.planchets]) @@ -1445,7 +1447,10 @@ async function processWithdrawalGroupPendingReady( numKycRequired++; } if (x.lastError) { - errorsPerCoin[x.coinIdx] = x.lastError; + numPlanchetErrors++; + if (numPlanchetErrors < maxReportedErrors) { + errorsPerCoin[x.coinIdx] = x.lastError; + } } }); const oldTxState = computeWithdrawalTransactionStatus(wg); @@ -1507,6 +1512,7 @@ async function processWithdrawalGroupPendingReady( throw TalerError.fromDetail( TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE, { + numErrors: numPlanchetErrors, errorsPerCoin, }, `withdrawal did not finish (${numFinished} / ${numTotalCoins} coins withdrawn)`,