From 1723f16b9c4b008e9e44578c2587c7a1bd6560b4 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sat, 25 Feb 2023 19:43:45 -0300 Subject: some fixes afte testing demobank with ms --- packages/web-util/src/utils/request.ts | 47 +++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 6 deletions(-) (limited to 'packages/web-util') diff --git a/packages/web-util/src/utils/request.ts b/packages/web-util/src/utils/request.ts index 24342bb80..3d91024dc 100644 --- a/packages/web-util/src/utils/request.ts +++ b/packages/web-util/src/utils/request.ts @@ -17,6 +17,10 @@ import { HttpStatusCode } from "@gnu-taler/taler-util"; import { base64encode } from "./base64.js"; +export enum ErrorType { + CLIENT, SERVER, TIMEOUT, UNEXPECTED +} + /** * * @param baseUrl URL where the service is located @@ -39,7 +43,7 @@ export async function defaultRequestHandler( const requestMethod = options?.method ?? "GET"; const requestBody = options?.data; - const requestTimeout = options?.timeout ?? 2 * 1000; + const requestTimeout = options?.timeout ?? 5 * 1000; const requestParams = options.params ?? {}; const _url = new URL(`${baseUrl}${endpoint}`); @@ -85,10 +89,13 @@ export async function defaultRequestHandler( hasToken: !!options.token, status: 0, }; - const error: HttpResponseUnexpectedError = { + const error: HttpRequestTimeoutError = { + clientError: true, + isNotfound: false, + isUnauthorized: false, + error: undefined, info, - status: 0, - error: ex, + type: ErrorType.TIMEOUT, message: "Request timeout", }; throw new RequestError(error); @@ -166,32 +173,50 @@ export interface WithPagination { } export type HttpError = + | HttpRequestTimeoutError | HttpResponseClientError | HttpResponseServerError | HttpResponseUnexpectedError; + export interface HttpResponseServerError { ok?: false; loading?: false; clientError?: false; serverError: true; + type: ErrorType.SERVER, - error?: ErrorDetail; + error: ErrorDetail; status: HttpStatusCode; message: string; info?: RequestInfo; } +interface HttpRequestTimeoutError { + ok?: false; + loading?: false; + clientError: true; + serverError?: false; + type: ErrorType.TIMEOUT, + + info?: RequestInfo; + error: undefined, + + isUnauthorized: false; + isNotfound: false; + message: string; +} interface HttpResponseClientError { ok?: false; loading?: false; clientError: true; serverError?: false; + type: ErrorType.CLIENT, info?: RequestInfo; isUnauthorized: boolean; isNotfound: boolean; status: HttpStatusCode; - error?: ErrorDetail; + error: ErrorDetail; message: string; } @@ -200,6 +225,7 @@ interface HttpResponseUnexpectedError { loading?: false; clientError?: false; serverError?: false; + type: ErrorType.UNEXPECTED, info?: RequestInfo; status?: HttpStatusCode; @@ -208,10 +234,15 @@ interface HttpResponseUnexpectedError { } export class RequestError extends Error { + /** + * @deprecated use cause + */ info: HttpError; + cause: HttpError; constructor(d: HttpError) { super(d.message) this.info = d + this.cause = d } } @@ -277,6 +308,7 @@ async function buildRequestFailed( clientError: true, isNotfound: status === 404, isUnauthorized: status === 401, + type: ErrorType.CLIENT, status, info, message: data?.hint, @@ -287,6 +319,7 @@ async function buildRequestFailed( if (status && status >= 500 && status < 600) { const error: HttpResponseServerError = { serverError: true, + type: ErrorType.SERVER, status, info, message: `${data?.hint} (code ${data?.code})`, @@ -296,6 +329,7 @@ async function buildRequestFailed( } return { info, + type: ErrorType.UNEXPECTED, status, error: {}, message: "NOT DEFINED", @@ -304,6 +338,7 @@ async function buildRequestFailed( const error: HttpResponseUnexpectedError = { info, status, + type: ErrorType.UNEXPECTED, error: ex, message: "NOT DEFINED", }; -- cgit v1.2.3