@webex/http-core 3.0.0-beta.38 → 3.0.0-beta.380
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +49 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/xhr.js +6 -1
- package/dist/lib/xhr.js.map +1 -1
- package/dist/request/index.js +3 -30
- package/dist/request/index.js.map +1 -1
- package/dist/request/request.shim.js +2 -2
- package/dist/request/request.shim.js.map +1 -1
- package/dist/request/utils.js +91 -0
- package/dist/request/utils.js.map +1 -0
- package/package.json +10 -10
- package/src/index.js +55 -0
- package/src/lib/xhr.js +5 -1
- package/src/request/index.js +4 -36
- package/src/request/request.shim.js +5 -2
- package/src/request/utils.ts +78 -0
- package/test/integration/spec/request.js +2 -1
- package/test/unit/spec/index.js +58 -0
- package/test/unit/spec/request/request.shim.js +23 -0
- package/test/unit/spec/request/utils.js +77 -0
package/dist/index.js
CHANGED
|
@@ -36,7 +36,7 @@ _Object$defineProperty(exports, "detect", {
|
|
|
36
36
|
return _detect.default;
|
|
37
37
|
}
|
|
38
38
|
});
|
|
39
|
-
exports.request = void 0;
|
|
39
|
+
exports.setTimingsAndFetch = exports.request = exports.protoprepareFetchOptions = void 0;
|
|
40
40
|
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/get-own-property-descriptor"));
|
|
41
41
|
var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
|
|
42
42
|
var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
|
|
@@ -46,6 +46,7 @@ var _curry2 = _interopRequireDefault(require("lodash/curry"));
|
|
|
46
46
|
var _assign2 = _interopRequireDefault(require("lodash/assign"));
|
|
47
47
|
var _httpStatus = _interopRequireDefault(require("./interceptors/http-status"));
|
|
48
48
|
var _request2 = _interopRequireDefault(require("./request"));
|
|
49
|
+
var _utils = require("./request/utils");
|
|
49
50
|
var _progressEvent = _interopRequireDefault(require("./progress-event"));
|
|
50
51
|
var _interceptor = _interopRequireDefault(require("./lib/interceptor"));
|
|
51
52
|
var _httpError = _interopRequireDefault(require("./http-error"));
|
|
@@ -78,6 +79,53 @@ var protorequest = (0, _curry2.default)(function protorequest(defaultOptions, op
|
|
|
78
79
|
options.logger = options.logger || this.logger || console;
|
|
79
80
|
return (0, _request2.default)(options);
|
|
80
81
|
});
|
|
82
|
+
var protoprepareFetchOptions = (0, _curry2.default)(function protoprepareFetchOptions(defaultOptions, options) {
|
|
83
|
+
// Hide useless elements from logs
|
|
84
|
+
['download', 'interceptors', 'logger', 'upload'].forEach(function (prop) {
|
|
85
|
+
var descriptor = (0, _getOwnPropertyDescriptor.default)(options, prop);
|
|
86
|
+
descriptor = (0, _assign2.default)({}, descriptor, {
|
|
87
|
+
enumerable: false,
|
|
88
|
+
writable: true
|
|
89
|
+
});
|
|
90
|
+
(0, _defineProperty.default)(options, prop, descriptor);
|
|
91
|
+
});
|
|
92
|
+
(0, _defaults2.default)(options, defaultOptions);
|
|
93
|
+
options.logger = options.logger || this.logger || console;
|
|
94
|
+
return (0, _utils.prepareFetchOptions)(options);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Sets the $timings value(s) before the request/fetch.
|
|
99
|
+
* This function is only useful if you are about to send a request
|
|
100
|
+
* using prepared fetch options; normally it is done in webex.request();
|
|
101
|
+
*
|
|
102
|
+
* @param {any} options
|
|
103
|
+
* @returns {any} the updated options object
|
|
104
|
+
*/
|
|
105
|
+
exports.protoprepareFetchOptions = protoprepareFetchOptions;
|
|
106
|
+
var setRequestTimings = function setRequestTimings(options) {
|
|
107
|
+
var now = new Date().getTime();
|
|
108
|
+
options.$timings = options.$timings || {};
|
|
109
|
+
options.$timings.requestStart = now;
|
|
110
|
+
options.$timings.networkStart = now;
|
|
111
|
+
return options;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Submits a metric from pre-built request options via the fetch API. Updates
|
|
116
|
+
* the "$timings" values to Date.now() since the existing times were set when
|
|
117
|
+
* the options were built (not submitted).
|
|
118
|
+
*
|
|
119
|
+
* @param {any} options - the pre-built request options for submitting a metric
|
|
120
|
+
* @returns {Promise} promise that resolves to a response object
|
|
121
|
+
*/
|
|
122
|
+
var setTimingsAndFetch = function setTimingsAndFetch(options) {
|
|
123
|
+
var opts = setRequestTimings(options);
|
|
124
|
+
|
|
125
|
+
// call the fetch API
|
|
126
|
+
return fetch(opts.uri, opts);
|
|
127
|
+
};
|
|
128
|
+
exports.setTimingsAndFetch = setTimingsAndFetch;
|
|
81
129
|
var defaultOptions = {
|
|
82
130
|
json: true,
|
|
83
131
|
interceptors: [
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["protorequest","defaultOptions","options","uri","arguments","forEach","prop","descriptor","enumerable","writable","json","logger","console","_request","interceptors","HttpStatusInterceptor","create","defaults","request"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {assign, curry, defaults as lodashDefaults, isString} from 'lodash';\n\nimport HttpStatusInterceptor from './interceptors/http-status';\nimport _request from './request';\n\n// Curry protorequest so we generate a function with default options built in.\nconst protorequest = curry(function protorequest(defaultOptions, options) {\n // allow for options to be a string (and therefore expect options in the third\n // position) to match request's api.\n if (isString(options)) {\n const uri = options;\n\n /* eslint prefer-rest-params: [0] */\n options = arguments[2] || {};\n options.uri = uri;\n }\n\n // Hide useless elements from logs\n ['download', 'interceptors', 'logger', 'upload'].forEach((prop) => {\n let descriptor = Reflect.getOwnPropertyDescriptor(options, prop);\n\n descriptor = assign({}, descriptor, {\n enumerable: false,\n writable: true,\n });\n Reflect.defineProperty(options, prop, descriptor);\n });\n\n lodashDefaults(options, defaultOptions);\n\n if (!options.json && options.json !== false) {\n Reflect.deleteProperty(options, 'json');\n }\n\n options.logger = options.logger || this.logger || console;\n\n return _request(options);\n});\n\nconst defaultOptions = {\n json: true,\n interceptors: [\n // Reminder: this is supposed to be an instantiated interceptor.\n HttpStatusInterceptor.create(),\n ],\n};\n\nexport const defaults = protorequest;\nexport const request = protorequest(defaultOptions);\nexport {default as ProgressEvent} from './progress-event';\nexport {default as Interceptor} from './lib/interceptor';\nexport {default as HttpError} from './http-error';\nexport {default as HttpStatusInterceptor} from './interceptors/http-status';\nexport {default as detect} from './lib/detect';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;AACA;
|
|
1
|
+
{"version":3,"names":["protorequest","defaultOptions","options","uri","arguments","forEach","prop","descriptor","enumerable","writable","json","logger","console","_request","protoprepareFetchOptions","_prepareFetchOptions","setRequestTimings","now","Date","getTime","$timings","requestStart","networkStart","setTimingsAndFetch","opts","fetch","interceptors","HttpStatusInterceptor","create","defaults","request"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {assign, curry, defaults as lodashDefaults, isString} from 'lodash';\n\nimport HttpStatusInterceptor from './interceptors/http-status';\nimport _request from './request';\nimport {prepareFetchOptions as _prepareFetchOptions} from './request/utils';\n\n// Curry protorequest so we generate a function with default options built in.\nconst protorequest = curry(function protorequest(defaultOptions, options) {\n // allow for options to be a string (and therefore expect options in the third\n // position) to match request's api.\n if (isString(options)) {\n const uri = options;\n\n /* eslint prefer-rest-params: [0] */\n options = arguments[2] || {};\n options.uri = uri;\n }\n\n // Hide useless elements from logs\n ['download', 'interceptors', 'logger', 'upload'].forEach((prop) => {\n let descriptor = Reflect.getOwnPropertyDescriptor(options, prop);\n\n descriptor = assign({}, descriptor, {\n enumerable: false,\n writable: true,\n });\n Reflect.defineProperty(options, prop, descriptor);\n });\n\n lodashDefaults(options, defaultOptions);\n\n if (!options.json && options.json !== false) {\n Reflect.deleteProperty(options, 'json');\n }\n\n options.logger = options.logger || this.logger || console;\n\n return _request(options);\n});\n\nexport const protoprepareFetchOptions = curry(function protoprepareFetchOptions(\n defaultOptions,\n options\n) {\n // Hide useless elements from logs\n ['download', 'interceptors', 'logger', 'upload'].forEach((prop) => {\n let descriptor = Reflect.getOwnPropertyDescriptor(options, prop);\n\n descriptor = assign({}, descriptor, {\n enumerable: false,\n writable: true,\n });\n Reflect.defineProperty(options, prop, descriptor);\n });\n\n lodashDefaults(options, defaultOptions);\n\n options.logger = options.logger || this.logger || console;\n\n return _prepareFetchOptions(options);\n});\n\n/**\n * Sets the $timings value(s) before the request/fetch.\n * This function is only useful if you are about to send a request\n * using prepared fetch options; normally it is done in webex.request();\n *\n * @param {any} options\n * @returns {any} the updated options object\n */\nconst setRequestTimings = (options) => {\n const now = new Date().getTime();\n options.$timings = options.$timings || {};\n options.$timings.requestStart = now;\n options.$timings.networkStart = now;\n\n return options;\n};\n\n/**\n * Submits a metric from pre-built request options via the fetch API. Updates\n * the \"$timings\" values to Date.now() since the existing times were set when\n * the options were built (not submitted).\n *\n * @param {any} options - the pre-built request options for submitting a metric\n * @returns {Promise} promise that resolves to a response object\n */\nexport const setTimingsAndFetch = (options) => {\n const opts = setRequestTimings(options);\n\n // call the fetch API\n return fetch(opts.uri, opts);\n};\n\nconst defaultOptions = {\n json: true,\n interceptors: [\n // Reminder: this is supposed to be an instantiated interceptor.\n HttpStatusInterceptor.create(),\n ],\n};\n\nexport const defaults = protorequest;\nexport const request = protorequest(defaultOptions);\nexport {default as ProgressEvent} from './progress-event';\nexport {default as Interceptor} from './lib/interceptor';\nexport {default as HttpError} from './http-error';\nexport {default as HttpStatusInterceptor} from './interceptors/http-status';\nexport {default as detect} from './lib/detect';\n"],"mappings":"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"}
|
package/dist/lib/xhr.js
CHANGED
|
@@ -99,7 +99,12 @@ function _createXHR(options) {
|
|
|
99
99
|
function errorFunc(evt) {
|
|
100
100
|
clearTimeout(timeoutTimer);
|
|
101
101
|
if (!(evt instanceof Error)) {
|
|
102
|
-
|
|
102
|
+
if (evt instanceof ProgressEvent) {
|
|
103
|
+
var _evt$target;
|
|
104
|
+
evt = new Error("XMLHttpRequest Error: ProgressEvent: loaded=".concat(evt.loaded, ", total=").concat(evt.total, ", lengthComputable=").concat(evt.lengthComputable, ", target.readyState=").concat((_evt$target = evt.target) === null || _evt$target === void 0 ? void 0 : _evt$target.readyState));
|
|
105
|
+
} else {
|
|
106
|
+
evt = new Error('' + (evt || 'Unknown XMLHttpRequest Error'));
|
|
107
|
+
}
|
|
103
108
|
}
|
|
104
109
|
evt.statusCode = 0;
|
|
105
110
|
return callback(evt, failureResponse);
|
package/dist/lib/xhr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["window","require","isFunction","parseHeaders","xtend","createXHR","XMLHttpRequest","noop","XDomainRequest","forEachArray","method","uri","options","callback","initParams","toUpperCase","_createXHR","array","iterator","i","length","isEmpty","obj","hasOwnProperty","params","Error","called","cbOnce","err","response","body","readystatechange","xhr","readyState","setTimeout","loadFunc","getBody","undefined","responseText","getXml","isJson","JSON","parse","e","errorFunc","evt","clearTimeout","timeoutTimer","statusCode","failureResponse","aborted","status","useXDR","headers","url","rawRequest","getAllResponseHeaders","cors","key","data","sync","json","onreadystatechange","onload","onerror","onprogress","onabort","ontimeout","open","username","password","withCredentials","timeout","abort","code","setRequestHeader","responseType","beforeSend","send","responseXML","firefoxBugTakenEffect","documentElement","nodeName"],"sources":["xhr.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Need to fork xhr to support environments with full object freezing; namely,\n// SalesForce's Aura and Locker environment.\n\n// See https://github.com/naugtur/xhr for license information\n\n// Maintain the original code style of https://github.com/naugtur/xhr since\n// we're trying to diverge as little as possible.\n/* eslint-disable */\n\n'use strict';\nvar window = require('global/window');\nvar isFunction = require('is-function');\nvar parseHeaders = require('parse-headers');\nvar xtend = require('xtend');\n\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest =\n 'withCredentials' in new createXHR.XMLHttpRequest()\n ? createXHR.XMLHttpRequest\n : window.XDomainRequest;\n\nforEachArray(['get', 'put', 'post', 'patch', 'head', 'delete'], function (method) {\n createXHR[method === 'delete' ? 'del' : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i += 1) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n if (typeof uri === 'string') {\n params = {uri: uri};\n }\n } else {\n params = xtend(options, {uri: uri});\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === 'undefined') {\n throw new Error('callback argument missing');\n }\n\n var called = false;\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0);\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined;\n\n if (xhr.response) {\n body = xhr.response;\n } else {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n if (!(evt instanceof Error)) {\n evt = new Error('' + (evt || 'Unknown XMLHttpRequest Error'));\n }\n evt.statusCode = 0;\n return callback(evt, failureResponse);\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n if (options.useXDR && xhr.status === undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200;\n } else {\n status = xhr.status === 1223 ? 204 : xhr.status;\n }\n var response = failureResponse;\n var err = null;\n\n if (status !== 0) {\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr,\n };\n if (xhr.getAllResponseHeaders) {\n //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders());\n }\n } else {\n err = new Error('Internal XMLHttpRequest Error');\n }\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = options.uri || options.url;\n var method = options.method || 'GET';\n var body = options.body || options.data;\n var headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr,\n };\n\n if ('json' in options && options.json !== false) {\n isJson = true;\n headers['accept'] || headers['Accept'] || (headers['Accept'] = 'application/json'); //Don't override existing accept header declared by user\n if (method !== 'GET' && method !== 'HEAD') {\n headers['content-type'] ||\n headers['Content-Type'] ||\n (headers['Content-Type'] = 'application/json'); //Don't override existing accept header declared by user\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc;\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n };\n xhr.onabort = function () {\n aborted = true;\n };\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password);\n //has to be after open\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n xhr.abort('timeout');\n var e = new Error('XMLHttpRequest timeout');\n e.code = 'ETIMEDOUT';\n errorFunc(e);\n }, options.timeout);\n }\n\n if (xhr.setRequestHeader) {\n for (key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error('Headers cannot be set on an XDomainRequest object');\n }\n\n if ('responseType' in options) {\n xhr.responseType = options.responseType;\n }\n\n if ('beforeSend' in options && typeof options.beforeSend === 'function') {\n options.beforeSend(xhr);\n }\n\n // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n xhr.send(body || null);\n\n return xhr;\n}\n\nfunction getXml(xhr) {\n if (xhr.responseType === 'document') {\n return xhr.responseXML;\n }\n var firefoxBugTakenEffect =\n xhr.responseXML && xhr.responseXML.documentElement.nodeName === 'parsererror';\n if (xhr.responseType === '' && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n\n return null;\n}\n\nfunction noop() {}\n\nexport default createXHR;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["window","require","isFunction","parseHeaders","xtend","createXHR","XMLHttpRequest","noop","XDomainRequest","forEachArray","method","uri","options","callback","initParams","toUpperCase","_createXHR","array","iterator","i","length","isEmpty","obj","hasOwnProperty","params","Error","called","cbOnce","err","response","body","readystatechange","xhr","readyState","setTimeout","loadFunc","getBody","undefined","responseText","getXml","isJson","JSON","parse","e","errorFunc","evt","clearTimeout","timeoutTimer","ProgressEvent","loaded","total","lengthComputable","target","statusCode","failureResponse","aborted","status","useXDR","headers","url","rawRequest","getAllResponseHeaders","cors","key","data","sync","json","onreadystatechange","onload","onerror","onprogress","onabort","ontimeout","open","username","password","withCredentials","timeout","abort","code","setRequestHeader","responseType","beforeSend","send","responseXML","firefoxBugTakenEffect","documentElement","nodeName"],"sources":["xhr.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Need to fork xhr to support environments with full object freezing; namely,\n// SalesForce's Aura and Locker environment.\n\n// See https://github.com/naugtur/xhr for license information\n\n// Maintain the original code style of https://github.com/naugtur/xhr since\n// we're trying to diverge as little as possible.\n/* eslint-disable */\n\n'use strict';\nvar window = require('global/window');\nvar isFunction = require('is-function');\nvar parseHeaders = require('parse-headers');\nvar xtend = require('xtend');\n\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest =\n 'withCredentials' in new createXHR.XMLHttpRequest()\n ? createXHR.XMLHttpRequest\n : window.XDomainRequest;\n\nforEachArray(['get', 'put', 'post', 'patch', 'head', 'delete'], function (method) {\n createXHR[method === 'delete' ? 'del' : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i += 1) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n if (typeof uri === 'string') {\n params = {uri: uri};\n }\n } else {\n params = xtend(options, {uri: uri});\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === 'undefined') {\n throw new Error('callback argument missing');\n }\n\n var called = false;\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0);\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined;\n\n if (xhr.response) {\n body = xhr.response;\n } else {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n if (!(evt instanceof Error)) {\n if (evt instanceof ProgressEvent) {\n evt = new Error(`XMLHttpRequest Error: ProgressEvent: loaded=${evt.loaded}, total=${evt.total}, lengthComputable=${evt.lengthComputable}, target.readyState=${evt.target?.readyState}`)\n } else {\n evt = new Error('' + (evt || 'Unknown XMLHttpRequest Error'));\n }\n }\n evt.statusCode = 0;\n return callback(evt, failureResponse);\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n if (options.useXDR && xhr.status === undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200;\n } else {\n status = xhr.status === 1223 ? 204 : xhr.status;\n }\n var response = failureResponse;\n var err = null;\n\n if (status !== 0) {\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr,\n };\n if (xhr.getAllResponseHeaders) {\n //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders());\n }\n } else {\n err = new Error('Internal XMLHttpRequest Error');\n }\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = options.uri || options.url;\n var method = options.method || 'GET';\n var body = options.body || options.data;\n var headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr,\n };\n\n if ('json' in options && options.json !== false) {\n isJson = true;\n headers['accept'] || headers['Accept'] || (headers['Accept'] = 'application/json'); //Don't override existing accept header declared by user\n if (method !== 'GET' && method !== 'HEAD') {\n headers['content-type'] ||\n headers['Content-Type'] ||\n (headers['Content-Type'] = 'application/json'); //Don't override existing accept header declared by user\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc;\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n };\n xhr.onabort = function () {\n aborted = true;\n };\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password);\n //has to be after open\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n xhr.abort('timeout');\n var e = new Error('XMLHttpRequest timeout');\n e.code = 'ETIMEDOUT';\n errorFunc(e);\n }, options.timeout);\n }\n\n if (xhr.setRequestHeader) {\n for (key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error('Headers cannot be set on an XDomainRequest object');\n }\n\n if ('responseType' in options) {\n xhr.responseType = options.responseType;\n }\n\n if ('beforeSend' in options && typeof options.beforeSend === 'function') {\n options.beforeSend(xhr);\n }\n\n // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n xhr.send(body || null);\n\n return xhr;\n}\n\nfunction getXml(xhr) {\n if (xhr.responseType === 'document') {\n return xhr.responseXML;\n }\n var firefoxBugTakenEffect =\n xhr.responseXML && xhr.responseXML.documentElement.nodeName === 'parsererror';\n if (xhr.responseType === '' && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n\n return null;\n}\n\nfunction noop() {}\n\nexport default createXHR;\n"],"mappings":"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"}
|
package/dist/request/index.js
CHANGED
|
@@ -6,9 +6,9 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.default = request;
|
|
9
|
-
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
10
9
|
var _events = require("events");
|
|
11
10
|
var _request2 = _interopRequireDefault(require("./request"));
|
|
11
|
+
var _utils = require("./utils");
|
|
12
12
|
/*!
|
|
13
13
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
14
14
|
*/
|
|
@@ -25,7 +25,7 @@ function request(options) {
|
|
|
25
25
|
options.headers = options.headers || {};
|
|
26
26
|
options.download = new _events.EventEmitter();
|
|
27
27
|
options.upload = new _events.EventEmitter();
|
|
28
|
-
return intercept(options.interceptors, 'Request').then(function () {
|
|
28
|
+
return (0, _utils.intercept)(options, options.interceptors, 'Request').then(function () {
|
|
29
29
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
30
30
|
args[_key] = arguments[_key];
|
|
31
31
|
}
|
|
@@ -34,34 +34,7 @@ function request(options) {
|
|
|
34
34
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
35
35
|
args[_key2] = arguments[_key2];
|
|
36
36
|
}
|
|
37
|
-
return intercept.apply(void 0, [options.interceptors.slice().reverse(), 'Response'].concat(args));
|
|
37
|
+
return _utils.intercept.apply(void 0, [options, options.interceptors.slice().reverse(), 'Response'].concat(args));
|
|
38
38
|
});
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* @param {Array} interceptors
|
|
42
|
-
* @param {string} key
|
|
43
|
-
* @param {Object} res
|
|
44
|
-
* @private
|
|
45
|
-
* @returns {Promise}
|
|
46
|
-
*/
|
|
47
|
-
function intercept(interceptors, key, res) {
|
|
48
|
-
var successKey = "on".concat(key);
|
|
49
|
-
var errorKey = "on".concat(key, "Error");
|
|
50
|
-
return interceptors.reduce(function (promise, interceptor) {
|
|
51
|
-
return promise.then(function (result) {
|
|
52
|
-
interceptor.logOptions(options);
|
|
53
|
-
if (interceptor[successKey]) {
|
|
54
|
-
return interceptor[successKey](options, result);
|
|
55
|
-
}
|
|
56
|
-
return _promise.default.resolve(result);
|
|
57
|
-
}, function (reason) {
|
|
58
|
-
interceptor.logOptions(options);
|
|
59
|
-
if (interceptor[errorKey]) {
|
|
60
|
-
return interceptor[errorKey](options, reason);
|
|
61
|
-
}
|
|
62
|
-
return _promise.default.reject(reason);
|
|
63
|
-
});
|
|
64
|
-
}, _promise.default.resolve(res));
|
|
65
|
-
}
|
|
66
39
|
}
|
|
67
40
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["request","options","url","uri","headers","download","EventEmitter","upload","intercept","interceptors","then","args","_request","slice","reverse"
|
|
1
|
+
{"version":3,"names":["request","options","url","uri","headers","download","EventEmitter","upload","intercept","interceptors","then","args","_request","slice","reverse"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport _request from './request';\nimport {intercept} from './utils';\n\n/**\n * @param {Object} options\n * @returns {Promise}\n */\nexport default function request(options) {\n if (options.url) {\n options.uri = options.url;\n options.url = null;\n }\n\n options.headers = options.headers || {};\n\n options.download = new EventEmitter();\n options.upload = new EventEmitter();\n\n return intercept(options, options.interceptors, 'Request')\n .then((...args) => _request(options, ...args))\n .then((...args) =>\n intercept(options, options.interceptors.slice().reverse(), 'Response', ...args)\n );\n}\n"],"mappings":";;;;;;;;AAIA;AAEA;AACA;AAPA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACe,SAASA,OAAO,CAACC,OAAO,EAAE;EACvC,IAAIA,OAAO,CAACC,GAAG,EAAE;IACfD,OAAO,CAACE,GAAG,GAAGF,OAAO,CAACC,GAAG;IACzBD,OAAO,CAACC,GAAG,GAAG,IAAI;EACpB;EAEAD,OAAO,CAACG,OAAO,GAAGH,OAAO,CAACG,OAAO,IAAI,CAAC,CAAC;EAEvCH,OAAO,CAACI,QAAQ,GAAG,IAAIC,oBAAY,EAAE;EACrCL,OAAO,CAACM,MAAM,GAAG,IAAID,oBAAY,EAAE;EAEnC,OAAO,IAAAE,gBAAS,EAACP,OAAO,EAAEA,OAAO,CAACQ,YAAY,EAAE,SAAS,CAAC,CACvDC,IAAI,CAAC;IAAA,kCAAIC,IAAI;MAAJA,IAAI;IAAA;IAAA,OAAKC,iBAAQ,gBAACX,OAAO,SAAKU,IAAI,EAAC;EAAA,EAAC,CAC7CD,IAAI,CAAC;IAAA,mCAAIC,IAAI;MAAJA,IAAI;IAAA;IAAA,OACZH,gBAAS,gBAACP,OAAO,EAAEA,OAAO,CAACQ,YAAY,CAACI,KAAK,EAAE,CAACC,OAAO,EAAE,EAAE,UAAU,SAAKH,IAAI,EAAC;EAAA,EAChF;AACL"}
|
|
@@ -49,7 +49,7 @@ function _request(options) {
|
|
|
49
49
|
var x = (0, _xhr.default)(params, function (error, response) {
|
|
50
50
|
/* istanbul ignore next */
|
|
51
51
|
if (error) {
|
|
52
|
-
options.logger.warn(error);
|
|
52
|
+
options.logger.warn("XHR error for ".concat(options.method || 'request', " to ").concat(options.uri, " :"), error);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
/* istanbul ignore else */
|
|
@@ -128,7 +128,7 @@ function _request(options) {
|
|
|
128
128
|
var user = o.auth.user || o.auth.username;
|
|
129
129
|
var pass = o.auth.pass || o.auth.password;
|
|
130
130
|
var token = btoa("".concat(user, ":").concat(pass));
|
|
131
|
-
params.headers.
|
|
131
|
+
params.headers.Authorization = "Basic ".concat(token);
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_request","options","resolve","params","response","setXhr","bindProgressEvents","setAuth","setCookies","setDefaults","setResponseType","setContentType","setPayload","setQs","logger","debug","method","uri","x","xhr","error","warn","statusCode","processResponseJson","headers","url","body","onprogress","download","emit","bind","catch","o","includes","toUpperCase","XMLHttpRequest","upload","auth","bearer","authorization","user","username","pass","password","token","btoa","jar","withCredentials","defs","cors","timeout","responseType","Blob","ArrayBuffer","json","detect","qs","stringify","ensureBlob","file","ret","type","filename","name","append","form","key","value","v","formData","reduce","fd","FormData","JSON","parse","e"],"sources":["request.shim.js"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\n// Note: several code paths are ignored in this file. As far as I can tell, any\n// error conditions that would provoke those paths are otherwise prevented and\n// reported.\n\nimport {defaults, isArray, pick} from 'lodash';\nimport qs from 'qs';\n\nimport xhr from '../lib/xhr';\nimport detect from '../lib/detect';\n\n/**\n * @name request\n * @param {Object} options\n * @returns {Promise}\n */\nexport default function _request(options) {\n return new Promise((resolve) => {\n const params = pick(\n options,\n 'method',\n 'uri',\n 'withCredentials',\n 'headers',\n 'timeout',\n 'responseType'\n );\n\n // Set `response` to `true` to approximate an `HttpResponse` object\n params.response = true;\n\n setXhr(params);\n bindProgressEvents(params, options);\n setAuth(params, options);\n setCookies(params, options);\n setDefaults(params, options);\n setResponseType(params, options);\n setContentType(params, options);\n setPayload(params, options);\n setQs(params, options);\n\n options.logger.debug(\n `start http ${options.method ? options.method : 'request'} to ${options.uri}`\n );\n\n const x = xhr(params, (error, response) => {\n /* istanbul ignore next */\n if (error) {\n options.logger.warn(error);\n }\n\n /* istanbul ignore else */\n if (response) {\n if (response.statusCode >= 400) {\n options.logger.warn(\n `http ${options.method ? options.method : 'request'} to ${options.uri} result: ${\n response.statusCode\n }`\n );\n } else {\n options.logger.debug(\n `http ${options.method ? options.method : 'request'} to ${options.uri} result: ${\n response.statusCode\n }`\n );\n }\n response.options = options;\n processResponseJson(response, params);\n resolve(response);\n } else {\n resolve({\n statusCode: 0,\n options,\n headers: options.headers,\n method: options.method,\n url: options.uri,\n body: error,\n });\n }\n });\n\n x.onprogress = options.download.emit.bind(options.download, 'progress');\n }).catch((error) => {\n options.logger.warn(error);\n\n /* eslint arrow-body-style: [0] */\n /* istanbul ignore next */\n return {\n statusCode: 0,\n options,\n headers: options.headers,\n method: options.method,\n url: options.uri,\n body: error,\n };\n });\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function bindProgressEvents(params, o) {\n if (params.method && ['PATCH', 'POST', 'PUT'].includes(params.method.toUpperCase())) {\n if (!params.xhr) {\n params.xhr = new XMLHttpRequest();\n }\n params.xhr.upload.onprogress = o.upload.emit.bind(o.upload, 'progress');\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setXhr(params) {\n params.xhr = new XMLHttpRequest();\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setAuth(params, o) {\n if (o.auth) {\n if (o.auth.bearer) {\n params.headers.authorization = `Bearer ${o.auth.bearer}`;\n } else {\n const user = o.auth.user || o.auth.username;\n const pass = o.auth.pass || o.auth.password;\n\n const token = btoa(`${user}:${pass}`);\n\n params.headers.authorization = `Basic ${token}`;\n }\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setCookies(params, o) {\n if (o.jar) {\n params.withCredentials = true;\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setDefaults(params, o) {\n const defs = {\n cors: true,\n // raynos/xhr defaults withCredentials to true if cors is true, so we need\n // to make it explicitly false by default\n withCredentials: false,\n timeout: 0,\n };\n\n defaults(params, pick(o, Object.keys(defs)), defs);\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setResponseType(params, o) {\n if (o.responseType === 'buffer') {\n params.responseType = 'arraybuffer';\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n async function setContentType(params, o) {\n if (o.body instanceof Blob || o.body instanceof ArrayBuffer) {\n o.json = params.json = false;\n params.headers['content-type'] = params.headers['content-type'] || (await detect(o.body));\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setQs(params, o) {\n if (o.qs) {\n params.uri += `?${qs.stringify(o.qs)}`;\n }\n }\n\n /**\n * Converts arraybuffers to blobs before uploading them\n * @param {mixed} file\n * @private\n * @returns {mixed}\n */\n function ensureBlob(file) {\n if (file instanceof ArrayBuffer) {\n const ret = file.type ? new Blob([file], {type: file.type}) : new Blob([file]);\n\n ret.filename = file.filename || file.name || 'untitled';\n\n return ret;\n }\n\n return file;\n }\n\n /**\n * Appends an item to a form\n * @param {FormData} form\n * @param {string} key\n * @param {mixed} value\n * @returns {undefined}\n */\n function append(form, key, value) {\n if (isArray(value)) {\n for (const v of value) {\n append(form, key, v);\n }\n\n return;\n }\n\n value = ensureBlob(value);\n if (value.name) {\n value.filename = value.name;\n form.append(key, value, value.name);\n } else {\n form.append(key, value);\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setPayload(params, o) {\n if ((!('json' in o) || o.json === true) && o.body) {\n params.json = o.body;\n } else if (o.form) {\n params.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n params.body = qs.stringify(o.form);\n Reflect.deleteProperty(params, 'json');\n } else if (o.formData) {\n params.body = Object.keys(o.formData).reduce((fd, key) => {\n const value = o.formData[key];\n\n append(fd, key, value);\n\n return fd;\n }, new FormData());\n } else {\n params.body = o.body;\n Reflect.deleteProperty(params, 'json');\n }\n }\n\n /**\n * @param {Object} response\n * @param {Object} params\n * @private\n * @returns {undefined}\n */\n function processResponseJson(response, params) {\n // If params.json is not defined, xhr won't deserialize the response\n // so we should give it a shot just in case.\n if (!params.json && typeof response.body !== 'object') {\n try {\n response.body = JSON.parse(response.body);\n } catch (e) {\n /* eslint no-empty: [0] */\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_request","options","resolve","params","response","setXhr","bindProgressEvents","setAuth","setCookies","setDefaults","setResponseType","setContentType","setPayload","setQs","logger","debug","method","uri","x","xhr","error","warn","statusCode","processResponseJson","headers","url","body","onprogress","download","emit","bind","catch","o","includes","toUpperCase","XMLHttpRequest","upload","auth","bearer","authorization","user","username","pass","password","token","btoa","Authorization","jar","withCredentials","defs","cors","timeout","responseType","Blob","ArrayBuffer","json","detect","qs","stringify","ensureBlob","file","ret","type","filename","name","append","form","key","value","v","formData","reduce","fd","FormData","JSON","parse","e"],"sources":["request.shim.js"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\n// Note: several code paths are ignored in this file. As far as I can tell, any\n// error conditions that would provoke those paths are otherwise prevented and\n// reported.\n\nimport {defaults, isArray, pick} from 'lodash';\nimport qs from 'qs';\n\nimport xhr from '../lib/xhr';\nimport detect from '../lib/detect';\n\n/**\n * @name request\n * @param {Object} options\n * @returns {Promise}\n */\nexport default function _request(options) {\n return new Promise((resolve) => {\n const params = pick(\n options,\n 'method',\n 'uri',\n 'withCredentials',\n 'headers',\n 'timeout',\n 'responseType'\n );\n\n // Set `response` to `true` to approximate an `HttpResponse` object\n params.response = true;\n\n setXhr(params);\n bindProgressEvents(params, options);\n setAuth(params, options);\n setCookies(params, options);\n setDefaults(params, options);\n setResponseType(params, options);\n setContentType(params, options);\n setPayload(params, options);\n setQs(params, options);\n\n options.logger.debug(\n `start http ${options.method ? options.method : 'request'} to ${options.uri}`\n );\n\n const x = xhr(params, (error, response) => {\n /* istanbul ignore next */\n if (error) {\n options.logger.warn(\n `XHR error for ${options.method || 'request'} to ${options.uri} :`,\n error\n );\n }\n\n /* istanbul ignore else */\n if (response) {\n if (response.statusCode >= 400) {\n options.logger.warn(\n `http ${options.method ? options.method : 'request'} to ${options.uri} result: ${\n response.statusCode\n }`\n );\n } else {\n options.logger.debug(\n `http ${options.method ? options.method : 'request'} to ${options.uri} result: ${\n response.statusCode\n }`\n );\n }\n response.options = options;\n processResponseJson(response, params);\n resolve(response);\n } else {\n resolve({\n statusCode: 0,\n options,\n headers: options.headers,\n method: options.method,\n url: options.uri,\n body: error,\n });\n }\n });\n\n x.onprogress = options.download.emit.bind(options.download, 'progress');\n }).catch((error) => {\n options.logger.warn(error);\n\n /* eslint arrow-body-style: [0] */\n /* istanbul ignore next */\n return {\n statusCode: 0,\n options,\n headers: options.headers,\n method: options.method,\n url: options.uri,\n body: error,\n };\n });\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function bindProgressEvents(params, o) {\n if (params.method && ['PATCH', 'POST', 'PUT'].includes(params.method.toUpperCase())) {\n if (!params.xhr) {\n params.xhr = new XMLHttpRequest();\n }\n params.xhr.upload.onprogress = o.upload.emit.bind(o.upload, 'progress');\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setXhr(params) {\n params.xhr = new XMLHttpRequest();\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setAuth(params, o) {\n if (o.auth) {\n if (o.auth.bearer) {\n params.headers.authorization = `Bearer ${o.auth.bearer}`;\n } else {\n const user = o.auth.user || o.auth.username;\n const pass = o.auth.pass || o.auth.password;\n\n const token = btoa(`${user}:${pass}`);\n\n params.headers.Authorization = `Basic ${token}`;\n }\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setCookies(params, o) {\n if (o.jar) {\n params.withCredentials = true;\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setDefaults(params, o) {\n const defs = {\n cors: true,\n // raynos/xhr defaults withCredentials to true if cors is true, so we need\n // to make it explicitly false by default\n withCredentials: false,\n timeout: 0,\n };\n\n defaults(params, pick(o, Object.keys(defs)), defs);\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setResponseType(params, o) {\n if (o.responseType === 'buffer') {\n params.responseType = 'arraybuffer';\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n async function setContentType(params, o) {\n if (o.body instanceof Blob || o.body instanceof ArrayBuffer) {\n o.json = params.json = false;\n params.headers['content-type'] = params.headers['content-type'] || (await detect(o.body));\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setQs(params, o) {\n if (o.qs) {\n params.uri += `?${qs.stringify(o.qs)}`;\n }\n }\n\n /**\n * Converts arraybuffers to blobs before uploading them\n * @param {mixed} file\n * @private\n * @returns {mixed}\n */\n function ensureBlob(file) {\n if (file instanceof ArrayBuffer) {\n const ret = file.type ? new Blob([file], {type: file.type}) : new Blob([file]);\n\n ret.filename = file.filename || file.name || 'untitled';\n\n return ret;\n }\n\n return file;\n }\n\n /**\n * Appends an item to a form\n * @param {FormData} form\n * @param {string} key\n * @param {mixed} value\n * @returns {undefined}\n */\n function append(form, key, value) {\n if (isArray(value)) {\n for (const v of value) {\n append(form, key, v);\n }\n\n return;\n }\n\n value = ensureBlob(value);\n if (value.name) {\n value.filename = value.name;\n form.append(key, value, value.name);\n } else {\n form.append(key, value);\n }\n }\n\n /**\n * @param {Object} params\n * @param {Object} o\n * @private\n * @returns {undefined}\n */\n function setPayload(params, o) {\n if ((!('json' in o) || o.json === true) && o.body) {\n params.json = o.body;\n } else if (o.form) {\n params.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n params.body = qs.stringify(o.form);\n Reflect.deleteProperty(params, 'json');\n } else if (o.formData) {\n params.body = Object.keys(o.formData).reduce((fd, key) => {\n const value = o.formData[key];\n\n append(fd, key, value);\n\n return fd;\n }, new FormData());\n } else {\n params.body = o.body;\n Reflect.deleteProperty(params, 'json');\n }\n }\n\n /**\n * @param {Object} response\n * @param {Object} params\n * @private\n * @returns {undefined}\n */\n function processResponseJson(response, params) {\n // If params.json is not defined, xhr won't deserialize the response\n // so we should give it a shot just in case.\n if (!params.json && typeof response.body !== 'object') {\n try {\n response.body = JSON.parse(response.body);\n } catch (e) {\n /* eslint no-empty: [0] */\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.intercept = intercept;
|
|
9
|
+
exports.prepareFetchOptions = prepareFetchOptions;
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
11
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
12
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
13
|
+
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
14
|
+
var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
|
|
15
|
+
var _events = require("events");
|
|
16
|
+
/* eslint-disable import/prefer-default-export */
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @param {Object} options
|
|
20
|
+
* @param {Array<Object>} interceptors
|
|
21
|
+
* @param {string} key
|
|
22
|
+
* @param {Object | undefined} res
|
|
23
|
+
* @private
|
|
24
|
+
* @returns {Promise}
|
|
25
|
+
*/
|
|
26
|
+
function intercept(options, interceptors, key) {
|
|
27
|
+
var res = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
|
|
28
|
+
var successKey = "on".concat(key);
|
|
29
|
+
var errorKey = "on".concat(key, "Error");
|
|
30
|
+
return interceptors.reduce(function (promise, interceptor) {
|
|
31
|
+
return promise.then(function (result) {
|
|
32
|
+
interceptor.logOptions(options);
|
|
33
|
+
if (interceptor[successKey]) {
|
|
34
|
+
return interceptor[successKey](options, result);
|
|
35
|
+
}
|
|
36
|
+
return _promise.default.resolve(result);
|
|
37
|
+
}, function (reason) {
|
|
38
|
+
interceptor.logOptions(options);
|
|
39
|
+
if (interceptor[errorKey]) {
|
|
40
|
+
return interceptor[errorKey](options, reason);
|
|
41
|
+
}
|
|
42
|
+
return _promise.default.reject(reason);
|
|
43
|
+
});
|
|
44
|
+
}, _promise.default.resolve(res));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Prepare options for a fetch.
|
|
49
|
+
* @param {object} options
|
|
50
|
+
* @returns {Promise}
|
|
51
|
+
*/
|
|
52
|
+
function prepareFetchOptions(_x) {
|
|
53
|
+
return _prepareFetchOptions.apply(this, arguments);
|
|
54
|
+
}
|
|
55
|
+
function _prepareFetchOptions() {
|
|
56
|
+
_prepareFetchOptions = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
|
|
57
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
58
|
+
while (1) switch (_context.prev = _context.next) {
|
|
59
|
+
case 0:
|
|
60
|
+
if (options.url) {
|
|
61
|
+
options.uri = options.url;
|
|
62
|
+
options.url = null;
|
|
63
|
+
}
|
|
64
|
+
options.headers = options.headers || {};
|
|
65
|
+
if (options.json) {
|
|
66
|
+
// don't override existing accept header declared by user
|
|
67
|
+
options.headers.accept = options.headers.accept || options.headers.Accept || 'application/json';
|
|
68
|
+
|
|
69
|
+
// don't override existing content-type header declared by user
|
|
70
|
+
if (options.method !== 'GET' && options.method !== 'HEAD') {
|
|
71
|
+
options.headers['content-type'] = options.headers['content-type'] || options.headers['Content-Type'] || 'application/json';
|
|
72
|
+
options.body = (0, _stringify.default)(options.json === true ? options.body : options.json);
|
|
73
|
+
}
|
|
74
|
+
} else if (options.json !== undefined) {
|
|
75
|
+
(0, _deleteProperty.default)(options, 'json');
|
|
76
|
+
}
|
|
77
|
+
options.download = new _events.EventEmitter();
|
|
78
|
+
options.upload = new _events.EventEmitter();
|
|
79
|
+
options.keepalive = true;
|
|
80
|
+
return _context.abrupt("return", intercept(options, options.interceptors, 'Request').then(function () {
|
|
81
|
+
return options;
|
|
82
|
+
}));
|
|
83
|
+
case 7:
|
|
84
|
+
case "end":
|
|
85
|
+
return _context.stop();
|
|
86
|
+
}
|
|
87
|
+
}, _callee);
|
|
88
|
+
}));
|
|
89
|
+
return _prepareFetchOptions.apply(this, arguments);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["intercept","options","interceptors","key","res","undefined","successKey","errorKey","reduce","promise","interceptor","then","result","logOptions","resolve","reason","reject","prepareFetchOptions","url","uri","headers","json","accept","Accept","method","body","download","EventEmitter","upload","keepalive"],"sources":["utils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport {EventEmitter} from 'events';\nimport Interceptor from '../lib/interceptor';\n\n/**\n * @param {Object} options\n * @param {Array<Object>} interceptors\n * @param {string} key\n * @param {Object | undefined} res\n * @private\n * @returns {Promise}\n */\nexport function intercept(\n options: object,\n interceptors: Array<Interceptor>,\n key: string,\n res: object = undefined\n): Promise<any> {\n const successKey = `on${key}`;\n const errorKey = `on${key}Error`;\n\n return interceptors.reduce(\n (promise, interceptor) =>\n promise.then(\n (result) => {\n interceptor.logOptions(options);\n if (interceptor[successKey]) {\n return interceptor[successKey](options, result);\n }\n\n return Promise.resolve(result);\n },\n (reason) => {\n interceptor.logOptions(options);\n if (interceptor[errorKey]) {\n return interceptor[errorKey](options, reason);\n }\n\n return Promise.reject(reason);\n }\n ),\n Promise.resolve(res)\n );\n}\n\n/**\n * Prepare options for a fetch.\n * @param {object} options\n * @returns {Promise}\n */\nexport async function prepareFetchOptions(options: any): Promise<any> {\n if (options.url) {\n options.uri = options.url;\n options.url = null;\n }\n\n options.headers = options.headers || {};\n\n if (options.json) {\n // don't override existing accept header declared by user\n options.headers.accept = options.headers.accept || options.headers.Accept || 'application/json';\n\n // don't override existing content-type header declared by user\n if (options.method !== 'GET' && options.method !== 'HEAD') {\n options.headers['content-type'] =\n options.headers['content-type'] || options.headers['Content-Type'] || 'application/json';\n options.body = JSON.stringify(options.json === true ? options.body : options.json);\n }\n } else if (options.json !== undefined) {\n Reflect.deleteProperty(options, 'json');\n }\n\n options.download = new EventEmitter();\n options.upload = new EventEmitter();\n options.keepalive = true;\n\n return intercept(options, options.interceptors, 'Request').then(() => options);\n}\n"],"mappings":";;;;;;;;;;;;;;AACA;AADA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,SAAS,CACvBC,OAAe,EACfC,YAAgC,EAChCC,GAAW,EAEG;EAAA,IADdC,GAAW,uEAAGC,SAAS;EAEvB,IAAMC,UAAU,eAAQH,GAAG,CAAE;EAC7B,IAAMI,QAAQ,eAAQJ,GAAG,UAAO;EAEhC,OAAOD,YAAY,CAACM,MAAM,CACxB,UAACC,OAAO,EAAEC,WAAW;IAAA,OACnBD,OAAO,CAACE,IAAI,CACV,UAACC,MAAM,EAAK;MACVF,WAAW,CAACG,UAAU,CAACZ,OAAO,CAAC;MAC/B,IAAIS,WAAW,CAACJ,UAAU,CAAC,EAAE;QAC3B,OAAOI,WAAW,CAACJ,UAAU,CAAC,CAACL,OAAO,EAAEW,MAAM,CAAC;MACjD;MAEA,OAAO,iBAAQE,OAAO,CAACF,MAAM,CAAC;IAChC,CAAC,EACD,UAACG,MAAM,EAAK;MACVL,WAAW,CAACG,UAAU,CAACZ,OAAO,CAAC;MAC/B,IAAIS,WAAW,CAACH,QAAQ,CAAC,EAAE;QACzB,OAAOG,WAAW,CAACH,QAAQ,CAAC,CAACN,OAAO,EAAEc,MAAM,CAAC;MAC/C;MAEA,OAAO,iBAAQC,MAAM,CAACD,MAAM,CAAC;IAC/B,CAAC,CACF;EAAA,GACH,iBAAQD,OAAO,CAACV,GAAG,CAAC,CACrB;AACH;;AAEA;AACA;AACA;AACA;AACA;AAJA,SAKsBa,mBAAmB;EAAA;AAAA;AAAA;EAAA,+FAAlC,iBAAmChB,OAAY;IAAA;MAAA;QAAA;UACpD,IAAIA,OAAO,CAACiB,GAAG,EAAE;YACfjB,OAAO,CAACkB,GAAG,GAAGlB,OAAO,CAACiB,GAAG;YACzBjB,OAAO,CAACiB,GAAG,GAAG,IAAI;UACpB;UAEAjB,OAAO,CAACmB,OAAO,GAAGnB,OAAO,CAACmB,OAAO,IAAI,CAAC,CAAC;UAEvC,IAAInB,OAAO,CAACoB,IAAI,EAAE;YAChB;YACApB,OAAO,CAACmB,OAAO,CAACE,MAAM,GAAGrB,OAAO,CAACmB,OAAO,CAACE,MAAM,IAAIrB,OAAO,CAACmB,OAAO,CAACG,MAAM,IAAI,kBAAkB;;YAE/F;YACA,IAAItB,OAAO,CAACuB,MAAM,KAAK,KAAK,IAAIvB,OAAO,CAACuB,MAAM,KAAK,MAAM,EAAE;cACzDvB,OAAO,CAACmB,OAAO,CAAC,cAAc,CAAC,GAC7BnB,OAAO,CAACmB,OAAO,CAAC,cAAc,CAAC,IAAInB,OAAO,CAACmB,OAAO,CAAC,cAAc,CAAC,IAAI,kBAAkB;cAC1FnB,OAAO,CAACwB,IAAI,GAAG,wBAAexB,OAAO,CAACoB,IAAI,KAAK,IAAI,GAAGpB,OAAO,CAACwB,IAAI,GAAGxB,OAAO,CAACoB,IAAI,CAAC;YACpF;UACF,CAAC,MAAM,IAAIpB,OAAO,CAACoB,IAAI,KAAKhB,SAAS,EAAE;YACrC,6BAAuBJ,OAAO,EAAE,MAAM,CAAC;UACzC;UAEAA,OAAO,CAACyB,QAAQ,GAAG,IAAIC,oBAAY,EAAE;UACrC1B,OAAO,CAAC2B,MAAM,GAAG,IAAID,oBAAY,EAAE;UACnC1B,OAAO,CAAC4B,SAAS,GAAG,IAAI;UAAC,iCAElB7B,SAAS,CAACC,OAAO,EAAEA,OAAO,CAACC,YAAY,EAAE,SAAS,CAAC,CAACS,IAAI,CAAC;YAAA,OAAMV,OAAO;UAAA,EAAC;QAAA;QAAA;UAAA;MAAA;IAAA;EAAA,CAC/E;EAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/http-core",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.380",
|
|
4
4
|
"description": "Core HTTP library for the Cisco Webex",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,18 +24,18 @@
|
|
|
24
24
|
]
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
28
|
-
"@webex/test-helper-file": "3.0.0-beta.
|
|
29
|
-
"@webex/test-helper-make-local-url": "3.0.0-beta.
|
|
30
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
27
|
+
"@webex/test-helper-chai": "3.0.0-beta.380",
|
|
28
|
+
"@webex/test-helper-file": "3.0.0-beta.380",
|
|
29
|
+
"@webex/test-helper-make-local-url": "3.0.0-beta.380",
|
|
30
|
+
"@webex/test-helper-mocha": "3.0.0-beta.380",
|
|
31
31
|
"sinon": "^9.2.4"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@webex/common": "3.0.0-beta.
|
|
35
|
-
"@webex/http-core": "3.0.0-beta.
|
|
36
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
38
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
34
|
+
"@webex/common": "3.0.0-beta.380",
|
|
35
|
+
"@webex/http-core": "3.0.0-beta.380",
|
|
36
|
+
"@webex/internal-plugin-device": "3.0.0-beta.380",
|
|
37
|
+
"@webex/test-helper-test-users": "3.0.0-beta.380",
|
|
38
|
+
"@webex/webex-core": "3.0.0-beta.380",
|
|
39
39
|
"file-type": "^16.0.1",
|
|
40
40
|
"global": "^4.4.0",
|
|
41
41
|
"is-function": "^1.0.1",
|
package/src/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import {assign, curry, defaults as lodashDefaults, isString} from 'lodash';
|
|
|
6
6
|
|
|
7
7
|
import HttpStatusInterceptor from './interceptors/http-status';
|
|
8
8
|
import _request from './request';
|
|
9
|
+
import {prepareFetchOptions as _prepareFetchOptions} from './request/utils';
|
|
9
10
|
|
|
10
11
|
// Curry protorequest so we generate a function with default options built in.
|
|
11
12
|
const protorequest = curry(function protorequest(defaultOptions, options) {
|
|
@@ -41,6 +42,60 @@ const protorequest = curry(function protorequest(defaultOptions, options) {
|
|
|
41
42
|
return _request(options);
|
|
42
43
|
});
|
|
43
44
|
|
|
45
|
+
export const protoprepareFetchOptions = curry(function protoprepareFetchOptions(
|
|
46
|
+
defaultOptions,
|
|
47
|
+
options
|
|
48
|
+
) {
|
|
49
|
+
// Hide useless elements from logs
|
|
50
|
+
['download', 'interceptors', 'logger', 'upload'].forEach((prop) => {
|
|
51
|
+
let descriptor = Reflect.getOwnPropertyDescriptor(options, prop);
|
|
52
|
+
|
|
53
|
+
descriptor = assign({}, descriptor, {
|
|
54
|
+
enumerable: false,
|
|
55
|
+
writable: true,
|
|
56
|
+
});
|
|
57
|
+
Reflect.defineProperty(options, prop, descriptor);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
lodashDefaults(options, defaultOptions);
|
|
61
|
+
|
|
62
|
+
options.logger = options.logger || this.logger || console;
|
|
63
|
+
|
|
64
|
+
return _prepareFetchOptions(options);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Sets the $timings value(s) before the request/fetch.
|
|
69
|
+
* This function is only useful if you are about to send a request
|
|
70
|
+
* using prepared fetch options; normally it is done in webex.request();
|
|
71
|
+
*
|
|
72
|
+
* @param {any} options
|
|
73
|
+
* @returns {any} the updated options object
|
|
74
|
+
*/
|
|
75
|
+
const setRequestTimings = (options) => {
|
|
76
|
+
const now = new Date().getTime();
|
|
77
|
+
options.$timings = options.$timings || {};
|
|
78
|
+
options.$timings.requestStart = now;
|
|
79
|
+
options.$timings.networkStart = now;
|
|
80
|
+
|
|
81
|
+
return options;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Submits a metric from pre-built request options via the fetch API. Updates
|
|
86
|
+
* the "$timings" values to Date.now() since the existing times were set when
|
|
87
|
+
* the options were built (not submitted).
|
|
88
|
+
*
|
|
89
|
+
* @param {any} options - the pre-built request options for submitting a metric
|
|
90
|
+
* @returns {Promise} promise that resolves to a response object
|
|
91
|
+
*/
|
|
92
|
+
export const setTimingsAndFetch = (options) => {
|
|
93
|
+
const opts = setRequestTimings(options);
|
|
94
|
+
|
|
95
|
+
// call the fetch API
|
|
96
|
+
return fetch(opts.uri, opts);
|
|
97
|
+
};
|
|
98
|
+
|
|
44
99
|
const defaultOptions = {
|
|
45
100
|
json: true,
|
|
46
101
|
interceptors: [
|
package/src/lib/xhr.js
CHANGED
|
@@ -106,7 +106,11 @@ function _createXHR(options) {
|
|
|
106
106
|
function errorFunc(evt) {
|
|
107
107
|
clearTimeout(timeoutTimer);
|
|
108
108
|
if (!(evt instanceof Error)) {
|
|
109
|
-
|
|
109
|
+
if (evt instanceof ProgressEvent) {
|
|
110
|
+
evt = new Error(`XMLHttpRequest Error: ProgressEvent: loaded=${evt.loaded}, total=${evt.total}, lengthComputable=${evt.lengthComputable}, target.readyState=${evt.target?.readyState}`)
|
|
111
|
+
} else {
|
|
112
|
+
evt = new Error('' + (evt || 'Unknown XMLHttpRequest Error'));
|
|
113
|
+
}
|
|
110
114
|
}
|
|
111
115
|
evt.statusCode = 0;
|
|
112
116
|
return callback(evt, failureResponse);
|
package/src/request/index.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import {EventEmitter} from 'events';
|
|
6
6
|
|
|
7
7
|
import _request from './request';
|
|
8
|
+
import {intercept} from './utils';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* @param {Object} options
|
|
@@ -21,42 +22,9 @@ export default function request(options) {
|
|
|
21
22
|
options.download = new EventEmitter();
|
|
22
23
|
options.upload = new EventEmitter();
|
|
23
24
|
|
|
24
|
-
return intercept(options.interceptors, 'Request')
|
|
25
|
+
return intercept(options, options.interceptors, 'Request')
|
|
25
26
|
.then((...args) => _request(options, ...args))
|
|
26
|
-
.then((...args) =>
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @param {Array} interceptors
|
|
30
|
-
* @param {string} key
|
|
31
|
-
* @param {Object} res
|
|
32
|
-
* @private
|
|
33
|
-
* @returns {Promise}
|
|
34
|
-
*/
|
|
35
|
-
function intercept(interceptors, key, res) {
|
|
36
|
-
const successKey = `on${key}`;
|
|
37
|
-
const errorKey = `on${key}Error`;
|
|
38
|
-
|
|
39
|
-
return interceptors.reduce(
|
|
40
|
-
(promise, interceptor) =>
|
|
41
|
-
promise.then(
|
|
42
|
-
(result) => {
|
|
43
|
-
interceptor.logOptions(options);
|
|
44
|
-
if (interceptor[successKey]) {
|
|
45
|
-
return interceptor[successKey](options, result);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return Promise.resolve(result);
|
|
49
|
-
},
|
|
50
|
-
(reason) => {
|
|
51
|
-
interceptor.logOptions(options);
|
|
52
|
-
if (interceptor[errorKey]) {
|
|
53
|
-
return interceptor[errorKey](options, reason);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return Promise.reject(reason);
|
|
57
|
-
}
|
|
58
|
-
),
|
|
59
|
-
Promise.resolve(res)
|
|
27
|
+
.then((...args) =>
|
|
28
|
+
intercept(options, options.interceptors.slice().reverse(), 'Response', ...args)
|
|
60
29
|
);
|
|
61
|
-
}
|
|
62
30
|
}
|
|
@@ -52,7 +52,10 @@ export default function _request(options) {
|
|
|
52
52
|
const x = xhr(params, (error, response) => {
|
|
53
53
|
/* istanbul ignore next */
|
|
54
54
|
if (error) {
|
|
55
|
-
options.logger.warn(
|
|
55
|
+
options.logger.warn(
|
|
56
|
+
`XHR error for ${options.method || 'request'} to ${options.uri} :`,
|
|
57
|
+
error
|
|
58
|
+
);
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
/* istanbul ignore else */
|
|
@@ -142,7 +145,7 @@ export default function _request(options) {
|
|
|
142
145
|
|
|
143
146
|
const token = btoa(`${user}:${pass}`);
|
|
144
147
|
|
|
145
|
-
params.headers.
|
|
148
|
+
params.headers.Authorization = `Basic ${token}`;
|
|
146
149
|
}
|
|
147
150
|
}
|
|
148
151
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/* eslint-disable import/prefer-default-export */
|
|
2
|
+
import {EventEmitter} from 'events';
|
|
3
|
+
import Interceptor from '../lib/interceptor';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {Object} options
|
|
7
|
+
* @param {Array<Object>} interceptors
|
|
8
|
+
* @param {string} key
|
|
9
|
+
* @param {Object | undefined} res
|
|
10
|
+
* @private
|
|
11
|
+
* @returns {Promise}
|
|
12
|
+
*/
|
|
13
|
+
export function intercept(
|
|
14
|
+
options: object,
|
|
15
|
+
interceptors: Array<Interceptor>,
|
|
16
|
+
key: string,
|
|
17
|
+
res: object = undefined
|
|
18
|
+
): Promise<any> {
|
|
19
|
+
const successKey = `on${key}`;
|
|
20
|
+
const errorKey = `on${key}Error`;
|
|
21
|
+
|
|
22
|
+
return interceptors.reduce(
|
|
23
|
+
(promise, interceptor) =>
|
|
24
|
+
promise.then(
|
|
25
|
+
(result) => {
|
|
26
|
+
interceptor.logOptions(options);
|
|
27
|
+
if (interceptor[successKey]) {
|
|
28
|
+
return interceptor[successKey](options, result);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return Promise.resolve(result);
|
|
32
|
+
},
|
|
33
|
+
(reason) => {
|
|
34
|
+
interceptor.logOptions(options);
|
|
35
|
+
if (interceptor[errorKey]) {
|
|
36
|
+
return interceptor[errorKey](options, reason);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return Promise.reject(reason);
|
|
40
|
+
}
|
|
41
|
+
),
|
|
42
|
+
Promise.resolve(res)
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Prepare options for a fetch.
|
|
48
|
+
* @param {object} options
|
|
49
|
+
* @returns {Promise}
|
|
50
|
+
*/
|
|
51
|
+
export async function prepareFetchOptions(options: any): Promise<any> {
|
|
52
|
+
if (options.url) {
|
|
53
|
+
options.uri = options.url;
|
|
54
|
+
options.url = null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
options.headers = options.headers || {};
|
|
58
|
+
|
|
59
|
+
if (options.json) {
|
|
60
|
+
// don't override existing accept header declared by user
|
|
61
|
+
options.headers.accept = options.headers.accept || options.headers.Accept || 'application/json';
|
|
62
|
+
|
|
63
|
+
// don't override existing content-type header declared by user
|
|
64
|
+
if (options.method !== 'GET' && options.method !== 'HEAD') {
|
|
65
|
+
options.headers['content-type'] =
|
|
66
|
+
options.headers['content-type'] || options.headers['Content-Type'] || 'application/json';
|
|
67
|
+
options.body = JSON.stringify(options.json === true ? options.body : options.json);
|
|
68
|
+
}
|
|
69
|
+
} else if (options.json !== undefined) {
|
|
70
|
+
Reflect.deleteProperty(options, 'json');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
options.download = new EventEmitter();
|
|
74
|
+
options.upload = new EventEmitter();
|
|
75
|
+
options.keepalive = true;
|
|
76
|
+
|
|
77
|
+
return intercept(options, options.interceptors, 'Request').then(() => options);
|
|
78
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import {assert} from '@webex/test-helper-chai';
|
|
2
|
+
import sinon from 'sinon';
|
|
3
|
+
|
|
4
|
+
import * as utils from '@webex/http-core/src/request/utils';
|
|
5
|
+
import WebexTrackingIdInterceptor from '@webex/webex-core/src/interceptors/webex-tracking-id';
|
|
6
|
+
import UserAgentInterceptor from '@webex/webex-core/src/interceptors/webex-user-agent';
|
|
7
|
+
import {protoprepareFetchOptions, setTimingsAndFetch} from '@webex/http-core/src/index';
|
|
8
|
+
|
|
9
|
+
describe('http-core index tests', () => {
|
|
10
|
+
describe('#protoprepareFetchOptions()', () => {
|
|
11
|
+
it('uses default options and adds expected options', async () => {
|
|
12
|
+
const defaultOptions = {
|
|
13
|
+
interceptors: [WebexTrackingIdInterceptor.create(), UserAgentInterceptor.create()],
|
|
14
|
+
};
|
|
15
|
+
const options = {};
|
|
16
|
+
|
|
17
|
+
const prepareFetchOptions = protoprepareFetchOptions(defaultOptions);
|
|
18
|
+
|
|
19
|
+
await prepareFetchOptions(options);
|
|
20
|
+
|
|
21
|
+
assert.deepEqual(options, {
|
|
22
|
+
headers: {
|
|
23
|
+
trackingid: 'undefined_1',
|
|
24
|
+
'spark-user-agent': 'webex-js-sdk/development (node)',
|
|
25
|
+
},
|
|
26
|
+
keepalive: true,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
assert.equal(typeof options.logger, 'object');
|
|
30
|
+
assert.equal(typeof options.upload, 'object');
|
|
31
|
+
assert.equal(typeof options.download, 'object');
|
|
32
|
+
assert.isArray(options.interceptors);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe('#setTimingsAndFetch()', () => {
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
let stubbedFetch;
|
|
39
|
+
|
|
40
|
+
beforeEach(() => {
|
|
41
|
+
global.fetch = sinon.stub();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('calls fetch with expected options', async () => {
|
|
45
|
+
sinon.useFakeTimers(now);
|
|
46
|
+
const options = {uri: 'foo'};
|
|
47
|
+
|
|
48
|
+
const newOptions = setTimingsAndFetch(options);
|
|
49
|
+
|
|
50
|
+
sinon.assert.calledOnce(global.fetch);
|
|
51
|
+
sinon.assert.calledWith(global.fetch, 'foo', {
|
|
52
|
+
uri: 'foo',
|
|
53
|
+
$timings: {requestStart: now, networkStart: now},
|
|
54
|
+
});
|
|
55
|
+
sinon.restore();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {assert} from '@webex/test-helper-chai';
|
|
2
|
+
import window from 'global/window';
|
|
3
|
+
import request from '@webex/http-core/src/request/request.shim';
|
|
4
|
+
import {EventEmitter} from 'events';
|
|
5
|
+
|
|
6
|
+
describe('Request shim', () => {
|
|
7
|
+
describe('#setAuth()', () => {
|
|
8
|
+
it('sets auth header', () => {
|
|
9
|
+
|
|
10
|
+
class DummyXMLHttpRequest {
|
|
11
|
+
upload = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
window.XMLHttpRequest = DummyXMLHttpRequest;
|
|
15
|
+
|
|
16
|
+
const options = {upload: new EventEmitter(), headers: [], method: 'post', ...options, auth: {user: 'test', pass: 'pw'}};
|
|
17
|
+
|
|
18
|
+
request(options);
|
|
19
|
+
|
|
20
|
+
assert.equal(options.headers.Authorization, 'Basic dGVzdDpwdw==');
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {assert} from '@webex/test-helper-chai';
|
|
2
|
+
import sinon from 'sinon';
|
|
3
|
+
|
|
4
|
+
import * as utils from '@webex/http-core/src/request/utils';
|
|
5
|
+
import WebexTrackingIdInterceptor from '@webex/webex-core/src/interceptors/webex-tracking-id';
|
|
6
|
+
import UserAgentInterceptor from '@webex/webex-core/src/interceptors/webex-user-agent';
|
|
7
|
+
|
|
8
|
+
describe('Request utils', () => {
|
|
9
|
+
describe('#intercept()', () => {
|
|
10
|
+
it('updates options from interceptors', async () => {
|
|
11
|
+
const options = {};
|
|
12
|
+
const interceptors = [WebexTrackingIdInterceptor.create(), UserAgentInterceptor.create()];
|
|
13
|
+
|
|
14
|
+
return utils.intercept(options, interceptors, 'Request').then(() => {
|
|
15
|
+
assert.equal(Object.keys(options.headers).length, 2);
|
|
16
|
+
assert.equal(options.headers.trackingid, 'undefined_1');
|
|
17
|
+
assert.equal(options.headers['spark-user-agent'], 'webex-js-sdk/development (node)');
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
describe('#prepareFetchOptions()', () => {
|
|
23
|
+
it('updates options as expected', async () => {
|
|
24
|
+
const options = {
|
|
25
|
+
json: true,
|
|
26
|
+
body: {foo: 'bar'},
|
|
27
|
+
headers: {},
|
|
28
|
+
interceptors: [WebexTrackingIdInterceptor.create(), UserAgentInterceptor.create()],
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return utils.prepareFetchOptions(options).then(() => {
|
|
32
|
+
assert.deepEqual(options.headers, {
|
|
33
|
+
accept: 'application/json',
|
|
34
|
+
'content-type': 'application/json',
|
|
35
|
+
trackingid: 'undefined_1',
|
|
36
|
+
'spark-user-agent': 'webex-js-sdk/development (node)',
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
assert.equal(options.body, '{"foo":"bar"}');
|
|
40
|
+
|
|
41
|
+
assert.equal(options.download != undefined, true);
|
|
42
|
+
assert.equal(options.upload != undefined, true);
|
|
43
|
+
assert.equal(options.keepalive, true);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('updates options as expected when accept and content-type exist', async () => {
|
|
48
|
+
const options = {
|
|
49
|
+
json: true,
|
|
50
|
+
body: {foo: 'bar'},
|
|
51
|
+
headers: {accept: 'foo', 'content-type': 'bar'},
|
|
52
|
+
interceptors: [WebexTrackingIdInterceptor.create(), UserAgentInterceptor.create()],
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
return utils.prepareFetchOptions(options).then(() => {
|
|
56
|
+
assert.deepEqual(options.headers, {
|
|
57
|
+
accept: 'foo',
|
|
58
|
+
'content-type': 'bar',
|
|
59
|
+
trackingid: 'undefined_1',
|
|
60
|
+
'spark-user-agent': 'webex-js-sdk/development (node)',
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('updates body as expected when json = some object', async () => {
|
|
66
|
+
const options = {
|
|
67
|
+
json: {bar: 'baz'},
|
|
68
|
+
headers: {accept: 'foo', 'content-type': 'bar'},
|
|
69
|
+
interceptors: [WebexTrackingIdInterceptor.create(), UserAgentInterceptor.create()],
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
return utils.prepareFetchOptions(options).then(() => {
|
|
73
|
+
assert.equal(options.body, '{"bar":"baz"}');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|