@webex/webex-core 3.8.0-next.2 → 3.8.0-next.20

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 (48) hide show
  1. package/dist/index.js +43 -0
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/batcher.js +1 -1
  4. package/dist/lib/credentials/credentials.js +1 -1
  5. package/dist/lib/credentials/token.js +1 -1
  6. package/dist/lib/services/service-catalog.js +23 -68
  7. package/dist/lib/services/service-catalog.js.map +1 -1
  8. package/dist/lib/services/services.js +1 -1
  9. package/dist/lib/services-v2/constants.js +17 -0
  10. package/dist/lib/services-v2/constants.js.map +1 -0
  11. package/dist/lib/services-v2/index.js +58 -0
  12. package/dist/lib/services-v2/index.js.map +1 -0
  13. package/dist/lib/services-v2/interceptors/hostmap.js +64 -0
  14. package/dist/lib/services-v2/interceptors/hostmap.js.map +1 -0
  15. package/dist/lib/services-v2/interceptors/server-error.js +77 -0
  16. package/dist/lib/services-v2/interceptors/server-error.js.map +1 -0
  17. package/dist/lib/services-v2/interceptors/service.js +137 -0
  18. package/dist/lib/services-v2/interceptors/service.js.map +1 -0
  19. package/dist/lib/services-v2/metrics.js +12 -0
  20. package/dist/lib/services-v2/metrics.js.map +1 -0
  21. package/dist/lib/services-v2/service-catalog.js +433 -0
  22. package/dist/lib/services-v2/service-catalog.js.map +1 -0
  23. package/dist/lib/services-v2/service-fed-ramp.js +13 -0
  24. package/dist/lib/services-v2/service-fed-ramp.js.map +1 -0
  25. package/dist/lib/services-v2/service-url.js +119 -0
  26. package/dist/lib/services-v2/service-url.js.map +1 -0
  27. package/dist/lib/services-v2/services-v2.js +963 -0
  28. package/dist/lib/services-v2/services-v2.js.map +1 -0
  29. package/dist/plugins/logger.js +1 -1
  30. package/dist/webex-core.js +2 -2
  31. package/dist/webex-core.js.map +1 -1
  32. package/package.json +13 -13
  33. package/src/index.js +10 -0
  34. package/src/lib/services/service-catalog.js +14 -54
  35. package/src/lib/services-v2/README.md +3 -0
  36. package/src/lib/services-v2/constants.js +21 -0
  37. package/src/lib/services-v2/index.js +23 -0
  38. package/src/lib/services-v2/interceptors/hostmap.js +36 -0
  39. package/src/lib/services-v2/interceptors/server-error.js +48 -0
  40. package/src/lib/services-v2/interceptors/service.js +101 -0
  41. package/src/lib/services-v2/metrics.js +4 -0
  42. package/src/lib/services-v2/service-catalog.js +455 -0
  43. package/src/lib/services-v2/service-fed-ramp.js +5 -0
  44. package/src/lib/services-v2/service-url.js +124 -0
  45. package/src/lib/services-v2/services-v2.js +971 -0
  46. package/test/fixtures/host-catalog-v2.js +247 -0
  47. package/test/unit/spec/services/service-catalog.js +30 -90
  48. package/test/unit/spec/services-v2/services-v2.js +564 -0
