diff options
Diffstat (limited to 'packages/taler-wallet-core/src/operations/transactions.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 24 |
1 files 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 index 3db548fa3..58def0f34 100644 --- 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 } + : {}), }; } |