taler-typescript-core

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

commit 0371648c9aaec59004d5f808987ded8c4a53d7a5
parent a6a6cd1f9dd0f3416a88b0222d3b417fed27820b
Author: Florian Dold <florian@dold.me>
Date:   Thu, 27 Nov 2025 11:24:24 +0100

query accounts

Diffstat:
Mpackages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts | 13+++++++++++++
Mpackages/taler-util/src/http-client/exchange-client.ts | 36++++++++++++++++++++++++++++++++++++
2 files changed, 49 insertions(+), 0 deletions(-)

diff --git a/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts b/packages/taler-harness/src/integrationtests/test-tops-aml-pdf.ts @@ -18,6 +18,7 @@ * Imports. */ import { Logger, succeedOrThrow } from "@gnu-taler/taler-util"; +import * as fs from "node:fs"; import { GlobalTestState } from "../harness/harness.js"; import { setupMeasuresTestEnvironment } from "../harness/tops.js"; @@ -59,6 +60,18 @@ export async function runTopsAmlPdfTest(t: GlobalTestState) { ), ); console.log(`got ${res.byteLength} bytes`); + const f = t.testDir + `/aml-form-vqf_902_1_customer.pdf`; + fs.writeFileSync(f, Buffer.from(res)); + console.log(`written to ${f}`); + } + + { + const res = succeedOrThrow( + await exchangeClient.getAmlAccountsAsCsv(officerAcc), + ); + const f = t.testDir + `/accounts.csv`; + fs.writeFileSync(f, Buffer.from(res)); + console.log(`written to ${f}`); } } diff --git a/packages/taler-util/src/http-client/exchange-client.ts b/packages/taler-util/src/http-client/exchange-client.ts @@ -1171,6 +1171,42 @@ export class TalerExchangeHttpClient { } } + async getAmlAccountsAsCsv( + auth: OfficerAccount, + ): Promise< + | OperationOk<ArrayBuffer> + | OperationFail< + | HttpStatusCode.Forbidden + | HttpStatusCode.NotFound + | HttpStatusCode.Conflict + | HttpStatusCode.NoContent + > + > { + const url = new URL(`aml/${auth.id}/accounts`, this.baseUrl); + + const resp = await this.fetch(url, { + headers: { + Accept: "text/csv", + "Taler-AML-Officer-Signature": encodeCrock( + signAmlQuery(auth.signingKey), + ), + }, + }); + + switch (resp.status) { + case HttpStatusCode.Ok: { + return opFixedSuccess(await resp.bytes()); + } + case HttpStatusCode.NoContent: + case HttpStatusCode.Forbidden: + case HttpStatusCode.NotFound: + case HttpStatusCode.Conflict: + return opKnownHttpFailure(resp.status, resp); + default: + return opUnknownHttpFailure(resp); + } + } + /** * https://docs.taler.net/core/api-exchange.html#post--aml-$OFFICER_PUB-decision *