/* This file is part of GNU Taler (C) 2022-2024 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 */ import { ObservabilityEvent, TalerAuthenticationHttpClient, TalerBankConversionHttpClient, TalerCoreBankHttpClient, TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient } from "@gnu-taler/taler-util"; type Listener = (e: Event) => void; type Unsuscriber = () => void; export type Suscriber = (fn: Listener) => Unsuscriber; export class ActiviyTracker { private observers = new Array>(); constructor() { this.notify = this.notify.bind(this) this.subscribe = this.subscribe.bind(this) } notify(data: Event) { this.observers.forEach((observer) => observer(data)) } subscribe(func: Listener): Unsuscriber { this.observers.push(func); return () => { this.observers.forEach((observer, index) => { if (observer === func) { this.observers.splice(index, 1); } }); }; } } /** * build http client with cache breaker due to SWR * @param url * @returns */ export interface APIClient { getRemoteConfig(): Promise; VERSION: string; lib: T, onActivity: Suscriber; cancelRequest(id: string): void; } export interface MerchantLib { management: TalerMerchantManagementHttpClient; authenticate: TalerAuthenticationHttpClient; instance: (instanceId: string) => TalerMerchantInstanceHttpClient; impersonate: (instanceId: string) => TalerAuthenticationHttpClient; } export interface BankLib { bank: TalerCoreBankHttpClient; conversion: TalerBankConversionHttpClient; auth: (user: string) => TalerAuthenticationHttpClient; }