gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: wallet-core,harness: towards


From: gnunet
Subject: [taler-wallet-core] branch master updated: wallet-core,harness: towards corebank API instead of fakebank/nexus API
Date: Thu, 21 Sep 2023 17:56:26 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new 58debefbe wallet-core,harness: towards corebank API instead of 
fakebank/nexus API
58debefbe is described below

commit 58debefbe0456ce203877f1cc417c42f4abb0685
Author: Florian Dold <florian@dold.me>
AuthorDate: Thu Sep 21 17:56:29 2023 +0200

    wallet-core,harness: towards corebank API instead of fakebank/nexus API
---
 packages/demobank-ui/src/hooks/access.ts           |    1 +
 packages/taler-harness/src/harness/harness.ts      |   11 +-
 packages/taler-harness/src/harness/helpers.ts      |    4 +-
 .../taler-harness/src/harness/libeufin-apis.ts     |  775 ---------------
 packages/taler-harness/src/harness/libeufin.ts     | 1047 --------------------
 packages/taler-harness/src/index.ts                |    4 +-
 .../test-age-restrictions-merchant.ts              |    4 +-
 .../src/integrationtests/test-bank-api.ts          |    4 +-
 .../integrationtests/test-exchange-management.ts   |    4 +-
 .../taler-harness/src/integrationtests/test-kyc.ts |    4 +-
 .../test-libeufin-api-bankaccount.ts               |  108 --
 .../test-libeufin-api-bankconnection.ts            |   56 --
 .../test-libeufin-api-facade-bad-request.ts        |   68 --
 .../integrationtests/test-libeufin-api-facade.ts   |   70 --
 .../test-libeufin-api-permissions.ts               |   65 --
 .../test-libeufin-api-sandbox-camt.ts              |   76 --
 .../test-libeufin-api-sandbox-transactions.ts      |   69 --
 .../test-libeufin-api-scheduling.ts                |  106 --
 .../integrationtests/test-libeufin-api-users.ts    |   63 --
 .../integrationtests/test-libeufin-bad-gateway.ts  |   75 --
 .../src/integrationtests/test-libeufin-basic.ts    |  317 ------
 .../src/integrationtests/test-libeufin-c5x.ts      |  147 ---
 .../test-libeufin-facade-anastasis.ts              |  179 ----
 .../integrationtests/test-libeufin-keyrotation.ts  |   82 --
 .../test-libeufin-nexus-balance.ts                 |  117 ---
 .../test-libeufin-refund-multiple-users.ts         |  104 --
 .../src/integrationtests/test-libeufin-refund.ts   |  101 --
 .../test-libeufin-sandbox-wire-transfer-cli.ts     |   85 --
 .../src/integrationtests/test-libeufin-tutorial.ts |  130 ---
 .../src/integrationtests/test-payment-fault.ts     |    4 +-
 .../src/integrationtests/test-tipping.ts           |    4 +-
 .../integrationtests/test-wallet-notifications.ts  |    4 +-
 .../integrationtests/test-withdrawal-abort-bank.ts |    4 +-
 .../test-withdrawal-bank-integrated.ts             |    4 +-
 .../integrationtests/test-withdrawal-fakebank.ts   |    5 +-
 .../src/integrationtests/test-withdrawal-fees.ts   |    4 +-
 .../src/integrationtests/test-withdrawal-manual.ts |    4 +-
 .../src/integrationtests/testrunner.ts             |   38 -
 packages/taler-util/src/bank-api-client.ts         |  126 ++-
 packages/taler-util/src/wallet-types.ts            |    8 +-
 packages/taler-wallet-core/src/dbless.ts           |    4 +-
 .../taler-wallet-core/src/operations/testing.ts    |   21 +-
 packages/taler-wallet-core/src/wallet.ts           |   18 +-
 43 files changed, 166 insertions(+), 3958 deletions(-)

diff --git a/packages/demobank-ui/src/hooks/access.ts 
b/packages/demobank-ui/src/hooks/access.ts
index b8b6ab899..61f458e51 100644
--- a/packages/demobank-ui/src/hooks/access.ts
+++ b/packages/demobank-ui/src/hooks/access.ts
@@ -124,6 +124,7 @@ export function useTestingAPI(): TestingAPI {
   const register = async (
     data: SandboxBackend.Access.BankRegistrationRequest,
   ): Promise<HttpResponseOk<void>> => {
+    // FIXME: This API is deprecated.  The normal account registration API 
should be used instead.
     const res = await noAuthRequest<void>(`access-api/testing/register`, {
       method: "POST",
       data,
diff --git a/packages/taler-harness/src/harness/harness.ts 
b/packages/taler-harness/src/harness/harness.ts
index 0c3c367af..edb0071c8 100644
--- a/packages/taler-harness/src/harness/harness.ts
+++ b/packages/taler-harness/src/harness/harness.ts
@@ -28,7 +28,7 @@ import {
   AccountAddDetails,
   AmountJson,
   Amounts,
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   Configuration,
   CoreApiResponse,
   Duration,
@@ -650,8 +650,7 @@ export class FakebankService
   }
 
   get bankAccessApiBaseUrl(): string {
-    let url = new URL("taler-bank-access/", this.baseUrl);
-    return url.href;
+    return this.baseUrl;
   }
 
   async createExchangeAccount(
@@ -666,7 +665,7 @@ export class FakebankService
       accountName: accountName,
       accountPassword: password,
       accountPaytoUri: getPayto(accountName),
-      wireGatewayApiBaseUrl: 
`http://localhost:${this.bankConfig.httpPort}/taler-wire-gateway/${accountName}/`,
+      wireGatewayApiBaseUrl: 
`http://localhost:${this.bankConfig.httpPort}/accounts/${accountName}/taler-wire-gateway/`,
     };
   }
 
@@ -691,14 +690,14 @@ export class FakebankService
       "bank",
     );
     await this.pingUntilAvailable();
-    const bankClient = new BankAccessApiClient(this.bankAccessApiBaseUrl);
+    const bankClient = new TalerCorebankApiClient(this.bankAccessApiBaseUrl);
     for (const acc of this.accounts) {
       await bankClient.registerAccount(acc.accountName, acc.accountPassword);
     }
   }
 
   async pingUntilAvailable(): Promise<void> {
-    const url = 
`http://localhost:${this.bankConfig.httpPort}/taler-bank-integration/config`;
+    const url = `http://localhost:${this.bankConfig.httpPort}/config`;
     await pingProc(this.proc, url, "bank");
   }
 }
