wallet-core: currency hint for preset exchanges

This commit is contained in:
Florian Dold 2023-10-02 23:24:06 +02:00
parent 671bbf2954
commit 8e70b89593
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
5 changed files with 28 additions and 9 deletions

View File

@ -620,6 +620,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?
*

View File

@ -593,7 +593,7 @@ export function makeExchangeListItem(
return {
exchangeBaseUrl: r.baseUrl,
currency: exchangeDetails?.currency,
currency: exchangeDetails?.currency ?? r.presetCurrencyHint,
exchangeUpdateStatus,
exchangeEntryStatus,
tosStatus: exchangeDetails

View File

@ -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;

View File

@ -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[];
};
/**

View File

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