taler-typescript-core

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

commit 938b379c05bff150d7bf468029d1db90739814a3
parent adc791b93045f539ffa9390d149e9dfb88541f19
Author: Florian Dold <florian@dold.me>
Date:   Thu, 25 Sep 2025 13:03:11 +0200

harness: donau provisioning helper

Diffstat:
Mpackages/taler-harness/src/index.ts | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mpackages/taler-harness/src/integrationtests/testrunner.ts | 2++
Mpackages/taler-util/src/http-client/donau-client.ts | 3++-
Mpackages/taler-util/src/types-donau.ts | 2++
4 files changed, 76 insertions(+), 1 deletion(-)

diff --git a/packages/taler-harness/src/index.ts b/packages/taler-harness/src/index.ts @@ -24,6 +24,7 @@ import { Amounts, BalancesResponse, Configuration, + DonauHttpClient, Duration, EddsaPrivP, HttpStatusCode, @@ -1323,6 +1324,75 @@ deploymentCli }); deploymentCli + .subcommand("provisionMerchantDonau", "provision-merchant-donau", { + help: "Provision a merchant and donau connection.", + }) + .requiredOption( + "merchantAuthToken", + ["--merchant-auth-token"], + clk.STRING, + {}, + ) + .requiredOption("donauAuthToken", ["--donau-auth-token"], clk.STRING, {}) + .requiredOption("merchantBaseUrl", ["--merchant-base-url"], clk.STRING, {}) + .requiredOption("donauBaseUrl", ["--donau-base-url"], clk.STRING, {}) + .requiredOption("currency", ["--currency"], clk.STRING, {}) + .action(async (args) => { + const httpLib = createPlatformHttpLib({}); + const donauBaseUrl = args.provisionMerchantDonau.donauBaseUrl; + const merchantUrl = args.provisionMerchantDonau.merchantBaseUrl; + const merchantClient = new TalerMerchantInstanceHttpClient( + merchantUrl, + httpLib, + ); + const currency = args.provisionMerchantDonau.currency; + const merchantToken = args.provisionMerchantDonau + .merchantAuthToken as AccessToken; + const donauToken = args.provisionMerchantDonau + .donauAuthToken as AccessToken; + const instInfo = succeedOrThrow( + await merchantClient.getCurrentInstanceDetails(merchantToken), + ); + const merchantPub = instInfo.merchant_pub; + const donauClient = new DonauHttpClient(donauBaseUrl, { + httpClient: httpLib, + }); + const myCharities = succeedOrThrow( + await donauClient.getCharities(donauToken), + ); + + let existingCharity = myCharities.charities.find( + (x) => x.charity_pub === merchantPub, + ); + let charityId: number; + if (!existingCharity) { + const charityResp = succeedOrThrow( + await donauClient.createCharity(donauToken, { + charity_name: instInfo.name, + charity_pub: merchantPub, + charity_url: merchantUrl, + current_year: new Date().getFullYear(), + max_per_year: `${currency}:100000`, + receipts_to_date: `${currency}:0`, + }), + ); + charityId = charityResp.charity_id; + } else { + charityId = existingCharity.charity_id; + } + succeedOrThrow( + await merchantClient.postDonau({ + token: merchantToken, + body: { + charity_id: charityId, + donau_url: donauBaseUrl, + }, + }), + ); + logger.info(`configured charity ${charityId} for ${merchantUrl}`); + }); + +deploymentCli .subcommand("provisionBankAccount", "provision-bank-account", { help: "Provision a corebank account.", }) diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts b/packages/taler-harness/src/integrationtests/testrunner.ts @@ -51,6 +51,7 @@ import { runDepositLargeTest } from "./test-deposit-large.js"; import { runDepositMergeTest } from "./test-deposit-merge.js"; import { runDepositTooLargeTest } from "./test-deposit-too-large.js"; import { runDepositTest } from "./test-deposit.js"; +import { runDonauCharityManagementTest } from "./test-donau-charity-management.js"; import { runDonauCompatTest } from "./test-donau-compat.js"; import { runDonauMinusTTest } from "./test-donau-minus-t.js"; import { runDonauTest } from "./test-donau.js"; @@ -383,6 +384,7 @@ const allTests: TestMainFunction[] = [ runDonauCompatTest, runDonauTest, runDonauMinusTTest, + runDonauCharityManagementTest, ]; export interface TestRunSpec { diff --git a/packages/taler-util/src/http-client/donau-client.ts b/packages/taler-util/src/http-client/donau-client.ts @@ -21,6 +21,7 @@ import { LibtoolVersion } from "../libtool-version.js"; import { carefullyParseConfig, opEmptySuccess, + OperationOk, opFixedSuccess, opKnownFailure, opKnownHttpFailure, @@ -246,7 +247,7 @@ export class DonauHttpClient { * @param args * @returns */ - async getCharities(token: AccessToken) { + async getCharities(token: AccessToken): Promise<OperationOk<Charities>> { const url = new URL(`charities`, this.baseUrl); const resp = await this.httpLib.fetch(url.href, { method: "GET", diff --git a/packages/taler-util/src/types-donau.ts b/packages/taler-util/src/types-donau.ts @@ -374,10 +374,12 @@ export interface Charities { export interface CharitySummary { charity_id: Integer; + charity_pub: EddsaPublicKeyString; name: string; max_per_year: AmountString; receipts_to_date: AmountString; } + export interface Charity { charity_pub: EddsaPublicKey; name: string;