diff --git a/packages/taler-harness/src/harness/helpers.ts 
b/packages/taler-harness/src/harness/helpers.ts
index 9892e600b..0a864cad3 100644
--- a/packages/taler-harness/src/harness/helpers.ts
+++ b/packages/taler-harness/src/harness/helpers.ts
@@ -25,7 +25,7 @@
  */
 import {
   AmountString,
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   ConfirmPayResultType,
   Duration,
   Logger,
@@ -560,7 +560,7 @@ export async function withdrawViaBankV2(
 ): Promise<WithdrawViaBankResult> {
   const { walletClient: wallet, bank, exchange, amount } = p;
 
-  const bankClient = new BankAccessApiClient(bank.bankAccessApiBaseUrl);
+  const bankClient = new TalerCorebankApiClient(bank.bankAccessApiBaseUrl);
 
   const user = await bankClient.createRandomBankUser();
   const wop = await bankClient.createWithdrawalOperation(user.username, 
amount);
diff --git a/packages/taler-harness/src/harness/libeufin-apis.ts 
b/packages/taler-harness/src/harness/libeufin-apis.ts
deleted file mode 100644
index 0193f9252..000000000
--- a/packages/taler-harness/src/harness/libeufin-apis.ts
+++ /dev/null
@@ -1,775 +0,0 @@
-/**
- * This file defines most of the API calls offered
- * by Nexus and Sandbox.  They don't have state,
- * therefore got moved away from libeufin.ts where
- * the services get actually started and managed.
- */
-
-import { URL } from "@gnu-taler/taler-util";
-import {
-  createPlatformHttpLib,
-  makeBasicAuthHeader,
-} from "@gnu-taler/taler-util/http";
-import {
-  LibeufinNexusTransactions,
-  LibeufinSandboxAdminBankAccountBalance,
-  NexusBankConnections,
-  NexusFacadeListResponse,
-  NexusGetPermissionsResponse,
-  NexusNewTransactionsInfo,
-  NexusTask,
-  NexusTaskCollection,
-  NexusUserResponse,
-} from "./libeufin.js";
-
-export interface LibeufinSandboxServiceInterface {
-  baseUrl: string;
-}
-
-export interface LibeufinNexusServiceInterface {
-  baseUrl: string;
-}
-
-export interface CreateEbicsSubscriberRequest {
-  hostID: string;
-  userID: string;
-  partnerID: string;
-  systemID?: string;
-}
-
-export interface BankAccountInfo {
-  iban: string;
-  bic: string;
-  name: string;
-  label: string;
-}
-
-export interface CreateEbicsBankConnectionRequest {
-  name: string; // connection name.
-  ebicsURL: string;
-  hostID: string;
-  userID: string;
-  partnerID: string;
-  systemID?: string;
-}
-
-export interface UpdateNexusUserRequest {
-  newPassword: string;
-}
-
-export interface NexusAuth {
-  auth: {
-    username: string;
-    password: string;
-  };
-}
-
-export interface PostNexusTaskRequest {
-  name: string;
-  cronspec: string;
-  type: string; // fetch | submit
-  params:
-    | {
-        level: string; // report | statement | all
-        rangeType: string; // all | since-last | previous-days | latest
-      }
-    | {};
-}
-
-export interface CreateNexusUserRequest {
-  username: string;
-  password: string;
-}
-
-export interface PostNexusPermissionRequest {
-  action: "revoke" | "grant";
-  permission: {
-    subjectType: string;
-    subjectId: string;
-    resourceType: string;
-    resourceId: string;
-    permissionName: string;
-  };
-}
-
-export interface CreateAnastasisFacadeRequest {
-  name: string;
-  connectionName: string;
-  accountName: string;
-  currency: string;
-  reserveTransferLevel: "report" | "statement" | "notification";
-}
-
-export interface CreateTalerWireGatewayFacadeRequest {
-  name: string;
-  connectionName: string;
-  accountName: string;
-  currency: string;
-  reserveTransferLevel: "report" | "statement" | "notification";
-}
-
-export interface SandboxAccountTransactions {
-  payments: {
-    accountLabel: string;
-    creditorIban: string;
-    creditorBic?: string;
-    creditorName: string;
-    debtorIban: string;
-    debtorBic: string;
-    debtorName: string;
-    amount: string;
-    currency: string;
-    subject: string;
-    date: string;
-    creditDebitIndicator: "debit" | "credit";
-    accountServicerReference: string;
-  }[];
-}
-
-export interface DeleteBankConnectionRequest {
-  bankConnectionId: string;
-}
-
-export interface SimulateIncomingTransactionRequest {
-  debtorIban: string;
-  debtorBic: string;
-  debtorName: string;
-
-  /**
-   * Subject / unstructured remittance info.
-   */
-  subject: string;
-
-  /**
-   * Decimal amount without currency.
-   */
-  amount: string;
-}
-
-export interface CreateEbicsBankAccountRequest {
-  subscriber: {
-    hostID: string;
-    partnerID: string;
-    userID: string;
-    systemID?: string;
-  };
-  // IBAN
-  iban: string;
-  // BIC
-  bic: string;
-  // human name
-  name: string;
-  label: string;
-}
-
-export interface LibeufinSandboxAddIncomingRequest {
-  creditorIban: string;
-  creditorBic: string;
-  creditorName: string;
-  debtorIban: string;
-  debtorBic: string;
-  debtorName: string;
-  subject: string;
-  amount: string;
-  currency: string;
-  uid: string;
-  direction: string;
-}
-
-const libeufinHarnessHttpLib = createPlatformHttpLib();
-
-/**
- * APIs spread across Legacy and Access, it is therefore
- * the "base URL" relative to which API every call addresses.
- */
-export namespace LibeufinSandboxApi {
-  // Creates one bank account via the Access API.
-  // Need the /demobanks/$id/access-api as the base URL
-  export async function createDemobankAccount(
-    username: string,
-    password: string,
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    iban: string | null = null,
-  ): Promise<void> {
-    let url = new URL("testing/register", libeufinSandboxService.baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: {
-        username: username,
-        password: password,
-        iban: iban,
-      },
-    });
-  }
-  // Need /demobanks/$id as the base URL
-  export async function createDemobankEbicsSubscriber(
-    req: CreateEbicsSubscriberRequest,
-    demobankAccountLabel: string,
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    username: string = "admin",
-    password: string = "secret",
-  ): Promise<void> {
-    // baseUrl should already be pointed to one demobank.
-    let url = new URL("ebics/subscribers", libeufinSandboxService.baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: {
-        userID: req.userID,
-        hostID: req.hostID,
-        partnerID: req.partnerID,
-        demobankAccountLabel: demobankAccountLabel,
-      },
-    });
-  }
-
-  export async function rotateKeys(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    hostID: string,
-  ): Promise<void> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL(`admin/ebics/hosts/${hostID}/rotate-keys`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: {},
-    });
-  }
-  export async function createEbicsHost(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    hostID: string,
-  ): Promise<void> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL("admin/ebics/hosts", baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: {
-        hostID,
-        ebicsVersion: "2.5",
-      },
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-  }
-
-  export async function createBankAccount(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    req: BankAccountInfo,
-  ): Promise<void> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL(`admin/bank-accounts/${req.label}`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: req,
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-  }
-
-  /**
-   * This function is useless.  It creates a Ebics subscriber
-   * but never gives it a bank account.  To be removed
-   */
-  export async function createEbicsSubscriber(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    req: CreateEbicsSubscriberRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL("admin/ebics/subscribers", baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: req,
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-  }
-
-  /**
-   * Create a new bank account and associate it to
-   * a existing EBICS subscriber.
-   */
-  export async function createEbicsBankAccount(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    req: CreateEbicsBankAccountRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL("admin/ebics/bank-accounts", baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: req,
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-  }
-
-  export async function simulateIncomingTransaction(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    accountLabel: string,
-    req: SimulateIncomingTransactionRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL(
-      `admin/bank-accounts/${accountLabel}/simulate-incoming-transaction`,
-      baseUrl,
-    );
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      body: req,
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-  }
-
-  export async function getAccountTransactions(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    accountLabel: string,
-  ): Promise<SandboxAccountTransactions> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL(
-      `admin/bank-accounts/${accountLabel}/transactions`,
-      baseUrl,
-    );
-    const res = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return (await res.json()) as SandboxAccountTransactions;
-  }
-
-  export async function getCamt053(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    accountLabel: string,
-  ): Promise<any> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL("admin/payments/camt", baseUrl);
-    return await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {
-        bankaccount: accountLabel,
-        type: 53,
-      },
-    });
-  }
-
-  export async function getAccountInfoWithBalance(
-    libeufinSandboxService: LibeufinSandboxServiceInterface,
-    accountLabel: string,
-  ): Promise<LibeufinSandboxAdminBankAccountBalance> {
-    const baseUrl = libeufinSandboxService.baseUrl;
-    let url = new URL(`admin/bank-accounts/${accountLabel}`, baseUrl);
-    const res = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return res.json();
-  }
-}
-
-export namespace LibeufinNexusApi {
-  export async function getAllConnections(
-    nexus: LibeufinNexusServiceInterface,
-  ): Promise<NexusBankConnections> {
-    let url = new URL("bank-connections", nexus.baseUrl);
-    const res = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return res.json();
-  }
-
-  export async function deleteBankConnection(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    req: DeleteBankConnectionRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL("bank-connections/delete-connection", baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: req,
-    });
-  }
-
-  export async function createEbicsBankConnection(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    req: CreateEbicsBankConnectionRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL("bank-connections", baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {
-        source: "new",
-        type: "ebics",
-        name: req.name,
-        data: {
-          ebicsURL: req.ebicsURL,
-          hostID: req.hostID,
-          userID: req.userID,
-          partnerID: req.partnerID,
-          systemID: req.systemID,
-        },
-      },
-    });
-  }
-
-  export async function getBankAccount(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    accountName: string,
-  ): Promise<any> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`bank-accounts/${accountName}`, baseUrl);
-    const resp = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return resp.json();
-  }
-
-  export async function submitInitiatedPayment(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    accountName: string,
-    paymentId: string,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `bank-accounts/${accountName}/payment-initiations/${paymentId}/submit`,
-      baseUrl,
-    );
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {},
-    });
-  }
-
-  export async function fetchAccounts(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    connectionName: string,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `bank-connections/${connectionName}/fetch-accounts`,
-      baseUrl,
-    );
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {},
-    });
-  }
-
-  export async function importConnectionAccount(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    connectionName: string,
-    offeredAccountId: string,
-    nexusBankAccountId: string,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `bank-connections/${connectionName}/import-account`,
-      baseUrl,
-    );
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {
-        offeredAccountId,
-        nexusBankAccountId,
-      },
-    });
-  }
-
-  export async function connectBankConnection(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    connectionName: string,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`bank-connections/${connectionName}/connect`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {},
-    });
-  }
-
-  export async function getPaymentInitiations(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    accountName: string,
-    username: string = "admin",
-    password: string = "test",
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `/bank-accounts/${accountName}/payment-initiations`,
-      baseUrl,
-    );
-    let response = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    const respJson = await response.json();
-    console.log(
-      `Payment initiations of: ${accountName}`,
-      JSON.stringify(respJson, null, 2),
-    );
-  }
-
-  // Uses the Anastasis API to get a list of transactions.
-  export async function getAnastasisTransactions(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    anastasisBaseUrl: string,
-    // FIXME: Nail down type!
-    params: {}, // of the request: {delta: 5, ..}
-    username: string = "admin",
-    password: string = "test",
-  ): Promise<any> {
-    let url = new URL("history/incoming", anastasisBaseUrl);
-    for (const [k, v] of Object.entries(params)) {
-      url.searchParams.set(k, String(v));
-    }
-    let response = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return response.json();
-  }
-
-  // FIXME: this function should return some structured
-  // object that represents a history.
-  export async function getAccountTransactions(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    accountName: string,
-    username: string = "admin",
-    password: string = "test",
-  ): Promise<LibeufinNexusTransactions> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/bank-accounts/${accountName}/transactions`, baseUrl);
-    let response = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return response.json();
-  }
-
-  export async function fetchTransactions(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    accountName: string,
-    rangeType: string = "all",
-    level: string = "report",
-    username: string = "admin",
-    password: string = "test",
-  ): Promise<NexusNewTransactionsInfo> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `/bank-accounts/${accountName}/fetch-transactions`,
-      baseUrl,
-    );
-    const resp = await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {
-        rangeType: rangeType,
-        level: level,
-      },
-    });
-    return resp.json();
-  }
-
-  export async function changePassword(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    username: string,
-    req: UpdateNexusUserRequest,
-    auth: NexusAuth,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/users/${username}/password`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: req,
-    });
-  }
-
-  export async function getUser(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    auth: NexusAuth,
-  ): Promise<NexusUserResponse> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/user`, baseUrl);
-    const resp = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return resp.json();
-  }
-
-  export async function createUser(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    req: CreateNexusUserRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/users`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: req,
-    });
-  }
-
-  export async function getAllPermissions(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-  ): Promise<NexusGetPermissionsResponse> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/permissions`, baseUrl);
-    const resp = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return resp.json();
-  }
-
-  export async function postPermission(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    req: PostNexusPermissionRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/permissions`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: req,
-    });
-  }
-
-  export async function getAllTasks(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    bankAccountName: string,
-  ): Promise<NexusTaskCollection> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/bank-accounts/${bankAccountName}/schedule`, baseUrl);
-    const resp = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return resp.json();
-  }
-
-  export async function getTask(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    bankAccountName: string,
-    // When void, the request returns the list of all the
-    // tasks under this bank account.
-    taskName: string,
-  ): Promise<NexusTask> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `/bank-accounts/${bankAccountName}/schedule/${taskName}`,
-      baseUrl,
-    );
-    if (taskName) url = new URL(taskName, `${url.href}/`);
-    const resp = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    return resp.json();
-  }
-
-  export async function deleteTask(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    bankAccountName: string,
-    taskName: string,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `/bank-accounts/${bankAccountName}/schedule/${taskName}`,
-      baseUrl,
-    );
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "DELETE",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-  }
-
-  export async function postTask(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    bankAccountName: string,
-    req: PostNexusTaskRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`/bank-accounts/${bankAccountName}/schedule`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: req,
-    });
-  }
-
-  export async function deleteFacade(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    facadeName: string,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(`facades/${facadeName}`, baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "DELETE",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-  }
-
-  export async function getAllFacades(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-  ): Promise<NexusFacadeListResponse> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL("facades", baseUrl);
-    const resp = await libeufinHarnessHttpLib.fetch(url.href, {
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-    });
-    // FIXME: Just return validated, typed response here!
-    return resp.json();
-  }
-
-  export async function createAnastasisFacade(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    req: CreateAnastasisFacadeRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL("facades", baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {
-        name: req.name,
-        type: "anastasis",
-        config: {
-          bankAccount: req.accountName,
-          bankConnection: req.connectionName,
-          currency: req.currency,
-          reserveTransferLevel: req.reserveTransferLevel,
-        },
-      },
-    });
-  }
-
-  export async function createTwgFacade(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    req: CreateTalerWireGatewayFacadeRequest,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL("facades", baseUrl);
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {
-        name: req.name,
-        type: "taler-wire-gateway",
-        config: {
-          bankAccount: req.accountName,
-          bankConnection: req.connectionName,
-          currency: req.currency,
-          reserveTransferLevel: req.reserveTransferLevel,
-        },
-      },
-    });
-  }
-
-  export async function submitAllPaymentInitiations(
-    libeufinNexusService: LibeufinNexusServiceInterface,
-    accountId: string,
-  ): Promise<void> {
-    const baseUrl = libeufinNexusService.baseUrl;
-    let url = new URL(
-      `/bank-accounts/${accountId}/submit-all-payment-initiations`,
-      baseUrl,
-    );
-    await libeufinHarnessHttpLib.fetch(url.href, {
-      method: "POST",
-      headers: { Authorization: makeBasicAuthHeader("admin", "secret") },
-      body: {},
-    });
-  }
-}
diff --git a/packages/taler-harness/src/harness/libeufin.ts 
b/packages/taler-harness/src/harness/libeufin.ts
deleted file mode 100644
index caeea85ae..000000000
--- a/packages/taler-harness/src/harness/libeufin.ts
+++ /dev/null
@@ -1,1047 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * This file defines euFin test logic that needs state
- * and that depends on the main harness.ts.  The other
- * definitions - mainly helper functions to call RESTful
- * APIs - moved to libeufin-apis.ts.  That enables harness.ts
- * to depend on such API calls, in contrast to the previous
- * situation where harness.ts had to include this file causing
- * a circular dependency.  */
-
-/**
- * Imports.
- */
-import { AmountString, Logger } from "@gnu-taler/taler-util";
-import {
-  DbInfo,
-  GlobalTestState,
-  ProcessWrapper,
-  getRandomIban,
-  pingProc,
-  runCommand,
-  setupDb,
-  sh,
-} from "../harness/harness.js";
-import {
-  CreateAnastasisFacadeRequest,
-  CreateEbicsBankAccountRequest,
-  CreateEbicsBankConnectionRequest,
-  CreateNexusUserRequest,
-  CreateTalerWireGatewayFacadeRequest,
-  LibeufinNexusApi,
-  LibeufinSandboxApi,
-  LibeufinSandboxServiceInterface,
-  PostNexusPermissionRequest,
-} from "../harness/libeufin-apis.js";
-
-const logger = new Logger("libeufin.ts");
-
-export { LibeufinNexusApi, LibeufinSandboxApi };
-
-export interface LibeufinServices {
-  libeufinSandbox: LibeufinSandboxService;
-  libeufinNexus: LibeufinNexusService;
-  commonDb: DbInfo;
-}
-
-export interface LibeufinSandboxConfig {
-  httpPort: number;
-  databaseJdbcUri: string;
-}
-
-export interface LibeufinNexusConfig {
-  httpPort: number;
-  databaseJdbcUri: string;
-}
-
-export interface LibeufinNexusMoneyMovement {
-  amount: string;
-  creditDebitIndicator: string;
-  details: {
-    debtor: {
-      name: string;
-    };
-    debtorAccount: {
-      iban: string;
-    };
-    debtorAgent: {
-      bic: string;
-    };
-    creditor: {
-      name: string;
-    };
-    creditorAccount: {
-      iban: string;
-    };
-    creditorAgent: {
-      bic: string;
-    };
-    endToEndId: string;
-    unstructuredRemittanceInformation: string;
-  };
-}
-
-export interface LibeufinNexusBatches {
-  batchTransactions: Array<LibeufinNexusMoneyMovement>;
-}
-
-export interface LibeufinNexusTransaction {
-  amount: string;
-  creditDebitIndicator: string;
-  status: string;
-  bankTransactionCode: string;
-  valueDate: string;
-  bookingDate: string;
-  accountServicerRef: string;
-  batches: Array<LibeufinNexusBatches>;
-}
-
-export interface LibeufinNexusTransactions {
-  transactions: Array<LibeufinNexusTransaction>;
-}
-
-export interface LibeufinCliDetails {
-  nexusUrl: string;
-  sandboxUrl: string;
-  nexusDatabaseUri: string;
-  sandboxDatabaseUri: string;
-  nexusUser: LibeufinNexusUser;
-}
-
-export interface LibeufinEbicsSubscriberDetails {
-  hostId: string;
-  partnerId: string;
-  userId: string;
-}
-
-export interface LibeufinEbicsConnectionDetails {
-  subscriberDetails: LibeufinEbicsSubscriberDetails;
-  ebicsUrl: string;
-  connectionName: string;
-}
-
-export interface LibeufinBankAccountDetails {
-  currency: string;
-  iban: string;
-  bic: string;
-  personName: string;
-  accountName: string;
-}
-
-export interface LibeufinNexusUser {
-  username: string;
-  password: string;
-}
-
-export interface LibeufinBackupFileDetails {
-  passphrase: string;
-  outputFile: string;
-  connectionName: string;
-}
-
-export interface LibeufinKeyLetterDetails {
-  outputFile: string;
-  connectionName: string;
-}
-
-export interface LibeufinBankAccountImportDetails {
-  offeredBankAccountName: string;
-  nexusBankAccountName: string;
-  connectionName: string;
-}
-
-export interface LibeufinPreparedPaymentDetails {
-  creditorIban: string;
-  creditorBic: string;
-  creditorName: string;
-  subject: string;
-  amount: string;
-  currency: string;
-  nexusBankAccountName: string;
-}
-
-export interface NexusBankConnection {
-  // connection type.  For example "ebics".
-  type: string;
-
-  // connection name as given by the user at
-  // the moment of creation.
-  name: string;
-}
-
-export interface NexusBankConnections {
-  bankConnections: NexusBankConnection[];
-}
-
-export interface FacadeShowInfo {
-  // Name of the facade, same as the "fcid" parameter.
-  name: string;
-
-  // Type of the facade.
-  // For example, "taler-wire-gateway".
-  type: string;
-
-  // Bas URL of the facade.
-  baseUrl: string;
-
-  // details depending on the facade type.
-  config: any;
-}
-
-export interface FetchParams {
-  // Because transactions are delivered by banks in "batches",
-  // then every batch can have different qualities.  This value
-  // lets the request specify which type of batch ought to be
-  // returned.  Currently, the following two type are supported:
-  //
-  // 'report': typically includes only non booked transactions.
-  // 'statement': typically includes only booked transactions.
-  level: "report" | "statement" | "all";
-
-  // This type indicates the time range of the query.
-  // It allows the following values:
-  //
-  // 'latest': retrieves the last transactions from the bank.
-  //           If there are older unread transactions, those will *not*
-  //           be downloaded.
-  //
-  // 'all': retrieves all the transactions from the bank,
-  //        until the oldest.
-  //
-  // 'previous-days': currently *not* implemented, it will allow
-  //                  the request to download transactions from
-  //                  today until N days before.
-  //
-  // 'since-last': retrieves all the transactions since the last
-  //               time one was downloaded.
-  //
-  rangeType: "latest" | "all" | "previous-days" | "since-last";
-}
-
-export interface NexusTask {
-  // The resource being impacted by this operation.
-  // Typically a (Nexus) bank account being fetched
-  // or whose payments are submitted.  In this cases,
-  // this value is the "bank-account" constant.
-  resourceType: string;
-  // Name of the resource.  In case of "bank-account", that
-  // is the name under which the bank account was imported
-  // from the bank.
-  resourceId: string;
-  // Task name, equals 'taskId'
-  taskName: string;
-  // Values allowed are "fetch" or "submit".
-  taskType: string;
-  // FIXME: describe.
-  taskCronSpec: string;
-  // Only meaningful for "fetch" types.
-  taskParams: FetchParams;
-  // Timestamp in seconds when the next iteration will run.
-  nextScheduledExecutionSec: number;
-  // Timestamp in seconds when the previous iteration ran.
-  prevScheduledExecutionSec: number;
-}
-
-export interface NexusNewTransactionsInfo {
-  // How many transactions are new to Nexus.
-  newTransactions: number;
-  // How many transactions got downloaded by the request.
-  // Note that a transaction can be downloaded multiple
-  // times but only counts as new once.
-  downloadedTransactions: number;
-}
-
-
-export interface NexusUserResponse {
-  // User name
-  username: string;
-
-  // Is this a super user?
-  superuser: boolean;
-}
-
-export interface NexusTaskShortInfo {
-  cronspec: string;
-  type: "fetch" | "submit";
-  params: FetchParams;
-}
-
-export interface NexusTaskCollection {
-  // This field can contain *multiple* objects of the type sampled below.
-  schedule: {
-    [taskName: string]: NexusTaskShortInfo;
-  };
-}
-
-export interface NexusFacadeListResponse {
-  facades: FacadeShowInfo[];
-}
-
-export interface LibeufinSandboxAdminBankAccountBalance {
-  // Balance in the $currency:$amount format.
-  balance: AmountString;
-  // IBAN of the bank account identified by $accountLabel
-  iban: string;
-  // BIC of the bank account identified by $accountLabel
-  bic: string;
-  // Mentions $accountLabel
-  label: string;
-}
-
-export interface LibeufinPermission {
-  subjectType: string;
-  subjectId: string;
-  resourceType: string;
-  resourceId: string;
-  permissionName: string;
-}
-
-export interface NexusGetPermissionsResponse {
-  permissions: LibeufinPermission[];
-}
-
-export class LibeufinSandboxService implements LibeufinSandboxServiceInterface 
{
-  static async create(
-    gc: GlobalTestState,
-    sandboxConfig: LibeufinSandboxConfig,
-  ): Promise<LibeufinSandboxService> {
-    return new LibeufinSandboxService(gc, sandboxConfig);
-  }
-
-  sandboxProc: ProcessWrapper | undefined;
-  globalTestState: GlobalTestState;
-
-  constructor(
-    gc: GlobalTestState,
-    private sandboxConfig: LibeufinSandboxConfig,
-  ) {
-    this.globalTestState = gc;
-  }
-
-  get baseUrl(): string {
-    return `http://localhost:${this.sandboxConfig.httpPort}/`;
-  }
-
-  async start(): Promise<void> {
-    await sh(
-      this.globalTestState,
-      "libeufin-sandbox-config",
-      "libeufin-sandbox config default",
-      {
-        ...process.env,
-        LIBEUFIN_SANDBOX_DB_CONNECTION: this.sandboxConfig.databaseJdbcUri,
-      },
-    );
-
-    this.sandboxProc = this.globalTestState.spawnService(
-      "libeufin-sandbox",
-      ["serve", "--port", `${this.sandboxConfig.httpPort}`],
-      "libeufin-sandbox",
-      {
-        ...process.env,
-        LIBEUFIN_SANDBOX_DB_CONNECTION: this.sandboxConfig.databaseJdbcUri,
-        LIBEUFIN_SANDBOX_ADMIN_PASSWORD: "secret",
-      },
-    );
-  }
-
-  async c53tick(): Promise<string> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-sandbox-c53tick",
-      "libeufin-sandbox camt053tick",
-      {
-        ...process.env,
-        LIBEUFIN_SANDBOX_DB_CONNECTION: this.sandboxConfig.databaseJdbcUri,
-      },
-    );
-    return stdout;
-  }
-
-  async makeTransaction(
-    debit: string,
-    credit: string,
-    amount: string, // $currency:x.y
-    subject: string,
-  ): Promise<string> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-sandbox-maketransfer",
-      `libeufin-sandbox make-transaction --debit-account=${debit} 
--credit-account=${credit} ${amount} "${subject}"`,
-      {
-        ...process.env,
-        LIBEUFIN_SANDBOX_DB_CONNECTION: this.sandboxConfig.databaseJdbcUri,
-      },
-    );
-    return stdout;
-  }
-
-  async pingUntilAvailable(): Promise<void> {
-    const url = this.baseUrl;
-    await pingProc(this.sandboxProc, url, "libeufin-sandbox");
-  }
-}
-
-export class LibeufinNexusService {
-  static async create(
-    gc: GlobalTestState,
-    nexusConfig: LibeufinNexusConfig,
-  ): Promise<LibeufinNexusService> {
-    return new LibeufinNexusService(gc, nexusConfig);
-  }
-
-  nexusProc: ProcessWrapper | undefined;
-  globalTestState: GlobalTestState;
-
-  constructor(gc: GlobalTestState, private nexusConfig: LibeufinNexusConfig) {
-    this.globalTestState = gc;
-  }
-
-  get baseUrl(): string {
-    return `http://localhost:${this.nexusConfig.httpPort}/`;
-  }
-
-  async start(): Promise<void> {
-    await runCommand(
-      this.globalTestState,
-      "libeufin-nexus-superuser",
-      "libeufin-nexus",
-      ["superuser", "admin", "--password", "test"],
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_DB_CONNECTION: this.nexusConfig.databaseJdbcUri,
-      },
-    );
-
-    this.nexusProc = this.globalTestState.spawnService(
-      "libeufin-nexus",
-      ["serve", "--port", `${this.nexusConfig.httpPort}`],
-      "libeufin-nexus",
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_DB_CONNECTION: this.nexusConfig.databaseJdbcUri,
-      },
-    );
-  }
-
-  async pingUntilAvailable(): Promise<void> {
-    const url = `${this.baseUrl}config`;
-    await pingProc(this.nexusProc, url, "libeufin-nexus");
-  }
-
-  async createNexusSuperuser(details: LibeufinNexusUser): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-nexus",
-      `libeufin-nexus superuser ${details.username} 
--password=${details.password}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_DB_CONNECTION: this.nexusConfig.databaseJdbcUri,
-      },
-    );
-    console.log(stdout);
-  }
-}
-
-export interface TwgAddIncomingRequest {
-  amount: string;
-  reserve_pub: string;
-  debit_account: string;
-}
-
-/**
- * The bundle aims at minimizing the amount of input
- * data that is required to initialize a new user + Ebics
- * connection.
- */
-export class NexusUserBundle {
-  userReq: CreateNexusUserRequest;
-  connReq: CreateEbicsBankConnectionRequest;
-  anastasisReq: CreateAnastasisFacadeRequest;
-  twgReq: CreateTalerWireGatewayFacadeRequest;
-  twgTransferPermission: PostNexusPermissionRequest;
-  twgHistoryPermission: PostNexusPermissionRequest;
-  twgAddIncomingPermission: PostNexusPermissionRequest;
-  localAccountName: string;
-  remoteAccountName: string;
-
-  constructor(salt: string, ebicsURL: string) {
-    this.userReq = {
-      username: `username-${salt}`,
-      password: `password-${salt}`,
-    };
-
-    this.connReq = {
-      name: `connection-${salt}`,
-      ebicsURL: ebicsURL,
-      hostID: `ebicshost,${salt}`,
-      partnerID: `ebicspartner,${salt}`,
-      userID: `ebicsuser,${salt}`,
-    };
-
-    this.twgReq = {
-      currency: "EUR",
-      name: `twg-${salt}`,
-      reserveTransferLevel: "report",
-      accountName: `local-account-${salt}`,
-      connectionName: `connection-${salt}`,
-    };
-    this.anastasisReq = {
-      currency: "EUR",
-      name: `anastasis-${salt}`,
-      reserveTransferLevel: "report",
-      accountName: `local-account-${salt}`,
-      connectionName: `connection-${salt}`,
-    };
-    this.remoteAccountName = `remote-account-${salt}`;
-    this.localAccountName = `local-account-${salt}`;
-    this.twgTransferPermission = {
-      action: "grant",
-      permission: {
-        subjectId: `username-${salt}`,
-        subjectType: "user",
-        resourceType: "facade",
-        resourceId: `twg-${salt}`,
-        permissionName: "facade.talerWireGateway.transfer",
-      },
-    };
-    this.twgHistoryPermission = {
-      action: "grant",
-      permission: {
-        subjectId: `username-${salt}`,
-        subjectType: "user",
-        resourceType: "facade",
-        resourceId: `twg-${salt}`,
-        permissionName: "facade.talerWireGateway.history",
-      },
-    };
-  }
-}
-
-/**
- * The bundle aims at minimizing the amount of input
- * data that is required to initialize a new Sandbox
- * customer, associating their bank account with a Ebics
- * subscriber.
- */
-export class SandboxUserBundle {
-  ebicsBankAccount: CreateEbicsBankAccountRequest;
-  constructor(salt: string) {
-    this.ebicsBankAccount = {
-      bic: "BELADEBEXXX",
-      iban: getRandomIban(),
-      label: `remote-account-${salt}`,
-      name: `Taler Exchange: ${salt}`,
-      subscriber: {
-        hostID: `ebicshost,${salt}`,
-        partnerID: `ebicspartner,${salt}`,
-        userID: `ebicsuser,${salt}`,
-      },
-    };
-  }
-}
-
-export class LibeufinCli {
-  cliDetails: LibeufinCliDetails;
-  globalTestState: GlobalTestState;
-
-  constructor(gc: GlobalTestState, cd: LibeufinCliDetails) {
-    this.globalTestState = gc;
-    this.cliDetails = cd;
-  }
-
-  env(): any {
-    return {
-      ...process.env,
-      LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl,
-      LIBEUFIN_SANDBOX_USERNAME: "admin",
-      LIBEUFIN_SANDBOX_PASSWORD: "secret",
-    };
-  }
-
-  async checkSandbox(): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-checksandbox",
-      "libeufin-cli sandbox check",
-      this.env(),
-    );
-  }
-
-  async registerBankCustomer(
-    username: string,
-    password: string,
-  ): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-registercustomer",
-      "libeufin-cli sandbox demobank register --name='Test Customer'",
-      {
-        ...process.env,
-        LIBEUFIN_SANDBOX_URL: this.cliDetails.sandboxUrl + 
"/demobanks/default",
-        LIBEUFIN_SANDBOX_USERNAME: username,
-        LIBEUFIN_SANDBOX_PASSWORD: password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async createEbicsHost(hostId: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-createebicshost",
-      `libeufin-cli sandbox ebicshost create --host-id=${hostId}`,
-      this.env(),
-    );
-    console.log(stdout);
-  }
-
-  async createEbicsSubscriber(
-    details: LibeufinEbicsSubscriberDetails,
-  ): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-createebicssubscriber",
-      "libeufin-cli sandbox ebicssubscriber create" +
-      ` --host-id=${details.hostId}` +
-      ` --partner-id=${details.partnerId}` +
-      ` --user-id=${details.userId}`,
-      this.env(),
-    );
-    console.log(stdout);
-  }
-
-  async createEbicsBankAccount(
-    sd: LibeufinEbicsSubscriberDetails,
-    bankAccountDetails: LibeufinBankAccountDetails,
-  ): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-createebicsbankaccount",
-      "libeufin-cli sandbox ebicsbankaccount create" +
-      ` --iban=${bankAccountDetails.iban}` +
-      ` --bic=${bankAccountDetails.bic}` +
-      ` --person-name='${bankAccountDetails.personName}'` +
-      ` --account-name=${bankAccountDetails.accountName}` +
-      ` --ebics-host-id=${sd.hostId}` +
-      ` --ebics-partner-id=${sd.partnerId}` +
-      ` --ebics-user-id=${sd.userId}`,
-      this.env(),
-    );
-    console.log(stdout);
-  }
-
-  async generateTransactions(accountName: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-generatetransactions",
-      `libeufin-cli sandbox bankaccount generate-transactions ${accountName}`,
-      this.env(),
-    );
-    console.log(stdout);
-  }
-
-  async showSandboxTransactions(accountName: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-showsandboxtransactions",
-      `libeufin-cli sandbox bankaccount transactions ${accountName}`,
-      this.env(),
-    );
-    console.log(stdout);
-  }
-
-  async createEbicsConnection(
-    connectionDetails: LibeufinEbicsConnectionDetails,
-  ): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-createebicsconnection",
-      `libeufin-cli connections new-ebics-connection` +
-      ` --ebics-url=${connectionDetails.ebicsUrl}` +
-      ` --host-id=${connectionDetails.subscriberDetails.hostId}` +
-      ` --partner-id=${connectionDetails.subscriberDetails.partnerId}` +
-      ` --ebics-user-id=${connectionDetails.subscriberDetails.userId}` +
-      ` ${connectionDetails.connectionName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async createBackupFile(details: LibeufinBackupFileDetails): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-createbackupfile",
-      `libeufin-cli connections export-backup` +
-      ` --passphrase=${details.passphrase}` +
-      ` --output-file=${details.outputFile}` +
-      ` ${details.connectionName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async createKeyLetter(details: LibeufinKeyLetterDetails): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-createkeyletter",
-      `libeufin-cli connections get-key-letter` +
-      ` ${details.connectionName} ${details.outputFile}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async connect(connectionName: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-connect",
-      `libeufin-cli connections connect ${connectionName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async downloadBankAccounts(connectionName: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-downloadbankaccounts",
-      `libeufin-cli connections download-bank-accounts ${connectionName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async listOfferedBankAccounts(connectionName: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-listofferedbankaccounts",
-      `libeufin-cli connections list-offered-bank-accounts ${connectionName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async importBankAccount(
-    importDetails: LibeufinBankAccountImportDetails,
-  ): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-importbankaccount",
-      "libeufin-cli connections import-bank-account" +
-      ` --offered-account-id=${importDetails.offeredBankAccountName}` +
-      ` --nexus-bank-account-id=${importDetails.nexusBankAccountName}` +
-      ` ${importDetails.connectionName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async fetchTransactions(bankAccountName: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-fetchtransactions",
-      `libeufin-cli accounts fetch-transactions ${bankAccountName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async transactions(bankAccountName: string): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-transactions",
-      `libeufin-cli accounts transactions ${bankAccountName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async preparePayment(details: LibeufinPreparedPaymentDetails): Promise<void> 
{
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-preparepayment",
-      `libeufin-cli accounts prepare-payment` +
-      ` --creditor-iban=${details.creditorIban}` +
-      ` --creditor-bic=${details.creditorBic}` +
-      ` --creditor-name='${details.creditorName}'` +
-      ` --payment-subject='${details.subject}'` +
-      ` --payment-amount=${details.currency}:${details.amount}` +
-      ` ${details.nexusBankAccountName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async submitPayment(
-    details: LibeufinPreparedPaymentDetails,
-    paymentUuid: string,
-  ): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-submitpayments",
-      `libeufin-cli accounts submit-payments` +
-      ` --payment-uuid=${paymentUuid}` +
-      ` ${details.nexusBankAccountName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async newAnastasisFacade(req: NewAnastasisFacadeReq): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-new-anastasis-facade",
-      `libeufin-cli facades new-anastasis-facade` +
-      ` --currency ${req.currency}` +
-      ` --facade-name ${req.facadeName}` +
-      ` ${req.connectionName} ${req.accountName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async newTalerWireGatewayFacade(req: NewTalerWireGatewayReq): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-new-taler-wire-gateway-facade",
-      `libeufin-cli facades new-taler-wire-gateway-facade` +
-      ` --currency ${req.currency}` +
-      ` --facade-name ${req.facadeName}` +
-      ` ${req.connectionName} ${req.accountName}`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-
-  async listFacades(): Promise<void> {
-    const stdout = await sh(
-      this.globalTestState,
-      "libeufin-cli-facades-list",
-      `libeufin-cli facades list`,
-      {
-        ...process.env,
-        LIBEUFIN_NEXUS_URL: this.cliDetails.nexusUrl,
-        LIBEUFIN_NEXUS_USERNAME: this.cliDetails.nexusUser.username,
-        LIBEUFIN_NEXUS_PASSWORD: this.cliDetails.nexusUser.password,
-      },
-    );
-    console.log(stdout);
-  }
-}
-
-interface NewAnastasisFacadeReq {
-  facadeName: string;
-  connectionName: string;
-  accountName: string;
-  currency: string;
-}
-
-interface NewTalerWireGatewayReq {
-  facadeName: string;
-  connectionName: string;
-  accountName: string;
-  currency: string;
-}
-
-/**
- * Launch Nexus and Sandbox AND creates users / facades / bank accounts /
- * .. all that's required to start making bank traffic.
- */
-export async function launchLibeufinServices(
-  t: GlobalTestState,
-  nexusUserBundle: NexusUserBundle[],
-  sandboxUserBundle: SandboxUserBundle[] = [],
-  withFacades: string[] = [], // takes only "twg" and/or "anastasis"
-): Promise<LibeufinServices> {
-  const db = await setupDb(t);
-
-  const libeufinSandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5010,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-  });
-
-  await libeufinSandbox.start();
-  await libeufinSandbox.pingUntilAvailable();
-
-  const libeufinNexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-
-  await libeufinNexus.start();
-  await libeufinNexus.pingUntilAvailable();
-  console.log("Libeufin services launched!");
-
-  for (let sb of sandboxUserBundle) {
-    await LibeufinSandboxApi.createEbicsHost(
-      libeufinSandbox,
-      sb.ebicsBankAccount.subscriber.hostID,
-    );
-    await LibeufinSandboxApi.createEbicsSubscriber(
-      libeufinSandbox,
-      sb.ebicsBankAccount.subscriber,
-    );
-    await LibeufinSandboxApi.createDemobankAccount(
-      sb.ebicsBankAccount.label,
-      "password-unused",
-      { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/access-api/" },
-    );
-    await LibeufinSandboxApi.createDemobankEbicsSubscriber(
-      sb.ebicsBankAccount.subscriber,
-      sb.ebicsBankAccount.label,
-      { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/" },
-    );
-  }
-  console.log("Sandbox user(s) / account(s) / subscriber(s): created");
-
-  for (let nb of nexusUserBundle) {
-    await LibeufinNexusApi.createEbicsBankConnection(libeufinNexus, 
nb.connReq);
-    await LibeufinNexusApi.connectBankConnection(
-      libeufinNexus,
-      nb.connReq.name,
-    );
-    await LibeufinNexusApi.fetchAccounts(libeufinNexus, nb.connReq.name);
-    await LibeufinNexusApi.importConnectionAccount(
-      libeufinNexus,
-      nb.connReq.name,
-      nb.remoteAccountName,
-      nb.localAccountName,
-    );
-    await LibeufinNexusApi.createUser(libeufinNexus, nb.userReq);
-    for (let facade of withFacades) {
-      switch (facade) {
-        case "twg":
-          await LibeufinNexusApi.createTwgFacade(libeufinNexus, nb.twgReq);
-          await LibeufinNexusApi.postPermission(
-            libeufinNexus,
-            nb.twgTransferPermission,
-          );
-          await LibeufinNexusApi.postPermission(
-            libeufinNexus,
-            nb.twgHistoryPermission,
-          );
-          break;
-        case "anastasis":
-          await LibeufinNexusApi.createAnastasisFacade(
-            libeufinNexus,
-            nb.anastasisReq,
-          );
-      }
-    }
-  }
-  console.log(
-    "Nexus user(s) / connection(s) / facade(s) / permission(s): created",
-  );
-
-  return {
-    commonDb: db,
-    libeufinNexus: libeufinNexus,
-    libeufinSandbox: libeufinSandbox,
-  };
-}
-
-/**
- * Helper function that searches a payment among
- * a list, as returned by Nexus.  The key is just
- * the payment subject.
- */
-export function findNexusPayment(
-  key: string,
-  payments: LibeufinNexusTransactions,
-): LibeufinNexusMoneyMovement | void {
-  let transactions = payments["transactions"];
-  for (let i = 0; i < transactions.length; i++) {
-    //FIXME: last line won't compile with the current definition of the type
-    //@ts-ignore
-    let batches = transactions[i]["camtData"]["batches"];
-    for (let y = 0; y < batches.length; y++) {
-      let movements = batches[y]["batchTransactions"];
-      for (let z = 0; z < movements.length; z++) {
-        let movement = movements[z];
-        if (movement["details"]["unstructuredRemittanceInformation"] == key)
-          return movement;
-      }
-    }
-  }
-}
diff --git a/packages/taler-harness/src/index.ts 
b/packages/taler-harness/src/index.ts
index f5d4fd2c2..8ace45a89 100644
--- a/packages/taler-harness/src/index.ts
+++ b/packages/taler-harness/src/index.ts
@@ -20,7 +20,7 @@
 import {
   addPaytoQueryParams,
   Amounts,
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   Configuration,
   decodeCrock,
   j2s,
@@ -236,7 +236,7 @@ deploymentCli
 
     console.log(tipReserveResp);
 
-    const bankAccessApiClient = new BankAccessApiClient(
+    const bankAccessApiClient = new TalerCorebankApiClient(
       args.tipTopup.bankAccessUrl,
       {
         auth: {
diff --git 
a/packages/taler-harness/src/integrationtests/test-age-restrictions-merchant.ts 
b/packages/taler-harness/src/integrationtests/test-age-restrictions-merchant.ts
index 7f936a479..90b08724f 100644
--- 
a/packages/taler-harness/src/integrationtests/test-age-restrictions-merchant.ts
+++ 
b/packages/taler-harness/src/integrationtests/test-age-restrictions-merchant.ts
@@ -27,7 +27,7 @@ import {
   withdrawViaBankV2,
 } from "../harness/helpers.js";
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   MerchantApiClient,
   WireGatewayApiClient,
 } from "@gnu-taler/taler-util";
@@ -179,7 +179,7 @@ export async function runAgeRestrictionsMerchantTest(t: 
GlobalTestState) {
 
   // Pay with coin from tipping
   {
-    const bankClient = new BankAccessApiClient(bank.bankAccessApiBaseUrl);
+    const bankClient = new TalerCorebankApiClient(bank.bankAccessApiBaseUrl);
     const mbu = await bankClient.createRandomBankUser();
     const tipReserveResp = await merchantClient.createTippingReserve({
       exchange_url: exchange.baseUrl,
diff --git a/packages/taler-harness/src/integrationtests/test-bank-api.ts 
b/packages/taler-harness/src/integrationtests/test-bank-api.ts
index a13ff63c7..740e89c30 100644
--- a/packages/taler-harness/src/integrationtests/test-bank-api.ts
+++ b/packages/taler-harness/src/integrationtests/test-bank-api.ts
@@ -18,7 +18,7 @@
  * Imports.
  */
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   CreditDebitIndicator,
   WireGatewayApiClient,
   createEddsaKeyPair,
@@ -99,7 +99,7 @@ export async function runBankApiTest(t: GlobalTestState) {
 
   console.log("setup done!");
 
-  const bankClient = new BankAccessApiClient(bank.bankAccessApiBaseUrl);
+  const bankClient = new TalerCorebankApiClient(bank.bankAccessApiBaseUrl);
 
   const bankUser = await bankClient.registerAccount("user1", "pw1");
 
diff --git 
a/packages/taler-harness/src/integrationtests/test-exchange-management.ts 
b/packages/taler-harness/src/integrationtests/test-exchange-management.ts
index 9338a8988..329012e42 100644
--- a/packages/taler-harness/src/integrationtests/test-exchange-management.ts
+++ b/packages/taler-harness/src/integrationtests/test-exchange-management.ts
@@ -18,7 +18,7 @@
  * Imports.
  */
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   ExchangesListResponse,
   TalerErrorCode,
   URL,
@@ -263,7 +263,7 @@ export async function runExchangeManagementTest(
 
   // Create withdrawal operation
 
-  const bankClient = new BankAccessApiClient(bank.bankAccessApiBaseUrl);
+  const bankClient = new TalerCorebankApiClient(bank.bankAccessApiBaseUrl);
 
   const user = await bankClient.createRandomBankUser();
   const wop = await bankClient.createWithdrawalOperation(
diff --git a/packages/taler-harness/src/integrationtests/test-kyc.ts 
b/packages/taler-harness/src/integrationtests/test-kyc.ts
index 1f7358b66..2b2b57183 100644
--- a/packages/taler-harness/src/integrationtests/test-kyc.ts
+++ b/packages/taler-harness/src/integrationtests/test-kyc.ts
@@ -18,7 +18,7 @@
  * Imports.
  */
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   Duration,
   j2s,
   Logger,
@@ -302,7 +302,7 @@ export async function runKycTest(t: GlobalTestState) {
 
   // Withdraw digital cash into the wallet.
 
-  const bankClient = new BankAccessApiClient(bank.bankAccessApiBaseUrl);
+  const bankClient = new TalerCorebankApiClient(bank.bankAccessApiBaseUrl);
 
   const amount = "TESTKUDOS:20";
   const user = await bankClient.createRandomBankUser();
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-bankaccount.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-bankaccount.ts
deleted file mode 100644
index e5e3dfe64..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-bankaccount.ts
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  LibeufinNexusApi,
-  LibeufinNexusService,
-  LibeufinSandboxService,
-  LibeufinSandboxApi,
-  findNexusPayment,
-} from "../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinApiBankaccountTest(t: GlobalTestState) {
-  const nexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-  await nexus.start();
-  await nexus.pingUntilAvailable();
-
-  await LibeufinNexusApi.createUser(nexus, {
-    username: "one",
-    password: "testing-the-bankaccount-api",
-  });
-  const sandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5012,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-  });
-  await sandbox.start();
-  await sandbox.pingUntilAvailable();
-  await LibeufinSandboxApi.createEbicsHost(sandbox, "mock");
-  await LibeufinSandboxApi.createDemobankAccount(
-    "mock",
-    "password-unused",
-    { baseUrl: sandbox.baseUrl + "/demobanks/default/access-api/" },
-    "DE71500105179674997361",
-  );
-  await LibeufinSandboxApi.createDemobankEbicsSubscriber(
-    {
-      hostID: "mock",
-      partnerID: "mock",
-      userID: "mock",
-    },
-    "mock",
-    { baseUrl: sandbox.baseUrl + "/demobanks/default/" },
-  );
-  await LibeufinNexusApi.createEbicsBankConnection(nexus, {
-    name: "bankaccount-api-test-connection",
-    ebicsURL: "http://localhost:5012/ebicsweb";,
-    hostID: "mock",
-    userID: "mock",
-    partnerID: "mock",
-  });
-  await LibeufinNexusApi.connectBankConnection(
-    nexus,
-    "bankaccount-api-test-connection",
-  );
-  await LibeufinNexusApi.fetchAccounts(
-    nexus,
-    "bankaccount-api-test-connection",
-  );
-
-  await LibeufinNexusApi.importConnectionAccount(
-    nexus,
-    "bankaccount-api-test-connection",
-    "mock",
-    "local-mock",
-  );
-  await LibeufinSandboxApi.simulateIncomingTransaction(
-    sandbox,
-    "mock", // creditor bankaccount label
-    {
-      debtorIban: "DE84500105176881385584",
-      debtorBic: "BELADEBEXXX",
-      debtorName: "mock2",
-      amount: "EUR:1",
-      subject: "mock subject",
-    },
-  );
-  await LibeufinNexusApi.fetchTransactions(nexus, "local-mock");
-  let transactions = await LibeufinNexusApi.getAccountTransactions(
-    nexus,
-    "local-mock",
-  );
-  let el = findNexusPayment("mock subject", transactions);
-  t.assertTrue(el instanceof Object);
-}
-
-runLibeufinApiBankaccountTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-bankconnection.ts
 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-bankconnection.ts
deleted file mode 100644
index 243500dc9..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-bankconnection.ts
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import { LibeufinNexusApi, LibeufinNexusService } from 
"../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinApiBankconnectionTest(t: GlobalTestState) {
-  const nexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-  await nexus.start();
-  await nexus.pingUntilAvailable();
-
-  await LibeufinNexusApi.createUser(nexus, {
-    username: "one",
-    password: "testing-the-bankconnection-api",
-  });
-
-  await LibeufinNexusApi.createEbicsBankConnection(nexus, {
-    name: "bankconnection-api-test-connection",
-    ebicsURL: "http://localhost:5012/ebicsweb";,
-    hostID: "mock",
-    userID: "mock",
-    partnerID: "mock",
-  });
-
-  let connections = await LibeufinNexusApi.getAllConnections(nexus);
-  t.assertTrue(connections.bankConnections.length == 1);
-
-  await LibeufinNexusApi.deleteBankConnection(nexus, {
-    bankConnectionId: "bankconnection-api-test-connection",
-  });
-  connections = await LibeufinNexusApi.getAllConnections(nexus);
-  t.assertTrue(connections.bankConnections.length == 0);
-}
-runLibeufinApiBankconnectionTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-facade-bad-request.ts
 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-facade-bad-request.ts
deleted file mode 100644
index 27cc81588..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-facade-bad-request.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { URL } from "@gnu-taler/taler-util";
-import { GlobalTestState, harnessHttpLib } from "../harness/harness.js";
-import {
-  launchLibeufinServices,
-  NexusUserBundle,
-  SandboxUserBundle,
-} from "../harness/libeufin.js";
-import {
-  createPlatformHttpLib,
-  makeBasicAuthHeader,
-} from "@gnu-taler/taler-util/http";
-
-export async function runLibeufinApiFacadeBadRequestTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus],
-    [user01sandbox],
-    ["twg"],
-  );
-  console.log("malformed facade");
-  const baseUrl = libeufinServices.libeufinNexus.baseUrl;
-  let url = new URL("facades", baseUrl);
-  let resp = await harnessHttpLib.fetch(url.href, {
-    method: "POST",
-    body: {
-      name: "malformed-facade",
-      type: "taler-wire-gateway",
-      config: {}, // malformation here.
-    },
-    headers: {
-      Authorization: makeBasicAuthHeader("admin", "test"),
-    },
-  });
-  t.assertTrue(resp.status == 400);
-}
-
-runLibeufinApiFacadeBadRequestTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-facade.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-facade.ts
deleted file mode 100644
index a819dd481..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-api-facade.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  SandboxUserBundle,
-  NexusUserBundle,
-  launchLibeufinServices,
-  LibeufinNexusApi,
-} from "../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinApiFacadeTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus],
-    [user01sandbox],
-    ["twg"],
-  );
-  let resp = await LibeufinNexusApi.getAllFacades(
-    libeufinServices.libeufinNexus,
-  );
-  // check that original facade shows up.
-  t.assertTrue(resp.facades[0].name == user01nexus.twgReq["name"]);
-
-  const twgBaseUrl: string = resp.facades[0]["baseUrl"];
-  t.assertTrue(typeof twgBaseUrl === "string");
-  t.assertTrue(twgBaseUrl.startsWith("http://";));
-  t.assertTrue(twgBaseUrl.endsWith("/"));
-
-  // delete it.
-  await LibeufinNexusApi.deleteFacade(
-    libeufinServices.libeufinNexus,
-    user01nexus.twgReq["name"],
-  );
-  resp = await LibeufinNexusApi.getAllFacades(libeufinServices.libeufinNexus);
-  t.assertTrue(!resp.hasOwnProperty("facades"));
-}
-
-runLibeufinApiFacadeTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-permissions.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-permissions.ts
deleted file mode 100644
index 56443c20a..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-permissions.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  NexusUserBundle,
-  LibeufinNexusApi,
-  LibeufinNexusService,
-} from "../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinApiPermissionsTest(t: GlobalTestState) {
-  const nexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-  await nexus.start();
-  await nexus.pingUntilAvailable();
-
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-
-  await LibeufinNexusApi.createUser(nexus, user01nexus.userReq);
-  await LibeufinNexusApi.postPermission(
-    nexus,
-    user01nexus.twgTransferPermission,
-  );
-  let transferPermission = await LibeufinNexusApi.getAllPermissions(nexus);
-  let element = transferPermission["permissions"].pop();
-  t.assertTrue(!!element);
-  t.assertTrue(
-    element["permissionName"] == "facade.talerwiregateway.transfer" &&
-      element["subjectId"] == "username-01",
-  );
-  let denyTransfer = user01nexus.twgTransferPermission;
-
-  // Now revoke permission.
-  denyTransfer["action"] = "revoke";
-  await LibeufinNexusApi.postPermission(nexus, denyTransfer);
-
-  transferPermission = await LibeufinNexusApi.getAllPermissions(nexus);
-  t.assertTrue(transferPermission["permissions"].length == 0);
-}
-
-runLibeufinApiPermissionsTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-sandbox-camt.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-sandbox-camt.ts
deleted file mode 100644
index 22b411dc2..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-sandbox-camt.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  LibeufinSandboxApi,
-  LibeufinSandboxService,
-} from "../harness/libeufin.js";
-
-// This test only checks that LibEuFin doesn't fail when
-// it generates Camt statements - no assertions take place.
-// Furthermore, it prints the Camt.053 being generated.
-export async function runLibeufinApiSandboxCamtTest(t: GlobalTestState) {
-  const sandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5012,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-  });
-  await sandbox.start();
-  await sandbox.pingUntilAvailable();
-
-  await LibeufinSandboxApi.createDemobankAccount(
-    "mock-account-0",
-    "password-unused",
-    { baseUrl: sandbox.baseUrl + "/demobanks/default/access-api/" },
-  );
-  await LibeufinSandboxApi.createDemobankAccount(
-    "mock-account-1",
-    "password-unused",
-    { baseUrl: sandbox.baseUrl + "/demobanks/default/access-api/" },
-  );
-  await sandbox.makeTransaction(
-    "mock-account-0",
-    "mock-account-1",
-    "EUR:1",
-    "+1",
-  );
-  await sandbox.makeTransaction(
-    "mock-account-0",
-    "mock-account-1",
-    "EUR:1",
-    "+1",
-  );
-  await sandbox.makeTransaction(
-    "mock-account-0",
-    "mock-account-1",
-    "EUR:1",
-    "+1",
-  );
-  await sandbox.makeTransaction(
-    "mock-account-1",
-    "mock-account-0",
-    "EUR:5",
-    "minus 5",
-  );
-  await sandbox.c53tick();
-  let ret = await LibeufinSandboxApi.getCamt053(sandbox, "mock-account-1");
-  console.log(ret);
-}
-runLibeufinApiSandboxCamtTest.experimental = true;
-runLibeufinApiSandboxCamtTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-sandbox-transactions.ts
 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-sandbox-transactions.ts
deleted file mode 100644
index 6cfc55aa6..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-sandbox-transactions.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  LibeufinSandboxApi,
-  LibeufinSandboxService,
-} from "../harness/libeufin.js";
-
-export async function runLibeufinApiSandboxTransactionsTest(
-  t: GlobalTestState,
-) {
-  const sandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5012,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-  });
-  await sandbox.start();
-  await sandbox.pingUntilAvailable();
-  await LibeufinSandboxApi.createDemobankAccount(
-    "mock-account",
-    "password-unused",
-    { baseUrl: sandbox.baseUrl + "/demobanks/default/access-api/" },
-    "DE71500105179674997361",
-  );
-  await LibeufinSandboxApi.simulateIncomingTransaction(
-    sandbox,
-    "mock-account",
-    {
-      debtorIban: "DE84500105176881385584",
-      debtorBic: "BELADEBEXXX",
-      debtorName: "mock2",
-      subject: "mock subject",
-      amount: "EUR:1",
-    },
-  );
-  await LibeufinSandboxApi.simulateIncomingTransaction(
-    sandbox,
-    "mock-account",
-    {
-      debtorIban: "DE84500105176881385584",
-      debtorBic: "BELADEBEXXX",
-      debtorName: "mock2",
-      subject: "mock subject 2",
-      amount: "EUR:1.1",
-    },
-  );
-  let ret = await LibeufinSandboxApi.getAccountInfoWithBalance(
-    sandbox,
-    "mock-account",
-  );
-  t.assertAmountEquals(ret.balance, "EUR:2.1");
-}
-runLibeufinApiSandboxTransactionsTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-scheduling.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-scheduling.ts
deleted file mode 100644
index 15ed2ab78..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-scheduling.ts
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  launchLibeufinServices,
-  LibeufinNexusApi,
-  LibeufinNexusService,
-  NexusUserBundle,
-  SandboxUserBundle,
-} from "../harness/libeufin.js";
-
-/**
- * Test Nexus scheduling API.  It creates a task, check whether it shows
- * up, then deletes it, and check if it's gone.  Ideally, a check over the
- * _liveliness_ of a scheduled task should happen.
- */
-export async function runLibeufinApiSchedulingTest(t: GlobalTestState) {
-  const nexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-  await nexus.start();
-  await nexus.pingUntilAvailable();
-
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-  await launchLibeufinServices(t, [user01nexus], [user01sandbox]);
-  await LibeufinNexusApi.postTask(nexus, user01nexus.localAccountName, {
-    name: "test-task",
-    cronspec: "* * *",
-    type: "fetch",
-    params: {
-      level: "all",
-      rangeType: "all",
-    },
-  });
-  let resp = await LibeufinNexusApi.getTask(
-    nexus,
-    user01nexus.localAccountName,
-    "test-task",
-  );
-  t.assertTrue(resp.taskName == "test-task");
-  await LibeufinNexusApi.deleteTask(
-    nexus,
-    user01nexus.localAccountName,
-    "test-task",
-  );
-  try {
-    await LibeufinNexusApi.getTask(
-      nexus,
-      user01nexus.localAccountName,
-      "test-task",
-    );
-  } catch (err: any) {
-    t.assertTrue(err.response.status == 404);
-  }
-
-  // Same with submit task.
-  await LibeufinNexusApi.postTask(nexus, user01nexus.localAccountName, {
-    name: "test-task",
-    cronspec: "* * *",
-    type: "submit",
-    params: {},
-  });
-  resp = await LibeufinNexusApi.getTask(
-    nexus,
-    user01nexus.localAccountName,
-    "test-task",
-  );
-  t.assertTrue(resp.taskName == "test-task");
-  await LibeufinNexusApi.deleteTask(
-    nexus,
-    user01nexus.localAccountName,
-    "test-task",
-  );
-  try {
-    await LibeufinNexusApi.getTask(
-      nexus,
-      user01nexus.localAccountName,
-      "test-task",
-    );
-  } catch (err: any) {
-    t.assertTrue(err.response.status == 404);
-  }
-}
-runLibeufinApiSchedulingTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-api-users.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-api-users.ts
deleted file mode 100644
index 662b22bbe..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-api-users.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import { LibeufinNexusApi, LibeufinNexusService } from 
"../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinApiUsersTest(t: GlobalTestState) {
-  const nexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-  await nexus.start();
-  await nexus.pingUntilAvailable();
-
-  await LibeufinNexusApi.createUser(nexus, {
-    username: "one",
-    password: "will-be-changed",
-  });
-
-  await LibeufinNexusApi.changePassword(
-    nexus,
-    "one",
-    {
-      newPassword: "got-changed",
-    },
-    {
-      auth: {
-        username: "admin",
-        password: "test",
-      },
-    },
-  );
-
-  let resp = await LibeufinNexusApi.getUser(nexus, {
-    auth: {
-      username: "one",
-      password: "got-changed",
-    },
-  });
-  console.log(resp);
-  t.assertTrue(resp["username"] == "one" && !resp["superuser"]);
-}
-
-runLibeufinApiUsersTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-bad-gateway.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-bad-gateway.ts
deleted file mode 100644
index 1187d923b..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-bad-gateway.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState, delayMs } from "../harness/harness.js";
-import {
-  NexusUserBundle,
-  LibeufinNexusApi,
-  LibeufinNexusService,
-  LibeufinSandboxService,
-} from "../harness/libeufin.js";
-
-/**
- * Testing how Nexus reacts when the Sandbox is unreachable.
- * Typically, because the user specified a wrong EBICS endpoint.
- */
-export async function runLibeufinBadGatewayTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/not-found";, // the EBICS endpoint at Sandbox
-  );
-
-  // Start Nexus
-  const libeufinNexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-  await libeufinNexus.start();
-  await libeufinNexus.pingUntilAvailable();
-
-  // Start Sandbox
-  const libeufinSandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5010,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-  });
-  await libeufinSandbox.start();
-  await libeufinSandbox.pingUntilAvailable();
-
-  // Connecting to a non-existent Sandbox endpoint.
-  await LibeufinNexusApi.createEbicsBankConnection(
-    libeufinNexus,
-    user01nexus.connReq,
-  );
-
-  // 502 Bad Gateway expected.
-  try {
-    await LibeufinNexusApi.connectBankConnection(
-      libeufinNexus,
-      user01nexus.connReq.name,
-    );
-  } catch (e: any) {
-    t.assertTrue(e.response.status == 502);
-    return;
-  }
-  t.assertTrue(false);
-}
-runLibeufinBadGatewayTest.suites = ["libeufin"];
diff --git a/packages/taler-harness/src/integrationtests/test-libeufin-basic.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-basic.ts
deleted file mode 100644
index d87278197..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-basic.ts
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import {
-  AbsoluteTime,
-  Duration,
-  MerchantContractTerms,
-} from "@gnu-taler/taler-util";
-import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
-import { CoinConfig, defaultCoinConfig } from "../harness/denomStructures.js";
-import {
-  DbInfo,
-  ExchangeService,
-  GlobalTestState,
-  HarnessExchangeBankAccount,
-  MerchantService,
-  WalletClient,
-  setupDb,
-} from "../harness/harness.js";
-import {
-  createWalletDaemonWithClient,
-  makeTestPaymentV2,
-} from "../harness/helpers.js";
-import {
-  LibeufinNexusApi,
-  LibeufinNexusService,
-  LibeufinSandboxApi,
-  LibeufinSandboxService,
-} from "../harness/libeufin.js";
-
-const exchangeIban = "DE71500105179674997361";
-const customerIban = "DE84500105176881385584";
-const customerBic = "BELADEBEXXX";
-const merchantIban = "DE42500105171245624648";
-
-export interface LibeufinTestEnvironment {
-  commonDb: DbInfo;
-  exchange: ExchangeService;
-  exchangeBankAccount: HarnessExchangeBankAccount;
-  merchant: MerchantService;
-  walletClient: WalletClient;
-  libeufinSandbox: LibeufinSandboxService;
-  libeufinNexus: LibeufinNexusService;
-}
-
-/**
- * Create a Taler environment with LibEuFin and an EBICS account.
- */
-export async function createLibeufinTestEnvironment(
-  t: GlobalTestState,
-  coinConfig: CoinConfig[] = defaultCoinConfig.map((x) => x("EUR")),
-): Promise<LibeufinTestEnvironment> {
-  const db = await setupDb(t);
-
-  const libeufinSandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5010,
-    databaseJdbcUri: db.connStr,
-  });
-
-  await libeufinSandbox.start();
-  await libeufinSandbox.pingUntilAvailable();
-
-  const libeufinNexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: db.connStr,
-  });
-
-  await libeufinNexus.start();
-  await libeufinNexus.pingUntilAvailable();
-
-  await LibeufinSandboxApi.createEbicsHost(libeufinSandbox, "host01");
-  // Subscriber and bank Account for the exchange
-  await LibeufinSandboxApi.createDemobankAccount(
-    "exchangeacct",
-    "password-unused",
-    { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/access-api/" },
-    exchangeIban,
-  );
-  await LibeufinSandboxApi.createDemobankEbicsSubscriber(
-    {
-      hostID: "host01",
-      partnerID: "partner01",
-      userID: "user01",
-    },
-    "exchangeacct",
-    { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/" },
-  );
-
-  await LibeufinSandboxApi.createDemobankAccount(
-    "merchantacct",
-    "password-unused",
-    { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/access-api/" },
-    merchantIban,
-  );
-  await LibeufinSandboxApi.createDemobankEbicsSubscriber(
-    {
-      hostID: "host01",
-      partnerID: "partner02",
-      userID: "user02",
-    },
-    "merchantacct",
-    { baseUrl: libeufinSandbox.baseUrl + "/demobanks/default/" },
-  );
-
-  await LibeufinNexusApi.createEbicsBankConnection(libeufinNexus, {
-    name: "myconn",
-    ebicsURL: "http://localhost:5010/ebicsweb";,
-    hostID: "host01",
-    partnerID: "partner01",
-    userID: "user01",
-  });
-  await LibeufinNexusApi.connectBankConnection(libeufinNexus, "myconn");
-  await LibeufinNexusApi.fetchAccounts(libeufinNexus, "myconn");
-  await LibeufinNexusApi.importConnectionAccount(
-    libeufinNexus,
-    "myconn",
-    "exchangeacct",
-    "myacct",
-  );
-
-  await LibeufinNexusApi.createTwgFacade(libeufinNexus, {
-    name: "twg1",
-    accountName: "myacct",
-    connectionName: "myconn",
-    currency: "EUR",
-    reserveTransferLevel: "report",
-  });
-
-  await LibeufinNexusApi.createUser(libeufinNexus, {
-    username: "twguser",
-    password: "twgpw",
-  });
-
-  await LibeufinNexusApi.postPermission(libeufinNexus, {
-    action: "grant",
-    permission: {
-      subjectType: "user",
-      subjectId: "twguser",
-      resourceType: "facade",
-      resourceId: "twg1",
-      permissionName: "facade.talerWireGateway.history",
-    },
-  });
-
-  await LibeufinNexusApi.postPermission(libeufinNexus, {
-    action: "grant",
-    permission: {
-      subjectType: "user",
-      subjectId: "twguser",
-      resourceType: "facade",
-      resourceId: "twg1",
-      permissionName: "facade.talerWireGateway.transfer",
-    },
-  });
-
-  const exchange = ExchangeService.create(t, {
-    name: "testexchange-1",
-    currency: "EUR",
-    httpPort: 8081,
-    database: db.connStr,
-  });
-
-  const merchant = await MerchantService.create(t, {
-    name: "testmerchant-1",
-    currency: "EUR",
-    httpPort: 8083,
-    database: db.connStr,
-  });
-
-  const exchangeBankAccount: HarnessExchangeBankAccount = {
-    accountName: "twguser",
-    accountPassword: "twgpw",
-    accountPaytoUri: `payto://iban/${exchangeIban}?receiver-name=Exchange`,
-    wireGatewayApiBaseUrl:
-      "http://localhost:5011/facades/twg1/taler-wire-gateway/";,
-  };
-
-  exchange.addBankAccount("1", exchangeBankAccount);
-
-  exchange.addCoinConfigList(coinConfig);
-
-  await exchange.start();
-  await exchange.pingUntilAvailable();
-
-  merchant.addExchange(exchange);
-
-  await merchant.start();
-  await merchant.pingUntilAvailable();
-
-  await merchant.addInstanceWithWireAccount({
-    id: "default",
-    name: "Default Instance",
-    paytoUris: [`payto://iban/${merchantIban}?receiver-name=Merchant`],
-    defaultWireTransferDelay: Duration.toTalerProtocolDuration(
-      Duration.getZero(),
-    ),
-  });
-
-  console.log("setup done!");
-
-  const { walletClient } = await createWalletDaemonWithClient(t, {
-    name: "default",
-  });
-
-  return {
-    commonDb: db,
-    exchange,
-    merchant,
-    walletClient,
-    exchangeBankAccount,
-    libeufinNexus,
-    libeufinSandbox,
-  };
-}
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinBasicTest(t: GlobalTestState) {
-  // Set up test environment
-
-  const { walletClient, exchange, merchant, libeufinSandbox, libeufinNexus } =
-    await createLibeufinTestEnvironment(t);
-
-  await walletClient.call(WalletApiOperation.AddExchange, {
-    exchangeBaseUrl: exchange.baseUrl,
-  });
-
-  const wr = await walletClient.call(
-    WalletApiOperation.AcceptManualWithdrawal,
-    {
-      exchangeBaseUrl: exchange.baseUrl,
-      amount: "EUR:15",
-    },
-  );
-
-  const reservePub: string = wr.reservePub;
-
-  await LibeufinSandboxApi.simulateIncomingTransaction(
-    libeufinSandbox,
-    "exchangeacct",
-    {
-      amount: "EUR:15.00",
-      debtorBic: customerBic,
-      debtorIban: customerIban,
-      debtorName: "Jane Customer",
-      subject: `Taler Top-up ${reservePub}`,
-    },
-  );
-
-  await LibeufinNexusApi.fetchTransactions(libeufinNexus, "myacct");
-
-  await exchange.runWirewatchOnce();
-
-  await walletClient.call(WalletApiOperation.TestingWaitTransactionsFinal, {});
-
-  const bal = await walletClient.call(WalletApiOperation.GetBalances, {});
-  console.log("balances", JSON.stringify(bal, undefined, 2));
-  t.assertAmountEquals(bal.balances[0].available, "EUR:14.7");
-
-  const order: Partial<MerchantContractTerms> = {
-    summary: "Buy me!",
-    amount: "EUR:5",
-    fulfillment_url: "taler://fulfillment-success/thx",
-    wire_transfer_deadline: AbsoluteTime.toProtocolTimestamp(
-      AbsoluteTime.now(),
-    ),
-  };
-
-  await makeTestPaymentV2(t, { walletClient, merchant, order });
-
-  await exchange.runAggregatorOnce();
-  await exchange.runTransferOnce();
-
-  await LibeufinNexusApi.submitAllPaymentInitiations(libeufinNexus, "myacct");
-
-  const exchangeTransactions = await LibeufinSandboxApi.getAccountTransactions(
-    libeufinSandbox,
-    "exchangeacct",
-  );
-
-  console.log(
-    "exchange transactions:",
-    JSON.stringify(exchangeTransactions, undefined, 2),
-  );
-
-  t.assertDeepEqual(
-    exchangeTransactions.payments[0].creditDebitIndicator,
-    "credit",
-  );
-  t.assertDeepEqual(
-    exchangeTransactions.payments[1].creditDebitIndicator,
-    "debit",
-  );
-  t.assertDeepEqual(exchangeTransactions.payments[1].debtorIban, exchangeIban);
-  t.assertDeepEqual(
-    exchangeTransactions.payments[1].creditorIban,
-    merchantIban,
-  );
-}
-runLibeufinBasicTest.suites = ["libeufin"];
diff --git a/packages/taler-harness/src/integrationtests/test-libeufin-c5x.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-c5x.ts
deleted file mode 100644
index 5097bc4d3..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-c5x.ts
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  launchLibeufinServices,
-  LibeufinNexusApi,
-  NexusUserBundle,
-  SandboxUserBundle,
-} from "../harness/libeufin.js";
-
-/**
- * This test checks how the C52 and C53 coordinate.  It'll test
- * whether fresh transactions stop showing as C52 after they get
- * included in a bank statement.
- */
-export async function runLibeufinC5xTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * User saltetd "02".
-   */
-  const user02nexus = new NexusUserBundle(
-    "02",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user02sandbox = new SandboxUserBundle("02");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus, user02nexus],
-    [user01sandbox, user02sandbox],
-    ["twg"],
-  );
-
-  // Check that C52 and C53 have zero entries.
-
-  // C52
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "report", // level
-  );
-  // C53
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "statement", // level
-  );
-  const nexusTxs = await LibeufinNexusApi.getAccountTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-  t.assertTrue(nexusTxs["transactions"].length == 0);
-
-  // Addressing one payment to user 01
-  await libeufinServices.libeufinSandbox.makeTransaction(
-    user02sandbox.ebicsBankAccount.label, // debit
-    user01sandbox.ebicsBankAccount.label, // credit
-    "EUR:10",
-    "first payment",
-  );
-
-  let expectOne = await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "report", // C52
-  );
-  t.assertTrue(expectOne.newTransactions == 1);
-  t.assertTrue(expectOne.downloadedTransactions == 1);
-
-  /* Expect zero payments being downloaded because the
-   * previous request consumed already the one pending
-   * payment.
-   */
-  let expectZero = await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "report", // C52
-  );
-  t.assertTrue(expectZero.newTransactions == 0);
-  t.assertTrue(expectZero.downloadedTransactions == 0);
-
-  /**
-   * A statement should still account zero payments because
-   * so far the payment made before is still pending.
-   */
-  expectZero = await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "statement", // C53
-  );
-  t.assertTrue(expectZero.newTransactions == 0);
-  t.assertTrue(expectZero.downloadedTransactions == 0);
-
-  /**
-   * Ticking now.  That books any pending transaction.
-   */
-  await libeufinServices.libeufinSandbox.c53tick();
-
-  /**
-   * A statement is now expected to download the transaction,
-   * although that got already ingested along the report
-   * earlier.  Thus the transaction counts as downloaded but
-   * not as new.
-   */
-  expectOne = await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "statement", // C53
-  );
-  t.assertTrue(expectOne.downloadedTransactions == 1);
-  t.assertTrue(expectOne.newTransactions == 0);
-}
-runLibeufinC5xTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-facade-anastasis.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-facade-anastasis.ts
deleted file mode 100644
index 0efd55f44..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-facade-anastasis.ts
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  SandboxUserBundle,
-  NexusUserBundle,
-  launchLibeufinServices,
-  LibeufinNexusApi,
-  LibeufinSandboxApi,
-} from "../harness/libeufin.js";
-
-/**
- * Testing the Anastasis API, offered by the Anastasis facade.
- */
-export async function runLibeufinAnastasisFacadeTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus],
-    [user01sandbox],
-    ["anastasis"], // create only one Anastasis facade.
-  );
-  let resp = await LibeufinNexusApi.getAllFacades(
-    libeufinServices.libeufinNexus,
-  );
-  // check that original facade shows up.
-  t.assertTrue(
-    resp["facades"][0]["name"] == user01nexus.anastasisReq["name"],
-  );
-const anastasisBaseUrl: string = resp["facades"][0]["baseUrl"];
-  t.assertTrue(typeof anastasisBaseUrl === "string");
-  t.assertTrue(anastasisBaseUrl.startsWith("http://";));
-  t.assertTrue(anastasisBaseUrl.endsWith("/"));
-
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-
-  await LibeufinNexusApi.postPermission(libeufinServices.libeufinNexus, {
-    action: "grant",
-    permission: {
-      subjectId: user01nexus.userReq.username,
-      subjectType: "user",
-      resourceType: "facade",
-      resourceId: user01nexus.anastasisReq.name,
-      permissionName: "facade.anastasis.history",
-    },
-  });
-
-  // check if empty.
-  let txsEmpty = await LibeufinNexusApi.getAnastasisTransactions(
-    libeufinServices.libeufinNexus,
-    anastasisBaseUrl,
-    { delta: 5 },
-  );
-
-  t.assertTrue(txsEmpty.data.incoming_transactions.length == 0);
-
-  LibeufinSandboxApi.simulateIncomingTransaction(
-    libeufinServices.libeufinSandbox,
-    user01sandbox.ebicsBankAccount.label,
-    {
-      debtorIban: "ES3314655813489414469157",
-      debtorBic: "BCMAESM1XXX",
-      debtorName: "Mock Donor",
-      subject: "Anastasis donation",
-      amount: "EUR:3", // Sandbox takes currency from its 'config'
-    },
-  );
-
-  LibeufinSandboxApi.simulateIncomingTransaction(
-    libeufinServices.libeufinSandbox,
-    user01sandbox.ebicsBankAccount.label,
-    {
-      debtorIban: "ES3314655813489414469157",
-      debtorBic: "BCMAESM1XXX",
-      debtorName: "Mock Donor",
-      subject: "another Anastasis donation",
-      amount: "EUR:1", // Sandbox takes currency from its "config"
-    },
-  );
-
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-
-  let txs = await LibeufinNexusApi.getAnastasisTransactions(
-    libeufinServices.libeufinNexus,
-    anastasisBaseUrl,
-    { delta: 5 },
-    user01nexus.userReq.username,
-    user01nexus.userReq.password,
-  );
-
-  // check the two payments show up
-  let txsList = txs.data.incoming_transactions;
-  t.assertTrue(txsList.length == 2);
-  t.assertTrue(
-    [txsList[0].subject, txsList[1].subject].includes("Anastasis donation"),
-  );
-  t.assertTrue(
-    [txsList[0].subject, txsList[1].subject].includes(
-      "another Anastasis donation",
-    ),
-  );
-  t.assertTrue(txsList[0].row_id == 1);
-  t.assertTrue(txsList[1].row_id == 2);
-
-  LibeufinSandboxApi.simulateIncomingTransaction(
-    libeufinServices.libeufinSandbox,
-    user01sandbox.ebicsBankAccount.label,
-    {
-      debtorIban: "ES3314655813489414469157",
-      debtorBic: "BCMAESM1XXX",
-      debtorName: "Mock Donor",
-      subject: "last Anastasis donation",
-      amount: "EUR:10.10", // Sandbox takes currency from its "config"
-    },
-  );
-
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-
-  let txsLast = await LibeufinNexusApi.getAnastasisTransactions(
-    libeufinServices.libeufinNexus,
-    anastasisBaseUrl,
-    { delta: 5, start: 2 },
-    user01nexus.userReq.username,
-    user01nexus.userReq.password,
-  );
-  console.log(
-    txsLast.data.incoming_transactions[0].subject == "last Anastasis donation",
-  );
-
-  let txsReverse = await LibeufinNexusApi.getAnastasisTransactions(
-    libeufinServices.libeufinNexus,
-    anastasisBaseUrl,
-    { delta: -5, start: 4 },
-    user01nexus.userReq.username,
-    user01nexus.userReq.password,
-  );
-  t.assertTrue(txsReverse.data.incoming_transactions[0].row_id == 3);
-  t.assertTrue(txsReverse.data.incoming_transactions[1].row_id == 2);
-  t.assertTrue(txsReverse.data.incoming_transactions[2].row_id == 1);
-}
-
-runLibeufinAnastasisFacadeTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-keyrotation.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-keyrotation.ts
deleted file mode 100644
index a2c21d5d8..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-keyrotation.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  SandboxUserBundle,
-  NexusUserBundle,
-  launchLibeufinServices,
-  LibeufinSandboxApi,
-  LibeufinNexusApi,
-} from "../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinKeyrotationTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus],
-    [user01sandbox],
-  );
-
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-
-  /* Rotate the Sandbox keys, and fetch the transactions again */
-  await LibeufinSandboxApi.rotateKeys(
-    libeufinServices.libeufinSandbox,
-    user01sandbox.ebicsBankAccount.subscriber.hostID,
-  );
-
-  try {
-    await LibeufinNexusApi.fetchTransactions(
-      libeufinServices.libeufinNexus,
-      user01nexus.localAccountName,
-    );
-  } catch (e: any) {
-    /**
-     * Asserting that Nexus responded with a 500 Internal server
-     * error, because the bank signed the last response with a new
-     * key pair that was never downloaded by Nexus.
-     *
-     * NOTE: the bank accepted the request addressed to the old
-     * public key.  Should it in this case reject the request even
-     * before trying to verify it?
-     */
-    t.assertTrue(e.response.status == 500);
-    // FIXME: uncomment and adapt the following command after #6723 is fixed.
-    // t.assertTrue(e.response.data.code == 9000);
-  }
-}
-runLibeufinKeyrotationTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-nexus-balance.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-nexus-balance.ts
deleted file mode 100644
index 868f93759..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-nexus-balance.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  SandboxUserBundle,
-  NexusUserBundle,
-  launchLibeufinServices,
-  LibeufinNexusApi,
-} from "../harness/libeufin.js";
-
-/**
- * This test checks how the C52 and C53 coordinate.  It'll test
- * whether fresh transactions stop showing as C52 after they get
- * included in a bank statement.
- */
-export async function runLibeufinNexusBalanceTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * User saltetd "02".
-   */
-  const user02nexus = new NexusUserBundle(
-    "02",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user02sandbox = new SandboxUserBundle("02");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus, user02nexus],
-    [user01sandbox, user02sandbox],
-    ["twg"],
-  );
-
-  // user 01 gets 10
-  await libeufinServices.libeufinSandbox.makeTransaction(
-    user02sandbox.ebicsBankAccount.label, // debit
-    user01sandbox.ebicsBankAccount.label, // credit
-    "EUR:10",
-    "first payment",
-  );
-  // user 01 gets another 10
-  await libeufinServices.libeufinSandbox.makeTransaction(
-    user02sandbox.ebicsBankAccount.label, // debit
-    user01sandbox.ebicsBankAccount.label, // credit
-    "EUR:10",
-    "second payment",
-  );
-
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "report", // level
-  );
-
-  // Check that user 01 has 20, via Nexus.
-  let accountInfo = await LibeufinNexusApi.getBankAccount(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-  t.assertAmountEquals(accountInfo.data.lastSeenBalance, "EUR:20");
-
-  // Booking the first two transactions.
-  await libeufinServices.libeufinSandbox.c53tick();
-
-  // user 01 gives 30
-  await libeufinServices.libeufinSandbox.makeTransaction(
-    user01sandbox.ebicsBankAccount.label,
-    user02sandbox.ebicsBankAccount.label,
-    "EUR:30",
-    "third payment",
-  );
-
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "all", // range
-    "report", // level
-  );
-
-  let accountInfoDebit = await LibeufinNexusApi.getBankAccount(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-  t.assertDeepEqual(accountInfoDebit.data.lastSeenBalance, "-EUR:10");
-}
-
-runLibeufinNexusBalanceTest.suites = ["libeufin"];
-runLibeufinNexusBalanceTest.experimental = true;
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-refund-multiple-users.ts
 
