@webex/webex-core 3.0.0-beta.2 → 3.0.0-beta.21
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/config.js +1 -11
- package/dist/config.js.map +1 -1
- package/dist/credentials-config.js +44 -64
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js +0 -76
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js +22 -55
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js +0 -20
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js +0 -21
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/network-timing.js +2 -21
- package/dist/interceptors/network-timing.js.map +1 -1
- package/dist/interceptors/payload-transformer.js +2 -22
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js +25 -57
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js +4 -33
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js +3 -30
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js +1 -30
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/request-timing.js +3 -22
- package/dist/interceptors/request-timing.js.map +1 -1
- package/dist/interceptors/response-logger.js +2 -31
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js +2 -29
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-tracking-id.js +5 -28
- package/dist/interceptors/webex-tracking-id.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js +5 -38
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +3 -51
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +39 -119
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js +0 -49
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js +1 -13
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js +1 -7
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js +1 -7
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +39 -118
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +13 -26
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js +0 -2
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js +1 -28
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js +2 -23
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +12 -34
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js +0 -2
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js +10 -90
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js +0 -2
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js +47 -62
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js +78 -90
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js +3 -15
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js +4 -25
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +122 -238
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js +5 -28
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js +19 -62
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/errors.js +0 -23
- package/dist/lib/storage/errors.js.map +1 -1
- package/dist/lib/storage/index.js +2 -16
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js +11 -41
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js +8 -30
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js +1 -19
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js +1 -31
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js +6 -40
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +3 -17
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +79 -203
- package/dist/webex-core.js.map +1 -1
- package/dist/webex-internal-core.js +0 -10
- package/dist/webex-internal-core.js.map +1 -1
- package/package.json +14 -14
- package/src/config.js +9 -11
- package/src/credentials-config.js +110 -72
- package/src/index.js +4 -14
- package/src/interceptors/auth.js +36 -37
- package/src/interceptors/default-options.js +0 -1
- package/src/interceptors/embargo.js +1 -1
- package/src/interceptors/payload-transformer.js +1 -2
- package/src/interceptors/rate-limit.js +8 -5
- package/src/interceptors/redirect.js +14 -8
- package/src/interceptors/request-event.js +4 -8
- package/src/interceptors/request-logger.js +8 -5
- package/src/interceptors/response-logger.js +11 -8
- package/src/interceptors/user-agent.js +1 -2
- package/src/interceptors/webex-user-agent.js +3 -9
- package/src/lib/batcher.js +70 -69
- package/src/lib/credentials/credentials.js +112 -122
- package/src/lib/credentials/grant-errors.js +6 -7
- package/src/lib/credentials/index.js +1 -4
- package/src/lib/credentials/scope.js +1 -4
- package/src/lib/credentials/token-collection.js +1 -1
- package/src/lib/credentials/token.js +86 -80
- package/src/lib/page.js +10 -11
- package/src/lib/services/constants.js +3 -13
- package/src/lib/services/index.js +2 -2
- package/src/lib/services/interceptors/server-error.js +12 -7
- package/src/lib/services/interceptors/service.js +6 -5
- package/src/lib/services/metrics.js +1 -1
- package/src/lib/services/service-catalog.js +110 -100
- package/src/lib/services/service-fed-ramp.js +1 -2
- package/src/lib/services/service-host.js +10 -17
- package/src/lib/services/service-registry.js +69 -96
- package/src/lib/services/service-state.js +4 -6
- package/src/lib/services/service-url.js +24 -23
- package/src/lib/services/services.js +260 -251
- package/src/lib/stateless-webex-plugin.js +4 -2
- package/src/lib/storage/decorators.js +68 -66
- package/src/lib/storage/index.js +4 -6
- package/src/lib/storage/make-webex-plugin-store.js +34 -21
- package/src/lib/storage/make-webex-store.js +6 -7
- package/src/lib/storage/memory-store-adapter.js +3 -3
- package/src/lib/webex-core-plugin-mixin.js +10 -7
- package/src/lib/webex-http-error.js +7 -8
- package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
- package/src/lib/webex-plugin.js +41 -34
- package/src/plugins/logger.js +8 -3
- package/src/webex-core.js +185 -116
- package/src/webex-internal-core.js +15 -9
- package/test/integration/spec/credentials/credentials.js +26 -30
- package/test/integration/spec/credentials/token.js +36 -33
- package/test/integration/spec/services/service-catalog.js +177 -156
- package/test/integration/spec/services/services.js +313 -304
- package/test/integration/spec/webex-core.js +98 -86
- package/test/unit/spec/_setup.js +26 -18
- package/test/unit/spec/credentials/credentials.js +189 -154
- package/test/unit/spec/credentials/token.js +94 -76
- package/test/unit/spec/interceptors/auth.js +291 -243
- package/test/unit/spec/interceptors/default-options.js +36 -24
- package/test/unit/spec/interceptors/embargo.js +32 -27
- package/test/unit/spec/interceptors/network-timing.js +2 -2
- package/test/unit/spec/interceptors/payload-transformer.js +61 -52
- package/test/unit/spec/interceptors/rate-limit.js +104 -75
- package/test/unit/spec/interceptors/redirect.js +22 -20
- package/test/unit/spec/interceptors/request-timing.js +18 -22
- package/test/unit/spec/interceptors/user-agent.js +28 -16
- package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
- package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
- package/test/unit/spec/lib/batcher.js +36 -32
- package/test/unit/spec/lib/page.js +36 -32
- package/test/unit/spec/lib/webex-plugin.js +1 -1
- package/test/unit/spec/services/interceptors/server-error.js +67 -90
- package/test/unit/spec/services/interceptors/service.js +17 -28
- package/test/unit/spec/services/service-catalog.js +19 -27
- package/test/unit/spec/services/service-host.js +29 -26
- package/test/unit/spec/services/service-registry.js +128 -170
- package/test/unit/spec/services/service-state.js +13 -22
- package/test/unit/spec/services/service-url.js +24 -43
- package/test/unit/spec/services/services.js +85 -41
- package/test/unit/spec/storage/persist.js +6 -9
- package/test/unit/spec/storage/wait-for-value.js +22 -21
- package/test/unit/spec/webex-core.js +78 -57
- package/test/unit/spec/webex-internal-core.js +56 -31
|
@@ -1,96 +1,73 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
7
|
value: true
|
|
11
8
|
});
|
|
12
|
-
|
|
13
9
|
exports.default = void 0;
|
|
14
|
-
|
|
15
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
16
|
-
|
|
17
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
18
|
-
|
|
19
12
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
20
|
-
|
|
21
13
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
22
|
-
|
|
23
14
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
24
|
-
|
|
25
15
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
26
|
-
|
|
27
16
|
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
|
|
28
|
-
|
|
29
17
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
30
|
-
|
|
31
18
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
32
|
-
|
|
33
19
|
var _httpCore = require("@webex/http-core");
|
|
34
|
-
|
|
35
20
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
36
|
-
|
|
37
21
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
38
|
-
|
|
39
22
|
// contains the system time in milliseconds at which the retry after associated with a 429 expires
|
|
40
23
|
// mapped by the API name, e.g.: idbroker.webex.com/doStuff would be mapped as 'doStuff'
|
|
41
|
-
var rateLimitExpiryTime = new _weakMap.default();
|
|
24
|
+
var rateLimitExpiryTime = new _weakMap.default();
|
|
42
25
|
|
|
26
|
+
// extracts the common identity API being called
|
|
43
27
|
var idBrokerRegex = /.*(idbroker|identity)(bts)?.ciscospark.com\/([^/]+)/;
|
|
28
|
+
|
|
44
29
|
/**
|
|
45
30
|
* @class
|
|
46
31
|
*/
|
|
47
|
-
|
|
48
32
|
var RateLimitInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
49
33
|
(0, _inherits2.default)(RateLimitInterceptor, _Interceptor);
|
|
50
|
-
|
|
51
34
|
var _super = _createSuper(RateLimitInterceptor);
|
|
52
|
-
|
|
53
35
|
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
36
|
+
* constructor
|
|
37
|
+
* @param {mixed} args
|
|
38
|
+
* @returns {Exception}
|
|
39
|
+
*/
|
|
58
40
|
function RateLimitInterceptor() {
|
|
59
41
|
var _this;
|
|
60
|
-
|
|
61
42
|
(0, _classCallCheck2.default)(this, RateLimitInterceptor);
|
|
62
|
-
|
|
63
43
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
64
44
|
args[_key] = arguments[_key];
|
|
65
45
|
}
|
|
66
|
-
|
|
67
46
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
68
47
|
rateLimitExpiryTime.set((0, _assertThisInitialized2.default)(_this), new _map.default());
|
|
69
48
|
return _this;
|
|
70
49
|
}
|
|
50
|
+
|
|
71
51
|
/**
|
|
72
52
|
* @see {@link Interceptor#onRequest}
|
|
73
53
|
* @param {Object} options
|
|
74
54
|
* @returns {Object}
|
|
75
55
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
78
56
|
(0, _createClass2.default)(RateLimitInterceptor, [{
|
|
79
57
|
key: "onRequest",
|
|
80
58
|
value: function onRequest(options) {
|
|
81
59
|
if (this.isRateLimited(options.uri)) {
|
|
82
60
|
return _promise.default.reject(new Error("API rate limited ".concat(options.uri)));
|
|
83
61
|
}
|
|
84
|
-
|
|
85
62
|
return _promise.default.resolve(options);
|
|
86
63
|
}
|
|
64
|
+
|
|
87
65
|
/**
|
|
88
66
|
* @see {@link Interceptor#onResponseError}
|
|
89
67
|
* @param {Object} options
|
|
90
68
|
* @param {Error} reason
|
|
91
69
|
* @returns {Object}
|
|
92
70
|
*/
|
|
93
|
-
|
|
94
71
|
}, {
|
|
95
72
|
key: "onResponseError",
|
|
96
73
|
value: function onResponseError(options, reason) {
|
|
@@ -98,32 +75,31 @@ var RateLimitInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
98
75
|
// set the retry after in the map, setting to milliseconds
|
|
99
76
|
this.setRateLimitExpiry(options.uri, this.extractRetryAfterTime(options));
|
|
100
77
|
}
|
|
101
|
-
|
|
102
78
|
return _promise.default.reject(reason);
|
|
103
79
|
}
|
|
80
|
+
|
|
104
81
|
/**
|
|
105
82
|
* @param {object} options associated with the request
|
|
106
83
|
* @returns {number} retry after time in milliseconds
|
|
107
84
|
*/
|
|
108
|
-
|
|
109
85
|
}, {
|
|
110
86
|
key: "extractRetryAfterTime",
|
|
111
87
|
value: function extractRetryAfterTime(options) {
|
|
112
88
|
// 1S * 1K === 1MS
|
|
113
89
|
var milliMultiplier = 1000;
|
|
114
|
-
var retryAfter = options.headers['retry-after'] || null;
|
|
90
|
+
var retryAfter = options.headers['retry-after'] || null;
|
|
115
91
|
|
|
92
|
+
// set 60 retry if no usable time defined
|
|
116
93
|
if (retryAfter === null || retryAfter <= 0) {
|
|
117
94
|
return 60 * milliMultiplier;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
95
|
+
}
|
|
96
|
+
// set max to 3600 S (1 hour) if greater than 1 hour
|
|
121
97
|
if (retryAfter > 3600) {
|
|
122
98
|
return 3600 * milliMultiplier;
|
|
123
99
|
}
|
|
124
|
-
|
|
125
100
|
return retryAfter * milliMultiplier;
|
|
126
101
|
}
|
|
102
|
+
|
|
127
103
|
/**
|
|
128
104
|
* Set the system time at which the rate limiting
|
|
129
105
|
* will expire in the rateLimitExpiryTime map.
|
|
@@ -132,77 +108,71 @@ var RateLimitInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
132
108
|
* @param {number} retryAfter milliseconds until rate limiting expires
|
|
133
109
|
* @returns {bool} true is value was successfully set
|
|
134
110
|
*/
|
|
135
|
-
|
|
136
111
|
}, {
|
|
137
112
|
key: "setRateLimitExpiry",
|
|
138
113
|
value: function setRateLimitExpiry(uri, retryAfter) {
|
|
139
114
|
var apiName = this.getApiName(uri);
|
|
140
|
-
|
|
141
115
|
if (!apiName) {
|
|
142
116
|
return false;
|
|
143
117
|
}
|
|
144
|
-
|
|
145
118
|
var currTimeMilli = new Date().getTime();
|
|
146
119
|
var expiry = currTimeMilli + retryAfter;
|
|
147
120
|
var dict = rateLimitExpiryTime.get(this);
|
|
148
121
|
return dict.set(apiName, expiry);
|
|
149
122
|
}
|
|
123
|
+
|
|
150
124
|
/**
|
|
151
125
|
* returns true if the API is currently rate limited
|
|
152
126
|
* @param {string} uri
|
|
153
127
|
* @returns {Boolean} indicates whether or not the API is rate currently rate limited
|
|
154
128
|
*/
|
|
155
|
-
|
|
156
129
|
}, {
|
|
157
130
|
key: "getRateLimitStatus",
|
|
158
131
|
value: function getRateLimitStatus(uri) {
|
|
159
132
|
var apiName = this.getApiName(uri);
|
|
160
|
-
|
|
161
133
|
if (!apiName) {
|
|
162
134
|
return false;
|
|
163
135
|
}
|
|
164
|
-
|
|
165
136
|
var currTimeMilli = new Date().getTime();
|
|
166
137
|
var dict = rateLimitExpiryTime.get(this);
|
|
167
|
-
var expiryTime = dict.get(apiName);
|
|
138
|
+
var expiryTime = dict.get(apiName);
|
|
168
139
|
|
|
140
|
+
// if no rate limit expiry has been registered in the map, return false.
|
|
169
141
|
if (expiryTime === undefined) {
|
|
170
142
|
return false;
|
|
171
|
-
}
|
|
172
|
-
|
|
143
|
+
}
|
|
173
144
|
|
|
145
|
+
// return true, indicating rate limiting, if the system time is less than the expiry time
|
|
174
146
|
return currTimeMilli < dict.get(apiName);
|
|
175
147
|
}
|
|
148
|
+
|
|
176
149
|
/**
|
|
177
150
|
* split the URI and returns the API name of idBroker
|
|
178
151
|
* @param {string} uri
|
|
179
152
|
* @returns {string}
|
|
180
153
|
*/
|
|
181
|
-
|
|
182
154
|
}, {
|
|
183
155
|
key: "getApiName",
|
|
184
156
|
value: function getApiName(uri) {
|
|
185
157
|
if (!uri) {
|
|
186
158
|
return null;
|
|
187
159
|
}
|
|
188
|
-
|
|
189
160
|
var results = uri.match(idBrokerRegex);
|
|
190
|
-
|
|
191
161
|
if (!results) {
|
|
192
162
|
return null;
|
|
193
|
-
}
|
|
194
|
-
// group 2 = api name
|
|
195
|
-
|
|
163
|
+
}
|
|
196
164
|
|
|
165
|
+
// group 0 = full match of URL, group 1 = identity or idbroker base
|
|
166
|
+
// group 2 = api name
|
|
197
167
|
return results[2];
|
|
198
168
|
}
|
|
169
|
+
|
|
199
170
|
/**
|
|
200
171
|
* check URI against list of currently rate limited
|
|
201
172
|
* URIs, and determines if retry-after
|
|
202
173
|
* @param {String} uri pattern to check
|
|
203
174
|
* @returns {bool}
|
|
204
175
|
*/
|
|
205
|
-
|
|
206
176
|
}, {
|
|
207
177
|
key: "isRateLimited",
|
|
208
178
|
value: function isRateLimited(uri) {
|
|
@@ -210,7 +180,6 @@ var RateLimitInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
210
180
|
if (uri && (uri.includes('idbroker') || uri.includes('identity'))) {
|
|
211
181
|
return this.getRateLimitStatus(uri);
|
|
212
182
|
}
|
|
213
|
-
|
|
214
183
|
return false;
|
|
215
184
|
}
|
|
216
185
|
}], [{
|
|
@@ -227,6 +196,5 @@ var RateLimitInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
227
196
|
}]);
|
|
228
197
|
return RateLimitInterceptor;
|
|
229
198
|
}(_httpCore.Interceptor);
|
|
230
|
-
|
|
231
199
|
exports.default = RateLimitInterceptor;
|
|
232
200
|
//# sourceMappingURL=rate-limit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["rateLimitExpiryTime","idBrokerRegex","RateLimitInterceptor","args","set","options","isRateLimited","uri","reject","Error","resolve","reason","statusCode","includes","setRateLimitExpiry","extractRetryAfterTime","milliMultiplier","retryAfter","headers","apiName","getApiName","currTimeMilli","Date","getTime","expiry","dict","get","expiryTime","undefined","results","match","getRateLimitStatus","webex","Interceptor"],"sources":["rate-limit.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n// contains the system time in milliseconds at which the retry after associated with a 429 expires\n// mapped by the API name, e.g.: idbroker.webex.com/doStuff would be mapped as 'doStuff'\nconst rateLimitExpiryTime = new WeakMap();\n\n// extracts the common identity API being called\nconst idBrokerRegex = /.*(idbroker|identity)(bts)?.ciscospark.com\\/([^/]+)/;\n\n/**\n * @class\n */\nexport default class RateLimitInterceptor extends Interceptor {\n /**\n * @returns {RateLimitInterceptor}\n */\n static create() {\n return new RateLimitInterceptor({webex: this});\n }\n\n /**\n
|
|
1
|
+
{"version":3,"names":["rateLimitExpiryTime","idBrokerRegex","RateLimitInterceptor","args","set","options","isRateLimited","uri","reject","Error","resolve","reason","statusCode","includes","setRateLimitExpiry","extractRetryAfterTime","milliMultiplier","retryAfter","headers","apiName","getApiName","currTimeMilli","Date","getTime","expiry","dict","get","expiryTime","undefined","results","match","getRateLimitStatus","webex","Interceptor"],"sources":["rate-limit.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n// contains the system time in milliseconds at which the retry after associated with a 429 expires\n// mapped by the API name, e.g.: idbroker.webex.com/doStuff would be mapped as 'doStuff'\nconst rateLimitExpiryTime = new WeakMap();\n\n// extracts the common identity API being called\nconst idBrokerRegex = /.*(idbroker|identity)(bts)?.ciscospark.com\\/([^/]+)/;\n\n/**\n * @class\n */\nexport default class RateLimitInterceptor extends Interceptor {\n /**\n * @returns {RateLimitInterceptor}\n */\n static create() {\n return new RateLimitInterceptor({webex: this});\n }\n\n /**\n * constructor\n * @param {mixed} args\n * @returns {Exception}\n */\n constructor(...args) {\n super(...args);\n rateLimitExpiryTime.set(this, new Map());\n }\n\n /**\n * @see {@link Interceptor#onRequest}\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (this.isRateLimited(options.uri)) {\n return Promise.reject(new Error(`API rate limited ${options.uri}`));\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see {@link Interceptor#onResponseError}\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n if (\n reason.statusCode === 429 &&\n (options.uri.includes('idbroker') || options.uri.includes('identity'))\n ) {\n // set the retry after in the map, setting to milliseconds\n this.setRateLimitExpiry(options.uri, this.extractRetryAfterTime(options));\n }\n\n return Promise.reject(reason);\n }\n\n /**\n * @param {object} options associated with the request\n * @returns {number} retry after time in milliseconds\n */\n extractRetryAfterTime(options) {\n // 1S * 1K === 1MS\n const milliMultiplier = 1000;\n const retryAfter = options.headers['retry-after'] || null;\n\n // set 60 retry if no usable time defined\n if (retryAfter === null || retryAfter <= 0) {\n return 60 * milliMultiplier;\n }\n // set max to 3600 S (1 hour) if greater than 1 hour\n if (retryAfter > 3600) {\n return 3600 * milliMultiplier;\n }\n\n return retryAfter * milliMultiplier;\n }\n\n /**\n * Set the system time at which the rate limiting\n * will expire in the rateLimitExpiryTime map.\n * Assumes retryAfter is in milliseconds\n * @param {string} uri API issuing the rate limiting\n * @param {number} retryAfter milliseconds until rate limiting expires\n * @returns {bool} true is value was successfully set\n */\n setRateLimitExpiry(uri, retryAfter) {\n const apiName = this.getApiName(uri);\n\n if (!apiName) {\n return false;\n }\n\n const currTimeMilli = new Date().getTime();\n const expiry = currTimeMilli + retryAfter;\n const dict = rateLimitExpiryTime.get(this);\n\n return dict.set(apiName, expiry);\n }\n\n /**\n * returns true if the API is currently rate limited\n * @param {string} uri\n * @returns {Boolean} indicates whether or not the API is rate currently rate limited\n */\n getRateLimitStatus(uri) {\n const apiName = this.getApiName(uri);\n\n if (!apiName) {\n return false;\n }\n\n const currTimeMilli = new Date().getTime();\n const dict = rateLimitExpiryTime.get(this);\n const expiryTime = dict.get(apiName);\n\n // if no rate limit expiry has been registered in the map, return false.\n if (expiryTime === undefined) {\n return false;\n }\n\n // return true, indicating rate limiting, if the system time is less than the expiry time\n return currTimeMilli < dict.get(apiName);\n }\n\n /**\n * split the URI and returns the API name of idBroker\n * @param {string} uri\n * @returns {string}\n */\n getApiName(uri) {\n if (!uri) {\n return null;\n }\n\n const results = uri.match(idBrokerRegex);\n\n if (!results) {\n return null;\n }\n\n // group 0 = full match of URL, group 1 = identity or idbroker base\n // group 2 = api name\n return results[2];\n }\n\n /**\n * check URI against list of currently rate limited\n * URIs, and determines if retry-after\n * @param {String} uri pattern to check\n * @returns {bool}\n */\n isRateLimited(uri) {\n // determine if the URI is associated with a common identity API\n if (uri && (uri.includes('idbroker') || uri.includes('identity'))) {\n return this.getRateLimitStatus(uri);\n }\n\n return false;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,56 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
7
|
value: true
|
|
11
8
|
});
|
|
12
|
-
|
|
13
9
|
exports.default = void 0;
|
|
14
|
-
|
|
15
10
|
var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
|
|
16
|
-
|
|
17
11
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
18
|
-
|
|
19
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
20
|
-
|
|
21
13
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
22
|
-
|
|
23
14
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
24
|
-
|
|
25
15
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
26
|
-
|
|
27
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
28
|
-
|
|
29
17
|
var _clone2 = _interopRequireDefault(require("lodash/clone"));
|
|
30
|
-
|
|
31
18
|
var _httpCore = require("@webex/http-core");
|
|
32
|
-
|
|
33
19
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
34
|
-
|
|
35
20
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
36
|
-
|
|
37
21
|
var requestHeaderName = 'cisco-no-http-redirect';
|
|
38
22
|
var responseHeaderName = 'cisco-location';
|
|
39
23
|
var LOCUS_REDIRECT_ERROR = 2000002;
|
|
24
|
+
|
|
40
25
|
/**
|
|
41
26
|
* @class
|
|
42
27
|
*/
|
|
43
|
-
|
|
44
28
|
var RedirectInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
45
29
|
(0, _inherits2.default)(RedirectInterceptor, _Interceptor);
|
|
46
|
-
|
|
47
30
|
var _super = _createSuper(RedirectInterceptor);
|
|
48
|
-
|
|
49
31
|
function RedirectInterceptor() {
|
|
50
32
|
(0, _classCallCheck2.default)(this, RedirectInterceptor);
|
|
51
33
|
return _super.apply(this, arguments);
|
|
52
34
|
}
|
|
53
|
-
|
|
54
35
|
(0, _createClass2.default)(RedirectInterceptor, [{
|
|
55
36
|
key: "onRequest",
|
|
56
37
|
value:
|
|
@@ -64,30 +45,28 @@ var RedirectInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
64
45
|
if (options.uri.includes('https://idbroker') || options.uri.includes(this.webex.config.credentials.samlUrl) || options.uri.includes(this.webex.config.credentials.tokenUrl) || options.uri.includes(this.webex.config.credentials.authorizeUrl)) {
|
|
65
46
|
return options;
|
|
66
47
|
}
|
|
67
|
-
}
|
|
68
|
-
|
|
48
|
+
}
|
|
69
49
|
|
|
50
|
+
// If cisco-no-http-redirect is already set, don't overwrite it
|
|
70
51
|
if (requestHeaderName in options.headers) {
|
|
71
52
|
// If cisco-no-http-redirect is set to null, false, or undefined, delete
|
|
72
53
|
// it to prevent a CORS preflight.
|
|
73
54
|
if (!options.headers[requestHeaderName]) {
|
|
74
55
|
(0, _deleteProperty.default)(options.headers, requestHeaderName);
|
|
75
56
|
}
|
|
76
|
-
|
|
77
57
|
return options;
|
|
78
58
|
}
|
|
79
|
-
|
|
80
59
|
options.headers[requestHeaderName] = true;
|
|
81
60
|
options.$redirectCount = options.$redirectCount || 0;
|
|
82
61
|
return options;
|
|
83
62
|
}
|
|
63
|
+
|
|
84
64
|
/**
|
|
85
65
|
* @see Interceptor#onResponse
|
|
86
66
|
* @param {Object} options
|
|
87
67
|
* @param {HttpResponse} response
|
|
88
68
|
* @returns {Object}
|
|
89
69
|
*/
|
|
90
|
-
|
|
91
70
|
}, {
|
|
92
71
|
key: "onResponse",
|
|
93
72
|
value: function onResponse(options, response) {
|
|
@@ -96,16 +75,13 @@ var RedirectInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
96
75
|
options = (0, _clone2.default)(options);
|
|
97
76
|
options.uri = response.headers[responseHeaderName];
|
|
98
77
|
options.$redirectCount += 1;
|
|
99
|
-
|
|
100
78
|
if (options.$redirectCount > this.webex.config.maxAppLevelRedirects) {
|
|
101
79
|
return _promise.default.reject(new Error('Maximum redirects exceeded'));
|
|
102
80
|
}
|
|
103
|
-
|
|
104
81
|
return this.webex.request(options);
|
|
105
82
|
} else if (response.headers && response.body && response.body.errorCode === LOCUS_REDIRECT_ERROR && response.body.location) {
|
|
106
83
|
options = (0, _clone2.default)(options);
|
|
107
84
|
this.webex.logger.warn('redirect: url redirects needed from', options.uri);
|
|
108
|
-
|
|
109
85
|
if (response.options && response.options.qs) {
|
|
110
86
|
// for POST requests
|
|
111
87
|
var newUrl = response.body.location.split('?');
|
|
@@ -114,19 +90,15 @@ var RedirectInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
114
90
|
// for GET requests
|
|
115
91
|
options.uri = response.body.location;
|
|
116
92
|
}
|
|
117
|
-
|
|
118
93
|
this.webex.logger.warn('redirect: url redirects needed to', options.uri);
|
|
119
94
|
options.$redirectCount += 1;
|
|
120
|
-
|
|
121
95
|
if (options.$redirectCount > this.webex.config.maxLocusRedirects) {
|
|
122
96
|
return _promise.default.reject(new Error('Maximum redirects exceeded'));
|
|
123
97
|
}
|
|
124
|
-
|
|
125
98
|
return this.webex.request(options);
|
|
126
99
|
}
|
|
127
100
|
/* eslint-enable no-else-return */
|
|
128
101
|
|
|
129
|
-
|
|
130
102
|
return response;
|
|
131
103
|
}
|
|
132
104
|
}], [{
|
|
@@ -143,6 +115,5 @@ var RedirectInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
143
115
|
}]);
|
|
144
116
|
return RedirectInterceptor;
|
|
145
117
|
}(_httpCore.Interceptor);
|
|
146
|
-
|
|
147
118
|
exports.default = RedirectInterceptor;
|
|
148
119
|
//# sourceMappingURL=redirect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["requestHeaderName","responseHeaderName","LOCUS_REDIRECT_ERROR","RedirectInterceptor","options","uri","includes","webex","config","credentials","samlUrl","tokenUrl","authorizeUrl","headers","$redirectCount","response","maxAppLevelRedirects","reject","Error","request","body","errorCode","location","logger","warn","qs","newUrl","split","maxLocusRedirects","Interceptor"],"sources":["redirect.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {clone} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\nconst requestHeaderName = 'cisco-no-http-redirect';\nconst responseHeaderName = 'cisco-location';\nconst LOCUS_REDIRECT_ERROR = 2000002;\n\n/**\n * @class\n */\nexport default class RedirectInterceptor extends Interceptor {\n /**\n * @returns {RedirectInterceptor}\n */\n static create() {\n return new RedirectInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options && options.uri && typeof options.uri === 'string') {\n if (options.uri.includes('https://idbroker') ||\n options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl)) {\n return options;\n }\n }\n\n // If cisco-no-http-redirect is already set, don't overwrite it\n if (requestHeaderName in options.headers) {\n // If cisco-no-http-redirect is set to null, false, or undefined, delete\n // it to prevent a CORS preflight.\n if (!options.headers[requestHeaderName]) {\n Reflect.deleteProperty(options.headers, requestHeaderName);\n }\n\n return options;\n }\n options.headers[requestHeaderName] = true;\n options.$redirectCount = options.$redirectCount || 0;\n\n return options;\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n /* eslint-disable no-else-return */\n if (response.headers && response.headers[responseHeaderName]) {\n options = clone(options);\n options.uri = response.headers[responseHeaderName];\n options.$redirectCount += 1;\n if (options.$redirectCount > this.webex.config.maxAppLevelRedirects) {\n return Promise.reject(new Error('Maximum redirects exceeded'));\n }\n\n return this.webex.request(options);\n }
|
|
1
|
+
{"version":3,"names":["requestHeaderName","responseHeaderName","LOCUS_REDIRECT_ERROR","RedirectInterceptor","options","uri","includes","webex","config","credentials","samlUrl","tokenUrl","authorizeUrl","headers","$redirectCount","response","maxAppLevelRedirects","reject","Error","request","body","errorCode","location","logger","warn","qs","newUrl","split","maxLocusRedirects","Interceptor"],"sources":["redirect.js"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {clone} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\nconst requestHeaderName = 'cisco-no-http-redirect';\nconst responseHeaderName = 'cisco-location';\nconst LOCUS_REDIRECT_ERROR = 2000002;\n\n/**\n * @class\n */\nexport default class RedirectInterceptor extends Interceptor {\n /**\n * @returns {RedirectInterceptor}\n */\n static create() {\n return new RedirectInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options && options.uri && typeof options.uri === 'string') {\n if (\n options.uri.includes('https://idbroker') ||\n options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl)\n ) {\n return options;\n }\n }\n\n // If cisco-no-http-redirect is already set, don't overwrite it\n if (requestHeaderName in options.headers) {\n // If cisco-no-http-redirect is set to null, false, or undefined, delete\n // it to prevent a CORS preflight.\n if (!options.headers[requestHeaderName]) {\n Reflect.deleteProperty(options.headers, requestHeaderName);\n }\n\n return options;\n }\n options.headers[requestHeaderName] = true;\n options.$redirectCount = options.$redirectCount || 0;\n\n return options;\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n /* eslint-disable no-else-return */\n if (response.headers && response.headers[responseHeaderName]) {\n options = clone(options);\n options.uri = response.headers[responseHeaderName];\n options.$redirectCount += 1;\n if (options.$redirectCount > this.webex.config.maxAppLevelRedirects) {\n return Promise.reject(new Error('Maximum redirects exceeded'));\n }\n\n return this.webex.request(options);\n } else if (\n response.headers &&\n response.body &&\n response.body.errorCode === LOCUS_REDIRECT_ERROR &&\n response.body.location\n ) {\n options = clone(options);\n\n this.webex.logger.warn('redirect: url redirects needed from', options.uri);\n if (response.options && response.options.qs) {\n // for POST requests\n const newUrl = response.body.location.split('?');\n\n options.uri = newUrl[0]; // params are already present in the qs\n } else {\n // for GET requests\n options.uri = response.body.location;\n }\n\n this.webex.logger.warn('redirect: url redirects needed to', options.uri);\n options.$redirectCount += 1;\n if (options.$redirectCount > this.webex.config.maxLocusRedirects) {\n return Promise.reject(new Error('Maximum redirects exceeded'));\n }\n\n return this.webex.request(options);\n }\n /* eslint-enable no-else-return */\n\n return response;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,50 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
7
|
value: true
|
|
11
8
|
});
|
|
12
|
-
|
|
13
9
|
exports.default = void 0;
|
|
14
|
-
|
|
15
10
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
-
|
|
17
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
|
-
|
|
19
12
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
20
|
-
|
|
21
13
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
22
|
-
|
|
23
14
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
24
|
-
|
|
25
15
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
26
|
-
|
|
27
16
|
var _get2 = _interopRequireDefault(require("lodash/get"));
|
|
28
|
-
|
|
29
17
|
var _httpCore = require("@webex/http-core");
|
|
30
|
-
|
|
31
18
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
32
|
-
|
|
33
19
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
34
|
-
|
|
35
20
|
/**
|
|
36
21
|
* @class
|
|
37
22
|
*/
|
|
38
23
|
var RequestEventInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
39
24
|
(0, _inherits2.default)(RequestEventInterceptor, _Interceptor);
|
|
40
|
-
|
|
41
25
|
var _super = _createSuper(RequestEventInterceptor);
|
|
42
|
-
|
|
43
26
|
function RequestEventInterceptor() {
|
|
44
27
|
(0, _classCallCheck2.default)(this, RequestEventInterceptor);
|
|
45
28
|
return _super.apply(this, arguments);
|
|
46
29
|
}
|
|
47
|
-
|
|
48
30
|
(0, _createClass2.default)(RequestEventInterceptor, [{
|
|
49
31
|
key: "onRequest",
|
|
50
32
|
value:
|
|
@@ -55,77 +37,69 @@ var RequestEventInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
55
37
|
*/
|
|
56
38
|
function onRequest(options) {
|
|
57
39
|
var logger = (0, _get2.default)(this, 'webex.logger', console);
|
|
58
|
-
|
|
59
40
|
try {
|
|
60
41
|
this.webex.trigger('request:start', options);
|
|
61
42
|
} catch (error) {
|
|
62
43
|
logger.warn('event handler for request:start failed ', error);
|
|
63
44
|
}
|
|
64
|
-
|
|
65
45
|
return _promise.default.resolve(options);
|
|
66
46
|
}
|
|
47
|
+
|
|
67
48
|
/**
|
|
68
49
|
* @see Interceptor#onRequest
|
|
69
50
|
* @param {Object} options
|
|
70
51
|
* @param {Error} reason
|
|
71
52
|
* @returns {Object}
|
|
72
53
|
*/
|
|
73
|
-
|
|
74
54
|
}, {
|
|
75
55
|
key: "onRequestError",
|
|
76
56
|
value: function onRequestError(options, reason) {
|
|
77
57
|
// We need to do the normal onRequest logging, but then log how the request
|
|
78
58
|
// failed since the response logger won't be called.
|
|
79
59
|
var logger = (0, _get2.default)(this, 'webex.logger', console);
|
|
80
|
-
|
|
81
60
|
try {
|
|
82
61
|
this.webex.trigger('request:end', options, reason);
|
|
83
62
|
this.webex.trigger('request:failure', options, reason);
|
|
84
63
|
} catch (error) {
|
|
85
64
|
logger.warn('event handler for request:end failed ', error);
|
|
86
65
|
}
|
|
87
|
-
|
|
88
66
|
return _promise.default.reject(reason);
|
|
89
67
|
}
|
|
68
|
+
|
|
90
69
|
/**
|
|
91
70
|
* @see Interceptor#onResponse
|
|
92
71
|
* @param {Object} options
|
|
93
72
|
* @param {HttpResponse} response
|
|
94
73
|
* @returns {Object}
|
|
95
74
|
*/
|
|
96
|
-
|
|
97
75
|
}, {
|
|
98
76
|
key: "onResponse",
|
|
99
77
|
value: function onResponse(options, response) {
|
|
100
78
|
var logger = (0, _get2.default)(this, 'webex.logger', console);
|
|
101
|
-
|
|
102
79
|
try {
|
|
103
80
|
this.webex.trigger('request:success', response.options, response);
|
|
104
81
|
} catch (error) {
|
|
105
82
|
logger.warn('event handler for request:success failed ', error);
|
|
106
83
|
}
|
|
107
|
-
|
|
108
84
|
return _promise.default.resolve(response);
|
|
109
85
|
}
|
|
86
|
+
|
|
110
87
|
/**
|
|
111
88
|
* @see Interceptor#onResponseError
|
|
112
89
|
* @param {Object} options
|
|
113
90
|
* @param {Error} reason
|
|
114
91
|
* @returns {Object}
|
|
115
92
|
*/
|
|
116
|
-
|
|
117
93
|
}, {
|
|
118
94
|
key: "onResponseError",
|
|
119
95
|
value: function onResponseError(options, reason) {
|
|
120
96
|
var logger = (0, _get2.default)(this, 'webex.logger', console);
|
|
121
|
-
|
|
122
97
|
try {
|
|
123
98
|
this.webex.trigger('request:end', options, reason);
|
|
124
99
|
this.webex.trigger('request:failure', options, reason);
|
|
125
100
|
} catch (error) {
|
|
126
101
|
logger.warn('event handler for request:failure failed ', error);
|
|
127
102
|
}
|
|
128
|
-
|
|
129
103
|
return _promise.default.reject(reason);
|
|
130
104
|
}
|
|
131
105
|
}], [{
|
|
@@ -142,6 +116,5 @@ var RequestEventInterceptor = /*#__PURE__*/function (_Interceptor) {
|
|
|
142
116
|
}]);
|
|
143
117
|
return RequestEventInterceptor;
|
|
144
118
|
}(_httpCore.Interceptor);
|
|
145
|
-
|
|
146
119
|
exports.default = RequestEventInterceptor;
|
|
147
120
|
//# sourceMappingURL=request-event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["RequestEventInterceptor","options","logger","console","webex","trigger","error","warn","resolve","reason","reject","response","Interceptor"],"sources":["request-event.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestEventInterceptor extends Interceptor {\n /**\n * @returns {RequestEventInterceptor}\n */\n static create() {\n return new RequestEventInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:start', options);\n }
|
|
1
|
+
{"version":3,"names":["RequestEventInterceptor","options","logger","console","webex","trigger","error","warn","resolve","reason","reject","response","Interceptor"],"sources":["request-event.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestEventInterceptor extends Interceptor {\n /**\n * @returns {RequestEventInterceptor}\n */\n static create() {\n return new RequestEventInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:start', options);\n } catch (error) {\n logger.warn('event handler for request:start failed ', error);\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onRequestError(options, reason) {\n // We need to do the normal onRequest logging, but then log how the request\n // failed since the response logger won't be called.\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:end', options, reason);\n this.webex.trigger('request:failure', options, reason);\n } catch (error) {\n logger.warn('event handler for request:end failed ', error);\n }\n\n return Promise.reject(reason);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:success', response.options, response);\n } catch (error) {\n logger.warn('event handler for request:success failed ', error);\n }\n\n return Promise.resolve(response);\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:end', options, reason);\n this.webex.trigger('request:failure', options, reason);\n } catch (error) {\n logger.warn('event handler for request:failure failed ', error);\n }\n\n return Promise.reject(reason);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAKA;AAA6C;AAAA;AAE7C;AACA;AACA;AAFA,IAGqBA,uBAAuB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;IAAA;IAAA;IAQ1C;AACF;AACA;AACA;AACA;IACE,mBAAUC,OAAO,EAAE;MACjB,IAAMC,MAAM,GAAG,mBAAI,IAAI,EAAE,cAAc,EAAEC,OAAO,CAAC;MAEjD,IAAI;QACF,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC,eAAe,EAAEJ,OAAO,CAAC;MAC9C,CAAC,CAAC,OAAOK,KAAK,EAAE;QACdJ,MAAM,CAACK,IAAI,CAAC,yCAAyC,EAAED,KAAK,CAAC;MAC/D;MAEA,OAAO,iBAAQE,OAAO,CAACP,OAAO,CAAC;IACjC;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,wBAAeA,OAAO,EAAEQ,MAAM,EAAE;MAC9B;MACA;MACA,IAAMP,MAAM,GAAG,mBAAI,IAAI,EAAE,cAAc,EAAEC,OAAO,CAAC;MAEjD,IAAI;QACF,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC,aAAa,EAAEJ,OAAO,EAAEQ,MAAM,CAAC;QAClD,IAAI,CAACL,KAAK,CAACC,OAAO,CAAC,iBAAiB,EAAEJ,OAAO,EAAEQ,MAAM,CAAC;MACxD,CAAC,CAAC,OAAOH,KAAK,EAAE;QACdJ,MAAM,CAACK,IAAI,CAAC,uCAAuC,EAAED,KAAK,CAAC;MAC7D;MAEA,OAAO,iBAAQI,MAAM,CAACD,MAAM,CAAC;IAC/B;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,oBAAWR,OAAO,EAAEU,QAAQ,EAAE;MAC5B,IAAMT,MAAM,GAAG,mBAAI,IAAI,EAAE,cAAc,EAAEC,OAAO,CAAC;MAEjD,IAAI;QACF,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC,iBAAiB,EAAEM,QAAQ,CAACV,OAAO,EAAEU,QAAQ,CAAC;MACnE,CAAC,CAAC,OAAOL,KAAK,EAAE;QACdJ,MAAM,CAACK,IAAI,CAAC,2CAA2C,EAAED,KAAK,CAAC;MACjE;MAEA,OAAO,iBAAQE,OAAO,CAACG,QAAQ,CAAC;IAClC;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,yBAAgBV,OAAO,EAAEQ,MAAM,EAAE;MAC/B,IAAMP,MAAM,GAAG,mBAAI,IAAI,EAAE,cAAc,EAAEC,OAAO,CAAC;MAEjD,IAAI;QACF,IAAI,CAACC,KAAK,CAACC,OAAO,CAAC,aAAa,EAAEJ,OAAO,EAAEQ,MAAM,CAAC;QAClD,IAAI,CAACL,KAAK,CAACC,OAAO,CAAC,iBAAiB,EAAEJ,OAAO,EAAEQ,MAAM,CAAC;MACxD,CAAC,CAAC,OAAOH,KAAK,EAAE;QACdJ,MAAM,CAACK,IAAI,CAAC,2CAA2C,EAAED,KAAK,CAAC;MACjE;MAEA,OAAO,iBAAQI,MAAM,CAACD,MAAM,CAAC;IAC/B;EAAC;IAAA;IAAA;IAhFD;AACF;AACA;IACE,kBAAgB;MACd,OAAO,IAAIT,uBAAuB,CAAC;QAACI,KAAK,EAAE;MAAI,CAAC,CAAC;IACnD;EAAC;EAAA;AAAA,EANkDQ,qBAAW;AAAA"}
|