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:
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,