b/packages/taler-harness/src/integrationtests/test-libeufin-refund-multiple-users.ts
deleted file mode 100644
index 245f34331..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-refund-multiple-users.ts
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState, delayMs } from "../harness/harness.js";
-import {
-  SandboxUserBundle,
-  NexusUserBundle,
-  launchLibeufinServices,
-  LibeufinSandboxApi,
-  LibeufinNexusApi,
-} from "../harness/libeufin.js";
-
-/**
- * User 01 expects a refund from user 02, and expectedly user 03
- * should not be involved in the process.
- */
-export async function runLibeufinRefundMultipleUsersTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * User saltetd "02"
-   */
-  const user02nexus = new NexusUserBundle(
-    "02",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user02sandbox = new SandboxUserBundle("02");
-
-  /**
-   * User saltetd "03"
-   */
-  const user03nexus = new NexusUserBundle(
-    "03",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user03sandbox = new SandboxUserBundle("03");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus, user02nexus],
-    [user01sandbox, user02sandbox],
-    ["twg"],
-  );
-
-  // user 01 gets the payment
-  await libeufinServices.libeufinSandbox.makeTransaction(
-    user02sandbox.ebicsBankAccount.label, // debit
-    user01sandbox.ebicsBankAccount.label, // credit
-    "EUR:1",
-    "not a public key",
-  );
-
-  // user 01 fetches the payments
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-
-  // user 01 tries to submit the reimbursement, as
-  // the payment didn't have a valid public key in
-  // the subject.
-  await LibeufinNexusApi.submitInitiatedPayment(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    "1", // so far the only one that can exist.
-  );
-
-  // user 02 checks whether a reimbursement arrived.
-  let history = await LibeufinSandboxApi.getAccountTransactions(
-    libeufinServices.libeufinSandbox,
-    user02sandbox.ebicsBankAccount["label"],
-  );
-  // reimbursement arrived IFF the total payments are 2:
-  // 1 the original (faulty) transaction + 1 the reimbursement.
-  t.assertTrue(history["payments"].length == 2);
-}
-
-runLibeufinRefundMultipleUsersTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-refund.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-refund.ts
deleted file mode 100644
index d37363bab..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-refund.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState, delayMs } from "../harness/harness.js";
-import {
-  SandboxUserBundle,
-  NexusUserBundle,
-  launchLibeufinServices,
-  LibeufinSandboxApi,
-  LibeufinNexusApi,
-} from "../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinRefundTest(t: GlobalTestState) {
-  /**
-   * User saltetd "01"
-   */
-  const user01nexus = new NexusUserBundle(
-    "01",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user01sandbox = new SandboxUserBundle("01");
-
-  /**
-   * User saltetd "02"
-   */
-  const user02nexus = new NexusUserBundle(
-    "02",
-    "http://localhost:5010/ebicsweb";,
-  );
-  const user02sandbox = new SandboxUserBundle("02");
-
-  /**
-   * Launch Sandbox and Nexus.
-   */
-  const libeufinServices = await launchLibeufinServices(
-    t,
-    [user01nexus, user02nexus],
-    [user01sandbox, user02sandbox],
-    ["twg"],
-  );
-
-  // user 02 pays user 01 with a faulty (non Taler) subject.
-  await libeufinServices.libeufinSandbox.makeTransaction(
-    user02sandbox.ebicsBankAccount.label, // debit
-    user01sandbox.ebicsBankAccount.label, // credit
-    "EUR:1",
-    "not a public key",
-  );
-
-  // The bad payment should be now ingested and prepared as
-  // a reimbursement.
-  await LibeufinNexusApi.fetchTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-  // Check that the payment arrived at the Nexus.
-  const nexusTxs = await LibeufinNexusApi.getAccountTransactions(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-  );
-  t.assertTrue(nexusTxs["transactions"].length == 1);
-
-  // Submit the reimbursement
-  await LibeufinNexusApi.submitInitiatedPayment(
-    libeufinServices.libeufinNexus,
-    user01nexus.localAccountName,
-    // The initiated payment (= the reimbursement) ID below
-    // got set by the Taler facade; at this point only one must
-    // exist.  If "1" is not found, a 404 will make this test fail.
-    "1",
-  );
-
-  // user 02 checks whether the reimbursement arrived.
-  let history = await LibeufinSandboxApi.getAccountTransactions(
-    libeufinServices.libeufinSandbox,
-    user02sandbox.ebicsBankAccount["label"],
-  );
-  // 2 payments must exist: 1 the original (faulty) payment +
-  // 1 the reimbursement.
-  t.assertTrue(history["payments"].length == 2);
-}
-runLibeufinRefundTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-sandbox-wire-transfer-cli.ts
 
