@webex/webex-core 3.8.1 → 3.9.0-multi-llms.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.
Files changed (89) hide show
  1. package/README.md +87 -27
  2. package/dist/index.js +16 -33
  3. package/dist/index.js.map +1 -1
  4. package/dist/{lib/services/interceptors/hostmap.js → interceptors/proxy.js} +58 -25
  5. package/dist/interceptors/proxy.js.map +1 -0
  6. package/dist/lib/batcher.js +1 -1
  7. package/dist/lib/constants.js +10 -1
  8. package/dist/lib/constants.js.map +1 -1
  9. package/dist/lib/credentials/credentials.js +1 -1
  10. package/dist/lib/credentials/token.js +1 -1
  11. package/dist/lib/{services-v2/interceptors → interceptors}/server-error.js +1 -1
  12. package/dist/lib/interceptors/server-error.js.map +1 -0
  13. package/dist/lib/services/index.js +2 -29
  14. package/dist/lib/services/index.js.map +1 -1
  15. package/dist/lib/services/service-host.js +1 -1
  16. package/dist/lib/services/service-host.js.map +1 -1
  17. package/dist/lib/services/service-registry.js +1 -1
  18. package/dist/lib/services/service-registry.js.map +1 -1
  19. package/dist/lib/services/service-state.js +1 -1
  20. package/dist/lib/services/service-state.js.map +1 -1
  21. package/dist/lib/services/services.js +3 -3
  22. package/dist/lib/services/services.js.map +1 -1
  23. package/dist/lib/services-v2/index.js +0 -29
  24. package/dist/lib/services-v2/index.js.map +1 -1
  25. package/dist/lib/services-v2/metrics.js.map +1 -1
  26. package/dist/lib/services-v2/service-catalog.js +15 -11
  27. package/dist/lib/services-v2/service-catalog.js.map +1 -1
  28. package/dist/lib/services-v2/services-v2.js +160 -111
  29. package/dist/lib/services-v2/services-v2.js.map +1 -1
  30. package/dist/lib/services-v2/types.js.map +1 -1
  31. package/dist/plugins/logger.js +1 -1
  32. package/dist/webex-core.js +53 -60
  33. package/dist/webex-core.js.map +1 -1
  34. package/package.json +14 -14
  35. package/src/index.js +6 -14
  36. package/src/interceptors/proxy.js +70 -0
  37. package/src/lib/constants.js +29 -1
  38. package/src/lib/{services/interceptors → interceptors}/server-error.js +1 -1
  39. package/src/lib/services/index.js +2 -7
  40. package/src/lib/services/service-host.js +1 -1
  41. package/src/lib/services/service-registry.js +1 -1
  42. package/src/lib/services/service-state.js +1 -1
  43. package/src/lib/services/services.js +2 -2
  44. package/src/lib/services-v2/index.ts +0 -16
  45. package/src/lib/services-v2/service-catalog.ts +27 -19
  46. package/src/lib/services-v2/{services-v2.js → services-v2.ts} +188 -104
  47. package/src/lib/services-v2/types.ts +62 -2
  48. package/src/webex-core.js +12 -3
  49. package/test/fixtures/host-catalog-v2.ts +30 -122
  50. package/test/integration/spec/services/services.js +11 -0
  51. package/test/integration/spec/services-v2/service-catalog.js +664 -0
  52. package/test/integration/spec/services-v2/services-v2.js +1136 -0
  53. package/test/unit/spec/interceptors/proxy.js +73 -0
  54. package/test/unit/spec/services-v2/service-detail.ts +1 -1
  55. package/test/unit/spec/services-v2/services-v2.ts +579 -442
  56. package/test/unit/spec/webex-core.js +62 -2
  57. package/dist/lib/services/constants.js +0 -17
  58. package/dist/lib/services/constants.js.map +0 -1
  59. package/dist/lib/services/interceptors/hostmap.js.map +0 -1
  60. package/dist/lib/services/interceptors/server-error.js +0 -77
  61. package/dist/lib/services/interceptors/server-error.js.map +0 -1
  62. package/dist/lib/services/interceptors/service.js +0 -137
  63. package/dist/lib/services/interceptors/service.js.map +0 -1
  64. package/dist/lib/services-v2/constants.js +0 -17
  65. package/dist/lib/services-v2/constants.js.map +0 -1
  66. package/dist/lib/services-v2/interceptors/server-error.js.map +0 -1
  67. package/dist/lib/services-v2/service-host.js +0 -300
  68. package/dist/lib/services-v2/service-host.js.map +0 -1
  69. package/dist/lib/services-v2/service-registry.js +0 -534
  70. package/dist/lib/services-v2/service-registry.js.map +0 -1
  71. package/dist/lib/services-v2/service-state.js +0 -97
  72. package/dist/lib/services-v2/service-state.js.map +0 -1
  73. package/dist/lib/services-v2/service-url.js +0 -119
  74. package/dist/lib/services-v2/service-url.js.map +0 -1
  75. package/src/lib/services/constants.js +0 -21
  76. package/src/lib/services/interceptors/hostmap.js +0 -36
  77. package/src/lib/services/interceptors/service.js +0 -101
  78. package/src/lib/services-v2/constants.ts +0 -21
  79. package/src/lib/services-v2/interceptors/server-error.js +0 -48
  80. /package/dist/lib/{services-v2/interceptors → interceptors}/hostmap.js +0 -0
  81. /package/dist/lib/{services-v2/interceptors → interceptors}/hostmap.js.map +0 -0
  82. /package/dist/lib/{services-v2/interceptors → interceptors}/service.js +0 -0
  83. /package/dist/lib/{services-v2/interceptors → interceptors}/service.js.map +0 -0
  84. /package/dist/lib/{services/metrics.js → metrics.js} +0 -0
  85. /package/dist/lib/{services/metrics.js.map → metrics.js.map} +0 -0
  86. /package/src/lib/{services-v2/interceptors → interceptors}/hostmap.js +0 -0
  87. /package/src/lib/{services-v2/interceptors → interceptors}/service.js +0 -0
  88. /package/src/lib/{services-v2/metrics.js → metrics.js} +0 -0
  89. /package/src/lib/{services/metrics.js → services-v2/metrics.ts} +0 -0
