commit 90eaa718692a614981c3befda42bdfc2e2fc47d5
parent 41c18c44f14c92d33dfd8e1c1d66213053412b3b
Author: Iván Ávalos <avalos@disroot.org>
Date: Thu, 27 Mar 2025 14:17:50 +0100
wallet-core: add merchant-deposit-insufficient dev experiment
Diffstat:
3 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/packages/taler-wallet-core/src/coinSelection.ts b/packages/taler-wallet-core/src/coinSelection.ts
@@ -306,6 +306,23 @@ export async function selectPayCoinsInTx(
logger.trace(`selecting coins for ${j2s(req)}`);
}
+ if (!! wex.ws.devExperimentState.merchantDepositInsufficient) {
+ return {
+ type: "failure",
+ insufficientBalanceDetails: await reportInsufficientBalanceDetails(
+ wex,
+ tx,
+ {
+ restrictExchanges: req.restrictExchanges,
+ instructedAmount: req.contractTermsAmount,
+ requiredMinimumAge: req.requiredMinimumAge,
+ wireMethod: req.restrictWireMethod,
+ depositPaytoUri: req.depositPaytoUri,
+ },
+ ),
+ } satisfies SelectPayCoinsResult;
+ }
+
const materialAvSel = await internalSelectPayCoins(wex, tx, req, false);
if (!materialAvSel) {
@@ -618,14 +635,18 @@ export async function reportInsufficientBalanceDetails(
exchDet.maxMerchantEffectiveDepositAmount,
),
missingGlobalFees,
- causeHint: getHint(req, exchDet),
+ causeHint: (!! wex.ws.devExperimentState.merchantDepositInsufficient)
+ ? InsufficientBalanceHint.MerchantDepositInsufficient
+ : getHint(req, exchDet),
};
}
return {
amountRequested: Amounts.stringify(req.instructedAmount),
wireMethod: req.wireMethod,
- causeHint: getHint(req, details),
+ causeHint: (!! wex.ws.devExperimentState.merchantDepositInsufficient)
+ ? InsufficientBalanceHint.MerchantDepositInsufficient
+ : getHint(req, details),
balanceAgeAcceptable: Amounts.stringify(details.balanceAgeAcceptable),
balanceAvailable: Amounts.stringify(details.balanceAvailable),
balanceMaterial: Amounts.stringify(details.balanceMaterial),
diff --git a/packages/taler-wallet-core/src/dev-experiments.ts b/packages/taler-wallet-core/src/dev-experiments.ts
@@ -140,6 +140,10 @@ export async function applyDevExperiment(
);
return;
}
+ case "merchant-deposit-insufficient": {
+ wex.ws.devExperimentState.merchantDepositInsufficient = true;
+ return;
+ }
}
throw Error(`dev-experiment id not understood ${parsedUri.devExperimentId}`);
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
@@ -2542,6 +2542,7 @@ export class Wallet {
export interface DevExperimentState {
blockRefreshes?: boolean;
+ merchantDepositInsufficient?: boolean;
}
export class Cache<T> {