taler-typescript-core

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

commit 28d7a26bf9af4dae70237082c5b72e625dd2558b
parent 552a91ebac4280ee8eecd38b058113e4e3eb900c
Author: Florian Dold <florian@dold.me>
Date:   Thu, 17 Oct 2024 11:05:02 +0200

wallet-core: allow listing exchanges filtered exchange entry status

Diffstat:
Mpackages/taler-util/src/types-taler-wallet.ts | 13+++++++++++++
Mpackages/taler-wallet-core/src/exchanges.ts | 20++++++++++++--------
2 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/packages/taler-util/src/types-taler-wallet.ts b/packages/taler-util/src/types-taler-wallet.ts @@ -1086,11 +1086,17 @@ export interface ListExchangesRequest { * Filter results to only include exchanges in the given scope. */ filterByScope?: ScopeInfo; + + filterByExchangeEntryStatus?: ExchangeEntryStatus; } export const codecForListExchangesRequest = (): Codec<ListExchangesRequest> => buildCodecForObject<ListExchangesRequest>() .property("filterByScope", codecOptional(codecForScopeInfo())) + .property( + "filterByExchangeEntryStatus", + codecOptional(codecForExchangeEntryStatus()), + ) .build("ListExchangesRequest"); export interface ExchangeDetailedResponse { @@ -1316,6 +1322,13 @@ export enum ExchangeEntryStatus { Used = "used", } +export const codecForExchangeEntryStatus = (): Codec<ExchangeEntryStatus> => + codecForEither( + codecForConstString(ExchangeEntryStatus.Ephemeral), + codecForConstString(ExchangeEntryStatus.Preset), + codecForConstString(ExchangeEntryStatus.Used), + ); + export enum ExchangeUpdateStatus { Initial = "initial", InitialUpdate = "initial-update", diff --git a/packages/taler-wallet-core/src/exchanges.ts b/packages/taler-wallet-core/src/exchanges.ts @@ -2564,15 +2564,19 @@ export async function listExchanges( continue; } } - exchanges.push( - await makeExchangeListItem( - tx, - exchangeRec, - exchangeDetails, - reserveRec, - opRetryRecord?.lastError, - ), + const li = await makeExchangeListItem( + tx, + exchangeRec, + exchangeDetails, + reserveRec, + opRetryRecord?.lastError, ); + if (req.filterByExchangeEntryStatus) { + if (req.filterByExchangeEntryStatus !== li.exchangeEntryStatus) { + continue; + } + } + exchanges.push(li); } }, );