taler-typescript-core

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

commit 5e129abe9e8d71c2fa67bc542684f49b76551379
parent b0258d1909c193af4bce99fd15e0c617a63fe8d0
Author: Sebastian <sebasjm@gmail.com>
Date:   Wed, 18 Jan 2023 13:12:38 -0300

fix: withdrawal error when creating an invoice

Diffstat:
Mpackages/taler-wallet-core/src/operations/transactions.ts | 24+++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts @@ -29,6 +29,7 @@ import { PaymentStatus, PeerContractTerms, RefundInfoShort, + TalerErrorCode, TalerProtocolTimestamp, Transaction, TransactionByIdRequest, @@ -402,8 +403,23 @@ function buildTransactionForPullPaymentCredit( wsr: WithdrawalGroupRecord, ort?: OperationRetryRecord, ): Transaction { - if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.PeerPullCredit) - throw Error(""); + if (wsr.wgInfo.withdrawalType !== WithdrawalRecordType.PeerPullCredit) { + throw Error(`Unexpected withdrawalType: ${wsr.wgInfo.withdrawalType}`); + } + /** + * FIXME: this should be handled in the withdrawal process. + * PeerPull withdrawal fails until reserve have funds but it is not + * an error from the user perspective. + */ + const silentWithdrawalErrorForInvoice = + ort?.lastError && + ort.lastError.code === TalerErrorCode.WALLET_WITHDRAWAL_GROUP_INCOMPLETE && + Object.values(ort.lastError.errorsPerCoin ?? {}).every((e) => { + return ( + e.code === TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR && + e.httpStatusCode === 409 + ); + }); return { type: TransactionType.PeerPullCredit, amountEffective: Amounts.stringify(wsr.denomsSel.totalCoinValue), @@ -427,7 +443,9 @@ function buildTransactionForPullPaymentCredit( wsr.withdrawalGroupId, ), frozen: false, - ...(ort?.lastError ? { error: ort.lastError } : {}), + ...(ort?.lastError + ? { error: silentWithdrawalErrorForInvoice ? undefined : ort.lastError } + : {}), }; }