taler-typescript-core

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

commit 9a065ccb6708a7dc62453ab600ebc035592376e2
parent 9adcd76af8cdb7a0c814b0bcfca89350618a95e5
Author: Florian Dold <florian@dold.me>
Date:   Mon, 25 Aug 2025 01:33:44 +0200

wallet-core: dev experiment pretend-post-wop-failed

Diffstat:
Mpackages/taler-wallet-core/src/dev-experiments.ts | 17+++++++++++++++++
Mpackages/taler-wallet-core/src/wallet.ts | 2+-
Mpackages/taler-wallet-core/src/withdraw.ts | 13+++++++++++++
3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/packages/taler-wallet-core/src/dev-experiments.ts b/packages/taler-wallet-core/src/dev-experiments.ts @@ -282,6 +282,23 @@ export async function applyDevExperiment( wex.ws.devExperimentState.pretendNoFees = v; return; } + case "pretend-post-wop-failed": { + // Pretend that POSTing to a withdrawal operation + // returns a permanent error response. + const setVal = parsedUri.query?.get("val"); + let v: boolean; + if (setVal == null) { + v = true; + } else if (setVal === "1") { + v = true; + } else if (setVal === "0") { + v = false; + } else { + throw Error("invalid val"); + } + wex.ws.devExperimentState.pretendPostWopFailed = v; + return; + } case "flag-confirm-pay-no-wait": { const setVal = parsedUri.query?.get("val"); if (setVal === "0") { diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts @@ -132,7 +132,6 @@ import { ValidateIbanRequest, ValidateIbanResponse, WalletBankAccountInfo, - DownloadedContractData, WalletCoreVersion, WalletNotification, WalletRunConfig, @@ -2643,6 +2642,7 @@ export interface DevExperimentState { * Pretend that exchanges have no fees. */ pretendNoFees?: boolean; + pretendPostWopFailed?: boolean; merchantDepositInsufficient?: boolean; /** Map from base URL to faked version for /config or /keys */ fakeProtoVer?: Map< diff --git a/packages/taler-wallet-core/src/withdraw.ts b/packages/taler-wallet-core/src/withdraw.ts @@ -3141,6 +3141,19 @@ async function registerReserveWithBank( } logger.trace(`isFlexibleAmount: ${isFlexibleAmount}`); logger.info(`registering reserve with bank: ${j2s(reqBody)}`); + + if (wex.ws.devExperimentState.pretendPostWopFailed) { + logger.warn( + `dev experiment: pretending permanent error response, aborting withdrawal`, + ); + await transitionSimple( + ctx, + WithdrawalGroupStatus.PendingRegisteringBank, + WithdrawalGroupStatus.FailedBankAborted, + ); + return TaskRunResult.progress(); + } + const httpResp = await cancelableFetch(wex, bankStatusUrl, { method: "POST", body: reqBody,