taler-typescript-core

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

commit 8e70b89593a375bb19432e6521daed618ae779f5
parent 671bbf29548e2ec078b29e75e368d77ee7bdb81f
Author: Florian Dold <florian@dold.me>
Date:   Mon,  2 Oct 2023 23:24:06 +0200

wallet-core: currency hint for preset exchanges

Diffstat:
Mpackages/taler-wallet-core/src/db.ts | 6++++++
Mpackages/taler-wallet-core/src/operations/common.ts | 2+-
Mpackages/taler-wallet-core/src/operations/exchanges.ts | 4+++-
Mpackages/taler-wallet-core/src/wallet-api-types.ts | 7++++++-
Mpackages/taler-wallet-core/src/wallet.ts | 18++++++++++++------
5 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts @@ -621,6 +621,12 @@ export interface ExchangeEntryRecord { baseUrl: string; /** + * Currency hint for a preset exchange, relevant + * when we didn't contact a preset exchange yet. + */ + presetCurrencyHint?: string; + + /** * When did we confirm the last withdrawal from this exchange? * * Used mostly in the UI to suggest exchanges. diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts @@ -593,7 +593,7 @@ export function makeExchangeListItem( return { exchangeBaseUrl: r.baseUrl, - currency: exchangeDetails?.currency, + currency: exchangeDetails?.currency ?? r.presetCurrencyHint, exchangeUpdateStatus, exchangeEntryStatus, tosStatus: exchangeDetails diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts @@ -309,6 +309,7 @@ export async function downloadExchangeInfo( export async function addPresetExchangeEntry( tx: WalletDbReadWriteTransaction<"exchanges">, exchangeBaseUrl: string, + currencyHint?: string, ): Promise<void> { let exchange = await tx.exchanges.get(exchangeBaseUrl); if (!exchange) { @@ -316,6 +317,7 @@ export async function addPresetExchangeEntry( entryStatus: ExchangeEntryDbRecordStatus.Preset, updateStatus: ExchangeEntryDbUpdateStatus.Initial, baseUrl: exchangeBaseUrl, + presetCurrencyHint: currencyHint, detailsPointer: undefined, lastUpdate: undefined, lastKeysEtag: undefined, @@ -330,7 +332,7 @@ export async function addPresetExchangeEntry( } } -export async function provideExchangeRecordInTx( +async function provideExchangeRecordInTx( ws: InternalWalletState, tx: GetReadWriteAccess<{ exchanges: typeof WalletStoresV1.exchanges; diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts @@ -254,6 +254,11 @@ export type GetVersionOp = { */ export type WalletConfigParameter = RecursivePartial<WalletConfig>; +export interface BuiltinExchange { + exchangeBaseUrl: string; + currencyHint?: string; +} + export interface WalletConfig { /** * Initialization values useful for a complete startup. @@ -261,7 +266,7 @@ export interface WalletConfig { * These are values may be overridden by different wallets */ builtin: { - exchanges: string[]; + exchanges: BuiltinExchange[]; }; /** diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts @@ -200,7 +200,6 @@ import { downloadTosFromAcceptedFormat, getExchangeDetails, getExchangeRequestTimeout, - provideExchangeRecordInTx, updateExchangeFromUrl, updateExchangeFromUrlHandler, } from "./operations/exchanges.js"; @@ -535,10 +534,12 @@ async function fillDefaults(ws: InternalWalletState): Promise<void> { logger.trace("defaults already applied"); return; } - for (const baseUrl of ws.config.builtin.exchanges) { - await addPresetExchangeEntry(tx, baseUrl); - const now = AbsoluteTime.now(); - provideExchangeRecordInTx(ws, tx, baseUrl, now); + for (const exch of ws.config.builtin.exchanges) { + await addPresetExchangeEntry( + tx, + exch.exchangeBaseUrl, + exch.currencyHint, + ); } await tx.config.put({ key: ConfigRecordKey.CurrencyDefaultsApplied, @@ -1672,7 +1673,12 @@ export class Wallet { public static defaultConfig: Readonly<WalletConfig> = { builtin: { - exchanges: ["https://exchange.demo.taler.net/"], + exchanges: [ + { + exchangeBaseUrl: "https://exchange.demo.taler.net/", + currencyHint: "KUDOS", + }, + ], }, features: { allowHttp: false,