@webex/webex-core 3.10.0 → 3.11.0

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 (118) hide show
  1. package/dist/config.js +14 -0
  2. package/dist/config.js.map +1 -1
  3. package/dist/credentials-config.js.map +1 -1
  4. package/dist/index.js +1 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/interceptors/auth.js +6 -8
  7. package/dist/interceptors/auth.js.map +1 -1
  8. package/dist/interceptors/default-options.js +6 -8
  9. package/dist/interceptors/default-options.js.map +1 -1
  10. package/dist/interceptors/embargo.js +6 -8
  11. package/dist/interceptors/embargo.js.map +1 -1
  12. package/dist/interceptors/network-timing.js +6 -8
  13. package/dist/interceptors/network-timing.js.map +1 -1
  14. package/dist/interceptors/payload-transformer.js +6 -8
  15. package/dist/interceptors/payload-transformer.js.map +1 -1
  16. package/dist/interceptors/proxy.js +7 -10
  17. package/dist/interceptors/proxy.js.map +1 -1
  18. package/dist/interceptors/rate-limit.js +7 -10
  19. package/dist/interceptors/rate-limit.js.map +1 -1
  20. package/dist/interceptors/redirect.js +9 -8
  21. package/dist/interceptors/redirect.js.map +1 -1
  22. package/dist/interceptors/request-event.js +6 -8
  23. package/dist/interceptors/request-event.js.map +1 -1
  24. package/dist/interceptors/request-logger.js +6 -8
  25. package/dist/interceptors/request-logger.js.map +1 -1
  26. package/dist/interceptors/request-timing.js +6 -8
  27. package/dist/interceptors/request-timing.js.map +1 -1
  28. package/dist/interceptors/response-logger.js +6 -8
  29. package/dist/interceptors/response-logger.js.map +1 -1
  30. package/dist/interceptors/user-agent.js +8 -11
  31. package/dist/interceptors/user-agent.js.map +1 -1
  32. package/dist/interceptors/webex-tracking-id.js +6 -8
  33. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  34. package/dist/interceptors/webex-user-agent.js +7 -10
  35. package/dist/interceptors/webex-user-agent.js.map +1 -1
  36. package/dist/lib/batcher.js +1 -1
  37. package/dist/lib/batcher.js.map +1 -1
  38. package/dist/lib/constants.js.map +1 -1
  39. package/dist/lib/credentials/credentials.js +4 -6
  40. package/dist/lib/credentials/credentials.js.map +1 -1
  41. package/dist/lib/credentials/grant-errors.js +18 -26
  42. package/dist/lib/credentials/grant-errors.js.map +1 -1
  43. package/dist/lib/credentials/index.js.map +1 -1
  44. package/dist/lib/credentials/scope.js.map +1 -1
  45. package/dist/lib/credentials/token-collection.js.map +1 -1
  46. package/dist/lib/credentials/token.js +5 -5
  47. package/dist/lib/credentials/token.js.map +1 -1
  48. package/dist/lib/interceptors/hostmap.js +6 -8
  49. package/dist/lib/interceptors/hostmap.js.map +1 -1
  50. package/dist/lib/interceptors/server-error.js +6 -8
  51. package/dist/lib/interceptors/server-error.js.map +1 -1
  52. package/dist/lib/interceptors/service.js +6 -8
  53. package/dist/lib/interceptors/service.js.map +1 -1
  54. package/dist/lib/metrics.js.map +1 -1
  55. package/dist/lib/page.js +5 -6
  56. package/dist/lib/page.js.map +1 -1
  57. package/dist/lib/services/index.js.map +1 -1
  58. package/dist/lib/services/service-catalog.js +3 -3
  59. package/dist/lib/services/service-catalog.js.map +1 -1
  60. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  61. package/dist/lib/services/service-host.js +1 -2
  62. package/dist/lib/services/service-host.js.map +1 -1
  63. package/dist/lib/services/service-registry.js +1 -2
  64. package/dist/lib/services/service-registry.js.map +1 -1
  65. package/dist/lib/services/service-state.js +1 -2
  66. package/dist/lib/services/service-state.js.map +1 -1
  67. package/dist/lib/services/service-url.js +11 -1
  68. package/dist/lib/services/service-url.js.map +1 -1
  69. package/dist/lib/services/services.js +485 -127
  70. package/dist/lib/services/services.js.map +1 -1
  71. package/dist/lib/services-v2/index.js.map +1 -1
  72. package/dist/lib/services-v2/metrics.js.map +1 -1
  73. package/dist/lib/services-v2/service-catalog.js +7 -7
  74. package/dist/lib/services-v2/service-catalog.js.map +1 -1
  75. package/dist/lib/services-v2/service-detail.js.map +1 -1
  76. package/dist/lib/services-v2/service-fed-ramp.js.map +1 -1
  77. package/dist/lib/services-v2/services-v2.js +379 -51
  78. package/dist/lib/services-v2/services-v2.js.map +1 -1
  79. package/dist/lib/services-v2/types.js.map +1 -1
  80. package/dist/lib/stateless-webex-plugin.js +3 -4
  81. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  82. package/dist/lib/storage/decorators.js.map +1 -1
  83. package/dist/lib/storage/errors.js +7 -9
  84. package/dist/lib/storage/errors.js.map +1 -1
  85. package/dist/lib/storage/index.js.map +1 -1
  86. package/dist/lib/storage/make-webex-plugin-store.js +14 -5
  87. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  88. package/dist/lib/storage/make-webex-store.js +13 -5
  89. package/dist/lib/storage/make-webex-store.js.map +1 -1
  90. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  91. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  92. package/dist/lib/webex-http-error.js +8 -11
  93. package/dist/lib/webex-http-error.js.map +1 -1
  94. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  95. package/dist/lib/webex-plugin.js.map +1 -1
  96. package/dist/plugins/logger.js +1 -1
  97. package/dist/plugins/logger.js.map +1 -1
  98. package/dist/webex-core.js +11 -11
  99. package/dist/webex-core.js.map +1 -1
  100. package/dist/webex-internal-core.js.map +1 -1
  101. package/package.json +13 -13
  102. package/src/config.js +15 -0
  103. package/src/interceptors/redirect.js +4 -0
  104. package/src/lib/services/service-url.js +9 -1
  105. package/src/lib/services/services.js +315 -7
  106. package/src/lib/services-v2/index.ts +0 -1
  107. package/src/lib/services-v2/service-catalog.ts +4 -4
  108. package/src/lib/services-v2/services-v2.ts +307 -7
  109. package/src/lib/services-v2/types.ts +13 -0
  110. package/test/fixtures/host-catalog-v2.ts +1 -1
  111. package/test/integration/spec/services/service-catalog.js +10 -4
  112. package/test/integration/spec/services/services.js +65 -9
  113. package/test/integration/spec/services-v2/service-catalog.js +2 -2
  114. package/test/integration/spec/services-v2/services-v2.js +56 -6
  115. package/test/unit/spec/interceptors/redirect.js +98 -0
  116. package/test/unit/spec/services/service-url.js +110 -0
  117. package/test/unit/spec/services/services.js +411 -2
  118. package/test/unit/spec/services-v2/services-v2.ts +316 -0
