"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = httpRequest; const node_http_1 = __importDefault(require("node:http")); const node_https_1 = __importDefault(require("node:https")); const querystring_1 = __importDefault(require("querystring")); const serialize_query_1 = __importDefault(require("../../utils/serialize-query")); /** * # Generate a http Request */ function httpRequest(params) { return new Promise((resolve, reject) => { const isUrlEncodedFormBody = params.urlEncodedFormBody; const reqPayloadString = params.body ? isUrlEncodedFormBody ? querystring_1.default.stringify(params.body) : JSON.stringify(params.body).replace(/\n|\r|\n\r/gm, "") : undefined; const reqQueryString = params.query ? (0, serialize_query_1.default)(params.query) : undefined; const paramScheme = params.scheme; const finalScheme = paramScheme == "http" ? node_http_1.default : node_https_1.default; const finalPath = params.path ? params.path + (reqQueryString ? reqQueryString : "") : undefined; delete params.body; delete params.scheme; delete params.query; delete params.urlEncodedFormBody; /** @type {import("node:https").RequestOptions} */ const requestOptions = Object.assign(Object.assign({}, params), { headers: Object.assign({ "Content-Type": isUrlEncodedFormBody ? "application/x-www-form-urlencoded" : "application/json", "Content-Length": reqPayloadString ? Buffer.from(reqPayloadString).length : undefined }, params.headers), port: paramScheme == "https" ? 443 : params.port, path: finalPath }); const httpsRequest = finalScheme.request(requestOptions, /** * Callback Function * * @description https request callback */ (response) => { var str = ""; response.on("data", function (chunk) { str += chunk; }); response.on("end", function () { const data = (() => { try { const jsonObj = JSON.parse(str); return jsonObj; } catch (error) { return undefined; } })(); resolve({ status: response.statusCode || 404, data, str, requestedPath: finalPath, }); }); response.on("error", (err) => { resolve({ status: response.statusCode || 404, str, error: err.message, requestedPath: finalPath, }); }); }); if (reqPayloadString) { httpsRequest.write(reqPayloadString); } httpsRequest.on("error", (error) => { console.log("HTTPS request ERROR =>", error); }); httpsRequest.end(); }); }