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:
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);
}
},
);