@webex/webex-core 2.59.8-next.1 → 2.60.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 (36) hide show
  1. package/dist/interceptors/redirect.js +3 -3
  2. package/dist/interceptors/redirect.js.map +1 -1
  3. package/dist/interceptors/request-event.js +5 -5
  4. package/dist/interceptors/request-event.js.map +1 -1
  5. package/dist/interceptors/request-logger.js +12 -8
  6. package/dist/interceptors/request-logger.js.map +1 -1
  7. package/dist/interceptors/response-logger.js +7 -6
  8. package/dist/interceptors/response-logger.js.map +1 -1
  9. package/dist/interceptors/user-agent.js +4 -4
  10. package/dist/interceptors/user-agent.js.map +1 -1
  11. package/dist/interceptors/webex-user-agent.js +5 -5
  12. package/dist/interceptors/webex-user-agent.js.map +1 -1
  13. package/dist/lib/batcher.js +3 -7
  14. package/dist/lib/batcher.js.map +1 -1
  15. package/dist/lib/credentials/credentials.js +10 -7
  16. package/dist/lib/credentials/credentials.js.map +1 -1
  17. package/dist/lib/credentials/token.js +3 -3
  18. package/dist/lib/credentials/token.js.map +1 -1
  19. package/dist/lib/services/services.js +3 -3
  20. package/dist/lib/services/services.js.map +1 -1
  21. package/dist/lib/storage/decorators.js +16 -18
  22. package/dist/lib/storage/decorators.js.map +1 -1
  23. package/dist/lib/storage/make-webex-plugin-store.js +10 -8
  24. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  25. package/dist/lib/webex-core-plugin-mixin.js +14 -13
  26. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  27. package/dist/lib/webex-internal-core-plugin-mixin.js +14 -13
  28. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  29. package/dist/lib/webex-plugin.js +6 -4
  30. package/dist/lib/webex-plugin.js.map +1 -1
  31. package/dist/plugins/logger.js +1 -1
  32. package/dist/webex-core.js +34 -26
  33. package/dist/webex-core.js.map +1 -1
  34. package/package.json +19 -20
  35. package/src/lib/services/services.js +2 -2
  36. package/test/unit/spec/interceptors/webex-user-agent.js +6 -6