b/packages/taler-harness/src/integrationtests/test-libeufin-sandbox-wire-transfer-cli.ts
deleted file mode 100644
index be467e2f1..000000000
--- 
a/packages/taler-harness/src/integrationtests/test-libeufin-sandbox-wire-transfer-cli.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  LibeufinSandboxApi,
-  LibeufinSandboxService,
-} from "../harness/libeufin.js";
-
-export async function runLibeufinSandboxWireTransferCliTest(
-  t: GlobalTestState,
-) {
-  const sandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5012,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-  });
-  await sandbox.start();
-  await sandbox.pingUntilAvailable();
-  await LibeufinSandboxApi.createDemobankAccount(
-    "mock-account",
-    "password-unused",
-    { baseUrl: sandbox.baseUrl + "/demobanks/default/access-api/" },
-    "DE71500105179674997361",
-  );
-  await LibeufinSandboxApi.createDemobankAccount(
-    "mock-account-2",
-    "password-unused",
-    { baseUrl: sandbox.baseUrl + "/demobanks/default/access-api/" },
-    "DE71500105179674997364",
-  );
-
-  await sandbox.makeTransaction(
-    "mock-account",
-    "mock-account-2",
-    "EUR:1",
-    "one!",
-  );
-  await sandbox.makeTransaction(
-    "mock-account",
-    "mock-account-2",
-    "EUR:1",
-    "two!",
-  );
-  await sandbox.makeTransaction(
-    "mock-account",
-    "mock-account-2",
-    "EUR:1",
-    "three!",
-  );
-  await sandbox.makeTransaction(
-    "mock-account-2",
-    "mock-account",
-    "EUR:1",
-    "Give one back.",
-  );
-  await sandbox.makeTransaction(
-    "mock-account-2",
-    "mock-account",
-    "EUR:0.11",
-    "Give fraction back.",
-  );
-  let ret = await LibeufinSandboxApi.getAccountInfoWithBalance(
-    sandbox,
-    "mock-account-2",
-  );
-  console.log(ret.balance);
-  t.assertTrue(ret.balance == "EUR:1.89");
-}
-runLibeufinSandboxWireTransferCliTest.suites = ["libeufin"];
diff --git 
a/packages/taler-harness/src/integrationtests/test-libeufin-tutorial.ts 
b/packages/taler-harness/src/integrationtests/test-libeufin-tutorial.ts
deleted file mode 100644
index 496b65ee3..000000000
--- a/packages/taler-harness/src/integrationtests/test-libeufin-tutorial.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { GlobalTestState } from "../harness/harness.js";
-import {
-  LibeufinNexusService,
-  LibeufinSandboxService,
-  LibeufinCli,
-} from "../harness/libeufin.js";
-
-/**
- * Run basic test with LibEuFin.
- */
-export async function runLibeufinTutorialTest(t: GlobalTestState) {
-  // Set up test environment
-
-  const libeufinSandbox = await LibeufinSandboxService.create(t, {
-    httpPort: 5010,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-  });
-
-  await libeufinSandbox.start();
-  await libeufinSandbox.pingUntilAvailable();
-
-  const libeufinNexus = await LibeufinNexusService.create(t, {
-    httpPort: 5011,
-    databaseJdbcUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-  });
-
-  const nexusUser = { username: "foo", password: "secret" };
-  const libeufinCli = new LibeufinCli(t, {
-    sandboxUrl: libeufinSandbox.baseUrl,
-    nexusUrl: libeufinNexus.baseUrl,
-    sandboxDatabaseUri: `jdbc:sqlite:${t.testDir}/libeufin-sandbox.sqlite3`,
-    nexusDatabaseUri: `jdbc:sqlite:${t.testDir}/libeufin-nexus.sqlite3`,
-    nexusUser: nexusUser,
-  });
-
-  const ebicsDetails = {
-    hostId: "testhost",
-    partnerId: "partner01",
-    userId: "user01",
-  };
-  const bankAccountDetails = {
-    currency: "EUR",
-    iban: "DE18500105172929531888",
-    bic: "INGDDEFFXXX",
-    personName: "Jane Normal",
-    accountName: "testacct01",
-  };
-
-  await libeufinCli.checkSandbox();
-  await libeufinCli.createEbicsHost("testhost");
-  await libeufinCli.createEbicsSubscriber(ebicsDetails);
-  await libeufinCli.createEbicsBankAccount(ebicsDetails, bankAccountDetails);
-  await libeufinCli.generateTransactions(bankAccountDetails.accountName);
-
-  await libeufinNexus.start();
-  await libeufinNexus.pingUntilAvailable();
-
-  await libeufinNexus.createNexusSuperuser(nexusUser);
-  const connectionDetails = {
-    subscriberDetails: ebicsDetails,
-    ebicsUrl: `${libeufinSandbox.baseUrl}ebicsweb`, // FIXME: need appropriate 
URL concatenation
-    connectionName: "my-ebics-conn",
-  };
-  await libeufinCli.createEbicsConnection(connectionDetails);
-  await libeufinCli.createBackupFile({
-    passphrase: "secret",
-    outputFile: `${t.testDir}/connection-backup.json`,
-    connectionName: connectionDetails.connectionName,
-  });
-  await libeufinCli.createKeyLetter({
-    outputFile: `${t.testDir}/letter.pdf`,
-    connectionName: connectionDetails.connectionName,
-  });
-  await libeufinCli.connect(connectionDetails.connectionName);
-  await libeufinCli.downloadBankAccounts(connectionDetails.connectionName);
-  await libeufinCli.listOfferedBankAccounts(connectionDetails.connectionName);
-
-  const bankAccountImportDetails = {
-    offeredBankAccountName: bankAccountDetails.accountName,
-    nexusBankAccountName: "at-nexus-testacct01",
-    connectionName: connectionDetails.connectionName,
-  };
-
-  await libeufinCli.importBankAccount(bankAccountImportDetails);
-  await libeufinSandbox.c53tick();
-  await libeufinCli.fetchTransactions(
-    bankAccountImportDetails.nexusBankAccountName,
-  );
-  await 
libeufinCli.transactions(bankAccountImportDetails.nexusBankAccountName);
-
-  const paymentDetails = {
-    creditorIban: "DE42500105171245624648",
-    creditorBic: "BELADEBEXXX",
-    creditorName: "Mina Musterfrau",
-    subject: "Purchase 01234",
-    amount: "1.0",
-    currency: "EUR",
-    nexusBankAccountName: bankAccountImportDetails.nexusBankAccountName,
-  };
-  await libeufinCli.preparePayment(paymentDetails);
-  await libeufinCli.submitPayment(paymentDetails, "1");
-
-  await libeufinCli.newTalerWireGatewayFacade({
-    accountName: bankAccountImportDetails.nexusBankAccountName,
-    connectionName: "my-ebics-conn",
-    currency: "EUR",
-    facadeName: "my-twg",
-  });
-  await libeufinCli.listFacades();
-}
-runLibeufinTutorialTest.suites = ["libeufin"];
diff --git a/packages/taler-harness/src/integrationtests/test-payment-fault.ts 
b/packages/taler-harness/src/integrationtests/test-payment-fault.ts
index e57427fac..ca74a4ad6 100644
--- a/packages/taler-harness/src/integrationtests/test-payment-fault.ts
+++ b/packages/taler-harness/src/integrationtests/test-payment-fault.ts
@@ -22,7 +22,7 @@
  * Imports.
  */
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   CoreApiResponse,
   MerchantApiClient,
 } from "@gnu-taler/taler-util";
