@webex/webex-core 3.0.0-beta.2 → 3.0.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/config.js +1 -11
  2. package/dist/config.js.map +1 -1
  3. package/dist/credentials-config.js +44 -64
  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 +25 -57
  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 +39 -119
  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 +39 -118
  48. package/dist/lib/credentials/token.js.map +1 -1
  49. package/dist/lib/page.js +13 -26
  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 +2 -23
  56. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  57. package/dist/lib/services/interceptors/service.js +12 -34
  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 +47 -62
  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 +122 -238
  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 +2 -16
  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/config.js +9 -11
  105. package/src/credentials-config.js +110 -72
  106. package/src/index.js +4 -14
  107. package/src/interceptors/auth.js +36 -37
  108. package/src/interceptors/default-options.js +0 -1
  109. package/src/interceptors/embargo.js +1 -1
  110. package/src/interceptors/payload-transformer.js +1 -2
  111. package/src/interceptors/rate-limit.js +8 -5
  112. package/src/interceptors/redirect.js +14 -8
  113. package/src/interceptors/request-event.js +4 -8
  114. package/src/interceptors/request-logger.js +8 -5
  115. package/src/interceptors/response-logger.js +11 -8
  116. package/src/interceptors/user-agent.js +1 -2
  117. package/src/interceptors/webex-user-agent.js +3 -9
  118. package/src/lib/batcher.js +70 -69
  119. package/src/lib/credentials/credentials.js +112 -122
  120. package/src/lib/credentials/grant-errors.js +6 -7
  121. package/src/lib/credentials/index.js +1 -4
  122. package/src/lib/credentials/scope.js +1 -4
  123. package/src/lib/credentials/token-collection.js +1 -1
  124. package/src/lib/credentials/token.js +86 -80
  125. package/src/lib/page.js +10 -11
  126. package/src/lib/services/constants.js +3 -13
  127. package/src/lib/services/index.js +2 -2
  128. package/src/lib/services/interceptors/server-error.js +12 -7
  129. package/src/lib/services/interceptors/service.js +6 -5
  130. package/src/lib/services/metrics.js +1 -1
  131. package/src/lib/services/service-catalog.js +110 -100
  132. package/src/lib/services/service-fed-ramp.js +1 -2
  133. package/src/lib/services/service-host.js +10 -17
  134. package/src/lib/services/service-registry.js +69 -96
  135. package/src/lib/services/service-state.js +4 -6
  136. package/src/lib/services/service-url.js +24 -23
  137. package/src/lib/services/services.js +260 -251
  138. package/src/lib/stateless-webex-plugin.js +4 -2
  139. package/src/lib/storage/decorators.js +68 -66
  140. package/src/lib/storage/index.js +4 -6
  141. package/src/lib/storage/make-webex-plugin-store.js +34 -21
  142. package/src/lib/storage/make-webex-store.js +6 -7
  143. package/src/lib/storage/memory-store-adapter.js +3 -3
  144. package/src/lib/webex-core-plugin-mixin.js +10 -7
  145. package/src/lib/webex-http-error.js +7 -8
  146. package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
  147. package/src/lib/webex-plugin.js +41 -34
  148. package/src/plugins/logger.js +8 -3
  149. package/src/webex-core.js +185 -116
  150. package/src/webex-internal-core.js +15 -9
  151. package/test/integration/spec/credentials/credentials.js +26 -30
  152. package/test/integration/spec/credentials/token.js +36 -33
  153. package/test/integration/spec/services/service-catalog.js +177 -156
  154. package/test/integration/spec/services/services.js +313 -304
  155. package/test/integration/spec/webex-core.js +98 -86
  156. package/test/unit/spec/_setup.js +26 -18
  157. package/test/unit/spec/credentials/credentials.js +189 -154
  158. package/test/unit/spec/credentials/token.js +94 -76
  159. package/test/unit/spec/interceptors/auth.js +291 -243
  160. package/test/unit/spec/interceptors/default-options.js +36 -24
  161. package/test/unit/spec/interceptors/embargo.js +32 -27
  162. package/test/unit/spec/interceptors/network-timing.js +2 -2
  163. package/test/unit/spec/interceptors/payload-transformer.js +61 -52
  164. package/test/unit/spec/interceptors/rate-limit.js +104 -75
  165. package/test/unit/spec/interceptors/redirect.js +22 -20
  166. package/test/unit/spec/interceptors/request-timing.js +18 -22
  167. package/test/unit/spec/interceptors/user-agent.js +28 -16
  168. package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
  169. package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
  170. package/test/unit/spec/lib/batcher.js +36 -32
  171. package/test/unit/spec/lib/page.js +36 -32
  172. package/test/unit/spec/lib/webex-plugin.js +1 -1
  173. package/test/unit/spec/services/interceptors/server-error.js +67 -90
  174. package/test/unit/spec/services/interceptors/service.js +17 -28
  175. package/test/unit/spec/services/service-catalog.js +19 -27
  176. package/test/unit/spec/services/service-host.js +29 -26
  177. package/test/unit/spec/services/service-registry.js +128 -170
  178. package/test/unit/spec/services/service-state.js +13 -22
  179. package/test/unit/spec/services/service-url.js +24 -43
  180. package/test/unit/spec/services/services.js +85 -41
  181. package/test/unit/spec/storage/persist.js +6 -9
  182. package/test/unit/spec/storage/wait-for-value.js +22 -21
  183. package/test/unit/spec/webex-core.js +78 -57
  184. package/test/unit/spec/webex-internal-core.js +56 -31
