UNPKG

@webex/http-core

Version:

Core HTTP library for the Cisco Webex

101 lines (95 loc) 3.17 kB
"use strict"; 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