diff options
Diffstat (limited to 'packages/taler-harness/src/index.ts')
-rw-r--r-- | packages/taler-harness/src/index.ts | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/packages/taler-harness/src/index.ts b/packages/taler-harness/src/index.ts index b8e0cfca1..4ee89518a 100644 --- a/packages/taler-harness/src/index.ts +++ b/packages/taler-harness/src/index.ts @@ -30,6 +30,9 @@ import { setGlobalLogLevelFromString, RegisterAccountRequest, HttpStatusCode, + MerchantInstanceConfig, + Duration, + generateIban, } from "@gnu-taler/taler-util"; import { clk } from "@gnu-taler/taler-util/clk"; import { @@ -522,6 +525,90 @@ deploymentCli }); deploymentCli + .subcommand("genIban", "gen-iban", { + help: "Generate a random IBAN.", + }) + .requiredArgument("countryCode", clk.STRING) + .requiredArgument("length", clk.INT) + .action(async (args) => { + console.log(generateIban(args.genIban.countryCode, args.genIban.length)); + }); + +deploymentCli + .subcommand("provisionMerchantInstance", "provision-merchant-instance", { + help: "Provision a merchant backend instance.", + }) + .requiredArgument("merchantApiBaseUrl", clk.STRING) + .requiredOption("managementToken", ["--management-token"], clk.STRING) + .requiredOption("instanceToken", ["--instance-token"], clk.STRING) + .requiredOption("name", ["--name"], clk.STRING) + .requiredOption("id", ["--id"], clk.STRING) + .requiredOption("payto", ["--payto"], clk.STRING) + .action(async (args) => { + const httpLib = createPlatformHttpLib(); + const baseUrl = args.provisionMerchantInstance.merchantApiBaseUrl; + const managementToken = args.provisionMerchantInstance.managementToken; + const instanceToken = args.provisionMerchantInstance.instanceToken; + const instanceId = args.provisionMerchantInstance.id; + const body: MerchantInstanceConfig = { + address: {}, + auth: { + method: "token", + token: args.provisionMerchantInstance.instanceToken, + }, + default_pay_delay: Duration.toTalerProtocolDuration( + Duration.fromSpec({ hours: 1 }), + ), + default_wire_transfer_delay: { d_us: 1 }, + id: instanceId, + jurisdiction: {}, + name: args.provisionMerchantInstance.name, + use_stefan: true, + }; + const url = new URL("management/instances", baseUrl); + const createResp = await httpLib.fetch(url.href, { + method: "POST", + body, + headers: { + Authorization: `Bearer ${managementToken}`, + }, + }); + if (createResp.status >= 200 && createResp.status <= 299) { + logger.info(`instance ${instanceId} created successfully`); + } else if (createResp.status === HttpStatusCode.Conflict) { + logger.info(`instance ${instanceId} already exists`); + } else { + logger.error( + `unable to create instance ${instanceId}, HTTP status ${createResp.status}`, + ); + } + + const accountsUrl = new URL( + `instances/${instanceId}/private/accounts`, + baseUrl, + ); + const accountBody = { + payto_uri: args.provisionMerchantInstance.payto, + }; + const createAccountResp = await httpLib.fetch(accountsUrl.href, { + method: "POST", + body: accountBody, + headers: { + Authorization: `Bearer ${instanceToken}`, + }, + }); + if (createAccountResp.status != 200) { + console.error( + `unable to configure bank account for instance ${instanceId}, status ${createAccountResp.status}`, + ); + const resp = await createAccountResp.json(); + console.error(j2s(resp)); + process.exit(2); + } + logger.info(`successfully configured bank account for ${instanceId}`); + }); + +deploymentCli .subcommand("provisionBankAccount", "provision-bank-account", { help: "Provision a corebank account.", }) |