UNPKG

@coolio/http

Version:
98 lines 4.47 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var http = __importStar(require("http")); var url = __importStar(require("url")); var https = __importStar(require("https")); var encoder_helper_1 = require("../helpers/encoder.helper"); var httpResponseHeaders_1 = require("../httpResponseHeaders"); var httpCodes_1 = require("../httpCodes"); var httpRequestError_1 = require("../httpRequestError"); var formData_1 = require("../formData"); exports.httpRequestHandler = function (requestHandlerOptions) { if (requestHandlerOptions === void 0) { requestHandlerOptions = {}; } return function (requestOptions) { return new Promise(function (resolve, reject) { var urlString = requestOptions.url, method = requestOptions.method, headers = requestOptions.headers, body = requestOptions.body, timeout = requestOptions.timeout; var _a = url.parse(urlString), protocol = _a.protocol, auth = _a.auth, hostname = _a.hostname, port = _a.port, path = _a.path; var requestModule = protocol === 'https:' ? https : http; var request = requestModule.request(__assign(__assign({}, requestHandlerOptions.defaultRequestOptions), { path: path, method: method, port: port, hostname: hostname, protocol: protocol, auth: auth, timeout: timeout }), function (response) { var status = response.statusCode || -1; var statusText = response.statusMessage || httpCodes_1.HttpStatusText[status] || ''; var ok = status > 0 && status < 400; var headers = new httpResponseHeaders_1.HttpResponseHeaders(response.headers); var bodyPromise = new Promise(function (resolve, reject) { var chunks = []; response.on('data', function (data) { return chunks.push(data); }); response.on('error', function (error) { return reject(error); }); response.on('end', function () { var body = Buffer.concat(chunks); resolve(body); }); }); resolve({ arrayBuffer: function () { return bodyPromise; }, text: function () { return bodyPromise.then(function (buffer) { return encoder_helper_1.encodeText(buffer, encoder_helper_1.getEncodingFromHeaders(headers)); }); }, ok: ok, headers: headers, redirected: false, status: status, statusText: statusText, url: response.url || urlString, abort: function () { return request.abort(); }, }); }).once('error', function (error) { reject(error); }).once('timeout', function () { reject(new httpRequestError_1.HttpRequestError(requestOptions, "Request timed out after " + timeout + "ms.")); }); for (var key in headers) { if (headers.hasOwnProperty(key)) { request.setHeader(key, headers[key]); } } if (formData_1.CFormData.isFormData(body)) { var formData = new formData_1.CFormData(body); var formHeaders = formData.getHeaders(); for (var key in formHeaders) { if (formHeaders.hasOwnProperty(key)) { request.setHeader(key, formHeaders[key]); } } formData.pipe(request); return; } if (body) { if (typeof body === 'string') { request.write(body); } else { request.write(Buffer.from(body)); } } request.end(); }); }; }; //# sourceMappingURL=http.requestHandler.js.map