@webex/webex-core 3.0.0-beta.15 → 3.0.0-beta.150
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 +0 -20
- 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 +21 -53
- 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 +44 -123
- 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 +29 -122
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +12 -27
- 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 +0 -21
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +11 -33
- 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 +41 -56
- 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 +116 -234
- 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 +0 -14
- 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/lib/credentials/credentials.js +19 -0
- package/test/unit/spec/credentials/credentials.js +28 -0
package/dist/lib/batcher.js
CHANGED
|
@@ -1,27 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
|
-
|
|
11
8
|
exports.default = void 0;
|
|
12
|
-
|
|
13
9
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
14
|
-
|
|
15
10
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
-
|
|
17
11
|
var _has2 = _interopRequireDefault(require("lodash/has"));
|
|
18
|
-
|
|
19
12
|
var _common = require("@webex/common");
|
|
20
|
-
|
|
21
13
|
var _webexPlugin = _interopRequireDefault(require("./webex-plugin"));
|
|
22
|
-
|
|
23
14
|
var _webexHttpError = _interopRequireDefault(require("./webex-http-error"));
|
|
24
|
-
|
|
25
15
|
/**
|
|
26
16
|
* Base class for coalescing requests to batched APIs
|
|
27
17
|
* @class Batcher
|
|
@@ -45,7 +35,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
45
35
|
bounce: {
|
|
46
36
|
fn: function fn() {
|
|
47
37
|
var _this = this;
|
|
48
|
-
|
|
49
38
|
return (0, _common.cappedDebounce)(function () {
|
|
50
39
|
return _this.executeQueue.apply(_this, arguments);
|
|
51
40
|
}, this.config.batcherWait, {
|
|
@@ -55,7 +44,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
55
44
|
}
|
|
56
45
|
}
|
|
57
46
|
},
|
|
58
|
-
|
|
59
47
|
/**
|
|
60
48
|
* Requests an item from a batched API
|
|
61
49
|
* @param {Object} item
|
|
@@ -63,9 +51,7 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
63
51
|
*/
|
|
64
52
|
request: function request(item) {
|
|
65
53
|
var _this2 = this;
|
|
66
|
-
|
|
67
54
|
// So far, I can't find a way to avoid three layers of nesting here.
|
|
68
|
-
|
|
69
55
|
/* eslint max-nested-callbacks: [0] */
|
|
70
56
|
var defer = new _common.Defer();
|
|
71
57
|
this.fingerprintRequest(item).then(function (idx) {
|
|
@@ -73,18 +59,14 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
73
59
|
defer.resolve(_this2.deferreds.get(idx).promise);
|
|
74
60
|
return;
|
|
75
61
|
}
|
|
76
|
-
|
|
77
62
|
_this2.deferreds.set(idx, defer);
|
|
78
|
-
|
|
79
63
|
_this2.prepareItem(item).then(function (req) {
|
|
80
64
|
defer.promise = defer.promise.then((0, _common.tap)(function () {
|
|
81
65
|
return _this2.deferreds.delete(idx);
|
|
82
66
|
})).catch(function (reason) {
|
|
83
67
|
_this2.deferreds.delete(idx);
|
|
84
|
-
|
|
85
68
|
return _promise.default.reject(reason);
|
|
86
69
|
});
|
|
87
|
-
|
|
88
70
|
_this2.enqueue(req).then(function () {
|
|
89
71
|
return _this2.bounce();
|
|
90
72
|
}).catch(function (reason) {
|
|
@@ -98,7 +80,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
98
80
|
});
|
|
99
81
|
return defer.promise;
|
|
100
82
|
},
|
|
101
|
-
|
|
102
83
|
/**
|
|
103
84
|
* Adds an item to the queue.
|
|
104
85
|
* Intended to be overridden
|
|
@@ -109,7 +90,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
109
90
|
this.queue.push(req);
|
|
110
91
|
return _promise.default.resolve();
|
|
111
92
|
},
|
|
112
|
-
|
|
113
93
|
/**
|
|
114
94
|
* Transform the item before adding it to the queue
|
|
115
95
|
* Intended to be overridden
|
|
@@ -119,7 +99,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
119
99
|
prepareItem: function prepareItem(item) {
|
|
120
100
|
return _promise.default.resolve(item);
|
|
121
101
|
},
|
|
122
|
-
|
|
123
102
|
/**
|
|
124
103
|
* Detaches the current queue, does any appropriate transforms, and submits it
|
|
125
104
|
* to the API.
|
|
@@ -127,7 +106,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
127
106
|
*/
|
|
128
107
|
executeQueue: function executeQueue() {
|
|
129
108
|
var _this3 = this;
|
|
130
|
-
|
|
131
109
|
var queue = this.queue.splice(0, this.config.batcherMaxCalls);
|
|
132
110
|
return new _promise.default(function (resolve) {
|
|
133
111
|
resolve(_this3.prepareRequest(queue).then(function (payload) {
|
|
@@ -138,7 +116,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
138
116
|
if (reason instanceof _webexHttpError.default) {
|
|
139
117
|
return _this3.handleHttpError(reason);
|
|
140
118
|
}
|
|
141
|
-
|
|
142
119
|
return _promise.default.all(queue.map(function (item) {
|
|
143
120
|
return _this3.getDeferredForRequest(item).then(function (defer) {
|
|
144
121
|
defer.reject(reason);
|
|
@@ -147,11 +124,9 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
147
124
|
}));
|
|
148
125
|
}).catch(function (reason) {
|
|
149
126
|
_this3.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);
|
|
150
|
-
|
|
151
127
|
return _promise.default.reject(reason);
|
|
152
128
|
});
|
|
153
129
|
},
|
|
154
|
-
|
|
155
130
|
/**
|
|
156
131
|
* Performs any final transforms on the queue before submitting it to the API
|
|
157
132
|
* Intended to be overridden
|
|
@@ -161,7 +136,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
161
136
|
prepareRequest: function prepareRequest(queue) {
|
|
162
137
|
return _promise.default.resolve(queue);
|
|
163
138
|
},
|
|
164
|
-
|
|
165
139
|
/**
|
|
166
140
|
* Submits the prepared request body to the API.
|
|
167
141
|
* This method *must* be overridden
|
|
@@ -172,7 +146,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
172
146
|
submitHttpRequest: function submitHttpRequest(payload) {
|
|
173
147
|
throw new Error('request() must be implemented');
|
|
174
148
|
},
|
|
175
|
-
|
|
176
149
|
/**
|
|
177
150
|
* Actions taken when the http request returns a success
|
|
178
151
|
* Intended to be overridden
|
|
@@ -181,12 +154,10 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
181
154
|
*/
|
|
182
155
|
handleHttpSuccess: function handleHttpSuccess(res) {
|
|
183
156
|
var _this4 = this;
|
|
184
|
-
|
|
185
157
|
return _promise.default.all((res.body && res.body.items || res.body).map(function (item) {
|
|
186
158
|
return _this4.acceptItem(item);
|
|
187
159
|
}));
|
|
188
160
|
},
|
|
189
|
-
|
|
190
161
|
/**
|
|
191
162
|
* Actions taken when the http request returns a failure. Typically, this
|
|
192
163
|
* means failing the entire queue, but could be overridden in some
|
|
@@ -197,7 +168,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
197
168
|
*/
|
|
198
169
|
handleHttpError: function handleHttpError(reason) {
|
|
199
170
|
var _this5 = this;
|
|
200
|
-
|
|
201
171
|
if (reason instanceof _webexHttpError.default) {
|
|
202
172
|
if ((0, _has2.default)(reason, 'options.body.map')) {
|
|
203
173
|
return _promise.default.all(reason.options.body.map(function (item) {
|
|
@@ -207,11 +177,9 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
207
177
|
}));
|
|
208
178
|
}
|
|
209
179
|
}
|
|
210
|
-
|
|
211
180
|
this.logger.error('http error handler called without a WebexHttpError object', reason);
|
|
212
181
|
return _promise.default.reject(reason);
|
|
213
182
|
},
|
|
214
|
-
|
|
215
183
|
/**
|
|
216
184
|
* Determines if the item succeeded or failed and delegates accordingly
|
|
217
185
|
* @param {Object} item
|
|
@@ -219,16 +187,13 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
219
187
|
*/
|
|
220
188
|
acceptItem: function acceptItem(item) {
|
|
221
189
|
var _this6 = this;
|
|
222
|
-
|
|
223
190
|
return this.didItemFail(item).then(function (didFail) {
|
|
224
191
|
if (didFail) {
|
|
225
192
|
return _this6.handleItemFailure(item);
|
|
226
193
|
}
|
|
227
|
-
|
|
228
194
|
return _this6.handleItemSuccess(item);
|
|
229
195
|
});
|
|
230
196
|
},
|
|
231
|
-
|
|
232
197
|
/**
|
|
233
198
|
* Indicates if the specified response item implies a success or a failure
|
|
234
199
|
* Intended to be overridden
|
|
@@ -239,7 +204,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
239
204
|
didItemFail: function didItemFail(item) {
|
|
240
205
|
return _promise.default.resolve(false);
|
|
241
206
|
},
|
|
242
|
-
|
|
243
207
|
/**
|
|
244
208
|
* Finds the Defer for the specified item and rejects its promise
|
|
245
209
|
* Intended to be overridden
|
|
@@ -251,7 +215,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
251
215
|
defer.reject(item);
|
|
252
216
|
});
|
|
253
217
|
},
|
|
254
|
-
|
|
255
218
|
/**
|
|
256
219
|
* Finds the Defer for the specified item and resolves its promise
|
|
257
220
|
* Intended to be overridden
|
|
@@ -263,7 +226,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
263
226
|
defer.resolve(item);
|
|
264
227
|
});
|
|
265
228
|
},
|
|
266
|
-
|
|
267
229
|
/**
|
|
268
230
|
* Returns the Deferred for the specified request item
|
|
269
231
|
* @param {Object} item
|
|
@@ -271,20 +233,16 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
271
233
|
*/
|
|
272
234
|
getDeferredForRequest: function getDeferredForRequest(item) {
|
|
273
235
|
var _this7 = this;
|
|
274
|
-
|
|
275
236
|
return this.fingerprintRequest(item).then(function (idx) {
|
|
276
237
|
var defer = _this7.deferreds.get(idx);
|
|
277
|
-
/* istanbul ignore if */
|
|
278
|
-
|
|
279
238
|
|
|
239
|
+
/* istanbul ignore if */
|
|
280
240
|
if (!defer) {
|
|
281
241
|
throw new Error('Could not find pending request for received response');
|
|
282
242
|
}
|
|
283
|
-
|
|
284
243
|
return defer;
|
|
285
244
|
});
|
|
286
245
|
},
|
|
287
|
-
|
|
288
246
|
/**
|
|
289
247
|
* Returns the Deferred for the specified response item
|
|
290
248
|
* @param {Object} item
|
|
@@ -292,20 +250,16 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
292
250
|
*/
|
|
293
251
|
getDeferredForResponse: function getDeferredForResponse(item) {
|
|
294
252
|
var _this8 = this;
|
|
295
|
-
|
|
296
253
|
return this.fingerprintResponse(item).then(function (idx) {
|
|
297
254
|
var defer = _this8.deferreds.get(idx);
|
|
298
|
-
/* istanbul ignore if */
|
|
299
|
-
|
|
300
255
|
|
|
256
|
+
/* istanbul ignore if */
|
|
301
257
|
if (!defer) {
|
|
302
258
|
throw new Error('Could not find pending request for received response');
|
|
303
259
|
}
|
|
304
|
-
|
|
305
260
|
return defer;
|
|
306
261
|
});
|
|
307
262
|
},
|
|
308
|
-
|
|
309
263
|
/**
|
|
310
264
|
* Generates a unique identifier for the item in a request payload
|
|
311
265
|
* Intended to be overridden
|
|
@@ -317,7 +271,6 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
317
271
|
fingerprintRequest: function fingerprintRequest(item) {
|
|
318
272
|
throw new Error('fingerprintRequest() must be implemented');
|
|
319
273
|
},
|
|
320
|
-
|
|
321
274
|
/**
|
|
322
275
|
* Generates a unique identifier for the item in a response payload
|
|
323
276
|
* Intended to be overridden
|
|
@@ -329,9 +282,8 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
329
282
|
fingerprintResponse: function fingerprintResponse(item) {
|
|
330
283
|
throw new Error('fingerprintResponse() must be implemented');
|
|
331
284
|
},
|
|
332
|
-
version: "3.0.0-beta.
|
|
285
|
+
version: "3.0.0-beta.150"
|
|
333
286
|
});
|
|
334
|
-
|
|
335
287
|
var _default2 = Batcher;
|
|
336
288
|
exports.default = _default2;
|
|
337
289
|
//# sourceMappingURL=batcher.js.map
|
package/dist/lib/batcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Batcher","WebexPlugin","extend","session","deferreds","type","default","queue","derived","bounce","fn","cappedDebounce","executeQueue","config","batcherWait","maxCalls","batcherMaxCalls","maxWait","batcherMaxWait","request","item","defer","Defer","fingerprintRequest","then","idx","has","resolve","get","promise","set","prepareItem","req","tap","delete","catch","reason","reject","enqueue","push","splice","prepareRequest","payload","submitHttpRequest","res","handleHttpSuccess","WebexHttpError","handleHttpError","all","map","getDeferredForRequest","logger","error","process","env","NODE_ENV","stack","Error","body","items","acceptItem","options","didItemFail","didFail","handleItemFailure","handleItemSuccess","getDeferredForResponse","fingerprintResponse"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {has} from 'lodash';\nimport {cappedDebounce, Defer, tap} from '@webex/common';\n\nimport WebexPlugin from './webex-plugin';\nimport WebexHttpError from './webex-http-error';\n\n/**\n * Base class for coalescing requests to batched APIs\n * @class Batcher\n */\nconst Batcher = WebexPlugin.extend({\n session: {\n deferreds: {\n type: 'object',\n default() {\n return new Map();\n },\n },\n queue: {\n type: 'array',\n default() {\n return [];\n },\n },\n },\n\n derived: {\n bounce: {\n fn() {\n return cappedDebounce((...args) => this.executeQueue(...args), this.config.batcherWait, {\n maxCalls: this.config.batcherMaxCalls,\n maxWait: this.config.batcherMaxWait,\n });\n },\n },\n },\n\n /**\n * Requests an item from a batched API\n * @param {Object} item\n * @returns {Promise<mixed>}\n */\n request(item) {\n // So far, I can't find a way to avoid three layers of nesting here.\n /* eslint max-nested-callbacks: [0] */\n const defer = new Defer();\n\n this.fingerprintRequest(item)\n .then((idx) => {\n if (this.deferreds.has(idx)) {\n defer.resolve(this.deferreds.get(idx).promise);\n\n return;\n }\n this.deferreds.set(idx, defer);\n this.prepareItem(item)\n .then((req) => {\n defer.promise = defer.promise\n .then(tap(() => this.deferreds.delete(idx)))\n .catch((reason) => {\n this.deferreds.delete(idx);\n\n return Promise.reject(reason);\n });\n\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n\n return defer.promise;\n },\n\n /**\n * Adds an item to the queue.\n * Intended to be overridden\n * @param {mixed} req\n * @returns {Promise<undefined>}\n */\n enqueue(req) {\n this.queue.push(req);\n\n return Promise.resolve();\n },\n\n /**\n * Transform the item before adding it to the queue\n * Intended to be overridden\n * @param {mixed} item\n * @returns {Promise<mixed>}\n */\n prepareItem(item) {\n return Promise.resolve(item);\n },\n\n /**\n * Detaches the current queue, does any appropriate transforms, and submits it\n * to the API.\n * @returns {Promise<undefined>}\n */\n executeQueue() {\n const queue = this.queue.splice(0, this.config.batcherMaxCalls);\n\n return new Promise((resolve) => {\n resolve(\n this.prepareRequest(queue)\n .then((payload) =>\n this.submitHttpRequest(payload).then((res) => this.handleHttpSuccess(res))\n )\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(\n queue.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\n );\n })\n );\n }).catch((reason) => {\n this.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);\n\n return Promise.reject(reason);\n });\n },\n\n /**\n * Performs any final transforms on the queue before submitting it to the API\n * Intended to be overridden\n * @param {Object|Array} queue\n * @returns {Promise<Object>}\n */\n prepareRequest(queue) {\n return Promise.resolve(queue);\n },\n\n /**\n * Submits the prepared request body to the API.\n * This method *must* be overridden\n * @param {Object} payload\n * @returns {Promise<HttpResponseObject>}\n */\n // eslint-disable-next-line no-unused-vars\n submitHttpRequest(payload) {\n throw new Error('request() must be implemented');\n },\n\n /**\n * Actions taken when the http request returns a success\n * Intended to be overridden\n * @param {Promise<HttpResponseObject>} res\n * @returns {Promise<undefined>}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n ((res.body && res.body.items) || res.body).map((item) => this.acceptItem(item))\n );\n },\n\n /**\n * Actions taken when the http request returns a failure. Typically, this\n * means failing the entire queue, but could be overridden in some\n * implementations to e.g. reenqueue.\n * Intended to be overridden\n * @param {WebexHttpError} reason\n * @returns {Promise<undefined>}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError) {\n if (has(reason, 'options.body.map')) {\n return Promise.all(\n reason.options.body.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\n );\n }\n }\n this.logger.error('http error handler called without a WebexHttpError object', reason);\n\n return Promise.reject(reason);\n },\n\n /**\n * Determines if the item succeeded or failed and delegates accordingly\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n acceptItem(item) {\n return this.didItemFail(item).then((didFail) => {\n if (didFail) {\n return this.handleItemFailure(item);\n }\n\n return this.handleItemSuccess(item);\n });\n },\n\n /**\n * Indicates if the specified response item implies a success or a failure\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<Boolean>}\n */\n // eslint-disable-next-line no-unused-vars\n didItemFail(item) {\n return Promise.resolve(false);\n },\n\n /**\n * Finds the Defer for the specified item and rejects its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemFailure(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(item);\n });\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(item);\n });\n },\n\n /**\n * Returns the Deferred for the specified request item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForRequest(item) {\n return this.fingerprintRequest(item).then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Returns the Deferred for the specified response item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForResponse(item) {\n return this.fingerprintResponse(item).then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Generates a unique identifier for the item in a request payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintRequest(item) {\n throw new Error('fingerprintRequest() must be implemented');\n },\n\n /**\n * Generates a unique identifier for the item in a response payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintResponse(item) {\n throw new Error('fingerprintResponse() must be implemented');\n },\n});\n\nexport default Batcher;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Batcher","WebexPlugin","extend","session","deferreds","type","default","queue","derived","bounce","fn","cappedDebounce","executeQueue","config","batcherWait","maxCalls","batcherMaxCalls","maxWait","batcherMaxWait","request","item","defer","Defer","fingerprintRequest","then","idx","has","resolve","get","promise","set","prepareItem","req","tap","delete","catch","reason","reject","enqueue","push","splice","prepareRequest","payload","submitHttpRequest","res","handleHttpSuccess","WebexHttpError","handleHttpError","all","map","getDeferredForRequest","logger","error","process","env","NODE_ENV","stack","Error","body","items","acceptItem","options","didItemFail","didFail","handleItemFailure","handleItemSuccess","getDeferredForResponse","fingerprintResponse"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {has} from 'lodash';\nimport {cappedDebounce, Defer, tap} from '@webex/common';\n\nimport WebexPlugin from './webex-plugin';\nimport WebexHttpError from './webex-http-error';\n\n/**\n * Base class for coalescing requests to batched APIs\n * @class Batcher\n */\nconst Batcher = WebexPlugin.extend({\n session: {\n deferreds: {\n type: 'object',\n default() {\n return new Map();\n },\n },\n queue: {\n type: 'array',\n default() {\n return [];\n },\n },\n },\n\n derived: {\n bounce: {\n fn() {\n return cappedDebounce((...args) => this.executeQueue(...args), this.config.batcherWait, {\n maxCalls: this.config.batcherMaxCalls,\n maxWait: this.config.batcherMaxWait,\n });\n },\n },\n },\n\n /**\n * Requests an item from a batched API\n * @param {Object} item\n * @returns {Promise<mixed>}\n */\n request(item) {\n // So far, I can't find a way to avoid three layers of nesting here.\n /* eslint max-nested-callbacks: [0] */\n const defer = new Defer();\n\n this.fingerprintRequest(item)\n .then((idx) => {\n if (this.deferreds.has(idx)) {\n defer.resolve(this.deferreds.get(idx).promise);\n\n return;\n }\n this.deferreds.set(idx, defer);\n this.prepareItem(item)\n .then((req) => {\n defer.promise = defer.promise\n .then(tap(() => this.deferreds.delete(idx)))\n .catch((reason) => {\n this.deferreds.delete(idx);\n\n return Promise.reject(reason);\n });\n\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n\n return defer.promise;\n },\n\n /**\n * Adds an item to the queue.\n * Intended to be overridden\n * @param {mixed} req\n * @returns {Promise<undefined>}\n */\n enqueue(req) {\n this.queue.push(req);\n\n return Promise.resolve();\n },\n\n /**\n * Transform the item before adding it to the queue\n * Intended to be overridden\n * @param {mixed} item\n * @returns {Promise<mixed>}\n */\n prepareItem(item) {\n return Promise.resolve(item);\n },\n\n /**\n * Detaches the current queue, does any appropriate transforms, and submits it\n * to the API.\n * @returns {Promise<undefined>}\n */\n executeQueue() {\n const queue = this.queue.splice(0, this.config.batcherMaxCalls);\n\n return new Promise((resolve) => {\n resolve(\n this.prepareRequest(queue)\n .then((payload) =>\n this.submitHttpRequest(payload).then((res) => this.handleHttpSuccess(res))\n )\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(\n queue.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\n );\n })\n );\n }).catch((reason) => {\n this.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);\n\n return Promise.reject(reason);\n });\n },\n\n /**\n * Performs any final transforms on the queue before submitting it to the API\n * Intended to be overridden\n * @param {Object|Array} queue\n * @returns {Promise<Object>}\n */\n prepareRequest(queue) {\n return Promise.resolve(queue);\n },\n\n /**\n * Submits the prepared request body to the API.\n * This method *must* be overridden\n * @param {Object} payload\n * @returns {Promise<HttpResponseObject>}\n */\n // eslint-disable-next-line no-unused-vars\n submitHttpRequest(payload) {\n throw new Error('request() must be implemented');\n },\n\n /**\n * Actions taken when the http request returns a success\n * Intended to be overridden\n * @param {Promise<HttpResponseObject>} res\n * @returns {Promise<undefined>}\n */\n handleHttpSuccess(res) {\n return Promise.all(\n ((res.body && res.body.items) || res.body).map((item) => this.acceptItem(item))\n );\n },\n\n /**\n * Actions taken when the http request returns a failure. Typically, this\n * means failing the entire queue, but could be overridden in some\n * implementations to e.g. reenqueue.\n * Intended to be overridden\n * @param {WebexHttpError} reason\n * @returns {Promise<undefined>}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError) {\n if (has(reason, 'options.body.map')) {\n return Promise.all(\n reason.options.body.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\n );\n }\n }\n this.logger.error('http error handler called without a WebexHttpError object', reason);\n\n return Promise.reject(reason);\n },\n\n /**\n * Determines if the item succeeded or failed and delegates accordingly\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n acceptItem(item) {\n return this.didItemFail(item).then((didFail) => {\n if (didFail) {\n return this.handleItemFailure(item);\n }\n\n return this.handleItemSuccess(item);\n });\n },\n\n /**\n * Indicates if the specified response item implies a success or a failure\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<Boolean>}\n */\n // eslint-disable-next-line no-unused-vars\n didItemFail(item) {\n return Promise.resolve(false);\n },\n\n /**\n * Finds the Defer for the specified item and rejects its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemFailure(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(item);\n });\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(item);\n });\n },\n\n /**\n * Returns the Deferred for the specified request item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForRequest(item) {\n return this.fingerprintRequest(item).then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Returns the Deferred for the specified response item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForResponse(item) {\n return this.fingerprintResponse(item).then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Generates a unique identifier for the item in a request payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintRequest(item) {\n throw new Error('fingerprintRequest() must be implemented');\n },\n\n /**\n * Generates a unique identifier for the item in a response payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintResponse(item) {\n throw new Error('fingerprintResponse() must be implemented');\n },\n});\n\nexport default Batcher;\n"],"mappings":"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"}
|