@@ -1 +1 @@
1
- {"version":3,"names":["_url","_interopRequireDefault","require","_sha","_webexPlugin","_metrics","_serviceCatalog","_serviceRegistry","_serviceState","_serviceFedRamp","ownKeys","object","enumerableOnly","keys","_Object$keys2","_Object$getOwnPropertySymbols","symbols","filter","sym","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","Object","forEach","key","_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","_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","addAuthHeader","headers","timeout","_ref5","_this5","countryCode","timezone","clientRegionInfo","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","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","services","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","_formatReceivedHostmap","serviceHostmap","formattedHostmap","reduce","accumulator","_serviceItem$hosts","id","split","defaultUrl","serviceLinks","serviceItem","item","defaultHost","Url","parse","hostname","hosts","host","ttl","priority","homeCluster","_toConsumableArray2","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","_ref12","initConfig","_this$webex$config","fedramp","discovery","fedRampServices","formattedDiscoveryServices","override","formattedOverrideServices","allowedDomains","setAllowedDomains","_this8","getOrgId","orgId","warn","initialize","_this9","ServiceCatalog","registry","ServiceRegistry","state","ServiceState","set","listenToOnce","version","_default"],"sources":["services.js"],"sourcesContent":["import Url from 'url';\n\nimport sha256 from 'crypto-js/sha256';\n\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';\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 },\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 host catalog\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 return this.request({\n uri: 'https://ds.ciscospark.com/v1/region',\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 * 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 * @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 // map the host catalog items to a formatted hostmap\n const formattedHostmap = Object.keys(serviceHostmap.hostCatalog).reduce((accumulator, key) => {\n if (serviceHostmap.hostCatalog[key].length === 0) {\n return accumulator;\n }\n\n const serviceName = serviceHostmap.hostCatalog[key][0].id.split(':')[3];\n const defaultUrl = serviceHostmap.serviceLinks[serviceName];\n\n let serviceItem = accumulator.find((item) => item.name === serviceName);\n\n if (!serviceItem) {\n serviceItem = {\n name: serviceName,\n defaultUrl,\n defaultHost: Url.parse(defaultUrl).hostname,\n hosts: [],\n };\n\n accumulator.push(serviceItem);\n }\n\n serviceItem.hosts.push(\n // map the default key as a low priority default for cluster matching\n {\n host: key,\n ttl: -1,\n priority: 10,\n id: serviceHostmap.hostCatalog[key][0].id,\n homeCluster: serviceItem.defaultHost === key,\n },\n // map the rest of the hosts in their proper locations\n ...serviceHostmap.hostCatalog[key].map((host) => ({\n ...host,\n homeCluster: serviceItem.defaultHost === key,\n }))\n );\n\n return accumulator;\n }, []);\n\n // append service links that do not exist in the host catalog\n Object.keys(serviceHostmap.serviceLinks).forEach((key) => {\n const service = formattedHostmap.find((item) => item.name === key);\n\n if (!service) {\n formattedHostmap.push({\n name: key,\n defaultUrl: serviceHostmap.serviceLinks[key],\n defaultHost: Url.parse(serviceHostmap.serviceLinks[key]).hostname,\n hosts: [],\n });\n }\n });\n\n // update all the service urls in the host catalog\n\n this._updateServiceUrls(serviceHostmap.serviceLinks);\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.request(requestObject).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 // 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.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\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.logger.error(`services: failed to init initial services, ${error.message}`)\n );\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined);\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_url","_interopRequireDefault","require","_sha","_webexPlugin","_metrics","_serviceCatalog","_serviceRegistry","_serviceState","_serviceFedRamp","ownKeys","object","enumerableOnly","keys","_Object$keys2","_Object$getOwnPropertySymbols","symbols","filter","sym","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","Object","forEach","key","_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","_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","addAuthHeader","headers","timeout","_ref5","_this5","countryCode","timezone","clientRegionInfo","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","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","services","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","_formatReceivedHostmap","serviceHostmap","formattedHostmap","reduce","accumulator","_serviceItem$hosts","id","split","defaultUrl","serviceLinks","serviceItem","item","defaultHost","Url","parse","hostname","hosts","host","ttl","priority","homeCluster","_toConsumableArray2","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","_ref12","initConfig","_this$webex$config","fedramp","discovery","fedRampServices","formattedDiscoveryServices","override","formattedOverrideServices","allowedDomains","setAllowedDomains","_this8","getOrgId","orgId","warn","initialize","_this9","ServiceCatalog","registry","ServiceRegistry","state","ServiceState","set","listenToOnce","version","_default"],"sources":["services.js"],"sourcesContent":["import Url from 'url';\n\nimport sha256 from 'crypto-js/sha256';\n\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';\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 },\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 return this.request({\n uri: 'https://ds.ciscospark.com/v1/region',\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 * 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 * @private\n * Organize a received hostmap from a service\n * catalog endpoint.\n * @param {object} serviceHostmap\n * @returns {object}\n */\n _formatReceivedHostmap(serviceHostmap) {\n // map the host catalog items to a formatted hostmap\n const formattedHostmap = Object.keys(serviceHostmap.hostCatalog).reduce((accumulator, key) => {\n if (serviceHostmap.hostCatalog[key].length === 0) {\n return accumulator;\n }\n\n const serviceName = serviceHostmap.hostCatalog[key][0].id.split(':')[3];\n const defaultUrl = serviceHostmap.serviceLinks[serviceName];\n\n let serviceItem = accumulator.find((item) => item.name === serviceName);\n\n if (!serviceItem) {\n serviceItem = {\n name: serviceName,\n defaultUrl,\n defaultHost: Url.parse(defaultUrl).hostname,\n hosts: [],\n };\n\n accumulator.push(serviceItem);\n }\n\n serviceItem.hosts.push(\n // map the default key as a low priority default for cluster matching\n {\n host: key,\n ttl: -1,\n priority: 10,\n id: serviceHostmap.hostCatalog[key][0].id,\n homeCluster: serviceItem.defaultHost === key,\n },\n // map the rest of the hosts in their proper locations\n ...serviceHostmap.hostCatalog[key].map((host) => ({\n ...host,\n homeCluster: serviceItem.defaultHost === key,\n }))\n );\n\n return accumulator;\n }, []);\n\n // append service links that do not exist in the host catalog\n Object.keys(serviceHostmap.serviceLinks).forEach((key) => {\n const service = formattedHostmap.find((item) => item.name === key);\n\n if (!service) {\n formattedHostmap.push({\n name: key,\n defaultUrl: serviceHostmap.serviceLinks[key],\n defaultHost: Url.parse(serviceHostmap.serviceLinks[key]).hostname,\n hosts: [],\n });\n }\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.request(requestObject).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 // 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.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\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.logger.error(`services: failed to init initial services, ${error.message}`)\n );\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined);\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":"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"}
@@ -7,22 +7,20 @@ _Object$defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.persist = persist;
9
9
  exports.waitForValue = waitForValue;
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
11
- var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
12
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
13
10
  var _apply = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/apply"));
14
11
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
15
12
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
16
13
  var _set = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/set"));
17
- var _lodash = require("lodash");
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
15
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
16
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
17
+ var _wrap2 = _interopRequireDefault(require("lodash/wrap"));
18
+ var _result2 = _interopRequireDefault(require("lodash/result"));
19
+ var _identity2 = _interopRequireDefault(require("lodash/identity"));
20
+ var _debounce2 = _interopRequireDefault(require("lodash/debounce"));
21
+ var _curry2 = _interopRequireDefault(require("lodash/curry"));
18
22
  var _common = require("@webex/common");
19
23
  var _errors = require("./errors");
20
- /*!
21
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
22
- */
23
-
24
- /* eslint no-invalid-this: [0] */
25
-
26
24
  /**
27
25
  * Stores the result of fn before returning it
28
26
  * @param {string} key
@@ -44,7 +42,7 @@ function persist() {
44
42
  // detected here.
45
43
  throw new TypeError('@persist can only currently be applied to AmpersandState objects or their derivatives and must be applied to the initialize method');
46
44
  }
47
- descriptor.value = (0, _lodash.wrap)(descriptor.value, function persistExecutor(fn) {
45
+ descriptor.value = (0, _wrap2.default)(descriptor.value, function persistExecutor(fn) {
48
46
  var _this = this;
49
47
  for (var _len2 = arguments.length, initializeArgs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
50
48
  initializeArgs[_key2 - 1] = arguments[_key2];
@@ -57,7 +55,7 @@ function persist() {
57
55
  // a debounce of zero, we're effectively coalescing all the changes
58
56
  // triggered by a single call to set() and commiting them on the next tick
59
57
  // eslint-disable-next-line no-invalid-this
60
- this.on(changeEvent, (0, _lodash.debounce)(function () {
58
+ this.on(changeEvent, (0, _debounce2.default)(function () {
61
59
  var shouldPersist = !decider || _apply.default.apply(Reflect, [decider, _this].concat(initializeArgs));
62
60
  if (!shouldPersist) {
63
61
  return _promise.default.resolve();
@@ -93,7 +91,7 @@ function waitForValue(key) {
93
91
  }
94
92
  return function waitForValueDecorator(target, prop, descriptor) {
95
93
  blockingKeys.add(target, prop, key);
96
- descriptor.value = (0, _lodash.wrap)(descriptor.value, function waitForValueExecutor(fn) {
94
+ descriptor.value = (0, _wrap2.default)(descriptor.value, function waitForValueExecutor(fn) {
97
95
  var _this2 = this;
98
96
  for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
99
97
  args[_key3 - 1] = arguments[_key3];
@@ -145,7 +143,7 @@ function prepareInitialize(target, prop) {
145
143
  if (!inited.has(id)) {
146
144
  inited.add(id);
147
145
  if (target.initialize) {
148
- target.initialize = (0, _lodash.wrap)(target.initialize, function applyInit(fn) {
146
+ target.initialize = (0, _wrap2.default)(target.initialize, function applyInit(fn) {
149
147
  for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
150
148
  args[_key4 - 1] = arguments[_key4];
151
149
  }
@@ -165,7 +163,7 @@ function prepareInitialize(target, prop) {
165
163
  function init() {
166
164
  var self = this;
167
165
  var namespace = this.getNamespace();
168
- this.webex.initialize = (0, _lodash.wrap)(this.webex.initialize || _lodash.identity, function applyInit(fn) {
166
+ this.webex.initialize = (0, _wrap2.default)(this.webex.initialize || _identity2.default, function applyInit(fn) {
169
167
  var _this3 = this;
170
168
  // Call webex's initalize method first
171
169
  // Reminder: in order for MockWebex to accept initial storage data, the
@@ -178,11 +176,11 @@ function prepareInitialize(target, prop) {
178
176
  (0, _apply.default)(fn, this, args);
179
177
 
180
178
  // Then prepare a function for setting values retrieved from storage
181
- var set = (0, _lodash.curry)(function (key, value) {
179
+ var set = (0, _curry2.default)(function (key, value) {
182
180
  _this3.logger.debug("storage:(".concat(namespace, "): got `").concat(key, "` for first time"));
183
181
  if (key === '@') {
184
182
  self.parent.set((0, _defineProperty2.default)({}, namespace.toLowerCase(), value));
185
- } else if ((0, _lodash.result)(self[key], 'isState')) {
183
+ } else if ((0, _result2.default)(self[key], 'isState')) {
186
184
  self[key].set(value);
187
185
  } else {
188
186
  self.set(key, value);
@@ -191,7 +189,7 @@ function prepareInitialize(target, prop) {
191
189
  });
192
190
 
193
191
  // And prepare an error handler for when those keys can't be found
194
- var handle = (0, _lodash.curry)(function (key, reason) {
192
+ var handle = (0, _curry2.default)(function (key, reason) {
195
193
  if (reason instanceof _errors.NotFoundError || process.env.NODE_ENV !== 'production' && reason.toString().includes('MockNotFoundError')) {
196
194
  _this3.logger.debug("storage(".concat(namespace, "): no data for `").concat(key, "`, continuing"));
197
195
  return _promise.default.resolve();
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_common","_errors","persist","_len","arguments","length","args","Array","_key","apply","key","decider","persistDecorator","target","prop","descriptor","TypeError","value","wrap","persistExecutor","fn","_this","_len2","initializeArgs","_key2","ret","_apply","default","changeEvent","concat","on","debounce","shouldPersist","Reflect","_promise","resolve","boundedStorage","put","prepareInitialize","M","_map","S","_set","BlockingKeyMap","make","blockingKeys","waitForValue","Error","waitForValueDecorator","add","waitForValueExecutor","_this2","_len3","_key3","keys","get","all","_toConsumableArray2","map","k","waitFor","then","_typeof2","prototype","inited","identifyTarget","namespace","stack","id","has","initialize","applyInit","_len4","_key4","init","self","getNamespace","webex","identity","_this3","_len5","_key5","set","curry","logger","debug","parent","_defineProperty2","toLowerCase","result","handle","reason","NotFoundError","process","env","NODE_ENV","toString","includes","error","reject","promises","forEach","push","catch","delete","size","loaded"],"sources":["decorators.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint no-invalid-this: [0] */\n\nimport {curry, debounce, identity, result, wrap} from 'lodash';\nimport {make} from '@webex/common';\n\nimport {NotFoundError} from './errors';\n\n/**\n * Stores the result of fn before returning it\n * @param {string} key\n * @private\n * @returns {Promise} resolves with the result of fn\n */\nexport function persist(...args) {\n if (args.length === 3) {\n return persist('@')(...args);\n }\n\n const [key, decider] = args;\n\n return function persistDecorator(target, prop, descriptor) {\n if (prop !== 'initialize') {\n // Once we have class-based alternative to AmpersandState, it should be\n // detected here.\n throw new TypeError(\n '@persist can only currently be applied to AmpersandState objects or their derivatives and must be applied to the initialize method'\n );\n }\n\n descriptor.value = wrap(descriptor.value, function persistExecutor(fn, ...initializeArgs) {\n const ret = Reflect.apply(fn, this, initializeArgs);\n const changeEvent = key === '@' ? 'change' : `change:${key}`;\n\n // Some scenarios will lead to lots of change events on a single tick; we\n // really only care about writing once things have stopped changing. with\n // a debounce of zero, we're effectively coalescing all the changes\n // triggered by a single call to set() and commiting them on the next tick\n // eslint-disable-next-line no-invalid-this\n this.on(\n changeEvent,\n debounce(() => {\n const shouldPersist = !decider || Reflect.apply(decider, this, ...initializeArgs);\n\n if (!shouldPersist) {\n return Promise.resolve();\n }\n if (key === '@') {\n // eslint-disable-next-line no-invalid-this\n return this.boundedStorage.put(key, this);\n }\n\n // eslint-disable-next-line no-invalid-this\n return this.boundedStorage.put(key, this[key]);\n }, 0)\n );\n\n return ret;\n });\n\n prepareInitialize(target, prop);\n };\n}\n\nconst M = Map;\nconst S = Set;\nconst BlockingKeyMap = make(M, M, S);\nconst blockingKeys = new BlockingKeyMap();\n\n/**\n * Prevents fn from executing until key has been (attempted to be) loaded\n * @param {string} key\n * @param {Function} fn\n * @private\n * @returns {Promise} result of fn\n */\nexport function waitForValue(key) {\n if (!key) {\n throw new Error('`key` is required');\n }\n\n return function waitForValueDecorator(target, prop, descriptor) {\n blockingKeys.add(target, prop, key);\n descriptor.value = wrap(descriptor.value, function waitForValueExecutor(fn, ...args) {\n const keys = blockingKeys.get(target, prop);\n\n return Promise.all([...keys].map((k) => this.boundedStorage.waitFor(k))).then(() =>\n Reflect.apply(fn, this, args)\n );\n });\n\n // This *should* make decorators compatible with AmpersandState class\n // definitions\n if (typeof target === 'object' && !target.prototype) {\n target[prop] = descriptor.value;\n }\n\n prepareInitialize(target, prop);\n\n return descriptor;\n };\n}\n\nconst inited = new Set();\n\n/**\n * finds a means of identitying the `target` param passed to\n * `prepareInitialize()`. When possible, avoids duplicate `init()` calls if\n * namespaces collide\n *\n * @param {Object|Constructor} target\n * @private\n * @returns {String|Constructor}\n */\nfunction identifyTarget(target) {\n if (target.namespace) {\n return target.namespace;\n }\n\n return target;\n}\n\nconst stack = new Set();\n\n/**\n * @param {Function} target\n * @param {string} prop\n * @private\n * @returns {undefined}\n */\nfunction prepareInitialize(target, prop) {\n const id = identifyTarget(target);\n\n if (!inited.has(id)) {\n inited.add(id);\n if (target.initialize) {\n target.initialize = wrap(target.initialize, function applyInit(fn, ...args) {\n const ret = Reflect.apply(fn, this, args);\n\n Reflect.apply(init, this, args);\n\n return ret;\n });\n\n return;\n }\n\n target.initialize = init;\n }\n\n /**\n * @private\n * @returns {undefined}\n */\n function init() {\n const self = this;\n const namespace = this.getNamespace();\n\n this.webex.initialize = wrap(\n this.webex.initialize || identity,\n function applyInit(fn, ...args) {\n // Call webex's initalize method first\n // Reminder: in order for MockWebex to accept initial storage data, the\n // wrapped initialize() must be invoked before attempting to load data.\n // Reminder: context here is `webex`, not `self`.\n stack.add(namespace);\n Reflect.apply(fn, this, args);\n\n // Then prepare a function for setting values retrieved from storage\n const set = curry((key, value) => {\n this.logger.debug(`storage:(${namespace}): got \\`${key}\\` for first time`);\n if (key === '@') {\n self.parent.set({\n [namespace.toLowerCase()]: value,\n });\n } else if (result(self[key], 'isState')) {\n self[key].set(value);\n } else {\n self.set(key, value);\n }\n this.logger.debug(`storage:(${namespace}): set \\`${key}\\` for first time`);\n });\n\n // And prepare an error handler for when those keys can't be found\n const handle = curry((key, reason) => {\n if (\n reason instanceof NotFoundError ||\n (process.env.NODE_ENV !== 'production' &&\n reason.toString().includes('MockNotFoundError'))\n ) {\n this.logger.debug(`storage(${namespace}): no data for \\`${key}\\`, continuing`);\n\n return Promise.resolve();\n }\n this.logger.error(`storage(${namespace}): failed to init \\`${key}\\``, reason);\n\n return Promise.reject(reason);\n });\n\n // Iterate over the list of keys marked as blocking via `@waitForValue`\n const keys = blockingKeys.get(target, prop);\n const promises = [];\n\n keys.forEach((key) => {\n promises.push(this.boundedStorage.get(namespace, key).then(set(key)).catch(handle(key)));\n });\n\n Promise.all(promises).then(() => {\n stack.delete(namespace);\n if (stack.size === 0) {\n this.loaded = true;\n }\n });\n }\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_common","require","_errors","persist","_len","arguments","length","args","Array","_key","apply","key","decider","persistDecorator","target","prop","descriptor","TypeError","value","_wrap2","default","persistExecutor","fn","_this","_len2","initializeArgs","_key2","ret","_apply","changeEvent","concat","on","_debounce2","shouldPersist","Reflect","_promise","resolve","boundedStorage","put","prepareInitialize","M","_map","S","_set","BlockingKeyMap","make","blockingKeys","waitForValue","Error","waitForValueDecorator","add","waitForValueExecutor","_this2","_len3","_key3","keys","get","all","_toConsumableArray2","map","k","waitFor","then","_typeof2","prototype","inited","identifyTarget","namespace","stack","id","has","initialize","applyInit","_len4","_key4","init","self","getNamespace","webex","_identity2","_this3","_len5","_key5","set","_curry2","logger","debug","parent","_defineProperty2","toLowerCase","_result2","handle","reason","NotFoundError","process","env","NODE_ENV","toString","includes","error","reject","promises","forEach","push","catch","delete","size","loaded"],"sources":["decorators.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint no-invalid-this: [0] */\n\nimport {curry, debounce, identity, result, wrap} from 'lodash';\nimport {make} from '@webex/common';\n\nimport {NotFoundError} from './errors';\n\n/**\n * Stores the result of fn before returning it\n * @param {string} key\n * @private\n * @returns {Promise} resolves with the result of fn\n */\nexport function persist(...args) {\n if (args.length === 3) {\n return persist('@')(...args);\n }\n\n const [key, decider] = args;\n\n return function persistDecorator(target, prop, descriptor) {\n if (prop !== 'initialize') {\n // Once we have class-based alternative to AmpersandState, it should be\n // detected here.\n throw new TypeError(\n '@persist can only currently be applied to AmpersandState objects or their derivatives and must be applied to the initialize method'\n );\n }\n\n descriptor.value = wrap(descriptor.value, function persistExecutor(fn, ...initializeArgs) {\n const ret = Reflect.apply(fn, this, initializeArgs);\n const changeEvent = key === '@' ? 'change' : `change:${key}`;\n\n // Some scenarios will lead to lots of change events on a single tick; we\n // really only care about writing once things have stopped changing. with\n // a debounce of zero, we're effectively coalescing all the changes\n // triggered by a single call to set() and commiting them on the next tick\n // eslint-disable-next-line no-invalid-this\n this.on(\n changeEvent,\n debounce(() => {\n const shouldPersist = !decider || Reflect.apply(decider, this, ...initializeArgs);\n\n if (!shouldPersist) {\n return Promise.resolve();\n }\n if (key === '@') {\n // eslint-disable-next-line no-invalid-this\n return this.boundedStorage.put(key, this);\n }\n\n // eslint-disable-next-line no-invalid-this\n return this.boundedStorage.put(key, this[key]);\n }, 0)\n );\n\n return ret;\n });\n\n prepareInitialize(target, prop);\n };\n}\n\nconst M = Map;\nconst S = Set;\nconst BlockingKeyMap = make(M, M, S);\nconst blockingKeys = new BlockingKeyMap();\n\n/**\n * Prevents fn from executing until key has been (attempted to be) loaded\n * @param {string} key\n * @param {Function} fn\n * @private\n * @returns {Promise} result of fn\n */\nexport function waitForValue(key) {\n if (!key) {\n throw new Error('`key` is required');\n }\n\n return function waitForValueDecorator(target, prop, descriptor) {\n blockingKeys.add(target, prop, key);\n descriptor.value = wrap(descriptor.value, function waitForValueExecutor(fn, ...args) {\n const keys = blockingKeys.get(target, prop);\n\n return Promise.all([...keys].map((k) => this.boundedStorage.waitFor(k))).then(() =>\n Reflect.apply(fn, this, args)\n );\n });\n\n // This *should* make decorators compatible with AmpersandState class\n // definitions\n if (typeof target === 'object' && !target.prototype) {\n target[prop] = descriptor.value;\n }\n\n prepareInitialize(target, prop);\n\n return descriptor;\n };\n}\n\nconst inited = new Set();\n\n/**\n * finds a means of identitying the `target` param passed to\n * `prepareInitialize()`. When possible, avoids duplicate `init()` calls if\n * namespaces collide\n *\n * @param {Object|Constructor} target\n * @private\n * @returns {String|Constructor}\n */\nfunction identifyTarget(target) {\n if (target.namespace) {\n return target.namespace;\n }\n\n return target;\n}\n\nconst stack = new Set();\n\n/**\n * @param {Function} target\n * @param {string} prop\n * @private\n * @returns {undefined}\n */\nfunction prepareInitialize(target, prop) {\n const id = identifyTarget(target);\n\n if (!inited.has(id)) {\n inited.add(id);\n if (target.initialize) {\n target.initialize = wrap(target.initialize, function applyInit(fn, ...args) {\n const ret = Reflect.apply(fn, this, args);\n\n Reflect.apply(init, this, args);\n\n return ret;\n });\n\n return;\n }\n\n target.initialize = init;\n }\n\n /**\n * @private\n * @returns {undefined}\n */\n function init() {\n const self = this;\n const namespace = this.getNamespace();\n\n this.webex.initialize = wrap(\n this.webex.initialize || identity,\n function applyInit(fn, ...args) {\n // Call webex's initalize method first\n // Reminder: in order for MockWebex to accept initial storage data, the\n // wrapped initialize() must be invoked before attempting to load data.\n // Reminder: context here is `webex`, not `self`.\n stack.add(namespace);\n Reflect.apply(fn, this, args);\n\n // Then prepare a function for setting values retrieved from storage\n const set = curry((key, value) => {\n this.logger.debug(`storage:(${namespace}): got \\`${key}\\` for first time`);\n if (key === '@') {\n self.parent.set({\n [namespace.toLowerCase()]: value,\n });\n } else if (result(self[key], 'isState')) {\n self[key].set(value);\n } else {\n self.set(key, value);\n }\n this.logger.debug(`storage:(${namespace}): set \\`${key}\\` for first time`);\n });\n\n // And prepare an error handler for when those keys can't be found\n const handle = curry((key, reason) => {\n if (\n reason instanceof NotFoundError ||\n (process.env.NODE_ENV !== 'production' &&\n reason.toString().includes('MockNotFoundError'))\n ) {\n this.logger.debug(`storage(${namespace}): no data for \\`${key}\\`, continuing`);\n\n return Promise.resolve();\n }\n this.logger.error(`storage(${namespace}): failed to init \\`${key}\\``, reason);\n\n return Promise.reject(reason);\n });\n\n // Iterate over the list of keys marked as blocking via `@waitForValue`\n const keys = blockingKeys.get(target, prop);\n const promises = [];\n\n keys.forEach((key) => {\n promises.push(this.boundedStorage.get(namespace, key).then(set(key)).catch(handle(key)));\n });\n\n Promise.all(promises).then(() => {\n stack.delete(namespace);\n if (stack.size === 0) {\n this.loaded = true;\n }\n });\n }\n );\n }\n}\n"],"mappings":"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"}
@@ -6,15 +6,17 @@ _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = makeWebexPluginStorage;
9
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
10
- var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
11
- var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/applyDecoratedDescriptor"));
12
9
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
13
10
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
14
11
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
15
12
  var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor"));
13
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
15
+ var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/applyDecoratedDescriptor"));
16
+ var _result2 = _interopRequireDefault(require("lodash/result"));
17
+ var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
18
+ var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
16
19
  var _common = require("@webex/common");
17
- var _lodash = require("lodash");
18
20
  var _errors = require("./errors");
19
21
  /*!
20
22
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
@@ -29,19 +31,19 @@ var defers = new _weakMap.default();
29
31
  * @returns {Object}
30
32
  */
31
33
  function serialize(value) {
32
- if (!(0, _lodash.isObject)(value)) {
34
+ if (!(0, _isObject2.default)(value)) {
33
35
  return value;
34
36
  }
35
37
  var serialized = value.serialize ? value.serialize() : value;
36
38
  (0, _keys.default)(serialized).forEach(function (key) {
37
39
  var val = serialized[key];
38
- if ((0, _lodash.isArray)(val)) {
40
+ if ((0, _isArray2.default)(val)) {
39
41
  if (val.length === 0) {
40
42
  serialized[key] = undefined;
41
43
  } else {
42
44
  serialized[key] = val.map(serialize);
43
45
  }
44
- } else if ((0, _lodash.isObject)(val)) {
46
+ } else if ((0, _isObject2.default)(val)) {
45
47
  (0, _keys.default)(val).forEach(function (k) {
46
48
  val[k] = serialize(val[k]);
47
49
  });
@@ -173,7 +175,7 @@ function makeWebexPluginStorage(type, context) {
173
175
  context.logger.debug("plugin-storage(".concat(context.getNamespace(), "): got `").concat(key, "` for first time"));
174
176
  if (key === '@') {
175
177
  context.parent.set(value);
176
- } else if ((0, _lodash.result)(context[key], 'isState')) {
178
+ } else if ((0, _result2.default)(context[key], 'isState')) {
177
179
  context[key].set(value);
178
180
  } else {
179
181
  context.set(key, value);
@@ -1 +1 @@
1
- {"version":3,"names":["_common","require","_lodash","_errors","defers","_weakMap","default","serialize","value","isObject","serialized","_keys","forEach","key","val","isArray","length","undefined","map","k","empty","reduce","acc","makeWebexPluginStorage","type","context","_dec","_class","WebexPluginStorage","oneFlight","keyFactory","concat","_classCallCheck2","set","_map","_createClass2","clear","webex","del","getNamespace","_context$webex","_len","arguments","args","Array","_key","apply","get","defer","Defer","then","res","resolve","put","waitFor","logger","debug","promise","initValue","parent","result","catch","reason","NotFoundError","process","env","NODE_ENV","toString","includes","warn","reject","_applyDecoratedDescriptor2","prototype","_getOwnPropertyDescriptor"],"sources":["make-webex-plugin-store.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Defer, oneFlight} from '@webex/common';\nimport {isArray, isObject, result} from 'lodash';\n\nimport {NotFoundError} from './errors';\n\nconst defers = new WeakMap();\n\n/**\n * Walks an object before writing it to the store and omits empty arrays\n * @private\n * @param {Object} value\n * @returns {Object}\n */\nfunction serialize(value) {\n if (!isObject(value)) {\n return value;\n }\n\n const serialized = value.serialize ? value.serialize() : value;\n\n Object.keys(serialized).forEach((key) => {\n const val = serialized[key];\n\n if (isArray(val)) {\n if (val.length === 0) {\n serialized[key] = undefined;\n } else {\n serialized[key] = val.map(serialize);\n }\n } else if (isObject(val)) {\n Object.keys(val).forEach((k) => {\n val[k] = serialize(val[k]);\n });\n }\n });\n\n const empty = Object.keys(serialized).reduce((acc, key) => acc && !serialized[key], true);\n\n if (empty) {\n return undefined;\n }\n\n return serialized;\n}\n\n/**\n * [makeWebexPluginStorage description]\n * @param {[type]} type\n * @param {[type]} context\n * @private\n * @returns {[type]}\n */\nexport default function makeWebexPluginStorage(type, context) {\n /**\n * Interface between WebexPlugin and Webex#boundeStorage or\n * Webex#unboundedStorage\n */\n class WebexPluginStorage {\n /**\n * @param {Object} attrs\n * @param {Object} options\n * @returns {WebexPluginStorage}\n */\n constructor() {\n defers.set(this, new Map());\n }\n\n /**\n * Clears an entire namespace\n * @returns {Promise}\n */\n clear() {\n return context.webex[`${type}Storage`].del(context.getNamespace());\n }\n\n /**\n * Deletes the specified key from the store\n * @param {string} key\n * @returns {[type]}\n */\n del(...args) {\n return context.webex[`${type}Storage`].del(context.getNamespace(), ...args);\n }\n\n /**\n * Retrieves the value specified by key from the store. Rejects with\n * NotFoundError if no value can be found\n * @param {string} key\n * @returns {Promise}\n */\n get(key) {\n let defer = defers.get(this).get(key);\n\n if (!defer) {\n defer = new Defer();\n defers.get(this).set(key, defer);\n }\n\n return context.webex[`${type}Storage`].get(context.getNamespace(), key).then((res) => {\n defer.resolve();\n\n return res;\n });\n }\n\n /**\n * Writes a value to the store\n * @param {string} key\n * @param {any} value\n * @returns {Promise}\n */\n put(key, value) {\n return context.webex[`${type}Storage`].put(context.getNamespace(), key, serialize(value));\n }\n\n /**\n * Returns a Promise that won't resolve until the value specified by key has\n * been attempted to be loaded from the store. This allows us to lazily\n * prevent certain method from executing until the specified keys have been\n * retrieved from the store.\n * @param {string} key\n * @returns {Promise}\n */\n waitFor(key) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): waiting to init key \\`${key}\\``\n );\n const defer = defers.get(this).get(key);\n\n if (defer) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): already inited \\`${key}\\``\n );\n\n return defer.promise;\n }\n\n context.logger.debug(`plugin-storage(${context.getNamespace()}): initing \\`${key}\\``);\n\n return this.initValue(key);\n }\n\n @oneFlight({keyFactory: (key) => `initValue-${key}`})\n /**\n * Attempts to load the specified key from the store and set it on the parent\n * object.\n * @param {string} key\n * @returns {Promise} Resolves (but not with the retrieved value) when\n * the value retrieval complete\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n initValue(key) {\n const defer = new Defer();\n\n defers.get(this).set(key, defer);\n\n // Intentionally bypasses this.get so we don't resolve the promise until\n // after the parent value is set.\n context.webex[`${type}Storage`]\n .get(context.getNamespace(), key)\n .then((value) => {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): got \\`${key}\\` for first time`\n );\n if (key === '@') {\n context.parent.set(value);\n } else if (result(context[key], 'isState')) {\n context[key].set(value);\n } else {\n context.set(key, value);\n }\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): set \\`${key}\\` for first time`\n );\n defer.resolve();\n context.logger.debug(`plugin-storage(${context.getNamespace()}): inited \\`${key}\\``);\n })\n .catch((reason) => {\n // The next conditional is a bit of an unfortunate solution to deal\n // with circular dependencies in unit tests. It should not effect\n // integration tests or production code.\n if (\n reason instanceof NotFoundError ||\n (process.env.NODE_ENV !== 'production' &&\n reason.toString().includes('MockNotFoundError'))\n ) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): no data for \\`${key}\\`, continuing`\n );\n\n return defer.resolve();\n }\n context.logger.warn(\n `plugin-storage(${context.getNamespace()}): failed to init \\`${key}\\``,\n reason\n );\n\n return defer.reject(reason);\n });\n\n return defer.promise;\n }\n }\n\n return new WebexPluginStorage();\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_common","require","_errors","defers","_weakMap","default","serialize","value","_isObject2","serialized","_keys","forEach","key","val","_isArray2","length","undefined","map","k","empty","reduce","acc","makeWebexPluginStorage","type","context","_dec","_class","WebexPluginStorage","oneFlight","keyFactory","concat","_classCallCheck2","set","_map","_createClass2","clear","webex","del","getNamespace","_context$webex","_len","arguments","args","Array","_key","apply","get","defer","Defer","then","res","resolve","put","waitFor","logger","debug","promise","initValue","parent","_result2","catch","reason","NotFoundError","process","env","NODE_ENV","toString","includes","warn","reject","_applyDecoratedDescriptor2","prototype","_getOwnPropertyDescriptor"],"sources":["make-webex-plugin-store.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Defer, oneFlight} from '@webex/common';\nimport {isArray, isObject, result} from 'lodash';\n\nimport {NotFoundError} from './errors';\n\nconst defers = new WeakMap();\n\n/**\n * Walks an object before writing it to the store and omits empty arrays\n * @private\n * @param {Object} value\n * @returns {Object}\n */\nfunction serialize(value) {\n if (!isObject(value)) {\n return value;\n }\n\n const serialized = value.serialize ? value.serialize() : value;\n\n Object.keys(serialized).forEach((key) => {\n const val = serialized[key];\n\n if (isArray(val)) {\n if (val.length === 0) {\n serialized[key] = undefined;\n } else {\n serialized[key] = val.map(serialize);\n }\n } else if (isObject(val)) {\n Object.keys(val).forEach((k) => {\n val[k] = serialize(val[k]);\n });\n }\n });\n\n const empty = Object.keys(serialized).reduce((acc, key) => acc && !serialized[key], true);\n\n if (empty) {\n return undefined;\n }\n\n return serialized;\n}\n\n/**\n * [makeWebexPluginStorage description]\n * @param {[type]} type\n * @param {[type]} context\n * @private\n * @returns {[type]}\n */\nexport default function makeWebexPluginStorage(type, context) {\n /**\n * Interface between WebexPlugin and Webex#boundeStorage or\n * Webex#unboundedStorage\n */\n class WebexPluginStorage {\n /**\n * @param {Object} attrs\n * @param {Object} options\n * @returns {WebexPluginStorage}\n */\n constructor() {\n defers.set(this, new Map());\n }\n\n /**\n * Clears an entire namespace\n * @returns {Promise}\n */\n clear() {\n return context.webex[`${type}Storage`].del(context.getNamespace());\n }\n\n /**\n * Deletes the specified key from the store\n * @param {string} key\n * @returns {[type]}\n */\n del(...args) {\n return context.webex[`${type}Storage`].del(context.getNamespace(), ...args);\n }\n\n /**\n * Retrieves the value specified by key from the store. Rejects with\n * NotFoundError if no value can be found\n * @param {string} key\n * @returns {Promise}\n */\n get(key) {\n let defer = defers.get(this).get(key);\n\n if (!defer) {\n defer = new Defer();\n defers.get(this).set(key, defer);\n }\n\n return context.webex[`${type}Storage`].get(context.getNamespace(), key).then((res) => {\n defer.resolve();\n\n return res;\n });\n }\n\n /**\n * Writes a value to the store\n * @param {string} key\n * @param {any} value\n * @returns {Promise}\n */\n put(key, value) {\n return context.webex[`${type}Storage`].put(context.getNamespace(), key, serialize(value));\n }\n\n /**\n * Returns a Promise that won't resolve until the value specified by key has\n * been attempted to be loaded from the store. This allows us to lazily\n * prevent certain method from executing until the specified keys have been\n * retrieved from the store.\n * @param {string} key\n * @returns {Promise}\n */\n waitFor(key) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): waiting to init key \\`${key}\\``\n );\n const defer = defers.get(this).get(key);\n\n if (defer) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): already inited \\`${key}\\``\n );\n\n return defer.promise;\n }\n\n context.logger.debug(`plugin-storage(${context.getNamespace()}): initing \\`${key}\\``);\n\n return this.initValue(key);\n }\n\n @oneFlight({keyFactory: (key) => `initValue-${key}`})\n /**\n * Attempts to load the specified key from the store and set it on the parent\n * object.\n * @param {string} key\n * @returns {Promise} Resolves (but not with the retrieved value) when\n * the value retrieval complete\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n initValue(key) {\n const defer = new Defer();\n\n defers.get(this).set(key, defer);\n\n // Intentionally bypasses this.get so we don't resolve the promise until\n // after the parent value is set.\n context.webex[`${type}Storage`]\n .get(context.getNamespace(), key)\n .then((value) => {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): got \\`${key}\\` for first time`\n );\n if (key === '@') {\n context.parent.set(value);\n } else if (result(context[key], 'isState')) {\n context[key].set(value);\n } else {\n context.set(key, value);\n }\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): set \\`${key}\\` for first time`\n );\n defer.resolve();\n context.logger.debug(`plugin-storage(${context.getNamespace()}): inited \\`${key}\\``);\n })\n .catch((reason) => {\n // The next conditional is a bit of an unfortunate solution to deal\n // with circular dependencies in unit tests. It should not effect\n // integration tests or production code.\n if (\n reason instanceof NotFoundError ||\n (process.env.NODE_ENV !== 'production' &&\n reason.toString().includes('MockNotFoundError'))\n ) {\n context.logger.debug(\n `plugin-storage(${context.getNamespace()}): no data for \\`${key}\\`, continuing`\n );\n\n return defer.resolve();\n }\n context.logger.warn(\n `plugin-storage(${context.getNamespace()}): failed to init \\`${key}\\``,\n reason\n );\n\n return defer.reject(reason);\n });\n\n return defer.promise;\n }\n }\n\n return new WebexPluginStorage();\n}\n"],"mappings":"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"}