@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.
Files changed (105) hide show
  1. package/dist/config.js +1 -11
  2. package/dist/config.js.map +1 -1
  3. package/dist/credentials-config.js +0 -20
  4. package/dist/credentials-config.js.map +1 -1
  5. package/dist/index.js +0 -76
  6. package/dist/index.js.map +1 -1
  7. package/dist/interceptors/auth.js +22 -55
  8. package/dist/interceptors/auth.js.map +1 -1
  9. package/dist/interceptors/default-options.js +0 -20
  10. package/dist/interceptors/default-options.js.map +1 -1
  11. package/dist/interceptors/embargo.js +0 -21
  12. package/dist/interceptors/embargo.js.map +1 -1
  13. package/dist/interceptors/network-timing.js +2 -21
  14. package/dist/interceptors/network-timing.js.map +1 -1
  15. package/dist/interceptors/payload-transformer.js +2 -22
  16. package/dist/interceptors/payload-transformer.js.map +1 -1
  17. package/dist/interceptors/rate-limit.js +21 -53
  18. package/dist/interceptors/rate-limit.js.map +1 -1
  19. package/dist/interceptors/redirect.js +4 -33
  20. package/dist/interceptors/redirect.js.map +1 -1
  21. package/dist/interceptors/request-event.js +3 -30
  22. package/dist/interceptors/request-event.js.map +1 -1
  23. package/dist/interceptors/request-logger.js +1 -30
  24. package/dist/interceptors/request-logger.js.map +1 -1
  25. package/dist/interceptors/request-timing.js +3 -22
  26. package/dist/interceptors/request-timing.js.map +1 -1
  27. package/dist/interceptors/response-logger.js +2 -31
  28. package/dist/interceptors/response-logger.js.map +1 -1
  29. package/dist/interceptors/user-agent.js +2 -29
  30. package/dist/interceptors/user-agent.js.map +1 -1
  31. package/dist/interceptors/webex-tracking-id.js +5 -28
  32. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  33. package/dist/interceptors/webex-user-agent.js +5 -38
  34. package/dist/interceptors/webex-user-agent.js.map +1 -1
  35. package/dist/lib/batcher.js +3 -51
  36. package/dist/lib/batcher.js.map +1 -1
  37. package/dist/lib/credentials/credentials.js +44 -123
  38. package/dist/lib/credentials/credentials.js.map +1 -1
  39. package/dist/lib/credentials/grant-errors.js +0 -49
  40. package/dist/lib/credentials/grant-errors.js.map +1 -1
  41. package/dist/lib/credentials/index.js +1 -13
  42. package/dist/lib/credentials/index.js.map +1 -1
  43. package/dist/lib/credentials/scope.js +1 -7
  44. package/dist/lib/credentials/scope.js.map +1 -1
  45. package/dist/lib/credentials/token-collection.js +1 -7
  46. package/dist/lib/credentials/token-collection.js.map +1 -1
  47. package/dist/lib/credentials/token.js +29 -122
  48. package/dist/lib/credentials/token.js.map +1 -1
  49. package/dist/lib/page.js +12 -27
  50. package/dist/lib/page.js.map +1 -1
  51. package/dist/lib/services/constants.js +0 -2
  52. package/dist/lib/services/constants.js.map +1 -1
  53. package/dist/lib/services/index.js +1 -28
  54. package/dist/lib/services/index.js.map +1 -1
  55. package/dist/lib/services/interceptors/server-error.js +0 -21
  56. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  57. package/dist/lib/services/interceptors/service.js +11 -33
  58. package/dist/lib/services/interceptors/service.js.map +1 -1
  59. package/dist/lib/services/metrics.js +0 -2
  60. package/dist/lib/services/metrics.js.map +1 -1
  61. package/dist/lib/services/service-catalog.js +10 -90
  62. package/dist/lib/services/service-catalog.js.map +1 -1
  63. package/dist/lib/services/service-fed-ramp.js +0 -2
  64. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  65. package/dist/lib/services/service-host.js +41 -56
  66. package/dist/lib/services/service-host.js.map +1 -1
  67. package/dist/lib/services/service-registry.js +78 -90
  68. package/dist/lib/services/service-registry.js.map +1 -1
  69. package/dist/lib/services/service-state.js +3 -15
  70. package/dist/lib/services/service-state.js.map +1 -1
  71. package/dist/lib/services/service-url.js +4 -25
  72. package/dist/lib/services/service-url.js.map +1 -1
  73. package/dist/lib/services/services.js +116 -234
  74. package/dist/lib/services/services.js.map +1 -1
  75. package/dist/lib/stateless-webex-plugin.js +5 -28
  76. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  77. package/dist/lib/storage/decorators.js +19 -62
  78. package/dist/lib/storage/decorators.js.map +1 -1
  79. package/dist/lib/storage/errors.js +0 -23
  80. package/dist/lib/storage/errors.js.map +1 -1
  81. package/dist/lib/storage/index.js +0 -14
  82. package/dist/lib/storage/index.js.map +1 -1
  83. package/dist/lib/storage/make-webex-plugin-store.js +11 -41
  84. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  85. package/dist/lib/storage/make-webex-store.js +8 -30
  86. package/dist/lib/storage/make-webex-store.js.map +1 -1
  87. package/dist/lib/storage/memory-store-adapter.js +1 -19
  88. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  89. package/dist/lib/webex-core-plugin-mixin.js +9 -29
  90. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  91. package/dist/lib/webex-http-error.js +1 -31
  92. package/dist/lib/webex-http-error.js.map +1 -1
  93. package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
  94. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  95. package/dist/lib/webex-plugin.js +6 -40
  96. package/dist/lib/webex-plugin.js.map +1 -1
  97. package/dist/plugins/logger.js +3 -17
  98. package/dist/plugins/logger.js.map +1 -1
  99. package/dist/webex-core.js +79 -203
  100. package/dist/webex-core.js.map +1 -1
  101. package/dist/webex-internal-core.js +0 -10
  102. package/dist/webex-internal-core.js.map +1 -1
  103. package/package.json +14 -14
  104. package/src/lib/credentials/credentials.js +19 -0
  105. package/test/unit/spec/credentials/credentials.js +28 -0
@@ -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.15"
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
@@ -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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"}