taler-typescript-core

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

commit f88050a49ded386ae92147643977efb5592d5cc8
parent c0a35f4a07d6cba3070a0933f2dffba75e7375cd
Author: Florian Dold <florian@dold.me>
Date:   Wed,  4 Mar 2026 11:28:51 +0100

wallet-core: new dev experiments

Diffstat:
Mpackages/taler-util/src/types-taler-wallet.ts | 4++++
Mpackages/taler-wallet-core/src/dev-experiments.ts | 14++++++++++++++
Mpackages/taler-wallet-core/src/wallet.ts | 51++++++++++++++++++++++++++++++++++++---------------
3 files changed, 54 insertions(+), 15 deletions(-)

diff --git a/packages/taler-util/src/types-taler-wallet.ts b/packages/taler-util/src/types-taler-wallet.ts @@ -4728,6 +4728,10 @@ export interface GetDefaultExchangesResponse { */ talerUri: string; /** + * Currency offered by the exchange. + */ + currency: string; + /** * Currency spec for the currency offered * by the exchange. */ diff --git a/packages/taler-wallet-core/src/dev-experiments.ts b/packages/taler-wallet-core/src/dev-experiments.ts @@ -391,6 +391,20 @@ export async function applyDevExperiment( wex.ws.devExperimentState.fakeChfBban = getValFlag(parsedUri); return; } + case "demo-shortcuts": { + const v = parsedUri.query?.get("val"); + if (!v || v === "off") { + wex.ws.devExperimentState.fakeDemoShortcuts = undefined; + } else { + wex.ws.devExperimentState.fakeDemoShortcuts = v.split(","); + } + wex.ws.devExperimentState.fakeChfBban = getValFlag(parsedUri); + return; + } + case "default-exchange-demo": { + wex.ws.devExperimentState.fakeDefaultExchangeDemo = getValFlag(parsedUri); + return; + } case "block-pay-response": { const val = getValFlag(parsedUri); logger.info(`setting dev experiment blockPayResponse=${val}`); diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts @@ -2056,23 +2056,40 @@ export async function handleGetDefaultExchanges( wex: WalletExecutionContext, _req: EmptyObject, ): Promise<GetDefaultExchangesResponse> { - return { - defaultExchanges: [ - { - talerUri: "taler://withdraw-exchange/exchange.taler-ops.ch/", - currencySpec: { - name: "Swiss francs", - common_amounts: ["CHF:5", "CHF:10", "CHF:25", "CHF:50"], - num_fractional_input_digits: 2, - num_fractional_normal_digits: 2, - num_fractional_trailing_zero_digits: 2, - alt_unit_names: { - "0": "Fr.", - "-2": "Rp.", - }, + const defaultExchanges: GetDefaultExchangesResponse["defaultExchanges"] = []; + defaultExchanges.push({ + talerUri: "taler://withdraw-exchange/exchange.taler-ops.ch/", + currency: "CHF", + currencySpec: { + name: "Swiss francs", + common_amounts: ["CHF:5", "CHF:10", "CHF:25", "CHF:50"], + num_fractional_input_digits: 2, + num_fractional_normal_digits: 2, + num_fractional_trailing_zero_digits: 2, + alt_unit_names: { + "0": "Fr.", + "-2": "Rp.", + }, + }, + }); + if (wex.ws.devExperimentState.fakeDefaultExchangeDemo) { + defaultExchanges.push({ + talerUri: "taler://withdraw-exchange/exchange.demo.taler.net/", + currency: "KUDOS", + currencySpec: { + name: "Kudos", + common_amounts: ["KUDOS:5", "KUDOS:10", "KUDOS:25", "KUDOS:50"], + num_fractional_input_digits: 2, + num_fractional_normal_digits: 2, + num_fractional_trailing_zero_digits: 2, + alt_unit_names: { + "0": "ク", }, }, - ], + }); + } + return { + defaultExchanges, }; } @@ -3112,6 +3129,10 @@ export interface DevExperimentState { fakeChfBban?: boolean; + fakeDemoShortcuts?: string[]; + + fakeDefaultExchangeDemo?: boolean; + blockPayResponse?: boolean; /** Migration test for confirmPay */