UNPKG

util-http

Version:
67 lines (66 loc) 2.45 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const axios_1 = require("axios"); const CustomError_1 = __importDefault(require("../CustomError")); const AxiosClient_1 = __importDefault(require("./AxiosClient")); const FetchClient_1 = __importDefault(require("./FetchClient")); const UndiciClient_1 = __importDefault(require("./UndiciClient")); class HttpClient { static _instance; axios; fetch; undici; constructor() { this.axios = new AxiosClient_1.default(); this.fetch = new FetchClient_1.default(); this.undici = new UndiciClient_1.default(); } static getInstance() { HttpClient._instance ||= new HttpClient(); return HttpClient._instance; } static handleErrors(error, statusCode, client) { let { message = "An unknown error occurred", name, cause, stack, ...errors } = error; statusCode ??= 500; if (error instanceof axios_1.AxiosError) { const { response } = error; statusCode = response?.status || 500; if (typeof response?.data === "object") { message = response?.data?.errors?.[0]?.message || response?.data?.error?.message || response?.data?.message; errors = response?.data; } else if (typeof response?.data === "string") { const trimmedData = response.data.trim(); const errorText = trimmedData.length > 0 ? trimmedData : response.statusText; message = errorText; } } if (typeof message === "string" && (message.includes("<!DOCTYPE html>") || message.includes("ECONNREFUSED"))) { message = "Unavailable Service"; statusCode = 503; } if (!message || message.includes("ENOTFOUND")) { message = "Resource Not Found"; statusCode = 404; } if (!String(errors)?.includes("message")) { errors = { message, ...errors }; } return new CustomError_1.default({ client, message, statusCode, name, cause, stack, extra: errors }); } } exports.default = HttpClient;