@webex/webex-core 3.10.0-next.2 → 3.10.0-next.4

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 (106) hide show
  1. package/dist/config.js.map +1 -1
  2. package/dist/credentials-config.js.map +1 -1
  3. package/dist/index.js +1 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/interceptors/auth.js +6 -8
  6. package/dist/interceptors/auth.js.map +1 -1
  7. package/dist/interceptors/default-options.js +6 -8
  8. package/dist/interceptors/default-options.js.map +1 -1
  9. package/dist/interceptors/embargo.js +6 -8
  10. package/dist/interceptors/embargo.js.map +1 -1
  11. package/dist/interceptors/network-timing.js +6 -8
  12. package/dist/interceptors/network-timing.js.map +1 -1
  13. package/dist/interceptors/payload-transformer.js +6 -8
  14. package/dist/interceptors/payload-transformer.js.map +1 -1
  15. package/dist/interceptors/proxy.js +7 -10
  16. package/dist/interceptors/proxy.js.map +1 -1
  17. package/dist/interceptors/rate-limit.js +7 -10
  18. package/dist/interceptors/rate-limit.js.map +1 -1
  19. package/dist/interceptors/redirect.js +9 -8
  20. package/dist/interceptors/redirect.js.map +1 -1
  21. package/dist/interceptors/request-event.js +6 -8
  22. package/dist/interceptors/request-event.js.map +1 -1
  23. package/dist/interceptors/request-logger.js +6 -8
  24. package/dist/interceptors/request-logger.js.map +1 -1
  25. package/dist/interceptors/request-timing.js +6 -8
  26. package/dist/interceptors/request-timing.js.map +1 -1
  27. package/dist/interceptors/response-logger.js +6 -8
  28. package/dist/interceptors/response-logger.js.map +1 -1
  29. package/dist/interceptors/user-agent.js +8 -11
  30. package/dist/interceptors/user-agent.js.map +1 -1
  31. package/dist/interceptors/webex-tracking-id.js +6 -8
  32. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  33. package/dist/interceptors/webex-user-agent.js +7 -10
  34. package/dist/interceptors/webex-user-agent.js.map +1 -1
  35. package/dist/lib/batcher.js +1 -1
  36. package/dist/lib/batcher.js.map +1 -1
  37. package/dist/lib/constants.js.map +1 -1
  38. package/dist/lib/credentials/credentials.js +4 -6
  39. package/dist/lib/credentials/credentials.js.map +1 -1
  40. package/dist/lib/credentials/grant-errors.js +18 -26
  41. package/dist/lib/credentials/grant-errors.js.map +1 -1
  42. package/dist/lib/credentials/index.js.map +1 -1
  43. package/dist/lib/credentials/scope.js.map +1 -1
  44. package/dist/lib/credentials/token-collection.js.map +1 -1
  45. package/dist/lib/credentials/token.js +5 -5
  46. package/dist/lib/credentials/token.js.map +1 -1
  47. package/dist/lib/interceptors/hostmap.js +6 -8
  48. package/dist/lib/interceptors/hostmap.js.map +1 -1
  49. package/dist/lib/interceptors/server-error.js +6 -8
  50. package/dist/lib/interceptors/server-error.js.map +1 -1
  51. package/dist/lib/interceptors/service.js +6 -8
  52. package/dist/lib/interceptors/service.js.map +1 -1
  53. package/dist/lib/metrics.js.map +1 -1
  54. package/dist/lib/page.js +5 -6
  55. package/dist/lib/page.js.map +1 -1
  56. package/dist/lib/services/index.js.map +1 -1
  57. package/dist/lib/services/service-catalog.js +3 -3
  58. package/dist/lib/services/service-catalog.js.map +1 -1
  59. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  60. package/dist/lib/services/service-host.js +1 -2
  61. package/dist/lib/services/service-host.js.map +1 -1
  62. package/dist/lib/services/service-registry.js +1 -2
  63. package/dist/lib/services/service-registry.js.map +1 -1
  64. package/dist/lib/services/service-state.js +1 -2
  65. package/dist/lib/services/service-state.js.map +1 -1
  66. package/dist/lib/services/service-url.js.map +1 -1
  67. package/dist/lib/services/services.js +18 -19
  68. package/dist/lib/services/services.js.map +1 -1
  69. package/dist/lib/services-v2/index.js.map +1 -1
  70. package/dist/lib/services-v2/metrics.js.map +1 -1
  71. package/dist/lib/services-v2/service-catalog.js +7 -7
  72. package/dist/lib/services-v2/service-catalog.js.map +1 -1
  73. package/dist/lib/services-v2/service-detail.js.map +1 -1
  74. package/dist/lib/services-v2/service-fed-ramp.js.map +1 -1
  75. package/dist/lib/services-v2/services-v2.js +40 -41
  76. package/dist/lib/services-v2/services-v2.js.map +1 -1
  77. package/dist/lib/services-v2/types.js.map +1 -1
  78. package/dist/lib/stateless-webex-plugin.js +3 -4
  79. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  80. package/dist/lib/storage/decorators.js.map +1 -1
  81. package/dist/lib/storage/errors.js +7 -9
  82. package/dist/lib/storage/errors.js.map +1 -1
  83. package/dist/lib/storage/index.js.map +1 -1
  84. package/dist/lib/storage/make-webex-plugin-store.js +14 -5
  85. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  86. package/dist/lib/storage/make-webex-store.js +13 -5
  87. package/dist/lib/storage/make-webex-store.js.map +1 -1
  88. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  89. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  90. package/dist/lib/webex-http-error.js +8 -11
  91. package/dist/lib/webex-http-error.js.map +1 -1
  92. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  93. package/dist/lib/webex-plugin.js.map +1 -1
  94. package/dist/plugins/logger.js +1 -1
  95. package/dist/plugins/logger.js.map +1 -1
  96. package/dist/webex-core.js +11 -11
  97. package/dist/webex-core.js.map +1 -1
  98. package/dist/webex-internal-core.js.map +1 -1
  99. package/package.json +3 -3
  100. package/src/interceptors/redirect.js +4 -0
  101. package/src/lib/services-v2/service-catalog.ts +4 -4
  102. package/src/lib/services-v2/services-v2.ts +3 -3
  103. package/test/fixtures/host-catalog-v2.ts +1 -1
  104. package/test/integration/spec/services-v2/service-catalog.js +2 -2
  105. package/test/unit/spec/interceptors/redirect.js +98 -0
  106. package/test/unit/spec/services-v2/services-v2.ts +14 -0