@@ -1,25 +1,10 @@
1
1
  "use strict";
2
2
 
3
- var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
- var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
5
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
- var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
5
  _Object$defineProperty(exports, "__esModule", {
9
6
  value: true
10
7
  });
11
- _Object$defineProperty(exports, "HostMapInterceptorV2", {
12
- enumerable: true,
13
- get: function get() {
14
- return _hostmap.default;
15
- }
16
- });
17
- _Object$defineProperty(exports, "ServerErrorInterceptorV2", {
18
- enumerable: true,
19
- get: function get() {
20
- return _serverError.default;
21
- }
22
- });
23
8
  _Object$defineProperty(exports, "ServiceCatalogV2", {
24
9
  enumerable: true,
25
10
  get: function get() {
@@ -32,27 +17,13 @@ _Object$defineProperty(exports, "ServiceDetail", {
32
17
  return _serviceDetail.default;
33
18
  }
34
19
  });
35
- _Object$defineProperty(exports, "ServiceInterceptorV2", {
36
- enumerable: true,
37
- get: function get() {
38
- return _service.default;
39
- }
40
- });
41
20
  _Object$defineProperty(exports, "ServicesV2", {
42
21
  enumerable: true,
43
22
  get: function get() {
44
23
  return _servicesV.default;
45
24
  }
46
25
  });
47
- exports.constants = void 0;
48
- var constants = _interopRequireWildcard(require("./constants"));
49
- exports.constants = constants;
50
26
  var _servicesV = _interopRequireDefault(require("./services-v2"));
51
- var _service = _interopRequireDefault(require("./interceptors/service"));
52
- var _serverError = _interopRequireDefault(require("./interceptors/server-error"));
53
- var _hostmap = _interopRequireDefault(require("./interceptors/hostmap"));
54
27
  var _serviceCatalog = _interopRequireDefault(require("./service-catalog"));
55
28
  var _serviceDetail = _interopRequireDefault(require("./service-detail"));
56
- function _getRequireWildcardCache(e) { if ("function" != typeof _WeakMap) return null; var r = new _WeakMap(), t = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
57
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
58
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["constants","_interopRequireWildcard","require","exports","_servicesV","_interopRequireDefault","_service","_serverError","_hostmap","_serviceCatalog","_serviceDetail","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n// import {registerInternalPlugin} from '../../webex-core';\n\nimport * as constants from './constants';\n// import ServerErrorInterceptor from './interceptors/server-error';\n// import ServiceInterceptor from './interceptors/service';\nexport {default as ServicesV2} from './services-v2';\n\n// registerInternalPlugin('services', ServicesV2, {\n// interceptors: {\n// ServiceInterceptor: ServiceInterceptor.create,\n// ServerErrorInterceptor: ServerErrorInterceptor.create,\n// },\n// });\n\nexport {constants};\nexport {default as ServiceInterceptorV2} from './interceptors/service';\nexport {default as ServerErrorInterceptorV2} from './interceptors/server-error';\nexport {default as HostMapInterceptorV2} from './interceptors/hostmap';\nexport {default as ServiceCatalogV2} from './service-catalog';\nexport {default as ServiceDetail} from './service-detail';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAyCC,OAAA,CAAAH,SAAA,GAAAA,SAAA;AAGzC,IAAAI,UAAA,GAAAC,sBAAA,CAAAH,OAAA;AAUA,IAAAI,QAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,YAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,QAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,eAAA,GAAAJ,sBAAA,CAAAH,OAAA;AACA,IAAAQ,cAAA,GAAAL,sBAAA,CAAAH,OAAA;AAA0D,SAAAS,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA"}
1
+ {"version":3,"names":["_servicesV","_interopRequireDefault","require","_serviceCatalog","_serviceDetail"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport {default as ServicesV2} from './services-v2';\nexport {default as ServiceCatalogV2} from './service-catalog';\nexport {default as ServiceDetail} from './service-detail';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,cAAA,GAAAH,sBAAA,CAAAC,OAAA"}
@@ -1 +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"}
1
+ {"version":3,"names":["_default","exports","default","JS_SDK_SERVICE_NOT_FOUND"],"sources":["metrics.ts"],"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"}
@@ -58,6 +58,7 @@ var ServiceCatalog = _ampersandState.default.extend({
58
58
  };
59
59
  }],
60
60
  isReady: ['boolean', false, false],
61
+ timestamp: ['string', false, ''],
61
62
  allowedDomains: ['array', false, function () {
62
63
  return [];
63
64
  }]
@@ -65,7 +66,7 @@ var ServiceCatalog = _ampersandState.default.extend({
65
66
  /**
66
67
  * @private
67
68
  * 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
+ * @param {ServiceGroup} serviceGroup - The name of the service group to retrieve details for.
69
70
  * @returns {Array<IServiceDetail>} - An array of service details.
70
71
  */
71
72
  _getAllServiceDetails: function _getAllServiceDetails(serviceGroup) {
@@ -77,7 +78,7 @@ var ServiceCatalog = _ampersandState.default.extend({
77
78
  * Search the service details array to locate a `ServiceDetails`
78
79
  * class object based on its id.
79
80
  * @param {string} clusterId
80
- * @param {string} [serviceGroup]
81
+ * @param {ServiceGroup} [serviceGroup]
81
82
  * @returns {IServiceDetail}
82
83
  */
83
84
  _getServiceDetail: function _getServiceDetail(clusterId, serviceGroup) {
@@ -89,7 +90,7 @@ var ServiceCatalog = _ampersandState.default.extend({
89
90
  /**
90
91
  * @private
91
92
  * Safely load one or more `ServiceDetail`s into this `ServiceCatalog` instance.
92
- * @param {string} serviceGroup
93
+ * @param {ServiceGroup} serviceGroup
93
94
  * @param {Array<ServiceDetail>} serviceDetails
94
95
  * @returns {void}
95
96
  */
@@ -107,7 +108,7 @@ var ServiceCatalog = _ampersandState.default.extend({
107
108
  /**
108
109
  * @private
109
110
  * Safely unload one or more `ServiceDetail`s into this `Services` instance
110
- * @param {string} serviceGroup
111
+ * @param {ServiceGroup} serviceGroup
111
112
  * @param {Array<ServiceDetail>} serviceDetails
112
113
  * @returns {void}
113
114
  */
@@ -168,7 +169,7 @@ var ServiceCatalog = _ampersandState.default.extend({
168
169
  * clusterId.
169
170
  * @param {object} params
170
171
  * @param {string} params.clusterId - clusterId of found service
171
- * @param {string} [params.serviceGroup] - specify service group
172
+ * @param {ServiceGroup} [params.serviceGroup] - specify service group
172
173
  * @returns {object} service
173
174
  * @returns {string} service.name
174
175
  * @returns {string} service.url
@@ -230,10 +231,11 @@ var ServiceCatalog = _ampersandState.default.extend({
230
231
  }
231
232
  },
232
233
  /**
233
- * Get a service url from the current services list by name.
234
+ * Get a service url from the current services list by name. Return undefined
235
+ * if the service is not found.
234
236
  * @param {string} clusterId
235
- * @param {string} serviceGroup
236
- * @returns {string}
237
+ * @param {ServiceGroup} serviceGroup
238
+ * @returns {string | undefined}
237
239
  */
238
240
  get: function get(clusterId, serviceGroup) {
239
241
  var serviceDetail = this._getServiceDetail(clusterId, serviceGroup);
@@ -293,11 +295,12 @@ var ServiceCatalog = _ampersandState.default.extend({
293
295
  * service hostmap.
294
296
  * @emits ServiceCatalog#preauthorized
295
297
  * @emits ServiceCatalog#postauthorized
296
- * @param {string} serviceGroup
298
+ * @param {ServiceGroup} serviceGroup
297
299
  * @param {Array<IServiceDetail>} serviceDetails
300
+ * @param {timestamp<string>} timestamp of the catalog
298
301
  * @returns {void}
299
302
  */
300
- updateServiceGroups: function updateServiceGroups(serviceGroup, serviceDetails) {
303
+ updateServiceGroups: function updateServiceGroups(serviceGroup, serviceDetails, timestamp) {
301
304
  var _this3 = this;
302
305
  var currentServiceDetails = this.serviceGroups[serviceGroup];
303
306
  var unusedServicesDetails = currentServiceDetails.filter(function (serviceDetail) {
@@ -315,13 +318,14 @@ var ServiceCatalog = _ampersandState.default.extend({
315
318
  _this3._loadServiceDetails(serviceGroup, [new _serviceDetail.default(serviceObj)]);
316
319
  }
317
320
  });
321
+ this.timestamp = timestamp;
318
322
  this.status[serviceGroup].ready = true;
319
323
  this.trigger(serviceGroup);
320
324
  },
321
325
  /**
322
326
  * Wait until the service catalog is available,
323
327
  * or reject after a timeout of 60 seconds.
324
- * @param {string} serviceGroup
328
+ * @param {ServiceGroup} serviceGroup
325
329
  * @param {number} [timeout] - in seconds
326
330
  * @returns {Promise<void>}
327
331
  */
@@ -1 +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":";;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA6C,SAAAG,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,OAAA,oBAAAH,CAAA,CAAAI,gBAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,cAAA,CAAAL,CAAA,MAAAE,EAAA,GAAAI,2BAAA,CAAAN,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAO,MAAA,qBAAAL,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAM,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAR,CAAA,CAAAO,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAb,CAAA,CAAAQ,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAR,EAAA,GAAAA,EAAA,CAAAmB,IAAA,CAAArB,CAAA,MAAAW,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAApB,EAAA,CAAAqB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAhB,EAAA,CAAAuB,MAAA,UAAAvB,EAAA,CAAAuB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAN,CAAA,EAAA0B,MAAA,SAAA1B,CAAA,qBAAAA,CAAA,sBAAA2B,iBAAA,CAAA3B,CAAA,EAAA0B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAArB,CAAA,EAAA+B,KAAA,aAAApB,CAAA,iBAAAX,CAAA,CAAAgC,WAAA,EAAArB,CAAA,GAAAX,CAAA,CAAAgC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAuB,WAAA,CAAAlC,CAAA,OAAAW,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA3B,CAAA,EAAA0B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAC,KAAA,CAAAF,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAG7C;AACA;AACA;AACA,IAAME,cAAc,GAAGC,uBAAQ,CAACC,MAAM,CAAC;EACrCC,SAAS,EAAE,gBAAgB;EAE3BC,KAAK,EAAE;IACLC,aAAa,EAAE,CACb,QAAQ,EACR,IAAI,EACJ;MAAA,OAAO;QACLC,SAAS,EAAE,EAAE;QACbC,QAAQ,EAAE,EAAE;QACZC,OAAO,EAAE,EAAE;QACXC,QAAQ,EAAE,EAAE;QACZC,MAAM,EAAE;MACV,CAAC;IAAA,CAAC,CACH;IACDC,MAAM,EAAE,CACN,QAAQ,EACR,IAAI,EACJ;MAAA,OAAO;QACLL,SAAS,EAAE;UACTM,KAAK,EAAE,KAAK;UACZC,UAAU,EAAE;QACd,CAAC;QACDN,QAAQ,EAAE;UACRK,KAAK,EAAE,KAAK;UACZC,UAAU,EAAE;QACd,CAAC;QACDL,OAAO,EAAE;UACPI,KAAK,EAAE,KAAK;UACZC,UAAU,EAAE;QACd,CAAC;QACDJ,QAAQ,EAAE;UACRG,KAAK,EAAE,KAAK;UACZC,UAAU,EAAE;QACd,CAAC;QACDH,MAAM,EAAE;UACNE,KAAK,EAAE,KAAK;UACZC,UAAU,EAAE;QACd;MACF,CAAC;IAAA,CAAC,CACH;IACDC,OAAO,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;IAClCC,cAAc,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE;MAAA,OAAM,EAAE;IAAA;EAC3C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,qBAAqB,WAAAA,sBAACC,YAAoB,EAAyB;IACjE,IAAMC,cAAc,GAClB,OAAOD,YAAY,KAAK,QAAQ,GAC5B,IAAI,CAACZ,aAAa,CAACY,YAAY,CAAC,IAAI,EAAE,MAAAE,MAAA,KAAAC,mBAAA,CAAAC,OAAA,EAEjC,IAAI,CAAChB,aAAa,CAACE,QAAQ,OAAAa,mBAAA,CAAAC,OAAA,EAC3B,IAAI,CAAChB,aAAa,CAACI,QAAQ,OAAAW,mBAAA,CAAAC,OAAA,EAC3B,IAAI,CAAChB,aAAa,CAACK,MAAM,OAAAU,mBAAA,CAAAC,OAAA,EACzB,IAAI,CAAChB,aAAa,CAACG,OAAO,OAAAY,mBAAA,CAAAC,OAAA,EAC1B,IAAI,CAAChB,aAAa,CAACC,SAAS,EAChC;IAEP,OAAOY,cAAc;EACvB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEI,iBAAiB,WAAAA,kBAACC,SAAiB,EAAEN,YAAoB,EAA8B;IACrF,IAAMC,cAAc,GAAG,IAAI,CAACF,qBAAqB,CAACC,YAAY,CAAC;IAE/D,OAAOC,cAAc,CAACM,IAAI,CAAC,UAACC,aAA6B;MAAA,OAAKA,aAAa,CAACC,EAAE,KAAKH,SAAS;IAAA,EAAC;EAC/F,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEI,mBAAmB,WAAAA,oBAACV,YAAoB,EAAEC,cAAqC,EAAQ;IAAA,IAAAU,KAAA;IACrF;IACA,IAAIC,eAA2C;IAE/CX,cAAc,CAACY,OAAO,CAAC,UAACC,OAAO,EAAK;MAClCF,eAAe,GAAGD,KAAI,CAACN,iBAAiB,CAACS,OAAO,CAACL,EAAE,EAAET,YAAY,CAAC;MAElE,IAAI,CAACY,eAAe,EAAE;QACpBD,KAAI,CAACvB,aAAa,CAACY,YAAY,CAAC,CAACe,IAAI,CAACD,OAAO,CAAC;MAChD;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEE,qBAAqB,WAAAA,sBAAChB,YAAoB,EAAEC,cAAqC,EAAQ;IAAA,IAAAgB,MAAA;IACvF;IACA,IAAIL,eAA2C;IAE/CX,cAAc,CAACY,OAAO,CAAC,UAACC,OAAO,EAAK;MAClCF,eAAe,GAAGK,MAAI,CAACZ,iBAAiB,CAACS,OAAO,CAACL,EAAE,EAAET,YAAY,CAAC;MAElE,IAAIY,eAAe,EAAE;QACnBK,MAAI,CAAC7B,aAAa,CAACY,YAAY,CAAC,CAACkB,MAAM,CACrCD,MAAI,CAAC7B,aAAa,CAACY,YAAY,CAAC,CAACmB,OAAO,CAACP,eAAe,CAAC,EACzD,CACF,CAAC;MACH;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEQ,KAAK,WAAAA,MAAA,EAAS;IACZ,IAAI,CAAChC,aAAa,CAACG,OAAO,CAACzC,MAAM,GAAG,CAAC;IACrC,IAAI,CAACsC,aAAa,CAACK,MAAM,CAAC3C,MAAM,GAAG,CAAC;IACpC,IAAI,CAACsC,aAAa,CAACI,QAAQ,CAAC1C,MAAM,GAAG,CAAC;IACtC,IAAI,CAAC4C,MAAM,CAACH,OAAO,GAAG;MAACI,KAAK,EAAE;IAAK,CAAC;IACpC,IAAI,CAACD,MAAM,CAACD,MAAM,GAAG;MAACE,KAAK,EAAE;IAAK,CAAC;IACnC,IAAI,CAACD,MAAM,CAACF,QAAQ,GAAG;MAACG,KAAK,EAAE;IAAK,CAAC;EACvC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACE0B,aAAa,WAAAA,cAACC,GAAW,EAAsB;IAC7C,IAAI;MAAA,IAAAC,qBAAA;MACF,IAAMC,cAAc,GAAG,IAAIC,GAAG,CAACH,GAAG,CAAC;MACnC,IAAMI,iBAAiB,GAAG,IAAI,CAAC3B,qBAAqB,CAAC,CAAC;MAEtD,QAAAwB,qBAAA,GAAOG,iBAAiB,CAACnB,IAAI,CAAC,UAACC,aAA6B;QAAA,OAC1DA,aAAa,CAACmB,WAAW,CAACpB,IAAI,CAAC,UAAAqB,IAAA;UAAA,IAAEC,IAAI,GAAAD,IAAA,CAAJC,IAAI;UAAA,OAAMA,IAAI,KAAKL,cAAc,CAACK,IAAI;QAAA,EAAC;MAAA,CAC1E,CAAC,cAAAN,qBAAA,uBAFMA,qBAAA,CAEJd,EAAE;IACP,CAAC,CAAC,OAAAqB,OAAA,EAAM;MACN;MACA,OAAOC,SAAS;IAClB;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,wBAAwB,WAAAA,yBAAA,EAEmB;IAAA,IAAAC,KAAA,GAAAC,SAAA,CAAApF,MAAA,QAAAoF,SAAA,QAAAH,SAAA,GAAAG,SAAA,MADb,CAAC,CAAC;MAA7B5B,SAAS,GAAA2B,KAAA,CAAT3B,SAAS;MAAEN,YAAY,GAAAiC,KAAA,CAAZjC,YAAY;IAExB,IAAMC,cAAc,GAAG,IAAI,CAACI,iBAAiB,CAACC,SAAS,EAAEN,YAAY,CAAC;IAEtE,IAAIC,cAAc,EAAE;MAClB,OAAO;QACLzB,IAAI,EAAEyB,cAAc,CAACkC,WAAW;QAChCb,GAAG,EAAErB,cAAc,CAACmC,GAAG,CAAC;MAC1B,CAAC;IACH;IAEA,OAAOL,SAAS;EAClB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEM,wBAAwB,WAAAA,yBAACf,GAAW,EAA8B;IAChE,IAAMrB,cAAc,GAAG,IAAI,CAACF,qBAAqB,CAAC,CAAC;IAEnD,OAAOE,cAAc,CAACM,IAAI,CAAC,UAAA+B,KAAA,EAAmB;MAAA,IAAjBX,WAAW,GAAAW,KAAA,CAAXX,WAAW;MAAA,IAAAY,SAAA,GAAAjG,0BAAA,CACbqF,WAAW;QAAAa,KAAA;MAAA;QAApC,KAAAD,SAAA,CAAAtF,CAAA,MAAAuF,KAAA,GAAAD,SAAA,CAAArF,CAAA,IAAAC,IAAA,GAAsC;UAAA,IAA3BsF,UAAU,GAAAD,KAAA,CAAApF,KAAA;UACnB,IAAIkE,GAAG,CAACoB,UAAU,CAACD,UAAU,CAACE,OAAO,CAAC,EAAE;YACtC,OAAO,IAAI;UACb;QACF;MAAC,SAAAhF,GAAA;QAAA4E,SAAA,CAAAlF,CAAA,CAAAM,GAAA;MAAA;QAAA4E,SAAA,CAAAhF,CAAA;MAAA;MAED,OAAO,KAAK;IACd,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEqF,iBAAiB,WAAAA,kBAACtB,GAAW,EAAU;IACrC,IAAI;MACF,IAAMuB,MAAM,GAAG,IAAIpB,GAAG,CAACH,GAAG,CAAC;MAE3B,OAAO,IAAI,CAACxB,cAAc,CAACS,IAAI,CAAC,UAACuC,aAAa;QAAA,OAAKD,MAAM,CAAChB,IAAI,CAACkB,QAAQ,CAACD,aAAa,CAAC;MAAA,EAAC;IACzF,CAAC,CAAC,OAAAE,QAAA,EAAM;MACN;MACA,OAAOjB,SAAS;IAClB;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEK,GAAG,WAAAA,IAAC9B,SAAiB,EAAEN,YAAoB,EAAsB;IAC/D,IAAMQ,aAAa,GAAG,IAAI,CAACH,iBAAiB,CAACC,SAAS,EAAEN,YAAY,CAAC;IAErE,OAAOQ,aAAa,GAAGA,aAAa,CAAC4B,GAAG,CAAC,CAAC,GAAGL,SAAS;EACxD,CAAC;EAED;AACF;AACA;AACA;AACA;EACEkB,iBAAiB,WAAAA,kBAAA,EAAkB;IACjC,WAAA9C,mBAAA,CAAAC,OAAA,EAAW,IAAI,CAACN,cAAc;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEoD,oBAAoB,WAAAA,qBAAC5B,GAAW,EAAsB;IACpD,IAAMrB,cAAc,GAAG,IAAI,CAACF,qBAAqB,CAAC,CAAC;IAEnD,IAAMoD,2BAA2B,GAAGlD,cAAc,CAACM,IAAI,CAAC,UAACC,aAA6B;MAAA,OACpFA,aAAa,CAAC4C,QAAQ,CAAC9B,GAAG,CAAC;IAAA,CAC7B,CAAC;;IAED;IACA,IAAI,CAAC6B,2BAA2B,EAAE;MAChC,OAAOpB,SAAS;IAClB;IAEA,OAAOoB,2BAA2B,CAACf,GAAG,CAAC,CAAC;EAC1C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEiB,iBAAiB,WAAAA,kBAACvD,cAA6B,EAAQ;IACrD,IAAI,CAACA,cAAc,OAAAK,mBAAA,CAAAC,OAAA,EAAON,cAAc,CAAC;EAC3C,CAAC;EAED;AACF;AACA;AACA;AACA;EACEwD,iBAAiB,WAAAA,kBAACC,iBAAgC,EAAQ;IACxD,IAAI,CAACzD,cAAc,GAAG,IAAA0D,aAAK,EAAC,IAAI,CAAC1D,cAAc,EAAEyD,iBAAiB,CAAC;EACrE,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEE,mBAAmB,WAAAA,oBAACzD,YAAoB,EAAEC,cAAqC,EAAE;IAAA,IAAAyD,MAAA;IAC/E,IAAMC,qBAAqB,GAAG,IAAI,CAACvE,aAAa,CAACY,YAAY,CAAC;IAE9D,IAAM4D,qBAAqB,GAAGD,qBAAqB,CAACE,MAAM,CAAC,UAACrD,aAAa;MAAA,OACvEP,cAAc,CAAC6D,KAAK,CAAC,UAAAC,KAAA;QAAA,IAAEtD,EAAE,GAAAsD,KAAA,CAAFtD,EAAE;QAAA,OAAMA,EAAE,KAAKD,aAAa,CAACC,EAAE;MAAA,EAAC;IAAA,CACzD,CAAC;IAED,IAAI,CAACO,qBAAqB,CAAChB,YAAY,EAAE4D,qBAAqB,CAAC;IAE/D3D,cAAc,CAACY,OAAO,CAAC,UAACmD,UAAU,EAAK;MACrC,IAAMxD,aAAa,GAAGkD,MAAI,CAACrD,iBAAiB,CAAC2D,UAAU,CAACvD,EAAE,EAAET,YAAY,CAAC;MAEzE,IAAIQ,aAAa,EAAE;QACjBA,aAAa,CAACmB,WAAW,GAAGqC,UAAU,CAACrC,WAAW,IAAI,EAAE;MAC1D,CAAC,MAAM;QACL+B,MAAI,CAAChD,mBAAmB,CAACV,YAAY,EAAE,CAAC,IAAIiE,sBAAa,CAACD,UAAU,CAAC,CAAC,CAAC;MACzE;IACF,CAAC,CAAC;IAEF,IAAI,CAACtE,MAAM,CAACM,YAAY,CAAC,CAACL,KAAK,GAAG,IAAI;IACtC,IAAI,CAACuE,OAAO,CAAClE,YAAY,CAAC;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEmE,cAAc,WAAAA,eAACnE,YAAoB,EAAEoE,OAAe,EAAiB;IAAA,IAAAC,MAAA;IACnE,OAAO,IAAAC,QAAA,CAAAlE,OAAA,CAAkB,UAACmE,OAAO,EAAEC,MAAM,EAAK;MAC5C,IAAIH,MAAI,CAAC3E,MAAM,CAACM,YAAY,CAAC,CAACL,KAAK,EAAE;QACnC4E,OAAO,CAAC,CAAC;MACX;MAEA,IAAME,gBAAgB,GAAG,OAAOL,OAAO,KAAK,QAAQ,IAAIA,OAAO,IAAI,CAAC,GAAGA,OAAO,GAAG,EAAE;MAEnF,IAAMM,YAAY,GAAGC,UAAU,CAC7B;QAAA,OACEH,MAAM,CACJ,IAAII,KAAK,iDAAA1E,MAAA,CACyCF,YAAY,0BAC9D,CACF,CAAC;MAAA,GACHyE,gBAAgB,GAAG,IACrB,CAAC;MAEDJ,MAAI,CAACQ,IAAI,CAAC7E,YAAY,EAAE,YAAM;QAC5B8E,YAAY,CAACJ,YAAY,CAAC;QAC1BH,OAAO,CAAC,CAAC;MACX,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;AACF,CAAC,CAAC;AAAC,IAAAQ,QAAA,GAAAC,OAAA,CAAA5E,OAAA,GAEYrB,cAAc"}
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","timestamp","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, ServiceGroup} 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 timestamp: ['string', 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 {ServiceGroup} serviceGroup - The name of the service group to retrieve details for.\n * @returns {Array<IServiceDetail>} - An array of service details.\n */\n _getAllServiceDetails(serviceGroup?: ServiceGroup): 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 {ServiceGroup} [serviceGroup]\n * @returns {IServiceDetail}\n */\n _getServiceDetail(clusterId: string, serviceGroup?: ServiceGroup): 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 {ServiceGroup} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _loadServiceDetails(serviceGroup: ServiceGroup, 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 {ServiceGroup} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _unloadServiceDetails(serviceGroup: ServiceGroup, 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 {ServiceGroup} [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?: ServiceGroup}\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. Return undefined\n * if the service is not found.\n * @param {string} clusterId\n * @param {ServiceGroup} serviceGroup\n * @returns {string | undefined}\n */\n get(clusterId: string, serviceGroup?: ServiceGroup): 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 {ServiceGroup} serviceGroup\n * @param {Array<IServiceDetail>} serviceDetails\n * @param {timestamp<string>} timestamp of the catalog\n * @returns {void}\n */\n updateServiceGroups(\n serviceGroup: ServiceGroup,\n serviceDetails: Array<IServiceDetail>,\n timestamp?: string\n ) {\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.timestamp = timestamp;\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 {ServiceGroup} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup: ServiceGroup, 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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"}