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