@@ -518,7 +518,7 @@ var Services = _webexPlugin.default.extend({
518
518
  */
519
519
  updateCatalog: function updateCatalog(serviceGroup, hostMap) {
520
520
  var catalog = this._getCatalog();
521
- var serviceHostMap = this._formatReceivedHostmap(hostMap);
521
+ var serviceHostMap = this._formatReceivedHostmap(hostMap || {});
522
522
  return catalog.updateServiceGroups(serviceGroup, serviceHostMap === null || serviceHostMap === void 0 ? void 0 : serviceHostMap.services, serviceHostMap === null || serviceHostMap === void 0 ? void 0 : serviceHostMap.timestamp);
523
523
  },
524
524
  /**
@@ -595,7 +595,6 @@ var Services = _webexPlugin.default.extend({
595
595
  idbroker: {
596
596
  url: idbrokerUrl.replace(trailingSlashes, '') // remove trailing slash
597
597
  },
598
-
599
598
  identity: {
600
599
  url: identityUrl.replace(trailingSlashes, '') // remove trailing slash
601
600
  }
@@ -738,16 +737,16 @@ var Services = _webexPlugin.default.extend({
738
737
  * catalog endpoint.
739
738
  * @returns {Array<Service>}
740
739
  */
741
- _formatReceivedHostmap: function _formatReceivedHostmap(_ref10) {
740
+ _formatReceivedHostmap: function _formatReceivedHostmap(_ref0) {
742
741
  var _this8 = this;
743
- var services = _ref10.services,
744
- activeServices = _ref10.activeServices,
745
- timestamp = _ref10.timestamp,
746
- orgId = _ref10.orgId,
747
- format = _ref10.format;
742
+ var services = _ref0.services,
743
+ activeServices = _ref0.activeServices,
744
+ timestamp = _ref0.timestamp,
745
+ orgId = _ref0.orgId,
746
+ format = _ref0.format;
748
747
  var formattedHostmap = {
749
748
  activeServices: activeServices,
750
- services: services.map(function (service) {
749
+ services: services === null || services === void 0 ? void 0 : services.map(function (service) {
751
750
  return _this8._formatHostMapEntry(service);
752
751
  }),
753
752
  timestamp: timestamp,
@@ -788,9 +787,9 @@ var Services = _webexPlugin.default.extend({
788
787
  * @returns {String} url of the service
789
788
  */
790
789
  getServiceUrlFromClusterId: function getServiceUrlFromClusterId() {
791
- var _ref11 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
792
- _ref11$cluster = _ref11.cluster,
793
- cluster = _ref11$cluster === void 0 ? 'us' : _ref11$cluster;
790
+ var _ref1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
791
+ _ref1$cluster = _ref1.cluster,
792
+ cluster = _ref1$cluster === void 0 ? 'us' : _ref1$cluster;
794
793
  var clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;
795
794
 
796
795
  // Determine if cluster has service name (non-US clusters from hydra do not)
@@ -798,10 +797,10 @@ var Services = _webexPlugin.default.extend({
798
797
  // Add Service to cluster identifier
799
798
  clusterId = "".concat(cluster, ":").concat(CLUSTER_SERVICE);
800
799
  }
801
- var _ref12 = this.getServiceFromClusterId({
800
+ var _ref10 = this.getServiceFromClusterId({
802
801
  clusterId: clusterId
803
802
  }) || {},
804
- url = _ref12.url;
803
+ url = _ref10.url;
805
804
  if (!url) {
806
805
  throw Error("Could not find service for cluster [".concat(cluster, "]"));
807
806
  }
@@ -874,11 +873,11 @@ var Services = _webexPlugin.default.extend({
874
873
  */
875
874
  _fetchNewServiceHostmap: function _fetchNewServiceHostmap() {
876
875
  var _this9 = this;
877
- var _ref13 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
878
- from = _ref13.from,
879
- query = _ref13.query,
880
- token = _ref13.token,
881
- forceRefresh = _ref13.forceRefresh;
876
+ var _ref11 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
877
+ from = _ref11.from,
878
+ query = _ref11.query,
879
+ token = _ref11.token,
880
+ forceRefresh = _ref11.forceRefresh;
882
881
  var service = 'u2c';
883
882
  var resource = from ? "/".concat(from, "/catalog") : '/catalog';
884
883
  var qs = _objectSpread(_objectSpread({}, query || {}), {}, {
@@ -901,9 +900,9 @@ var Services = _webexPlugin.default.extend({
901
900
  }
902
901
  return this.webex.internal.newMetrics.callDiagnosticLatencies.measureLatency(function () {
903
902
  return _this9.request(requestObject);
904
- }, 'internal.get.u2c.time').then(function (_ref14) {
905
- var body = _ref14.body;
906
- return _this9._formatReceivedHostmap(body);
903
+ }, 'internal.get.u2c.time').then(function (_ref12) {
904
+ var body = _ref12.body;
905
+ return _this9._formatReceivedHostmap(body || {});
907
906
  });
908
907
  },
909
908
  /**
@@ -912,7 +911,7 @@ var Services = _webexPlugin.default.extend({
912
911
  * @returns {void}
913
912
  */
914
913
  initConfig: function initConfig() {
915
- var _this10 = this;
914
+ var _this0 = this;
916
915
  // Get the catalog and destructure the services config.
917
916
  var catalog = this._getCatalog();
918
917
  var _this$webex$config = this.webex.config,
@@ -928,7 +927,7 @@ var Services = _webexPlugin.default.extend({
928
927
  if (services.discovery) {
929
928
  // Format the discovery configuration into an injectable array.
930
929
  var formattedDiscoveryServices = (0, _keys.default)(services.discovery).map(function (key) {
931
- return _this10._formatHostMapEntry({
930
+ return _this0._formatHostMapEntry({
932
931
  id: key,
933
932
  serviceName: key,
934
933
  serviceUrls: [{
@@ -944,7 +943,7 @@ var Services = _webexPlugin.default.extend({
944
943
  if (services.override) {
945
944
  // Format the override configuration into an injectable array.
946
945
  var formattedOverrideServices = (0, _keys.default)(services.override).map(function (key) {
947
- return _this10._formatHostMapEntry({
946
+ return _this0._formatHostMapEntry({
948
947
  id: key,
949
948
  serviceName: key,
950
949
  serviceUrls: [{
@@ -979,7 +978,7 @@ var Services = _webexPlugin.default.extend({
979
978
  * @returns {Promise<void, Error>} - Errors if the token is unavailable.
980
979
  */
981
980
  initServiceCatalogs: function initServiceCatalogs() {
982
- var _this11 = this;
981
+ var _this1 = this;
983
982
  var refresh = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
984
983
  this.logger.info('services: initializing initial service catalogs');
985
984
 
@@ -995,18 +994,18 @@ var Services = _webexPlugin.default.extend({
995
994
  })
996
995
  // Begin collecting the preauth/limited catalog.
997
996
  .then(function (orgId) {
998
- return _this11.collectPreauthCatalog({
997
+ return _this1.collectPreauthCatalog({
999
998
  orgId: orgId
1000
999
  }, refresh);
1001
1000
  }).then(function () {
1002
1001
  // Validate if the token is authorized.
1003
1002
  if (credentials.canAuthorize) {
1004
1003
  // Attempt to collect the postauth catalog.
1005
- return _this11.updateServices({
1004
+ return _this1.updateServices({
1006
1005
  forceRefresh: refresh
1007
1006
  }).catch(function () {
1008
- _this11.initFailed = true;
1009
- _this11.logger.warn('services: cannot retrieve postauth catalog');
1007
+ _this1.initFailed = true;
1008
+ _this1.logger.warn('services: cannot retrieve postauth catalog');
1010
1009
  });
1011
1010
  }
1012
1011
 
@@ -1022,39 +1021,39 @@ var Services = _webexPlugin.default.extend({
1022
1021
  * @returns {Services}
1023
1022
  */
1024
1023
  initialize: function initialize() {
1025
- var _this12 = this;
1024
+ var _this10 = this;
1026
1025
  var catalog = new _serviceCatalog.default();
1027
1026
  this._catalogs.set(this.webex, catalog);
1028
1027
 
1029
1028
  // Listen for configuration changes once.
1030
1029
  this.listenToOnce(this.webex, 'change:config', function () {
1031
- _this12.initConfig();
1030
+ _this10.initConfig();
1032
1031
  });
1033
1032
 
1034
1033
  // wait for webex instance to be ready before attempting
1035
1034
  // to update the service catalogs
1036
1035
  this.listenToOnce(this.webex, 'ready', function () {
1037
- var supertoken = _this12.webex.credentials.supertoken;
1036
+ var supertoken = _this10.webex.credentials.supertoken;
1038
1037
  // Validate if the supertoken exists.
1039
1038
  if (supertoken && supertoken.access_token) {
1040
- _this12.initServiceCatalogs().then(function () {
1039
+ _this10.initServiceCatalogs().then(function () {
1041
1040
  catalog.isReady = true;
1042
1041
  }).catch(function (error) {
1043
- _this12.initFailed = true;
1044
- _this12.logger.error("services: failed to init initial services when credentials available, ".concat(error === null || error === void 0 ? void 0 : error.message));
1042
+ _this10.initFailed = true;
1043
+ _this10.logger.error("services: failed to init initial services when credentials available, ".concat(error === null || error === void 0 ? void 0 : error.message));
1045
1044
  });
1046
1045
  } else {
1047
- var email = _this12.webex.config.email;
1048
- _this12.collectPreauthCatalog(email ? {
1046
+ var email = _this10.webex.config.email;
1047
+ _this10.collectPreauthCatalog(email ? {
1049
1048
  email: email
1050
1049
  } : undefined).catch(function (error) {
1051
- _this12.initFailed = true;
1052
- _this12.logger.error("services: failed to init initial services when no credentials available, ".concat(error === null || error === void 0 ? void 0 : error.message));
1050
+ _this10.initFailed = true;
1051
+ _this10.logger.error("services: failed to init initial services when no credentials available, ".concat(error === null || error === void 0 ? void 0 : error.message));
1053
1052
  });
1054
1053
  }
1055
1054
  });
1056
1055
  },
1057
- version: "3.10.0-next.2"
1056
+ version: "3.10.0-next.4"
1058
1057
  });
1059
1058
  /* eslint-enable no-underscore-dangle */
1060
1059
  var _default = exports.default = Services;
@@ -1 +1 @@
1
- {"version":3,"names":["_sha","_interopRequireDefault","require","_lodash","_webexPlugin","_metrics","_serviceCatalog","_serviceFedRamp","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","trailingSlashes","DEFAULT_CLUSTER","exports","DEFAULT_CLUSTER_SERVICE","CLUSTER_SERVICE","process","env","WEBEX_CONVERSATION_CLUSTER_SERVICE","DEFAULT_CLUSTER_IDENTIFIER","WEBEX_CONVERSATION_DEFAULT_CLUSTER","concat","Services","WebexPlugin","extend","namespace","props","validateDomains","initFailed","_catalogs","_weakMap","_activeServices","_services","_getCatalog","get","webex","name","serviceGroup","catalog","clusterId","urlById","urlByName","undefined","hasAllowedDomains","getAllowedDomains","markFailedUrl","url","markFailedServiceUrl","getMobiusClusters","clusters","services","service","serviceName","_isArray","serviceUrls","serviceUrl","modifiedHost","baseUrl","replace","find","c","host","priority","id","ttl","_updateActiveServices","activeServices","_updateServices","unionBy","updateServices","_catalog$status","_catalog$status$servi","_this","_ref","from","query","token","forceRefresh","formattedQuery","status","collecting","waitForCatalog","queryKey","_keys","includes","_promise","reject","Error","email","emailhash","sha256","toLowerCase","toString","_fetchNewServiceHostmap","then","serviceHostMap","updateServiceGroups","timestamp","updateCredentialsConfig","catch","error","validateUser","_ref2","_this2","_ref2$reqId","reqId","_ref2$forceRefresh","_ref2$activationOptio","activationOptions","preloginUserId","logger","info","canAuthorize","credentials","getUserToken","sendUserActivation","userObj","activated","exists","details","user","_this$webex$credentia","config","client_id","client_secret","collectPreauthCatalog","idbrokerService","getClientToken","uri","scope","tokenObj","collectSigninCatalog","rto","all","_ref3","_ref4","_slicedToArray2","response","statusCode","responseText","body","message","switchActiveClusterIds","newActiveClusters","_this3","newActiveClusterIds","_values","missingClusterIds","some","warn","initServiceCatalogs","resolve","invalidateCache","_this$_getCatalog","lastTime","toNumber","invalidateTime","getMeetingPreferences","_this4","request","method","resource","res","err","fetchClientRegionInfo","_this5","discovery","sqdiscovery","addAuthHeader","headers","timeout","_ref5","_this6","countryCode","timezone","clientRegionInfo","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","updateCatalog","hostMap","_formatReceivedHostmap","mode","_ref7","idbrokerUrl","identityUrl","_this$webex$config$cr","authorizationString","authorizeUrl","setConfig","idbroker","identity","supertoken","access_token","postauth","ready","preauth","waitForService","_ref8","_this7","_ref8$timeout","fetchFromServiceUrl","servicesNotNeedValidation","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","replaceHostFromHostmap","convertUrlToPriorityHostUrl","_unused","_formatHostMapEntry","_ref9","formattedServiceUrls","URL","_ref10","_this8","orgId","format","formattedHostmap","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref11","_ref11$cluster","cluster","split","_ref12","findServiceDetailFromUrl","defaultUrl","startsWith","href","isAllowedDomainUrl","findAllowedDomain","data","_this9","_ref13","qs","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref14","initConfig","_this10","_this$webex$config","fedramp","fedRampServices","formattedDiscoveryServices","key","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this11","refresh","getOrgId","initialize","_this12","ServiceCatalog","set","listenToOnce","version","_default"],"sources":["services-v2.ts"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {toNumber, union, unionBy} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from '../metrics';\nimport ServiceCatalog from './service-catalog';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from '../constants';\nimport {\n ActiveServices,\n IServiceCatalog,\n QueryOptions,\n Service,\n ServiceHostmap,\n ServiceGroup,\n ServiceHost,\n} from './types';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n// The default cluster when one is not provided (usually as 'US' from hydra)\nexport const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';\n// The default service name for convo (currently identityLookup due to some weird CSB issue)\nexport const DEFAULT_CLUSTER_SERVICE = 'identityLookup';\n\nconst CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;\nconst DEFAULT_CLUSTER_IDENTIFIER =\n process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n _catalogs: new WeakMap(),\n\n _activeServices: {},\n\n _services: [],\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {IServiceCatalog}\n */\n _getCatalog(): IServiceCatalog {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Get a service url from the current services list by name\n * from the associated instance catalog.\n * @param {string} name\n * @param {ServiceGroup} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name: string, serviceGroup?: ServiceGroup): string | undefined {\n const catalog = this._getCatalog();\n\n const clusterId = this._activeServices[name];\n\n const urlById = catalog.get(clusterId, serviceGroup);\n const urlByName = catalog.get(name, serviceGroup);\n\n // if both are undefined, then we cannot find the service\n if (!urlById && !urlByName) {\n return undefined;\n }\n\n return urlById || urlByName;\n },\n\n /**\n * Determine if a whilelist exists in the service catalog.\n *\n * @returns {boolean} - True if a allowed domains list exists.\n */\n hasAllowedDomains(): boolean {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the service url associated with the\n * `ServiceDetail` to be removed from the its\n * respective service url array, and then return the next\n * viable service url from the `ServiceDetail` service url array.\n * @param {string} url\n * @returns {string}\n */\n markFailedUrl(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.markFailedServiceUrl(url);\n },\n\n /**\n * Get all Mobius cluster host entries from the v2 services list.\n * @returns {Array<ServiceHost>} - An array of `ServiceHost` objects.\n */\n getMobiusClusters(): Array<ServiceHost> {\n const clusters: Array<ServiceHost> = [];\n const services: Array<Service> = this._services || [];\n\n services\n .filter(\n (service) =>\n service?.serviceName === 'mobius' &&\n Array.isArray(service.serviceUrls) &&\n service.serviceUrls.length > 0\n )\n .forEach((service) => {\n service.serviceUrls.forEach((serviceUrl) => {\n const modifiedHost = serviceUrl.baseUrl.replace('https://', '').replace('/api/v1', '');\n if (!clusters.find((c) => c && c.host === modifiedHost)) {\n clusters.push({\n host: modifiedHost,\n priority: serviceUrl.priority,\n id: service.id,\n ttl: 0,\n });\n }\n });\n });\n\n return clusters;\n },\n\n /**\n * saves all the services from the pre and post catalog service\n * @param {ActiveServices} activeServices\n * @returns {void}\n */\n _updateActiveServices(activeServices: ActiveServices): void {\n this._activeServices = {...this._activeServices, ...activeServices};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Array<Service>} services\n * @returns {void}\n */\n _updateServices(services: Array<Service>): void {\n this._services = unionBy(services, this._services, 'id');\n },\n\n /**\n * Update a list of `serviceUrls` to the most current\n * catalog via the defined `discoveryUrl` then returns the current\n * list of services.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n updateServices(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const catalog = this._getCatalog();\n let formattedQuery;\n let serviceGroup;\n\n // map catalog name to service group name.\n switch (from) {\n case 'limited':\n serviceGroup = 'preauth';\n break;\n case 'signin':\n serviceGroup = 'signin';\n break;\n default:\n serviceGroup = 'postauth';\n break;\n }\n // confirm catalog update for group is not in progress.\n if (catalog.status?.[serviceGroup]?.collecting) {\n return this.waitForCatalog(serviceGroup);\n }\n\n catalog.status[serviceGroup].collecting = true;\n\n if (serviceGroup === 'preauth') {\n const queryKey = query && Object.keys(query)[0];\n\n if (!['email', 'emailhash', 'userId', 'orgId', 'mode'].includes(queryKey)) {\n return Promise.reject(\n new Error('a query param of email, emailhash, userId, orgId, or mode is required')\n );\n }\n }\n // encode email when query key is email\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const queryKey = Object.keys(query)[0];\n\n formattedQuery = {};\n\n if (queryKey === 'email' && query.email) {\n formattedQuery.emailhash = sha256(query.email.toLowerCase()).toString();\n } else {\n formattedQuery[queryKey] = query[queryKey];\n }\n }\n\n return this._fetchNewServiceHostmap({\n from,\n token,\n query: formattedQuery,\n forceRefresh,\n })\n .then((serviceHostMap: ServiceHostmap) => {\n catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n this.updateCredentialsConfig();\n catalog.status[serviceGroup].collecting = false;\n })\n .catch((error) => {\n catalog.status[serviceGroup].collecting = false;\n\n return Promise.reject(error);\n });\n },\n\n /**\n * User validation parameter transfer object for {@link validateUser}.\n * @param {object} ValidateUserPTO\n * @property {string} ValidateUserPTO.email - The email of the user.\n * @property {string} [ValidateUserPTO.reqId] - The activation requester.\n * @property {object} [ValidateUserPTO.activationOptions] - Extra options to pass when sending the activation\n * @property {object} [ValidateUserPTO.preloginUserId] - The prelogin user id to set when sending the activation.\n */\n\n /**\n * User validation return transfer object for {@link validateUser}.\n * @param {object} ValidateUserRTO\n * @property {boolean} ValidateUserRTO.activated - If the user is activated.\n * @property {boolean} ValidateUserRTO.exists - If the user exists.\n * @property {string} ValidateUserRTO.details - A descriptive status message.\n * @property {object} ValidateUserRTO.user - **License** service user object.\n */\n\n /**\n * Validate if a user is activated and update the service catalogs as needed\n * based on the user's activation status.\n *\n * @param {ValidateUserPTO} - The parameter transfer object.\n * @returns {ValidateUserRTO} - The return transfer object.\n */\n validateUser({\n email,\n reqId = 'WEBCLIENT',\n forceRefresh = false,\n activationOptions = {},\n preloginUserId,\n }) {\n this.logger.info('services: validating a user');\n\n // Validate that an email parameter key was provided.\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n\n // Destructure the credentials object.\n const {canAuthorize} = this.webex.credentials;\n\n // Validate that the user is already authorized.\n if (canAuthorize) {\n return this.updateServices({forceRefresh})\n .then(() => this.webex.credentials.getUserToken())\n .then((token) =>\n this.sendUserActivation({\n email,\n reqId,\n token: token.toString(),\n activationOptions,\n preloginUserId,\n })\n )\n .then((userObj) => ({\n activated: true,\n exists: true,\n details: 'user is authorized via a user token',\n user: userObj,\n }));\n }\n\n // Destructure the client authorization details.\n /* eslint-disable camelcase */\n const {client_id, client_secret} = this.webex.credentials.config;\n\n // Validate that client authentication details exist.\n if (!client_id || !client_secret) {\n return Promise.reject(new Error('client authentication details are not available'));\n }\n /* eslint-enable camelcase */\n\n // Declare a class-memeber-scoped token for usage within the promise chain.\n let token;\n\n // Begin client authentication user validation.\n return (\n this.collectPreauthCatalog({email})\n .then(() => {\n // Retrieve the service url from the updated catalog. This is required\n // since `WebexCore` is usually not fully initialized at the time this\n // request completes.\n const idbrokerService = this.get('idbroker');\n\n // Collect the client auth token.\n return this.webex.credentials.getClientToken({\n uri: `${idbrokerService}idb/oauth2/v1/access_token`,\n scope: 'webexsquare:admin webexsquare:get_conversation Identity:SCIM',\n });\n })\n .then((tokenObj) => {\n // Generate the token string.\n token = tokenObj.toString();\n\n // Collect the signin catalog using the client auth information.\n return this.collectSigninCatalog({email, token, forceRefresh});\n })\n // Validate if collecting the signin catalog failed and populate the RTO\n // with the appropriate content.\n .catch((error) => ({\n exists: error.name !== 'NotFound',\n activated: false,\n details:\n error.name !== 'NotFound'\n ? 'user exists but is not activated'\n : 'user does not exist and is not activated',\n }))\n // Validate if the previous promise resolved with an RTO and populate the\n // new RTO accordingly.\n .then((rto) =>\n Promise.all([\n rto || {\n activated: true,\n exists: true,\n details: 'user exists and is activated',\n },\n this.sendUserActivation({\n email,\n reqId,\n token,\n activationOptions,\n preloginUserId,\n }),\n ])\n )\n .then(([rto, user]) => ({...rto, user}))\n .catch((error) => {\n const response = {\n statusCode: error.statusCode,\n responseText: error.body && error.body.message,\n body: error.body,\n };\n\n return Promise.reject(response);\n })\n );\n },\n /**\n * Update cluster id via mercury service update. If the cluster id does not exist,\n * fetch new catalog.\n *\n * @param {ActiveServices} newActiveClusters - The new active clusters to switch to.\n * @returns {Promsie<void>}\n * */\n switchActiveClusterIds(newActiveClusters: ActiveServices): Promise<void> {\n this.logger.info('services: switching active cluster ids');\n\n const newActiveClusterIds = Object.values(newActiveClusters);\n\n const missingClusterIds = newActiveClusterIds.some((clusterId) => {\n // if the clusterId does not exist in the catalog, fetch the catalog\n return !this._services.find((service) => service.id === clusterId);\n });\n\n if (missingClusterIds) {\n this.logger.warn(\n 'services: some cluster ids do not exist in the catalog, fetching the catalog'\n );\n\n // fetch the catalog\n return this.initServiceCatalogs(true);\n }\n // update the active services\n this._updateActiveServices(newActiveClusters);\n this.logger.info('services: active cluster ids updated successfully');\n\n return Promise.resolve();\n },\n\n /**\n * Invalidate cache via mercury notification. If the timestamp is newer than current,\n * refetch catalog services.\n *\n * @param {string} timestamp - The timestamp of invalidation notification.\n * @returns {Promsie<void>}\n * */\n invalidateCache(timestamp: string): Promise<void> {\n this.logger.info('services: invalidate cache, timestamp:', timestamp);\n const lastTime = toNumber(this._getCatalog()?.timestamp) || 0;\n const invalidateTime = toNumber(timestamp) || 0;\n if (invalidateTime > lastTime) {\n this.logger.info('services: invalidateCache, refresh services');\n this.initServiceCatalogs(true);\n }\n\n return Promise.resolve();\n },\n /**\n * Get user meeting preferences (preferred webex site).\n *\n * @returns {object} - User Information including user preferrences .\n */\n getMeetingPreferences() {\n return this.request({\n method: 'GET',\n service: 'hydra',\n resource: 'meetingPreferences',\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to fetch user login information', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * Fetches client region info such as countryCode and timezone.\n *\n * @returns {object} - The region info object.\n */\n fetchClientRegionInfo() {\n const {services} = this.webex.config;\n\n return this.request({\n uri: services.discovery.sqdiscovery,\n addAuthHeader: false,\n headers: {\n 'spark-user-agent': null,\n },\n timeout: 5000,\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to get user region info', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * User activation parameter transfer object for {@link sendUserActivation}.\n * @typedef {object} SendUserActivationPTO\n * @property {string} SendUserActivationPTO.email - The email of the user.\n * @property {string} SendUserActivationPTO.reqId - The activation requester.\n * @property {string} SendUserActivationPTO.token - The client auth token.\n * @property {object} SendUserActivationPTO.activationOptions - Extra options to pass when sending the activation.\n * @property {object} SendUserActivationPTO.preloginUserId - The prelogin user id to set when sending the activation.\n */\n\n /**\n * Send a request to activate a user using a client token.\n *\n * @param {SendUserActivationPTO} - The Parameter transfer object.\n * @returns {LicenseDTO} - The DTO returned from the **License** service.\n */\n sendUserActivation({email, reqId, token, activationOptions, preloginUserId}) {\n this.logger.info('services: sending user activation request');\n let countryCode;\n let timezone;\n\n // try to fetch client region info first\n return (\n this.fetchClientRegionInfo()\n .then((clientRegionInfo) => {\n if (clientRegionInfo) {\n ({countryCode, timezone} = clientRegionInfo);\n }\n\n // Send the user activation request to the **License** service.\n return this.request({\n service: 'license',\n resource: 'users/activations',\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: token,\n 'x-prelogin-userid': preloginUserId,\n },\n body: {\n email,\n reqId,\n countryCode,\n timeZone: timezone,\n ...activationOptions,\n },\n shouldRefreshAccessToken: false,\n });\n })\n // On success, return the **License** user object.\n .then(({body}) => body)\n // On failure, reject with error from **License**.\n .catch((error) => Promise.reject(error))\n );\n },\n\n /**\n * Updates a given service group i.e. preauth, signin, postauth with a new hostmap.\n * @param {ServiceGroup} serviceGroup - preauth, signin, postauth\n * @param {ServiceHostmap} hostMap - The new hostmap to update the service group with.\n * @returns {Promise<void>}\n */\n updateCatalog(serviceGroup: ServiceGroup, hostMap: ServiceHostmap): Promise<void> {\n const catalog = this._getCatalog();\n\n const serviceHostMap = this._formatReceivedHostmap(hostMap);\n\n return catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n },\n\n /**\n * simplified method to update the preauth catalog via email\n *\n * @param {object} query\n * @param {string} query.email - A standard format email.\n * @param {string} query.orgId - The user's OrgId.\n * @param {boolean} forceRefresh - Boolean to bypass u2c cache control header\n * @returns {Promise<void>}\n */\n collectPreauthCatalog(query: QueryOptions, forceRefresh = false) {\n if (!query) {\n return this.updateServices({\n from: 'limited',\n query: {mode: 'DEFAULT_BY_PROXIMITY'},\n forceRefresh,\n });\n }\n\n return this.updateServices({from: 'limited', query, forceRefresh});\n },\n\n /**\n * simplified method to update the signin catalog via email and token\n * @param {object} param\n * @param {string} param.email - must be a standard-format email\n * @param {string} param.token - must be a client token\n * @returns {Promise<void>}\n */\n collectSigninCatalog(\n {email, token, forceRefresh} = {} as {email: string; token: string; forceRefresh: boolean}\n ): Promise<void> {\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n if (!token) {\n return Promise.reject(new Error('`token` is required'));\n }\n\n return this.updateServices({\n from: 'signin',\n query: {email},\n token,\n forceRefresh,\n });\n },\n\n /**\n * Updates credentials config to utilize u2c catalog\n * urls.\n * @returns {void}\n */\n updateCredentialsConfig(): void {\n const idbrokerUrl = this.get('idbroker');\n const identityUrl = this.get('identity');\n\n if (idbrokerUrl && identityUrl) {\n const {authorizationString, authorizeUrl} = this.webex.config.credentials;\n\n // This must be set outside of the setConfig method used to assign the\n // idbroker and identity url values.\n this.webex.config.credentials.authorizeUrl = authorizationString\n ? authorizeUrl\n : `${idbrokerUrl.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbrokerUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identityUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n },\n });\n }\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject afte ra 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 const catalog = this._getCatalog();\n const {supertoken} = this.webex.credentials;\n\n if (\n serviceGroup === 'postauth' &&\n supertoken &&\n supertoken.access_token &&\n !catalog.status.postauth.collecting &&\n !catalog.status.postauth.ready\n ) {\n if (!catalog.status.preauth.ready) {\n return this.initServiceCatalogs();\n }\n\n return this.updateServices();\n }\n\n return catalog.waitForCatalog(serviceGroup, timeout);\n },\n\n /**\n * Service waiting parameter transfer object for {@link waitForService}.\n *\n * @typedef {object} WaitForServicePTO\n * @property {string} [WaitForServicePTO.name] - The service name.\n * @property {string} [WaitForServicePTO.url] - The service url.\n * @property {string} [WaitForServicePTO.timeout] - wait duration in seconds.\n */\n\n /**\n * Wait until the service has been ammended to any service catalog. This\n * method prioritizes the service name over the service url when searching.\n *\n * @param {WaitForServicePTO} - The parameter transfer object.\n * @returns {Promise<string>} - Resolves to the priority host of a service.\n */\n waitForService({\n name,\n timeout = 5,\n url,\n }: {\n name: string;\n timeout: number;\n url: string;\n }): Promise<string> {\n const {services} = this.webex.config;\n\n // Save memory by grabbing the catalog after there isn't a priortyURL\n const catalog = this._getCatalog();\n\n const fetchFromServiceUrl = services.servicesNotNeedValidation.find(\n (service) => service === name\n );\n\n if (fetchFromServiceUrl) {\n const clusterId = this._activeServices[name];\n\n return Promise.resolve(this.get(clusterId));\n }\n\n const priorityUrl = this.get(name);\n const priorityUrlObj = this.getServiceFromUrl(url);\n\n if (priorityUrl || priorityUrlObj) {\n return Promise.resolve(priorityUrl || priorityUrlObj.priorityUrl);\n }\n\n if (catalog.isReady) {\n if (url) {\n return Promise.resolve(url);\n }\n\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n\n return Promise.reject(\n new Error(`services: service '${name}' was not found in any of the catalogs`)\n );\n }\n\n return new Promise((resolve, reject) => {\n const groupsToCheck = ['preauth', 'signin', 'postauth'];\n const checkCatalog = (catalogGroup) =>\n catalog\n .waitForCatalog(catalogGroup, timeout)\n .then(() => {\n const scopedPriorityUrl = this.get(name);\n const scopedPrioriryUrlObj = this.getServiceFromUrl(url);\n\n if (scopedPriorityUrl || scopedPrioriryUrlObj) {\n resolve(scopedPriorityUrl || scopedPrioriryUrlObj.priorityUrl);\n }\n })\n .catch(() => undefined);\n\n Promise.all(groupsToCheck.map((group) => checkCatalog(group))).then(() => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n reject(new Error(`services: service '${name}' was not found after waiting`));\n });\n });\n },\n\n /**\n * Looks up the hostname in the host catalog\n * and replaces it with the first host if it finds it\n * @param {string} uri\n * @returns {string} uri with the host replaced\n */\n replaceHostFromHostmap(uri: string): string {\n try {\n return this.convertUrlToPriorityHostUrl(uri);\n } catch {\n return uri;\n }\n },\n\n /**\n * Formats a host map entry for use in service catalog.\n *\n * @param {Object} entry - The host map entry to format.\n * @param {string} entry.serviceName - i.e. conversation, identity, etc.\n * @param {string} entry.id - The unique identifier for the service, usually clusterId.\n * @param {Array<IServiceDetail>} entry.serviceUrls - The group to which the service belongs.\n * @returns {Object} - The formatted host map entry.\n */\n _formatHostMapEntry({id, serviceName, serviceUrls}) {\n const formattedServiceUrls = serviceUrls.map((serviceUrl) => ({\n host: new URL(serviceUrl.baseUrl).host,\n ...serviceUrl,\n }));\n\n return {\n id,\n serviceName,\n serviceUrls: formattedServiceUrls,\n };\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * @param {ServiceHostmap} serviceHostmap\n * catalog endpoint.\n * @returns {Array<Service>}\n */\n _formatReceivedHostmap({services, activeServices, timestamp, orgId, format}) {\n const formattedHostmap: ServiceHostmap = {\n activeServices,\n services: services.map((service) => this._formatHostMapEntry(service)),\n timestamp,\n orgId,\n format,\n };\n this._updateActiveServices(activeServices);\n this._updateServices(services);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string | undefined} - Cluster ID of url provided\n */\n getClusterId(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findClusterId(url);\n },\n\n /**\n * Get a service value from a provided clusterId. This method will\n * return an object containing both the name and url of a found service.\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 getServiceFromClusterId(params: {\n clusterId: string;\n serviceGroup?: ServiceGroup;\n }): {name: string; url: string} | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findServiceFromClusterId(params);\n },\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the service\n */\n getServiceUrlFromClusterId({cluster = 'us'}: {cluster?: string} = {}): string {\n let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;\n\n // Determine if cluster has service name (non-US clusters from hydra do not)\n if (clusterId.split(':').length < 4) {\n // Add Service to cluster identifier\n clusterId = `${cluster}:${CLUSTER_SERVICE}`;\n }\n\n const {url} = this.getServiceFromClusterId({clusterId}) || {};\n\n if (!url) {\n throw Error(`Could not find service for cluster [${cluster}]`);\n }\n\n return url;\n },\n\n /**\n * Get a service object from a service url if the service url exists in the\n * catalog.\n *\n * @param {string} url - The url to be validated.\n * @returns {object} - Service object.\n * @returns {object.name} - The name of the service found.\n * @returns {object.priorityUrl} - The default url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = ''): {name: string; priorityUrl: string; defaultUrl: string} | undefined {\n const service = this._getCatalog().findServiceDetailFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n const priorityUrl = service.get();\n const defaultUrl = new URL(\n service.serviceUrls.find((serviceUrl) => url.startsWith(serviceUrl.baseUrl)).baseUrl\n ).href;\n\n return {\n name: service.serviceName,\n priorityUrl,\n defaultUrl,\n };\n },\n\n /**\n * Determine if a provided url is in the catalog's allowed domains.\n *\n * @param {string} url - The url to match allowed domains against.\n * @returns {boolean} - True if the url provided is allowed.\n */\n isAllowedDomainUrl(url: string): boolean {\n const catalog = this._getCatalog();\n\n return !!catalog.findAllowedDomain(url);\n },\n\n /**\n * Converts the host portion of the url from default host\n * to a priority host\n *\n * @param {string} url a service url that contains a default host\n * @returns {string} a service url that contains the top priority host.\n * @throws if url isn't a service url\n */\n convertUrlToPriorityHostUrl(url = '' as string): string {\n const data = this.getServiceFromUrl(url);\n\n if (!data) {\n throw Error(`No service associated with url: [${url}]`);\n }\n\n return url.replace(data.defaultUrl, data.priorityUrl);\n },\n\n /**\n * @private\n * Simplified method wrapper for sending a request to get\n * an updated service hostmap.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n _fetchNewServiceHostmap(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...(query || {}), format: 'U2CV2'};\n\n if (forceRefresh) {\n qs.timestamp = new Date().getTime();\n }\n\n const requestObject = {\n method: 'GET',\n service,\n resource,\n qs,\n headers: {},\n };\n\n if (token) {\n requestObject.headers = {authorization: token};\n }\n\n return this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(() => this.request(requestObject), 'internal.get.u2c.time')\n .then(({body}) => this._formatReceivedHostmap(body));\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig(): void {\n // Get the catalog and destructure the services config.\n const catalog = this._getCatalog();\n const {services, fedramp} = this.webex.config;\n\n // Validate that the services configuration exists.\n if (services) {\n if (fedramp) {\n services.discovery = fedRampServices;\n }\n // Check for discovery services.\n if (services.discovery) {\n // Format the discovery configuration into an injectable array.\n const formattedDiscoveryServices = Object.keys(services.discovery).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.discovery[key], priority: 1}],\n })\n );\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceGroups('discovery', formattedDiscoveryServices);\n }\n\n if (services.override) {\n // Format the override configuration into an injectable array.\n const formattedOverrideServices = Object.keys(services.override).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.override[key], priority: 1}],\n })\n );\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceGroups('override', formattedOverrideServices);\n }\n\n // if not fedramp, append on the commercialAllowedDomains\n if (!fedramp) {\n services.allowedDomains = union(services.allowedDomains, COMMERCIAL_ALLOWED_DOMAINS);\n }\n\n // Check for allowed host domains.\n if (services.allowedDomains) {\n // Store the allowed domains as a property of the catalog.\n catalog.setAllowedDomains(services.allowedDomains);\n }\n\n // Set `validateDomains` property to match configuration\n this.validateDomains = services.validateDomains;\n }\n },\n\n /**\n * Make the initial requests to collect the root catalogs.\n * @param {boolean} refresh - Is need force update\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs(refresh = false): Promise<void> {\n this.logger.info('services: initializing initial service catalogs');\n\n // Destructure the credentials plugin.\n const {credentials} = this.webex;\n\n // Init a promise chain. Must be done as a Promise.resolve() to allow\n // credentials#getOrgId() to properly throw.\n return (\n Promise.resolve()\n // Get the user's OrgId.\n .then(() => credentials.getOrgId())\n // Begin collecting the preauth/limited catalog.\n .then((orgId) => this.collectPreauthCatalog({orgId}, refresh))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog.\n return this.updateServices({forceRefresh: refresh}).catch(() => {\n this.initFailed = true;\n this.logger.warn('services: cannot retrieve postauth catalog');\n });\n }\n\n // Return a resolved promise for consistent return value.\n return Promise.resolve();\n })\n );\n },\n\n /**\n * Initializer\n *\n * @instance\n * @memberof Services\n * @returns {Services}\n */\n initialize(): typeof Services {\n const catalog = new ServiceCatalog();\n this._catalogs.set(this.webex, catalog);\n\n // Listen for configuration changes once.\n this.listenToOnce(this.webex, 'change:config', () => {\n this.initConfig();\n });\n\n // wait for webex instance to be ready before attempting\n // to update the service catalogs\n this.listenToOnce(this.webex, 'ready', () => {\n const {supertoken} = this.webex.credentials;\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n this.initServiceCatalogs()\n .then(() => {\n catalog.isReady = true;\n })\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n });\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n });\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_sha","_interopRequireDefault","require","_lodash","_webexPlugin","_metrics","_serviceCatalog","_serviceFedRamp","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","trailingSlashes","DEFAULT_CLUSTER","exports","DEFAULT_CLUSTER_SERVICE","CLUSTER_SERVICE","process","env","WEBEX_CONVERSATION_CLUSTER_SERVICE","DEFAULT_CLUSTER_IDENTIFIER","WEBEX_CONVERSATION_DEFAULT_CLUSTER","concat","Services","WebexPlugin","extend","namespace","props","validateDomains","initFailed","_catalogs","_weakMap","_activeServices","_services","_getCatalog","get","webex","name","serviceGroup","catalog","clusterId","urlById","urlByName","undefined","hasAllowedDomains","getAllowedDomains","markFailedUrl","url","markFailedServiceUrl","getMobiusClusters","clusters","services","service","serviceName","_isArray","serviceUrls","serviceUrl","modifiedHost","baseUrl","replace","find","c","host","priority","id","ttl","_updateActiveServices","activeServices","_updateServices","unionBy","updateServices","_catalog$status","_catalog$status$servi","_this","_ref","from","query","token","forceRefresh","formattedQuery","status","collecting","waitForCatalog","queryKey","_keys","includes","_promise","reject","Error","email","emailhash","sha256","toLowerCase","toString","_fetchNewServiceHostmap","then","serviceHostMap","updateServiceGroups","timestamp","updateCredentialsConfig","catch","error","validateUser","_ref2","_this2","_ref2$reqId","reqId","_ref2$forceRefresh","_ref2$activationOptio","activationOptions","preloginUserId","logger","info","canAuthorize","credentials","getUserToken","sendUserActivation","userObj","activated","exists","details","user","_this$webex$credentia","config","client_id","client_secret","collectPreauthCatalog","idbrokerService","getClientToken","uri","scope","tokenObj","collectSigninCatalog","rto","all","_ref3","_ref4","_slicedToArray2","response","statusCode","responseText","body","message","switchActiveClusterIds","newActiveClusters","_this3","newActiveClusterIds","_values","missingClusterIds","some","warn","initServiceCatalogs","resolve","invalidateCache","_this$_getCatalog","lastTime","toNumber","invalidateTime","getMeetingPreferences","_this4","request","method","resource","res","err","fetchClientRegionInfo","_this5","discovery","sqdiscovery","addAuthHeader","headers","timeout","_ref5","_this6","countryCode","timezone","clientRegionInfo","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","updateCatalog","hostMap","_formatReceivedHostmap","mode","_ref7","idbrokerUrl","identityUrl","_this$webex$config$cr","authorizationString","authorizeUrl","setConfig","idbroker","identity","supertoken","access_token","postauth","ready","preauth","waitForService","_ref8","_this7","_ref8$timeout","fetchFromServiceUrl","servicesNotNeedValidation","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","replaceHostFromHostmap","convertUrlToPriorityHostUrl","_unused","_formatHostMapEntry","_ref9","formattedServiceUrls","URL","_ref0","_this8","orgId","format","formattedHostmap","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref1","_ref1$cluster","cluster","split","_ref10","findServiceDetailFromUrl","defaultUrl","startsWith","href","isAllowedDomainUrl","findAllowedDomain","data","_this9","_ref11","qs","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref12","initConfig","_this0","_this$webex$config","fedramp","fedRampServices","formattedDiscoveryServices","key","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this1","refresh","getOrgId","initialize","_this10","ServiceCatalog","set","listenToOnce","version","_default"],"sources":["services-v2.ts"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {toNumber, union, unionBy} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from '../metrics';\nimport ServiceCatalog from './service-catalog';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from '../constants';\nimport {\n ActiveServices,\n IServiceCatalog,\n QueryOptions,\n Service,\n ServiceHostmap,\n ServiceGroup,\n ServiceHost,\n} from './types';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n// The default cluster when one is not provided (usually as 'US' from hydra)\nexport const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';\n// The default service name for convo (currently identityLookup due to some weird CSB issue)\nexport const DEFAULT_CLUSTER_SERVICE = 'identityLookup';\n\nconst CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;\nconst DEFAULT_CLUSTER_IDENTIFIER =\n process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n _catalogs: new WeakMap(),\n\n _activeServices: {},\n\n _services: [],\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {IServiceCatalog}\n */\n _getCatalog(): IServiceCatalog {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Get a service url from the current services list by name\n * from the associated instance catalog.\n * @param {string} name\n * @param {ServiceGroup} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name: string, serviceGroup?: ServiceGroup): string | undefined {\n const catalog = this._getCatalog();\n\n const clusterId = this._activeServices[name];\n\n const urlById = catalog.get(clusterId, serviceGroup);\n const urlByName = catalog.get(name, serviceGroup);\n\n // if both are undefined, then we cannot find the service\n if (!urlById && !urlByName) {\n return undefined;\n }\n\n return urlById || urlByName;\n },\n\n /**\n * Determine if a whilelist exists in the service catalog.\n *\n * @returns {boolean} - True if a allowed domains list exists.\n */\n hasAllowedDomains(): boolean {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the service url associated with the\n * `ServiceDetail` to be removed from the its\n * respective service url array, and then return the next\n * viable service url from the `ServiceDetail` service url array.\n * @param {string} url\n * @returns {string}\n */\n markFailedUrl(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.markFailedServiceUrl(url);\n },\n\n /**\n * Get all Mobius cluster host entries from the v2 services list.\n * @returns {Array<ServiceHost>} - An array of `ServiceHost` objects.\n */\n getMobiusClusters(): Array<ServiceHost> {\n const clusters: Array<ServiceHost> = [];\n const services: Array<Service> = this._services || [];\n\n services\n .filter(\n (service) =>\n service?.serviceName === 'mobius' &&\n Array.isArray(service.serviceUrls) &&\n service.serviceUrls.length > 0\n )\n .forEach((service) => {\n service.serviceUrls.forEach((serviceUrl) => {\n const modifiedHost = serviceUrl.baseUrl.replace('https://', '').replace('/api/v1', '');\n if (!clusters.find((c) => c && c.host === modifiedHost)) {\n clusters.push({\n host: modifiedHost,\n priority: serviceUrl.priority,\n id: service.id,\n ttl: 0,\n });\n }\n });\n });\n\n return clusters;\n },\n\n /**\n * saves all the services from the pre and post catalog service\n * @param {ActiveServices} activeServices\n * @returns {void}\n */\n _updateActiveServices(activeServices: ActiveServices): void {\n this._activeServices = {...this._activeServices, ...activeServices};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Array<Service>} services\n * @returns {void}\n */\n _updateServices(services: Array<Service>): void {\n this._services = unionBy(services, this._services, 'id');\n },\n\n /**\n * Update a list of `serviceUrls` to the most current\n * catalog via the defined `discoveryUrl` then returns the current\n * list of services.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n updateServices(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const catalog = this._getCatalog();\n let formattedQuery;\n let serviceGroup;\n\n // map catalog name to service group name.\n switch (from) {\n case 'limited':\n serviceGroup = 'preauth';\n break;\n case 'signin':\n serviceGroup = 'signin';\n break;\n default:\n serviceGroup = 'postauth';\n break;\n }\n // confirm catalog update for group is not in progress.\n if (catalog.status?.[serviceGroup]?.collecting) {\n return this.waitForCatalog(serviceGroup);\n }\n\n catalog.status[serviceGroup].collecting = true;\n\n if (serviceGroup === 'preauth') {\n const queryKey = query && Object.keys(query)[0];\n\n if (!['email', 'emailhash', 'userId', 'orgId', 'mode'].includes(queryKey)) {\n return Promise.reject(\n new Error('a query param of email, emailhash, userId, orgId, or mode is required')\n );\n }\n }\n // encode email when query key is email\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const queryKey = Object.keys(query)[0];\n\n formattedQuery = {};\n\n if (queryKey === 'email' && query.email) {\n formattedQuery.emailhash = sha256(query.email.toLowerCase()).toString();\n } else {\n formattedQuery[queryKey] = query[queryKey];\n }\n }\n\n return this._fetchNewServiceHostmap({\n from,\n token,\n query: formattedQuery,\n forceRefresh,\n })\n .then((serviceHostMap: ServiceHostmap) => {\n catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n this.updateCredentialsConfig();\n catalog.status[serviceGroup].collecting = false;\n })\n .catch((error) => {\n catalog.status[serviceGroup].collecting = false;\n\n return Promise.reject(error);\n });\n },\n\n /**\n * User validation parameter transfer object for {@link validateUser}.\n * @param {object} ValidateUserPTO\n * @property {string} ValidateUserPTO.email - The email of the user.\n * @property {string} [ValidateUserPTO.reqId] - The activation requester.\n * @property {object} [ValidateUserPTO.activationOptions] - Extra options to pass when sending the activation\n * @property {object} [ValidateUserPTO.preloginUserId] - The prelogin user id to set when sending the activation.\n */\n\n /**\n * User validation return transfer object for {@link validateUser}.\n * @param {object} ValidateUserRTO\n * @property {boolean} ValidateUserRTO.activated - If the user is activated.\n * @property {boolean} ValidateUserRTO.exists - If the user exists.\n * @property {string} ValidateUserRTO.details - A descriptive status message.\n * @property {object} ValidateUserRTO.user - **License** service user object.\n */\n\n /**\n * Validate if a user is activated and update the service catalogs as needed\n * based on the user's activation status.\n *\n * @param {ValidateUserPTO} - The parameter transfer object.\n * @returns {ValidateUserRTO} - The return transfer object.\n */\n validateUser({\n email,\n reqId = 'WEBCLIENT',\n forceRefresh = false,\n activationOptions = {},\n preloginUserId,\n }) {\n this.logger.info('services: validating a user');\n\n // Validate that an email parameter key was provided.\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n\n // Destructure the credentials object.\n const {canAuthorize} = this.webex.credentials;\n\n // Validate that the user is already authorized.\n if (canAuthorize) {\n return this.updateServices({forceRefresh})\n .then(() => this.webex.credentials.getUserToken())\n .then((token) =>\n this.sendUserActivation({\n email,\n reqId,\n token: token.toString(),\n activationOptions,\n preloginUserId,\n })\n )\n .then((userObj) => ({\n activated: true,\n exists: true,\n details: 'user is authorized via a user token',\n user: userObj,\n }));\n }\n\n // Destructure the client authorization details.\n /* eslint-disable camelcase */\n const {client_id, client_secret} = this.webex.credentials.config;\n\n // Validate that client authentication details exist.\n if (!client_id || !client_secret) {\n return Promise.reject(new Error('client authentication details are not available'));\n }\n /* eslint-enable camelcase */\n\n // Declare a class-memeber-scoped token for usage within the promise chain.\n let token;\n\n // Begin client authentication user validation.\n return (\n this.collectPreauthCatalog({email})\n .then(() => {\n // Retrieve the service url from the updated catalog. This is required\n // since `WebexCore` is usually not fully initialized at the time this\n // request completes.\n const idbrokerService = this.get('idbroker');\n\n // Collect the client auth token.\n return this.webex.credentials.getClientToken({\n uri: `${idbrokerService}idb/oauth2/v1/access_token`,\n scope: 'webexsquare:admin webexsquare:get_conversation Identity:SCIM',\n });\n })\n .then((tokenObj) => {\n // Generate the token string.\n token = tokenObj.toString();\n\n // Collect the signin catalog using the client auth information.\n return this.collectSigninCatalog({email, token, forceRefresh});\n })\n // Validate if collecting the signin catalog failed and populate the RTO\n // with the appropriate content.\n .catch((error) => ({\n exists: error.name !== 'NotFound',\n activated: false,\n details:\n error.name !== 'NotFound'\n ? 'user exists but is not activated'\n : 'user does not exist and is not activated',\n }))\n // Validate if the previous promise resolved with an RTO and populate the\n // new RTO accordingly.\n .then((rto) =>\n Promise.all([\n rto || {\n activated: true,\n exists: true,\n details: 'user exists and is activated',\n },\n this.sendUserActivation({\n email,\n reqId,\n token,\n activationOptions,\n preloginUserId,\n }),\n ])\n )\n .then(([rto, user]) => ({...rto, user}))\n .catch((error) => {\n const response = {\n statusCode: error.statusCode,\n responseText: error.body && error.body.message,\n body: error.body,\n };\n\n return Promise.reject(response);\n })\n );\n },\n /**\n * Update cluster id via mercury service update. If the cluster id does not exist,\n * fetch new catalog.\n *\n * @param {ActiveServices} newActiveClusters - The new active clusters to switch to.\n * @returns {Promsie<void>}\n * */\n switchActiveClusterIds(newActiveClusters: ActiveServices): Promise<void> {\n this.logger.info('services: switching active cluster ids');\n\n const newActiveClusterIds = Object.values(newActiveClusters);\n\n const missingClusterIds = newActiveClusterIds.some((clusterId) => {\n // if the clusterId does not exist in the catalog, fetch the catalog\n return !this._services.find((service) => service.id === clusterId);\n });\n\n if (missingClusterIds) {\n this.logger.warn(\n 'services: some cluster ids do not exist in the catalog, fetching the catalog'\n );\n\n // fetch the catalog\n return this.initServiceCatalogs(true);\n }\n // update the active services\n this._updateActiveServices(newActiveClusters);\n this.logger.info('services: active cluster ids updated successfully');\n\n return Promise.resolve();\n },\n\n /**\n * Invalidate cache via mercury notification. If the timestamp is newer than current,\n * refetch catalog services.\n *\n * @param {string} timestamp - The timestamp of invalidation notification.\n * @returns {Promsie<void>}\n * */\n invalidateCache(timestamp: string): Promise<void> {\n this.logger.info('services: invalidate cache, timestamp:', timestamp);\n const lastTime = toNumber(this._getCatalog()?.timestamp) || 0;\n const invalidateTime = toNumber(timestamp) || 0;\n if (invalidateTime > lastTime) {\n this.logger.info('services: invalidateCache, refresh services');\n this.initServiceCatalogs(true);\n }\n\n return Promise.resolve();\n },\n /**\n * Get user meeting preferences (preferred webex site).\n *\n * @returns {object} - User Information including user preferrences .\n */\n getMeetingPreferences() {\n return this.request({\n method: 'GET',\n service: 'hydra',\n resource: 'meetingPreferences',\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to fetch user login information', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * Fetches client region info such as countryCode and timezone.\n *\n * @returns {object} - The region info object.\n */\n fetchClientRegionInfo() {\n const {services} = this.webex.config;\n\n return this.request({\n uri: services.discovery.sqdiscovery,\n addAuthHeader: false,\n headers: {\n 'spark-user-agent': null,\n },\n timeout: 5000,\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to get user region info', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * User activation parameter transfer object for {@link sendUserActivation}.\n * @typedef {object} SendUserActivationPTO\n * @property {string} SendUserActivationPTO.email - The email of the user.\n * @property {string} SendUserActivationPTO.reqId - The activation requester.\n * @property {string} SendUserActivationPTO.token - The client auth token.\n * @property {object} SendUserActivationPTO.activationOptions - Extra options to pass when sending the activation.\n * @property {object} SendUserActivationPTO.preloginUserId - The prelogin user id to set when sending the activation.\n */\n\n /**\n * Send a request to activate a user using a client token.\n *\n * @param {SendUserActivationPTO} - The Parameter transfer object.\n * @returns {LicenseDTO} - The DTO returned from the **License** service.\n */\n sendUserActivation({email, reqId, token, activationOptions, preloginUserId}) {\n this.logger.info('services: sending user activation request');\n let countryCode;\n let timezone;\n\n // try to fetch client region info first\n return (\n this.fetchClientRegionInfo()\n .then((clientRegionInfo) => {\n if (clientRegionInfo) {\n ({countryCode, timezone} = clientRegionInfo);\n }\n\n // Send the user activation request to the **License** service.\n return this.request({\n service: 'license',\n resource: 'users/activations',\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: token,\n 'x-prelogin-userid': preloginUserId,\n },\n body: {\n email,\n reqId,\n countryCode,\n timeZone: timezone,\n ...activationOptions,\n },\n shouldRefreshAccessToken: false,\n });\n })\n // On success, return the **License** user object.\n .then(({body}) => body)\n // On failure, reject with error from **License**.\n .catch((error) => Promise.reject(error))\n );\n },\n\n /**\n * Updates a given service group i.e. preauth, signin, postauth with a new hostmap.\n * @param {ServiceGroup} serviceGroup - preauth, signin, postauth\n * @param {ServiceHostmap} hostMap - The new hostmap to update the service group with.\n * @returns {Promise<void>}\n */\n updateCatalog(serviceGroup: ServiceGroup, hostMap: ServiceHostmap): Promise<void> {\n const catalog = this._getCatalog();\n\n const serviceHostMap = this._formatReceivedHostmap(hostMap || {});\n\n return catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n },\n\n /**\n * simplified method to update the preauth catalog via email\n *\n * @param {object} query\n * @param {string} query.email - A standard format email.\n * @param {string} query.orgId - The user's OrgId.\n * @param {boolean} forceRefresh - Boolean to bypass u2c cache control header\n * @returns {Promise<void>}\n */\n collectPreauthCatalog(query: QueryOptions, forceRefresh = false) {\n if (!query) {\n return this.updateServices({\n from: 'limited',\n query: {mode: 'DEFAULT_BY_PROXIMITY'},\n forceRefresh,\n });\n }\n\n return this.updateServices({from: 'limited', query, forceRefresh});\n },\n\n /**\n * simplified method to update the signin catalog via email and token\n * @param {object} param\n * @param {string} param.email - must be a standard-format email\n * @param {string} param.token - must be a client token\n * @returns {Promise<void>}\n */\n collectSigninCatalog(\n {email, token, forceRefresh} = {} as {email: string; token: string; forceRefresh: boolean}\n ): Promise<void> {\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n if (!token) {\n return Promise.reject(new Error('`token` is required'));\n }\n\n return this.updateServices({\n from: 'signin',\n query: {email},\n token,\n forceRefresh,\n });\n },\n\n /**\n * Updates credentials config to utilize u2c catalog\n * urls.\n * @returns {void}\n */\n updateCredentialsConfig(): void {\n const idbrokerUrl = this.get('idbroker');\n const identityUrl = this.get('identity');\n\n if (idbrokerUrl && identityUrl) {\n const {authorizationString, authorizeUrl} = this.webex.config.credentials;\n\n // This must be set outside of the setConfig method used to assign the\n // idbroker and identity url values.\n this.webex.config.credentials.authorizeUrl = authorizationString\n ? authorizeUrl\n : `${idbrokerUrl.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbrokerUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identityUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n },\n });\n }\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject afte ra 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 const catalog = this._getCatalog();\n const {supertoken} = this.webex.credentials;\n\n if (\n serviceGroup === 'postauth' &&\n supertoken &&\n supertoken.access_token &&\n !catalog.status.postauth.collecting &&\n !catalog.status.postauth.ready\n ) {\n if (!catalog.status.preauth.ready) {\n return this.initServiceCatalogs();\n }\n\n return this.updateServices();\n }\n\n return catalog.waitForCatalog(serviceGroup, timeout);\n },\n\n /**\n * Service waiting parameter transfer object for {@link waitForService}.\n *\n * @typedef {object} WaitForServicePTO\n * @property {string} [WaitForServicePTO.name] - The service name.\n * @property {string} [WaitForServicePTO.url] - The service url.\n * @property {string} [WaitForServicePTO.timeout] - wait duration in seconds.\n */\n\n /**\n * Wait until the service has been ammended to any service catalog. This\n * method prioritizes the service name over the service url when searching.\n *\n * @param {WaitForServicePTO} - The parameter transfer object.\n * @returns {Promise<string>} - Resolves to the priority host of a service.\n */\n waitForService({\n name,\n timeout = 5,\n url,\n }: {\n name: string;\n timeout: number;\n url: string;\n }): Promise<string> {\n const {services} = this.webex.config;\n\n // Save memory by grabbing the catalog after there isn't a priortyURL\n const catalog = this._getCatalog();\n\n const fetchFromServiceUrl = services.servicesNotNeedValidation.find(\n (service) => service === name\n );\n\n if (fetchFromServiceUrl) {\n const clusterId = this._activeServices[name];\n\n return Promise.resolve(this.get(clusterId));\n }\n\n const priorityUrl = this.get(name);\n const priorityUrlObj = this.getServiceFromUrl(url);\n\n if (priorityUrl || priorityUrlObj) {\n return Promise.resolve(priorityUrl || priorityUrlObj.priorityUrl);\n }\n\n if (catalog.isReady) {\n if (url) {\n return Promise.resolve(url);\n }\n\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n\n return Promise.reject(\n new Error(`services: service '${name}' was not found in any of the catalogs`)\n );\n }\n\n return new Promise((resolve, reject) => {\n const groupsToCheck = ['preauth', 'signin', 'postauth'];\n const checkCatalog = (catalogGroup) =>\n catalog\n .waitForCatalog(catalogGroup, timeout)\n .then(() => {\n const scopedPriorityUrl = this.get(name);\n const scopedPrioriryUrlObj = this.getServiceFromUrl(url);\n\n if (scopedPriorityUrl || scopedPrioriryUrlObj) {\n resolve(scopedPriorityUrl || scopedPrioriryUrlObj.priorityUrl);\n }\n })\n .catch(() => undefined);\n\n Promise.all(groupsToCheck.map((group) => checkCatalog(group))).then(() => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n reject(new Error(`services: service '${name}' was not found after waiting`));\n });\n });\n },\n\n /**\n * Looks up the hostname in the host catalog\n * and replaces it with the first host if it finds it\n * @param {string} uri\n * @returns {string} uri with the host replaced\n */\n replaceHostFromHostmap(uri: string): string {\n try {\n return this.convertUrlToPriorityHostUrl(uri);\n } catch {\n return uri;\n }\n },\n\n /**\n * Formats a host map entry for use in service catalog.\n *\n * @param {Object} entry - The host map entry to format.\n * @param {string} entry.serviceName - i.e. conversation, identity, etc.\n * @param {string} entry.id - The unique identifier for the service, usually clusterId.\n * @param {Array<IServiceDetail>} entry.serviceUrls - The group to which the service belongs.\n * @returns {Object} - The formatted host map entry.\n */\n _formatHostMapEntry({id, serviceName, serviceUrls}) {\n const formattedServiceUrls = serviceUrls.map((serviceUrl) => ({\n host: new URL(serviceUrl.baseUrl).host,\n ...serviceUrl,\n }));\n\n return {\n id,\n serviceName,\n serviceUrls: formattedServiceUrls,\n };\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * @param {ServiceHostmap} serviceHostmap\n * catalog endpoint.\n * @returns {Array<Service>}\n */\n _formatReceivedHostmap({services, activeServices, timestamp, orgId, format}) {\n const formattedHostmap: ServiceHostmap = {\n activeServices,\n services: services?.map((service) => this._formatHostMapEntry(service)),\n timestamp,\n orgId,\n format,\n };\n this._updateActiveServices(activeServices);\n this._updateServices(services);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string | undefined} - Cluster ID of url provided\n */\n getClusterId(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findClusterId(url);\n },\n\n /**\n * Get a service value from a provided clusterId. This method will\n * return an object containing both the name and url of a found service.\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 getServiceFromClusterId(params: {\n clusterId: string;\n serviceGroup?: ServiceGroup;\n }): {name: string; url: string} | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findServiceFromClusterId(params);\n },\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the service\n */\n getServiceUrlFromClusterId({cluster = 'us'}: {cluster?: string} = {}): string {\n let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;\n\n // Determine if cluster has service name (non-US clusters from hydra do not)\n if (clusterId.split(':').length < 4) {\n // Add Service to cluster identifier\n clusterId = `${cluster}:${CLUSTER_SERVICE}`;\n }\n\n const {url} = this.getServiceFromClusterId({clusterId}) || {};\n\n if (!url) {\n throw Error(`Could not find service for cluster [${cluster}]`);\n }\n\n return url;\n },\n\n /**\n * Get a service object from a service url if the service url exists in the\n * catalog.\n *\n * @param {string} url - The url to be validated.\n * @returns {object} - Service object.\n * @returns {object.name} - The name of the service found.\n * @returns {object.priorityUrl} - The default url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = ''): {name: string; priorityUrl: string; defaultUrl: string} | undefined {\n const service = this._getCatalog().findServiceDetailFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n const priorityUrl = service.get();\n const defaultUrl = new URL(\n service.serviceUrls.find((serviceUrl) => url.startsWith(serviceUrl.baseUrl)).baseUrl\n ).href;\n\n return {\n name: service.serviceName,\n priorityUrl,\n defaultUrl,\n };\n },\n\n /**\n * Determine if a provided url is in the catalog's allowed domains.\n *\n * @param {string} url - The url to match allowed domains against.\n * @returns {boolean} - True if the url provided is allowed.\n */\n isAllowedDomainUrl(url: string): boolean {\n const catalog = this._getCatalog();\n\n return !!catalog.findAllowedDomain(url);\n },\n\n /**\n * Converts the host portion of the url from default host\n * to a priority host\n *\n * @param {string} url a service url that contains a default host\n * @returns {string} a service url that contains the top priority host.\n * @throws if url isn't a service url\n */\n convertUrlToPriorityHostUrl(url = '' as string): string {\n const data = this.getServiceFromUrl(url);\n\n if (!data) {\n throw Error(`No service associated with url: [${url}]`);\n }\n\n return url.replace(data.defaultUrl, data.priorityUrl);\n },\n\n /**\n * @private\n * Simplified method wrapper for sending a request to get\n * an updated service hostmap.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n _fetchNewServiceHostmap(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...(query || {}), format: 'U2CV2'};\n\n if (forceRefresh) {\n qs.timestamp = new Date().getTime();\n }\n\n const requestObject = {\n method: 'GET',\n service,\n resource,\n qs,\n headers: {},\n };\n\n if (token) {\n requestObject.headers = {authorization: token};\n }\n\n return this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(() => this.request(requestObject), 'internal.get.u2c.time')\n .then(({body}) => this._formatReceivedHostmap(body || {}));\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig(): void {\n // Get the catalog and destructure the services config.\n const catalog = this._getCatalog();\n const {services, fedramp} = this.webex.config;\n\n // Validate that the services configuration exists.\n if (services) {\n if (fedramp) {\n services.discovery = fedRampServices;\n }\n // Check for discovery services.\n if (services.discovery) {\n // Format the discovery configuration into an injectable array.\n const formattedDiscoveryServices = Object.keys(services.discovery).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.discovery[key], priority: 1}],\n })\n );\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceGroups('discovery', formattedDiscoveryServices);\n }\n\n if (services.override) {\n // Format the override configuration into an injectable array.\n const formattedOverrideServices = Object.keys(services.override).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.override[key], priority: 1}],\n })\n );\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceGroups('override', formattedOverrideServices);\n }\n\n // if not fedramp, append on the commercialAllowedDomains\n if (!fedramp) {\n services.allowedDomains = union(services.allowedDomains, COMMERCIAL_ALLOWED_DOMAINS);\n }\n\n // Check for allowed host domains.\n if (services.allowedDomains) {\n // Store the allowed domains as a property of the catalog.\n catalog.setAllowedDomains(services.allowedDomains);\n }\n\n // Set `validateDomains` property to match configuration\n this.validateDomains = services.validateDomains;\n }\n },\n\n /**\n * Make the initial requests to collect the root catalogs.\n * @param {boolean} refresh - Is need force update\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs(refresh = false): Promise<void> {\n this.logger.info('services: initializing initial service catalogs');\n\n // Destructure the credentials plugin.\n const {credentials} = this.webex;\n\n // Init a promise chain. Must be done as a Promise.resolve() to allow\n // credentials#getOrgId() to properly throw.\n return (\n Promise.resolve()\n // Get the user's OrgId.\n .then(() => credentials.getOrgId())\n // Begin collecting the preauth/limited catalog.\n .then((orgId) => this.collectPreauthCatalog({orgId}, refresh))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog.\n return this.updateServices({forceRefresh: refresh}).catch(() => {\n this.initFailed = true;\n this.logger.warn('services: cannot retrieve postauth catalog');\n });\n }\n\n // Return a resolved promise for consistent return value.\n return Promise.resolve();\n })\n );\n },\n\n /**\n * Initializer\n *\n * @instance\n * @memberof Services\n * @returns {Services}\n */\n initialize(): typeof Services {\n const catalog = new ServiceCatalog();\n this._catalogs.set(this.webex, catalog);\n\n // Listen for configuration changes once.\n this.listenToOnce(this.webex, 'change:config', () => {\n this.initConfig();\n });\n\n // wait for webex instance to be ready before attempting\n // to update the service catalogs\n this.listenToOnce(this.webex, 'ready', () => {\n const {supertoken} = this.webex.credentials;\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n this.initServiceCatalogs()\n .then(() => {\n catalog.isReady = true;\n })\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n });\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n });\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,eAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,eAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AAAwD,SAAAO,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,gCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,gCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAWxD,IAAMqB,eAAe,GAAG,iBAAiB;;AAEzC;AACO,IAAMC,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,sBAAsB;AACrD;AACO,IAAME,uBAAuB,GAAAD,OAAA,CAAAC,uBAAA,GAAG,gBAAgB;AAEvD,IAAMC,eAAe,GAAGC,OAAO,CAACC,GAAG,CAACC,kCAAkC,IAAIJ,uBAAuB;AACjG,IAAMK,0BAA0B,GAC9BH,OAAO,CAACC,GAAG,CAACG,kCAAkC,OAAAC,MAAA,CAAOT,eAAe,OAAAS,MAAA,CAAIN,eAAe,CAAE;;AAE3F;AACA;AACA;AACA;AACA,IAAMO,QAAQ,GAAGC,oBAAW,CAACC,MAAM,CAAC;EAClCC,SAAS,EAAE,UAAU;EAErBC,KAAK,EAAE;IACLC,eAAe,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC;IACzCC,UAAU,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK;EACtC,CAAC;EAEDC,SAAS,EAAE,IAAAC,QAAA,CAAAvB,OAAA,CAAY,CAAC;EAExBwB,eAAe,EAAE,CAAC,CAAC;EAEnBC,SAAS,EAAE,EAAE;EAEb;AACF;AACA;AACA;AACA;AACA;EACEC,WAAW,WAAXA,WAAWA,CAAA,EAAoB;IAC7B,OAAO,IAAI,CAACJ,SAAS,CAACK,GAAG,CAAC,IAAI,CAACC,KAAK,CAAC;EACvC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACED,GAAG,WAAHA,GAAGA,CAACE,IAAY,EAAEC,YAA2B,EAAsB;IACjE,IAAMC,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,IAAMM,SAAS,GAAG,IAAI,CAACR,eAAe,CAACK,IAAI,CAAC;IAE5C,IAAMI,OAAO,GAAGF,OAAO,CAACJ,GAAG,CAACK,SAAS,EAAEF,YAAY,CAAC;IACpD,IAAMI,SAAS,GAAGH,OAAO,CAACJ,GAAG,CAACE,IAAI,EAAEC,YAAY,CAAC;;IAEjD;IACA,IAAI,CAACG,OAAO,IAAI,CAACC,SAAS,EAAE;MAC1B,OAAOC,SAAS;IAClB;IAEA,OAAOF,OAAO,IAAIC,SAAS;EAC7B,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAY;IAC3B,IAAML,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,OAAOK,OAAO,CAACM,iBAAiB,CAAC,CAAC,CAACzC,MAAM,GAAG,CAAC;EAC/C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE0C,aAAa,WAAbA,aAAaA,CAACC,GAAW,EAAsB;IAC7C,IAAMR,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,OAAOK,OAAO,CAACS,oBAAoB,CAACD,GAAG,CAAC;EAC1C,CAAC;EAED;AACF;AACA;AACA;EACEE,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAuB;IACtC,IAAMC,QAA4B,GAAG,EAAE;IACvC,IAAMC,QAAwB,GAAG,IAAI,CAAClB,SAAS,IAAI,EAAE;IAErDkB,QAAQ,CACLtD,MAAM,CACL,UAACuD,OAAO;MAAA,OACN,CAAAA,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,WAAW,MAAK,QAAQ,IACjC,IAAAC,QAAA,CAAA9C,OAAA,EAAc4C,OAAO,CAACG,WAAW,CAAC,IAClCH,OAAO,CAACG,WAAW,CAACnD,MAAM,GAAG,CAAC;IAAA,CAClC,CAAC,CACAE,OAAO,CAAC,UAAC8C,OAAO,EAAK;MACpBA,OAAO,CAACG,WAAW,CAACjD,OAAO,CAAC,UAACkD,UAAU,EAAK;QAC1C,IAAMC,YAAY,GAAGD,UAAU,CAACE,OAAO,CAACC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;QACtF,IAAI,CAACT,QAAQ,CAACU,IAAI,CAAC,UAACC,CAAC;UAAA,OAAKA,CAAC,IAAIA,CAAC,CAACC,IAAI,KAAKL,YAAY;QAAA,EAAC,EAAE;UACvDP,QAAQ,CAAClD,IAAI,CAAC;YACZ8D,IAAI,EAAEL,YAAY;YAClBM,QAAQ,EAAEP,UAAU,CAACO,QAAQ;YAC7BC,EAAE,EAAEZ,OAAO,CAACY,EAAE;YACdC,GAAG,EAAE;UACP,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEJ,OAAOf,QAAQ;EACjB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEgB,qBAAqB,WAArBA,qBAAqBA,CAACC,cAA8B,EAAQ;IAC1D,IAAI,CAACnC,eAAe,GAAA9B,aAAA,CAAAA,aAAA,KAAO,IAAI,CAAC8B,eAAe,GAAKmC,cAAc,CAAC;EACrE,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,eAAe,WAAfA,eAAeA,CAACjB,QAAwB,EAAQ;IAC9C,IAAI,CAAClB,SAAS,GAAG,IAAAoC,eAAO,EAAClB,QAAQ,EAAE,IAAI,CAAClB,SAAS,EAAE,IAAI,CAAC;EAC1D,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEqC,cAAc,WAAdA,cAAcA,CAAA,EAOK;IAAA,IAAAC,eAAA;MAAAC,qBAAA;MAAAC,KAAA;IAAA,IAAAC,IAAA,GAAAvE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MANoB,CAAC,CAAC;MAAtCwE,IAAI,GAAAD,IAAA,CAAJC,IAAI;MAAEC,KAAK,GAAAF,IAAA,CAALE,KAAK;MAAEC,KAAK,GAAAH,IAAA,CAALG,KAAK;MAAEC,YAAY,GAAAJ,IAAA,CAAZI,YAAY;IAOjC,IAAMvC,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAClC,IAAI6C,cAAc;IAClB,IAAIzC,YAAY;;IAEhB;IACA,QAAQqC,IAAI;MACV,KAAK,SAAS;QACZrC,YAAY,GAAG,SAAS;QACxB;MACF,KAAK,QAAQ;QACXA,YAAY,GAAG,QAAQ;QACvB;MACF;QACEA,YAAY,GAAG,UAAU;QACzB;IACJ;IACA;IACA,KAAAiC,eAAA,GAAIhC,OAAO,CAACyC,MAAM,cAAAT,eAAA,gBAAAC,qBAAA,GAAdD,eAAA,CAAiBjC,YAAY,CAAC,cAAAkC,qBAAA,eAA9BA,qBAAA,CAAgCS,UAAU,EAAE;MAC9C,OAAO,IAAI,CAACC,cAAc,CAAC5C,YAAY,CAAC;IAC1C;IAEAC,OAAO,CAACyC,MAAM,CAAC1C,YAAY,CAAC,CAAC2C,UAAU,GAAG,IAAI;IAE9C,IAAI3C,YAAY,KAAK,SAAS,EAAE;MAC9B,IAAM6C,QAAQ,GAAGP,KAAK,IAAI,IAAAQ,KAAA,CAAA5E,OAAA,EAAYoE,KAAK,CAAC,CAAC,CAAC,CAAC;MAE/C,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAACS,QAAQ,CAACF,QAAQ,CAAC,EAAE;QACzE,OAAOG,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CACnB,IAAIC,KAAK,CAAC,uEAAuE,CACnF,CAAC;MACH;IACF;IACA;IACA,IAAIlD,YAAY,KAAK,SAAS,IAAIA,YAAY,KAAK,QAAQ,EAAE;MAC3D,IAAM6C,SAAQ,GAAG,IAAAC,KAAA,CAAA5E,OAAA,EAAYoE,KAAK,CAAC,CAAC,CAAC,CAAC;MAEtCG,cAAc,GAAG,CAAC,CAAC;MAEnB,IAAII,SAAQ,KAAK,OAAO,IAAIP,KAAK,CAACa,KAAK,EAAE;QACvCV,cAAc,CAACW,SAAS,GAAG,IAAAC,YAAM,EAACf,KAAK,CAACa,KAAK,CAACG,WAAW,CAAC,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MACzE,CAAC,MAAM;QACLd,cAAc,CAACI,SAAQ,CAAC,GAAGP,KAAK,CAACO,SAAQ,CAAC;MAC5C;IACF;IAEA,OAAO,IAAI,CAACW,uBAAuB,CAAC;MAClCnB,IAAI,EAAJA,IAAI;MACJE,KAAK,EAALA,KAAK;MACLD,KAAK,EAAEG,cAAc;MACrBD,YAAY,EAAZA;IACF,CAAC,CAAC,CACCiB,IAAI,CAAC,UAACC,cAA8B,EAAK;MACxCzD,OAAO,CAAC0D,mBAAmB,CACzB3D,YAAY,EACZ0D,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAE7C,QAAQ,EACxB6C,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEE,SAClB,CAAC;MACDzB,KAAI,CAAC0B,uBAAuB,CAAC,CAAC;MAC9B5D,OAAO,CAACyC,MAAM,CAAC1C,YAAY,CAAC,CAAC2C,UAAU,GAAG,KAAK;IACjD,CAAC,CAAC,CACDmB,KAAK,CAAC,UAACC,KAAK,EAAK;MAChB9D,OAAO,CAACyC,MAAM,CAAC1C,YAAY,CAAC,CAAC2C,UAAU,GAAG,KAAK;MAE/C,OAAOK,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CAACc,KAAK,CAAC;IAC9B,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAEE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAEE;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,YAAY,WAAZA,YAAYA,CAAAC,KAAA,EAMT;IAAA,IAAAC,MAAA;IAAA,IALDf,KAAK,GAAAc,KAAA,CAALd,KAAK;MAAAgB,WAAA,GAAAF,KAAA,CACLG,KAAK;MAALA,KAAK,GAAAD,WAAA,cAAG,WAAW,GAAAA,WAAA;MAAAE,kBAAA,GAAAJ,KAAA,CACnBzB,YAAY;MAAZA,YAAY,GAAA6B,kBAAA,cAAG,KAAK,GAAAA,kBAAA;MAAAC,qBAAA,GAAAL,KAAA,CACpBM,iBAAiB;MAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,CAAC,CAAC,GAAAA,qBAAA;MACtBE,cAAc,GAAAP,KAAA,CAAdO,cAAc;IAEd,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,6BAA6B,CAAC;;IAE/C;IACA,IAAI,CAACvB,KAAK,EAAE;MACV,OAAOH,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CAAC,IAAIC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzD;;IAEA;IACA,IAAOyB,YAAY,GAAI,IAAI,CAAC7E,KAAK,CAAC8E,WAAW,CAAtCD,YAAY;;IAEnB;IACA,IAAIA,YAAY,EAAE;MAChB,OAAO,IAAI,CAAC3C,cAAc,CAAC;QAACQ,YAAY,EAAZA;MAAY,CAAC,CAAC,CACvCiB,IAAI,CAAC;QAAA,OAAMS,MAAI,CAACpE,KAAK,CAAC8E,WAAW,CAACC,YAAY,CAAC,CAAC;MAAA,EAAC,CACjDpB,IAAI,CAAC,UAAClB,KAAK;QAAA,OACV2B,MAAI,CAACY,kBAAkB,CAAC;UACtB3B,KAAK,EAALA,KAAK;UACLiB,KAAK,EAALA,KAAK;UACL7B,KAAK,EAAEA,KAAK,CAACgB,QAAQ,CAAC,CAAC;UACvBgB,iBAAiB,EAAjBA,iBAAiB;UACjBC,cAAc,EAAdA;QACF,CAAC,CAAC;MAAA,CACJ,CAAC,CACAf,IAAI,CAAC,UAACsB,OAAO;QAAA,OAAM;UAClBC,SAAS,EAAE,IAAI;UACfC,MAAM,EAAE,IAAI;UACZC,OAAO,EAAE,qCAAqC;UAC9CC,IAAI,EAAEJ;QACR,CAAC;MAAA,CAAC,CAAC;IACP;;IAEA;IACA;IACA,IAAAK,qBAAA,GAAmC,IAAI,CAACtF,KAAK,CAAC8E,WAAW,CAACS,MAAM;MAAzDC,SAAS,GAAAF,qBAAA,CAATE,SAAS;MAAEC,aAAa,GAAAH,qBAAA,CAAbG,aAAa;;IAE/B;IACA,IAAI,CAACD,SAAS,IAAI,CAACC,aAAa,EAAE;MAChC,OAAOvC,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CAAC,IAAIC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrF;IACA;;IAEA;IACA,IAAIX,KAAK;;IAET;IACA,OACE,IAAI,CAACiD,qBAAqB,CAAC;MAACrC,KAAK,EAALA;IAAK,CAAC,CAAC,CAChCM,IAAI,CAAC,YAAM;MACV;MACA;MACA;MACA,IAAMgC,eAAe,GAAGvB,MAAI,CAACrE,GAAG,CAAC,UAAU,CAAC;;MAE5C;MACA,OAAOqE,MAAI,CAACpE,KAAK,CAAC8E,WAAW,CAACc,cAAc,CAAC;QAC3CC,GAAG,KAAA3G,MAAA,CAAKyG,eAAe,+BAA4B;QACnDG,KAAK,EAAE;MACT,CAAC,CAAC;IACJ,CAAC,CAAC,CACDnC,IAAI,CAAC,UAACoC,QAAQ,EAAK;MAClB;MACAtD,KAAK,GAAGsD,QAAQ,CAACtC,QAAQ,CAAC,CAAC;;MAE3B;MACA,OAAOW,MAAI,CAAC4B,oBAAoB,CAAC;QAAC3C,KAAK,EAALA,KAAK;QAAEZ,KAAK,EAALA,KAAK;QAAEC,YAAY,EAAZA;MAAY,CAAC,CAAC;IAChE,CAAC;IACD;IACA;IAAA,CACCsB,KAAK,CAAC,UAACC,KAAK;MAAA,OAAM;QACjBkB,MAAM,EAAElB,KAAK,CAAChE,IAAI,KAAK,UAAU;QACjCiF,SAAS,EAAE,KAAK;QAChBE,OAAO,EACLnB,KAAK,CAAChE,IAAI,KAAK,UAAU,GACrB,kCAAkC,GAClC;MACR,CAAC;IAAA,CAAC;IACF;IACA;IAAA,CACC0D,IAAI,CAAC,UAACsC,GAAG;MAAA,OACR/C,QAAA,CAAA9E,OAAA,CAAQ8H,GAAG,CAAC,CACVD,GAAG,IAAI;QACLf,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,IAAI;QACZC,OAAO,EAAE;MACX,CAAC,EACDhB,MAAI,CAACY,kBAAkB,CAAC;QACtB3B,KAAK,EAALA,KAAK;QACLiB,KAAK,EAALA,KAAK;QACL7B,KAAK,EAALA,KAAK;QACLgC,iBAAiB,EAAjBA,iBAAiB;QACjBC,cAAc,EAAdA;MACF,CAAC,CAAC,CACH,CAAC;IAAA,CACJ,CAAC,CACAf,IAAI,CAAC,UAAAwC,KAAA;MAAA,IAAAC,KAAA,OAAAC,eAAA,CAAAjI,OAAA,EAAA+H,KAAA;QAAEF,GAAG,GAAAG,KAAA;QAAEf,IAAI,GAAAe,KAAA;MAAA,OAAAtI,aAAA,CAAAA,aAAA,KAAWmI,GAAG;QAAEZ,IAAI,EAAJA;MAAI;IAAA,CAAE,CAAC,CACvCrB,KAAK,CAAC,UAACC,KAAK,EAAK;MAChB,IAAMqC,QAAQ,GAAG;QACfC,UAAU,EAAEtC,KAAK,CAACsC,UAAU;QAC5BC,YAAY,EAAEvC,KAAK,CAACwC,IAAI,IAAIxC,KAAK,CAACwC,IAAI,CAACC,OAAO;QAC9CD,IAAI,EAAExC,KAAK,CAACwC;MACd,CAAC;MAED,OAAOvD,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CAACmD,QAAQ,CAAC;IACjC,CAAC,CAAC;EAER,CAAC;EACD;AACF;AACA;AACA;AACA;AACA;AACA;EACEK,sBAAsB,WAAtBA,sBAAsBA,CAACC,iBAAiC,EAAiB;IAAA,IAAAC,MAAA;IACvE,IAAI,CAAClC,MAAM,CAACC,IAAI,CAAC,wCAAwC,CAAC;IAE1D,IAAMkC,mBAAmB,GAAG,IAAAC,OAAA,CAAA3I,OAAA,EAAcwI,iBAAiB,CAAC;IAE5D,IAAMI,iBAAiB,GAAGF,mBAAmB,CAACG,IAAI,CAAC,UAAC7G,SAAS,EAAK;MAChE;MACA,OAAO,CAACyG,MAAI,CAAChH,SAAS,CAAC2B,IAAI,CAAC,UAACR,OAAO;QAAA,OAAKA,OAAO,CAACY,EAAE,KAAKxB,SAAS;MAAA,EAAC;IACpE,CAAC,CAAC;IAEF,IAAI4G,iBAAiB,EAAE;MACrB,IAAI,CAACrC,MAAM,CAACuC,IAAI,CACd,8EACF,CAAC;;MAED;MACA,OAAO,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAAC;IACvC;IACA;IACA,IAAI,CAACrF,qBAAqB,CAAC8E,iBAAiB,CAAC;IAC7C,IAAI,CAACjC,MAAM,CAACC,IAAI,CAAC,mDAAmD,CAAC;IAErE,OAAO1B,QAAA,CAAA9E,OAAA,CAAQgJ,OAAO,CAAC,CAAC;EAC1B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,eAAe,WAAfA,eAAeA,CAACvD,SAAiB,EAAiB;IAAA,IAAAwD,iBAAA;IAChD,IAAI,CAAC3C,MAAM,CAACC,IAAI,CAAC,wCAAwC,EAAEd,SAAS,CAAC;IACrE,IAAMyD,QAAQ,GAAG,IAAAC,gBAAQ,GAAAF,iBAAA,GAAC,IAAI,CAACxH,WAAW,CAAC,CAAC,cAAAwH,iBAAA,uBAAlBA,iBAAA,CAAoBxD,SAAS,CAAC,IAAI,CAAC;IAC7D,IAAM2D,cAAc,GAAG,IAAAD,gBAAQ,EAAC1D,SAAS,CAAC,IAAI,CAAC;IAC/C,IAAI2D,cAAc,GAAGF,QAAQ,EAAE;MAC7B,IAAI,CAAC5C,MAAM,CAACC,IAAI,CAAC,6CAA6C,CAAC;MAC/D,IAAI,CAACuC,mBAAmB,CAAC,IAAI,CAAC;IAChC;IAEA,OAAOjE,QAAA,CAAA9E,OAAA,CAAQgJ,OAAO,CAAC,CAAC;EAC1B,CAAC;EACD;AACF;AACA;AACA;AACA;EACEM,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;IAAA,IAAAC,MAAA;IACtB,OAAO,IAAI,CAACC,OAAO,CAAC;MAClBC,MAAM,EAAE,KAAK;MACb7G,OAAO,EAAE,OAAO;MAChB8G,QAAQ,EAAE;IACZ,CAAC,CAAC,CACCnE,IAAI,CAAC,UAACoE,GAAG,EAAK;MACbJ,MAAI,CAAChD,MAAM,CAACC,IAAI,CAAC,qCAAqC,CAAC;MAEvD,OAAOmD,GAAG,CAACtB,IAAI;IACjB,CAAC,CAAC,CACDzC,KAAK,CAAC,UAACgE,GAAG,EAAK;MACdL,MAAI,CAAChD,MAAM,CAACC,IAAI,CAAC,wDAAwD,EAAEoD,GAAG,CAAC;MAC/E;IACF,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;IAAA,IAAAC,MAAA;IACtB,IAAOnH,QAAQ,GAAI,IAAI,CAACf,KAAK,CAACuF,MAAM,CAA7BxE,QAAQ;IAEf,OAAO,IAAI,CAAC6G,OAAO,CAAC;MAClB/B,GAAG,EAAE9E,QAAQ,CAACoH,SAAS,CAACC,WAAW;MACnCC,aAAa,EAAE,KAAK;MACpBC,OAAO,EAAE;QACP,kBAAkB,EAAE;MACtB,CAAC;MACDC,OAAO,EAAE;IACX,CAAC,CAAC,CACC5E,IAAI,CAAC,UAACoE,GAAG,EAAK;MACbG,MAAI,CAACvD,MAAM,CAACC,IAAI,CAAC,qCAAqC,CAAC;MAEvD,OAAOmD,GAAG,CAACtB,IAAI;IACjB,CAAC,CAAC,CACDzC,KAAK,CAAC,UAACgE,GAAG,EAAK;MACdE,MAAI,CAACvD,MAAM,CAACC,IAAI,CAAC,gDAAgD,EAAEoD,GAAG,CAAC;MACvE;IACF,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAEE;AACF;AACA;AACA;AACA;AACA;EACEhD,kBAAkB,WAAlBA,kBAAkBA,CAAAwD,KAAA,EAA2D;IAAA,IAAAC,MAAA;IAAA,IAAzDpF,KAAK,GAAAmF,KAAA,CAALnF,KAAK;MAAEiB,KAAK,GAAAkE,KAAA,CAALlE,KAAK;MAAE7B,KAAK,GAAA+F,KAAA,CAAL/F,KAAK;MAAEgC,iBAAiB,GAAA+D,KAAA,CAAjB/D,iBAAiB;MAAEC,cAAc,GAAA8D,KAAA,CAAd9D,cAAc;IACxE,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,2CAA2C,CAAC;IAC7D,IAAI8D,WAAW;IACf,IAAIC,QAAQ;;IAEZ;IACA,OACE,IAAI,CAACV,qBAAqB,CAAC,CAAC,CACzBtE,IAAI,CAAC,UAACiF,gBAAgB,EAAK;MAC1B,IAAIA,gBAAgB,EAAE;QAClBF,WAAW,GAAcE,gBAAgB,CAAzCF,WAAW;QAAEC,QAAQ,GAAIC,gBAAgB,CAA5BD,QAAQ;MACzB;;MAEA;MACA,OAAOF,MAAI,CAACb,OAAO,CAAC;QAClB5G,OAAO,EAAE,SAAS;QAClB8G,QAAQ,EAAE,mBAAmB;QAC7BD,MAAM,EAAE,MAAM;QACdS,OAAO,EAAE;UACPO,MAAM,EAAE,kBAAkB;UAC1BC,aAAa,EAAErG,KAAK;UACpB,mBAAmB,EAAEiC;QACvB,CAAC;QACD+B,IAAI,EAAA3I,aAAA;UACFuF,KAAK,EAALA,KAAK;UACLiB,KAAK,EAALA,KAAK;UACLoE,WAAW,EAAXA,WAAW;UACXK,QAAQ,EAAEJ;QAAQ,GACflE,iBAAiB,CACrB;QACDuE,wBAAwB,EAAE;MAC5B,CAAC,CAAC;IACJ,CAAC;IACD;IAAA,CACCrF,IAAI,CAAC,UAAAsF,KAAA;MAAA,IAAExC,IAAI,GAAAwC,KAAA,CAAJxC,IAAI;MAAA,OAAMA,IAAI;IAAA;IACtB;IAAA,CACCzC,KAAK,CAAC,UAACC,KAAK;MAAA,OAAKf,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CAACc,KAAK,CAAC;IAAA,EAAC;EAE9C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEiF,aAAa,WAAbA,aAAaA,CAAChJ,YAA0B,EAAEiJ,OAAuB,EAAiB;IAChF,IAAMhJ,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,IAAM8D,cAAc,GAAG,IAAI,CAACwF,sBAAsB,CAACD,OAAO,IAAI,CAAC,CAAC,CAAC;IAEjE,OAAOhJ,OAAO,CAAC0D,mBAAmB,CAChC3D,YAAY,EACZ0D,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAE7C,QAAQ,EACxB6C,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEE,SAClB,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE4B,qBAAqB,WAArBA,qBAAqBA,CAAClD,KAAmB,EAAwB;IAAA,IAAtBE,YAAY,GAAA3E,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAG,KAAK;IAC7D,IAAI,CAACyE,KAAK,EAAE;MACV,OAAO,IAAI,CAACN,cAAc,CAAC;QACzBK,IAAI,EAAE,SAAS;QACfC,KAAK,EAAE;UAAC6G,IAAI,EAAE;QAAsB,CAAC;QACrC3G,YAAY,EAAZA;MACF,CAAC,CAAC;IACJ;IAEA,OAAO,IAAI,CAACR,cAAc,CAAC;MAACK,IAAI,EAAE,SAAS;MAAEC,KAAK,EAALA,KAAK;MAAEE,YAAY,EAAZA;IAAY,CAAC,CAAC;EACpE,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEsD,oBAAoB,WAApBA,oBAAoBA,CAAA,EAEH;IAAA,IAAAsD,KAAA,GAAAvL,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MADgB,CAAC,CAAC;MAAhCsF,KAAK,GAAAiG,KAAA,CAALjG,KAAK;MAAEZ,KAAK,GAAA6G,KAAA,CAAL7G,KAAK;MAAEC,YAAY,GAAA4G,KAAA,CAAZ5G,YAAY;IAE3B,IAAI,CAACW,KAAK,EAAE;MACV,OAAOH,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CAAC,IAAIC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzD;IACA,IAAI,CAACX,KAAK,EAAE;MACV,OAAOS,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CAAC,IAAIC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzD;IAEA,OAAO,IAAI,CAAClB,cAAc,CAAC;MACzBK,IAAI,EAAE,QAAQ;MACdC,KAAK,EAAE;QAACa,KAAK,EAALA;MAAK,CAAC;MACdZ,KAAK,EAALA,KAAK;MACLC,YAAY,EAAZA;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEqB,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAS;IAC9B,IAAMwF,WAAW,GAAG,IAAI,CAACxJ,GAAG,CAAC,UAAU,CAAC;IACxC,IAAMyJ,WAAW,GAAG,IAAI,CAACzJ,GAAG,CAAC,UAAU,CAAC;IAExC,IAAIwJ,WAAW,IAAIC,WAAW,EAAE;MAC9B,IAAAC,qBAAA,GAA4C,IAAI,CAACzJ,KAAK,CAACuF,MAAM,CAACT,WAAW;QAAlE4E,mBAAmB,GAAAD,qBAAA,CAAnBC,mBAAmB;QAAEC,YAAY,GAAAF,qBAAA,CAAZE,YAAY;;MAExC;MACA;MACA,IAAI,CAAC3J,KAAK,CAACuF,MAAM,CAACT,WAAW,CAAC6E,YAAY,GAAGD,mBAAmB,GAC5DC,YAAY,MAAAzK,MAAA,CACTqK,WAAW,CAAChI,OAAO,CAAC/C,eAAe,EAAE,EAAE,CAAC,6BAA0B;MAEzE,IAAI,CAACwB,KAAK,CAAC4J,SAAS,CAAC;QACnB9E,WAAW,EAAE;UACX+E,QAAQ,EAAE;YACRlJ,GAAG,EAAE4I,WAAW,CAAChI,OAAO,CAAC/C,eAAe,EAAE,EAAE,CAAC,CAAE;UACjD,CAAC;UACDsL,QAAQ,EAAE;YACRnJ,GAAG,EAAE6I,WAAW,CAACjI,OAAO,CAAC/C,eAAe,EAAE,EAAE,CAAC,CAAE;UACjD;QACF;MACF,CAAC,CAAC;IACJ;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEsE,cAAc,WAAdA,cAAcA,CAAC5C,YAA0B,EAAEqI,OAAe,EAAiB;IACzE,IAAMpI,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAClC,IAAOiK,UAAU,GAAI,IAAI,CAAC/J,KAAK,CAAC8E,WAAW,CAApCiF,UAAU;IAEjB,IACE7J,YAAY,KAAK,UAAU,IAC3B6J,UAAU,IACVA,UAAU,CAACC,YAAY,IACvB,CAAC7J,OAAO,CAACyC,MAAM,CAACqH,QAAQ,CAACpH,UAAU,IACnC,CAAC1C,OAAO,CAACyC,MAAM,CAACqH,QAAQ,CAACC,KAAK,EAC9B;MACA,IAAI,CAAC/J,OAAO,CAACyC,MAAM,CAACuH,OAAO,CAACD,KAAK,EAAE;QACjC,OAAO,IAAI,CAAC/C,mBAAmB,CAAC,CAAC;MACnC;MAEA,OAAO,IAAI,CAACjF,cAAc,CAAC,CAAC;IAC9B;IAEA,OAAO/B,OAAO,CAAC2C,cAAc,CAAC5C,YAAY,EAAEqI,OAAO,CAAC;EACtD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAEE;AACF;AACA;AACA;AACA;AACA;AACA;EACE6B,cAAc,WAAdA,cAAcA,CAAAC,KAAA,EAQM;IAAA,IAAAC,MAAA;IAAA,IAPlBrK,IAAI,GAAAoK,KAAA,CAAJpK,IAAI;MAAAsK,aAAA,GAAAF,KAAA,CACJ9B,OAAO;MAAPA,OAAO,GAAAgC,aAAA,cAAG,CAAC,GAAAA,aAAA;MACX5J,GAAG,GAAA0J,KAAA,CAAH1J,GAAG;IAMH,IAAOI,QAAQ,GAAI,IAAI,CAACf,KAAK,CAACuF,MAAM,CAA7BxE,QAAQ;;IAEf;IACA,IAAMZ,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,IAAM0K,mBAAmB,GAAGzJ,QAAQ,CAAC0J,yBAAyB,CAACjJ,IAAI,CACjE,UAACR,OAAO;MAAA,OAAKA,OAAO,KAAKf,IAAI;IAAA,CAC/B,CAAC;IAED,IAAIuK,mBAAmB,EAAE;MACvB,IAAMpK,SAAS,GAAG,IAAI,CAACR,eAAe,CAACK,IAAI,CAAC;MAE5C,OAAOiD,QAAA,CAAA9E,OAAA,CAAQgJ,OAAO,CAAC,IAAI,CAACrH,GAAG,CAACK,SAAS,CAAC,CAAC;IAC7C;IAEA,IAAMsK,WAAW,GAAG,IAAI,CAAC3K,GAAG,CAACE,IAAI,CAAC;IAClC,IAAM0K,cAAc,GAAG,IAAI,CAACC,iBAAiB,CAACjK,GAAG,CAAC;IAElD,IAAI+J,WAAW,IAAIC,cAAc,EAAE;MACjC,OAAOzH,QAAA,CAAA9E,OAAA,CAAQgJ,OAAO,CAACsD,WAAW,IAAIC,cAAc,CAACD,WAAW,CAAC;IACnE;IAEA,IAAIvK,OAAO,CAAC0K,OAAO,EAAE;MACnB,IAAIlK,GAAG,EAAE;QACP,OAAOuC,QAAA,CAAA9E,OAAA,CAAQgJ,OAAO,CAACzG,GAAG,CAAC;MAC7B;MAEA,IAAI,CAACX,KAAK,CAAC8K,QAAQ,CAACC,OAAO,CAACC,mBAAmB,CAACC,gBAAO,CAACC,wBAAwB,EAAE;QAChFC,MAAM,EAAE;UAACC,YAAY,EAAEnL;QAAI;MAC7B,CAAC,CAAC;MAEF,OAAOiD,QAAA,CAAA9E,OAAA,CAAQ+E,MAAM,CACnB,IAAIC,KAAK,uBAAAlE,MAAA,CAAuBe,IAAI,2CAAwC,CAC9E,CAAC;IACH;IAEA,OAAO,IAAAiD,QAAA,CAAA9E,OAAA,CAAY,UAACgJ,OAAO,EAAEjE,MAAM,EAAK;MACtC,IAAMkI,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC;MACvD,IAAMC,YAAY,GAAG,SAAfA,YAAYA,CAAIC,YAAY;QAAA,OAChCpL,OAAO,CACJ2C,cAAc,CAACyI,YAAY,EAAEhD,OAAO,CAAC,CACrC5E,IAAI,CAAC,YAAM;UACV,IAAM6H,iBAAiB,GAAGlB,MAAI,CAACvK,GAAG,CAACE,IAAI,CAAC;UACxC,IAAMwL,oBAAoB,GAAGnB,MAAI,CAACM,iBAAiB,CAACjK,GAAG,CAAC;UAExD,IAAI6K,iBAAiB,IAAIC,oBAAoB,EAAE;YAC7CrE,OAAO,CAACoE,iBAAiB,IAAIC,oBAAoB,CAACf,WAAW,CAAC;UAChE;QACF,CAAC,CAAC,CACD1G,KAAK,CAAC;UAAA,OAAMzD,SAAS;QAAA,EAAC;MAAA;MAE3B2C,QAAA,CAAA9E,OAAA,CAAQ8H,GAAG,CAACmF,aAAa,CAACK,GAAG,CAAC,UAACC,KAAK;QAAA,OAAKL,YAAY,CAACK,KAAK,CAAC;MAAA,EAAC,CAAC,CAAChI,IAAI,CAAC,YAAM;QACxE2G,MAAI,CAACtK,KAAK,CAAC8K,QAAQ,CAACC,OAAO,CAACC,mBAAmB,CAACC,gBAAO,CAACC,wBAAwB,EAAE;UAChFC,MAAM,EAAE;YAACC,YAAY,EAAEnL;UAAI;QAC7B,CAAC,CAAC;QACFkD,MAAM,CAAC,IAAIC,KAAK,uBAAAlE,MAAA,CAAuBe,IAAI,kCAA+B,CAAC,CAAC;MAC9E,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACE2L,sBAAsB,WAAtBA,sBAAsBA,CAAC/F,GAAW,EAAU;IAC1C,IAAI;MACF,OAAO,IAAI,CAACgG,2BAA2B,CAAChG,GAAG,CAAC;IAC9C,CAAC,CAAC,OAAAiG,OAAA,EAAM;MACN,OAAOjG,GAAG;IACZ;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEkG,mBAAmB,WAAnBA,mBAAmBA,CAAAC,KAAA,EAAiC;IAAA,IAA/BpK,EAAE,GAAAoK,KAAA,CAAFpK,EAAE;MAAEX,WAAW,GAAA+K,KAAA,CAAX/K,WAAW;MAAEE,WAAW,GAAA6K,KAAA,CAAX7K,WAAW;IAC/C,IAAM8K,oBAAoB,GAAG9K,WAAW,CAACuK,GAAG,CAAC,UAACtK,UAAU;MAAA,OAAAtD,aAAA;QACtD4D,IAAI,EAAE,IAAIwK,GAAG,CAAC9K,UAAU,CAACE,OAAO,CAAC,CAACI;MAAI,GACnCN,UAAU;IAAA,CACb,CAAC;IAEH,OAAO;MACLQ,EAAE,EAAFA,EAAE;MACFX,WAAW,EAAXA,WAAW;MACXE,WAAW,EAAE8K;IACf,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE7C,sBAAsB,WAAtBA,sBAAsBA,CAAA+C,KAAA,EAAuD;IAAA,IAAAC,MAAA;IAAA,IAArDrL,QAAQ,GAAAoL,KAAA,CAARpL,QAAQ;MAAEgB,cAAc,GAAAoK,KAAA,CAAdpK,cAAc;MAAE+B,SAAS,GAAAqI,KAAA,CAATrI,SAAS;MAAEuI,KAAK,GAAAF,KAAA,CAALE,KAAK;MAAEC,MAAM,GAAAH,KAAA,CAANG,MAAM;IACxE,IAAMC,gBAAgC,GAAG;MACvCxK,cAAc,EAAdA,cAAc;MACdhB,QAAQ,EAAEA,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAE2K,GAAG,CAAC,UAAC1K,OAAO;QAAA,OAAKoL,MAAI,CAACL,mBAAmB,CAAC/K,OAAO,CAAC;MAAA,EAAC;MACvE8C,SAAS,EAATA,SAAS;MACTuI,KAAK,EAALA,KAAK;MACLC,MAAM,EAANA;IACF,CAAC;IACD,IAAI,CAACxK,qBAAqB,CAACC,cAAc,CAAC;IAC1C,IAAI,CAACC,eAAe,CAACjB,QAAQ,CAAC;IAE9B,OAAOwL,gBAAgB;EACzB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,YAAY,WAAZA,YAAYA,CAAC7L,GAAW,EAAsB;IAC5C,IAAMR,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,OAAOK,OAAO,CAACsM,aAAa,CAAC9L,GAAG,CAAC;EACnC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE+L,uBAAuB,WAAvBA,uBAAuBA,CAACC,MAGvB,EAA2C;IAC1C,IAAMxM,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,OAAOK,OAAO,CAACyM,wBAAwB,CAACD,MAAM,CAAC;EACjD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,0BAA0B,WAA1BA,0BAA0BA,CAAA,EAAoD;IAAA,IAAAC,KAAA,GAAA/O,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAZ,CAAC,CAAC;MAAAgP,aAAA,GAAAD,KAAA,CAAxCE,OAAO;MAAPA,OAAO,GAAAD,aAAA,cAAG,IAAI,GAAAA,aAAA;IACxC,IAAI3M,SAAS,GAAG4M,OAAO,KAAK,IAAI,GAAGhO,0BAA0B,GAAGgO,OAAO;;IAEvE;IACA,IAAI5M,SAAS,CAAC6M,KAAK,CAAC,GAAG,CAAC,CAACjP,MAAM,GAAG,CAAC,EAAE;MACnC;MACAoC,SAAS,MAAAlB,MAAA,CAAM8N,OAAO,OAAA9N,MAAA,CAAIN,eAAe,CAAE;IAC7C;IAEA,IAAAsO,MAAA,GAAc,IAAI,CAACR,uBAAuB,CAAC;QAACtM,SAAS,EAATA;MAAS,CAAC,CAAC,IAAI,CAAC,CAAC;MAAtDO,GAAG,GAAAuM,MAAA,CAAHvM,GAAG;IAEV,IAAI,CAACA,GAAG,EAAE;MACR,MAAMyC,KAAK,wCAAAlE,MAAA,CAAwC8N,OAAO,MAAG,CAAC;IAChE;IAEA,OAAOrM,GAAG;EACZ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEiK,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAgF;IAAA,IAA/EjK,GAAG,GAAA5C,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAG,EAAE;IACxB,IAAMiD,OAAO,GAAG,IAAI,CAAClB,WAAW,CAAC,CAAC,CAACqN,wBAAwB,CAACxM,GAAG,CAAC;IAEhE,IAAI,CAACK,OAAO,EAAE;MACZ,OAAOT,SAAS;IAClB;IAEA,IAAMmK,WAAW,GAAG1J,OAAO,CAACjB,GAAG,CAAC,CAAC;IACjC,IAAMqN,UAAU,GAAG,IAAIlB,GAAG,CACxBlL,OAAO,CAACG,WAAW,CAACK,IAAI,CAAC,UAACJ,UAAU;MAAA,OAAKT,GAAG,CAAC0M,UAAU,CAACjM,UAAU,CAACE,OAAO,CAAC;IAAA,EAAC,CAACA,OAC/E,CAAC,CAACgM,IAAI;IAEN,OAAO;MACLrN,IAAI,EAAEe,OAAO,CAACC,WAAW;MACzByJ,WAAW,EAAXA,WAAW;MACX0C,UAAU,EAAVA;IACF,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEG,kBAAkB,WAAlBA,kBAAkBA,CAAC5M,GAAW,EAAW;IACvC,IAAMR,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAElC,OAAO,CAAC,CAACK,OAAO,CAACqN,iBAAiB,CAAC7M,GAAG,CAAC;EACzC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEkL,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAA6B;IAAA,IAA5BlL,GAAG,GAAA5C,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAG,EAAE;IAClC,IAAM0P,IAAI,GAAG,IAAI,CAAC7C,iBAAiB,CAACjK,GAAG,CAAC;IAExC,IAAI,CAAC8M,IAAI,EAAE;MACT,MAAMrK,KAAK,qCAAAlE,MAAA,CAAqCyB,GAAG,MAAG,CAAC;IACzD;IAEA,OAAOA,GAAG,CAACY,OAAO,CAACkM,IAAI,CAACL,UAAU,EAAEK,IAAI,CAAC/C,WAAW,CAAC;EACvD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEhH,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAOJ;IAAA,IAAAgK,MAAA;IAAA,IAAAC,MAAA,GAAA5P,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MANoB,CAAC,CAAC;MAAtCwE,IAAI,GAAAoL,MAAA,CAAJpL,IAAI;MAAEC,KAAK,GAAAmL,MAAA,CAALnL,KAAK;MAAEC,KAAK,GAAAkL,MAAA,CAALlL,KAAK;MAAEC,YAAY,GAAAiL,MAAA,CAAZjL,YAAY;IAOjC,IAAM1B,OAAO,GAAG,KAAK;IACrB,IAAM8G,QAAQ,GAAGvF,IAAI,OAAArD,MAAA,CAAOqD,IAAI,gBAAa,UAAU;IACvD,IAAMqL,EAAE,GAAA9P,aAAA,CAAAA,aAAA,KAAQ0E,KAAK,IAAI,CAAC,CAAC;MAAG8J,MAAM,EAAE;IAAO,EAAC;IAE9C,IAAI5J,YAAY,EAAE;MAChBkL,EAAE,CAAC9J,SAAS,GAAG,IAAI+J,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC;IACrC;IAEA,IAAMC,aAAa,GAAG;MACpBlG,MAAM,EAAE,KAAK;MACb7G,OAAO,EAAPA,OAAO;MACP8G,QAAQ,EAARA,QAAQ;MACR8F,EAAE,EAAFA,EAAE;MACFtF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI7F,KAAK,EAAE;MACTsL,aAAa,CAACzF,OAAO,GAAG;QAACQ,aAAa,EAAErG;MAAK,CAAC;IAChD;IAEA,OAAO,IAAI,CAACzC,KAAK,CAAC8K,QAAQ,CAACkD,UAAU,CAACC,uBAAuB,CAC1DC,cAAc,CAAC;MAAA,OAAMR,MAAI,CAAC9F,OAAO,CAACmG,aAAa,CAAC;IAAA,GAAE,uBAAuB,CAAC,CAC1EpK,IAAI,CAAC,UAAAwK,MAAA;MAAA,IAAE1H,IAAI,GAAA0H,MAAA,CAAJ1H,IAAI;MAAA,OAAMiH,MAAI,CAACtE,sBAAsB,CAAC3C,IAAI,IAAI,CAAC,CAAC,CAAC;IAAA,EAAC;EAC9D,CAAC;EAED;AACF;AACA;AACA;AACA;EACE2H,UAAU,WAAVA,UAAUA,CAAA,EAAS;IAAA,IAAAC,MAAA;IACjB;IACA,IAAMlO,OAAO,GAAG,IAAI,CAACL,WAAW,CAAC,CAAC;IAClC,IAAAwO,kBAAA,GAA4B,IAAI,CAACtO,KAAK,CAACuF,MAAM;MAAtCxE,QAAQ,GAAAuN,kBAAA,CAARvN,QAAQ;MAAEwN,OAAO,GAAAD,kBAAA,CAAPC,OAAO;;IAExB;IACA,IAAIxN,QAAQ,EAAE;MACZ,IAAIwN,OAAO,EAAE;QACXxN,QAAQ,CAACoH,SAAS,GAAGqG,uBAAe;MACtC;MACA;MACA,IAAIzN,QAAQ,CAACoH,SAAS,EAAE;QACtB;QACA,IAAMsG,0BAA0B,GAAG,IAAAzL,KAAA,CAAA5E,OAAA,EAAY2C,QAAQ,CAACoH,SAAS,CAAC,CAACuD,GAAG,CAAC,UAACgD,GAAG;UAAA,OACzEL,MAAI,CAACtC,mBAAmB,CAAC;YACvBnK,EAAE,EAAE8M,GAAG;YACPzN,WAAW,EAAEyN,GAAG;YAChBvN,WAAW,EAAE,CAAC;cAACG,OAAO,EAAEP,QAAQ,CAACoH,SAAS,CAACuG,GAAG,CAAC;cAAE/M,QAAQ,EAAE;YAAC,CAAC;UAC/D,CAAC,CAAC;QAAA,CACJ,CAAC;;QAED;QACAxB,OAAO,CAAC0D,mBAAmB,CAAC,WAAW,EAAE4K,0BAA0B,CAAC;MACtE;MAEA,IAAI1N,QAAQ,CAAC4N,QAAQ,EAAE;QACrB;QACA,IAAMC,yBAAyB,GAAG,IAAA5L,KAAA,CAAA5E,OAAA,EAAY2C,QAAQ,CAAC4N,QAAQ,CAAC,CAACjD,GAAG,CAAC,UAACgD,GAAG;UAAA,OACvEL,MAAI,CAACtC,mBAAmB,CAAC;YACvBnK,EAAE,EAAE8M,GAAG;YACPzN,WAAW,EAAEyN,GAAG;YAChBvN,WAAW,EAAE,CAAC;cAACG,OAAO,EAAEP,QAAQ,CAAC4N,QAAQ,CAACD,GAAG,CAAC;cAAE/M,QAAQ,EAAE;YAAC,CAAC;UAC9D,CAAC,CAAC;QAAA,CACJ,CAAC;;QAED;QACAxB,OAAO,CAAC0D,mBAAmB,CAAC,UAAU,EAAE+K,yBAAyB,CAAC;MACpE;;MAEA;MACA,IAAI,CAACL,OAAO,EAAE;QACZxN,QAAQ,CAAC8N,cAAc,GAAG,IAAAC,aAAK,EAAC/N,QAAQ,CAAC8N,cAAc,EAAEE,qCAA0B,CAAC;MACtF;;MAEA;MACA,IAAIhO,QAAQ,CAAC8N,cAAc,EAAE;QAC3B;QACA1O,OAAO,CAAC6O,iBAAiB,CAACjO,QAAQ,CAAC8N,cAAc,CAAC;MACpD;;MAEA;MACA,IAAI,CAACrP,eAAe,GAAGuB,QAAQ,CAACvB,eAAe;IACjD;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACE2H,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAiC;IAAA,IAAA8H,MAAA;IAAA,IAAhCC,OAAO,GAAAnR,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAwC,SAAA,GAAAxC,SAAA,MAAG,KAAK;IACjC,IAAI,CAAC4G,MAAM,CAACC,IAAI,CAAC,iDAAiD,CAAC;;IAEnE;IACA,IAAOE,WAAW,GAAI,IAAI,CAAC9E,KAAK,CAAzB8E,WAAW;;IAElB;IACA;IACA,OACE5B,QAAA,CAAA9E,OAAA,CAAQgJ,OAAO,CAAC;IACd;IAAA,CACCzD,IAAI,CAAC;MAAA,OAAMmB,WAAW,CAACqK,QAAQ,CAAC,CAAC;IAAA;IAClC;IAAA,CACCxL,IAAI,CAAC,UAAC0I,KAAK;MAAA,OAAK4C,MAAI,CAACvJ,qBAAqB,CAAC;QAAC2G,KAAK,EAALA;MAAK,CAAC,EAAE6C,OAAO,CAAC;IAAA,EAAC,CAC7DvL,IAAI,CAAC,YAAM;MACV;MACA,IAAImB,WAAW,CAACD,YAAY,EAAE;QAC5B;QACA,OAAOoK,MAAI,CAAC/M,cAAc,CAAC;UAACQ,YAAY,EAAEwM;QAAO,CAAC,CAAC,CAAClL,KAAK,CAAC,YAAM;UAC9DiL,MAAI,CAACxP,UAAU,GAAG,IAAI;UACtBwP,MAAI,CAACtK,MAAM,CAACuC,IAAI,CAAC,4CAA4C,CAAC;QAChE,CAAC,CAAC;MACJ;;MAEA;MACA,OAAOhE,QAAA,CAAA9E,OAAA,CAAQgJ,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC;EAER,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEgI,UAAU,WAAVA,UAAUA,CAAA,EAAoB;IAAA,IAAAC,OAAA;IAC5B,IAAMlP,OAAO,GAAG,IAAImP,uBAAc,CAAC,CAAC;IACpC,IAAI,CAAC5P,SAAS,CAAC6P,GAAG,CAAC,IAAI,CAACvP,KAAK,EAAEG,OAAO,CAAC;;IAEvC;IACA,IAAI,CAACqP,YAAY,CAAC,IAAI,CAACxP,KAAK,EAAE,eAAe,EAAE,YAAM;MACnDqP,OAAI,CAACjB,UAAU,CAAC,CAAC;IACnB,CAAC,CAAC;;IAEF;IACA;IACA,IAAI,CAACoB,YAAY,CAAC,IAAI,CAACxP,KAAK,EAAE,OAAO,EAAE,YAAM;MAC3C,IAAO+J,UAAU,GAAIsF,OAAI,CAACrP,KAAK,CAAC8E,WAAW,CAApCiF,UAAU;MACjB;MACA,IAAIA,UAAU,IAAIA,UAAU,CAACC,YAAY,EAAE;QACzCqF,OAAI,CAAClI,mBAAmB,CAAC,CAAC,CACvBxD,IAAI,CAAC,YAAM;UACVxD,OAAO,CAAC0K,OAAO,GAAG,IAAI;QACxB,CAAC,CAAC,CACD7G,KAAK,CAAC,UAACC,KAAK,EAAK;UAChBoL,OAAI,CAAC5P,UAAU,GAAG,IAAI;UACtB4P,OAAI,CAAC1K,MAAM,CAACV,KAAK,0EAAA/E,MAAA,CAC0D+E,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEyC,OAAO,CACzF,CAAC;QACH,CAAC,CAAC;MACN,CAAC,MAAM;QACL,IAAOrD,KAAK,GAAIgM,OAAI,CAACrP,KAAK,CAACuF,MAAM,CAA1BlC,KAAK;QAEZgM,OAAI,CAAC3J,qBAAqB,CAACrC,KAAK,GAAG;UAACA,KAAK,EAALA;QAAK,CAAC,GAAG9C,SAAS,CAAC,CAACyD,KAAK,CAAC,UAACC,KAAK,EAAK;UACvEoL,OAAI,CAAC5P,UAAU,GAAG,IAAI;UACtB4P,OAAI,CAAC1K,MAAM,CAACV,KAAK,6EAAA/E,MAAA,CAC6D+E,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEyC,OAAO,CAC5F,CAAC;QACH,CAAC,CAAC;MACJ;IACF,CAAC,CAAC;EACJ,CAAC;EAAA+I,OAAA;AACH,CAAC,CAAC;AACF;AAAA,IAAAC,QAAA,GAAAhR,OAAA,CAAAN,OAAA,GAEee,QAAQ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["type ServiceName = string;\ntype ClusterId = string;\nexport type ServiceGroup = 'discovery' | 'override' | 'preauth' | 'postauth' | 'signin';\n\nexport type ServiceHost = {\n host: string;\n ttl: number;\n priority: number;\n id: string;\n homeCluster?: boolean;\n};\n\nexport type ServiceUrl = {\n baseUrl: string;\n host: string;\n priority: number;\n failed?: boolean;\n};\n\nexport type ActiveServices = Record<ServiceName, ClusterId>;\nexport type Service = {\n id: ClusterId;\n serviceName: ServiceName;\n serviceUrls: Array<ServiceUrl>;\n};\nexport type QueryOptions = {\n email?: string;\n orgId?: string;\n userId?: string;\n timestamp?: number;\n};\n\nexport interface ServiceHostmap {\n activeServices: ActiveServices;\n services: Array<Service>;\n timestamp: string;\n orgId: string;\n format: string;\n}\n\nexport interface IServiceDetail {\n id: ClusterId;\n serviceName: ServiceName;\n serviceUrls: Array<ServiceUrl>;\n failHost(url: string): boolean;\n get(): string;\n}\n\nexport interface IServiceCatalog {\n serviceGroups: {\n discovery: Array<IServiceDetail>;\n override: Array<IServiceDetail>;\n preauth: Array<IServiceDetail>;\n postauth: Array<IServiceDetail>;\n signin: Array<IServiceDetail>;\n };\n status: {\n discovery: {ready: boolean; collecting: boolean};\n override: {ready: boolean; collecting: boolean};\n preauth: {ready: boolean; collecting: boolean};\n postauth: {ready: boolean; collecting: boolean};\n signin: {ready: boolean; collecting: boolean};\n };\n isReady: boolean;\n allowedDomains: string[];\n clean(): void;\n findClusterId(url: string): string | undefined;\n findServiceFromClusterId(params: {\n clusterId: ClusterId;\n serviceGroup?: ServiceGroup;\n }): {name: string; url: string} | undefined;\n findServiceDetailFromUrl(url: string): IServiceDetail | undefined;\n findAllowedDomain(url: string): string | undefined;\n get(clusterId: ClusterId, serviceGroup?: ServiceGroup): string | undefined;\n getAllowedDomains(): string[];\n markFailedServiceUrl(url: string): string | undefined;\n setAllowedDomains(allowedDomains: string[]): void;\n addAllowedDomains(newAllowedDomains: string[]): void;\n updateServiceGroups(serviceGroup: ServiceGroup, serviceDetails: Array<IServiceDetail>): void;\n waitForCatalog(serviceGroup: ServiceGroup, timeout?: number): Promise<void>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["type ServiceName = string;\ntype ClusterId = string;\nexport type ServiceGroup = 'discovery' | 'override' | 'preauth' | 'postauth' | 'signin';\n\nexport type ServiceHost = {\n host: string;\n ttl: number;\n priority: number;\n id: string;\n homeCluster?: boolean;\n};\n\nexport type ServiceUrl = {\n baseUrl: string;\n host: string;\n priority: number;\n failed?: boolean;\n};\n\nexport type ActiveServices = Record<ServiceName, ClusterId>;\nexport type Service = {\n id: ClusterId;\n serviceName: ServiceName;\n serviceUrls: Array<ServiceUrl>;\n};\nexport type QueryOptions = {\n email?: string;\n orgId?: string;\n userId?: string;\n timestamp?: number;\n};\n\nexport interface ServiceHostmap {\n activeServices: ActiveServices;\n services: Array<Service>;\n timestamp: string;\n orgId: string;\n format: string;\n}\n\nexport interface IServiceDetail {\n id: ClusterId;\n serviceName: ServiceName;\n serviceUrls: Array<ServiceUrl>;\n failHost(url: string): boolean;\n get(): string;\n}\n\nexport interface IServiceCatalog {\n serviceGroups: {\n discovery: Array<IServiceDetail>;\n override: Array<IServiceDetail>;\n preauth: Array<IServiceDetail>;\n postauth: Array<IServiceDetail>;\n signin: Array<IServiceDetail>;\n };\n status: {\n discovery: {ready: boolean; collecting: boolean};\n override: {ready: boolean; collecting: boolean};\n preauth: {ready: boolean; collecting: boolean};\n postauth: {ready: boolean; collecting: boolean};\n signin: {ready: boolean; collecting: boolean};\n };\n isReady: boolean;\n allowedDomains: string[];\n clean(): void;\n findClusterId(url: string): string | undefined;\n findServiceFromClusterId(params: {\n clusterId: ClusterId;\n serviceGroup?: ServiceGroup;\n }): {name: string; url: string} | undefined;\n findServiceDetailFromUrl(url: string): IServiceDetail | undefined;\n findAllowedDomain(url: string): string | undefined;\n get(clusterId: ClusterId, serviceGroup?: ServiceGroup): string | undefined;\n getAllowedDomains(): string[];\n markFailedServiceUrl(url: string): string | undefined;\n setAllowedDomains(allowedDomains: string[]): void;\n addAllowedDomains(newAllowedDomains: string[]): void;\n updateServiceGroups(serviceGroup: ServiceGroup, serviceDetails: Array<IServiceDetail>): void;\n waitForCatalog(serviceGroup: ServiceGroup, timeout?: number): Promise<void>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -52,7 +52,7 @@ var StatelessWebexPlugin = exports.default = (_class = /*#__PURE__*/function ()
52
52
  * @param {Array<mixed>} args
53
53
  * @returns {Promise}
54
54
  */
55
- (0, _createClass2.default)(StatelessWebexPlugin, [{
55
+ return (0, _createClass2.default)(StatelessWebexPlugin, [{
56
56
  key: "config",
57
57
  get:
58
58
  /**
@@ -108,14 +108,13 @@ var StatelessWebexPlugin = exports.default = (_class = /*#__PURE__*/function ()
108
108
  return (_this$webex2 = this.webex).upload.apply(_this$webex2, arguments);
109
109
  }
110
110
  }]);
111
- return StatelessWebexPlugin;
112
- }(), (_descriptor = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "ready", [_coreDecorators.readonly], {
111
+ }(), _descriptor = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "ready", [_coreDecorators.readonly], {
113
112
  configurable: true,
114
113
  enumerable: true,
115
114
  writable: true,
116
115
  initializer: function initializer() {
117
116
  return true;
118
117
  }
119
- })), _class);
118
+ }), _class);
120
119
  (0, _assign.default)(StatelessWebexPlugin.prototype, _ampersandEvents.default);
121
120
  //# sourceMappingURL=stateless-webex-plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_coreDecorators","require","_ampersandEvents","_interopRequireDefault","_class","_descriptor","webexs","_weakMap","default","StatelessWebexPlugin","exports","attrs","arguments","length","undefined","options","_classCallCheck2","_initializerDefineProperty2","webex","parent","Error","collection","set","_createClass2","key","get","namespace","getNamespace","toLowerCase","config","logger","value","request","_this$webex","apply","upload","_this$webex2","_applyDecoratedDescriptor2","prototype","readonly","configurable","enumerable","writable","initializer","_assign","AmpEvents"],"sources":["stateless-webex-plugin.js"],"sourcesContent":["import {readonly} from 'core-decorators';\nimport AmpEvents from 'ampersand-events';\n\n// hold onto weak references to parent' Webexs to help avoid retain cycles\nconst webexs = new WeakMap();\n\n/**\n * Base plugin class. Doesn't depend on Ampersand State\n */\nexport default class StatelessWebexPlugin {\n /**\n * The config for this plugin's namespace. If no namespace has been set\n * returns all of webex's config.\n * @type {Object}\n */\n get config() {\n let namespace = this.getNamespace ? this.getNamespace() : this.namespace;\n\n if (namespace) {\n namespace = namespace.toLowerCase();\n\n return this.webex.config[namespace];\n }\n\n return this.webex.config;\n }\n\n /**\n * A reference to the webex logger.\n * @type {Logger}\n */\n get logger() {\n return this.webex.logger;\n }\n\n /**\n * A reference to the main sdk instance\n * @type {WebexCore}\n */\n get webex() {\n return webexs.get(this);\n }\n\n @readonly\n /**\n * Mostly here for compatibility with legacy WebexPlugins.\n * StatelessWebexPlugins will never have a state other than ready, however, if\n * we implement stateful WebexPlugins as es6 classes, they may have the option\n * to have ready be false\n * @private\n * @type {boolean}\n */\n ready = true;\n\n /**\n * Constructor. One of attrs.webex or options.parent is required\n * @param {Object} attrs\n * @param {WebexCore} [attrs.webex]\n * @param {Object} options\n * @param {WebexCore} [options.parent]\n */\n constructor(attrs = {}, options = {}) {\n let webex = attrs.webex || options.parent;\n\n if (!webex) {\n throw new Error(\n 'One of `attrs.webex` or `options.parent` must be supplied when initializing a StatelessWebexPlugin'\n );\n }\n\n while (webex.parent || webex.collection) {\n webex = webex.parent || webex.collection;\n }\n webexs.set(this, webex);\n }\n\n /**\n * Proxies to {@link WebexPlugin#webex}'s `request()` method.\n * @see WebexCore#request\n * @param {Array<mixed>} args\n * @returns {Promise}\n */\n request(...args) {\n return this.webex.request(...args);\n }\n\n /**\n * Proxies to {@link WebexPlugin#webex}'s `upload()` method.\n * @see WebexCore#upload\n * @param {Array<mixed>} args\n * @returns {Promise}\n */\n upload(...args) {\n return this.webex.upload(...args);\n }\n}\n\nObject.assign(StatelessWebexPlugin.prototype, AmpEvents);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_coreDecorators","require","_ampersandEvents","_interopRequireDefault","_class","_descriptor","webexs","_weakMap","default","StatelessWebexPlugin","exports","attrs","arguments","length","undefined","options","_classCallCheck2","_initializerDefineProperty2","webex","parent","Error","collection","set","_createClass2","key","get","namespace","getNamespace","toLowerCase","config","logger","value","request","_this$webex","apply","upload","_this$webex2","_applyDecoratedDescriptor2","prototype","readonly","configurable","enumerable","writable","initializer","_assign","AmpEvents"],"sources":["stateless-webex-plugin.js"],"sourcesContent":["import {readonly} from 'core-decorators';\nimport AmpEvents from 'ampersand-events';\n\n// hold onto weak references to parent' Webexs to help avoid retain cycles\nconst webexs = new WeakMap();\n\n/**\n * Base plugin class. Doesn't depend on Ampersand State\n */\nexport default class StatelessWebexPlugin {\n /**\n * The config for this plugin's namespace. If no namespace has been set\n * returns all of webex's config.\n * @type {Object}\n */\n get config() {\n let namespace = this.getNamespace ? this.getNamespace() : this.namespace;\n\n if (namespace) {\n namespace = namespace.toLowerCase();\n\n return this.webex.config[namespace];\n }\n\n return this.webex.config;\n }\n\n /**\n * A reference to the webex logger.\n * @type {Logger}\n */\n get logger() {\n return this.webex.logger;\n }\n\n /**\n * A reference to the main sdk instance\n * @type {WebexCore}\n */\n get webex() {\n return webexs.get(this);\n }\n\n @readonly\n /**\n * Mostly here for compatibility with legacy WebexPlugins.\n * StatelessWebexPlugins will never have a state other than ready, however, if\n * we implement stateful WebexPlugins as es6 classes, they may have the option\n * to have ready be false\n * @private\n * @type {boolean}\n */\n ready = true;\n\n /**\n * Constructor. One of attrs.webex or options.parent is required\n * @param {Object} attrs\n * @param {WebexCore} [attrs.webex]\n * @param {Object} options\n * @param {WebexCore} [options.parent]\n */\n constructor(attrs = {}, options = {}) {\n let webex = attrs.webex || options.parent;\n\n if (!webex) {\n throw new Error(\n 'One of `attrs.webex` or `options.parent` must be supplied when initializing a StatelessWebexPlugin'\n );\n }\n\n while (webex.parent || webex.collection) {\n webex = webex.parent || webex.collection;\n }\n webexs.set(this, webex);\n }\n\n /**\n * Proxies to {@link WebexPlugin#webex}'s `request()` method.\n * @see WebexCore#request\n * @param {Array<mixed>} args\n * @returns {Promise}\n */\n request(...args) {\n return this.webex.request(...args);\n }\n\n /**\n * Proxies to {@link WebexPlugin#webex}'s `upload()` method.\n * @see WebexCore#upload\n * @param {Array<mixed>} args\n * @returns {Promise}\n */\n upload(...args) {\n return this.webex.upload(...args);\n }\n}\n\nObject.assign(StatelessWebexPlugin.prototype, AmpEvents);\n"],"mappings":"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","ignoreList":[]}