@@ -1 +1 @@
1
- {"version":3,"names":["_sha","_interopRequireDefault","require","_lodash","_webexPlugin","_metrics","_serviceCatalog","_serviceRegistry","_serviceState","_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","registries","_weakMap","states","props","validateDomains","initFailed","_catalogs","_serviceUrls","_hostCatalog","getRegistry","get","webex","getState","_getCatalog","name","priorityHost","serviceGroup","catalog","hasService","serviceName","hasAllowedDomains","getAllowedDomains","list","markFailedUrl","url","noPriorityHosts","_updateServiceUrls","serviceUrls","_updateHostCatalog","hostCatalog","updateServices","_this","_ref","undefined","from","query","token","forceRefresh","formattedQuery","status","collecting","waitForCatalog","queryKey","_keys","includes","_promise","reject","Error","email","emailhash","sha256","toLowerCase","toString","_fetchNewServiceHostmap","then","serviceHostMap","updateServiceUrls","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","getMeetingPreferences","_this3","request","method","service","resource","res","err","fetchClientRegionInfo","_this4","services","discovery","sqdiscovery","addAuthHeader","headers","timeout","_ref5","_this5","countryCode","timezone","clientRegionInfo","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","updateCatalog","hostMap","_formatReceivedHostmap","mode","_ref7","_this$list","idbroker","identity","_this$webex$config$cr","authorizationString","authorizeUrl","replace","setConfig","supertoken","access_token","postauth","ready","preauth","initServiceCatalogs","waitForService","_ref8","_this6","_ref8$timeout","fetchFromServiceUrl","servicesNotNeedValidation","find","resolve","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","replaceHostFromHostmap","URL","host","newHost","serviceHostmap","extractId","entry","id","split","formattedHostmap","serviceLinks","_formattedHost$hosts","serviceUrl","matchingCatalogEntry","formattedHost","defaultUrl","defaultHost","hosts","serviceId","homeCluster","otherHosts","entryHost","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref9","_ref9$cluster","cluster","clusterId","_ref10","findServiceUrlFromUrl","isServiceUrl","isAllowedDomainUrl","findAllowedDomain","convertUrlToPriorityHostUrl","data","_this7","_ref11","qs","format","timestamp","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref12","initConfig","_this$webex$config","fedramp","fedRampServices","formattedDiscoveryServices","key","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this8","getOrgId","orgId","warn","initialize","_this9","ServiceCatalog","registry","ServiceRegistry","state","ServiceState","set","listenToOnce","version","_default"],"sources":["services.js"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {union, forEach} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from '../metrics';\nimport ServiceCatalog from './service-catalog';\nimport ServiceRegistry from './service-registry';\nimport ServiceState from './service-state';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from '../constants';\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 /**\n * The {@link WeakMap} of {@link ServiceRegistry} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceRegistry>}\n * @private\n * @memberof Services\n */\n registries: new WeakMap(),\n\n /**\n * The {@link WeakMap} of {@link ServiceState} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceState>}\n * @private\n * @memberof Services\n */\n states: new WeakMap(),\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n _catalogs: new WeakMap(),\n\n _serviceUrls: null,\n\n _hostCatalog: null,\n\n /**\n * Get the registry associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceRegistry} - The associated {@link ServiceRegistry}.\n */\n getRegistry() {\n return this.registries.get(this.webex);\n },\n\n /**\n * Get the state associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceState} - The associated {@link ServiceState}.\n */\n getState() {\n return this.states.get(this.webex);\n },\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {ServiceCatalog}\n */\n _getCatalog() {\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 {boolean} [priorityHost]\n * @param {string} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name, priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.get(name, priorityHost, serviceGroup);\n },\n\n /**\n * Determine if the catalog contains a specific service\n *\n * @param {string} serviceName - The service name to validate.\n * @returns {boolean} - True if the service exists.\n */\n hasService(serviceName) {\n return !!this.get(serviceName);\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() {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Generate a service catalog as an object from\n * the associated instance catalog.\n * @param {boolean} [priorityHost] - use highest priority host if set to `true`\n * @param {string} [serviceGroup]\n * @returns {Record<string, string>}\n */\n list(priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.list(priorityHost, serviceGroup);\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceUrl` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceUrls` host array,\n * or the `ServiceUrls` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @param {boolean} noPriorityHosts\n * @returns {string}\n */\n markFailedUrl(url, noPriorityHosts) {\n const catalog = this._getCatalog();\n\n return catalog.markFailedUrl(url, noPriorityHosts);\n },\n\n /**\n * saves all the services from the pre and post catalog service\n * @param {Object} serviceUrls\n * @returns {void}\n */\n _updateServiceUrls(serviceUrls) {\n this._serviceUrls = {...this._serviceUrls, ...serviceUrls};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Object} hostCatalog\n * @returns {void}\n */\n _updateHostCatalog(hostCatalog) {\n this._hostCatalog = {...this._hostCatalog, ...hostCatalog};\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({from, query, token, forceRefresh} = {}) {\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\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) => {\n catalog.updateServiceUrls(serviceGroup, serviceHostMap);\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', true);\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 /**\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 {string} serviceGroup - preauth, signin, postauth\n * @param {object} hostMap - The new hostmap to update the service group with.\n * @returns {Promise<void>}\n */\n updateCatalog(serviceGroup, hostMap) {\n const catalog = this._getCatalog();\n\n const serviceHostMap = this._formatReceivedHostmap(hostMap);\n\n return catalog.updateServiceUrls(serviceGroup, serviceHostMap);\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, 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({email, token, forceRefresh} = {}) {\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() {\n const {idbroker, identity} = this.list(true);\n\n if (idbroker && identity) {\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 : `${idbroker.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbroker.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identity.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 {string} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup, timeout) {\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({name, timeout = 5, url}) {\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 return Promise.resolve(this._serviceUrls[name]);\n }\n\n const priorityUrl = this.get(name, true);\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, true);\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) {\n const url = new URL(uri);\n const hostCatalog = this._hostCatalog;\n\n if (!hostCatalog) {\n return uri;\n }\n\n const host = hostCatalog[url.host];\n\n if (host && host[0]) {\n const newHost = host[0].host;\n\n url.host = newHost;\n\n return url.toString();\n }\n\n return uri;\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * catalog endpoint.\n * @param {object} serviceHostmap\n * @returns {object}\n */\n _formatReceivedHostmap(serviceHostmap) {\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n const extractId = (entry) => entry.id.split(':')[3];\n\n const formattedHostmap = [];\n\n // for each of the services in the serviceLinks, find the matching host in the catalog\n Object.keys(serviceHostmap.serviceLinks).forEach((serviceName) => {\n const serviceUrl = serviceHostmap.serviceLinks[serviceName];\n\n let host;\n try {\n host = new URL(serviceUrl).host;\n } catch (e) {\n return;\n }\n\n const matchingCatalogEntry = serviceHostmap.hostCatalog[host];\n\n const formattedHost = {\n name: serviceName,\n defaultUrl: serviceUrl,\n defaultHost: host,\n hosts: [],\n };\n\n formattedHostmap.push(formattedHost);\n\n // If the catalog does not have any hosts we will be unable to find the service ID\n // so can't search for other hosts\n if (!matchingCatalogEntry || !matchingCatalogEntry[0]) {\n return;\n }\n\n const serviceId = extractId(matchingCatalogEntry[0]);\n\n forEach(matchingCatalogEntry, (entry) => {\n // The ids for all hosts within a hostCatalog entry should be the same\n // but for safety, only add host entries that have the same id as the first one\n if (extractId(entry) === serviceId) {\n formattedHost.hosts.push({\n ...entry,\n homeCluster: true,\n });\n }\n });\n\n const otherHosts = [];\n\n // find the services in the host catalog that have the same id\n // and add them to the otherHosts\n forEach(serviceHostmap.hostCatalog, (entry) => {\n // exclude the matching catalog entry as we have already added that\n if (entry === matchingCatalogEntry) {\n return;\n }\n\n forEach(entry, (entryHost) => {\n // only add hosts that have the correct id\n if (extractId(entryHost) === serviceId) {\n otherHosts.push({\n ...entryHost,\n homeCluster: false,\n });\n }\n });\n });\n\n formattedHost.hosts.push(...otherHosts);\n });\n\n // update all the service urls in the host catalog\n\n this._updateServiceUrls(serviceHostmap.serviceLinks);\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string} - Cluster ID of url provided\n */\n getClusterId(url) {\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 {boolean} [params.priorityHost] - returns priority host url if true\n * @param {string} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n getServiceFromClusterId(params) {\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'} = {}) {\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 priority url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = '') {\n const service = this._getCatalog().findServiceUrlFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n return {\n name: service.name,\n priorityUrl: service.get(true),\n defaultUrl: service.get(),\n };\n },\n\n /**\n * Verify that a provided url exists in the service\n * catalog.\n * @param {string} url\n * @returns {boolean} - true if exists, false otherwise\n */\n isServiceUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findServiceUrlFromUrl(url);\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) {\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 = '') {\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({from, query, token, forceRefresh} = {}) {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...query, format: 'hostmap'};\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 };\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() {\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 name: key,\n defaultUrl: services.discovery[key],\n }));\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceUrls('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 name: key,\n defaultUrl: services.override[key],\n }));\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceUrls('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 *\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs() {\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}))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog.\n return this.updateServices().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() {\n const catalog = new ServiceCatalog();\n const registry = new ServiceRegistry();\n const state = new ServiceState();\n\n this._catalogs.set(this.webex, catalog);\n this.registries.set(this.webex, registry);\n this.states.set(this.webex, state);\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","_serviceRegistry","_serviceState","_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","CATALOG_CACHE_KEY_V1","CATALOG_TTL_MS","Services","WebexPlugin","extend","namespace","registries","_weakMap","states","props","validateDomains","initFailed","_catalogs","_serviceUrls","_hostCatalog","_activeServices","getRegistry","get","webex","getState","_getCatalog","_getLocalStorageSafe","window","localStorage","getIntendedPreauthSelection","currentOrgId","_this$webex$credentia","credentials","canAuthorize","selectionType","selectionValue","emailConfig","config","email","trim","sha256","toLowerCase","toString","name","priorityHost","serviceGroup","catalog","hasService","serviceName","hasAllowedDomains","getAllowedDomains","list","markFailedUrl","url","noPriorityHosts","getMobiusClusters","logger","info","clusters","hostCatalog","_entries","_ref","_ref2","_slicedToArray2","host","entries","entry","id","endsWith","withHost","find","c","isValidHost","_hostCatalog$host","_updateActiveServices","activeServices","_updateServiceUrls","serviceUrls","_updateHostCatalog","updateServices","_arguments","_this","_asyncToGenerator2","_regenerator","mark","_callee","_ref3","from","query","token","forceRefresh","formattedQuery","queryKey","_queryKey","_t","wrap","_context","prev","next","undefined","abrupt","status","collecting","waitForCatalog","_keys","includes","_promise","reject","Error","emailhash","_fetchNewServiceHostmap","then","serviceHostMap","formattedServiceHostMap","_formatReceivedHostmap","selectionMeta","key","_cacheCatalog","updateServiceUrls","updateCredentialsConfig","catch","error","stop","validateUser","_ref4","_this2","_ref4$reqId","reqId","_ref4$forceRefresh","_ref4$activationOptio","activationOptions","preloginUserId","getUserToken","sendUserActivation","userObj","activated","exists","details","user","_this$webex$credentia2","client_id","client_secret","collectPreauthCatalog","idbrokerService","getClientToken","uri","scope","tokenObj","collectSigninCatalog","rto","all","_ref5","_ref6","response","statusCode","responseText","body","message","getMeetingPreferences","_this3","request","method","service","resource","res","err","fetchClientRegionInfo","_this4","services","discovery","sqdiscovery","addAuthHeader","headers","timeout","_ref7","_this5","countryCode","timezone","clientRegionInfo","_this5$webex$config$s","useUserOnboarding","useUserOnboardingServiceForActivations","accept","authorization","timeZone","shouldRefreshAccessToken","_ref8","updateCatalog","hostMap","mode","_ref9","_this$list","idbroker","identity","_this$webex$config$cr","authorizationString","authorizeUrl","replace","setConfig","supertoken","access_token","postauth","ready","preauth","initServiceCatalogs","waitForService","_ref0","_this6","_ref0$timeout","fetchFromServiceUrl","servicesNotNeedValidation","resolve","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","replaceHostFromHostmap","URL","newHost","serviceHostmap","extractId","split","formattedHostmap","serviceLinks","_formattedHost$hosts","serviceUrl","matchingCatalogEntry","formattedHost","defaultUrl","defaultHost","hosts","serviceId","homeCluster","otherHosts","entryHost","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref1","_ref1$cluster","cluster","clusterId","_ref10","findServiceUrlFromUrl","isServiceUrl","isAllowedDomainUrl","findAllowedDomain","convertUrlToPriorityHostUrl","data","_this7","_ref11","qs","format","timestamp","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref12","meta","_this8","_callee2","current","orgId","_this8$webex$config","_this8$webex$config$c","_this8$webex","_this8$webex$config2","_this8$webex2","_this8$webex2$config","_this8$webex2$config$","_this8$webex2$config$2","_ls","cachedJson","_current","fedramp","u2cDiscoveryUrl","updated","ls","_t2","_context2","calling","cacheU2C","getItem","JSON","parse","getOrgId","u2c","_now","setItem","_stringify","warn","_loadCatalogFromCache","_this9","_callee3","_this9$webex$config","_this9$webex$config$c","_this9$webex$config2","_this9$webex$config3","_this9$webex$config3$","_this9$webex$config3$2","cached","cachedAt","_this9$webex$credenti","currentEnv","sameEnv","groups","_t3","_t4","_context3","Number","clearCatalogCache","cachedGroup","intended","matches","formatted","removeItem","initConfig","_this$webex$config","fedRampServices","formattedDiscoveryServices","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this0","initialize","_this1","ServiceCatalog","registry","ServiceRegistry","state","ServiceState","set","listenToOnce","_callee4","cachedCatalog","_context4","sent","version","_default"],"sources":["services.js"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {union, forEach} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from '../metrics';\nimport ServiceCatalog from './service-catalog';\nimport ServiceRegistry from './service-registry';\nimport ServiceState from './service-state';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from '../constants';\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}`;\nconst CATALOG_CACHE_KEY_V1 = 'services.v1.u2cHostMap';\nconst CATALOG_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n /**\n * The {@link WeakMap} of {@link ServiceRegistry} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceRegistry>}\n * @private\n * @memberof Services\n */\n registries: new WeakMap(),\n\n /**\n * The {@link WeakMap} of {@link ServiceState} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceState>}\n * @private\n * @memberof Services\n */\n states: new WeakMap(),\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n _catalogs: new WeakMap(),\n\n _serviceUrls: null,\n\n _hostCatalog: null,\n\n // Map of active cluster ids per service, e.g. { wdm: 'urn:TEAM:ap-southeast-2_m:wdm' }\n _activeServices: {},\n\n /**\n * Get the registry associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceRegistry} - The associated {@link ServiceRegistry}.\n */\n getRegistry() {\n return this.registries.get(this.webex);\n },\n\n /**\n * Get the state associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceState} - The associated {@link ServiceState}.\n */\n getState() {\n return this.states.get(this.webex);\n },\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {ServiceCatalog}\n */\n _getCatalog() {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Safely access localStorage if available; returns the Storage or null.\n * @returns {Storage|null}\n */\n _getLocalStorageSafe() {\n if (typeof window !== 'undefined' && window.localStorage) {\n return window.localStorage;\n }\n\n return null;\n },\n\n /**\n * Determine the intended preauth selection based on the current context.\n * @param {string|undefined} currentOrgId\n * @returns {{selectionType: string, selectionValue: string}}\n */\n getIntendedPreauthSelection(currentOrgId) {\n if (this.webex.credentials?.canAuthorize) {\n if (currentOrgId) {\n return {\n selectionType: 'orgId',\n selectionValue: currentOrgId,\n };\n }\n }\n\n const emailConfig = this.webex.config && this.webex.config.email;\n\n if (typeof emailConfig === 'string' && emailConfig.trim()) {\n return {\n selectionType: 'emailhash',\n selectionValue: sha256(emailConfig.toLowerCase()).toString(),\n };\n }\n\n // fall back to proximity mode when no orgId or email available\n return {\n selectionType: 'mode',\n selectionValue: 'DEFAULT_BY_PROXIMITY',\n };\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 {boolean} [priorityHost]\n * @param {string} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name, priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.get(name, priorityHost, serviceGroup);\n },\n\n /**\n * Determine if the catalog contains a specific service\n *\n * @param {string} serviceName - The service name to validate.\n * @returns {boolean} - True if the service exists.\n */\n hasService(serviceName) {\n return !!this.get(serviceName);\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() {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Generate a service catalog as an object from\n * the associated instance catalog.\n * @param {boolean} [priorityHost] - use highest priority host if set to `true`\n * @param {string} [serviceGroup]\n * @returns {Record<string, string>}\n */\n list(priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.list(priorityHost, serviceGroup);\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceUrl` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceUrls` host array,\n * or the `ServiceUrls` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @param {boolean} noPriorityHosts\n * @returns {string}\n */\n markFailedUrl(url, noPriorityHosts) {\n const catalog = this._getCatalog();\n\n return catalog.markFailedUrl(url, noPriorityHosts);\n },\n\n /**\n * Get all Mobius cluster host entries from the legacy host catalog.\n * @returns {Array<{host: string, id: string, ttl: number, priority: number}>}\n */\n getMobiusClusters() {\n this.logger.info('services: fetching mobius clusters');\n const clusters = [];\n const hostCatalog = this._hostCatalog || {};\n\n Object.entries(hostCatalog).forEach(([host, entries]) => {\n (entries || []).forEach((entry) => {\n if (typeof entry?.id === 'string' && entry.id.endsWith(':mobius')) {\n // Ensure host is included; prefer entry.host if present, else use the map key\n const withHost = entry.host ? entry.host : host;\n // Skip duplicates for the same host\n if (!clusters.find((c) => c && c.host === withHost)) {\n clusters.push({...entry, host: withHost});\n }\n }\n });\n });\n\n return clusters;\n },\n\n /**\n * Check is valid host from the legacy host catalog.\n * @param {string} host\n * @returns {Boolean}\n */\n isValidHost(host) {\n const hostCatalog = this._hostCatalog || {};\n\n return !!hostCatalog[host]?.length;\n },\n /**\n * Merge provided active cluster mappings into current state.\n * @param {Record<string,string>} activeServices\n * @returns {void}\n */\n _updateActiveServices(activeServices) {\n this._activeServices = {...this._activeServices, ...activeServices};\n },\n\n /**\n * saves all the services from the pre and post catalog service\n * @param {Object} serviceUrls\n * @returns {void}\n */\n _updateServiceUrls(serviceUrls) {\n this._serviceUrls = {...this._serviceUrls, ...serviceUrls};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Object} hostCatalog\n * @returns {void}\n */\n _updateHostCatalog(hostCatalog) {\n this._hostCatalog = {...this._hostCatalog, ...hostCatalog};\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 async updateServices({from, query, token, forceRefresh} = {}) {\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\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) => {\n const formattedServiceHostMap = this._formatReceivedHostmap(serviceHostMap);\n // Build selection metadata for caching discrimination\n let selectionMeta;\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const key = formattedQuery && Object.keys(formattedQuery || {})[0];\n if (key) {\n selectionMeta = {\n selectionType: key,\n selectionValue: formattedQuery[key],\n };\n }\n }\n this._cacheCatalog(serviceGroup, serviceHostMap, selectionMeta);\n catalog.updateServiceUrls(serviceGroup, formattedServiceHostMap);\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', true);\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 /**\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.\n // Use user-onboarding service if configured, otherwise use license service.\n const useUserOnboarding =\n this.webex.config.services?.useUserOnboardingServiceForActivations;\n\n return this.request({\n service: useUserOnboarding ? 'user-onboarding' : 'license',\n resource: useUserOnboarding ? 'api/v1/users/activations' : '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 {string} serviceGroup - preauth, signin, postauth\n * @param {object} hostMap - The new hostmap to update the service group with.\n * @returns {Promise<void>}\n */\n updateCatalog(serviceGroup, hostMap) {\n const catalog = this._getCatalog();\n\n const serviceHostMap = this._formatReceivedHostmap(hostMap);\n\n return catalog.updateServiceUrls(serviceGroup, serviceHostMap);\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, 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({email, token, forceRefresh} = {}) {\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() {\n const {idbroker, identity} = this.list(true);\n\n if (idbroker && identity) {\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 : `${idbroker.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbroker.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identity.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 {string} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup, timeout) {\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({name, timeout = 5, url}) {\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 return Promise.resolve(this._serviceUrls[name]);\n }\n\n const priorityUrl = this.get(name, true);\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, true);\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) {\n const url = new URL(uri);\n const hostCatalog = this._hostCatalog;\n\n if (!hostCatalog) {\n return uri;\n }\n\n const host = hostCatalog[url.host];\n\n if (host && host[0]) {\n const newHost = host[0].host;\n\n url.host = newHost;\n\n return url.toString();\n }\n\n return uri;\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * catalog endpoint.\n * @param {object} serviceHostmap\n * @returns {object}\n */\n _formatReceivedHostmap(serviceHostmap) {\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n const extractId = (entry) => entry.id.split(':')[3];\n\n const formattedHostmap = [];\n\n // for each of the services in the serviceLinks, find the matching host in the catalog\n Object.keys(serviceHostmap.serviceLinks).forEach((serviceName) => {\n const serviceUrl = serviceHostmap.serviceLinks[serviceName];\n\n let host;\n try {\n host = new URL(serviceUrl).host;\n } catch (e) {\n return;\n }\n\n const matchingCatalogEntry = serviceHostmap.hostCatalog[host];\n\n const formattedHost = {\n name: serviceName,\n defaultUrl: serviceUrl,\n defaultHost: host,\n hosts: [],\n };\n\n formattedHostmap.push(formattedHost);\n\n // If the catalog does not have any hosts we will be unable to find the service ID\n // so can't search for other hosts\n if (!matchingCatalogEntry || !matchingCatalogEntry[0]) {\n return;\n }\n\n const serviceId = extractId(matchingCatalogEntry[0]);\n\n forEach(matchingCatalogEntry, (entry) => {\n // The ids for all hosts within a hostCatalog entry should be the same\n // but for safety, only add host entries that have the same id as the first one\n if (extractId(entry) === serviceId) {\n formattedHost.hosts.push({\n ...entry,\n homeCluster: true,\n });\n }\n });\n\n const otherHosts = [];\n\n // find the services in the host catalog that have the same id\n // and add them to the otherHosts\n forEach(serviceHostmap.hostCatalog, (entry) => {\n // exclude the matching catalog entry as we have already added that\n if (entry === matchingCatalogEntry) {\n return;\n }\n\n forEach(entry, (entryHost) => {\n // only add hosts that have the correct id\n if (extractId(entryHost) === serviceId) {\n otherHosts.push({\n ...entryHost,\n homeCluster: false,\n });\n }\n });\n });\n\n formattedHost.hosts.push(...otherHosts);\n });\n\n // update all the service urls in the host catalog\n\n this._updateServiceUrls(serviceHostmap.serviceLinks);\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string} - Cluster ID of url provided\n */\n getClusterId(url) {\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 {boolean} [params.priorityHost] - returns priority host url if true\n * @param {string} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n getServiceFromClusterId(params) {\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'} = {}) {\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 priority url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = '') {\n const service = this._getCatalog().findServiceUrlFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n return {\n name: service.name,\n priorityUrl: service.get(true),\n defaultUrl: service.get(),\n };\n },\n\n /**\n * Verify that a provided url exists in the service\n * catalog.\n * @param {string} url\n * @returns {boolean} - true if exists, false otherwise\n */\n isServiceUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findServiceUrlFromUrl(url);\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) {\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 = '') {\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({from, query, token, forceRefresh} = {}) {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...query, format: 'hostmap'};\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 };\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}) => body);\n },\n\n /**\n * Cache the catalog in the bounded storage.\n * @param {string} serviceGroup - preauth, signin, postauth\n * @param {object} hostMap - The hostmap to cache\n * @param {object} [meta] - Optional selection metadata used to validate cache reuse\n * @returns {Promise<void>}\n *\n */\n async _cacheCatalog(serviceGroup, hostMap, meta) {\n let current = {};\n let orgId;\n try {\n // Respect calling.cacheU2C toggle; if disabled, skip writing cache\n if (!this.webex.config?.calling?.cacheU2C) {\n this.logger.info(`services: skipping cache write for ${serviceGroup} as per the config`);\n\n return;\n }\n\n // Persist to localStorage to survive browser refresh\n try {\n const ls = this._getLocalStorageSafe();\n const cachedJson = ls ? ls.getItem(CATALOG_CACHE_KEY_V1) : null;\n current = cachedJson ? JSON.parse(cachedJson) : {};\n } catch (e) {\n current = {};\n }\n\n try {\n const {credentials} = this.webex;\n orgId = credentials.getOrgId();\n } catch (e) {\n orgId = current.orgId;\n }\n\n // Capture environment fingerprint to invalidate cache across env changes\n let {env} = current;\n const fedramp = !!this.webex?.config?.fedramp;\n const u2cDiscoveryUrl = this.webex?.config?.services?.discovery?.u2c;\n env = {fedramp, u2cDiscoveryUrl};\n\n const updated = {\n ...current,\n orgId: orgId || current.orgId,\n env: env || current.env,\n // When selection meta is provided, store as an object; otherwise keep legacy shape\n [serviceGroup]: meta ? {hostMap, meta} : hostMap,\n cachedAt: Date.now(),\n };\n\n const ls = this._getLocalStorageSafe();\n if (ls) {\n ls.setItem(CATALOG_CACHE_KEY_V1, JSON.stringify(updated));\n }\n } catch (error) {\n this.logger.warn('services: error caching catalog', error);\n }\n },\n\n /**\n * Load the catalog from cache and hydrate the in-memory ServiceCatalog.\n * @returns {Promise<boolean>} true if cache was loaded, false otherwise\n */\n async _loadCatalogFromCache() {\n let currentOrgId;\n try {\n // Respect calling.cacheU2C toggle; if disabled, skip using cache\n if (!this.webex.config?.calling?.cacheU2C) {\n this.logger.info('services: skipping cache warm-up as per the cache config');\n\n return false;\n }\n\n const ls = this._getLocalStorageSafe();\n if (!ls) {\n this.logger.info('services: skipping cache warm-up as no localStorage is available');\n\n return false;\n }\n const cachedJson = ls.getItem(CATALOG_CACHE_KEY_V1);\n const cached = cachedJson ? JSON.parse(cachedJson) : undefined;\n if (!cached) {\n return false;\n }\n // TTL enforcement: clear if older than 24 hours\n const cachedAt = Number(cached.cachedAt) || 0;\n if (!cachedAt || Date.now() - cachedAt > CATALOG_TTL_MS) {\n this.clearCatalogCache();\n\n return false;\n }\n\n // If authorized, ensure cached org matches\n try {\n if (this.webex.credentials?.canAuthorize) {\n const {credentials} = this.webex;\n currentOrgId = credentials.getOrgId();\n if (cached.orgId && cached.orgId !== currentOrgId) {\n return false;\n }\n }\n } catch (e) {\n this.logger.warn('services: error checking orgId', e);\n }\n\n // Ensure cached environment matches current environment\n\n const fedramp = !!this.webex.config?.fedramp;\n const u2cDiscoveryUrl = this.webex.config?.services?.discovery?.u2c;\n const currentEnv = {fedramp, u2cDiscoveryUrl};\n if (cached.env) {\n const sameEnv =\n cached.env.fedramp === currentEnv.fedramp &&\n cached.env.u2cDiscoveryUrl === currentEnv.u2cDiscoveryUrl;\n if (!sameEnv) {\n this.logger.info('services: skipping cache warm due to environment mismatch');\n\n return false;\n }\n }\n\n const catalog = this._getCatalog();\n\n // Apply any cached groups (with preauth selection validation if available)\n const groups = ['preauth', 'signin', 'postauth'];\n groups.forEach((serviceGroup) => {\n const cachedGroup = cached[serviceGroup];\n if (!cachedGroup) {\n return;\n }\n\n // Support legacy (hostMap) and new ({hostMap, meta}) shapes\n const hostMap = cachedGroup && cachedGroup.hostMap ? cachedGroup.hostMap : cachedGroup;\n const meta = cachedGroup?.meta;\n\n if (serviceGroup === 'preauth' && meta) {\n // For proximity-based selection, always fetch fresh to respect IP/region changes\n if (meta.selectionType === 'mode') {\n this.logger.info('services: skipping preauth cache warm for proximity mode');\n\n return;\n }\n\n const intended = this.getIntendedPreauthSelection(currentOrgId);\n const matches =\n intended &&\n intended.selectionType === meta.selectionType &&\n intended.selectionValue === meta.selectionValue;\n\n if (!matches) {\n this.logger.info('services: skipping preauth cache warm due to selection mismatch');\n\n return;\n }\n }\n\n if (hostMap) {\n const formatted = this._formatReceivedHostmap(hostMap);\n catalog.updateServiceUrls(serviceGroup, formatted);\n }\n });\n\n // Align credentials against warmed catalog\n this.updateCredentialsConfig();\n\n return true;\n } catch (e) {\n this.logger.warn('services: error loading catalog from cache', e);\n\n return false;\n }\n },\n\n /**\n * Clear the catalog cache from the bounded storage.\n * @returns {Promise<void>}\n */\n clearCatalogCache() {\n try {\n const ls = this._getLocalStorageSafe();\n if (ls) {\n ls.removeItem(CATALOG_CACHE_KEY_V1);\n }\n } catch (e) {\n this.logger.warn('services: error clearing catalog cache', e);\n }\n\n return Promise.resolve();\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig() {\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 name: key,\n defaultUrl: services.discovery[key],\n }));\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceUrls('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 name: key,\n defaultUrl: services.override[key],\n }));\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceUrls('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 *\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs() {\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}))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog.\n\n return this.updateServices().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() {\n const catalog = new ServiceCatalog();\n const registry = new ServiceRegistry();\n const state = new ServiceState();\n\n this._catalogs.set(this.webex, catalog);\n this.registries.set(this.webex, registry);\n this.states.set(this.webex, state);\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 can cause a race condition because credentials may\n // not be valid when services is initialized\n this.listenToOnce(this.webex, 'ready', async () => {\n const cachedCatalog = await this._loadCatalogFromCache();\n if (cachedCatalog) {\n catalog.isReady = true;\n\n return; // skip initServiceCatalogs() on reload when cache exists\n }\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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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_servicesV","_interopRequireDefault","require","_serviceCatalog","_serviceDetail"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport {default as ServicesV2} from './services-v2';\nexport {default as ServiceCatalogV2} from './service-catalog';\nexport {default as ServiceDetail} from './service-detail';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,cAAA,GAAAH,sBAAA,CAAAC,OAAA"}
1
+ {"version":3,"names":["_servicesV","_interopRequireDefault","require","_serviceCatalog","_serviceDetail"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nexport {default as ServicesV2} from './services-v2';\nexport {default as ServiceCatalogV2} from './service-catalog';\nexport {default as ServiceDetail} from './service-detail';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,cAAA,GAAAH,sBAAA,CAAAC,OAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_default","exports","default","JS_SDK_SERVICE_NOT_FOUND"],"sources":["metrics.ts"],"sourcesContent":["// Metrics for service catalog\nexport default {\n JS_SDK_SERVICE_NOT_FOUND: 'JS_SDK_SERVICE_NOT_FOUND',\n};\n"],"mappings":";;;;;;;AAAA;AAAA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACe;EACbC,wBAAwB,EAAE;AAC5B,CAAC"}
1
+ {"version":3,"names":["_default","exports","default","JS_SDK_SERVICE_NOT_FOUND"],"sources":["metrics.ts"],"sourcesContent":["// Metrics for service catalog\nexport default {\n JS_SDK_SERVICE_NOT_FOUND: 'JS_SDK_SERVICE_NOT_FOUND',\n};\n"],"mappings":";;;;;;;AAAA;AAAA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GACe;EACbC,wBAAwB,EAAE;AAC5B,CAAC","ignoreList":[]}
@@ -15,9 +15,9 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2
15
15
  var _ampersandState = _interopRequireDefault(require("ampersand-state"));
16
16
  var _lodash = require("lodash");
17
17
  var _serviceDetail = _interopRequireDefault(require("./service-detail"));
18
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
19
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
20
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
18
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof _Symbol && r[_Symbol$iterator] || r["@@iterator"]; if (!t) { if (_Array$isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
19
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
20
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
21
  /**
22
22
  * @class
23
23
  */
@@ -116,7 +116,7 @@ var ServiceCatalog = _ampersandState.default.extend({
116
116
  var _this2 = this;
117
117
  // declare namespaces outside of loop
118
118
  var existingService;
119
- serviceDetails.forEach(function (service) {
119
+ serviceDetails === null || serviceDetails === void 0 ? void 0 : serviceDetails.forEach(function (service) {
120
120
  existingService = _this2._getServiceDetail(service.id, serviceGroup);
121
121
  if (existingService) {
122
122
  _this2.serviceGroups[serviceGroup].splice(_this2.serviceGroups[serviceGroup].indexOf(existingService), 1);
@@ -303,14 +303,14 @@ var ServiceCatalog = _ampersandState.default.extend({
303
303
  updateServiceGroups: function updateServiceGroups(serviceGroup, serviceDetails, timestamp) {
304
304
  var _this3 = this;
305
305
  var currentServiceDetails = this.serviceGroups[serviceGroup];
306
- var unusedServicesDetails = currentServiceDetails.filter(function (serviceDetail) {
307
- return serviceDetails.every(function (_ref4) {
306
+ var unusedServicesDetails = currentServiceDetails === null || currentServiceDetails === void 0 ? void 0 : currentServiceDetails.filter(function (serviceDetail) {
307
+ return serviceDetails === null || serviceDetails === void 0 ? void 0 : serviceDetails.every(function (_ref4) {
308
308
  var id = _ref4.id;
309
309
  return id !== serviceDetail.id;
310
310
  });
311
311
  });
312
312
  this._unloadServiceDetails(serviceGroup, unusedServicesDetails);
313
- serviceDetails.forEach(function (serviceObj) {
313
+ serviceDetails === null || serviceDetails === void 0 ? void 0 : serviceDetails.forEach(function (serviceObj) {
314
314
  var _serviceObj$serviceUr;
315
315
  var serviceDetail = _this3._getServiceDetail(serviceObj.id, serviceGroup);
316
316
  serviceObj === null || serviceObj === void 0 ? void 0 : (_serviceObj$serviceUr = serviceObj.serviceUrls) === null || _serviceObj$serviceUr === void 0 ? void 0 : _serviceObj$serviceUr.sort(function (a, b) {
@@ -1 +1 @@
1
- {"version":3,"names":["_ampersandState","_interopRequireDefault","require","_lodash","_serviceDetail","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","ServiceCatalog","AmpState","extend","namespace","props","serviceGroups","discovery","override","preauth","postauth","signin","status","ready","collecting","isReady","timestamp","allowedDomains","_getAllServiceDetails","serviceGroup","serviceDetails","concat","_toConsumableArray2","default","_getServiceDetail","clusterId","find","serviceDetail","id","_loadServiceDetails","_this","existingService","forEach","service","push","_unloadServiceDetails","_this2","splice","indexOf","clean","findClusterId","url","_allServiceDetails$fi","incomingUrlObj","URL","allServiceDetails","serviceUrls","_ref","host","_unused","undefined","findServiceFromClusterId","_ref2","arguments","serviceName","get","findServiceDetailFromUrl","_ref3","_iterator","_step","serviceUrl","startsWith","baseUrl","findAllowedDomain","urlObj","allowedDomain","includes","_unused2","getAllowedDomains","markFailedServiceUrl","serviceDetailWithFailedHost","failHost","setAllowedDomains","addAllowedDomains","newAllowedDomains","union","updateServiceGroups","_this3","currentServiceDetails","unusedServicesDetails","filter","every","_ref4","serviceObj","_serviceObj$serviceUr","sort","a","b","priority","ServiceDetail","trigger","waitForCatalog","timeout","_this4","_promise","resolve","reject","validatedTimeout","timeoutTimer","setTimeout","Error","once","clearTimeout","_default","exports"],"sources":["service-catalog.ts"],"sourcesContent":["import AmpState from 'ampersand-state';\n\nimport {union} from 'lodash';\nimport ServiceDetail from './service-detail';\nimport {IServiceDetail, ServiceGroup} from './types';\n\n/**\n * @class\n */\nconst ServiceCatalog = AmpState.extend({\n namespace: 'ServiceCatalog',\n\n props: {\n serviceGroups: [\n 'object',\n true,\n () => ({\n discovery: [],\n override: [],\n preauth: [],\n postauth: [],\n signin: [],\n }),\n ],\n status: [\n 'object',\n true,\n () => ({\n discovery: {\n ready: false,\n collecting: false,\n },\n override: {\n ready: false,\n collecting: false,\n },\n preauth: {\n ready: false,\n collecting: false,\n },\n postauth: {\n ready: false,\n collecting: false,\n },\n signin: {\n ready: false,\n collecting: false,\n },\n }),\n ],\n isReady: ['boolean', false, false],\n timestamp: ['string', false, ''],\n allowedDomains: ['array', false, () => []],\n },\n\n /**\n * @private\n * Get all service details for a given service group or return all details if no group is specified.\n * @param {ServiceGroup} serviceGroup - The name of the service group to retrieve details for.\n * @returns {Array<IServiceDetail>} - An array of service details.\n */\n _getAllServiceDetails(serviceGroup?: ServiceGroup): Array<IServiceDetail> {\n const serviceDetails =\n typeof serviceGroup === 'string'\n ? this.serviceGroups[serviceGroup] || []\n : [\n ...this.serviceGroups.override,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.discovery,\n ];\n\n return serviceDetails;\n },\n\n /**\n * @private\n * Search the service details array to locate a `ServiceDetails`\n * class object based on its id.\n * @param {string} clusterId\n * @param {ServiceGroup} [serviceGroup]\n * @returns {IServiceDetail}\n */\n _getServiceDetail(clusterId: string, serviceGroup?: ServiceGroup): IServiceDetail | undefined {\n const serviceDetails = this._getAllServiceDetails(serviceGroup);\n\n return serviceDetails.find((serviceDetail: IServiceDetail) => serviceDetail.id === clusterId);\n },\n\n /**\n * @private\n * Safely load one or more `ServiceDetail`s into this `ServiceCatalog` instance.\n * @param {ServiceGroup} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _loadServiceDetails(serviceGroup: ServiceGroup, serviceDetails: Array<IServiceDetail>): void {\n // declare namespaces outside of loop\n let existingService: IServiceDetail | undefined;\n\n serviceDetails.forEach((service) => {\n existingService = this._getServiceDetail(service.id, serviceGroup);\n\n if (!existingService) {\n this.serviceGroups[serviceGroup].push(service);\n }\n });\n },\n\n /**\n * @private\n * Safely unload one or more `ServiceDetail`s into this `Services` instance\n * @param {ServiceGroup} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _unloadServiceDetails(serviceGroup: ServiceGroup, serviceDetails: Array<IServiceDetail>): void {\n // declare namespaces outside of loop\n let existingService: IServiceDetail | undefined;\n\n serviceDetails.forEach((service) => {\n existingService = this._getServiceDetail(service.id, serviceGroup);\n\n if (existingService) {\n this.serviceGroups[serviceGroup].splice(\n this.serviceGroups[serviceGroup].indexOf(existingService),\n 1\n );\n }\n });\n },\n\n /**\n * Clear all collected catalog data and reset catalog status.\n *\n * @returns {void}\n */\n clean(): void {\n this.serviceGroups.preauth.length = 0;\n this.serviceGroups.signin.length = 0;\n this.serviceGroups.postauth.length = 0;\n this.status.preauth = {ready: false};\n this.status.signin = {ready: false};\n this.status.postauth = {ready: false};\n },\n\n /**\n * Search over all service groups to find a cluster id based\n * on a given url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {string | undefined} - ClusterId of a given url\n */\n findClusterId(url: string): string | undefined {\n try {\n const incomingUrlObj = new URL(url);\n const allServiceDetails = this._getAllServiceDetails();\n\n return allServiceDetails.find((serviceDetail: IServiceDetail) =>\n serviceDetail.serviceUrls.find(({host}) => host === incomingUrlObj.host)\n )?.id;\n } catch {\n // If the URL is invalid or can't be found, return undefined\n return undefined;\n }\n },\n\n /**\n * Search over all service groups and return a service value from a provided\n * clusterId.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {ServiceGroup} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n findServiceFromClusterId(\n {clusterId, serviceGroup} = {} as {clusterId: string; serviceGroup?: ServiceGroup}\n ): {name: string; url: string} | undefined {\n const serviceDetails = this._getServiceDetail(clusterId, serviceGroup);\n\n if (serviceDetails) {\n return {\n name: serviceDetails.serviceName,\n url: serviceDetails.get(),\n };\n }\n\n return undefined;\n },\n\n /**\n * Find a service based on the provided url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {IServiceDetail} - ServiceDetail assocated with provided url\n */\n findServiceDetailFromUrl(url: string): IServiceDetail | undefined {\n const serviceDetails = this._getAllServiceDetails();\n\n return serviceDetails.find(({serviceUrls}) => {\n for (const serviceUrl of serviceUrls) {\n if (url.startsWith(serviceUrl.baseUrl)) {\n return true;\n }\n }\n\n return false;\n });\n },\n\n /**\n * Finds an allowed domain that matches a specific url.\n *\n * @param {string} url - The url to match the allowed domains against.\n * @returns {string} - The matching allowed domain.\n */\n findAllowedDomain(url: string): string {\n try {\n const urlObj = new URL(url);\n\n return this.allowedDomains.find((allowedDomain) => urlObj.host.includes(allowedDomain));\n } catch {\n // If the URL is invalid or can't be found, return undefined\n return undefined;\n }\n },\n\n /**\n * Get a service url from the current services list by name. Return undefined\n * if the service is not found.\n * @param {string} clusterId\n * @param {ServiceGroup} serviceGroup\n * @returns {string | undefined}\n */\n get(clusterId: string, serviceGroup?: ServiceGroup): string | undefined {\n const serviceDetail = this._getServiceDetail(clusterId, serviceGroup);\n\n return serviceDetail ? serviceDetail.get() : undefined;\n },\n\n /**\n * Get the current allowed domains list.\n *\n * @returns {Array<string>} - the current allowed domains list.\n */\n getAllowedDomains(): Array<string> {\n return [...this.allowedDomains];\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceDetail` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceDetail` host array,\n * or the `ServiceDetail` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @returns {string}\n */\n markFailedServiceUrl(url: string): string | undefined {\n const serviceDetails = this._getAllServiceDetails();\n\n const serviceDetailWithFailedHost = serviceDetails.find((serviceDetail: IServiceDetail) =>\n serviceDetail.failHost(url)\n );\n\n // if we couldn't find the url we wanted to fail, return undefined\n if (!serviceDetailWithFailedHost) {\n return undefined;\n }\n\n return serviceDetailWithFailedHost.get();\n },\n\n /**\n * Set the allowed domains for the catalog.\n *\n * @param {Array<string>} allowedDomains - allowed domains to be assigned.\n * @returns {void}\n */\n setAllowedDomains(allowedDomains: Array<string>): void {\n this.allowedDomains = [...allowedDomains];\n },\n\n /**\n *\n * @param {Array<string>} newAllowedDomains - new allowed domains to add to existing set of allowed domains\n * @returns {void}\n */\n addAllowedDomains(newAllowedDomains: Array<string>): void {\n this.allowedDomains = union(this.allowedDomains, newAllowedDomains);\n },\n\n /**\n * Update the current list of `ServiceDetail`s against a provided\n * service hostmap.\n * @emits ServiceCatalog#preauthorized\n * @emits ServiceCatalog#postauthorized\n * @param {ServiceGroup} serviceGroup\n * @param {Array<IServiceDetail>} serviceDetails\n * @param {timestamp<string>} timestamp of the catalog\n * @returns {void}\n */\n updateServiceGroups(\n serviceGroup: ServiceGroup,\n serviceDetails: Array<IServiceDetail>,\n timestamp?: string\n ) {\n const currentServiceDetails = this.serviceGroups[serviceGroup];\n\n const unusedServicesDetails = currentServiceDetails.filter((serviceDetail) =>\n serviceDetails.every(({id}) => id !== serviceDetail.id)\n );\n\n this._unloadServiceDetails(serviceGroup, unusedServicesDetails);\n\n serviceDetails.forEach((serviceObj) => {\n const serviceDetail = this._getServiceDetail(serviceObj.id, serviceGroup);\n serviceObj?.serviceUrls?.sort((a, b) => {\n if (a.priority < 0 && b.priority < 0) return 0;\n if (a.priority < 0) return 1;\n if (b.priority < 0) return -1;\n\n return a.priority - b.priority;\n });\n if (serviceDetail) {\n serviceDetail.serviceUrls = serviceObj.serviceUrls || [];\n } else {\n this._loadServiceDetails(serviceGroup, [new ServiceDetail(serviceObj)]);\n }\n });\n\n this.timestamp = timestamp;\n this.status[serviceGroup].ready = true;\n this.trigger(serviceGroup);\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject after a timeout of 60 seconds.\n * @param {ServiceGroup} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup: ServiceGroup, timeout?: number): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (this.status[serviceGroup].ready) {\n resolve();\n }\n\n const validatedTimeout = typeof timeout === 'number' && timeout >= 0 ? timeout : 60;\n\n const timeoutTimer = setTimeout(\n () =>\n reject(\n new Error(\n `services: timeout occured while waiting for '${serviceGroup}' catalog to populate`\n )\n ),\n validatedTimeout * 1000\n );\n\n this.once(serviceGroup, () => {\n clearTimeout(timeoutTimer);\n resolve();\n });\n });\n },\n});\n\nexport default ServiceCatalog;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_ampersandState","_interopRequireDefault","require","_lodash","_serviceDetail","_createForOfIteratorHelper","r","e","t","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ServiceCatalog","AmpState","extend","namespace","props","serviceGroups","discovery","override","preauth","postauth","signin","status","ready","collecting","isReady","timestamp","allowedDomains","_getAllServiceDetails","serviceGroup","serviceDetails","concat","_toConsumableArray2","default","_getServiceDetail","clusterId","find","serviceDetail","id","_loadServiceDetails","_this","existingService","forEach","service","push","_unloadServiceDetails","_this2","splice","indexOf","clean","findClusterId","url","_allServiceDetails$fi","incomingUrlObj","URL","allServiceDetails","serviceUrls","_ref","host","_unused","undefined","findServiceFromClusterId","_ref2","arguments","serviceName","get","findServiceDetailFromUrl","_ref3","_iterator","_step","serviceUrl","startsWith","baseUrl","err","findAllowedDomain","urlObj","allowedDomain","includes","_unused2","getAllowedDomains","markFailedServiceUrl","serviceDetailWithFailedHost","failHost","setAllowedDomains","addAllowedDomains","newAllowedDomains","union","updateServiceGroups","_this3","currentServiceDetails","unusedServicesDetails","filter","every","_ref4","serviceObj","_serviceObj$serviceUr","sort","b","priority","ServiceDetail","trigger","waitForCatalog","timeout","_this4","_promise","resolve","reject","validatedTimeout","timeoutTimer","setTimeout","Error","once","clearTimeout","_default","exports"],"sources":["service-catalog.ts"],"sourcesContent":["import AmpState from 'ampersand-state';\n\nimport {union} from 'lodash';\nimport ServiceDetail from './service-detail';\nimport {IServiceDetail, ServiceGroup} from './types';\n\n/**\n * @class\n */\nconst ServiceCatalog = AmpState.extend({\n namespace: 'ServiceCatalog',\n\n props: {\n serviceGroups: [\n 'object',\n true,\n () => ({\n discovery: [],\n override: [],\n preauth: [],\n postauth: [],\n signin: [],\n }),\n ],\n status: [\n 'object',\n true,\n () => ({\n discovery: {\n ready: false,\n collecting: false,\n },\n override: {\n ready: false,\n collecting: false,\n },\n preauth: {\n ready: false,\n collecting: false,\n },\n postauth: {\n ready: false,\n collecting: false,\n },\n signin: {\n ready: false,\n collecting: false,\n },\n }),\n ],\n isReady: ['boolean', false, false],\n timestamp: ['string', false, ''],\n allowedDomains: ['array', false, () => []],\n },\n\n /**\n * @private\n * Get all service details for a given service group or return all details if no group is specified.\n * @param {ServiceGroup} serviceGroup - The name of the service group to retrieve details for.\n * @returns {Array<IServiceDetail>} - An array of service details.\n */\n _getAllServiceDetails(serviceGroup?: ServiceGroup): Array<IServiceDetail> {\n const serviceDetails =\n typeof serviceGroup === 'string'\n ? this.serviceGroups[serviceGroup] || []\n : [\n ...this.serviceGroups.override,\n ...this.serviceGroups.postauth,\n ...this.serviceGroups.signin,\n ...this.serviceGroups.preauth,\n ...this.serviceGroups.discovery,\n ];\n\n return serviceDetails;\n },\n\n /**\n * @private\n * Search the service details array to locate a `ServiceDetails`\n * class object based on its id.\n * @param {string} clusterId\n * @param {ServiceGroup} [serviceGroup]\n * @returns {IServiceDetail}\n */\n _getServiceDetail(clusterId: string, serviceGroup?: ServiceGroup): IServiceDetail | undefined {\n const serviceDetails = this._getAllServiceDetails(serviceGroup);\n\n return serviceDetails.find((serviceDetail: IServiceDetail) => serviceDetail.id === clusterId);\n },\n\n /**\n * @private\n * Safely load one or more `ServiceDetail`s into this `ServiceCatalog` instance.\n * @param {ServiceGroup} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _loadServiceDetails(serviceGroup: ServiceGroup, serviceDetails: Array<IServiceDetail>): void {\n // declare namespaces outside of loop\n let existingService: IServiceDetail | undefined;\n\n serviceDetails.forEach((service) => {\n existingService = this._getServiceDetail(service.id, serviceGroup);\n\n if (!existingService) {\n this.serviceGroups[serviceGroup].push(service);\n }\n });\n },\n\n /**\n * @private\n * Safely unload one or more `ServiceDetail`s into this `Services` instance\n * @param {ServiceGroup} serviceGroup\n * @param {Array<ServiceDetail>} serviceDetails\n * @returns {void}\n */\n _unloadServiceDetails(serviceGroup: ServiceGroup, serviceDetails: Array<IServiceDetail>): void {\n // declare namespaces outside of loop\n let existingService: IServiceDetail | undefined;\n\n serviceDetails?.forEach((service) => {\n existingService = this._getServiceDetail(service.id, serviceGroup);\n\n if (existingService) {\n this.serviceGroups[serviceGroup].splice(\n this.serviceGroups[serviceGroup].indexOf(existingService),\n 1\n );\n }\n });\n },\n\n /**\n * Clear all collected catalog data and reset catalog status.\n *\n * @returns {void}\n */\n clean(): void {\n this.serviceGroups.preauth.length = 0;\n this.serviceGroups.signin.length = 0;\n this.serviceGroups.postauth.length = 0;\n this.status.preauth = {ready: false};\n this.status.signin = {ready: false};\n this.status.postauth = {ready: false};\n },\n\n /**\n * Search over all service groups to find a cluster id based\n * on a given url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {string | undefined} - ClusterId of a given url\n */\n findClusterId(url: string): string | undefined {\n try {\n const incomingUrlObj = new URL(url);\n const allServiceDetails = this._getAllServiceDetails();\n\n return allServiceDetails.find((serviceDetail: IServiceDetail) =>\n serviceDetail.serviceUrls.find(({host}) => host === incomingUrlObj.host)\n )?.id;\n } catch {\n // If the URL is invalid or can't be found, return undefined\n return undefined;\n }\n },\n\n /**\n * Search over all service groups and return a service value from a provided\n * clusterId.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {ServiceGroup} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n findServiceFromClusterId(\n {clusterId, serviceGroup} = {} as {clusterId: string; serviceGroup?: ServiceGroup}\n ): {name: string; url: string} | undefined {\n const serviceDetails = this._getServiceDetail(clusterId, serviceGroup);\n\n if (serviceDetails) {\n return {\n name: serviceDetails.serviceName,\n url: serviceDetails.get(),\n };\n }\n\n return undefined;\n },\n\n /**\n * Find a service based on the provided url.\n * @param {string} url - Must be parsable by `Url`\n * @returns {IServiceDetail} - ServiceDetail assocated with provided url\n */\n findServiceDetailFromUrl(url: string): IServiceDetail | undefined {\n const serviceDetails = this._getAllServiceDetails();\n\n return serviceDetails.find(({serviceUrls}) => {\n for (const serviceUrl of serviceUrls) {\n if (url.startsWith(serviceUrl.baseUrl)) {\n return true;\n }\n }\n\n return false;\n });\n },\n\n /**\n * Finds an allowed domain that matches a specific url.\n *\n * @param {string} url - The url to match the allowed domains against.\n * @returns {string} - The matching allowed domain.\n */\n findAllowedDomain(url: string): string {\n try {\n const urlObj = new URL(url);\n\n return this.allowedDomains.find((allowedDomain) => urlObj.host.includes(allowedDomain));\n } catch {\n // If the URL is invalid or can't be found, return undefined\n return undefined;\n }\n },\n\n /**\n * Get a service url from the current services list by name. Return undefined\n * if the service is not found.\n * @param {string} clusterId\n * @param {ServiceGroup} serviceGroup\n * @returns {string | undefined}\n */\n get(clusterId: string, serviceGroup?: ServiceGroup): string | undefined {\n const serviceDetail = this._getServiceDetail(clusterId, serviceGroup);\n\n return serviceDetail ? serviceDetail.get() : undefined;\n },\n\n /**\n * Get the current allowed domains list.\n *\n * @returns {Array<string>} - the current allowed domains list.\n */\n getAllowedDomains(): Array<string> {\n return [...this.allowedDomains];\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceDetail` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceDetail` host array,\n * or the `ServiceDetail` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @returns {string}\n */\n markFailedServiceUrl(url: string): string | undefined {\n const serviceDetails = this._getAllServiceDetails();\n\n const serviceDetailWithFailedHost = serviceDetails.find((serviceDetail: IServiceDetail) =>\n serviceDetail.failHost(url)\n );\n\n // if we couldn't find the url we wanted to fail, return undefined\n if (!serviceDetailWithFailedHost) {\n return undefined;\n }\n\n return serviceDetailWithFailedHost.get();\n },\n\n /**\n * Set the allowed domains for the catalog.\n *\n * @param {Array<string>} allowedDomains - allowed domains to be assigned.\n * @returns {void}\n */\n setAllowedDomains(allowedDomains: Array<string>): void {\n this.allowedDomains = [...allowedDomains];\n },\n\n /**\n *\n * @param {Array<string>} newAllowedDomains - new allowed domains to add to existing set of allowed domains\n * @returns {void}\n */\n addAllowedDomains(newAllowedDomains: Array<string>): void {\n this.allowedDomains = union(this.allowedDomains, newAllowedDomains);\n },\n\n /**\n * Update the current list of `ServiceDetail`s against a provided\n * service hostmap.\n * @emits ServiceCatalog#preauthorized\n * @emits ServiceCatalog#postauthorized\n * @param {ServiceGroup} serviceGroup\n * @param {Array<IServiceDetail>} serviceDetails\n * @param {timestamp<string>} timestamp of the catalog\n * @returns {void}\n */\n updateServiceGroups(\n serviceGroup: ServiceGroup,\n serviceDetails: Array<IServiceDetail>,\n timestamp?: string\n ) {\n const currentServiceDetails = this.serviceGroups[serviceGroup];\n\n const unusedServicesDetails = currentServiceDetails?.filter((serviceDetail) =>\n serviceDetails?.every(({id}) => id !== serviceDetail.id)\n );\n\n this._unloadServiceDetails(serviceGroup, unusedServicesDetails);\n\n serviceDetails?.forEach((serviceObj) => {\n const serviceDetail = this._getServiceDetail(serviceObj.id, serviceGroup);\n serviceObj?.serviceUrls?.sort((a, b) => {\n if (a.priority < 0 && b.priority < 0) return 0;\n if (a.priority < 0) return 1;\n if (b.priority < 0) return -1;\n\n return a.priority - b.priority;\n });\n if (serviceDetail) {\n serviceDetail.serviceUrls = serviceObj.serviceUrls || [];\n } else {\n this._loadServiceDetails(serviceGroup, [new ServiceDetail(serviceObj)]);\n }\n });\n\n this.timestamp = timestamp;\n this.status[serviceGroup].ready = true;\n this.trigger(serviceGroup);\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject after a timeout of 60 seconds.\n * @param {ServiceGroup} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup: ServiceGroup, timeout?: number): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (this.status[serviceGroup].ready) {\n resolve();\n }\n\n const validatedTimeout = typeof timeout === 'number' && timeout >= 0 ? timeout : 60;\n\n const timeoutTimer = setTimeout(\n () =>\n reject(\n new Error(\n `services: timeout occured while waiting for '${serviceGroup}' catalog to populate`\n )\n ),\n validatedTimeout * 1000\n );\n\n this.once(serviceGroup, () => {\n clearTimeout(timeoutTimer);\n resolve();\n });\n });\n },\n});\n\nexport default ServiceCatalog;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_ampersandState","_interopRequireDefault","require","ServiceDetail","AmpState","extend","namespace","props","serviceUrls","serviceName","undefined","id","_generateHostUrl","serviceUrl","url","URL","baseUrl","host","concat","port","href","_getPriorityHostUrl","priorityServiceUrl","_searchForValidPriorityHost","map","failed","find","priority","failHost","failedUrl","foundHost","get","length","_default","exports","default"],"sources":["service-detail.ts"],"sourcesContent":["import AmpState from 'ampersand-state';\nimport {ServiceUrl} from './types';\n\n/**\n * @class\n */\nconst ServiceDetail = AmpState.extend({\n namespace: 'ServiceDetail',\n\n props: {\n serviceUrls: ['array', false, () => []],\n serviceName: ['string', true, undefined],\n id: ['string', true, undefined],\n },\n\n /**\n * Generate a host url based on the host\n * uri provided.\n * @param {ServiceUrl} serviceUrl\n * @returns {string}\n */\n _generateHostUrl(serviceUrl: ServiceUrl): string {\n const url = new URL(serviceUrl.baseUrl);\n\n // setting url.hostname will not apply during Url.format(), set host via\n // a string literal instead.\n url.host = `${serviceUrl.host}${url.port ? `:${url.port}` : ''}`;\n\n return url.href;\n },\n\n /**\n * Get the current host url with the highest priority. This will only return a URL with a filtered host that has the\n * `homeCluster` value set to `true`.\n * @returns {string} - The priority host url.\n */\n _getPriorityHostUrl(): string {\n // format of catalog ensures that array is sorted by highest priority\n let priorityServiceUrl = this._searchForValidPriorityHost();\n\n if (!priorityServiceUrl) {\n this.serviceUrls = this.serviceUrls.map((serviceUrl) => {\n serviceUrl.failed = false;\n\n return serviceUrl;\n });\n\n priorityServiceUrl = this._searchForValidPriorityHost();\n }\n\n return priorityServiceUrl ? this._generateHostUrl(priorityServiceUrl) : '';\n },\n\n /**\n * Searches for a valid service URL with a priority greater than 0 that has not failed.\n * @returns {ServiceUrl | undefined} - The first valid service URL found, or undefined if none exist.\n */\n _searchForValidPriorityHost(): ServiceUrl | undefined {\n return this.serviceUrls.find((serviceUrl) => serviceUrl.priority > 0 && !serviceUrl.failed);\n },\n\n /**\n * Attempt to mark a host from this `ServiceDetail` as failed and return true\n * if the provided url has a host that could be successfully marked as failed.\n *\n * @param {string} url\n * @returns {boolean}\n */\n failHost(url: string): boolean {\n const failedUrl = new URL(url);\n\n const foundHost = this.serviceUrls.find((serviceUrl) => serviceUrl.host === failedUrl.host);\n\n if (foundHost) {\n foundHost.failed = true;\n }\n\n return foundHost !== undefined;\n },\n\n /**\n * Generate a url using the host with the\n * highest priority via host rendering.\n *\n * @returns {string} - The full service url.\n */\n get(): string {\n // return empty string to indicate that no service url is available\n if (!this.serviceUrls || this.serviceUrls.length === 0) {\n return '';\n }\n\n return this._getPriorityHostUrl();\n },\n});\n\nexport default ServiceDetail;\n"],"mappings":";;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA;AACA;AACA;AACA,IAAMC,aAAa,GAAGC,uBAAQ,CAACC,MAAM,CAAC;EACpCC,SAAS,EAAE,eAAe;EAE1BC,KAAK,EAAE;IACLC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE;MAAA,OAAM,EAAE;IAAA,EAAC;IACvCC,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAEC,SAAS,CAAC;IACxCC,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAED,SAAS;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,gBAAgB,WAAAA,iBAACC,UAAsB,EAAU;IAC/C,IAAMC,GAAG,GAAG,IAAIC,GAAG,CAACF,UAAU,CAACG,OAAO,CAAC;;IAEvC;IACA;IACAF,GAAG,CAACG,IAAI,MAAAC,MAAA,CAAML,UAAU,CAACI,IAAI,EAAAC,MAAA,CAAGJ,GAAG,CAACK,IAAI,OAAAD,MAAA,CAAOJ,GAAG,CAACK,IAAI,IAAK,EAAE,CAAE;IAEhE,OAAOL,GAAG,CAACM,IAAI;EACjB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,mBAAmB,WAAAA,oBAAA,EAAW;IAC5B;IACA,IAAIC,kBAAkB,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;IAE3D,IAAI,CAACD,kBAAkB,EAAE;MACvB,IAAI,CAACd,WAAW,GAAG,IAAI,CAACA,WAAW,CAACgB,GAAG,CAAC,UAACX,UAAU,EAAK;QACtDA,UAAU,CAACY,MAAM,GAAG,KAAK;QAEzB,OAAOZ,UAAU;MACnB,CAAC,CAAC;MAEFS,kBAAkB,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;IACzD;IAEA,OAAOD,kBAAkB,GAAG,IAAI,CAACV,gBAAgB,CAACU,kBAAkB,CAAC,GAAG,EAAE;EAC5E,CAAC;EAED;AACF;AACA;AACA;EACEC,2BAA2B,WAAAA,4BAAA,EAA2B;IACpD,OAAO,IAAI,CAACf,WAAW,CAACkB,IAAI,CAAC,UAACb,UAAU;MAAA,OAAKA,UAAU,CAACc,QAAQ,GAAG,CAAC,IAAI,CAACd,UAAU,CAACY,MAAM;IAAA,EAAC;EAC7F,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,QAAQ,WAAAA,SAACd,GAAW,EAAW;IAC7B,IAAMe,SAAS,GAAG,IAAId,GAAG,CAACD,GAAG,CAAC;IAE9B,IAAMgB,SAAS,GAAG,IAAI,CAACtB,WAAW,CAACkB,IAAI,CAAC,UAACb,UAAU;MAAA,OAAKA,UAAU,CAACI,IAAI,KAAKY,SAAS,CAACZ,IAAI;IAAA,EAAC;IAE3F,IAAIa,SAAS,EAAE;MACbA,SAAS,CAACL,MAAM,GAAG,IAAI;IACzB;IAEA,OAAOK,SAAS,KAAKpB,SAAS;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEqB,GAAG,WAAAA,IAAA,EAAW;IACZ;IACA,IAAI,CAAC,IAAI,CAACvB,WAAW,IAAI,IAAI,CAACA,WAAW,CAACwB,MAAM,KAAK,CAAC,EAAE;MACtD,OAAO,EAAE;IACX;IAEA,OAAO,IAAI,CAACX,mBAAmB,CAAC,CAAC;EACnC;AACF,CAAC,CAAC;AAAC,IAAAY,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEYhC,aAAa"}
1
+ {"version":3,"names":["_ampersandState","_interopRequireDefault","require","ServiceDetail","AmpState","extend","namespace","props","serviceUrls","serviceName","undefined","id","_generateHostUrl","serviceUrl","url","URL","baseUrl","host","concat","port","href","_getPriorityHostUrl","priorityServiceUrl","_searchForValidPriorityHost","map","failed","find","priority","failHost","failedUrl","foundHost","get","length","_default","exports","default"],"sources":["service-detail.ts"],"sourcesContent":["import AmpState from 'ampersand-state';\nimport {ServiceUrl} from './types';\n\n/**\n * @class\n */\nconst ServiceDetail = AmpState.extend({\n namespace: 'ServiceDetail',\n\n props: {\n serviceUrls: ['array', false, () => []],\n serviceName: ['string', true, undefined],\n id: ['string', true, undefined],\n },\n\n /**\n * Generate a host url based on the host\n * uri provided.\n * @param {ServiceUrl} serviceUrl\n * @returns {string}\n */\n _generateHostUrl(serviceUrl: ServiceUrl): string {\n const url = new URL(serviceUrl.baseUrl);\n\n // setting url.hostname will not apply during Url.format(), set host via\n // a string literal instead.\n url.host = `${serviceUrl.host}${url.port ? `:${url.port}` : ''}`;\n\n return url.href;\n },\n\n /**\n * Get the current host url with the highest priority. This will only return a URL with a filtered host that has the\n * `homeCluster` value set to `true`.\n * @returns {string} - The priority host url.\n */\n _getPriorityHostUrl(): string {\n // format of catalog ensures that array is sorted by highest priority\n let priorityServiceUrl = this._searchForValidPriorityHost();\n\n if (!priorityServiceUrl) {\n this.serviceUrls = this.serviceUrls.map((serviceUrl) => {\n serviceUrl.failed = false;\n\n return serviceUrl;\n });\n\n priorityServiceUrl = this._searchForValidPriorityHost();\n }\n\n return priorityServiceUrl ? this._generateHostUrl(priorityServiceUrl) : '';\n },\n\n /**\n * Searches for a valid service URL with a priority greater than 0 that has not failed.\n * @returns {ServiceUrl | undefined} - The first valid service URL found, or undefined if none exist.\n */\n _searchForValidPriorityHost(): ServiceUrl | undefined {\n return this.serviceUrls.find((serviceUrl) => serviceUrl.priority > 0 && !serviceUrl.failed);\n },\n\n /**\n * Attempt to mark a host from this `ServiceDetail` as failed and return true\n * if the provided url has a host that could be successfully marked as failed.\n *\n * @param {string} url\n * @returns {boolean}\n */\n failHost(url: string): boolean {\n const failedUrl = new URL(url);\n\n const foundHost = this.serviceUrls.find((serviceUrl) => serviceUrl.host === failedUrl.host);\n\n if (foundHost) {\n foundHost.failed = true;\n }\n\n return foundHost !== undefined;\n },\n\n /**\n * Generate a url using the host with the\n * highest priority via host rendering.\n *\n * @returns {string} - The full service url.\n */\n get(): string {\n // return empty string to indicate that no service url is available\n if (!this.serviceUrls || this.serviceUrls.length === 0) {\n return '';\n }\n\n return this._getPriorityHostUrl();\n },\n});\n\nexport default ServiceDetail;\n"],"mappings":";;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA;AACA;AACA;AACA,IAAMC,aAAa,GAAGC,uBAAQ,CAACC,MAAM,CAAC;EACpCC,SAAS,EAAE,eAAe;EAE1BC,KAAK,EAAE;IACLC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE;MAAA,OAAM,EAAE;IAAA,EAAC;IACvCC,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAEC,SAAS,CAAC;IACxCC,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAED,SAAS;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,gBAAgB,WAAhBA,gBAAgBA,CAACC,UAAsB,EAAU;IAC/C,IAAMC,GAAG,GAAG,IAAIC,GAAG,CAACF,UAAU,CAACG,OAAO,CAAC;;IAEvC;IACA;IACAF,GAAG,CAACG,IAAI,MAAAC,MAAA,CAAML,UAAU,CAACI,IAAI,EAAAC,MAAA,CAAGJ,GAAG,CAACK,IAAI,OAAAD,MAAA,CAAOJ,GAAG,CAACK,IAAI,IAAK,EAAE,CAAE;IAEhE,OAAOL,GAAG,CAACM,IAAI;EACjB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAW;IAC5B;IACA,IAAIC,kBAAkB,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;IAE3D,IAAI,CAACD,kBAAkB,EAAE;MACvB,IAAI,CAACd,WAAW,GAAG,IAAI,CAACA,WAAW,CAACgB,GAAG,CAAC,UAACX,UAAU,EAAK;QACtDA,UAAU,CAACY,MAAM,GAAG,KAAK;QAEzB,OAAOZ,UAAU;MACnB,CAAC,CAAC;MAEFS,kBAAkB,GAAG,IAAI,CAACC,2BAA2B,CAAC,CAAC;IACzD;IAEA,OAAOD,kBAAkB,GAAG,IAAI,CAACV,gBAAgB,CAACU,kBAAkB,CAAC,GAAG,EAAE;EAC5E,CAAC;EAED;AACF;AACA;AACA;EACEC,2BAA2B,WAA3BA,2BAA2BA,CAAA,EAA2B;IACpD,OAAO,IAAI,CAACf,WAAW,CAACkB,IAAI,CAAC,UAACb,UAAU;MAAA,OAAKA,UAAU,CAACc,QAAQ,GAAG,CAAC,IAAI,CAACd,UAAU,CAACY,MAAM;IAAA,EAAC;EAC7F,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,QAAQ,WAARA,QAAQA,CAACd,GAAW,EAAW;IAC7B,IAAMe,SAAS,GAAG,IAAId,GAAG,CAACD,GAAG,CAAC;IAE9B,IAAMgB,SAAS,GAAG,IAAI,CAACtB,WAAW,CAACkB,IAAI,CAAC,UAACb,UAAU;MAAA,OAAKA,UAAU,CAACI,IAAI,KAAKY,SAAS,CAACZ,IAAI;IAAA,EAAC;IAE3F,IAAIa,SAAS,EAAE;MACbA,SAAS,CAACL,MAAM,GAAG,IAAI;IACzB;IAEA,OAAOK,SAAS,KAAKpB,SAAS;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEqB,GAAG,WAAHA,GAAGA,CAAA,EAAW;IACZ;IACA,IAAI,CAAC,IAAI,CAACvB,WAAW,IAAI,IAAI,CAACA,WAAW,CAACwB,MAAM,KAAK,CAAC,EAAE;MACtD,OAAO,EAAE;IACX;IAEA,OAAO,IAAI,CAACX,mBAAmB,CAAC,CAAC;EACnC;AACF,CAAC,CAAC;AAAC,IAAAY,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEYhC,aAAa","ignoreList":[]}