util-http
Version:
67 lines (66 loc) • 2.45 kB
JavaScript
;
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;