@@ -1,52 +1,34 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.default = void 0;
14
-
15
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
16
-
17
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
18
-
19
12
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
20
-
21
13
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
22
-
23
14
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
24
-
25
15
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
26
-
27
16
  var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
28
-
29
17
  var _httpCore = require("@webex/http-core");
30
-
31
18
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
32
-
33
19
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
34
-
35
20
  var sequenceNumbers = new _weakMap.default();
21
+
36
22
  /**
37
23
  * @class
38
24
  */
39
-
40
25
  var WebexTrackingIdInterceptor = /*#__PURE__*/function (_Interceptor) {
41
26
  (0, _inherits2.default)(WebexTrackingIdInterceptor, _Interceptor);
42
-
43
27
  var _super = _createSuper(WebexTrackingIdInterceptor);
44
-
45
28
  function WebexTrackingIdInterceptor() {
46
29
  (0, _classCallCheck2.default)(this, WebexTrackingIdInterceptor);
47
30
  return _super.apply(this, arguments);
48
31
  }
49
-
50
32
  (0, _createClass2.default)(WebexTrackingIdInterceptor, [{
51
33
  key: "sequence",
52
34
  get:
@@ -60,10 +42,10 @@ var WebexTrackingIdInterceptor = /*#__PURE__*/function (_Interceptor) {
60
42
  sequenceNumbers.set(this, sq);
61
43
  return sq;
62
44
  }
45
+
63
46
  /**
64
47
  * @returns {WebexTrackingIdInterceptor}
65
48
  */
66
-
67
49
  }, {
68
50
  key: "onRequest",
69
51
  value:
@@ -73,36 +55,32 @@ var WebexTrackingIdInterceptor = /*#__PURE__*/function (_Interceptor) {
73
55
  * @returns {Object}
74
56
  */
75
57
  function onRequest(options) {
76
- options.headers = options.headers || {}; // If trackingid is already set, don't overwrite it
77
-
58
+ options.headers = options.headers || {};
59
+ // If trackingid is already set, don't overwrite it
78
60
  if ('trackingid' in options.headers) {
79
61
  // If trackingid is set to null, false, or undefined, delete it to
80
62
  // prevent a CORS preflight.
81
63
  if (!options.headers.trackingid) {
82
64
  (0, _deleteProperty.default)(options.headers, 'trackingid');
83
65
  }
84
-
85
66
  return options;
86
67
  }
87
-
88
68
  if (this.requiresTrackingId(options)) {
89
69
  options.headers.trackingid = "".concat(this.webex.sessionId, "_").concat(this.sequence);
90
70
  }
91
-
92
71
  if (options.headers.trackingid && options.replayCount) {
93
72
  var tid = options.headers.trackingid.split('+');
94
73
  tid[1] = options.replayCount;
95
74
  options.headers.trackingid = tid.join('+');
96
75
  }
97
-
98
76
  return options;
99
77
  }
78
+
100
79
  /**
101
80
  * Determines whether or not include a tracking id
102
81
  * @param {Object} options
103
82
  * @returns {boolean}
104
83
  */
105
-
106
84
  }, {
107
85
  key: "requiresTrackingId",
108
86
  value: function requiresTrackingId(options) {
@@ -118,6 +96,5 @@ var WebexTrackingIdInterceptor = /*#__PURE__*/function (_Interceptor) {
118
96
  }]);
119
97
  return WebexTrackingIdInterceptor;
120
98
  }(_httpCore.Interceptor);
121
-
122
99
  exports.default = WebexTrackingIdInterceptor;
123
100
  //# sourceMappingURL=webex-tracking-id.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["sequenceNumbers","WebexTrackingIdInterceptor","sq","get","set","options","headers","trackingid","requiresTrackingId","webex","sessionId","sequence","replayCount","tid","split","join","Interceptor"],"sources":["webex-tracking-id.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst sequenceNumbers = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexTrackingIdInterceptor extends Interceptor {\n /**\n * Sequence number; increments on access\n * @type {Number}\n */\n get sequence() {\n let sq = sequenceNumbers.get(this) || 0;\n\n sq += 1;\n sequenceNumbers.set(this, sq);\n\n return sq;\n }\n\n /**\n * @returns {WebexTrackingIdInterceptor}\n */\n static create() {\n return new WebexTrackingIdInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n // If trackingid is already set, don't overwrite it\n if ('trackingid' in options.headers) {\n // If trackingid is set to null, false, or undefined, delete it to\n // prevent a CORS preflight.\n if (!options.headers.trackingid) {\n Reflect.deleteProperty(options.headers, 'trackingid');\n }\n\n return options;\n }\n\n if (this.requiresTrackingId(options)) {\n options.headers.trackingid = `${this.webex.sessionId}_${this.sequence}`;\n }\n\n if (options.headers.trackingid && options.replayCount) {\n const tid = options.headers.trackingid.split('+');\n\n tid[1] = options.replayCount;\n options.headers.trackingid = tid.join('+');\n }\n\n return options;\n }\n\n /**\n * Determines whether or not include a tracking id\n * @param {Object} options\n * @returns {boolean}\n */\n requiresTrackingId(options) {\n return !options.headers.trackingid;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;;;AAEA,IAAMA,eAAe,GAAG,sBAAxB;AAEA;AACA;AACA;;IACqBC,0B;;;;;;;;;;;;;IACnB;AACF;AACA;AACA;IACE,eAAe;MACb,IAAIC,EAAE,GAAGF,eAAe,CAACG,GAAhB,CAAoB,IAApB,KAA6B,CAAtC;MAEAD,EAAE,IAAI,CAAN;MACAF,eAAe,CAACI,GAAhB,CAAoB,IAApB,EAA0BF,EAA1B;MAEA,OAAOA,EAAP;IACD;IAED;AACF;AACA;;;;;IAKE;AACF;AACA;AACA;AACA;IACE,mBAAUG,OAAV,EAAmB;MACjBA,OAAO,CAACC,OAAR,GAAkBD,OAAO,CAACC,OAAR,IAAmB,EAArC,CADiB,CAEjB;;MACA,IAAI,gBAAgBD,OAAO,CAACC,OAA5B,EAAqC;QACnC;QACA;QACA,IAAI,CAACD,OAAO,CAACC,OAAR,CAAgBC,UAArB,EAAiC;UAC/B,6BAAuBF,OAAO,CAACC,OAA/B,EAAwC,YAAxC;QACD;;QAED,OAAOD,OAAP;MACD;;MAED,IAAI,KAAKG,kBAAL,CAAwBH,OAAxB,CAAJ,EAAsC;QACpCA,OAAO,CAACC,OAAR,CAAgBC,UAAhB,aAAgC,KAAKE,KAAL,CAAWC,SAA3C,cAAwD,KAAKC,QAA7D;MACD;;MAED,IAAIN,OAAO,CAACC,OAAR,CAAgBC,UAAhB,IAA8BF,OAAO,CAACO,WAA1C,EAAuD;QACrD,IAAMC,GAAG,GAAGR,OAAO,CAACC,OAAR,CAAgBC,UAAhB,CAA2BO,KAA3B,CAAiC,GAAjC,CAAZ;QAEAD,GAAG,CAAC,CAAD,CAAH,GAASR,OAAO,CAACO,WAAjB;QACAP,OAAO,CAACC,OAAR,CAAgBC,UAAhB,GAA6BM,GAAG,CAACE,IAAJ,CAAS,GAAT,CAA7B;MACD;;MAED,OAAOV,OAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,4BAAmBA,OAAnB,EAA4B;MAC1B,OAAO,CAACA,OAAO,CAACC,OAAR,CAAgBC,UAAxB;IACD;;;WA3CD,kBAAgB;MACd,OAAO,IAAIN,0BAAJ,CAA+B;QAACQ,KAAK,EAAE;MAAR,CAA/B,CAAP;IACD;;;EAnBqDO,qB"}
1
+ {"version":3,"names":["sequenceNumbers","WebexTrackingIdInterceptor","sq","get","set","options","headers","trackingid","requiresTrackingId","webex","sessionId","sequence","replayCount","tid","split","join","Interceptor"],"sources":["webex-tracking-id.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst sequenceNumbers = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexTrackingIdInterceptor extends Interceptor {\n /**\n * Sequence number; increments on access\n * @type {Number}\n */\n get sequence() {\n let sq = sequenceNumbers.get(this) || 0;\n\n sq += 1;\n sequenceNumbers.set(this, sq);\n\n return sq;\n }\n\n /**\n * @returns {WebexTrackingIdInterceptor}\n */\n static create() {\n return new WebexTrackingIdInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n // If trackingid is already set, don't overwrite it\n if ('trackingid' in options.headers) {\n // If trackingid is set to null, false, or undefined, delete it to\n // prevent a CORS preflight.\n if (!options.headers.trackingid) {\n Reflect.deleteProperty(options.headers, 'trackingid');\n }\n\n return options;\n }\n\n if (this.requiresTrackingId(options)) {\n options.headers.trackingid = `${this.webex.sessionId}_${this.sequence}`;\n }\n\n if (options.headers.trackingid && options.replayCount) {\n const tid = options.headers.trackingid.split('+');\n\n tid[1] = options.replayCount;\n options.headers.trackingid = tid.join('+');\n }\n\n return options;\n }\n\n /**\n * Determines whether or not include a tracking id\n * @param {Object} options\n * @returns {boolean}\n */\n requiresTrackingId(options) {\n return !options.headers.trackingid;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAIA;AAA6C;AAAA;AAE7C,IAAMA,eAAe,GAAG,sBAAa;;AAErC;AACA;AACA;AAFA,IAGqBC,0BAA0B;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;IAAA;IAAA;IAC7C;AACF;AACA;AACA;IACE,eAAe;MACb,IAAIC,EAAE,GAAGF,eAAe,CAACG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;MAEvCD,EAAE,IAAI,CAAC;MACPF,eAAe,CAACI,GAAG,CAAC,IAAI,EAAEF,EAAE,CAAC;MAE7B,OAAOA,EAAE;IACX;;IAEA;AACF;AACA;EAFE;IAAA;IAAA;IAOA;AACF;AACA;AACA;AACA;IACE,mBAAUG,OAAO,EAAE;MACjBA,OAAO,CAACC,OAAO,GAAGD,OAAO,CAACC,OAAO,IAAI,CAAC,CAAC;MACvC;MACA,IAAI,YAAY,IAAID,OAAO,CAACC,OAAO,EAAE;QACnC;QACA;QACA,IAAI,CAACD,OAAO,CAACC,OAAO,CAACC,UAAU,EAAE;UAC/B,6BAAuBF,OAAO,CAACC,OAAO,EAAE,YAAY,CAAC;QACvD;QAEA,OAAOD,OAAO;MAChB;MAEA,IAAI,IAAI,CAACG,kBAAkB,CAACH,OAAO,CAAC,EAAE;QACpCA,OAAO,CAACC,OAAO,CAACC,UAAU,aAAM,IAAI,CAACE,KAAK,CAACC,SAAS,cAAI,IAAI,CAACC,QAAQ,CAAE;MACzE;MAEA,IAAIN,OAAO,CAACC,OAAO,CAACC,UAAU,IAAIF,OAAO,CAACO,WAAW,EAAE;QACrD,IAAMC,GAAG,GAAGR,OAAO,CAACC,OAAO,CAACC,UAAU,CAACO,KAAK,CAAC,GAAG,CAAC;QAEjDD,GAAG,CAAC,CAAC,CAAC,GAAGR,OAAO,CAACO,WAAW;QAC5BP,OAAO,CAACC,OAAO,CAACC,UAAU,GAAGM,GAAG,CAACE,IAAI,CAAC,GAAG,CAAC;MAC5C;MAEA,OAAOV,OAAO;IAChB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,4BAAmBA,OAAO,EAAE;MAC1B,OAAO,CAACA,OAAO,CAACC,OAAO,CAACC,UAAU;IACpC;EAAC;IAAA;IAAA,OA3CD,kBAAgB;MACd,OAAO,IAAIN,0BAA0B,CAAC;QAACQ,KAAK,EAAE;MAAI,CAAC,CAAC;IACtD;EAAC;EAAA;AAAA,EAnBqDO,qBAAW;AAAA"}
@@ -1,53 +1,33 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.default = void 0;
14
-
15
10
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
16
-
17
11
  var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
18
-
19
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
20
-
21
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
22
-
23
14
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
24
-
25
15
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
26
-
27
16
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
28
-
29
17
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
30
-
31
18
  var _get2 = _interopRequireDefault(require("lodash/get"));
32
-
33
19
  var _common = require("@webex/common");
34
-
35
20
  var _httpCore = require("@webex/http-core");
36
-
37
21
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
38
-
39
22
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
40
-
41
23
  var strings = new _weakMap.default();
24
+
42
25
  /**
43
26
  * @class
44
27
  */
45
-
46
28
  var WebexUserAgentInterceptor = /*#__PURE__*/function (_Interceptor) {
47
29
  (0, _inherits2.default)(WebexUserAgentInterceptor, _Interceptor);
48
-
49
30
  var _super = _createSuper(WebexUserAgentInterceptor);
50
-
51
31
  /**
52
32
  * @param {Object} [options={}]
53
33
  * @param {WebexCore} [options.webex]
@@ -56,7 +36,6 @@ var WebexUserAgentInterceptor = /*#__PURE__*/function (_Interceptor) {
56
36
  */
57
37
  function WebexUserAgentInterceptor() {
58
38
  var _this;
59
-
60
39
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
61
40
  (0, _classCallCheck2.default)(this, WebexUserAgentInterceptor);
62
41
  var libName = (0, _get2.default)(options, 'webex.webex', false) ? 'webex' : 'webex-js-sdk';
@@ -65,11 +44,10 @@ var WebexUserAgentInterceptor = /*#__PURE__*/function (_Interceptor) {
65
44
  strings.set((0, _assertThisInitialized2.default)(_this), "".concat(libName, "/").concat(libVersion, " (").concat(_common.inBrowser ? 'web' : 'node', ")"));
66
45
  return _this;
67
46
  }
47
+
68
48
  /**
69
49
  * @returns {WebexUserAgentInterceptor}
70
50
  */
71
-
72
-
73
51
  (0, _createClass2.default)(WebexUserAgentInterceptor, [{
74
52
  key: "onRequest",
75
53
  value:
@@ -80,40 +58,30 @@ var WebexUserAgentInterceptor = /*#__PURE__*/function (_Interceptor) {
80
58
  */
81
59
  function onRequest(options) {
82
60
  var _this$webex$config, _this$webex;
83
-
84
61
  options.headers = options.headers || {};
85
-
86
62
  var _ref = (_this$webex$config = (_this$webex = this.webex) === null || _this$webex === void 0 ? void 0 : _this$webex.config) !== null && _this$webex$config !== void 0 ? _this$webex$config : {},
87
- appName = _ref.appName,
88
- appVersion = _ref.appVersion,
89
- appPlatform = _ref.appPlatform;
90
-
63
+ appName = _ref.appName,
64
+ appVersion = _ref.appVersion,
65
+ appPlatform = _ref.appPlatform;
91
66
  var sparkUserAgent = "".concat(strings.get(this));
92
-
93
67
  if (appName) {
94
68
  sparkUserAgent += " ".concat(appName, "/").concat(appVersion !== null && appVersion !== void 0 ? appVersion : '0.0');
95
69
  }
96
-
97
70
  if (appPlatform) {
98
71
  sparkUserAgent += " ".concat(appPlatform);
99
72
  }
100
-
101
73
  if (options.uri && options.uri.includes('https://idbroker')) {
102
74
  return options;
103
75
  }
104
-
105
76
  if (options.uri && (options.uri.includes(this.webex.config.credentials.samlUrl) || options.uri.includes(this.webex.config.credentials.tokenUrl) || options.uri.includes(this.webex.config.credentials.authorizeUrl))) {
106
77
  return options;
107
78
  }
108
-
109
79
  if ('spark-user-agent' in options.headers) {
110
80
  if (!options.headers['spark-user-agent']) {
111
81
  (0, _deleteProperty.default)(options.headers, 'spark-user-agent');
112
82
  }
113
-
114
83
  return options;
115
84
  }
116
-
117
85
  options.headers['spark-user-agent'] = sparkUserAgent;
118
86
  return options;
119
87
  }
@@ -127,6 +95,5 @@ var WebexUserAgentInterceptor = /*#__PURE__*/function (_Interceptor) {
127
95
  }]);
128
96
  return WebexUserAgentInterceptor;
129
97
  }(_httpCore.Interceptor);
130
-
131
98
  exports.default = WebexUserAgentInterceptor;
132
99
  //# sourceMappingURL=webex-user-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["strings","WebexUserAgentInterceptor","options","libName","libVersion","set","inBrowser","headers","webex","config","appName","appVersion","appPlatform","sparkUserAgent","get","uri","includes","credentials","samlUrl","tokenUrl","authorizeUrl","Interceptor"],"sources":["webex-user-agent.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser} from '@webex/common';\nimport {Interceptor} from '@webex/http-core';\nimport {get} from 'lodash';\n\nconst strings = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexUserAgentInterceptor extends Interceptor {\n /**\n * @param {Object} [options={}]\n * @param {WebexCore} [options.webex]\n * @private\n * @returns {WebexUserAgentInterceptor}\n */\n constructor(options = {}) {\n const libName = get(options, 'webex.webex', false) ? 'webex' : 'webex-js-sdk';\n const libVersion = get(options, 'webex.version', 'development');\n\n super(options);\n strings.set(this, `${libName}/${libVersion} (${inBrowser ? 'web' : 'node'})`);\n }\n\n /**\n * @returns {WebexUserAgentInterceptor}\n */\n static create() {\n return new WebexUserAgentInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n const {\n appName,\n appVersion,\n appPlatform\n } = this.webex?.config ?? {};\n let sparkUserAgent = `${strings.get(this)}`;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n if (options.uri && options.uri.includes('https://idbroker')) {\n return options;\n }\n\n if (\n options.uri &&\n (\n options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl)\n )\n ) {\n return options;\n }\n\n if ('spark-user-agent' in options.headers) {\n if (!options.headers['spark-user-agent']) {\n Reflect.deleteProperty(options.headers, 'spark-user-agent');\n }\n\n return options;\n }\n\n options.headers['spark-user-agent'] = sparkUserAgent;\n\n return options;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AACA;;;;;;AAGA,IAAMA,OAAO,GAAG,sBAAhB;AAEA;AACA;AACA;;IACqBC,yB;;;;;EACnB;AACF;AACA;AACA;AACA;AACA;EACE,qCAA0B;IAAA;;IAAA,IAAdC,OAAc,uEAAJ,EAAI;IAAA;IACxB,IAAMC,OAAO,GAAG,mBAAID,OAAJ,EAAa,aAAb,EAA4B,KAA5B,IAAqC,OAArC,GAA+C,cAA/D;IACA,IAAME,UAAU,GAAG,mBAAIF,OAAJ,EAAa,eAAb,EAA8B,aAA9B,CAAnB;IAEA,0BAAMA,OAAN;IACAF,OAAO,CAACK,GAAR,wDAAqBF,OAArB,cAAgCC,UAAhC,eAA+CE,iBAAA,GAAY,KAAZ,GAAoB,MAAnE;IALwB;EAMzB;EAED;AACF;AACA;;;;;;IAKE;AACF;AACA;AACA;AACA;IACE,mBAAUJ,OAAV,EAAmB;MAAA;;MACjBA,OAAO,CAACK,OAAR,GAAkBL,OAAO,CAACK,OAAR,IAAmB,EAArC;;MACA,gDAII,KAAKC,KAJT,gDAII,YAAYC,MAJhB,mEAI0B,EAJ1B;MAAA,IACEC,OADF,QACEA,OADF;MAAA,IAEEC,UAFF,QAEEA,UAFF;MAAA,IAGEC,WAHF,QAGEA,WAHF;;MAKA,IAAIC,cAAc,aAAMb,OAAO,CAACc,GAAR,CAAY,IAAZ,CAAN,CAAlB;;MAEA,IAAIJ,OAAJ,EAAa;QACXG,cAAc,eAAQH,OAAR,cAAmBC,UAAnB,aAAmBA,UAAnB,cAAmBA,UAAnB,GAAiC,KAAjC,CAAd;MACD;;MAED,IAAIC,WAAJ,EAAiB;QACfC,cAAc,eAAQD,WAAR,CAAd;MACD;;MAED,IAAIV,OAAO,CAACa,GAAR,IAAeb,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,kBAArB,CAAnB,EAA6D;QAC3D,OAAOd,OAAP;MACD;;MAED,IACEA,OAAO,CAACa,GAAR,KAEEb,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,KAAKR,KAAL,CAAWC,MAAX,CAAkBQ,WAAlB,CAA8BC,OAAnD,KACAhB,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,KAAKR,KAAL,CAAWC,MAAX,CAAkBQ,WAAlB,CAA8BE,QAAnD,CADA,IAEAjB,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,KAAKR,KAAL,CAAWC,MAAX,CAAkBQ,WAAlB,CAA8BG,YAAnD,CAJF,CADF,EAOE;QACA,OAAOlB,OAAP;MACD;;MAED,IAAI,sBAAsBA,OAAO,CAACK,OAAlC,EAA2C;QACzC,IAAI,CAACL,OAAO,CAACK,OAAR,CAAgB,kBAAhB,CAAL,EAA0C;UACxC,6BAAuBL,OAAO,CAACK,OAA/B,EAAwC,kBAAxC;QACD;;QAED,OAAOL,OAAP;MACD;;MAEDA,OAAO,CAACK,OAAR,CAAgB,kBAAhB,IAAsCM,cAAtC;MAEA,OAAOX,OAAP;IACD;;;WApDD,kBAAgB;MACd,OAAO,IAAID,yBAAJ,CAA8B;QAACO,KAAK,EAAE;MAAR,CAA9B,CAAP;IACD;;;EApBoDa,qB"}
1
+ {"version":3,"names":["strings","WebexUserAgentInterceptor","options","libName","libVersion","set","inBrowser","headers","webex","config","appName","appVersion","appPlatform","sparkUserAgent","get","uri","includes","credentials","samlUrl","tokenUrl","authorizeUrl","Interceptor"],"sources":["webex-user-agent.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser} from '@webex/common';\nimport {Interceptor} from '@webex/http-core';\nimport {get} from 'lodash';\n\nconst strings = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexUserAgentInterceptor extends Interceptor {\n /**\n * @param {Object} [options={}]\n * @param {WebexCore} [options.webex]\n * @private\n * @returns {WebexUserAgentInterceptor}\n */\n constructor(options = {}) {\n const libName = get(options, 'webex.webex', false) ? 'webex' : 'webex-js-sdk';\n const libVersion = get(options, 'webex.version', 'development');\n\n super(options);\n strings.set(this, `${libName}/${libVersion} (${inBrowser ? 'web' : 'node'})`);\n }\n\n /**\n * @returns {WebexUserAgentInterceptor}\n */\n static create() {\n return new WebexUserAgentInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n const {appName, appVersion, appPlatform} = this.webex?.config ?? {};\n let sparkUserAgent = `${strings.get(this)}`;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n if (options.uri && options.uri.includes('https://idbroker')) {\n return options;\n }\n\n if (\n options.uri &&\n (options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl))\n ) {\n return options;\n }\n\n if ('spark-user-agent' in options.headers) {\n if (!options.headers['spark-user-agent']) {\n Reflect.deleteProperty(options.headers, 'spark-user-agent');\n }\n\n return options;\n }\n\n options.headers['spark-user-agent'] = sparkUserAgent;\n\n return options;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAIA;AACA;AAA6C;AAAA;AAG7C,IAAMA,OAAO,GAAG,sBAAa;;AAE7B;AACA;AACA;AAFA,IAGqBC,yBAAyB;EAAA;EAAA;EAC5C;AACF;AACA;AACA;AACA;AACA;EACE,qCAA0B;IAAA;IAAA,IAAdC,OAAO,uEAAG,CAAC,CAAC;IAAA;IACtB,IAAMC,OAAO,GAAG,mBAAID,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,GAAG,OAAO,GAAG,cAAc;IAC7E,IAAME,UAAU,GAAG,mBAAIF,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC;IAE/D,0BAAMA,OAAO;IACbF,OAAO,CAACK,GAAG,wDAAUF,OAAO,cAAIC,UAAU,eAAKE,iBAAS,GAAG,KAAK,GAAG,MAAM,OAAI;IAAC;EAChF;;EAEA;AACF;AACA;EAFE;IAAA;IAAA;IAOA;AACF;AACA;AACA;AACA;IACE,mBAAUJ,OAAO,EAAE;MAAA;MACjBA,OAAO,CAACK,OAAO,GAAGL,OAAO,CAACK,OAAO,IAAI,CAAC,CAAC;MACvC,gDAA2C,IAAI,CAACC,KAAK,gDAAV,YAAYC,MAAM,mEAAI,CAAC,CAAC;QAA5DC,OAAO,QAAPA,OAAO;QAAEC,UAAU,QAAVA,UAAU;QAAEC,WAAW,QAAXA,WAAW;MACvC,IAAIC,cAAc,aAAMb,OAAO,CAACc,GAAG,CAAC,IAAI,CAAC,CAAE;MAE3C,IAAIJ,OAAO,EAAE;QACXG,cAAc,eAAQH,OAAO,cAAIC,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,KAAK,CAAE;MACxD;MAEA,IAAIC,WAAW,EAAE;QACfC,cAAc,eAAQD,WAAW,CAAE;MACrC;MAEA,IAAIV,OAAO,CAACa,GAAG,IAAIb,OAAO,CAACa,GAAG,CAACC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAC3D,OAAOd,OAAO;MAChB;MAEA,IACEA,OAAO,CAACa,GAAG,KACVb,OAAO,CAACa,GAAG,CAACC,QAAQ,CAAC,IAAI,CAACR,KAAK,CAACC,MAAM,CAACQ,WAAW,CAACC,OAAO,CAAC,IAC1DhB,OAAO,CAACa,GAAG,CAACC,QAAQ,CAAC,IAAI,CAACR,KAAK,CAACC,MAAM,CAACQ,WAAW,CAACE,QAAQ,CAAC,IAC5DjB,OAAO,CAACa,GAAG,CAACC,QAAQ,CAAC,IAAI,CAACR,KAAK,CAACC,MAAM,CAACQ,WAAW,CAACG,YAAY,CAAC,CAAC,EACnE;QACA,OAAOlB,OAAO;MAChB;MAEA,IAAI,kBAAkB,IAAIA,OAAO,CAACK,OAAO,EAAE;QACzC,IAAI,CAACL,OAAO,CAACK,OAAO,CAAC,kBAAkB,CAAC,EAAE;UACxC,6BAAuBL,OAAO,CAACK,OAAO,EAAE,kBAAkB,CAAC;QAC7D;QAEA,OAAOL,OAAO;MAChB;MAEAA,OAAO,CAACK,OAAO,CAAC,kBAAkB,CAAC,GAAGM,cAAc;MAEpD,OAAOX,OAAO;IAChB;EAAC;IAAA;IAAA,OA9CD,kBAAgB;MACd,OAAO,IAAID,yBAAyB,CAAC;QAACO,KAAK,EAAE;MAAI,CAAC,CAAC;IACrD;EAAC;EAAA;AAAA,EApBoDa,qBAAW;AAAA"}
@@ -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.2"
285
+ version: "3.0.0-beta.21"
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 {\n cappedDebounce,\n Defer,\n tap\n} 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(this.prepareRequest(queue)\n .then((payload) => this.submitHttpRequest(payload)\n .then((res) => this.handleHttpSuccess(res)))\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(queue.map((item) => this.getDeferredForRequest(item)\n .then((defer) => {\n defer.reject(reason);\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((res.body && res.body.items || res.body).map((item) => this.acceptItem(item)));\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(reason.options.body.map((item) => this.getDeferredForRequest(item)\n .then((defer) => {\n defer.reject(reason);\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)\n .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)\n .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)\n .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)\n .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)\n .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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"}