@webex/http-core
Version:
Core HTTP library for the Cisco Webex
101 lines (95 loc) • 3.17 kB
JavaScript
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = _request;
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
var _request2 = _interopRequireDefault(require("request"));
var _safeBuffer = require("safe-buffer");
var _common = require("@webex/common");
var _detect = _interopRequireDefault(require("../lib/detect"));
var _progressEvent = _interopRequireDefault(require("../progress-event"));
/*!
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
*/
/**
* @param {Object} options
* @private
* @returns {Promise}
*/
function prepareOptions(options) {
if (options.responseType === 'buffer' || options.responseType === 'blob') {
options.encoding = null;
}
if (options.withCredentials) {
options.jar = true;
}
if ((0, _common.isBuffer)(options.body)) {
return (0, _detect.default)(options.body).then(function (type) {
options.headers['content-type'] = type;
return options;
});
}
return _promise.default.resolve(options);
}
/**
* @param {Object} options
* @private
* @returns {Promise}
*/
function doRequest(options) {
return new _promise.default(function (resolve) {
var logger = options.logger;
var r = (0, _request2.default)(options, function (error, response) {
if (error) {
logger.warn(error);
}
if (response) {
response.options = options;
// I'm not sure why this line is necessary. request seems to be creating
// buffers that aren't Buffers.
if (options.responseType === 'buffer' && response.body.type === 'Buffer' && !(0, _common.isBuffer)(response.body)) {
response.body = _safeBuffer.Buffer.from(response.body);
}
if ((0, _common.isBuffer)(response.body) && !response.body.type) {
resolve((0, _detect.default)(response.body).then(function (type) {
response.body.type = type;
return response;
}));
return;
}
resolve(response);
} else {
// Make a network error behave like a browser network error.
resolve({
statusCode: 0,
options: options,
headers: options.headers,
method: options.method,
url: options.url,
body: error
});
}
});
r.on('response', function (response) {
var total = (0, _parseInt2.default)(response.headers['content-length'], 10);
var loaded = 0;
response.on('data', function (data) {
loaded += data.length;
options.download.emit('progress', new _progressEvent.default(loaded, total));
});
});
});
}
/**
* @name request
* @param {Object} options
* @returns {Promise}
*/
function _request(options) {
return prepareOptions(options).then(doRequest);
}
//# sourceMappingURL=request.js.map
;