aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui/src/utils
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-02-08 17:39:39 -0300
committerSebastian <sebasjm@gmail.com>2023-02-08 17:39:39 -0300
commit603efbd073a2a9aa56f801fe57d13f060821b05d (patch)
tree9ca8367dbbe6e47b2a11ac67bbc2747298fcd255 /packages/merchant-backoffice-ui/src/utils
parentbe01d1479cf650fe8eb0c8e567620abfa4544e1e (diff)
downloadwallet-core-603efbd073a2a9aa56f801fe57d13f060821b05d.tar.xz
use request api from web-util
Diffstat (limited to 'packages/merchant-backoffice-ui/src/utils')
-rw-r--r--packages/merchant-backoffice-ui/src/utils/request.ts282
1 files changed, 0 insertions, 282 deletions
diff --git a/packages/merchant-backoffice-ui/src/utils/request.ts b/packages/merchant-backoffice-ui/src/utils/request.ts
deleted file mode 100644
index 821eca4a7..000000000
--- a/packages/merchant-backoffice-ui/src/utils/request.ts
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021-2023 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/>
- */
-// import axios, { AxiosError, AxiosResponse } from "axios";
-import { MerchantBackend } from "../declaration.js";
-
-export async function defaultRequestHandler<T>(
- base: string,
- path: string,
- options: RequestOptions = {},
-): Promise<HttpResponseOk<T>> {
- const requestHeaders = options.token
- ? { Authorization: `Bearer ${options.token}` }
- : undefined;
-
- const requestMethod = options?.method ?? "GET";
- const requestBody = options?.data;
- const requestTimeout = 2 * 1000;
- const requestParams = options.params ?? {};
-
- const _url = new URL(`${base}${path}`);
-
- Object.entries(requestParams).forEach(([key, value]) => {
- _url.searchParams.set(key, String(value));
- });
-
- let payload: BodyInit | undefined = undefined;
- if (requestBody != null) {
- if (typeof requestBody === "string") {
- payload = requestBody;
- } else if (requestBody instanceof ArrayBuffer) {
- payload = requestBody;
- } else if (ArrayBuffer.isView(requestBody)) {
- payload = requestBody;
- } else if (typeof requestBody === "object") {
- payload = JSON.stringify(requestBody);
- } else {
- throw Error("unsupported request body type");
- }
- }
-
- const controller = new AbortController();
- const timeoutId = setTimeout(() => {
- controller.abort("HTTP_REQUEST_TIMEOUT");
- }, requestTimeout);
-
- const response = await fetch(_url.href, {
- headers: {
- ...requestHeaders,
- "Content-Type": "text/plain",
- },
- method: requestMethod,
- credentials: "omit",
- mode: "cors",
- body: payload,
- signal: controller.signal,
- });
-
- if (timeoutId) {
- clearTimeout(timeoutId);
- }
- const headerMap = new Headers();
- response.headers.forEach((value, key) => {
- headerMap.set(key, value);
- });
-
- if (response.ok) {
- const result = await buildRequestOk<T>(
- response,
- _url,
- payload,
- !!options.token,
- );
- return result;
- } else {
- const error = await buildRequestFailed(
- response,
- _url,
- payload,
- !!options.token,
- );
- throw error;
- }
-}
-
-export type HttpResponse<T> =
- | HttpResponseOk<T>
- | HttpResponseLoading<T>
- | HttpError;
-export type HttpResponsePaginated<T> =
- | HttpResponseOkPaginated<T>
- | HttpResponseLoading<T>
- | HttpError;
-
-export interface RequestInfo {
- url: URL;
- hasToken: boolean;
- payload: any;
- status: number;
-}
-
-interface HttpResponseLoading<T> {
- ok?: false;
- loading: true;
- clientError?: false;
- serverError?: false;
-
- data?: T;
-}
-export interface HttpResponseOk<T> {
- ok: true;
- loading?: false;
- clientError?: false;
- serverError?: false;
-
- data: T;
- info?: RequestInfo;
-}
-
-export type HttpResponseOkPaginated<T> = HttpResponseOk<T> & WithPagination;
-
-export interface WithPagination {
- loadMore: () => void;
- loadMorePrev: () => void;
- isReachingEnd?: boolean;
- isReachingStart?: boolean;
-}
-
-export type HttpError =
- | HttpResponseClientError
- | HttpResponseServerError
- | HttpResponseUnexpectedError;
-export interface SwrError {
- info: unknown;
- status: number;
- message: string;
-}
-export interface HttpResponseServerError {
- ok?: false;
- loading?: false;
- clientError?: false;
- serverError: true;
-
- error?: MerchantBackend.ErrorDetail;
- status: number;
- message: string;
- info?: RequestInfo;
-}
-interface HttpResponseClientError {
- ok?: false;
- loading?: false;
- clientError: true;
- serverError?: false;
-
- info?: RequestInfo;
- isUnauthorized: boolean;
- isNotfound: boolean;
- status: number;
- error?: MerchantBackend.ErrorDetail;
- message: string;
-}
-
-interface HttpResponseUnexpectedError {
- ok?: false;
- loading?: false;
- clientError?: false;
- serverError?: false;
-
- info?: RequestInfo;
- status?: number;
- error: unknown;
- message: string;
-}
-
-type Methods = "GET" | "POST" | "PATCH" | "DELETE" | "PUT";
-
-export interface RequestOptions {
- method?: Methods;
- token?: string;
- data?: any;
- params?: unknown;
-}
-
-async function buildRequestOk<T>(
- response: Response,
- url: URL,
- payload: any,
- hasToken: boolean,
-): Promise<HttpResponseOk<T>> {
- const dataTxt = await response.text();
- const data = dataTxt ? JSON.parse(dataTxt) : undefined;
- return {
- ok: true,
- data,
- info: {
- payload,
- url,
- hasToken,
- status: response.status,
- },
- };
-}
-
-async function buildRequestFailed(
- response: Response,
- url: URL,
- payload: any,
- hasToken: boolean,
-): Promise<
- | HttpResponseClientError
- | HttpResponseServerError
- | HttpResponseUnexpectedError
-> {
- const status = response?.status;
-
- const info: RequestInfo = {
- payload,
- url,
- hasToken,
- status: status || 0,
- };
-
- try {
- const dataTxt = await response.text();
- const data = dataTxt ? JSON.parse(dataTxt) : undefined;
- if (status && status >= 400 && status < 500) {
- const error: HttpResponseClientError = {
- clientError: true,
- isNotfound: status === 404,
- isUnauthorized: status === 401,
- status,
- info,
- message: data?.hint,
- error: data,
- };
- return error;
- }
- if (status && status >= 500 && status < 600) {
- const error: HttpResponseServerError = {
- serverError: true,
- status,
- info,
- message: `${data?.hint} (code ${data?.code})`,
- error: data,
- };
- return error;
- }
- return {
- info,
- status,
- error: {},
- message: "NOT DEFINED",
- };
- } catch (ex) {
- const error: HttpResponseUnexpectedError = {
- info,
- status,
- error: ex,
- message: "NOT DEFINED",
- };
-
- throw error;
- }
-}
-
-// export function isAxiosError<T>(
-// error: AxiosError | any,
-// ): error is AxiosError<T> {
-// return error && error.isAxiosError;
-// }