/* This file is part of GNU Taler (C) 2022 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 { canonicalizeBaseUrl } from "@gnu-taler/taler-util"; /** * Validate (the number part of) an amount. If needed, * replace comma with a dot. Returns 'false' whenever * the input is invalid, the valid amount otherwise. */ const amountRegex = /^[0-9]+(.[0-9]+)?$/; export function validateAmount( maybeAmount: string | undefined, ): string | undefined { if (!maybeAmount || !amountRegex.test(maybeAmount)) { return; } return maybeAmount; } /** * Extract IBAN from a Payto URI. */ export function getIbanFromPayto(url: string): string { const pathSplit = new URL(url).pathname.split("/"); let lastIndex = pathSplit.length - 1; // Happens if the path ends with "/". if (pathSplit[lastIndex] === "") lastIndex--; const iban = pathSplit[lastIndex]; return iban; } export function undefinedIfEmpty(obj: T): T | undefined { return Object.keys(obj).some((k) => (obj as any)[k] !== undefined) ? obj : undefined; } export type PartialButDefined = { [P in keyof T]: T[P] | undefined; }; export type WithIntermediate = { [prop in keyof Type]: Type[prop] extends object ? WithIntermediate : Type[prop] | undefined; }; export enum TanChannel { SMS = "sms", EMAIL = "email", FILE = "file", } export enum CashoutStatus { // The payment was initiated after a valid // TAN was received by the bank. CONFIRMED = "confirmed", // The cashout was created and now waits // for the TAN by the author. PENDING = "pending", } // export function partialWithObjects(obj: T | undefined, () => complete): WithIntermediate { // const root = obj === undefined ? {} : obj; // return Object.entries(root).([key, value]) => { // }) // return undefined as any // } /** * Craft headers with Authorization and Content-Type. */ // export function prepareHeaders(username?: string, password?: string): Headers { // const headers = new Headers(); // if (username && password) { // headers.append( // "Authorization", // `Basic ${window.btoa(`${username}:${password}`)}`, // ); // } // headers.append("Content-Type", "application/json"); // return headers; // } export const PAGE_SIZE = 20; export const MAX_RESULT_SIZE = PAGE_SIZE * 2 - 1;