taler-typescript-core

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

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:
Mpackages/taler-wallet-core/src/coinSelection.ts | 25+++++++++++++++++++++++--
Mpackages/taler-wallet-core/src/dev-experiments.ts | 4++++
Mpackages/taler-wallet-core/src/wallet.ts | 1+
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> {