API/HTTP_CLIENT.js

const { CloudResult } = require("./CloudResult");
const fetch = require("node-fetch");
/**.
 *
 *
 * @class HTTP_CLIENT
 */
class HTTP_CLIENT {
	constructor() {}
	/**
	 *
	 * @param {HttpRequestMessage} request
	 * @param {TimeSpan} token
	 * @returns {Promise<HttpResponseMessage>}
	 * @memberof HTTP_CLIENT
	 */
	async SendAsync(request) {
		let state;
		let resHeaders;
		let dat = {
			method: request.Method,
		};
		dat.headers = request.Headers;
		if (
			request.Method === "POST" ||
			request.Method === "PATCH" ||
			request.Method === "PUT"
		)
			dat.body = request.Content;
		let ERROR;
		let response = await fetch(request.RequestUri, dat)
			.then((res) => {
				state = res.status;
				resHeaders = res.headers;
				return res.text().then((body) => {
					try {
						if (
							body == null ||
							body === "" ||
							!~resHeaders.get("content-type").indexOf("application/json")
						)
							return { response: body };
						return JSON.parse(body);
					} catch (error) {
						return {
							response: body,
						};
					}
				});
			})
			.catch((err) => {
				ERROR = new Error(err);
			});
		if (response == null) {
			response = { error: ERROR, response: null };
			state = 500;
			resHeaders = {};
		}
		let cloudResult = new CloudResult("", state, response, resHeaders);
		return cloudResult;
	}
}
module.exports = {
	HTTP_CLIENT,
};