@@ -127,7 +127,7 @@ export async function runPaymentFaultTest(t: 
GlobalTestState) {
 
   // Create withdrawal operation
 
-  const bankClient = new BankAccessApiClient(bank.bankAccessApiBaseUrl);
+  const bankClient = new TalerCorebankApiClient(bank.bankAccessApiBaseUrl);
 
   const user = await bankClient.createRandomBankUser();
   const wop = await bankClient.createWithdrawalOperation(
diff --git a/packages/taler-harness/src/integrationtests/test-tipping.ts 
b/packages/taler-harness/src/integrationtests/test-tipping.ts
index 4140311ab..3d4ea6663 100644
--- a/packages/taler-harness/src/integrationtests/test-tipping.ts
+++ b/packages/taler-harness/src/integrationtests/test-tipping.ts
@@ -18,7 +18,7 @@
  * Imports.
  */
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   MerchantApiClient,
   TransactionMajorState,
   WireGatewayApiClient,
@@ -38,7 +38,7 @@ export async function runTippingTest(t: GlobalTestState) {
   const { walletClient, bank, exchange, merchant, exchangeBankAccount } =
     await createSimpleTestkudosEnvironmentV2(t);
 
-  const bankAccessApiClient = new BankAccessApiClient(
+  const bankAccessApiClient = new TalerCorebankApiClient(
     bank.bankAccessApiBaseUrl,
   );
   const mbu = await bankAccessApiClient.createRandomBankUser();
diff --git 
a/packages/taler-harness/src/integrationtests/test-wallet-notifications.ts 
b/packages/taler-harness/src/integrationtests/test-wallet-notifications.ts
index 9a0eb77ae..ae582fe60 100644
--- a/packages/taler-harness/src/integrationtests/test-wallet-notifications.ts
+++ b/packages/taler-harness/src/integrationtests/test-wallet-notifications.ts
@@ -18,7 +18,7 @@
  * Imports.
  */
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   Duration,
   NotificationType,
   TransactionMajorState,
@@ -121,7 +121,7 @@ export async function runWalletNotificationsTest(t: 
GlobalTestState) {
     skipDefaults: true,
   });
 
-  const bankAccessApiClient = new BankAccessApiClient(
+  const bankAccessApiClient = new TalerCorebankApiClient(
     bank.bankAccessApiBaseUrl,
   );
   const user = await bankAccessApiClient.createRandomBankUser();
diff --git 
a/packages/taler-harness/src/integrationtests/test-withdrawal-abort-bank.ts 
b/packages/taler-harness/src/integrationtests/test-withdrawal-abort-bank.ts
index aa5e2b770..4a0dd845b 100644
--- a/packages/taler-harness/src/integrationtests/test-withdrawal-abort-bank.ts
+++ b/packages/taler-harness/src/integrationtests/test-withdrawal-abort-bank.ts
@@ -17,7 +17,7 @@
 /**
  * Imports.
  */
-import { BankAccessApiClient, TalerErrorCode } from "@gnu-taler/taler-util";
+import { TalerCorebankApiClient, TalerErrorCode } from "@gnu-taler/taler-util";
 import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
 import { GlobalTestState } from "../harness/harness.js";
 import { createSimpleTestkudosEnvironmentV2 } from "../harness/helpers.js";
@@ -33,7 +33,7 @@ export async function runWithdrawalAbortBankTest(t: 
GlobalTestState) {
 
   // Create a withdrawal operation
 
-  const bankAccessApiClient = new BankAccessApiClient(
+  const bankAccessApiClient = new TalerCorebankApiClient(
     bank.bankAccessApiBaseUrl,
   );
   const user = await bankAccessApiClient.createRandomBankUser();
diff --git 
a/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts
 
b/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts
index 232b6d7c2..4a2cc7df9 100644
--- 
a/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts
+++ 
b/packages/taler-harness/src/integrationtests/test-withdrawal-bank-integrated.ts
@@ -18,7 +18,7 @@
  * Imports.
  */
 import {
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   j2s,
   NotificationType,
   TransactionMajorState,
@@ -41,7 +41,7 @@ export async function runWithdrawalBankIntegratedTest(t: 
GlobalTestState) {
 
   // Create a withdrawal operation
 
-  const bankAccessApiClient = new BankAccessApiClient(
+  const bankAccessApiClient = new TalerCorebankApiClient(
     bank.bankAccessApiBaseUrl,
   );
   const user = await bankAccessApiClient.createRandomBankUser();
diff --git 
a/packages/taler-harness/src/integrationtests/test-withdrawal-fakebank.ts 
b/packages/taler-harness/src/integrationtests/test-withdrawal-fakebank.ts
index ec6e54e6c..7cd0548a5 100644
--- a/packages/taler-harness/src/integrationtests/test-withdrawal-fakebank.ts
+++ b/packages/taler-harness/src/integrationtests/test-withdrawal-fakebank.ts
@@ -54,7 +54,10 @@ export async function runWithdrawalFakebankTest(t: 
GlobalTestState) {
   exchange.addBankAccount("1", {
     accountName: "exchange",
     accountPassword: "x",
-    wireGatewayApiBaseUrl: new URL("/exchange/", bank.baseUrl).href,
+    wireGatewayApiBaseUrl: new URL(
+      "/accounts/exchange/taler-wire-gateway",
+      bank.baseUrl,
+    ).href,
     accountPaytoUri: "payto://x-taler-bank/localhost/exchange",
   });
 
diff --git 
a/packages/taler-harness/src/integrationtests/test-withdrawal-fees.ts 
b/packages/taler-harness/src/integrationtests/test-withdrawal-fees.ts
index bc2946a18..a5a5a0d99 100644
--- a/packages/taler-harness/src/integrationtests/test-withdrawal-fees.ts
+++ b/packages/taler-harness/src/integrationtests/test-withdrawal-fees.ts
@@ -17,7 +17,7 @@
 /**
  * Imports.
  */
-import { BankAccessApiClient, j2s } from "@gnu-taler/taler-util";
+import { TalerCorebankApiClient, j2s } from "@gnu-taler/taler-util";
 import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
 import { CoinConfig } from "../harness/denomStructures.js";
 import {
@@ -107,7 +107,7 @@ export async function runWithdrawalFeesTest(t: 
GlobalTestState) {
 
   const amount = "TESTKUDOS:7.5";
 
-  const bankAccessApiClient = new BankAccessApiClient(
+  const bankAccessApiClient = new TalerCorebankApiClient(
     bank.bankAccessApiBaseUrl,
   );
   const user = await bankAccessApiClient.createRandomBankUser();
diff --git 
a/packages/taler-harness/src/integrationtests/test-withdrawal-manual.ts 
b/packages/taler-harness/src/integrationtests/test-withdrawal-manual.ts
index 1d98cd46e..316e3cc18 100644
--- a/packages/taler-harness/src/integrationtests/test-withdrawal-manual.ts
+++ b/packages/taler-harness/src/integrationtests/test-withdrawal-manual.ts
@@ -19,7 +19,7 @@
  */
 import {
   AbsoluteTime,
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   Logger,
   WireGatewayApiClient,
   j2s,
@@ -41,7 +41,7 @@ export async function runWithdrawalManualTest(t: 
GlobalTestState) {
 
   // Create a withdrawal operation
 
-  const bankAccessApiClient = new BankAccessApiClient(
+  const bankAccessApiClient = new TalerCorebankApiClient(
     bank.bankAccessApiBaseUrl,
   );
 
diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts 
b/packages/taler-harness/src/integrationtests/testrunner.ts
index 237d3bf9f..071871837 100644
--- a/packages/taler-harness/src/integrationtests/testrunner.ts
+++ b/packages/taler-harness/src/integrationtests/testrunner.ts
@@ -43,25 +43,6 @@ import { runExchangeTimetravelTest } from 
"./test-exchange-timetravel.js";
 import { runFeeRegressionTest } from "./test-fee-regression.js";
 import { runForcedSelectionTest } from "./test-forced-selection.js";
 import { runKycTest } from "./test-kyc.js";
-import { runLibeufinApiBankaccountTest } from 
"./test-libeufin-api-bankaccount.js";
-import { runLibeufinApiBankconnectionTest } from 
"./test-libeufin-api-bankconnection.js";
-import { runLibeufinApiFacadeBadRequestTest } from 
"./test-libeufin-api-facade-bad-request.js";
-import { runLibeufinApiFacadeTest } from "./test-libeufin-api-facade.js";
-import { runLibeufinApiPermissionsTest } from 
"./test-libeufin-api-permissions.js";
-import { runLibeufinApiSandboxCamtTest } from 
"./test-libeufin-api-sandbox-camt.js";
-import { runLibeufinApiSandboxTransactionsTest } from 
"./test-libeufin-api-sandbox-transactions.js";
-import { runLibeufinApiSchedulingTest } from 
"./test-libeufin-api-scheduling.js";
-import { runLibeufinApiUsersTest } from "./test-libeufin-api-users.js";
-import { runLibeufinBadGatewayTest } from "./test-libeufin-bad-gateway.js";
-import { runLibeufinBasicTest } from "./test-libeufin-basic.js";
-import { runLibeufinC5xTest } from "./test-libeufin-c5x.js";
-import { runLibeufinAnastasisFacadeTest } from 
"./test-libeufin-facade-anastasis.js";
-import { runLibeufinKeyrotationTest } from "./test-libeufin-keyrotation.js";
-import { runLibeufinNexusBalanceTest } from "./test-libeufin-nexus-balance.js";
-import { runLibeufinRefundMultipleUsersTest } from 
"./test-libeufin-refund-multiple-users.js";
-import { runLibeufinRefundTest } from "./test-libeufin-refund.js";
-import { runLibeufinSandboxWireTransferCliTest } from 
"./test-libeufin-sandbox-wire-transfer-cli.js";
-import { runLibeufinTutorialTest } from "./test-libeufin-tutorial.js";
 import { runMerchantExchangeConfusionTest } from 
"./test-merchant-exchange-confusion.js";
 import { runMerchantInstancesDeleteTest } from 
"./test-merchant-instances-delete.js";
 import { runMerchantInstancesUrlsTest } from 
"./test-merchant-instances-urls.js";
@@ -144,25 +125,6 @@ const allTests: TestMainFunction[] = [
   runKycTest,
   runExchangePurseTest,
   runExchangeDepositTest,
-  runLibeufinAnastasisFacadeTest,
-  runLibeufinApiBankaccountTest,
-  runLibeufinApiBankconnectionTest,
-  runLibeufinApiFacadeBadRequestTest,
-  runLibeufinApiFacadeTest,
-  runLibeufinApiPermissionsTest,
-  runLibeufinApiSandboxCamtTest,
-  runLibeufinApiSandboxTransactionsTest,
-  runLibeufinApiSchedulingTest,
-  runLibeufinApiUsersTest,
-  runLibeufinBadGatewayTest,
-  runLibeufinBasicTest,
-  runLibeufinC5xTest,
-  runLibeufinKeyrotationTest,
-  runLibeufinNexusBalanceTest,
-  runLibeufinRefundMultipleUsersTest,
-  runLibeufinRefundTest,
-  runLibeufinSandboxWireTransferCliTest,
-  runLibeufinTutorialTest,
   runMerchantExchangeConfusionTest,
   runMerchantInstancesDeleteTest,
   runMerchantInstancesTest,
diff --git a/packages/taler-util/src/bank-api-client.ts 
b/packages/taler-util/src/bank-api-client.ts
index cc4123500..164cd333d 100644
--- a/packages/taler-util/src/bank-api-client.ts
+++ b/packages/taler-util/src/bank-api-client.ts
@@ -146,11 +146,87 @@ export class WireGatewayApiClient {
   }
 }
 
+export interface ChallengeContactData {
+  // E-Mail address
+  email?: string;
+
+  // Phone number.
+  phone?: string;
+}
+
+export interface Balance {
+  amount: AmountString;
+  credit_debit_indicator: "credit" | "debit";
+}
+
+export interface RegisterAccountRequest {
+  // Username
+  username: string;
+
+  // Password.
+  password: string;
+
+  // Legal name of the account owner
+  name: string;
+
+  // Defaults to false.
+  is_public?: boolean;
+
+  // Is this a taler exchange account?
+  // If true:
+  // - incoming transactions to the account that do not
+  //   have a valid reserve public key are automatically
+  // - the account provides the taler-wire-gateway-api endpoints
+  // Defaults to false.
+  is_taler_exchange?: boolean;
+
+  // Addresses where to send the TAN for transactions.
+  // Currently only used for cashouts.
+  // If missing, cashouts will fail.
+  // In the future, might be used for other transactions
+  // as well.
+  challenge_contact_data?: ChallengeContactData;
+
+  // 'payto' address pointing a bank account
+  // external to the libeufin-bank.
+  // Payments will be sent to this bank account
+  // when the user wants to convert the local currency
+  // back to fiat currency outside libeufin-bank.
+  cashout_payto_uri?: string;
+
+  // Internal payto URI of this bank account.
+  // Used mostly for testing.
+  internal_payto_uri?: string;
+}
+
+export interface AccountData {
+  // Legal name of the account owner.
+  name: string;
+
+  // Available balance on the account.
+  balance: Balance;
+
+  // payto://-URI of the account.
+  payto_uri: string;
+
+  // Number indicating the max debit allowed for the requesting user.
+  debit_threshold: AmountString;
+
+  contact_data?: ChallengeContactData;
+
+  // 'payto' address pointing the bank account
+  // where to send cashouts.  This field is optional
+  // because not all the accounts are required to participate
+  // in the merchants' circuit.  One example is the exchange:
+  // that never cashouts.  Registering these accounts can
+  // be done via the access API.
+  cashout_payto_uri?: string;
+}
+
 /**
- * This API look like it belongs to harness
- * but it will be nice to have in utils to be used by others
+ * Client for the Taler corebank API.
  */
-export class BankAccessApiClient {
+export class TalerCorebankApiClient {
   httpLib: HttpRequestLibrary;
 
   constructor(
@@ -215,23 +291,22 @@ export class BankAccessApiClient {
     return await readSuccessResponseJsonOrThrow(resp, codecForAny());
   }
 
-  async registerAccount(
-    username: string,
-    password: string,
-    options: {
-      iban?: string;
-    } = {},
-  ): Promise<BankUser> {
-    const url = new URL("testing/register", this.baseUrl);
+  /**
+   * Register a new account and return information about it.
+   *
+   * This is a helper, as it does both the registration and the
+   * account info query.
+   */
+  async registerAccount(username: string, password: string): Promise<BankUser> 
{
+    const url = new URL("accounts", this.baseUrl);
     const resp = await this.httpLib.fetch(url.href, {
       method: "POST",
       body: {
         username,
         password,
-        iban: options?.iban,
+        name: username,
       },
     });
-    let paytoUri = `payto://x-taler-bank/localhost/${username}`;
     if (resp.status !== 200 && resp.status !== 202 && resp.status !== 204) {
       logger.error(`${j2s(await resp.json())}`);
       throw TalerError.fromDetail(
@@ -241,31 +316,24 @@ export class BankAccessApiClient {
         },
       );
     }
-    try {
-      // Pybank has no body, thus this might throw.
-      const respJson = await resp.json();
-      // LibEuFin demobank returns payto URI in response
-      if (respJson.paytoUri) {
-        paytoUri = respJson.paytoUri;
-      }
-    } catch (e) {
-      // Do nothing
-    }
+    const infoUrl = new URL(`accounts/${username}`, this.baseUrl);
+    const infoResp = await this.httpLib.fetch(infoUrl.href);
+    // FIXME: Validate!
+    const acctInfo: AccountData = await readSuccessResponseJsonOrThrow(
+      infoResp,
+      codecForAny(),
+    );
     return {
       password,
       username,
-      accountPaytoUri: paytoUri,
+      accountPaytoUri: acctInfo.payto_uri,
     };
   }
 
   async createRandomBankUser(): Promise<BankUser> {
     const username = "user-" + encodeCrock(getRandomBytes(10)).toLowerCase();
     const password = "pw-" + encodeCrock(getRandomBytes(10)).toLowerCase();
-    // FIXME: This is just a temporary workaround, because demobank is running 
out of short IBANs
-    const iban = generateIban("DE", 15);
-    return await this.registerAccount(username, password, {
-      iban,
-    });
+    return await this.registerAccount(username, password);
   }
 
   async createWithdrawalOperation(
diff --git a/packages/taler-util/src/wallet-types.ts 
b/packages/taler-util/src/wallet-types.ts
index f7bd3d120..87985fa2a 100644
--- a/packages/taler-util/src/wallet-types.ts
+++ b/packages/taler-util/src/wallet-types.ts
@@ -366,7 +366,7 @@ export const codecForAmountResponse = (): 
Codec<AmountResponse> =>
     .property("rawAmount", codecForAmountString())
     .build("AmountResponse");
 
-export interface Balance {
+export interface WalletBalance {
   scopeInfo: ScopeInfo;
   available: AmountString;
   pendingIncoming: AmountString;
@@ -458,11 +458,11 @@ export type ScopeInfoAuditor = {
 export type ScopeInfo = ScopeInfoGlobal | ScopeInfoExchange | ScopeInfoAuditor;
 
 export interface BalancesResponse {
-  balances: Balance[];
+  balances: WalletBalance[];
 }
 
-export const codecForBalance = (): Codec<Balance> =>
-  buildCodecForObject<Balance>()
+export const codecForBalance = (): Codec<WalletBalance> =>
+  buildCodecForObject<WalletBalance>()
     .property("scopeInfo", codecForAny()) // FIXME
     .property("available", codecForString())
     .property("hasPendingTransactions", codecForBoolean())
diff --git a/packages/taler-wallet-core/src/dbless.ts 
b/packages/taler-wallet-core/src/dbless.ts
index 4d2fa5cd4..1684977d5 100644
--- a/packages/taler-wallet-core/src/dbless.ts
+++ b/packages/taler-wallet-core/src/dbless.ts
@@ -31,7 +31,7 @@ import {
   AmountJson,
   Amounts,
   AmountString,
-  BankAccessApiClient,
+  TalerCorebankApiClient,
   codecForAny,
   codecForBankWithdrawalOperationPostResponse,
   codecForBatchDepositSuccess,
@@ -118,7 +118,7 @@ export async function topupReserveWithDemobank(
   args: TopupReserveWithDemobankArgs,
 ) {
   const { http, bankAccessApiBaseUrl, amount, exchangeInfo, reservePub } = 
args;
-  const bankClient = new BankAccessApiClient(bankAccessApiBaseUrl);
+  const bankClient = new TalerCorebankApiClient(bankAccessApiBaseUrl);
   const bankUser = await bankClient.createRandomBankUser();
   const wopi = await bankClient.createWithdrawalOperation(
     bankUser.username,
diff --git a/packages/taler-wallet-core/src/operations/testing.ts 
b/packages/taler-wallet-core/src/operations/testing.ts
index f71d842c7..b5840c3a6 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.ts
@@ -25,6 +25,7 @@ import {
   IntegrationTestV2Args,
   Logger,
   NotificationType,
+  RegisterAccountRequest,
   stringToBytes,
   TestPayResult,
   TransactionMajorState,
@@ -216,17 +217,25 @@ async function confirmBankWithdrawalUri(
 
 async function registerRandomBankUser(
   http: HttpRequestLibrary,
-  bankAccessApiBaseUrl: string,
+  corebankApiBaseUrl: string,
 ): Promise<BankUser> {
-  const reqUrl = new URL("testing/register", bankAccessApiBaseUrl).href;
+  const reqUrl = new URL("accounts", corebankApiBaseUrl).href;
   const randId = makeId(8);
+  const username = `testuser-${randId.toLowerCase()}`;
+  const password = `testpw-${randId}`;
+
   const bankUser: BankUser = {
-    // euFin doesn't allow resource names to have upper case letters.
-    username: `testuser-${randId.toLowerCase()}`,
-    password: `testpw-${randId}`,
+    username,
+    password,
+  };
+
+  const userReq: RegisterAccountRequest = {
+    username,
+    password,
+    name: username,
   };
 
-  const resp = await http.postJson(reqUrl, bankUser);
+  const resp = await http.fetch(reqUrl, { method: "POST", body: userReq });
   await checkSuccessResponseOrThrow(resp);
   return bankUser;
 }
diff --git a/packages/taler-wallet-core/src/wallet.ts 
b/packages/taler-wallet-core/src/wallet.ts
index 9091a92bf..2c4f1ba6f 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -1513,13 +1513,19 @@ async function dispatchRequestInternal<Op extends 
WalletApiOperation>(
       const components = pt.targetPath.split("/");
       const creditorAcct = components[components.length - 1];
       logger.info(`making testbank transfer to '${creditorAcct}'`);
-      const fbReq = await ws.http.postJson(
-        new URL(`${creditorAcct}/admin/add-incoming`, req.bank).href,
+      const fbReq = await ws.http.fetch(
+        new URL(
+          `accounts/${creditorAcct}/taler-wire-gateway/admin/add-incoming`,
+          req.bank,
+        ).href,
         {
-          amount: Amounts.stringify(amount),
-          reserve_pub: wres.reservePub,
-          debit_account:
-            "payto://x-taler-bank/localhost/testdebtor?receiver-name=Foo",
+          method: "POST",
+          body: {
+            amount: Amounts.stringify(amount),
+            reserve_pub: wres.reservePub,
+            debit_account:
+              "payto://x-taler-bank/localhost/testdebtor?receiver-name=Foo",
+          },
         },
       );
       const fbResp = await readSuccessResponseJsonOrThrow(fbReq, 
codecForAny());

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]