@coolio/http
Version:
HTTP networking client
98 lines • 4.47 kB
JavaScript
;
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