@@ -0,0 +1,433 @@
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$keys3 = require("@babel/runtime-corejs2/core-js/object/keys");
8
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
9
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
10
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
11
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
12
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
13
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
14
+ _Object$defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ exports.default = void 0;
18
+ var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
19
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
21
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
22
+ var _url = _interopRequireDefault(require("url"));
23
+ var _ampersandState = _interopRequireDefault(require("ampersand-state"));
24
+ var _lodash = require("lodash");
25
+ var _serviceUrl = _interopRequireDefault(require("./service-url"));
26
+ function ownKeys(e, r) { var t = _Object$keys3(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
27
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
28
+ 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; } } }; }
29
+ 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); }
30
+ 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; }
31
+ /* eslint-disable no-underscore-dangle */
32
+ /**
33
+ * @class
34
+ */
35
+ var ServiceCatalog = _ampersandState.default.extend({
36
+ namespace: 'ServiceCatalog',
37
+ props: {
38
+ serviceGroups: ['object', true, function () {
39
+ return {
40
+ discovery: [],
41
+ override: [],
42
+ preauth: [],
43
+ postauth: [],
44
+ signin: []
45
+ };
46
+ }],
47
+ status: ['object', true, function () {
48
+ return {
49
+ discovery: {
50
+ ready: false,
51
+ collecting: false
52
+ },
53
+ override: {
54
+ ready: false,
55
+ collecting: false
56
+ },
57
+ preauth: {
58
+ ready: false,
59
+ collecting: false
60
+ },
61
+ postauth: {
62
+ ready: false,
63
+ collecting: false
64
+ },
65
+ signin: {
66
+ ready: false,
67
+ collecting: false
68
+ }
69
+ };
70
+ }],
71
+ isReady: ['boolean', false, false],
72
+ allowedDomains: ['array', false, function () {
73
+ return [];
74
+ }]
75
+ },
76
+ /**
77
+ * @private
78
+ * Search the service url array to locate a `ServiceUrl`
79
+ * class object based on its name.
80
+ * @param {string} name
81
+ * @param {string} [serviceGroup]
82
+ * @returns {ServiceUrl}
83
+ */
84
+ _getUrl: function _getUrl(name, serviceGroup) {
85
+ var serviceUrls = 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));
86
+ return serviceUrls.find(function (serviceUrl) {
87
+ return serviceUrl.name === name;
88
+ });
89
+ },
90
+ /**
91
+ * @private
92
+ * Generate an array of `ServiceUrl`s that is organized from highest auth
93
+ * level to lowest auth level.
94
+ * @returns {Array<ServiceUrl>} - array of `ServiceUrl`s
95
+ */
96
+ _listServiceUrls: function _listServiceUrls() {
97
+ return [].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));
98
+ },
99
+ /**
100
+ * @private
101
+ * Safely load one or more `ServiceUrl`s into this `Services` instance.
102
+ * @param {string} serviceGroup
103
+ * @param {Array<ServiceUrl>} services
104
+ * @returns {Services}
105
+ */
106
+ _loadServiceUrls: function _loadServiceUrls(serviceGroup, services) {
107
+ var _this = this;
108
+ // declare namespaces outside of loop
109
+ var existingService;
110
+ services.forEach(function (service) {
111
+ existingService = _this._getUrl(service.name, serviceGroup);
112
+ if (!existingService) {
113
+ _this.serviceGroups[serviceGroup].push(service);
114
+ }
115
+ });
116
+ return this;
117
+ },
118
+ /**
119
+ * @private
120
+ * Safely unload one or more `ServiceUrl`s into this `Services` instance
121
+ * @param {string} serviceGroup
122
+ * @param {Array<ServiceUrl>} services
123
+ * @returns {Services}
124
+ */
125
+ _unloadServiceUrls: function _unloadServiceUrls(serviceGroup, services) {
126
+ var _this2 = this;
127
+ // declare namespaces outside of loop
128
+ var existingService;
129
+ services.forEach(function (service) {
130
+ existingService = _this2._getUrl(service.name, serviceGroup);
131
+ if (existingService) {
132
+ _this2.serviceGroups[serviceGroup].splice(_this2.serviceGroups[serviceGroup].indexOf(existingService), 1);
133
+ }
134
+ });
135
+ return this;
136
+ },
137
+ /**
138
+ * Clear all collected catalog data and reset catalog status.
139
+ *
140
+ * @returns {void}
141
+ */
142
+ clean: function clean() {
143
+ this.serviceGroups.preauth.length = 0;
144
+ this.serviceGroups.signin.length = 0;
145
+ this.serviceGroups.postauth.length = 0;
146
+ this.status.preauth = {
147
+ ready: false
148
+ };
149
+ this.status.signin = {
150
+ ready: false
151
+ };
152
+ this.status.postauth = {
153
+ ready: false
154
+ };
155
+ },
156
+ /**
157
+ * Search over all service groups to find a cluster id based
158
+ * on a given url.
159
+ * @param {string} url - Must be parsable by `Url`
160
+ * @returns {string} - ClusterId of a given url
161
+ */
162
+ findClusterId: function findClusterId(url) {
163
+ var incomingUrlObj = _url.default.parse(url);
164
+ var serviceUrlObj;
165
+ for (var _i = 0, _Object$keys = (0, _keys.default)(this.serviceGroups); _i < _Object$keys.length; _i++) {
166
+ var key = _Object$keys[_i];
167
+ var _iterator = _createForOfIteratorHelper(this.serviceGroups[key]),
168
+ _step;
169
+ try {
170
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
171
+ var service = _step.value;
172
+ serviceUrlObj = _url.default.parse(service.defaultUrl);
173
+ var _iterator2 = _createForOfIteratorHelper(service.hosts),
174
+ _step2;
175
+ try {
176
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
177
+ var _host = _step2.value;
178
+ if (incomingUrlObj.hostname === _host.host && _host.id) {
179
+ return _host.id;
180
+ }
181
+ }
182
+ } catch (err) {
183
+ _iterator2.e(err);
184
+ } finally {
185
+ _iterator2.f();
186
+ }
187
+ if (serviceUrlObj.hostname === incomingUrlObj.hostname && service.hosts.length > 0) {
188
+ // no exact match, so try to grab the first home cluster
189
+ var _iterator3 = _createForOfIteratorHelper(service.hosts),
190
+ _step3;
191
+ try {
192
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
193
+ var host = _step3.value;
194
+ if (host.homeCluster) {
195
+ return host.id;
196
+ }
197
+ }
198
+
199
+ // no match found still, so return the first entry
200
+ } catch (err) {
201
+ _iterator3.e(err);
202
+ } finally {
203
+ _iterator3.f();
204
+ }
205
+ return service.hosts[0].id;
206
+ }
207
+ }
208
+ } catch (err) {
209
+ _iterator.e(err);
210
+ } finally {
211
+ _iterator.f();
212
+ }
213
+ }
214
+ return undefined;
215
+ },
216
+ /**
217
+ * Search over all service groups and return a service value from a provided
218
+ * clusterId. Currently, this method will return either a service name, or a
219
+ * service url depending on the `value` parameter. If the `value` parameter
220
+ * is set to `name`, it will return a service name to be utilized within the
221
+ * Services plugin methods.
222
+ * @param {object} params
223
+ * @param {string} params.clusterId - clusterId of found service
224
+ * @param {boolean} [params.priorityHost = true] - returns priority host url if true
225
+ * @param {string} [params.serviceGroup] - specify service group
226
+ * @returns {object} service
227
+ * @returns {string} service.name
228
+ * @returns {string} service.url
229
+ */
230
+ findServiceFromClusterId: function findServiceFromClusterId() {
231
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
232
+ clusterId = _ref.clusterId,
233
+ _ref$priorityHost = _ref.priorityHost,
234
+ priorityHost = _ref$priorityHost === void 0 ? true : _ref$priorityHost,
235
+ serviceGroup = _ref.serviceGroup;
236
+ var serviceUrls = 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));
237
+ var identifiedServiceUrl = serviceUrls.find(function (serviceUrl) {
238
+ return serviceUrl.hosts.find(function (host) {
239
+ return host.id === clusterId;
240
+ });
241
+ });
242
+ if (identifiedServiceUrl) {
243
+ return {
244
+ name: identifiedServiceUrl.name,
245
+ url: identifiedServiceUrl.get(priorityHost, clusterId)
246
+ };
247
+ }
248
+ return undefined;
249
+ },
250
+ /**
251
+ * Find a service based on the provided url.
252
+ * @param {string} url - Must be parsable by `Url`
253
+ * @returns {serviceUrl} - ServiceUrl assocated with provided url
254
+ */
255
+ findServiceUrlFromUrl: function findServiceUrlFromUrl(url) {
256
+ var serviceUrls = [].concat((0, _toConsumableArray2.default)(this.serviceGroups.discovery), (0, _toConsumableArray2.default)(this.serviceGroups.preauth), (0, _toConsumableArray2.default)(this.serviceGroups.signin), (0, _toConsumableArray2.default)(this.serviceGroups.postauth), (0, _toConsumableArray2.default)(this.serviceGroups.override));
257
+ return serviceUrls.find(function (serviceUrl) {
258
+ // Check to see if the URL we are checking starts with the default URL
259
+ if (url.startsWith(serviceUrl.defaultUrl)) {
260
+ return true;
261
+ }
262
+
263
+ // If not, we check to see if the alternate URLs match
264
+ // These are made by swapping the host of the default URL
265
+ // with that of an alternate host
266
+ var _iterator4 = _createForOfIteratorHelper(serviceUrl.hosts),
267
+ _step4;
268
+ try {
269
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
270
+ var host = _step4.value;
271
+ var alternateUrl = new URL(serviceUrl.defaultUrl);
272
+ alternateUrl.host = host.host;
273
+ if (url.startsWith(alternateUrl.toString())) {
274
+ return true;
275
+ }
276
+ }
277
+ } catch (err) {
278
+ _iterator4.e(err);
279
+ } finally {
280
+ _iterator4.f();
281
+ }
282
+ return false;
283
+ });
284
+ },
285
+ /**
286
+ * Finds an allowed domain that matches a specific url.
287
+ *
288
+ * @param {string} url - The url to match the allowed domains against.
289
+ * @returns {string} - The matching allowed domain.
290
+ */
291
+ findAllowedDomain: function findAllowedDomain(url) {
292
+ var urlObj = _url.default.parse(url);
293
+ if (!urlObj.host) {
294
+ return undefined;
295
+ }
296
+ return this.allowedDomains.find(function (allowedDomain) {
297
+ return urlObj.host.includes(allowedDomain);
298
+ });
299
+ },
300
+ /**
301
+ * Get a service url from the current services list by name.
302
+ * @param {string} name
303
+ * @param {boolean} priorityHost
304
+ * @param {string} serviceGroup
305
+ * @returns {string}
306
+ */
307
+ get: function get(name, priorityHost, serviceGroup) {
308
+ var serviceUrl = this._getUrl(name, serviceGroup);
309
+ return serviceUrl ? serviceUrl.get(priorityHost) : undefined;
310
+ },
311
+ /**
312
+ * Get the current allowed domains list.
313
+ *
314
+ * @returns {Array<string>} - the current allowed domains list.
315
+ */
316
+ getAllowedDomains: function getAllowedDomains() {
317
+ return (0, _toConsumableArray2.default)(this.allowedDomains);
318
+ },
319
+ /**
320
+ * Creates an object where the keys are the service names
321
+ * and the values are the service urls.
322
+ * @param {boolean} priorityHost - use the highest priority if set to `true`
323
+ * @param {string} [serviceGroup]
324
+ * @returns {Record<string, string>}
325
+ */
326
+ list: function list(priorityHost, serviceGroup) {
327
+ var output = {};
328
+ var serviceUrls = typeof serviceGroup === 'string' ? this.serviceGroups[serviceGroup] || [] : [].concat((0, _toConsumableArray2.default)(this.serviceGroups.discovery), (0, _toConsumableArray2.default)(this.serviceGroups.preauth), (0, _toConsumableArray2.default)(this.serviceGroups.signin), (0, _toConsumableArray2.default)(this.serviceGroups.postauth), (0, _toConsumableArray2.default)(this.serviceGroups.override));
329
+ if (serviceUrls) {
330
+ serviceUrls.forEach(function (serviceUrl) {
331
+ output[serviceUrl.name] = serviceUrl.get(priorityHost);
332
+ });
333
+ }
334
+ return output;
335
+ },
336
+ /**
337
+ * Mark a priority host service url as failed.
338
+ * This will mark the host associated with the
339
+ * `ServiceUrl` to be removed from the its
340
+ * respective host array, and then return the next
341
+ * viable host from the `ServiceUrls` host array,
342
+ * or the `ServiceUrls` default url if no other priority
343
+ * hosts are available, or if `noPriorityHosts` is set to
344
+ * `true`.
345
+ * @param {string} url
346
+ * @param {boolean} noPriorityHosts
347
+ * @returns {string}
348
+ */
349
+ markFailedUrl: function markFailedUrl(url, noPriorityHosts) {
350
+ var _this3 = this;
351
+ var serviceUrl = this._getUrl((0, _keys.default)(this.list()).find(function (key) {
352
+ return _this3._getUrl(key).failHost(url);
353
+ }));
354
+ if (!serviceUrl) {
355
+ return undefined;
356
+ }
357
+ return noPriorityHosts ? serviceUrl.get(false) : serviceUrl.get(true);
358
+ },
359
+ /**
360
+ * Set the allowed domains for the catalog.
361
+ *
362
+ * @param {Array<string>} allowedDomains - allowed domains to be assigned.
363
+ * @returns {void}
364
+ */
365
+ setAllowedDomains: function setAllowedDomains(allowedDomains) {
366
+ this.allowedDomains = (0, _toConsumableArray2.default)(allowedDomains);
367
+ },
368
+ /**
369
+ *
370
+ * @param {Array<string>} newAllowedDomains - new allowed domains to add to existing set of allowed domains
371
+ * @returns {void}
372
+ */
373
+ addAllowedDomains: function addAllowedDomains(newAllowedDomains) {
374
+ this.allowedDomains = (0, _lodash.union)(this.allowedDomains, newAllowedDomains);
375
+ },
376
+ /**
377
+ * Update the current list of `ServiceUrl`s against a provided
378
+ * service hostmap.
379
+ * @emits ServiceCatalog#preauthorized
380
+ * @emits ServiceCatalog#postauthorized
381
+ * @param {string} serviceGroup
382
+ * @param {object} serviceHostmap
383
+ * @returns {Services}
384
+ */
385
+ updateServiceUrls: function updateServiceUrls(serviceGroup, serviceHostmap) {
386
+ var _this4 = this;
387
+ var currentServiceUrls = this.serviceGroups[serviceGroup];
388
+ var unusedUrls = currentServiceUrls.filter(function (serviceUrl) {
389
+ return serviceHostmap.every(function (item) {
390
+ return item.name !== serviceUrl.name;
391
+ });
392
+ });
393
+ this._unloadServiceUrls(serviceGroup, unusedUrls);
394
+ serviceHostmap.forEach(function (serviceObj) {
395
+ var service = _this4._getUrl(serviceObj.name, serviceGroup);
396
+ if (service) {
397
+ service.defaultUrl = serviceObj.defaultUrl;
398
+ service.hosts = serviceObj.hosts || [];
399
+ } else {
400
+ _this4._loadServiceUrls(serviceGroup, [new _serviceUrl.default(_objectSpread({}, serviceObj))]);
401
+ }
402
+ });
403
+ this.status[serviceGroup].ready = true;
404
+ this.trigger(serviceGroup);
405
+ return this;
406
+ },
407
+ /**
408
+ * Wait until the service catalog is available,
409
+ * or reject after a timeout of 60 seconds.
410
+ * @param {string} serviceGroup
411
+ * @param {number} [timeout] - in seconds
412
+ * @returns {Promise<void>}
413
+ */
414
+ waitForCatalog: function waitForCatalog(serviceGroup, timeout) {
415
+ var _this5 = this;
416
+ return new _promise.default(function (resolve, reject) {
417
+ if (_this5.status[serviceGroup].ready) {
418
+ resolve();
419
+ }
420
+ var validatedTimeout = typeof timeout === 'number' && timeout >= 0 ? timeout : 60;
421
+ var timeoutTimer = setTimeout(function () {
422
+ return reject(new Error("services: timeout occured while waiting for '".concat(serviceGroup, "' catalog to populate")));
423
+ }, validatedTimeout * 1000);
424
+ _this5.once(serviceGroup, function () {
425
+ clearTimeout(timeoutTimer);
426
+ resolve();
427
+ });
428
+ });
429
+ }
430
+ });
431
+ /* eslint-enable no-underscore-dangle */
432
+ var _default = exports.default = ServiceCatalog;
433
+ //# sourceMappingURL=service-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_url","_interopRequireDefault","require","_ampersandState","_lodash","_serviceUrl","ownKeys","e","r","t","_Object$keys3","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","i","F","s","n","done","value","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","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","_getUrl","serviceGroup","serviceUrls","concat","_toConsumableArray2","find","serviceUrl","_listServiceUrls","_loadServiceUrls","services","_this","existingService","service","_unloadServiceUrls","_this2","splice","indexOf","clean","findClusterId","url","incomingUrlObj","Url","parse","serviceUrlObj","_i","_Object$keys","_keys","key","_iterator","_step","defaultUrl","_iterator2","hosts","_step2","host","hostname","id","_iterator3","_step3","homeCluster","undefined","findServiceFromClusterId","_ref","clusterId","_ref$priorityHost","priorityHost","identifiedServiceUrl","get","findServiceUrlFromUrl","startsWith","_iterator4","_step4","alternateUrl","URL","findAllowedDomain","urlObj","allowedDomain","includes","getAllowedDomains","list","output","markFailedUrl","noPriorityHosts","_this3","failHost","setAllowedDomains","addAllowedDomains","newAllowedDomains","union","updateServiceUrls","serviceHostmap","_this4","currentServiceUrls","unusedUrls","every","item","serviceObj","ServiceUrl","trigger","waitForCatalog","timeout","_this5","_promise","resolve","reject","validatedTimeout","timeoutTimer","setTimeout","Error","once","clearTimeout","_default","exports"],"sources":["service-catalog.js"],"sourcesContent":["import Url from 'url';\n\nimport AmpState from 'ampersand-state';\n\nimport {union} from 'lodash';\nimport ServiceUrl from './service-url';\n\n/* eslint-disable no-underscore-dangle */\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 * Search the service url array to locate a `ServiceUrl`\n * class object based on its name.\n * @param {string} name\n * @param {string} [serviceGroup]\n * @returns {ServiceUrl}\n */\n _getUrl(name, serviceGroup) {\n const serviceUrls =\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 serviceUrls.find((serviceUrl) => serviceUrl.name === name);\n },\n\n /**\n * @private\n * Generate an array of `ServiceUrl`s that is organized from highest auth\n * level to lowest auth level.\n * @returns {Array<ServiceUrl>} - array of `ServiceUrl`s\n */\n _listServiceUrls() {\n return [\n ...this.serviceGroups.override,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.discovery,\n ];\n },\n\n /**\n * @private\n * Safely load one or more `ServiceUrl`s into this `Services` instance.\n * @param {string} serviceGroup\n * @param {Array<ServiceUrl>} services\n * @returns {Services}\n */\n _loadServiceUrls(serviceGroup, services) {\n // declare namespaces outside of loop\n let existingService;\n\n services.forEach((service) => {\n existingService = this._getUrl(service.name, serviceGroup);\n\n if (!existingService) {\n this.serviceGroups[serviceGroup].push(service);\n }\n });\n\n return this;\n },\n\n /**\n * @private\n * Safely unload one or more `ServiceUrl`s into this `Services` instance\n * @param {string} serviceGroup\n * @param {Array<ServiceUrl>} services\n * @returns {Services}\n */\n _unloadServiceUrls(serviceGroup, services) {\n // declare namespaces outside of loop\n let existingService;\n\n services.forEach((service) => {\n existingService = this._getUrl(service.name, serviceGroup);\n\n if (existingService) {\n this.serviceGroups[serviceGroup].splice(\n this.serviceGroups[serviceGroup].indexOf(existingService),\n 1\n );\n }\n });\n\n return this;\n },\n\n /**\n * Clear all collected catalog data and reset catalog status.\n *\n * @returns {void}\n */\n clean() {\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} - ClusterId of a given url\n */\n findClusterId(url) {\n const incomingUrlObj = Url.parse(url);\n let serviceUrlObj;\n\n for (const key of Object.keys(this.serviceGroups)) {\n for (const service of this.serviceGroups[key]) {\n serviceUrlObj = Url.parse(service.defaultUrl);\n\n for (const host of service.hosts) {\n if (incomingUrlObj.hostname === host.host && host.id) {\n return host.id;\n }\n }\n\n if (serviceUrlObj.hostname === incomingUrlObj.hostname && service.hosts.length > 0) {\n // no exact match, so try to grab the first home cluster\n for (const host of service.hosts) {\n if (host.homeCluster) {\n return host.id;\n }\n }\n\n // no match found still, so return the first entry\n return service.hosts[0].id;\n }\n }\n }\n\n return undefined;\n },\n\n /**\n * Search over all service groups and return a service value from a provided\n * clusterId. Currently, this method will return either a service name, or a\n * service url depending on the `value` parameter. If the `value` parameter\n * is set to `name`, it will return a service name to be utilized within the\n * Services plugin methods.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {boolean} [params.priorityHost = true] - returns priority host url if true\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({clusterId, priorityHost = true, serviceGroup} = {}) {\n const serviceUrls =\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 const identifiedServiceUrl = serviceUrls.find((serviceUrl) =>\n serviceUrl.hosts.find((host) => host.id === clusterId)\n );\n\n if (identifiedServiceUrl) {\n return {\n name: identifiedServiceUrl.name,\n url: identifiedServiceUrl.get(priorityHost, clusterId),\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 {serviceUrl} - ServiceUrl assocated with provided url\n */\n findServiceUrlFromUrl(url) {\n const serviceUrls = [\n ...this.serviceGroups.discovery,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.override,\n ];\n\n return serviceUrls.find((serviceUrl) => {\n // Check to see if the URL we are checking starts with the default URL\n if (url.startsWith(serviceUrl.defaultUrl)) {\n return true;\n }\n\n // If not, we check to see if the alternate URLs match\n // These are made by swapping the host of the default URL\n // with that of an alternate host\n for (const host of serviceUrl.hosts) {\n const alternateUrl = new URL(serviceUrl.defaultUrl);\n alternateUrl.host = host.host;\n\n if (url.startsWith(alternateUrl.toString())) {\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) {\n const urlObj = Url.parse(url);\n\n if (!urlObj.host) {\n return undefined;\n }\n\n return this.allowedDomains.find((allowedDomain) => urlObj.host.includes(allowedDomain));\n },\n\n /**\n * Get a service url from the current services list by name.\n * @param {string} name\n * @param {boolean} priorityHost\n * @param {string} serviceGroup\n * @returns {string}\n */\n get(name, priorityHost, serviceGroup) {\n const serviceUrl = this._getUrl(name, serviceGroup);\n\n return serviceUrl ? serviceUrl.get(priorityHost) : undefined;\n },\n\n /**\n * Get the current allowed domains list.\n *\n * @returns {Array<string>} - the current allowed domains list.\n */\n getAllowedDomains() {\n return [...this.allowedDomains];\n },\n\n /**\n * Creates an object where the keys are the service names\n * and the values are the service urls.\n * @param {boolean} priorityHost - use the highest priority if set to `true`\n * @param {string} [serviceGroup]\n * @returns {Record<string, string>}\n */\n list(priorityHost, serviceGroup) {\n const output = {};\n\n const serviceUrls =\n typeof serviceGroup === 'string'\n ? this.serviceGroups[serviceGroup] || []\n : [\n ...this.serviceGroups.discovery,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.override,\n ];\n\n if (serviceUrls) {\n serviceUrls.forEach((serviceUrl) => {\n output[serviceUrl.name] = serviceUrl.get(priorityHost);\n });\n }\n\n return output;\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceUrl` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceUrls` host array,\n * or the `ServiceUrls` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @param {boolean} noPriorityHosts\n * @returns {string}\n */\n markFailedUrl(url, noPriorityHosts) {\n const serviceUrl = this._getUrl(\n Object.keys(this.list()).find((key) => this._getUrl(key).failHost(url))\n );\n\n if (!serviceUrl) {\n return undefined;\n }\n\n return noPriorityHosts ? serviceUrl.get(false) : serviceUrl.get(true);\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) {\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) {\n this.allowedDomains = union(this.allowedDomains, newAllowedDomains);\n },\n\n /**\n * Update the current list of `ServiceUrl`s against a provided\n * service hostmap.\n * @emits ServiceCatalog#preauthorized\n * @emits ServiceCatalog#postauthorized\n * @param {string} serviceGroup\n * @param {object} serviceHostmap\n * @returns {Services}\n */\n updateServiceUrls(serviceGroup, serviceHostmap) {\n const currentServiceUrls = this.serviceGroups[serviceGroup];\n\n const unusedUrls = currentServiceUrls.filter((serviceUrl) =>\n serviceHostmap.every((item) => item.name !== serviceUrl.name)\n );\n\n this._unloadServiceUrls(serviceGroup, unusedUrls);\n\n serviceHostmap.forEach((serviceObj) => {\n const service = this._getUrl(serviceObj.name, serviceGroup);\n\n if (service) {\n service.defaultUrl = serviceObj.defaultUrl;\n service.hosts = serviceObj.hosts || [];\n } else {\n this._loadServiceUrls(serviceGroup, [\n new ServiceUrl({\n ...serviceObj,\n }),\n ]);\n }\n });\n\n this.status[serviceGroup].ready = true;\n this.trigger(serviceGroup);\n\n return this;\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, timeout) {\n return new Promise((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/* eslint-enable no-underscore-dangle */\n\nexport default ServiceCatalog;\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
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
+ var _default = exports.default = {
9
+ hydra: 'https://api-usgov.webex.com/v1',
10
+ u2c: 'https://u2c.gov.ciscospark.com/u2c/api/v1',
11
+ sqdiscovery: 'https://ds.ciscospark.com/v1/region' // TODO: fedramp load balanced URL? this has been here for years as of now but now explicitly done
12
+ };
13
+ //# sourceMappingURL=service-fed-ramp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["hydra","u2c","sqdiscovery"],"sources":["service-fed-ramp.js"],"sourcesContent":["export default {\n hydra: 'https://api-usgov.webex.com/v1',\n u2c: 'https://u2c.gov.ciscospark.com/u2c/api/v1',\n sqdiscovery: 'https://ds.ciscospark.com/v1/region', // TODO: fedramp load balanced URL? this has been here for years as of now but now explicitly done\n};\n"],"mappings":";;;;;;;iCAAe;EACbA,KAAK,EAAE,gCAAgC;EACvCC,GAAG,EAAE,2CAA2C;EAChDC,WAAW,EAAE,qCAAqC,CAAE;AACtD,CAAC"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _url = _interopRequireDefault(require("url"));
10
+ var _ampersandState = _interopRequireDefault(require("ampersand-state"));
11
+ /* eslint-disable no-underscore-dangle */
12
+ /**
13
+ * @class
14
+ */
15
+ var ServiceUrl = _ampersandState.default.extend({
16
+ namespace: 'ServiceUrl',
17
+ props: {
18
+ defaultUrl: ['string', true, undefined],
19
+ hosts: ['array', false, function () {
20
+ return [];
21
+ }],
22
+ name: ['string', true, undefined]
23
+ },
24
+ /**
25
+ * Generate a host url based on the host
26
+ * uri provided.
27
+ * @param {string} hostUri
28
+ * @returns {string}
29
+ */
30
+ _generateHostUrl: function _generateHostUrl(hostUri) {
31
+ var url = _url.default.parse(this.defaultUrl);
32
+
33
+ // setting url.hostname will not apply during Url.format(), set host via
34
+ // a string literal instead.
35
+ url.host = "".concat(hostUri).concat(url.port ? ":".concat(url.port) : '');
36
+ return _url.default.format(url);
37
+ },
38
+ /**
39
+ * Generate a list of urls based on this
40
+ * `ServiceUrl`'s known hosts.
41
+ * @returns {string[]}
42
+ */
43
+ _getHostUrls: function _getHostUrls() {
44
+ var _this = this;
45
+ return this.hosts.map(function (host) {
46
+ return {
47
+ url: _this._generateHostUrl(host.host),
48
+ priority: host.priority
49
+ };
50
+ });
51
+ },
52
+ /**
53
+ * Get the current host url with the highest priority. If a clusterId is not
54
+ * provided, this will only return a URL with a filtered host that has the
55
+ * `homeCluster` value set to `true`.
56
+ *
57
+ * @param {string} [clusterId] - The clusterId to filter for a priority host.
58
+ * @returns {string} - The priority host url.
59
+ */
60
+ _getPriorityHostUrl: function _getPriorityHostUrl(clusterId) {
61
+ if (this.hosts.length === 0) {
62
+ return this.defaultUrl;
63
+ }
64
+ var filteredHosts = clusterId ? this.hosts.filter(function (host) {
65
+ return host.id === clusterId;
66
+ }) : this.hosts.filter(function (host) {
67
+ return host.homeCluster;
68
+ });
69
+ var aliveHosts = filteredHosts.filter(function (host) {
70
+ return !host.failed;
71
+ });
72
+ filteredHosts = aliveHosts.length === 0 ? filteredHosts.map(function (host) {
73
+ /* eslint-disable-next-line no-param-reassign */
74
+ host.failed = false;
75
+ return host;
76
+ }) : aliveHosts;
77
+ return this._generateHostUrl(filteredHosts.reduce(function (previous, current) {
78
+ return previous.priority > current.priority || !previous.homeCluster ? current : previous;
79
+ }, {}).host);
80
+ },
81
+ /**
82
+ * Attempt to mark a host from this `ServiceUrl` as failed and return true
83
+ * if the provided url has a host that could be successfully marked as failed.
84
+ *
85
+ * @param {string} url
86
+ * @returns {boolean}
87
+ */
88
+ failHost: function failHost(url) {
89
+ if (url === this.defaultUrl) {
90
+ return true;
91
+ }
92
+ var _Url$parse = _url.default.parse(url),
93
+ hostname = _Url$parse.hostname;
94
+ var foundHost = this.hosts.find(function (hostObj) {
95
+ return hostObj.host === hostname;
96
+ });
97
+ if (foundHost) {
98
+ foundHost.failed = true;
99
+ }
100
+ return foundHost !== undefined;
101
+ },
102
+ /**
103
+ * Get the current `defaultUrl` or generate a url using the host with the
104
+ * highest priority via host rendering.
105
+ *
106
+ * @param {boolean} [priorityHost] - Retrieve the priority host.
107
+ * @param {string} [clusterId] - Cluster to match a host against.
108
+ * @returns {string} - The full service url.
109
+ */
110
+ get: function get(priorityHost, clusterId) {
111
+ if (!priorityHost) {
112
+ return this.defaultUrl;
113
+ }
114
+ return this._getPriorityHostUrl(clusterId);
115
+ }
116
+ });
117
+ /* eslint-enable no-underscore-dangle */
118
+ var _default = exports.default = ServiceUrl;
119
+ //# sourceMappingURL=service-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_url","_interopRequireDefault","require","_ampersandState","ServiceUrl","AmpState","extend","namespace","props","defaultUrl","undefined","hosts","name","_generateHostUrl","hostUri","url","Url","parse","host","concat","port","format","_getHostUrls","_this","map","priority","_getPriorityHostUrl","clusterId","length","filteredHosts","filter","id","homeCluster","aliveHosts","failed","reduce","previous","current","failHost","_Url$parse","hostname","foundHost","find","hostObj","get","priorityHost","_default","exports","default"],"sources":["service-url.js"],"sourcesContent":["import Url from 'url';\n\nimport AmpState from 'ampersand-state';\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst ServiceUrl = AmpState.extend({\n namespace: 'ServiceUrl',\n\n props: {\n defaultUrl: ['string', true, undefined],\n hosts: ['array', false, () => []],\n name: ['string', true, undefined],\n },\n\n /**\n * Generate a host url based on the host\n * uri provided.\n * @param {string} hostUri\n * @returns {string}\n */\n _generateHostUrl(hostUri) {\n const url = Url.parse(this.defaultUrl);\n\n // setting url.hostname will not apply during Url.format(), set host via\n // a string literal instead.\n url.host = `${hostUri}${url.port ? `:${url.port}` : ''}`;\n\n return Url.format(url);\n },\n\n /**\n * Generate a list of urls based on this\n * `ServiceUrl`'s known hosts.\n * @returns {string[]}\n */\n _getHostUrls() {\n return this.hosts.map((host) => ({\n url: this._generateHostUrl(host.host),\n priority: host.priority,\n }));\n },\n\n /**\n * Get the current host url with the highest priority. If a clusterId is not\n * provided, this will only return a URL with a filtered host that has the\n * `homeCluster` value set to `true`.\n *\n * @param {string} [clusterId] - The clusterId to filter for a priority host.\n * @returns {string} - The priority host url.\n */\n _getPriorityHostUrl(clusterId) {\n if (this.hosts.length === 0) {\n return this.defaultUrl;\n }\n\n let filteredHosts = clusterId\n ? this.hosts.filter((host) => host.id === clusterId)\n : this.hosts.filter((host) => host.homeCluster);\n\n const aliveHosts = filteredHosts.filter((host) => !host.failed);\n\n filteredHosts =\n aliveHosts.length === 0\n ? filteredHosts.map((host) => {\n /* eslint-disable-next-line no-param-reassign */\n host.failed = false;\n\n return host;\n })\n : aliveHosts;\n\n return this._generateHostUrl(\n filteredHosts.reduce(\n (previous, current) =>\n previous.priority > current.priority || !previous.homeCluster ? current : previous,\n {}\n ).host\n );\n },\n\n /**\n * Attempt to mark a host from this `ServiceUrl` as failed and return true\n * if the provided url has a host that could be successfully marked as failed.\n *\n * @param {string} url\n * @returns {boolean}\n */\n failHost(url) {\n if (url === this.defaultUrl) {\n return true;\n }\n\n const {hostname} = Url.parse(url);\n const foundHost = this.hosts.find((hostObj) => hostObj.host === hostname);\n\n if (foundHost) {\n foundHost.failed = true;\n }\n\n return foundHost !== undefined;\n },\n\n /**\n * Get the current `defaultUrl` or generate a url using the host with the\n * highest priority via host rendering.\n *\n * @param {boolean} [priorityHost] - Retrieve the priority host.\n * @param {string} [clusterId] - Cluster to match a host against.\n * @returns {string} - The full service url.\n */\n get(priorityHost, clusterId) {\n if (!priorityHost) {\n return this.defaultUrl;\n }\n\n return this._getPriorityHostUrl(clusterId);\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default ServiceUrl;\n"],"mappings":"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"}