commit 9c9b8edabdf8a408da3ee15d280a5f96147c5e8b
parent f3d1231f71e004367a8c66faf70916f92fc9fc51
Author: Florian Dold <dold@taler.net>
Date: Thu, 23 Jul 2026 02:36:27 +0200
wallet: use typed exchange client for reserve history
Diffstat:
2 files changed, 27 insertions(+), 8 deletions(-)
diff --git a/packages/taler-util/src/http-client/exchange-client.ts b/packages/taler-util/src/http-client/exchange-client.ts
@@ -1578,6 +1578,26 @@ export class TalerExchangeHttpClient {
}
/**
+ * https://docs.taler.net/core/api-exchange.html#get--reserves-$RESERVE_PUB-history
+ */
+ async getReserveHistory(
+ reservePub: string,
+ signature: string,
+ ): Promise<OperationOk<any>> {
+ const resp = await this.fetch(`reserves/${reservePub}/history`, {
+ headers: {
+ "Taler-Reserve-History-Signature": signature,
+ },
+ });
+ switch (resp.status) {
+ case HttpStatusCode.Ok:
+ return opSuccessFromHttp(resp, codecForAny());
+ default:
+ return opUnknownHttpFailure(resp);
+ }
+ }
+
+ /**
* https://docs.taler.net/core/api-exchange.html#post--coins-$COIN_PUB-recoup
*/
async recoupCoin(
diff --git a/packages/taler-wallet-core/src/requests.ts b/packages/taler-wallet-core/src/requests.ts
@@ -263,13 +263,11 @@ import {
setGlobalLogLevelFromString,
validateIban,
} from "@gnu-taler/taler-util";
-import { readSuccessResponseJsonOrThrow } from "@gnu-taler/taler-util/http";
import { getBalanceDetail, getBalances } from "./balance.js";
import {
getMaxDepositAmount,
getMaxPeerPushDebitAmount,
} from "./coinSelection.js";
-import { cancelableFetch } from "./common.js";
import { addContact, deleteContact, listContacts } from "./contacts.js";
import {
ConfigRecordKey,
@@ -433,6 +431,7 @@ import {
applyRunConfigDefaults,
getDenomInfo,
migrateMaterializedTransactions,
+ walletExchangeClient,
} from "./wallet.js";
const logger = new Logger("requests.ts");
@@ -1051,12 +1050,12 @@ async function handleTestingGetReserveHistory(
startOffset: 0,
});
const exchangeBaseUrl = req.exchangeBaseUrl;
- const url = new URL(`reserves/${req.reservePub}/history`, exchangeBaseUrl);
- const resp = await cancelableFetch(wex, url, {
- headers: { ["Taler-Reserve-History-Signature"]: sigResp.sig },
- });
- const historyJson = await readSuccessResponseJsonOrThrow(resp, codecForAny());
- return historyJson;
+ const exchangeClient = walletExchangeClient(exchangeBaseUrl, wex);
+ const resp = await exchangeClient.getReserveHistory(
+ req.reservePub,
+ sigResp.sig,
+ );
+ return resp.body;
}
async function handleAcceptManualWithdrawal(