@webex/webex-core 2.59.3-next.1 → 2.59.4-next.1

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