@webex/webex-core 3.8.0 → 3.8.1-next.2
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/README.md +87 -27
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -1
- package/dist/interceptors/redirect.js +18 -0
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/lib/batcher.js +1 -1
- package/dist/lib/credentials/credentials.js +1 -1
- package/dist/lib/credentials/token.js +1 -1
- package/dist/lib/services/services.js +1 -1
- package/dist/lib/services-v2/constants.js +17 -0
- package/dist/lib/services-v2/constants.js.map +1 -0
- package/dist/lib/services-v2/index.js +58 -0
- package/dist/lib/services-v2/index.js.map +1 -0
- package/dist/lib/services-v2/interceptors/hostmap.js +64 -0
- package/dist/lib/services-v2/interceptors/hostmap.js.map +1 -0
- package/dist/lib/services-v2/interceptors/server-error.js +77 -0
- package/dist/lib/services-v2/interceptors/server-error.js.map +1 -0
- package/dist/lib/services-v2/interceptors/service.js +137 -0
- package/dist/lib/services-v2/interceptors/service.js.map +1 -0
- package/dist/lib/services-v2/metrics.js +12 -0
- package/dist/lib/services-v2/metrics.js.map +1 -0
- package/dist/lib/services-v2/service-catalog.js +346 -0
- package/dist/lib/services-v2/service-catalog.js.map +1 -0
- package/dist/lib/services-v2/service-detail.js +94 -0
- package/dist/lib/services-v2/service-detail.js.map +1 -0
- package/dist/lib/services-v2/service-fed-ramp.js +13 -0
- package/dist/lib/services-v2/service-fed-ramp.js.map +1 -0
- package/dist/lib/services-v2/services-v2.js +985 -0
- package/dist/lib/services-v2/services-v2.js.map +1 -0
- package/dist/lib/services-v2/types.js +7 -0
- package/dist/lib/services-v2/types.js.map +1 -0
- package/dist/plugins/logger.js +1 -1
- package/dist/webex-core.js +2 -2
- package/dist/webex-core.js.map +1 -1
- package/package.json +13 -13
- package/src/index.js +10 -0
- package/src/interceptors/redirect.js +28 -0
- package/src/lib/services-v2/README.md +3 -0
- package/src/lib/services-v2/constants.ts +21 -0
- package/src/lib/services-v2/index.ts +23 -0
- package/src/lib/services-v2/interceptors/hostmap.js +36 -0
- package/src/lib/services-v2/interceptors/server-error.js +48 -0
- package/src/lib/services-v2/interceptors/service.js +101 -0
- package/src/lib/services-v2/metrics.js +4 -0
- package/src/lib/services-v2/service-catalog.ts +360 -0
- package/src/lib/services-v2/service-detail.ts +97 -0
- package/src/lib/services-v2/service-fed-ramp.ts +5 -0
- package/src/lib/services-v2/services-v2.js +988 -0
- package/src/lib/services-v2/types.ts +13 -0
- package/test/fixtures/host-catalog-v2.ts +249 -0
- package/test/integration/spec/services/services.js +12 -10
- package/test/unit/spec/interceptors/redirect.js +72 -0
- package/test/unit/spec/services-v2/service-catalog.ts +288 -0
- package/test/unit/spec/services-v2/service-detail.ts +147 -0
- package/test/unit/spec/services-v2/services-v2.ts +562 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.default = void 0;
|
|
10
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
11
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
16
|
+
var _httpCore = require("@webex/http-core");
|
|
17
|
+
var _webexHttpError = _interopRequireDefault(require("../../webex-http-error"));
|
|
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); }; }
|
|
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; } } /*!
|
|
20
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Changes server url when it fails
|
|
24
|
+
*/
|
|
25
|
+
var ServerErrorInterceptor = exports.default = /*#__PURE__*/function (_Interceptor) {
|
|
26
|
+
(0, _inherits2.default)(ServerErrorInterceptor, _Interceptor);
|
|
27
|
+
var _super = _createSuper(ServerErrorInterceptor);
|
|
28
|
+
function ServerErrorInterceptor() {
|
|
29
|
+
(0, _classCallCheck2.default)(this, ServerErrorInterceptor);
|
|
30
|
+
return _super.apply(this, arguments);
|
|
31
|
+
}
|
|
32
|
+
(0, _createClass2.default)(ServerErrorInterceptor, [{
|
|
33
|
+
key: "onResponseError",
|
|
34
|
+
value:
|
|
35
|
+
/**
|
|
36
|
+
* @see Interceptor#onResponseError
|
|
37
|
+
* @param {Object} options
|
|
38
|
+
* @param {Object} reason
|
|
39
|
+
* @returns {Object}
|
|
40
|
+
*/
|
|
41
|
+
function onResponseError(options, reason) {
|
|
42
|
+
if ((reason instanceof _webexHttpError.default.InternalServerError || reason instanceof _webexHttpError.default.BadGateway || reason instanceof _webexHttpError.default.ServiceUnavailable) && options.uri) {
|
|
43
|
+
var feature = this.webex.internal.device.features.developer.get('web-high-availability');
|
|
44
|
+
if (feature && feature.value) {
|
|
45
|
+
this.webex.internal.metrics.submitClientMetrics('web-ha', {
|
|
46
|
+
fields: {
|
|
47
|
+
success: false
|
|
48
|
+
},
|
|
49
|
+
tags: {
|
|
50
|
+
action: 'failed',
|
|
51
|
+
error: reason.message,
|
|
52
|
+
url: options.uri
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return _promise.default.resolve(this.webex.internal.services.markFailedUrl(options.uri)).then(function () {
|
|
56
|
+
return _promise.default.reject(reason);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return _promise.default.reject(reason);
|
|
61
|
+
}
|
|
62
|
+
}], [{
|
|
63
|
+
key: "create",
|
|
64
|
+
value:
|
|
65
|
+
/**
|
|
66
|
+
* @returns {HAMessagingInterceptor}
|
|
67
|
+
*/
|
|
68
|
+
function create() {
|
|
69
|
+
// eslint-disable-next-line no-invalid-this
|
|
70
|
+
return new ServerErrorInterceptor({
|
|
71
|
+
webex: this
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}]);
|
|
75
|
+
return ServerErrorInterceptor;
|
|
76
|
+
}(_httpCore.Interceptor);
|
|
77
|
+
//# sourceMappingURL=server-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_httpCore","require","_webexHttpError","_interopRequireDefault","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","ServerErrorInterceptor","exports","_Interceptor","_inherits2","_super","_classCallCheck2","_createClass2","key","value","onResponseError","options","reason","WebexHttpError","InternalServerError","BadGateway","ServiceUnavailable","uri","feature","webex","internal","device","features","developer","get","metrics","submitClientMetrics","fields","success","tags","action","error","message","url","_promise","resolve","services","markFailedUrl","then","reject","create","Interceptor"],"sources":["server-error.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\nimport WebexHttpError from '../../webex-http-error';\n/**\n * Changes server url when it fails\n */\nexport default class ServerErrorInterceptor extends Interceptor {\n /**\n * @returns {HAMessagingInterceptor}\n */\n static create() {\n // eslint-disable-next-line no-invalid-this\n return new ServerErrorInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Object} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n if (\n (reason instanceof WebexHttpError.InternalServerError ||\n reason instanceof WebexHttpError.BadGateway ||\n reason instanceof WebexHttpError.ServiceUnavailable) &&\n options.uri\n ) {\n const feature = this.webex.internal.device.features.developer.get('web-high-availability');\n\n if (feature && feature.value) {\n this.webex.internal.metrics.submitClientMetrics('web-ha', {\n fields: {success: false},\n tags: {action: 'failed', error: reason.message, url: options.uri},\n });\n\n return Promise.resolve(this.webex.internal.services.markFailedUrl(options.uri)).then(() =>\n Promise.reject(reason)\n );\n }\n }\n\n return Promise.reject(reason);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAoD,SAAAG,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBALpD;AACA;AACA;AAIA;AACA;AACA;AAFA,IAGqBC,sBAAsB,GAAAC,OAAA,CAAAjB,OAAA,0BAAAkB,YAAA;EAAA,IAAAC,UAAA,CAAAnB,OAAA,EAAAgB,sBAAA,EAAAE,YAAA;EAAA,IAAAE,MAAA,GAAA3B,YAAA,CAAAuB,sBAAA;EAAA,SAAAA,uBAAA;IAAA,IAAAK,gBAAA,CAAArB,OAAA,QAAAgB,sBAAA;IAAA,OAAAI,MAAA,CAAAd,KAAA,OAAAD,SAAA;EAAA;EAAA,IAAAiB,aAAA,CAAAtB,OAAA,EAAAgB,sBAAA;IAAAO,GAAA;IAAAC,KAAA;IASzC;AACF;AACA;AACA;AACA;AACA;IACE,SAAAC,gBAAgBC,OAAO,EAAEC,MAAM,EAAE;MAC/B,IACE,CAACA,MAAM,YAAYC,uBAAc,CAACC,mBAAmB,IACnDF,MAAM,YAAYC,uBAAc,CAACE,UAAU,IAC3CH,MAAM,YAAYC,uBAAc,CAACG,kBAAkB,KACrDL,OAAO,CAACM,GAAG,EACX;QACA,IAAMC,OAAO,GAAG,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACC,GAAG,CAAC,uBAAuB,CAAC;QAE1F,IAAIN,OAAO,IAAIA,OAAO,CAACT,KAAK,EAAE;UAC5B,IAAI,CAACU,KAAK,CAACC,QAAQ,CAACK,OAAO,CAACC,mBAAmB,CAAC,QAAQ,EAAE;YACxDC,MAAM,EAAE;cAACC,OAAO,EAAE;YAAK,CAAC;YACxBC,IAAI,EAAE;cAACC,MAAM,EAAE,QAAQ;cAAEC,KAAK,EAAEnB,MAAM,CAACoB,OAAO;cAAEC,GAAG,EAAEtB,OAAO,CAACM;YAAG;UAClE,CAAC,CAAC;UAEF,OAAOiB,QAAA,CAAAjD,OAAA,CAAQkD,OAAO,CAAC,IAAI,CAAChB,KAAK,CAACC,QAAQ,CAACgB,QAAQ,CAACC,aAAa,CAAC1B,OAAO,CAACM,GAAG,CAAC,CAAC,CAACqB,IAAI,CAAC;YAAA,OACnFJ,QAAA,CAAAjD,OAAA,CAAQsD,MAAM,CAAC3B,MAAM,CAAC;UAAA,CACxB,CAAC;QACH;MACF;MAEA,OAAOsB,QAAA,CAAAjD,OAAA,CAAQsD,MAAM,CAAC3B,MAAM,CAAC;IAC/B;EAAC;IAAAJ,GAAA;IAAAC,KAAA;IApCD;AACF;AACA;IACE,SAAA+B,OAAA,EAAgB;MACd;MACA,OAAO,IAAIvC,sBAAsB,CAAC;QAACkB,KAAK,EAAE;MAAI,CAAC,CAAC;IAClD;EAAC;EAAA,OAAAlB,sBAAA;AAAA,EAPiDwC,qBAAW"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.default = void 0;
|
|
10
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
11
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
14
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
15
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
16
|
+
var _httpCore = require("@webex/http-core");
|
|
17
|
+
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); }; }
|
|
18
|
+
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; } } /*!
|
|
19
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
20
|
+
*/
|
|
21
|
+
var trailingSlashes = /(?:^\/)|(?:\/$)/;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @class
|
|
25
|
+
*/
|
|
26
|
+
var ServiceInterceptor = exports.default = /*#__PURE__*/function (_Interceptor) {
|
|
27
|
+
(0, _inherits2.default)(ServiceInterceptor, _Interceptor);
|
|
28
|
+
var _super = _createSuper(ServiceInterceptor);
|
|
29
|
+
function ServiceInterceptor() {
|
|
30
|
+
(0, _classCallCheck2.default)(this, ServiceInterceptor);
|
|
31
|
+
return _super.apply(this, arguments);
|
|
32
|
+
}
|
|
33
|
+
(0, _createClass2.default)(ServiceInterceptor, [{
|
|
34
|
+
key: "onRequest",
|
|
35
|
+
value: /* eslint-disable no-param-reassign */
|
|
36
|
+
/**
|
|
37
|
+
* @see Interceptor#onRequest
|
|
38
|
+
* @param {Object} options - The request PTO.
|
|
39
|
+
* @returns {Object} - The mutated request PTO.
|
|
40
|
+
*/
|
|
41
|
+
function onRequest(options) {
|
|
42
|
+
var _this = this;
|
|
43
|
+
// Validate that the PTO includes a uri property.
|
|
44
|
+
if (options.uri) {
|
|
45
|
+
return options;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Normalize and validate the PTO.
|
|
49
|
+
this.normalizeOptions(options);
|
|
50
|
+
this.validateOptions(options);
|
|
51
|
+
|
|
52
|
+
// Destructure commonly referenced namespaces.
|
|
53
|
+
var services = this.webex.internal.services;
|
|
54
|
+
var service = options.service,
|
|
55
|
+
resource = options.resource,
|
|
56
|
+
waitForServiceTimeout = options.waitForServiceTimeout;
|
|
57
|
+
|
|
58
|
+
// Attempt to collect the service url.
|
|
59
|
+
return services.waitForService({
|
|
60
|
+
name: service,
|
|
61
|
+
timeout: waitForServiceTimeout
|
|
62
|
+
}).then(function (serviceUrl) {
|
|
63
|
+
// Generate the combined service url and resource.
|
|
64
|
+
options.uri = _this.generateUri(serviceUrl, resource);
|
|
65
|
+
return options;
|
|
66
|
+
}).catch(function () {
|
|
67
|
+
return _promise.default.reject(new Error("service-interceptor: '".concat(service, "' is not a known service")));
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* eslint-disable class-methods-use-this */
|
|
72
|
+
/**
|
|
73
|
+
* Generate a usable request uri string from a service url and a resouce.
|
|
74
|
+
*
|
|
75
|
+
* @param {string} serviceUrl - The service url.
|
|
76
|
+
* @param {string} [resource] - The resouce to be appended to the service url.
|
|
77
|
+
* @returns {string} - The combined service url and resource.
|
|
78
|
+
*/
|
|
79
|
+
}, {
|
|
80
|
+
key: "generateUri",
|
|
81
|
+
value: function generateUri(serviceUrl) {
|
|
82
|
+
var resource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
83
|
+
var formattedService = serviceUrl.replace(trailingSlashes, '');
|
|
84
|
+
var formattedResource = resource.replace(trailingSlashes, '');
|
|
85
|
+
return "".concat(formattedService, "/").concat(formattedResource);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Normalizes request options relative to service identification.
|
|
90
|
+
*
|
|
91
|
+
* @param {Object} options - The request PTO.
|
|
92
|
+
* @returns {Object} - The mutated request PTO.
|
|
93
|
+
*/
|
|
94
|
+
}, {
|
|
95
|
+
key: "normalizeOptions",
|
|
96
|
+
value: function normalizeOptions(options) {
|
|
97
|
+
// Validate if the api property is used.
|
|
98
|
+
if (options.api) {
|
|
99
|
+
// Assign the service property the value of the api property if necessary.
|
|
100
|
+
options.service = options.service || options.api;
|
|
101
|
+
delete options.api;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Validates that the appropriate options for this interceptor are present.
|
|
107
|
+
*
|
|
108
|
+
* @param {Object} options - The request PTO.
|
|
109
|
+
* @returns {Object} - The mutated request PTO.
|
|
110
|
+
*/
|
|
111
|
+
}, {
|
|
112
|
+
key: "validateOptions",
|
|
113
|
+
value: function validateOptions(options) {
|
|
114
|
+
if (!options.resource) {
|
|
115
|
+
throw new Error('a `resource` parameter is required');
|
|
116
|
+
}
|
|
117
|
+
if (!options.service) {
|
|
118
|
+
throw new Error("a valid 'service' parameter is required");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/* eslint-enable class-methods-use-this, no-param-reassign */
|
|
122
|
+
}], [{
|
|
123
|
+
key: "create",
|
|
124
|
+
value:
|
|
125
|
+
/**
|
|
126
|
+
* @returns {ServiceInterceptor}
|
|
127
|
+
*/
|
|
128
|
+
function create() {
|
|
129
|
+
/* eslint no-invalid-this: [0] */
|
|
130
|
+
return new ServiceInterceptor({
|
|
131
|
+
webex: this
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}]);
|
|
135
|
+
return ServiceInterceptor;
|
|
136
|
+
}(_httpCore.Interceptor);
|
|
137
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_httpCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","trailingSlashes","ServiceInterceptor","exports","_Interceptor","_inherits2","_super","_classCallCheck2","_createClass2","key","value","onRequest","options","_this","uri","normalizeOptions","validateOptions","services","webex","internal","service","resource","waitForServiceTimeout","waitForService","name","timeout","then","serviceUrl","generateUri","catch","_promise","reject","Error","concat","length","undefined","formattedService","replace","formattedResource","api","create","Interceptor"],"sources":["service.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n/**\n * @class\n */\nexport default class ServiceInterceptor extends Interceptor {\n /**\n * @returns {ServiceInterceptor}\n */\n static create() {\n /* eslint no-invalid-this: [0] */\n return new ServiceInterceptor({webex: this});\n }\n\n /* eslint-disable no-param-reassign */\n /**\n * @see Interceptor#onRequest\n * @param {Object} options - The request PTO.\n * @returns {Object} - The mutated request PTO.\n */\n onRequest(options) {\n // Validate that the PTO includes a uri property.\n if (options.uri) {\n return options;\n }\n\n // Normalize and validate the PTO.\n this.normalizeOptions(options);\n this.validateOptions(options);\n\n // Destructure commonly referenced namespaces.\n const {services} = this.webex.internal;\n const {service, resource, waitForServiceTimeout} = options;\n\n // Attempt to collect the service url.\n return services\n .waitForService({name: service, timeout: waitForServiceTimeout})\n .then((serviceUrl) => {\n // Generate the combined service url and resource.\n options.uri = this.generateUri(serviceUrl, resource);\n\n return options;\n })\n .catch(() =>\n Promise.reject(new Error(`service-interceptor: '${service}' is not a known service`))\n );\n }\n\n /* eslint-disable class-methods-use-this */\n /**\n * Generate a usable request uri string from a service url and a resouce.\n *\n * @param {string} serviceUrl - The service url.\n * @param {string} [resource] - The resouce to be appended to the service url.\n * @returns {string} - The combined service url and resource.\n */\n generateUri(serviceUrl, resource = '') {\n const formattedService = serviceUrl.replace(trailingSlashes, '');\n const formattedResource = resource.replace(trailingSlashes, '');\n\n return `${formattedService}/${formattedResource}`;\n }\n\n /**\n * Normalizes request options relative to service identification.\n *\n * @param {Object} options - The request PTO.\n * @returns {Object} - The mutated request PTO.\n */\n normalizeOptions(options) {\n // Validate if the api property is used.\n if (options.api) {\n // Assign the service property the value of the api property if necessary.\n options.service = options.service || options.api;\n delete options.api;\n }\n }\n\n /**\n * Validates that the appropriate options for this interceptor are present.\n *\n * @param {Object} options - The request PTO.\n * @returns {Object} - The mutated request PTO.\n */\n validateOptions(options) {\n if (!options.resource) {\n throw new Error('a `resource` parameter is required');\n }\n\n if (!options.service) {\n throw new Error(\"a valid 'service' parameter is required\");\n }\n }\n /* eslint-enable class-methods-use-this, no-param-reassign */\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
// Metrics for service catalog
|
|
9
|
+
var _default = exports.default = {
|
|
10
|
+
JS_SDK_SERVICE_NOT_FOUND: 'JS_SDK_SERVICE_NOT_FOUND'
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_default","exports","default","JS_SDK_SERVICE_NOT_FOUND"],"sources":["metrics.js"],"sourcesContent":["// Metrics for service catalog\nexport default {\n JS_SDK_SERVICE_NOT_FOUND: 'JS_SDK_SERVICE_NOT_FOUND',\n};\n"],"mappings":";;;;;;;AAAA;AAAA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACe;EACbC,wBAAwB,EAAE;AAC5B,CAAC"}
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
|
|
4
|
+
var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
|
|
5
|
+
var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
|
|
6
|
+
var _Array$isArray = require("@babel/runtime-corejs2/core-js/array/is-array");
|
|
7
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
8
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
9
|
+
_Object$defineProperty(exports, "__esModule", {
|
|
10
|
+
value: true
|
|
11
|
+
});
|
|
12
|
+
exports.default = void 0;
|
|
13
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
|
|
15
|
+
var _ampersandState = _interopRequireDefault(require("ampersand-state"));
|
|
16
|
+
var _lodash = require("lodash");
|
|
17
|
+
var _serviceDetail = _interopRequireDefault(require("./service-detail"));
|
|
18
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
19
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
20
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
21
|
+
/**
|
|
22
|
+
* @class
|
|
23
|
+
*/
|
|
24
|
+
var ServiceCatalog = _ampersandState.default.extend({
|
|
25
|
+
namespace: 'ServiceCatalog',
|
|
26
|
+
props: {
|
|
27
|
+
serviceGroups: ['object', true, function () {
|
|
28
|
+
return {
|
|
29
|
+
discovery: [],
|
|
30
|
+
override: [],
|
|
31
|
+
preauth: [],
|
|
32
|
+
postauth: [],
|
|
33
|
+
signin: []
|
|
34
|
+
};
|
|
35
|
+
}],
|
|
36
|
+
status: ['object', true, function () {
|
|
37
|
+
return {
|
|
38
|
+
discovery: {
|
|
39
|
+
ready: false,
|
|
40
|
+
collecting: false
|
|
41
|
+
},
|
|
42
|
+
override: {
|
|
43
|
+
ready: false,
|
|
44
|
+
collecting: false
|
|
45
|
+
},
|
|
46
|
+
preauth: {
|
|
47
|
+
ready: false,
|
|
48
|
+
collecting: false
|
|
49
|
+
},
|
|
50
|
+
postauth: {
|
|
51
|
+
ready: false,
|
|
52
|
+
collecting: false
|
|
53
|
+
},
|
|
54
|
+
signin: {
|
|
55
|
+
ready: false,
|
|
56
|
+
collecting: false
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}],
|
|
60
|
+
isReady: ['boolean', false, false],
|
|
61
|
+
allowedDomains: ['array', false, function () {
|
|
62
|
+
return [];
|
|
63
|
+
}]
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* @private
|
|
67
|
+
* Get all service details for a given service group or return all details if no group is specified.
|
|
68
|
+
* @param {string} serviceGroup - The name of the service group to retrieve details for.
|
|
69
|
+
* @returns {Array<IServiceDetail>} - An array of service details.
|
|
70
|
+
*/
|
|
71
|
+
_getAllServiceDetails: function _getAllServiceDetails(serviceGroup) {
|
|
72
|
+
var serviceDetails = typeof serviceGroup === 'string' ? this.serviceGroups[serviceGroup] || [] : [].concat((0, _toConsumableArray2.default)(this.serviceGroups.override), (0, _toConsumableArray2.default)(this.serviceGroups.postauth), (0, _toConsumableArray2.default)(this.serviceGroups.signin), (0, _toConsumableArray2.default)(this.serviceGroups.preauth), (0, _toConsumableArray2.default)(this.serviceGroups.discovery));
|
|
73
|
+
return serviceDetails;
|
|
74
|
+
},
|
|
75
|
+
/**
|
|
76
|
+
* @private
|
|
77
|
+
* Search the service details array to locate a `ServiceDetails`
|
|
78
|
+
* class object based on its id.
|
|
79
|
+
* @param {string} clusterId
|
|
80
|
+
* @param {string} [serviceGroup]
|
|
81
|
+
* @returns {IServiceDetail}
|
|
82
|
+
*/
|
|
83
|
+
_getServiceDetail: function _getServiceDetail(clusterId, serviceGroup) {
|
|
84
|
+
var serviceDetails = this._getAllServiceDetails(serviceGroup);
|
|
85
|
+
return serviceDetails.find(function (serviceDetail) {
|
|
86
|
+
return serviceDetail.id === clusterId;
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
/**
|
|
90
|
+
* @private
|
|
91
|
+
* Safely load one or more `ServiceDetail`s into this `ServiceCatalog` instance.
|
|
92
|
+
* @param {string} serviceGroup
|
|
93
|
+
* @param {Array<ServiceDetail>} serviceDetails
|
|
94
|
+
* @returns {void}
|
|
95
|
+
*/
|
|
96
|
+
_loadServiceDetails: function _loadServiceDetails(serviceGroup, serviceDetails) {
|
|
97
|
+
var _this = this;
|
|
98
|
+
// declare namespaces outside of loop
|
|
99
|
+
var existingService;
|
|
100
|
+
serviceDetails.forEach(function (service) {
|
|
101
|
+
existingService = _this._getServiceDetail(service.id, serviceGroup);
|
|
102
|
+
if (!existingService) {
|
|
103
|
+
_this.serviceGroups[serviceGroup].push(service);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
/**
|
|
108
|
+
* @private
|
|
109
|
+
* Safely unload one or more `ServiceDetail`s into this `Services` instance
|
|
110
|
+
* @param {string} serviceGroup
|
|
111
|
+
* @param {Array<ServiceDetail>} serviceDetails
|
|
112
|
+
* @returns {void}
|
|
113
|
+
*/
|
|
114
|
+
_unloadServiceDetails: function _unloadServiceDetails(serviceGroup, serviceDetails) {
|
|
115
|
+
var _this2 = this;
|
|
116
|
+
// declare namespaces outside of loop
|
|
117
|
+
var existingService;
|
|
118
|
+
serviceDetails.forEach(function (service) {
|
|
119
|
+
existingService = _this2._getServiceDetail(service.id, serviceGroup);
|
|
120
|
+
if (existingService) {
|
|
121
|
+
_this2.serviceGroups[serviceGroup].splice(_this2.serviceGroups[serviceGroup].indexOf(existingService), 1);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
/**
|
|
126
|
+
* Clear all collected catalog data and reset catalog status.
|
|
127
|
+
*
|
|
128
|
+
* @returns {void}
|
|
129
|
+
*/
|
|
130
|
+
clean: function clean() {
|
|
131
|
+
this.serviceGroups.preauth.length = 0;
|
|
132
|
+
this.serviceGroups.signin.length = 0;
|
|
133
|
+
this.serviceGroups.postauth.length = 0;
|
|
134
|
+
this.status.preauth = {
|
|
135
|
+
ready: false
|
|
136
|
+
};
|
|
137
|
+
this.status.signin = {
|
|
138
|
+
ready: false
|
|
139
|
+
};
|
|
140
|
+
this.status.postauth = {
|
|
141
|
+
ready: false
|
|
142
|
+
};
|
|
143
|
+
},
|
|
144
|
+
/**
|
|
145
|
+
* Search over all service groups to find a cluster id based
|
|
146
|
+
* on a given url.
|
|
147
|
+
* @param {string} url - Must be parsable by `Url`
|
|
148
|
+
* @returns {string | undefined} - ClusterId of a given url
|
|
149
|
+
*/
|
|
150
|
+
findClusterId: function findClusterId(url) {
|
|
151
|
+
try {
|
|
152
|
+
var _allServiceDetails$fi;
|
|
153
|
+
var incomingUrlObj = new URL(url);
|
|
154
|
+
var allServiceDetails = this._getAllServiceDetails();
|
|
155
|
+
return (_allServiceDetails$fi = allServiceDetails.find(function (serviceDetail) {
|
|
156
|
+
return serviceDetail.serviceUrls.find(function (_ref) {
|
|
157
|
+
var host = _ref.host;
|
|
158
|
+
return host === incomingUrlObj.host;
|
|
159
|
+
});
|
|
160
|
+
})) === null || _allServiceDetails$fi === void 0 ? void 0 : _allServiceDetails$fi.id;
|
|
161
|
+
} catch (_unused) {
|
|
162
|
+
// If the URL is invalid or can't be found, return undefined
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
/**
|
|
167
|
+
* Search over all service groups and return a service value from a provided
|
|
168
|
+
* clusterId.
|
|
169
|
+
* @param {object} params
|
|
170
|
+
* @param {string} params.clusterId - clusterId of found service
|
|
171
|
+
* @param {string} [params.serviceGroup] - specify service group
|
|
172
|
+
* @returns {object} service
|
|
173
|
+
* @returns {string} service.name
|
|
174
|
+
* @returns {string} service.url
|
|
175
|
+
*/
|
|
176
|
+
findServiceFromClusterId: function findServiceFromClusterId() {
|
|
177
|
+
var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
178
|
+
clusterId = _ref2.clusterId,
|
|
179
|
+
serviceGroup = _ref2.serviceGroup;
|
|
180
|
+
var serviceDetails = this._getServiceDetail(clusterId, serviceGroup);
|
|
181
|
+
if (serviceDetails) {
|
|
182
|
+
return {
|
|
183
|
+
name: serviceDetails.serviceName,
|
|
184
|
+
url: serviceDetails.get()
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return undefined;
|
|
188
|
+
},
|
|
189
|
+
/**
|
|
190
|
+
* Find a service based on the provided url.
|
|
191
|
+
* @param {string} url - Must be parsable by `Url`
|
|
192
|
+
* @returns {IServiceDetail} - ServiceDetail assocated with provided url
|
|
193
|
+
*/
|
|
194
|
+
findServiceDetailFromUrl: function findServiceDetailFromUrl(url) {
|
|
195
|
+
var serviceDetails = this._getAllServiceDetails();
|
|
196
|
+
return serviceDetails.find(function (_ref3) {
|
|
197
|
+
var serviceUrls = _ref3.serviceUrls;
|
|
198
|
+
var _iterator = _createForOfIteratorHelper(serviceUrls),
|
|
199
|
+
_step;
|
|
200
|
+
try {
|
|
201
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
202
|
+
var serviceUrl = _step.value;
|
|
203
|
+
if (url.startsWith(serviceUrl.baseUrl)) {
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
} catch (err) {
|
|
208
|
+
_iterator.e(err);
|
|
209
|
+
} finally {
|
|
210
|
+
_iterator.f();
|
|
211
|
+
}
|
|
212
|
+
return false;
|
|
213
|
+
});
|
|
214
|
+
},
|
|
215
|
+
/**
|
|
216
|
+
* Finds an allowed domain that matches a specific url.
|
|
217
|
+
*
|
|
218
|
+
* @param {string} url - The url to match the allowed domains against.
|
|
219
|
+
* @returns {string} - The matching allowed domain.
|
|
220
|
+
*/
|
|
221
|
+
findAllowedDomain: function findAllowedDomain(url) {
|
|
222
|
+
try {
|
|
223
|
+
var urlObj = new URL(url);
|
|
224
|
+
return this.allowedDomains.find(function (allowedDomain) {
|
|
225
|
+
return urlObj.host.includes(allowedDomain);
|
|
226
|
+
});
|
|
227
|
+
} catch (_unused2) {
|
|
228
|
+
// If the URL is invalid or can't be found, return undefined
|
|
229
|
+
return undefined;
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
/**
|
|
233
|
+
* Get a service url from the current services list by name.
|
|
234
|
+
* @param {string} clusterId
|
|
235
|
+
* @param {string} serviceGroup
|
|
236
|
+
* @returns {string}
|
|
237
|
+
*/
|
|
238
|
+
get: function get(clusterId, serviceGroup) {
|
|
239
|
+
var serviceDetail = this._getServiceDetail(clusterId, serviceGroup);
|
|
240
|
+
return serviceDetail ? serviceDetail.get() : undefined;
|
|
241
|
+
},
|
|
242
|
+
/**
|
|
243
|
+
* Get the current allowed domains list.
|
|
244
|
+
*
|
|
245
|
+
* @returns {Array<string>} - the current allowed domains list.
|
|
246
|
+
*/
|
|
247
|
+
getAllowedDomains: function getAllowedDomains() {
|
|
248
|
+
return (0, _toConsumableArray2.default)(this.allowedDomains);
|
|
249
|
+
},
|
|
250
|
+
/**
|
|
251
|
+
* Mark a priority host service url as failed.
|
|
252
|
+
* This will mark the host associated with the
|
|
253
|
+
* `ServiceDetail` to be removed from the its
|
|
254
|
+
* respective host array, and then return the next
|
|
255
|
+
* viable host from the `ServiceDetail` host array,
|
|
256
|
+
* or the `ServiceDetail` default url if no other priority
|
|
257
|
+
* hosts are available, or if `noPriorityHosts` is set to
|
|
258
|
+
* `true`.
|
|
259
|
+
* @param {string} url
|
|
260
|
+
* @returns {string}
|
|
261
|
+
*/
|
|
262
|
+
markFailedServiceUrl: function markFailedServiceUrl(url) {
|
|
263
|
+
var serviceDetails = this._getAllServiceDetails();
|
|
264
|
+
var serviceDetailWithFailedHost = serviceDetails.find(function (serviceDetail) {
|
|
265
|
+
return serviceDetail.failHost(url);
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
// if we couldn't find the url we wanted to fail, return undefined
|
|
269
|
+
if (!serviceDetailWithFailedHost) {
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
return serviceDetailWithFailedHost.get();
|
|
273
|
+
},
|
|
274
|
+
/**
|
|
275
|
+
* Set the allowed domains for the catalog.
|
|
276
|
+
*
|
|
277
|
+
* @param {Array<string>} allowedDomains - allowed domains to be assigned.
|
|
278
|
+
* @returns {void}
|
|
279
|
+
*/
|
|
280
|
+
setAllowedDomains: function setAllowedDomains(allowedDomains) {
|
|
281
|
+
this.allowedDomains = (0, _toConsumableArray2.default)(allowedDomains);
|
|
282
|
+
},
|
|
283
|
+
/**
|
|
284
|
+
*
|
|
285
|
+
* @param {Array<string>} newAllowedDomains - new allowed domains to add to existing set of allowed domains
|
|
286
|
+
* @returns {void}
|
|
287
|
+
*/
|
|
288
|
+
addAllowedDomains: function addAllowedDomains(newAllowedDomains) {
|
|
289
|
+
this.allowedDomains = (0, _lodash.union)(this.allowedDomains, newAllowedDomains);
|
|
290
|
+
},
|
|
291
|
+
/**
|
|
292
|
+
* Update the current list of `ServiceDetail`s against a provided
|
|
293
|
+
* service hostmap.
|
|
294
|
+
* @emits ServiceCatalog#preauthorized
|
|
295
|
+
* @emits ServiceCatalog#postauthorized
|
|
296
|
+
* @param {string} serviceGroup
|
|
297
|
+
* @param {Array<IServiceDetail>} serviceDetails
|
|
298
|
+
* @returns {void}
|
|
299
|
+
*/
|
|
300
|
+
updateServiceGroups: function updateServiceGroups(serviceGroup, serviceDetails) {
|
|
301
|
+
var _this3 = this;
|
|
302
|
+
var currentServiceDetails = this.serviceGroups[serviceGroup];
|
|
303
|
+
var unusedServicesDetails = currentServiceDetails.filter(function (serviceDetail) {
|
|
304
|
+
return serviceDetails.every(function (_ref4) {
|
|
305
|
+
var id = _ref4.id;
|
|
306
|
+
return id !== serviceDetail.id;
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
this._unloadServiceDetails(serviceGroup, unusedServicesDetails);
|
|
310
|
+
serviceDetails.forEach(function (serviceObj) {
|
|
311
|
+
var serviceDetail = _this3._getServiceDetail(serviceObj.id, serviceGroup);
|
|
312
|
+
if (serviceDetail) {
|
|
313
|
+
serviceDetail.serviceUrls = serviceObj.serviceUrls || [];
|
|
314
|
+
} else {
|
|
315
|
+
_this3._loadServiceDetails(serviceGroup, [new _serviceDetail.default(serviceObj)]);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
this.status[serviceGroup].ready = true;
|
|
319
|
+
this.trigger(serviceGroup);
|
|
320
|
+
},
|
|
321
|
+
/**
|
|
322
|
+
* Wait until the service catalog is available,
|
|
323
|
+
* or reject after a timeout of 60 seconds.
|
|
324
|
+
* @param {string} serviceGroup
|
|
325
|
+
* @param {number} [timeout] - in seconds
|
|
326
|
+
* @returns {Promise<void>}
|
|
327
|
+
*/
|
|
328
|
+
waitForCatalog: function waitForCatalog(serviceGroup, timeout) {
|
|
329
|
+
var _this4 = this;
|
|
330
|
+
return new _promise.default(function (resolve, reject) {
|
|
331
|
+
if (_this4.status[serviceGroup].ready) {
|
|
332
|
+
resolve();
|
|
333
|
+
}
|
|
334
|
+
var validatedTimeout = typeof timeout === 'number' && timeout >= 0 ? timeout : 60;
|
|
335
|
+
var timeoutTimer = setTimeout(function () {
|
|
336
|
+
return reject(new Error("services: timeout occured while waiting for '".concat(serviceGroup, "' catalog to populate")));
|
|
337
|
+
}, validatedTimeout * 1000);
|
|
338
|
+
_this4.once(serviceGroup, function () {
|
|
339
|
+
clearTimeout(timeoutTimer);
|
|
340
|
+
resolve();
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
var _default = exports.default = ServiceCatalog;
|
|
346
|
+
//# sourceMappingURL=service-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_ampersandState","_interopRequireDefault","require","_lodash","_serviceDetail","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","ServiceCatalog","AmpState","extend","namespace","props","serviceGroups","discovery","override","preauth","postauth","signin","status","ready","collecting","isReady","allowedDomains","_getAllServiceDetails","serviceGroup","serviceDetails","concat","_toConsumableArray2","default","_getServiceDetail","clusterId","find","serviceDetail","id","_loadServiceDetails","_this","existingService","forEach","service","push","_unloadServiceDetails","_this2","splice","indexOf","clean","findClusterId","url","_allServiceDetails$fi","incomingUrlObj","URL","allServiceDetails","serviceUrls","_ref","host","_unused","undefined","findServiceFromClusterId","_ref2","arguments","serviceName","get","findServiceDetailFromUrl","_ref3","_iterator","_step","serviceUrl","startsWith","baseUrl","findAllowedDomain","urlObj","allowedDomain","includes","_unused2","getAllowedDomains","markFailedServiceUrl","serviceDetailWithFailedHost","failHost","setAllowedDomains","addAllowedDomains","newAllowedDomains","union","updateServiceGroups","_this3","currentServiceDetails","unusedServicesDetails","filter","every","_ref4","serviceObj","ServiceDetail","trigger","waitForCatalog","timeout","_this4","_promise","resolve","reject","validatedTimeout","timeoutTimer","setTimeout","Error","once","clearTimeout","_default","exports"],"sources":["service-catalog.ts"],"sourcesContent":["import AmpState from 'ampersand-state';\n\nimport {union} from 'lodash';\nimport ServiceDetail from './service-detail';\nimport {IServiceDetail} from './types';\n\n/**\n * @class\n */\nconst ServiceCatalog = AmpState.extend({\n namespace: 'ServiceCatalog',\n\n props: {\n serviceGroups: [\n 'object',\n true,\n () => ({\n discovery: [],\n override: [],\n preauth: [],\n postauth: [],\n signin: [],\n }),\n ],\n status: [\n 'object',\n true,\n () => ({\n discovery: {\n ready: false,\n collecting: false,\n },\n override: {\n ready: false,\n collecting: false,\n },\n preauth: {\n ready: false,\n collecting: false,\n },\n postauth: {\n ready: false,\n collecting: false,\n },\n signin: {\n ready: false,\n collecting: false,\n },\n }),\n ],\n isReady: ['boolean', false, false],\n allowedDomains: ['array', false, () => []],\n },\n\n /**\n * @private\n * Get all service details for a given service group or return all details if no group is specified.\n * @param {string} serviceGroup - The name of the service group to retrieve details for.\n * @returns {Array<IServiceDetail>} - An array of service details.\n */\n _getAllServiceDetails(serviceGroup: string): Array<IServiceDetail> {\n const serviceDetails =\n typeof serviceGroup === 'string'\n ? this.serviceGroups[serviceGroup] || []\n : [\n ...this.serviceGroups.override,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.discovery,\n ];\n\n return serviceDetails;\n },\n\n /**\n * @private\n * Search the service details array to locate a `ServiceDetails`\n * class object based on its id.\n * @param {string} clusterId\n * @param {string} [serviceGroup]\n * @returns {IServiceDetail}\n */\n _getServiceDetail(clusterId: string, serviceGroup: string): IServiceDetail | undefined {\n const serviceDetails = this._getAllServiceDetails(serviceGroup);\n\n return serviceDetails.find((serviceDetail: IServiceDetail) => serviceDetail.id === clusterId);\n },\n\n /**\n * @private\n * Safely load one or more `ServiceDetail`s into this `ServiceCatalog` instance.\n * @param {string} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _loadServiceDetails(serviceGroup: string, serviceDetails: Array<IServiceDetail>): void {\n // declare namespaces outside of loop\n let existingService: IServiceDetail | undefined;\n\n serviceDetails.forEach((service) => {\n existingService = this._getServiceDetail(service.id, serviceGroup);\n\n if (!existingService) {\n this.serviceGroups[serviceGroup].push(service);\n }\n });\n },\n\n /**\n * @private\n * Safely unload one or more `ServiceDetail`s into this `Services` instance\n * @param {string} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _unloadServiceDetails(serviceGroup: string, serviceDetails: Array<IServiceDetail>): void {\n // declare namespaces outside of loop\n let existingService: IServiceDetail | undefined;\n\n serviceDetails.forEach((service) => {\n existingService = this._getServiceDetail(service.id, serviceGroup);\n\n if (existingService) {\n this.serviceGroups[serviceGroup].splice(\n this.serviceGroups[serviceGroup].indexOf(existingService),\n 1\n );\n }\n });\n },\n\n /**\n * Clear all collected catalog data and reset catalog status.\n *\n * @returns {void}\n */\n clean(): void {\n this.serviceGroups.preauth.length = 0;\n this.serviceGroups.signin.length = 0;\n this.serviceGroups.postauth.length = 0;\n this.status.preauth = {ready: false};\n this.status.signin = {ready: false};\n this.status.postauth = {ready: false};\n },\n\n /**\n * Search over all service groups to find a cluster id based\n * on a given url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {string | undefined} - ClusterId of a given url\n */\n findClusterId(url: string): string | undefined {\n try {\n const incomingUrlObj = new URL(url);\n const allServiceDetails = this._getAllServiceDetails();\n\n return allServiceDetails.find((serviceDetail: IServiceDetail) =>\n serviceDetail.serviceUrls.find(({host}) => host === incomingUrlObj.host)\n )?.id;\n } catch {\n // If the URL is invalid or can't be found, return undefined\n return undefined;\n }\n },\n\n /**\n * Search over all service groups and return a service value from a provided\n * clusterId.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {string} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n findServiceFromClusterId(\n {clusterId, serviceGroup} = {} as {clusterId: string; serviceGroup: string}\n ): {name: string; url: string} | undefined {\n const serviceDetails = this._getServiceDetail(clusterId, serviceGroup);\n\n if (serviceDetails) {\n return {\n name: serviceDetails.serviceName,\n url: serviceDetails.get(),\n };\n }\n\n return undefined;\n },\n\n /**\n * Find a service based on the provided url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {IServiceDetail} - ServiceDetail assocated with provided url\n */\n findServiceDetailFromUrl(url: string): IServiceDetail | undefined {\n const serviceDetails = this._getAllServiceDetails();\n\n return serviceDetails.find(({serviceUrls}) => {\n for (const serviceUrl of serviceUrls) {\n if (url.startsWith(serviceUrl.baseUrl)) {\n return true;\n }\n }\n\n return false;\n });\n },\n\n /**\n * Finds an allowed domain that matches a specific url.\n *\n * @param {string} url - The url to match the allowed domains against.\n * @returns {string} - The matching allowed domain.\n */\n findAllowedDomain(url: string): string {\n try {\n const urlObj = new URL(url);\n\n return this.allowedDomains.find((allowedDomain) => urlObj.host.includes(allowedDomain));\n } catch {\n // If the URL is invalid or can't be found, return undefined\n return undefined;\n }\n },\n\n /**\n * Get a service url from the current services list by name.\n * @param {string} clusterId\n * @param {string} serviceGroup\n * @returns {string}\n */\n get(clusterId: string, serviceGroup: string): string | undefined {\n const serviceDetail = this._getServiceDetail(clusterId, serviceGroup);\n\n return serviceDetail ? serviceDetail.get() : undefined;\n },\n\n /**\n * Get the current allowed domains list.\n *\n * @returns {Array<string>} - the current allowed domains list.\n */\n getAllowedDomains(): Array<string> {\n return [...this.allowedDomains];\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceDetail` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceDetail` host array,\n * or the `ServiceDetail` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @returns {string}\n */\n markFailedServiceUrl(url: string): string | undefined {\n const serviceDetails = this._getAllServiceDetails();\n\n const serviceDetailWithFailedHost = serviceDetails.find((serviceDetail: IServiceDetail) =>\n serviceDetail.failHost(url)\n );\n\n // if we couldn't find the url we wanted to fail, return undefined\n if (!serviceDetailWithFailedHost) {\n return undefined;\n }\n\n return serviceDetailWithFailedHost.get();\n },\n\n /**\n * Set the allowed domains for the catalog.\n *\n * @param {Array<string>} allowedDomains - allowed domains to be assigned.\n * @returns {void}\n */\n setAllowedDomains(allowedDomains: Array<string>): void {\n this.allowedDomains = [...allowedDomains];\n },\n\n /**\n *\n * @param {Array<string>} newAllowedDomains - new allowed domains to add to existing set of allowed domains\n * @returns {void}\n */\n addAllowedDomains(newAllowedDomains: Array<string>): void {\n this.allowedDomains = union(this.allowedDomains, newAllowedDomains);\n },\n\n /**\n * Update the current list of `ServiceDetail`s against a provided\n * service hostmap.\n * @emits ServiceCatalog#preauthorized\n * @emits ServiceCatalog#postauthorized\n * @param {string} serviceGroup\n * @param {Array<IServiceDetail>} serviceDetails\n * @returns {void}\n */\n updateServiceGroups(serviceGroup: string, serviceDetails: Array<IServiceDetail>) {\n const currentServiceDetails = this.serviceGroups[serviceGroup];\n\n const unusedServicesDetails = currentServiceDetails.filter((serviceDetail) =>\n serviceDetails.every(({id}) => id !== serviceDetail.id)\n );\n\n this._unloadServiceDetails(serviceGroup, unusedServicesDetails);\n\n serviceDetails.forEach((serviceObj) => {\n const serviceDetail = this._getServiceDetail(serviceObj.id, serviceGroup);\n\n if (serviceDetail) {\n serviceDetail.serviceUrls = serviceObj.serviceUrls || [];\n } else {\n this._loadServiceDetails(serviceGroup, [new ServiceDetail(serviceObj)]);\n }\n });\n\n this.status[serviceGroup].ready = true;\n this.trigger(serviceGroup);\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject after a timeout of 60 seconds.\n * @param {string} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup: string, timeout: number): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (this.status[serviceGroup].ready) {\n resolve();\n }\n\n const validatedTimeout = typeof timeout === 'number' && timeout >= 0 ? timeout : 60;\n\n const timeoutTimer = setTimeout(\n () =>\n reject(\n new Error(\n `services: timeout occured while waiting for '${serviceGroup}' catalog to populate`\n )\n ),\n validatedTimeout * 1000\n );\n\n this.once(serviceGroup, () => {\n clearTimeout(timeoutTimer);\n resolve();\n });\n });\n },\n});\n\nexport default ServiceCatalog;\n"],"mappings":"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"}
|