@webex/webex-core 3.12.0-next.35 → 3.12.0-next.36
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.
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/lib/batcher.js +1 -1
- package/dist/lib/credentials/credentials.js +1 -1
- package/dist/lib/credentials/token.js +1 -1
- package/dist/lib/services/services.js +1 -1
- package/dist/lib/services-v2/services-v2.js +9 -5
- package/dist/lib/services-v2/services-v2.js.map +1 -1
- package/dist/plugins/logger.js +1 -1
- package/dist/webex-core.js +2 -2
- package/package.json +3 -3
- package/src/config.js +7 -0
- package/src/lib/services-v2/services-v2.ts +5 -1
- package/test/unit/spec/services-v2/services-v2.ts +16 -0
package/dist/config.js
CHANGED
|
@@ -31,6 +31,12 @@ var _default = exports.default = {
|
|
|
31
31
|
* @type {boolean}
|
|
32
32
|
*/
|
|
33
33
|
useUserOnboardingServiceForActivations: false,
|
|
34
|
+
/**
|
|
35
|
+
* When true, requests the U2C catalog override.
|
|
36
|
+
*
|
|
37
|
+
* @type {boolean}
|
|
38
|
+
*/
|
|
39
|
+
useCatalogOverride: false,
|
|
34
40
|
/**
|
|
35
41
|
* Maximum time (in milliseconds) to wait for the initial service catalog
|
|
36
42
|
* collection when `waitForCatalogInit` is enabled, before letting
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_storage","require","_credentialsConfig","_interopRequireDefault","_default","exports","default","maxAppLevelRedirects","maxLocusRedirects","maxAuthenticationReplays","maxReconnectAttempts","onBeforeLogout","trackingIdPrefix","trackingIdSuffix","AlternateLogger","undefined","credentials","CredentialsConfig","fedramp","process","env","ENABLE_FEDRAMP","services","useUserOnboardingServiceForActivations","catalogInitTimeout","discovery","hydra","HYDRA_SERVICE_URL","sqdiscovery","SQDISCOVERY_SERVICE_URL","u2c","U2C_SERVICE_URL","validateDomains","servicesNotNeedValidation","allowedDomains","device","preDiscoveryServices","hydraServiceUrl","metrics","type","calling","cacheU2C","payloadTransformer","predicates","transforms","storage","boundedAdapter","MemoryStoreAdapter","unboundedAdapter"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport {MemoryStoreAdapter} from './lib/storage';\nimport CredentialsConfig from './credentials-config';\n\nexport default {\n maxAppLevelRedirects: 10,\n maxLocusRedirects: 5,\n maxAuthenticationReplays: 1,\n maxReconnectAttempts: 1,\n onBeforeLogout: [],\n trackingIdPrefix: 'webex-js-sdk',\n trackingIdSuffix: '',\n AlternateLogger: undefined,\n credentials: new CredentialsConfig(),\n fedramp: process.env.ENABLE_FEDRAMP || false,\n services: {\n /**\n * When true, uses the user-onboarding service for user activation.\n * When false (default), uses the license service.\n *\n * @type {boolean}\n */\n useUserOnboardingServiceForActivations: false,\n\n /**\n * Maximum time (in milliseconds) to wait for the initial service catalog\n * collection when `waitForCatalogInit` is enabled, before letting\n * `services.ready` (and therefore `webex.ready`) fire anyway. Prevents a\n * hung catalog request from leaving the app on a permanent spinner.\n *\n * @type {number}\n */\n catalogInitTimeout: 15000,\n\n /**\n * A list of services that are available prior to catalog collection.\n *\n * @type {Object}\n */\n discovery: {\n /**\n * The hydra discovery url.\n *\n * @type {string}\n */\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n\n /**\n * load balanced region info url\n */\n sqdiscovery: process.env.SQDISCOVERY_SERVICE_URL || 'https://ds.ciscospark.com/v1/region',\n\n /**\n * The u2c discovery url\n *\n * @type {string}\n */\n u2c: process.env.U2C_SERVICE_URL || 'https://u2c.wbx2.com/u2c/api/v1',\n },\n\n /**\n * When true, considers all urls in `allowedDomains` as safe for auth tokens\n *\n * @type {boolean}\n */\n validateDomains: true,\n\n /**\n * services that don't need auth validation\n */\n\n servicesNotNeedValidation: ['webex-appapi-service'],\n\n /**\n * Contains a list of allowed domain host addresses.\n *\n * @type {Array<string>}\n */\n allowedDomains: [],\n },\n device: {\n preDiscoveryServices: {\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n hydraServiceUrl: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n },\n validateDomains: true,\n },\n metrics: {\n type: ['behavioral', 'operational'],\n },\n calling: {\n /**\n * Controls whether U2C service catalogs should be cached and warmed from cache.\n * When false, the services layer will skip reading and writing the U2C cache.\n */\n cacheU2C: false,\n },\n payloadTransformer: {\n predicates: [],\n transforms: [],\n },\n storage: {\n boundedAdapter: MemoryStoreAdapter,\n unboundedAdapter: MemoryStoreAdapter,\n },\n};\n"],"mappings":";;;;;;;;AAMA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAPA;AACA;AACA;AAEA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAKe;EACbC,oBAAoB,EAAE,EAAE;EACxBC,iBAAiB,EAAE,CAAC;EACpBC,wBAAwB,EAAE,CAAC;EAC3BC,oBAAoB,EAAE,CAAC;EACvBC,cAAc,EAAE,EAAE;EAClBC,gBAAgB,EAAE,cAAc;EAChCC,gBAAgB,EAAE,EAAE;EACpBC,eAAe,EAAEC,SAAS;EAC1BC,WAAW,EAAE,IAAIC,0BAAiB,CAAC,CAAC;EACpCC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAI,KAAK;EAC5CC,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;IACIC,sCAAsC,EAAE,KAAK;IAE7C;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IAEzB;AACJ;AACA;AACA;AACA;IACIC,SAAS,EAAE;MACT;AACN;AACA;AACA;AACA;MACMC,KAAK,
|
|
1
|
+
{"version":3,"names":["_storage","require","_credentialsConfig","_interopRequireDefault","_default","exports","default","maxAppLevelRedirects","maxLocusRedirects","maxAuthenticationReplays","maxReconnectAttempts","onBeforeLogout","trackingIdPrefix","trackingIdSuffix","AlternateLogger","undefined","credentials","CredentialsConfig","fedramp","process","env","ENABLE_FEDRAMP","services","useUserOnboardingServiceForActivations","useCatalogOverride","catalogInitTimeout","discovery","hydra","HYDRA_SERVICE_URL","sqdiscovery","SQDISCOVERY_SERVICE_URL","u2c","U2C_SERVICE_URL","validateDomains","servicesNotNeedValidation","allowedDomains","device","preDiscoveryServices","hydraServiceUrl","metrics","type","calling","cacheU2C","payloadTransformer","predicates","transforms","storage","boundedAdapter","MemoryStoreAdapter","unboundedAdapter"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport {MemoryStoreAdapter} from './lib/storage';\nimport CredentialsConfig from './credentials-config';\n\nexport default {\n maxAppLevelRedirects: 10,\n maxLocusRedirects: 5,\n maxAuthenticationReplays: 1,\n maxReconnectAttempts: 1,\n onBeforeLogout: [],\n trackingIdPrefix: 'webex-js-sdk',\n trackingIdSuffix: '',\n AlternateLogger: undefined,\n credentials: new CredentialsConfig(),\n fedramp: process.env.ENABLE_FEDRAMP || false,\n services: {\n /**\n * When true, uses the user-onboarding service for user activation.\n * When false (default), uses the license service.\n *\n * @type {boolean}\n */\n useUserOnboardingServiceForActivations: false,\n\n /**\n * When true, requests the U2C catalog override.\n *\n * @type {boolean}\n */\n useCatalogOverride: false,\n\n /**\n * Maximum time (in milliseconds) to wait for the initial service catalog\n * collection when `waitForCatalogInit` is enabled, before letting\n * `services.ready` (and therefore `webex.ready`) fire anyway. Prevents a\n * hung catalog request from leaving the app on a permanent spinner.\n *\n * @type {number}\n */\n catalogInitTimeout: 15000,\n\n /**\n * A list of services that are available prior to catalog collection.\n *\n * @type {Object}\n */\n discovery: {\n /**\n * The hydra discovery url.\n *\n * @type {string}\n */\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n\n /**\n * load balanced region info url\n */\n sqdiscovery: process.env.SQDISCOVERY_SERVICE_URL || 'https://ds.ciscospark.com/v1/region',\n\n /**\n * The u2c discovery url\n *\n * @type {string}\n */\n u2c: process.env.U2C_SERVICE_URL || 'https://u2c.wbx2.com/u2c/api/v1',\n },\n\n /**\n * When true, considers all urls in `allowedDomains` as safe for auth tokens\n *\n * @type {boolean}\n */\n validateDomains: true,\n\n /**\n * services that don't need auth validation\n */\n\n servicesNotNeedValidation: ['webex-appapi-service'],\n\n /**\n * Contains a list of allowed domain host addresses.\n *\n * @type {Array<string>}\n */\n allowedDomains: [],\n },\n device: {\n preDiscoveryServices: {\n hydra: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n hydraServiceUrl: process.env.HYDRA_SERVICE_URL || 'https://api.ciscospark.com/v1',\n },\n validateDomains: true,\n },\n metrics: {\n type: ['behavioral', 'operational'],\n },\n calling: {\n /**\n * Controls whether U2C service catalogs should be cached and warmed from cache.\n * When false, the services layer will skip reading and writing the U2C cache.\n */\n cacheU2C: false,\n },\n payloadTransformer: {\n predicates: [],\n transforms: [],\n },\n storage: {\n boundedAdapter: MemoryStoreAdapter,\n unboundedAdapter: MemoryStoreAdapter,\n },\n};\n"],"mappings":";;;;;;;;AAMA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAPA;AACA;AACA;AAEA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAKe;EACbC,oBAAoB,EAAE,EAAE;EACxBC,iBAAiB,EAAE,CAAC;EACpBC,wBAAwB,EAAE,CAAC;EAC3BC,oBAAoB,EAAE,CAAC;EACvBC,cAAc,EAAE,EAAE;EAClBC,gBAAgB,EAAE,cAAc;EAChCC,gBAAgB,EAAE,EAAE;EACpBC,eAAe,EAAEC,SAAS;EAC1BC,WAAW,EAAE,IAAIC,0BAAiB,CAAC,CAAC;EACpCC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAI,KAAK;EAC5CC,QAAQ,EAAE;IACR;AACJ;AACA;AACA;AACA;AACA;IACIC,sCAAsC,EAAE,KAAK;IAE7C;AACJ;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IAEzB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,kBAAkB,EAAE,KAAK;IAEzB;AACJ;AACA;AACA;AACA;IACIC,SAAS,EAAE;MACT;AACN;AACA;AACA;AACA;MACMC,KAAK,EAAER,OAAO,CAACC,GAAG,CAACQ,iBAAiB,IAAI,+BAA+B;MAEvE;AACN;AACA;MACMC,WAAW,EAAEV,OAAO,CAACC,GAAG,CAACU,uBAAuB,IAAI,qCAAqC;MAEzF;AACN;AACA;AACA;AACA;MACMC,GAAG,EAAEZ,OAAO,CAACC,GAAG,CAACY,eAAe,IAAI;IACtC,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAE,IAAI;IAErB;AACJ;AACA;;IAEIC,yBAAyB,EAAE,CAAC,sBAAsB,CAAC;IAEnD;AACJ;AACA;AACA;AACA;IACIC,cAAc,EAAE;EAClB,CAAC;EACDC,MAAM,EAAE;IACNC,oBAAoB,EAAE;MACpBV,KAAK,EAAER,OAAO,CAACC,GAAG,CAACQ,iBAAiB,IAAI,+BAA+B;MACvEU,eAAe,EAAEnB,OAAO,CAACC,GAAG,CAACQ,iBAAiB,IAAI;IACpD,CAAC;IACDK,eAAe,EAAE;EACnB,CAAC;EACDM,OAAO,EAAE;IACPC,IAAI,EAAE,CAAC,YAAY,EAAE,aAAa;EACpC,CAAC;EACDC,OAAO,EAAE;IACP;AACJ;AACA;AACA;IACIC,QAAQ,EAAE;EACZ,CAAC;EACDC,kBAAkB,EAAE;IAClBC,UAAU,EAAE,EAAE;IACdC,UAAU,EAAE;EACd,CAAC;EACDC,OAAO,EAAE;IACPC,cAAc,EAAEC,2BAAkB;IAClCC,gBAAgB,EAAED;EACpB;AACF,CAAC","ignoreList":[]}
|
package/dist/lib/batcher.js
CHANGED
|
@@ -302,7 +302,7 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
302
302
|
fingerprintResponse: function fingerprintResponse(item) {
|
|
303
303
|
throw new Error('fingerprintResponse() must be implemented');
|
|
304
304
|
},
|
|
305
|
-
version: "3.12.0-next.
|
|
305
|
+
version: "3.12.0-next.36"
|
|
306
306
|
});
|
|
307
307
|
var _default2 = exports.default = Batcher;
|
|
308
308
|
//# sourceMappingURL=batcher.js.map
|
|
@@ -600,7 +600,7 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
|
|
|
600
600
|
this.refresh();
|
|
601
601
|
}
|
|
602
602
|
},
|
|
603
|
-
version: "3.12.0-next.
|
|
603
|
+
version: "3.12.0-next.36"
|
|
604
604
|
}, (0, _applyDecoratedDescriptor2.default)(_obj, "getUserToken", [_dec, _dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "getUserToken"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "initialize", [_dec3], (0, _getOwnPropertyDescriptor.default)(_obj, "initialize"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "invalidate", [_common.oneFlight, _dec4], (0, _getOwnPropertyDescriptor.default)(_obj, "invalidate"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "refresh", [_common.oneFlight, _dec5, _dec6], (0, _getOwnPropertyDescriptor.default)(_obj, "refresh"), _obj), _obj));
|
|
605
605
|
var _default = exports.default = Credentials;
|
|
606
606
|
//# sourceMappingURL=credentials.js.map
|
|
@@ -532,7 +532,7 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
|
|
|
532
532
|
return res.body;
|
|
533
533
|
});
|
|
534
534
|
},
|
|
535
|
-
version: "3.12.0-next.
|
|
535
|
+
version: "3.12.0-next.36"
|
|
536
536
|
}, (0, _applyDecoratedDescriptor2.default)(_obj, "downscope", [_dec], (0, _getOwnPropertyDescriptor.default)(_obj, "downscope"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "refresh", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "refresh"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "revoke", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "revoke"), _obj), _obj));
|
|
537
537
|
var _default = exports.default = Token;
|
|
538
538
|
//# sourceMappingURL=token.js.map
|
|
@@ -1611,7 +1611,7 @@ var Services = _webexPlugin.default.extend({
|
|
|
1611
1611
|
}, _callee6);
|
|
1612
1612
|
})));
|
|
1613
1613
|
},
|
|
1614
|
-
version: "3.12.0-next.
|
|
1614
|
+
version: "3.12.0-next.36"
|
|
1615
1615
|
});
|
|
1616
1616
|
/* eslint-enable no-underscore-dangle */
|
|
1617
1617
|
var _default = exports.default = Services;
|
|
@@ -1188,7 +1188,9 @@ var Services = _webexPlugin.default.extend({
|
|
|
1188
1188
|
* @returns {Promise<object>}
|
|
1189
1189
|
*/
|
|
1190
1190
|
_fetchNewServiceHostmap: function _fetchNewServiceHostmap() {
|
|
1191
|
-
var
|
|
1191
|
+
var _this$webex$config2,
|
|
1192
|
+
_this$webex$config2$s,
|
|
1193
|
+
_this1 = this;
|
|
1192
1194
|
var _ref11 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
1193
1195
|
from = _ref11.from,
|
|
1194
1196
|
query = _ref11.query,
|
|
@@ -1198,6 +1200,8 @@ var Services = _webexPlugin.default.extend({
|
|
|
1198
1200
|
var resource = from ? "/".concat(from, "/catalog") : '/catalog';
|
|
1199
1201
|
var qs = _objectSpread(_objectSpread({}, query || {}), {}, {
|
|
1200
1202
|
format: 'U2CV2'
|
|
1203
|
+
}, ((_this$webex$config2 = this.webex.config) === null || _this$webex$config2 === void 0 ? void 0 : (_this$webex$config2$s = _this$webex$config2.services) === null || _this$webex$config2$s === void 0 ? void 0 : _this$webex$config2$s.useCatalogOverride) && {
|
|
1204
|
+
useCatalogOverride: true
|
|
1201
1205
|
});
|
|
1202
1206
|
if (forceRefresh) {
|
|
1203
1207
|
qs.timestamp = new Date().getTime();
|
|
@@ -1230,9 +1234,9 @@ var Services = _webexPlugin.default.extend({
|
|
|
1230
1234
|
var _this10 = this;
|
|
1231
1235
|
// Get the catalog and destructure the services config.
|
|
1232
1236
|
var catalog = this._getCatalog();
|
|
1233
|
-
var _this$webex$
|
|
1234
|
-
services = _this$webex$
|
|
1235
|
-
fedramp = _this$webex$
|
|
1237
|
+
var _this$webex$config3 = this.webex.config,
|
|
1238
|
+
services = _this$webex$config3.services,
|
|
1239
|
+
fedramp = _this$webex$config3.fedramp;
|
|
1236
1240
|
|
|
1237
1241
|
// Validate that the services configuration exists.
|
|
1238
1242
|
if (services) {
|
|
@@ -1542,7 +1546,7 @@ var Services = _webexPlugin.default.extend({
|
|
|
1542
1546
|
}, _callee5);
|
|
1543
1547
|
})));
|
|
1544
1548
|
},
|
|
1545
|
-
version: "3.12.0-next.
|
|
1549
|
+
version: "3.12.0-next.36"
|
|
1546
1550
|
});
|
|
1547
1551
|
/* eslint-enable no-underscore-dangle */
|
|
1548
1552
|
var _default = exports.default = Services;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_sha","_interopRequireDefault","require","_lodash","_webexPlugin","_metrics","_serviceCatalog","_serviceFedRamp","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","trailingSlashes","DEFAULT_CLUSTER","exports","DEFAULT_CLUSTER_SERVICE","CLUSTER_SERVICE","process","env","WEBEX_CONVERSATION_CLUSTER_SERVICE","DEFAULT_CLUSTER_IDENTIFIER","WEBEX_CONVERSATION_DEFAULT_CLUSTER","concat","CATALOG_CACHE_KEY_V2","CATALOG_TTL_MS","Services","WebexPlugin","extend","namespace","props","validateDomains","initFailed","session","ready","type","_catalogs","_weakMap","_activeServices","_services","_getCatalog","get","webex","_getLocalStorageSafe","window","localStorage","getIntendedPreauthSelection","currentOrgId","_this$webex$credentia","credentials","canAuthorize","selectionType","selectionValue","emailConfig","config","email","trim","sha256","toLowerCase","toString","name","serviceGroup","catalog","clusterId","urlById","urlByName","undefined","hasAllowedDomains","getAllowedDomains","markFailedUrl","url","markFailedServiceUrl","getMobiusClusters","logger","info","clusters","services","service","serviceName","_isArray","serviceUrls","serviceUrl","modifiedHost","baseUrl","replace","find","c","host","priority","id","ttl","isValidHost","some","_URL","serviceHost","URL","isIntegrationEnvironment","_this$webex","_this$webex$config","_this$webex$config$se","_this$webex$config$se2","u2cUrl","discovery","u2c","isInt","includes","error","_updateActiveServices","activeServices","_updateServices","unionBy","updateServices","_catalog$status","_catalog$status$servi","_this","_ref","from","query","token","forceRefresh","formattedQuery","status","collecting","waitForCatalog","queryKey","_keys","_promise","reject","Error","emailhash","_fetchNewServiceHostmap","then","serviceHostMap","updateServiceGroups","timestamp","selectionMeta","key","_cacheCatalog","updateCredentialsConfig","catch","validateUser","_ref2","_this2","_ref2$reqId","reqId","_ref2$forceRefresh","_ref2$activationOptio","activationOptions","preloginUserId","getUserToken","sendUserActivation","userObj","activated","exists","details","user","_this$webex$credentia2","client_id","client_secret","collectPreauthCatalog","idbrokerService","getClientToken","uri","scope","tokenObj","collectSigninCatalog","rto","all","_ref3","_ref4","_slicedToArray2","response","statusCode","responseText","body","message","switchActiveClusterIds","newActiveClusters","_this3","newActiveClusterIds","_values","missingClusterIds","warn","initServiceCatalogs","resolve","invalidateCache","_this$_getCatalog","lastTime","toNumber","invalidateTime","getMeetingPreferences","_this4","request","method","resource","res","err","fetchClientRegionInfo","_this5","sqdiscovery","addAuthHeader","headers","timeout","_ref5","_this6","countryCode","timezone","clientRegionInfo","_this6$webex$config$s","useUserOnboarding","useUserOnboardingServiceForActivations","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","updateCatalog","hostMap","_formatReceivedHostmap","mode","_ref7","idbrokerUrl","identityUrl","_this$webex$config$cr","authorizationString","authorizeUrl","setConfig","idbroker","identity","supertoken","access_token","postauth","preauth","waitForService","_ref8","_this7","_ref8$timeout","fetchFromServiceUrl","servicesNotNeedValidation","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","replaceHostFromHostmap","convertUrlToPriorityHostUrl","_unused","_formatHostMapEntry","_ref9","formattedServiceUrls","_ref0","_this8","orgId","format","formattedHostmap","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref1","_ref1$cluster","cluster","split","_ref10","findServiceDetailFromUrl","defaultUrl","startsWith","href","isAllowedDomainUrl","findAllowedDomain","data","meta","_this9","_asyncToGenerator2","_regenerator","mark","_callee","current","_this9$webex$config","_this9$webex$config$c","_this9$webex","_this9$webex$config2","_this9$webex2","_this9$webex2$config","_this9$webex2$config$","_this9$webex2$config$2","_ls","cachedJson","_current","fedramp","u2cDiscoveryUrl","updated","ls","_t","wrap","_context","prev","next","calling","cacheU2C","abrupt","getItem","JSON","parse","_unused2","getOrgId","_unused3","_now","setItem","_stringify","stop","_loadCatalogFromCache","_this0","_callee2","_this0$webex$config","_this0$webex$config$c","_this0$webex$config2","_this0$webex$config3","_this0$webex$config3$","_this0$webex$config3$2","cached","cachedAt","_this0$webex$credenti","currentEnv","sameEnv","groups","_t2","_t3","_context2","Number","clearCatalogCache","cachedGroup","intended","matches","removeItem","_this1","_ref11","qs","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref12","initConfig","_this10","_this$webex$config2","fedRampServices","formattedDiscoveryServices","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this11","refresh","_finalizeReady","_this12","_callee3","_context3","isRefreshing","once","initialize","_this13","ServiceCatalog","set","listenToOnce","_this13$webex$config","_this13$webex$config$","waitForCatalogInit","_initializeCatalogsGated","_initializeCatalogsUngated","_this14","_callee4","warmed","_context4","sent","_this15","_callee5","_this15$webex$config","_this15$webex$config$","initTimeoutMs","initServiceCatalogsTimeout","_context5","catalogInitTimeout","_","setTimeout","race","finally","version","_default"],"sources":["services-v2.ts"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {toNumber, union, unionBy} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from '../metrics';\nimport ServiceCatalog from './service-catalog';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from '../constants';\nimport {\n ActiveServices,\n IServiceCatalog,\n QueryOptions,\n Service,\n ServiceHostmap,\n ServiceGroup,\n ServiceHost,\n SelectionMeta,\n} from './types';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n// The default cluster when one is not provided (usually as 'US' from hydra)\nexport const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';\n// The default service name for convo (currently identityLookup due to some weird CSB issue)\nexport const DEFAULT_CLUSTER_SERVICE = 'identityLookup';\n\nconst CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;\nconst DEFAULT_CLUSTER_IDENTIFIER =\n process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;\n\nconst CATALOG_CACHE_KEY_V2 = 'services.v2.u2cHostMap';\nconst CATALOG_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n session: {\n /**\n * Becomes `true` once the initial catalog collection has completed\n * (successfully or otherwise) and any in-flight credentials refresh has\n * settled. Blocks `webex.ready` so consumers can rely on `webex.ready`\n * implying \"catalogs populated AND credential state stable\".\n * @instance\n * @memberof Services\n * @type {boolean}\n */\n ready: {\n default: false,\n type: 'boolean',\n },\n },\n\n _catalogs: new WeakMap(),\n\n _activeServices: {},\n\n _services: [],\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {IServiceCatalog}\n */\n _getCatalog(): IServiceCatalog {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Safely access localStorage if available; returns the Storage or null.\n * @returns {Storage | null}\n */\n _getLocalStorageSafe(): Storage | null {\n if (typeof window !== 'undefined' && (window as any).localStorage) {\n return (window as any).localStorage as Storage;\n }\n\n return null;\n },\n\n /**\n * Determine the intended preauth selection based on the current context.\n * @param {string} [currentOrgId]\n * @returns {{selectionType: string, selectionValue: string}}\n */\n getIntendedPreauthSelection(currentOrgId?: string): {\n selectionType: string;\n selectionValue: string;\n } {\n if (this.webex.credentials?.canAuthorize) {\n if (currentOrgId) {\n return {selectionType: 'orgId', selectionValue: currentOrgId};\n }\n }\n\n const emailConfig = this.webex.config && this.webex.config.email;\n\n if (typeof emailConfig === 'string' && emailConfig.trim()) {\n return {\n selectionType: 'emailhash',\n selectionValue: sha256(emailConfig.toLowerCase()).toString(),\n };\n }\n\n // fall back to proximity mode when no orgId or email available\n return {selectionType: 'mode', selectionValue: 'DEFAULT_BY_PROXIMITY'};\n },\n\n /**\n * Get a service url from the current services list by name\n * from the associated instance catalog.\n * @param {string} name\n * @param {ServiceGroup} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name: string, serviceGroup?: ServiceGroup): string | undefined {\n const catalog = this._getCatalog();\n\n const clusterId = this._activeServices[name];\n\n const urlById = catalog.get(clusterId, serviceGroup);\n const urlByName = catalog.get(name, serviceGroup);\n\n // if both are undefined, then we cannot find the service\n if (!urlById && !urlByName) {\n return undefined;\n }\n\n return urlById || urlByName;\n },\n\n /**\n * Determine if a whilelist exists in the service catalog.\n *\n * @returns {boolean} - True if a allowed domains list exists.\n */\n hasAllowedDomains(): boolean {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the service url associated with the\n * `ServiceDetail` to be removed from the its\n * respective service url array, and then return the next\n * viable service url from the `ServiceDetail` service url array.\n * @param {string} url\n * @returns {string}\n */\n markFailedUrl(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.markFailedServiceUrl(url);\n },\n\n /**\n * Get all Mobius cluster host entries from the v2 services list.\n * @returns {Array<ServiceHost>} - An array of `ServiceHost` objects.\n */\n getMobiusClusters(): Array<ServiceHost> {\n this.logger.info('services: fetching mobius clusters');\n const clusters: Array<ServiceHost> = [];\n const services: Array<Service> = this._services || [];\n\n services\n .filter(\n (service) =>\n service?.serviceName === 'mobius' &&\n Array.isArray(service.serviceUrls) &&\n service.serviceUrls.length > 0\n )\n .forEach((service) => {\n service.serviceUrls.forEach((serviceUrl) => {\n const modifiedHost = serviceUrl.baseUrl.replace('https://', '').replace('/api/v1', '');\n if (!clusters.find((c) => c && c.host === modifiedHost)) {\n clusters.push({\n host: modifiedHost,\n priority: serviceUrl.priority,\n id: service.id,\n ttl: 0,\n });\n }\n });\n });\n\n return clusters;\n },\n\n /**\n * Check is valid host from services list.\n * @param {string} host\n * @returns {Boolean}\n */\n isValidHost(host: string): boolean {\n const services: Array<Service> = this._services || [];\n\n return services.some((service) => {\n return service.serviceUrls.some((serviceUrl) => {\n const serviceHost = serviceUrl?.baseUrl && new URL(serviceUrl.baseUrl)?.host;\n\n return serviceHost === host;\n });\n });\n },\n\n /**\n * Checks if the current environment is an integration (INT) environment\n * by examining the u2c discovery URL from webex config.\n * INT environments use discovery URLs containing 'intb' (e.g., u2c-intb.ciscospark.com).\n * @returns {boolean} True if INT environment, false otherwise\n */\n isIntegrationEnvironment(): boolean {\n try {\n const u2cUrl = this.webex?.config?.services?.discovery?.u2c || '';\n const isInt = u2cUrl.includes('intb');\n\n this.logger.info(`services: isIntegrationEnvironment: ${isInt}`);\n\n return isInt;\n } catch (error) {\n this.logger.error('services: failed to determine integration environment', error);\n\n return false;\n }\n },\n /**\n * saves all the services from the pre and post catalog service\n * @param {ActiveServices} activeServices\n * @returns {void}\n */\n _updateActiveServices(activeServices: ActiveServices): void {\n this._activeServices = {...this._activeServices, ...activeServices};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Array<Service>} services\n * @returns {void}\n */\n _updateServices(services: Array<Service>): void {\n this._services = unionBy(services, this._services, 'id');\n },\n\n /**\n * Update a list of `serviceUrls` to the most current\n * catalog via the defined `discoveryUrl` then returns the current\n * list of services.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n updateServices(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const catalog = this._getCatalog();\n let formattedQuery;\n let serviceGroup;\n\n // map catalog name to service group name.\n switch (from) {\n case 'limited':\n serviceGroup = 'preauth';\n break;\n case 'signin':\n serviceGroup = 'signin';\n break;\n default:\n serviceGroup = 'postauth';\n break;\n }\n // confirm catalog update for group is not in progress.\n if (catalog.status?.[serviceGroup]?.collecting) {\n return this.waitForCatalog(serviceGroup);\n }\n\n catalog.status[serviceGroup].collecting = true;\n\n if (serviceGroup === 'preauth') {\n const queryKey = query && Object.keys(query)[0];\n\n if (!['email', 'emailhash', 'userId', 'orgId', 'mode'].includes(queryKey)) {\n return Promise.reject(\n new Error('a query param of email, emailhash, userId, orgId, or mode is required')\n );\n }\n }\n // encode email when query key is email\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const queryKey = Object.keys(query)[0];\n\n formattedQuery = {};\n\n if (queryKey === 'email' && query.email) {\n formattedQuery.emailhash = sha256(query.email.toLowerCase()).toString();\n } else {\n formattedQuery[queryKey] = query[queryKey];\n }\n }\n\n return this._fetchNewServiceHostmap({\n from,\n token,\n query: formattedQuery,\n forceRefresh,\n })\n .then((serviceHostMap: ServiceHostmap) => {\n catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n // Build selection metadata for caching discrimination (preauth/signin)\n let selectionMeta: SelectionMeta | undefined;\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const key = formattedQuery && Object.keys(formattedQuery || {})[0];\n if (key) {\n selectionMeta = {\n selectionType: key,\n selectionValue: formattedQuery[key],\n };\n }\n }\n this._cacheCatalog(serviceGroup, serviceHostMap, selectionMeta);\n this.updateCredentialsConfig();\n catalog.status[serviceGroup].collecting = false;\n })\n .catch((error) => {\n catalog.status[serviceGroup].collecting = false;\n\n return Promise.reject(error);\n });\n },\n\n /**\n * User validation parameter transfer object for {@link validateUser}.\n * @param {object} ValidateUserPTO\n * @property {string} ValidateUserPTO.email - The email of the user.\n * @property {string} [ValidateUserPTO.reqId] - The activation requester.\n * @property {object} [ValidateUserPTO.activationOptions] - Extra options to pass when sending the activation\n * @property {object} [ValidateUserPTO.preloginUserId] - The prelogin user id to set when sending the activation.\n */\n\n /**\n * User validation return transfer object for {@link validateUser}.\n * @param {object} ValidateUserRTO\n * @property {boolean} ValidateUserRTO.activated - If the user is activated.\n * @property {boolean} ValidateUserRTO.exists - If the user exists.\n * @property {string} ValidateUserRTO.details - A descriptive status message.\n * @property {object} ValidateUserRTO.user - **License** service user object.\n */\n\n /**\n * Validate if a user is activated and update the service catalogs as needed\n * based on the user's activation status.\n *\n * @param {ValidateUserPTO} - The parameter transfer object.\n * @returns {ValidateUserRTO} - The return transfer object.\n */\n validateUser({\n email,\n reqId = 'WEBCLIENT',\n forceRefresh = false,\n activationOptions = {},\n preloginUserId,\n }) {\n this.logger.info('services: validating a user');\n\n // Validate that an email parameter key was provided.\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n\n // Destructure the credentials object.\n const {canAuthorize} = this.webex.credentials;\n\n // Validate that the user is already authorized.\n if (canAuthorize) {\n return this.updateServices({forceRefresh})\n .then(() => this.webex.credentials.getUserToken())\n .then((token) =>\n this.sendUserActivation({\n email,\n reqId,\n token: token.toString(),\n activationOptions,\n preloginUserId,\n })\n )\n .then((userObj) => ({\n activated: true,\n exists: true,\n details: 'user is authorized via a user token',\n user: userObj,\n }));\n }\n\n // Destructure the client authorization details.\n /* eslint-disable camelcase */\n const {client_id, client_secret} = this.webex.credentials.config;\n\n // Validate that client authentication details exist.\n if (!client_id || !client_secret) {\n return Promise.reject(new Error('client authentication details are not available'));\n }\n /* eslint-enable camelcase */\n\n // Declare a class-memeber-scoped token for usage within the promise chain.\n let token;\n\n // Begin client authentication user validation.\n return (\n this.collectPreauthCatalog({email})\n .then(() => {\n // Retrieve the service url from the updated catalog. This is required\n // since `WebexCore` is usually not fully initialized at the time this\n // request completes.\n const idbrokerService = this.get('idbroker');\n\n // Collect the client auth token.\n return this.webex.credentials.getClientToken({\n uri: `${idbrokerService}idb/oauth2/v1/access_token`,\n scope: 'webexsquare:admin webexsquare:get_conversation Identity:SCIM',\n });\n })\n .then((tokenObj) => {\n // Generate the token string.\n token = tokenObj.toString();\n\n // Collect the signin catalog using the client auth information.\n return this.collectSigninCatalog({email, token, forceRefresh});\n })\n // Validate if collecting the signin catalog failed and populate the RTO\n // with the appropriate content.\n .catch((error) => ({\n exists: error.name !== 'NotFound',\n activated: false,\n details:\n error.name !== 'NotFound'\n ? 'user exists but is not activated'\n : 'user does not exist and is not activated',\n }))\n // Validate if the previous promise resolved with an RTO and populate the\n // new RTO accordingly.\n .then((rto) =>\n Promise.all([\n rto || {\n activated: true,\n exists: true,\n details: 'user exists and is activated',\n },\n this.sendUserActivation({\n email,\n reqId,\n token,\n activationOptions,\n preloginUserId,\n }),\n ])\n )\n .then(([rto, user]) => ({...rto, user}))\n .catch((error) => {\n const response = {\n statusCode: error.statusCode,\n responseText: error.body && error.body.message,\n body: error.body,\n };\n\n return Promise.reject(response);\n })\n );\n },\n /**\n * Update cluster id via mercury service update. If the cluster id does not exist,\n * fetch new catalog.\n *\n * @param {ActiveServices} newActiveClusters - The new active clusters to switch to.\n * @returns {Promsie<void>}\n * */\n switchActiveClusterIds(newActiveClusters: ActiveServices): Promise<void> {\n this.logger.info('services: switching active cluster ids');\n\n const newActiveClusterIds = Object.values(newActiveClusters);\n\n const missingClusterIds = newActiveClusterIds.some((clusterId) => {\n // if the clusterId does not exist in the catalog, fetch the catalog\n return !this._services.find((service) => service.id === clusterId);\n });\n\n if (missingClusterIds) {\n this.logger.warn(\n 'services: some cluster ids do not exist in the catalog, fetching the catalog'\n );\n\n // fetch the catalog\n return this.initServiceCatalogs(true);\n }\n // update the active services\n this._updateActiveServices(newActiveClusters);\n this.logger.info('services: active cluster ids updated successfully');\n\n return Promise.resolve();\n },\n\n /**\n * Invalidate cache via mercury notification. If the timestamp is newer than current,\n * refetch catalog services.\n *\n * @param {string} timestamp - The timestamp of invalidation notification.\n * @returns {Promsie<void>}\n * */\n invalidateCache(timestamp: string): Promise<void> {\n this.logger.info('services: invalidate cache, timestamp:', timestamp);\n const lastTime = toNumber(this._getCatalog()?.timestamp) || 0;\n const invalidateTime = toNumber(timestamp) || 0;\n if (invalidateTime > lastTime) {\n this.logger.info('services: invalidateCache, refresh services');\n this.initServiceCatalogs(true);\n }\n\n return Promise.resolve();\n },\n /**\n * Get user meeting preferences (preferred webex site).\n *\n * @returns {object} - User Information including user preferrences .\n */\n getMeetingPreferences() {\n return this.request({\n method: 'GET',\n service: 'hydra',\n resource: 'meetingPreferences',\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to fetch user login information', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * Fetches client region info such as countryCode and timezone.\n *\n * @returns {object} - The region info object.\n */\n fetchClientRegionInfo() {\n const {services} = this.webex.config;\n\n return this.request({\n uri: services.discovery.sqdiscovery,\n addAuthHeader: false,\n headers: {\n 'spark-user-agent': null,\n },\n timeout: 5000,\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to get user region info', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * User activation parameter transfer object for {@link sendUserActivation}.\n * @typedef {object} SendUserActivationPTO\n * @property {string} SendUserActivationPTO.email - The email of the user.\n * @property {string} SendUserActivationPTO.reqId - The activation requester.\n * @property {string} SendUserActivationPTO.token - The client auth token.\n * @property {object} SendUserActivationPTO.activationOptions - Extra options to pass when sending the activation.\n * @property {object} SendUserActivationPTO.preloginUserId - The prelogin user id to set when sending the activation.\n */\n\n /**\n * Send a request to activate a user using a client token.\n *\n * @param {SendUserActivationPTO} - The Parameter transfer object.\n * @returns {LicenseDTO} - The DTO returned from the **License** service.\n */\n sendUserActivation({email, reqId, token, activationOptions, preloginUserId}) {\n this.logger.info('services: sending user activation request');\n let countryCode;\n let timezone;\n\n // try to fetch client region info first\n return (\n this.fetchClientRegionInfo()\n .then((clientRegionInfo) => {\n if (clientRegionInfo) {\n ({countryCode, timezone} = clientRegionInfo);\n }\n\n // Send the user activation request.\n // Use user-onboarding service if configured, otherwise use license service.\n const useUserOnboarding =\n this.webex.config.services?.useUserOnboardingServiceForActivations;\n\n return this.request({\n service: useUserOnboarding ? 'user-onboarding' : 'license',\n resource: useUserOnboarding ? 'api/v1/users/activations' : 'users/activations',\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: token,\n 'x-prelogin-userid': preloginUserId,\n },\n body: {\n email,\n reqId,\n countryCode,\n timeZone: timezone,\n ...activationOptions,\n },\n shouldRefreshAccessToken: false,\n });\n })\n // On success, return the **License** user object.\n .then(({body}) => body)\n // On failure, reject with error from **License**.\n .catch((error) => Promise.reject(error))\n );\n },\n\n /**\n * Updates a given service group i.e. preauth, signin, postauth with a new hostmap.\n * @param {ServiceGroup} serviceGroup - preauth, signin, postauth\n * @param {ServiceHostmap} hostMap - The new hostmap to update the service group with.\n * @returns {Promise<void>}\n */\n updateCatalog(serviceGroup: ServiceGroup, hostMap: ServiceHostmap): Promise<void> {\n const catalog = this._getCatalog();\n\n const serviceHostMap = this._formatReceivedHostmap(hostMap || {});\n\n return catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n },\n\n /**\n * simplified method to update the preauth catalog via email\n *\n * @param {object} query\n * @param {string} query.email - A standard format email.\n * @param {string} query.orgId - The user's OrgId.\n * @param {boolean} forceRefresh - Boolean to bypass u2c cache control header\n * @returns {Promise<void>}\n */\n collectPreauthCatalog(query: QueryOptions, forceRefresh = false) {\n if (!query) {\n return this.updateServices({\n from: 'limited',\n query: {mode: 'DEFAULT_BY_PROXIMITY'},\n forceRefresh,\n });\n }\n\n return this.updateServices({from: 'limited', query, forceRefresh});\n },\n\n /**\n * simplified method to update the signin catalog via email and token\n * @param {object} param\n * @param {string} param.email - must be a standard-format email\n * @param {string} param.token - must be a client token\n * @returns {Promise<void>}\n */\n collectSigninCatalog(\n {email, token, forceRefresh} = {} as {email: string; token: string; forceRefresh: boolean}\n ): Promise<void> {\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n if (!token) {\n return Promise.reject(new Error('`token` is required'));\n }\n\n return this.updateServices({\n from: 'signin',\n query: {email},\n token,\n forceRefresh,\n });\n },\n\n /**\n * Updates credentials config to utilize u2c catalog\n * urls.\n * @returns {void}\n */\n updateCredentialsConfig(): void {\n const idbrokerUrl = this.get('idbroker');\n const identityUrl = this.get('identity');\n\n if (idbrokerUrl && identityUrl) {\n const {authorizationString, authorizeUrl} = this.webex.config.credentials;\n\n // This must be set outside of the setConfig method used to assign the\n // idbroker and identity url values.\n this.webex.config.credentials.authorizeUrl = authorizationString\n ? authorizeUrl\n : `${idbrokerUrl.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbrokerUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identityUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n },\n });\n }\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject afte ra timeout of 60 seconds.\n * @param {ServiceGroup} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup: ServiceGroup, timeout: number): Promise<void> {\n const catalog = this._getCatalog();\n const {supertoken} = this.webex.credentials;\n\n if (\n serviceGroup === 'postauth' &&\n supertoken &&\n supertoken.access_token &&\n !catalog.status.postauth.collecting &&\n !catalog.status.postauth.ready\n ) {\n if (!catalog.status.preauth.ready) {\n return this.initServiceCatalogs();\n }\n\n return this.updateServices();\n }\n\n return catalog.waitForCatalog(serviceGroup, timeout);\n },\n\n /**\n * Service waiting parameter transfer object for {@link waitForService}.\n *\n * @typedef {object} WaitForServicePTO\n * @property {string} [WaitForServicePTO.name] - The service name.\n * @property {string} [WaitForServicePTO.url] - The service url.\n * @property {string} [WaitForServicePTO.timeout] - wait duration in seconds.\n */\n\n /**\n * Wait until the service has been ammended to any service catalog. This\n * method prioritizes the service name over the service url when searching.\n *\n * @param {WaitForServicePTO} - The parameter transfer object.\n * @returns {Promise<string>} - Resolves to the priority host of a service.\n */\n waitForService({\n name,\n timeout = 5,\n url,\n }: {\n name: string;\n timeout: number;\n url: string;\n }): Promise<string> {\n const {services} = this.webex.config;\n\n // Save memory by grabbing the catalog after there isn't a priortyURL\n const catalog = this._getCatalog();\n\n const fetchFromServiceUrl = services.servicesNotNeedValidation.find(\n (service) => service === name\n );\n\n if (fetchFromServiceUrl) {\n const clusterId = this._activeServices[name];\n\n return Promise.resolve(this.get(clusterId));\n }\n\n const priorityUrl = this.get(name);\n const priorityUrlObj = this.getServiceFromUrl(url);\n\n if (priorityUrl || priorityUrlObj) {\n return Promise.resolve(priorityUrl || priorityUrlObj.priorityUrl);\n }\n\n if (catalog.isReady) {\n if (url) {\n return Promise.resolve(url);\n }\n\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n\n return Promise.reject(\n new Error(`services: service '${name}' was not found in any of the catalogs`)\n );\n }\n\n return new Promise((resolve, reject) => {\n const groupsToCheck = ['preauth', 'signin', 'postauth'];\n const checkCatalog = (catalogGroup) =>\n catalog\n .waitForCatalog(catalogGroup, timeout)\n .then(() => {\n const scopedPriorityUrl = this.get(name);\n const scopedPrioriryUrlObj = this.getServiceFromUrl(url);\n\n if (scopedPriorityUrl || scopedPrioriryUrlObj) {\n resolve(scopedPriorityUrl || scopedPrioriryUrlObj.priorityUrl);\n }\n })\n .catch(() => undefined);\n\n Promise.all(groupsToCheck.map((group) => checkCatalog(group))).then(() => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n reject(new Error(`services: service '${name}' was not found after waiting`));\n });\n });\n },\n\n /**\n * Looks up the hostname in the host catalog\n * and replaces it with the first host if it finds it\n * @param {string} uri\n * @returns {string} uri with the host replaced\n */\n replaceHostFromHostmap(uri: string): string {\n try {\n return this.convertUrlToPriorityHostUrl(uri);\n } catch {\n return uri;\n }\n },\n\n /**\n * Formats a host map entry for use in service catalog.\n *\n * @param {Object} entry - The host map entry to format.\n * @param {string} entry.serviceName - i.e. conversation, identity, etc.\n * @param {string} entry.id - The unique identifier for the service, usually clusterId.\n * @param {Array<IServiceDetail>} entry.serviceUrls - The group to which the service belongs.\n * @returns {Object} - The formatted host map entry.\n */\n _formatHostMapEntry({id, serviceName, serviceUrls}) {\n const formattedServiceUrls = serviceUrls.map((serviceUrl) => ({\n host: new URL(serviceUrl.baseUrl).host,\n ...serviceUrl,\n }));\n\n return {\n id,\n serviceName,\n serviceUrls: formattedServiceUrls,\n };\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * @param {ServiceHostmap} serviceHostmap\n * catalog endpoint.\n * @returns {Array<Service>}\n */\n _formatReceivedHostmap({services, activeServices, timestamp, orgId, format}) {\n const formattedHostmap: ServiceHostmap = {\n activeServices,\n services: services?.map((service) => this._formatHostMapEntry(service)),\n timestamp,\n orgId,\n format,\n };\n this._updateActiveServices(activeServices);\n this._updateServices(services);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string | undefined} - Cluster ID of url provided\n */\n getClusterId(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findClusterId(url);\n },\n\n /**\n * Get a service value from a provided clusterId. This method will\n * return an object containing both the name and url of a found service.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {ServiceGroup} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n getServiceFromClusterId(params: {\n clusterId: string;\n serviceGroup?: ServiceGroup;\n }): {name: string; url: string} | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findServiceFromClusterId(params);\n },\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the service\n */\n getServiceUrlFromClusterId({cluster = 'us'}: {cluster?: string} = {}): string {\n let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;\n\n // Determine if cluster has service name (non-US clusters from hydra do not)\n if (clusterId.split(':').length < 4) {\n // Add Service to cluster identifier\n clusterId = `${cluster}:${CLUSTER_SERVICE}`;\n }\n\n const {url} = this.getServiceFromClusterId({clusterId}) || {};\n\n if (!url) {\n throw Error(`Could not find service for cluster [${cluster}]`);\n }\n\n return url;\n },\n\n /**\n * Get a service object from a service url if the service url exists in the\n * catalog.\n *\n * @param {string} url - The url to be validated.\n * @returns {object} - Service object.\n * @returns {object.name} - The name of the service found.\n * @returns {object.priorityUrl} - The default url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = ''): {name: string; priorityUrl: string; defaultUrl: string} | undefined {\n const service = this._getCatalog().findServiceDetailFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n const priorityUrl = service.get();\n const defaultUrl = new URL(\n service.serviceUrls.find((serviceUrl) => url.startsWith(serviceUrl.baseUrl)).baseUrl\n ).href;\n\n return {\n name: service.serviceName,\n priorityUrl,\n defaultUrl,\n };\n },\n\n /**\n * Determine if a provided url is in the catalog's allowed domains.\n *\n * @param {string} url - The url to match allowed domains against.\n * @returns {boolean} - True if the url provided is allowed.\n */\n isAllowedDomainUrl(url: string): boolean {\n const catalog = this._getCatalog();\n\n return !!catalog.findAllowedDomain(url);\n },\n\n /**\n * Converts the host portion of the url from default host\n * to a priority host\n *\n * @param {string} url a service url that contains a default host\n * @returns {string} a service url that contains the top priority host.\n * @throws if url isn't a service url\n */\n convertUrlToPriorityHostUrl(url = '' as string): string {\n const data = this.getServiceFromUrl(url);\n\n if (!data) {\n throw Error(`No service associated with url: [${url}]`);\n }\n\n return url.replace(data.defaultUrl, data.priorityUrl);\n },\n\n /**\n * @private\n * Cache the catalog in the bounded storage.\n * @param {ServiceGroup} serviceGroup - preauth, signin, postauth\n * @param {ServiceHostmap} hostMap - The hostmap to cache\n * @param {object} [meta] - Optional selection metadata for cache discrimination\n * @returns {Promise<void>}\n */\n async _cacheCatalog(\n serviceGroup: ServiceGroup,\n hostMap: ServiceHostmap,\n meta?: SelectionMeta\n ): Promise<void> {\n let current: {orgId?: string; env?: {fedramp?: boolean; u2cDiscoveryUrl?: string}} = {};\n let orgId: string | undefined;\n try {\n // Respect calling.cacheU2C toggle; if disabled, skip writing cache\n if (!this.webex.config?.calling?.cacheU2C) {\n this.logger.info(`services: skipping cache write for ${serviceGroup} as per the config`);\n\n return;\n }\n\n try {\n const ls = this._getLocalStorageSafe();\n const cachedJson = ls ? ls.getItem(CATALOG_CACHE_KEY_V2) : null;\n current = cachedJson ? JSON.parse(cachedJson) : {};\n } catch {\n current = {};\n }\n\n try {\n const {credentials} = this.webex;\n orgId = credentials.getOrgId();\n } catch {\n orgId = current.orgId;\n }\n\n // Capture environment fingerprint to invalidate cache across env changes\n let {env} = current;\n const fedramp = !!this.webex?.config?.fedramp;\n const u2cDiscoveryUrl = this.webex?.config?.services?.discovery?.u2c;\n env = {fedramp, u2cDiscoveryUrl};\n\n const updated = {\n ...current,\n orgId: orgId || current.orgId,\n env: env || current.env,\n // When selection meta is provided, store as an object; otherwise keep legacy shape\n [serviceGroup]: meta ? {hostMap, meta} : hostMap,\n cachedAt: Date.now(),\n };\n\n const ls = this._getLocalStorageSafe();\n if (ls) {\n ls.setItem(CATALOG_CACHE_KEY_V2, JSON.stringify(updated));\n }\n } catch (e) {\n this.logger.warn('services: error caching catalog', e);\n }\n },\n\n /**\n * @private\n * Load the catalog from cache and hydrate the in-memory ServiceCatalog.\n * @returns {Promise<boolean>} true if cache was loaded, false otherwise\n */\n async _loadCatalogFromCache(): Promise<boolean> {\n let currentOrgId: string | undefined;\n try {\n // Respect calling.cacheU2C toggle; if disabled, skip using cache\n if (!this.webex.config?.calling?.cacheU2C) {\n this.logger.info('services: skipping cache warm-up as per the cache config');\n\n return false;\n }\n\n const ls = this._getLocalStorageSafe();\n if (!ls) {\n this.logger.info('services: skipping cache warm-up as no localStorage is available');\n\n return false;\n }\n const cachedJson = ls.getItem(CATALOG_CACHE_KEY_V2);\n const cached = cachedJson ? JSON.parse(cachedJson) : undefined;\n if (!cached) {\n return false;\n }\n\n // TTL enforcement\n const cachedAt = Number(cached.cachedAt) || 0;\n if (!cachedAt || Date.now() - cachedAt > CATALOG_TTL_MS) {\n this.clearCatalogCache();\n\n return false;\n }\n\n // If authorized, ensure cached org matches\n try {\n if (this.webex.credentials?.canAuthorize) {\n const {credentials} = this.webex;\n currentOrgId = credentials.getOrgId();\n if (cached.orgId && cached.orgId !== currentOrgId) {\n return false;\n }\n }\n } catch (e) {\n this.logger.warn('services: error checking orgId', e);\n }\n\n // Ensure cached environment matches current environment\n\n const fedramp = !!this.webex.config?.fedramp;\n const u2cDiscoveryUrl = this.webex.config?.services?.discovery?.u2c;\n const currentEnv = {fedramp, u2cDiscoveryUrl};\n if (cached.env) {\n const sameEnv =\n cached.env.fedramp === currentEnv.fedramp &&\n cached.env.u2cDiscoveryUrl === currentEnv.u2cDiscoveryUrl;\n if (!sameEnv) {\n return false;\n }\n }\n\n const catalog = this._getCatalog();\n const groups: Array<ServiceGroup> = ['preauth', 'signin', 'postauth'];\n\n groups.forEach((serviceGroup) => {\n const cachedGroup = cached[serviceGroup];\n if (!cachedGroup) {\n return;\n }\n\n // Support legacy (hostMap) and new ({hostMap, meta}) shapes\n const hostMap: ServiceHostmap =\n cachedGroup && cachedGroup.hostMap ? cachedGroup.hostMap : cachedGroup;\n const meta: SelectionMeta | undefined = cachedGroup?.meta;\n\n if (serviceGroup === 'preauth' && meta) {\n // For proximity-based selection, always fetch fresh to respect IP/region changes\n if (meta.selectionType === 'mode') {\n return;\n }\n\n const intended = this.getIntendedPreauthSelection(currentOrgId);\n const matches =\n intended &&\n intended.selectionType === meta.selectionType &&\n intended.selectionValue === meta.selectionValue;\n if (!matches) {\n return;\n }\n }\n\n if (hostMap) {\n catalog.updateServiceGroups(serviceGroup, hostMap?.services, hostMap?.timestamp);\n }\n });\n\n this.updateCredentialsConfig();\n\n return true;\n } catch (e) {\n return false;\n }\n },\n\n /**\n * Clear the catalog cache from the bounded storage (v2).\n * @returns {Promise<void>}\n */\n clearCatalogCache(): Promise<void> {\n try {\n const ls = this._getLocalStorageSafe();\n if (ls) {\n ls.removeItem(CATALOG_CACHE_KEY_V2);\n }\n } catch (e) {\n this.logger.warn('services: error clearing catalog cache', e);\n }\n\n return Promise.resolve();\n },\n\n /**\n * @private\n * Simplified method wrapper for sending a request to get\n * an updated service hostmap.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n _fetchNewServiceHostmap(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...(query || {}), format: 'U2CV2'};\n\n if (forceRefresh) {\n qs.timestamp = new Date().getTime();\n }\n\n const requestObject = {\n method: 'GET',\n service,\n resource,\n qs,\n headers: {},\n };\n\n if (token) {\n requestObject.headers = {authorization: token};\n }\n\n return this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(() => this.request(requestObject), 'internal.get.u2c.time')\n .then(({body}) => this._formatReceivedHostmap(body || {}));\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig(): void {\n // Get the catalog and destructure the services config.\n const catalog = this._getCatalog();\n const {services, fedramp} = this.webex.config;\n\n // Validate that the services configuration exists.\n if (services) {\n if (fedramp) {\n services.discovery = fedRampServices;\n }\n // Check for discovery services.\n if (services.discovery) {\n // Format the discovery configuration into an injectable array.\n const formattedDiscoveryServices = Object.keys(services.discovery).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.discovery[key], priority: 1}],\n })\n );\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceGroups('discovery', formattedDiscoveryServices);\n }\n\n if (services.override) {\n // Format the override configuration into an injectable array.\n const formattedOverrideServices = Object.keys(services.override).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.override[key], priority: 1}],\n })\n );\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceGroups('override', formattedOverrideServices);\n }\n\n // if not fedramp, append on the commercialAllowedDomains\n if (!fedramp) {\n services.allowedDomains = union(services.allowedDomains, COMMERCIAL_ALLOWED_DOMAINS);\n }\n\n // Check for allowed host domains.\n if (services.allowedDomains) {\n // Store the allowed domains as a property of the catalog.\n catalog.setAllowedDomains(services.allowedDomains);\n }\n\n // Set `validateDomains` property to match configuration\n this.validateDomains = services.validateDomains;\n }\n },\n\n /**\n * Make the initial requests to collect the root catalogs.\n * @param {boolean} refresh - Is need force update\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs(refresh = false): Promise<void> {\n this.logger.info('services: initializing initial service catalogs');\n\n // Destructure the credentials plugin.\n const {credentials} = this.webex;\n const catalog = this._getCatalog();\n\n // Init a promise chain. Must be done as a Promise.resolve() to allow\n // credentials#getOrgId() to properly throw.\n return (\n Promise.resolve()\n // Get the user's OrgId.\n .then(() => credentials.getOrgId())\n // Begin collecting the preauth/limited catalog.\n .then((orgId) => this.collectPreauthCatalog({orgId}, refresh))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog, then mark the catalog\n // ready. Setting `isReady` here - rather than only in the init\n // callers - means a slow postauth fetch that loses the gated-init\n // timeout race still marks the catalog ready once it completes.\n return this.updateServices({forceRefresh: refresh})\n .then(() => {\n catalog.isReady = true;\n })\n .catch(() => {\n this.initFailed = true;\n this.logger.warn('services: cannot retrieve postauth catalog');\n });\n }\n\n // Return a resolved promise for consistent return value.\n return Promise.resolve();\n })\n );\n },\n\n /**\n * Await any in-flight credentials refresh, then flip `services.ready` so\n * `webex.ready` can fire. Closes the parallel-refresh window: if a credential\n * refresh is in flight when initial catalog collection settles, we must not\n * signal ready until the refresh has resolved - otherwise downstream\n * consumers may observe `canAuthorize`/token state that is about to change\n * under them.\n *\n * @private\n * @returns {Promise<void>}\n */\n async _finalizeReady(): Promise<void> {\n const {credentials} = this.webex;\n\n if (credentials && credentials.isRefreshing) {\n await new Promise<void>((resolve) => {\n credentials.once('change:isRefreshing', resolve);\n });\n }\n\n this.ready = true;\n },\n\n /**\n * Initializer\n *\n * @instance\n * @memberof Services\n * @returns {Services}\n */\n initialize(): typeof Services {\n const catalog = new ServiceCatalog();\n this._catalogs.set(this.webex, catalog);\n\n // Listen for configuration changes once. The config is not populated on the\n // webex instance until the `change:config` event fires, so any decision that\n // depends on config values (such as the gated-vs-ungated init below) must be\n // made from within this handler rather than synchronously in `initialize()`.\n this.listenToOnce(this.webex, 'change:config', () => {\n this.initConfig();\n\n // Feature flag: when enabled, `webex.ready` is blocked until the initial\n // catalog collection has settled AND any in-flight credentials refresh has\n // completed. When disabled (the default), preserves the pre-existing\n // behavior where `webex.ready` fires as soon as `webex.loaded` does and\n // the catalog is collected out-of-band.\n const waitForCatalogInit = this.webex.config?.services?.waitForCatalogInit === true;\n\n if (waitForCatalogInit) {\n this._initializeCatalogsGated(catalog);\n } else {\n // Not gating - immediately mark ready so we do not block webex.ready.\n this.ready = true;\n this._initializeCatalogsUngated(catalog);\n }\n });\n },\n\n /**\n * Original (pre-verified-ready) initialization path. Runs on `webex.ready`\n * and collects catalogs opportunistically without blocking anything.\n *\n * @private\n * @param {ServiceCatalog} catalog\n * @returns {void}\n */\n _initializeCatalogsUngated(catalog: ServiceCatalog): void {\n // wait for webex instance to be ready before attempting\n // to update the service catalogs\n this.listenToOnce(this.webex, 'ready', async () => {\n const warmed = await this._loadCatalogFromCache();\n if (warmed) {\n catalog.isReady = true;\n\n return;\n }\n const {supertoken} = this.webex.credentials;\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n // `initServiceCatalogs` marks the catalog ready internally once the\n // postauth catalog is collected.\n this.initServiceCatalogs().catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n });\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n });\n }\n });\n },\n\n /**\n * Verified-ready initialization path. Blocks `webex.ready` until the initial\n * catalog fetch has settled (or timed out) AND any in-flight credentials\n * refresh has completed. Also handles the fresh-login case where OAuth\n * completes after `loaded` fires.\n *\n * @private\n * @param {ServiceCatalog} catalog\n * @returns {void}\n */\n _initializeCatalogsGated(catalog: ServiceCatalog): void {\n // Wait for storage to be loaded before attempting to update the service\n // catalogs. We listen for 'loaded' instead of 'ready' because `services.ready`\n // now blocks `webex.ready` - listening to 'ready' would deadlock.\n this.listenToOnce(this.webex, 'loaded', async () => {\n const warmed = await this._loadCatalogFromCache();\n if (warmed) {\n catalog.isReady = true;\n await this._finalizeReady();\n\n return;\n }\n const {supertoken} = this.webex.credentials;\n\n // Race init against a hard timeout so a hung request never leaves\n // `services.ready` false forever - that would stall `webex.ready` and\n // leave consumers waiting on it indefinitely. Timeout is configurable via\n // `config.services.catalogInitTimeout` (defaults to 15s in config).\n const initTimeoutMs = this.webex.config?.services?.catalogInitTimeout;\n const initServiceCatalogsTimeout = new Promise<never>((_, reject) => {\n setTimeout(\n () => reject(new Error(`services: init timed out after ${initTimeoutMs}ms`)),\n initTimeoutMs\n );\n });\n\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n // `initServiceCatalogs` marks the catalog ready internally once the\n // postauth catalog is collected - even if it loses the timeout race\n // above, so a slow fetch still eventually flips `catalog.isReady`.\n Promise.race([this.initServiceCatalogs(), initServiceCatalogsTimeout])\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n })\n .finally(() => this._finalizeReady());\n } else {\n const {email} = this.webex.config;\n\n Promise.race([\n this.collectPreauthCatalog(email ? {email} : undefined),\n initServiceCatalogsTimeout,\n ])\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n })\n .finally(() => this._finalizeReady());\n\n // Handle fresh login: 'loaded' fires before OAuth completes, so listen\n // for `canAuthorize` flipping true and then collect the postauth catalog.\n this.listenToOnce(this.webex, 'change:canAuthorize', () => {\n if (this.webex.canAuthorize && !catalog.status.postauth.ready) {\n // `initServiceCatalogs` marks the catalog ready internally.\n this.initServiceCatalogs().catch((error) => {\n this.logger.error(\n `services: failed to init service catalogs after auth, ${error?.message}`\n );\n });\n }\n });\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_sha","_interopRequireDefault","require","_lodash","_webexPlugin","_metrics","_serviceCatalog","_serviceFedRamp","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","trailingSlashes","DEFAULT_CLUSTER","exports","DEFAULT_CLUSTER_SERVICE","CLUSTER_SERVICE","process","env","WEBEX_CONVERSATION_CLUSTER_SERVICE","DEFAULT_CLUSTER_IDENTIFIER","WEBEX_CONVERSATION_DEFAULT_CLUSTER","concat","CATALOG_CACHE_KEY_V2","CATALOG_TTL_MS","Services","WebexPlugin","extend","namespace","props","validateDomains","initFailed","session","ready","type","_catalogs","_weakMap","_activeServices","_services","_getCatalog","get","webex","_getLocalStorageSafe","window","localStorage","getIntendedPreauthSelection","currentOrgId","_this$webex$credentia","credentials","canAuthorize","selectionType","selectionValue","emailConfig","config","email","trim","sha256","toLowerCase","toString","name","serviceGroup","catalog","clusterId","urlById","urlByName","undefined","hasAllowedDomains","getAllowedDomains","markFailedUrl","url","markFailedServiceUrl","getMobiusClusters","logger","info","clusters","services","service","serviceName","_isArray","serviceUrls","serviceUrl","modifiedHost","baseUrl","replace","find","c","host","priority","id","ttl","isValidHost","some","_URL","serviceHost","URL","isIntegrationEnvironment","_this$webex","_this$webex$config","_this$webex$config$se","_this$webex$config$se2","u2cUrl","discovery","u2c","isInt","includes","error","_updateActiveServices","activeServices","_updateServices","unionBy","updateServices","_catalog$status","_catalog$status$servi","_this","_ref","from","query","token","forceRefresh","formattedQuery","status","collecting","waitForCatalog","queryKey","_keys","_promise","reject","Error","emailhash","_fetchNewServiceHostmap","then","serviceHostMap","updateServiceGroups","timestamp","selectionMeta","key","_cacheCatalog","updateCredentialsConfig","catch","validateUser","_ref2","_this2","_ref2$reqId","reqId","_ref2$forceRefresh","_ref2$activationOptio","activationOptions","preloginUserId","getUserToken","sendUserActivation","userObj","activated","exists","details","user","_this$webex$credentia2","client_id","client_secret","collectPreauthCatalog","idbrokerService","getClientToken","uri","scope","tokenObj","collectSigninCatalog","rto","all","_ref3","_ref4","_slicedToArray2","response","statusCode","responseText","body","message","switchActiveClusterIds","newActiveClusters","_this3","newActiveClusterIds","_values","missingClusterIds","warn","initServiceCatalogs","resolve","invalidateCache","_this$_getCatalog","lastTime","toNumber","invalidateTime","getMeetingPreferences","_this4","request","method","resource","res","err","fetchClientRegionInfo","_this5","sqdiscovery","addAuthHeader","headers","timeout","_ref5","_this6","countryCode","timezone","clientRegionInfo","_this6$webex$config$s","useUserOnboarding","useUserOnboardingServiceForActivations","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","updateCatalog","hostMap","_formatReceivedHostmap","mode","_ref7","idbrokerUrl","identityUrl","_this$webex$config$cr","authorizationString","authorizeUrl","setConfig","idbroker","identity","supertoken","access_token","postauth","preauth","waitForService","_ref8","_this7","_ref8$timeout","fetchFromServiceUrl","servicesNotNeedValidation","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","replaceHostFromHostmap","convertUrlToPriorityHostUrl","_unused","_formatHostMapEntry","_ref9","formattedServiceUrls","_ref0","_this8","orgId","format","formattedHostmap","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref1","_ref1$cluster","cluster","split","_ref10","findServiceDetailFromUrl","defaultUrl","startsWith","href","isAllowedDomainUrl","findAllowedDomain","data","meta","_this9","_asyncToGenerator2","_regenerator","mark","_callee","current","_this9$webex$config","_this9$webex$config$c","_this9$webex","_this9$webex$config2","_this9$webex2","_this9$webex2$config","_this9$webex2$config$","_this9$webex2$config$2","_ls","cachedJson","_current","fedramp","u2cDiscoveryUrl","updated","ls","_t","wrap","_context","prev","next","calling","cacheU2C","abrupt","getItem","JSON","parse","_unused2","getOrgId","_unused3","_now","setItem","_stringify","stop","_loadCatalogFromCache","_this0","_callee2","_this0$webex$config","_this0$webex$config$c","_this0$webex$config2","_this0$webex$config3","_this0$webex$config3$","_this0$webex$config3$2","cached","cachedAt","_this0$webex$credenti","currentEnv","sameEnv","groups","_t2","_t3","_context2","Number","clearCatalogCache","cachedGroup","intended","matches","removeItem","_this$webex$config2","_this$webex$config2$s","_this1","_ref11","qs","useCatalogOverride","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref12","initConfig","_this10","_this$webex$config3","fedRampServices","formattedDiscoveryServices","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this11","refresh","_finalizeReady","_this12","_callee3","_context3","isRefreshing","once","initialize","_this13","ServiceCatalog","set","listenToOnce","_this13$webex$config","_this13$webex$config$","waitForCatalogInit","_initializeCatalogsGated","_initializeCatalogsUngated","_this14","_callee4","warmed","_context4","sent","_this15","_callee5","_this15$webex$config","_this15$webex$config$","initTimeoutMs","initServiceCatalogsTimeout","_context5","catalogInitTimeout","_","setTimeout","race","finally","version","_default"],"sources":["services-v2.ts"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {toNumber, union, unionBy} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from '../metrics';\nimport ServiceCatalog from './service-catalog';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from '../constants';\nimport {\n ActiveServices,\n IServiceCatalog,\n QueryOptions,\n Service,\n ServiceHostmap,\n ServiceGroup,\n ServiceHost,\n SelectionMeta,\n} from './types';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n// The default cluster when one is not provided (usually as 'US' from hydra)\nexport const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';\n// The default service name for convo (currently identityLookup due to some weird CSB issue)\nexport const DEFAULT_CLUSTER_SERVICE = 'identityLookup';\n\nconst CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;\nconst DEFAULT_CLUSTER_IDENTIFIER =\n process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;\n\nconst CATALOG_CACHE_KEY_V2 = 'services.v2.u2cHostMap';\nconst CATALOG_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n session: {\n /**\n * Becomes `true` once the initial catalog collection has completed\n * (successfully or otherwise) and any in-flight credentials refresh has\n * settled. Blocks `webex.ready` so consumers can rely on `webex.ready`\n * implying \"catalogs populated AND credential state stable\".\n * @instance\n * @memberof Services\n * @type {boolean}\n */\n ready: {\n default: false,\n type: 'boolean',\n },\n },\n\n _catalogs: new WeakMap(),\n\n _activeServices: {},\n\n _services: [],\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {IServiceCatalog}\n */\n _getCatalog(): IServiceCatalog {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Safely access localStorage if available; returns the Storage or null.\n * @returns {Storage | null}\n */\n _getLocalStorageSafe(): Storage | null {\n if (typeof window !== 'undefined' && (window as any).localStorage) {\n return (window as any).localStorage as Storage;\n }\n\n return null;\n },\n\n /**\n * Determine the intended preauth selection based on the current context.\n * @param {string} [currentOrgId]\n * @returns {{selectionType: string, selectionValue: string}}\n */\n getIntendedPreauthSelection(currentOrgId?: string): {\n selectionType: string;\n selectionValue: string;\n } {\n if (this.webex.credentials?.canAuthorize) {\n if (currentOrgId) {\n return {selectionType: 'orgId', selectionValue: currentOrgId};\n }\n }\n\n const emailConfig = this.webex.config && this.webex.config.email;\n\n if (typeof emailConfig === 'string' && emailConfig.trim()) {\n return {\n selectionType: 'emailhash',\n selectionValue: sha256(emailConfig.toLowerCase()).toString(),\n };\n }\n\n // fall back to proximity mode when no orgId or email available\n return {selectionType: 'mode', selectionValue: 'DEFAULT_BY_PROXIMITY'};\n },\n\n /**\n * Get a service url from the current services list by name\n * from the associated instance catalog.\n * @param {string} name\n * @param {ServiceGroup} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name: string, serviceGroup?: ServiceGroup): string | undefined {\n const catalog = this._getCatalog();\n\n const clusterId = this._activeServices[name];\n\n const urlById = catalog.get(clusterId, serviceGroup);\n const urlByName = catalog.get(name, serviceGroup);\n\n // if both are undefined, then we cannot find the service\n if (!urlById && !urlByName) {\n return undefined;\n }\n\n return urlById || urlByName;\n },\n\n /**\n * Determine if a whilelist exists in the service catalog.\n *\n * @returns {boolean} - True if a allowed domains list exists.\n */\n hasAllowedDomains(): boolean {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the service url associated with the\n * `ServiceDetail` to be removed from the its\n * respective service url array, and then return the next\n * viable service url from the `ServiceDetail` service url array.\n * @param {string} url\n * @returns {string}\n */\n markFailedUrl(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.markFailedServiceUrl(url);\n },\n\n /**\n * Get all Mobius cluster host entries from the v2 services list.\n * @returns {Array<ServiceHost>} - An array of `ServiceHost` objects.\n */\n getMobiusClusters(): Array<ServiceHost> {\n this.logger.info('services: fetching mobius clusters');\n const clusters: Array<ServiceHost> = [];\n const services: Array<Service> = this._services || [];\n\n services\n .filter(\n (service) =>\n service?.serviceName === 'mobius' &&\n Array.isArray(service.serviceUrls) &&\n service.serviceUrls.length > 0\n )\n .forEach((service) => {\n service.serviceUrls.forEach((serviceUrl) => {\n const modifiedHost = serviceUrl.baseUrl.replace('https://', '').replace('/api/v1', '');\n if (!clusters.find((c) => c && c.host === modifiedHost)) {\n clusters.push({\n host: modifiedHost,\n priority: serviceUrl.priority,\n id: service.id,\n ttl: 0,\n });\n }\n });\n });\n\n return clusters;\n },\n\n /**\n * Check is valid host from services list.\n * @param {string} host\n * @returns {Boolean}\n */\n isValidHost(host: string): boolean {\n const services: Array<Service> = this._services || [];\n\n return services.some((service) => {\n return service.serviceUrls.some((serviceUrl) => {\n const serviceHost = serviceUrl?.baseUrl && new URL(serviceUrl.baseUrl)?.host;\n\n return serviceHost === host;\n });\n });\n },\n\n /**\n * Checks if the current environment is an integration (INT) environment\n * by examining the u2c discovery URL from webex config.\n * INT environments use discovery URLs containing 'intb' (e.g., u2c-intb.ciscospark.com).\n * @returns {boolean} True if INT environment, false otherwise\n */\n isIntegrationEnvironment(): boolean {\n try {\n const u2cUrl = this.webex?.config?.services?.discovery?.u2c || '';\n const isInt = u2cUrl.includes('intb');\n\n this.logger.info(`services: isIntegrationEnvironment: ${isInt}`);\n\n return isInt;\n } catch (error) {\n this.logger.error('services: failed to determine integration environment', error);\n\n return false;\n }\n },\n /**\n * saves all the services from the pre and post catalog service\n * @param {ActiveServices} activeServices\n * @returns {void}\n */\n _updateActiveServices(activeServices: ActiveServices): void {\n this._activeServices = {...this._activeServices, ...activeServices};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Array<Service>} services\n * @returns {void}\n */\n _updateServices(services: Array<Service>): void {\n this._services = unionBy(services, this._services, 'id');\n },\n\n /**\n * Update a list of `serviceUrls` to the most current\n * catalog via the defined `discoveryUrl` then returns the current\n * list of services.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n updateServices(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const catalog = this._getCatalog();\n let formattedQuery;\n let serviceGroup;\n\n // map catalog name to service group name.\n switch (from) {\n case 'limited':\n serviceGroup = 'preauth';\n break;\n case 'signin':\n serviceGroup = 'signin';\n break;\n default:\n serviceGroup = 'postauth';\n break;\n }\n // confirm catalog update for group is not in progress.\n if (catalog.status?.[serviceGroup]?.collecting) {\n return this.waitForCatalog(serviceGroup);\n }\n\n catalog.status[serviceGroup].collecting = true;\n\n if (serviceGroup === 'preauth') {\n const queryKey = query && Object.keys(query)[0];\n\n if (!['email', 'emailhash', 'userId', 'orgId', 'mode'].includes(queryKey)) {\n return Promise.reject(\n new Error('a query param of email, emailhash, userId, orgId, or mode is required')\n );\n }\n }\n // encode email when query key is email\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const queryKey = Object.keys(query)[0];\n\n formattedQuery = {};\n\n if (queryKey === 'email' && query.email) {\n formattedQuery.emailhash = sha256(query.email.toLowerCase()).toString();\n } else {\n formattedQuery[queryKey] = query[queryKey];\n }\n }\n\n return this._fetchNewServiceHostmap({\n from,\n token,\n query: formattedQuery,\n forceRefresh,\n })\n .then((serviceHostMap: ServiceHostmap) => {\n catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n // Build selection metadata for caching discrimination (preauth/signin)\n let selectionMeta: SelectionMeta | undefined;\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const key = formattedQuery && Object.keys(formattedQuery || {})[0];\n if (key) {\n selectionMeta = {\n selectionType: key,\n selectionValue: formattedQuery[key],\n };\n }\n }\n this._cacheCatalog(serviceGroup, serviceHostMap, selectionMeta);\n this.updateCredentialsConfig();\n catalog.status[serviceGroup].collecting = false;\n })\n .catch((error) => {\n catalog.status[serviceGroup].collecting = false;\n\n return Promise.reject(error);\n });\n },\n\n /**\n * User validation parameter transfer object for {@link validateUser}.\n * @param {object} ValidateUserPTO\n * @property {string} ValidateUserPTO.email - The email of the user.\n * @property {string} [ValidateUserPTO.reqId] - The activation requester.\n * @property {object} [ValidateUserPTO.activationOptions] - Extra options to pass when sending the activation\n * @property {object} [ValidateUserPTO.preloginUserId] - The prelogin user id to set when sending the activation.\n */\n\n /**\n * User validation return transfer object for {@link validateUser}.\n * @param {object} ValidateUserRTO\n * @property {boolean} ValidateUserRTO.activated - If the user is activated.\n * @property {boolean} ValidateUserRTO.exists - If the user exists.\n * @property {string} ValidateUserRTO.details - A descriptive status message.\n * @property {object} ValidateUserRTO.user - **License** service user object.\n */\n\n /**\n * Validate if a user is activated and update the service catalogs as needed\n * based on the user's activation status.\n *\n * @param {ValidateUserPTO} - The parameter transfer object.\n * @returns {ValidateUserRTO} - The return transfer object.\n */\n validateUser({\n email,\n reqId = 'WEBCLIENT',\n forceRefresh = false,\n activationOptions = {},\n preloginUserId,\n }) {\n this.logger.info('services: validating a user');\n\n // Validate that an email parameter key was provided.\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n\n // Destructure the credentials object.\n const {canAuthorize} = this.webex.credentials;\n\n // Validate that the user is already authorized.\n if (canAuthorize) {\n return this.updateServices({forceRefresh})\n .then(() => this.webex.credentials.getUserToken())\n .then((token) =>\n this.sendUserActivation({\n email,\n reqId,\n token: token.toString(),\n activationOptions,\n preloginUserId,\n })\n )\n .then((userObj) => ({\n activated: true,\n exists: true,\n details: 'user is authorized via a user token',\n user: userObj,\n }));\n }\n\n // Destructure the client authorization details.\n /* eslint-disable camelcase */\n const {client_id, client_secret} = this.webex.credentials.config;\n\n // Validate that client authentication details exist.\n if (!client_id || !client_secret) {\n return Promise.reject(new Error('client authentication details are not available'));\n }\n /* eslint-enable camelcase */\n\n // Declare a class-memeber-scoped token for usage within the promise chain.\n let token;\n\n // Begin client authentication user validation.\n return (\n this.collectPreauthCatalog({email})\n .then(() => {\n // Retrieve the service url from the updated catalog. This is required\n // since `WebexCore` is usually not fully initialized at the time this\n // request completes.\n const idbrokerService = this.get('idbroker');\n\n // Collect the client auth token.\n return this.webex.credentials.getClientToken({\n uri: `${idbrokerService}idb/oauth2/v1/access_token`,\n scope: 'webexsquare:admin webexsquare:get_conversation Identity:SCIM',\n });\n })\n .then((tokenObj) => {\n // Generate the token string.\n token = tokenObj.toString();\n\n // Collect the signin catalog using the client auth information.\n return this.collectSigninCatalog({email, token, forceRefresh});\n })\n // Validate if collecting the signin catalog failed and populate the RTO\n // with the appropriate content.\n .catch((error) => ({\n exists: error.name !== 'NotFound',\n activated: false,\n details:\n error.name !== 'NotFound'\n ? 'user exists but is not activated'\n : 'user does not exist and is not activated',\n }))\n // Validate if the previous promise resolved with an RTO and populate the\n // new RTO accordingly.\n .then((rto) =>\n Promise.all([\n rto || {\n activated: true,\n exists: true,\n details: 'user exists and is activated',\n },\n this.sendUserActivation({\n email,\n reqId,\n token,\n activationOptions,\n preloginUserId,\n }),\n ])\n )\n .then(([rto, user]) => ({...rto, user}))\n .catch((error) => {\n const response = {\n statusCode: error.statusCode,\n responseText: error.body && error.body.message,\n body: error.body,\n };\n\n return Promise.reject(response);\n })\n );\n },\n /**\n * Update cluster id via mercury service update. If the cluster id does not exist,\n * fetch new catalog.\n *\n * @param {ActiveServices} newActiveClusters - The new active clusters to switch to.\n * @returns {Promsie<void>}\n * */\n switchActiveClusterIds(newActiveClusters: ActiveServices): Promise<void> {\n this.logger.info('services: switching active cluster ids');\n\n const newActiveClusterIds = Object.values(newActiveClusters);\n\n const missingClusterIds = newActiveClusterIds.some((clusterId) => {\n // if the clusterId does not exist in the catalog, fetch the catalog\n return !this._services.find((service) => service.id === clusterId);\n });\n\n if (missingClusterIds) {\n this.logger.warn(\n 'services: some cluster ids do not exist in the catalog, fetching the catalog'\n );\n\n // fetch the catalog\n return this.initServiceCatalogs(true);\n }\n // update the active services\n this._updateActiveServices(newActiveClusters);\n this.logger.info('services: active cluster ids updated successfully');\n\n return Promise.resolve();\n },\n\n /**\n * Invalidate cache via mercury notification. If the timestamp is newer than current,\n * refetch catalog services.\n *\n * @param {string} timestamp - The timestamp of invalidation notification.\n * @returns {Promsie<void>}\n * */\n invalidateCache(timestamp: string): Promise<void> {\n this.logger.info('services: invalidate cache, timestamp:', timestamp);\n const lastTime = toNumber(this._getCatalog()?.timestamp) || 0;\n const invalidateTime = toNumber(timestamp) || 0;\n if (invalidateTime > lastTime) {\n this.logger.info('services: invalidateCache, refresh services');\n this.initServiceCatalogs(true);\n }\n\n return Promise.resolve();\n },\n /**\n * Get user meeting preferences (preferred webex site).\n *\n * @returns {object} - User Information including user preferrences .\n */\n getMeetingPreferences() {\n return this.request({\n method: 'GET',\n service: 'hydra',\n resource: 'meetingPreferences',\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to fetch user login information', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * Fetches client region info such as countryCode and timezone.\n *\n * @returns {object} - The region info object.\n */\n fetchClientRegionInfo() {\n const {services} = this.webex.config;\n\n return this.request({\n uri: services.discovery.sqdiscovery,\n addAuthHeader: false,\n headers: {\n 'spark-user-agent': null,\n },\n timeout: 5000,\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to get user region info', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * User activation parameter transfer object for {@link sendUserActivation}.\n * @typedef {object} SendUserActivationPTO\n * @property {string} SendUserActivationPTO.email - The email of the user.\n * @property {string} SendUserActivationPTO.reqId - The activation requester.\n * @property {string} SendUserActivationPTO.token - The client auth token.\n * @property {object} SendUserActivationPTO.activationOptions - Extra options to pass when sending the activation.\n * @property {object} SendUserActivationPTO.preloginUserId - The prelogin user id to set when sending the activation.\n */\n\n /**\n * Send a request to activate a user using a client token.\n *\n * @param {SendUserActivationPTO} - The Parameter transfer object.\n * @returns {LicenseDTO} - The DTO returned from the **License** service.\n */\n sendUserActivation({email, reqId, token, activationOptions, preloginUserId}) {\n this.logger.info('services: sending user activation request');\n let countryCode;\n let timezone;\n\n // try to fetch client region info first\n return (\n this.fetchClientRegionInfo()\n .then((clientRegionInfo) => {\n if (clientRegionInfo) {\n ({countryCode, timezone} = clientRegionInfo);\n }\n\n // Send the user activation request.\n // Use user-onboarding service if configured, otherwise use license service.\n const useUserOnboarding =\n this.webex.config.services?.useUserOnboardingServiceForActivations;\n\n return this.request({\n service: useUserOnboarding ? 'user-onboarding' : 'license',\n resource: useUserOnboarding ? 'api/v1/users/activations' : 'users/activations',\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: token,\n 'x-prelogin-userid': preloginUserId,\n },\n body: {\n email,\n reqId,\n countryCode,\n timeZone: timezone,\n ...activationOptions,\n },\n shouldRefreshAccessToken: false,\n });\n })\n // On success, return the **License** user object.\n .then(({body}) => body)\n // On failure, reject with error from **License**.\n .catch((error) => Promise.reject(error))\n );\n },\n\n /**\n * Updates a given service group i.e. preauth, signin, postauth with a new hostmap.\n * @param {ServiceGroup} serviceGroup - preauth, signin, postauth\n * @param {ServiceHostmap} hostMap - The new hostmap to update the service group with.\n * @returns {Promise<void>}\n */\n updateCatalog(serviceGroup: ServiceGroup, hostMap: ServiceHostmap): Promise<void> {\n const catalog = this._getCatalog();\n\n const serviceHostMap = this._formatReceivedHostmap(hostMap || {});\n\n return catalog.updateServiceGroups(\n serviceGroup,\n serviceHostMap?.services,\n serviceHostMap?.timestamp\n );\n },\n\n /**\n * simplified method to update the preauth catalog via email\n *\n * @param {object} query\n * @param {string} query.email - A standard format email.\n * @param {string} query.orgId - The user's OrgId.\n * @param {boolean} forceRefresh - Boolean to bypass u2c cache control header\n * @returns {Promise<void>}\n */\n collectPreauthCatalog(query: QueryOptions, forceRefresh = false) {\n if (!query) {\n return this.updateServices({\n from: 'limited',\n query: {mode: 'DEFAULT_BY_PROXIMITY'},\n forceRefresh,\n });\n }\n\n return this.updateServices({from: 'limited', query, forceRefresh});\n },\n\n /**\n * simplified method to update the signin catalog via email and token\n * @param {object} param\n * @param {string} param.email - must be a standard-format email\n * @param {string} param.token - must be a client token\n * @returns {Promise<void>}\n */\n collectSigninCatalog(\n {email, token, forceRefresh} = {} as {email: string; token: string; forceRefresh: boolean}\n ): Promise<void> {\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n if (!token) {\n return Promise.reject(new Error('`token` is required'));\n }\n\n return this.updateServices({\n from: 'signin',\n query: {email},\n token,\n forceRefresh,\n });\n },\n\n /**\n * Updates credentials config to utilize u2c catalog\n * urls.\n * @returns {void}\n */\n updateCredentialsConfig(): void {\n const idbrokerUrl = this.get('idbroker');\n const identityUrl = this.get('identity');\n\n if (idbrokerUrl && identityUrl) {\n const {authorizationString, authorizeUrl} = this.webex.config.credentials;\n\n // This must be set outside of the setConfig method used to assign the\n // idbroker and identity url values.\n this.webex.config.credentials.authorizeUrl = authorizationString\n ? authorizeUrl\n : `${idbrokerUrl.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbrokerUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identityUrl.replace(trailingSlashes, ''), // remove trailing slash\n },\n },\n });\n }\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject afte ra timeout of 60 seconds.\n * @param {ServiceGroup} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup: ServiceGroup, timeout: number): Promise<void> {\n const catalog = this._getCatalog();\n const {supertoken} = this.webex.credentials;\n\n if (\n serviceGroup === 'postauth' &&\n supertoken &&\n supertoken.access_token &&\n !catalog.status.postauth.collecting &&\n !catalog.status.postauth.ready\n ) {\n if (!catalog.status.preauth.ready) {\n return this.initServiceCatalogs();\n }\n\n return this.updateServices();\n }\n\n return catalog.waitForCatalog(serviceGroup, timeout);\n },\n\n /**\n * Service waiting parameter transfer object for {@link waitForService}.\n *\n * @typedef {object} WaitForServicePTO\n * @property {string} [WaitForServicePTO.name] - The service name.\n * @property {string} [WaitForServicePTO.url] - The service url.\n * @property {string} [WaitForServicePTO.timeout] - wait duration in seconds.\n */\n\n /**\n * Wait until the service has been ammended to any service catalog. This\n * method prioritizes the service name over the service url when searching.\n *\n * @param {WaitForServicePTO} - The parameter transfer object.\n * @returns {Promise<string>} - Resolves to the priority host of a service.\n */\n waitForService({\n name,\n timeout = 5,\n url,\n }: {\n name: string;\n timeout: number;\n url: string;\n }): Promise<string> {\n const {services} = this.webex.config;\n\n // Save memory by grabbing the catalog after there isn't a priortyURL\n const catalog = this._getCatalog();\n\n const fetchFromServiceUrl = services.servicesNotNeedValidation.find(\n (service) => service === name\n );\n\n if (fetchFromServiceUrl) {\n const clusterId = this._activeServices[name];\n\n return Promise.resolve(this.get(clusterId));\n }\n\n const priorityUrl = this.get(name);\n const priorityUrlObj = this.getServiceFromUrl(url);\n\n if (priorityUrl || priorityUrlObj) {\n return Promise.resolve(priorityUrl || priorityUrlObj.priorityUrl);\n }\n\n if (catalog.isReady) {\n if (url) {\n return Promise.resolve(url);\n }\n\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n\n return Promise.reject(\n new Error(`services: service '${name}' was not found in any of the catalogs`)\n );\n }\n\n return new Promise((resolve, reject) => {\n const groupsToCheck = ['preauth', 'signin', 'postauth'];\n const checkCatalog = (catalogGroup) =>\n catalog\n .waitForCatalog(catalogGroup, timeout)\n .then(() => {\n const scopedPriorityUrl = this.get(name);\n const scopedPrioriryUrlObj = this.getServiceFromUrl(url);\n\n if (scopedPriorityUrl || scopedPrioriryUrlObj) {\n resolve(scopedPriorityUrl || scopedPrioriryUrlObj.priorityUrl);\n }\n })\n .catch(() => undefined);\n\n Promise.all(groupsToCheck.map((group) => checkCatalog(group))).then(() => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n reject(new Error(`services: service '${name}' was not found after waiting`));\n });\n });\n },\n\n /**\n * Looks up the hostname in the host catalog\n * and replaces it with the first host if it finds it\n * @param {string} uri\n * @returns {string} uri with the host replaced\n */\n replaceHostFromHostmap(uri: string): string {\n try {\n return this.convertUrlToPriorityHostUrl(uri);\n } catch {\n return uri;\n }\n },\n\n /**\n * Formats a host map entry for use in service catalog.\n *\n * @param {Object} entry - The host map entry to format.\n * @param {string} entry.serviceName - i.e. conversation, identity, etc.\n * @param {string} entry.id - The unique identifier for the service, usually clusterId.\n * @param {Array<IServiceDetail>} entry.serviceUrls - The group to which the service belongs.\n * @returns {Object} - The formatted host map entry.\n */\n _formatHostMapEntry({id, serviceName, serviceUrls}) {\n const formattedServiceUrls = serviceUrls.map((serviceUrl) => ({\n host: new URL(serviceUrl.baseUrl).host,\n ...serviceUrl,\n }));\n\n return {\n id,\n serviceName,\n serviceUrls: formattedServiceUrls,\n };\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * @param {ServiceHostmap} serviceHostmap\n * catalog endpoint.\n * @returns {Array<Service>}\n */\n _formatReceivedHostmap({services, activeServices, timestamp, orgId, format}) {\n const formattedHostmap: ServiceHostmap = {\n activeServices,\n services: services?.map((service) => this._formatHostMapEntry(service)),\n timestamp,\n orgId,\n format,\n };\n this._updateActiveServices(activeServices);\n this._updateServices(services);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string | undefined} - Cluster ID of url provided\n */\n getClusterId(url: string): string | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findClusterId(url);\n },\n\n /**\n * Get a service value from a provided clusterId. This method will\n * return an object containing both the name and url of a found service.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {ServiceGroup} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n getServiceFromClusterId(params: {\n clusterId: string;\n serviceGroup?: ServiceGroup;\n }): {name: string; url: string} | undefined {\n const catalog = this._getCatalog();\n\n return catalog.findServiceFromClusterId(params);\n },\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the service\n */\n getServiceUrlFromClusterId({cluster = 'us'}: {cluster?: string} = {}): string {\n let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;\n\n // Determine if cluster has service name (non-US clusters from hydra do not)\n if (clusterId.split(':').length < 4) {\n // Add Service to cluster identifier\n clusterId = `${cluster}:${CLUSTER_SERVICE}`;\n }\n\n const {url} = this.getServiceFromClusterId({clusterId}) || {};\n\n if (!url) {\n throw Error(`Could not find service for cluster [${cluster}]`);\n }\n\n return url;\n },\n\n /**\n * Get a service object from a service url if the service url exists in the\n * catalog.\n *\n * @param {string} url - The url to be validated.\n * @returns {object} - Service object.\n * @returns {object.name} - The name of the service found.\n * @returns {object.priorityUrl} - The default url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = ''): {name: string; priorityUrl: string; defaultUrl: string} | undefined {\n const service = this._getCatalog().findServiceDetailFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n const priorityUrl = service.get();\n const defaultUrl = new URL(\n service.serviceUrls.find((serviceUrl) => url.startsWith(serviceUrl.baseUrl)).baseUrl\n ).href;\n\n return {\n name: service.serviceName,\n priorityUrl,\n defaultUrl,\n };\n },\n\n /**\n * Determine if a provided url is in the catalog's allowed domains.\n *\n * @param {string} url - The url to match allowed domains against.\n * @returns {boolean} - True if the url provided is allowed.\n */\n isAllowedDomainUrl(url: string): boolean {\n const catalog = this._getCatalog();\n\n return !!catalog.findAllowedDomain(url);\n },\n\n /**\n * Converts the host portion of the url from default host\n * to a priority host\n *\n * @param {string} url a service url that contains a default host\n * @returns {string} a service url that contains the top priority host.\n * @throws if url isn't a service url\n */\n convertUrlToPriorityHostUrl(url = '' as string): string {\n const data = this.getServiceFromUrl(url);\n\n if (!data) {\n throw Error(`No service associated with url: [${url}]`);\n }\n\n return url.replace(data.defaultUrl, data.priorityUrl);\n },\n\n /**\n * @private\n * Cache the catalog in the bounded storage.\n * @param {ServiceGroup} serviceGroup - preauth, signin, postauth\n * @param {ServiceHostmap} hostMap - The hostmap to cache\n * @param {object} [meta] - Optional selection metadata for cache discrimination\n * @returns {Promise<void>}\n */\n async _cacheCatalog(\n serviceGroup: ServiceGroup,\n hostMap: ServiceHostmap,\n meta?: SelectionMeta\n ): Promise<void> {\n let current: {orgId?: string; env?: {fedramp?: boolean; u2cDiscoveryUrl?: string}} = {};\n let orgId: string | undefined;\n try {\n // Respect calling.cacheU2C toggle; if disabled, skip writing cache\n if (!this.webex.config?.calling?.cacheU2C) {\n this.logger.info(`services: skipping cache write for ${serviceGroup} as per the config`);\n\n return;\n }\n\n try {\n const ls = this._getLocalStorageSafe();\n const cachedJson = ls ? ls.getItem(CATALOG_CACHE_KEY_V2) : null;\n current = cachedJson ? JSON.parse(cachedJson) : {};\n } catch {\n current = {};\n }\n\n try {\n const {credentials} = this.webex;\n orgId = credentials.getOrgId();\n } catch {\n orgId = current.orgId;\n }\n\n // Capture environment fingerprint to invalidate cache across env changes\n let {env} = current;\n const fedramp = !!this.webex?.config?.fedramp;\n const u2cDiscoveryUrl = this.webex?.config?.services?.discovery?.u2c;\n env = {fedramp, u2cDiscoveryUrl};\n\n const updated = {\n ...current,\n orgId: orgId || current.orgId,\n env: env || current.env,\n // When selection meta is provided, store as an object; otherwise keep legacy shape\n [serviceGroup]: meta ? {hostMap, meta} : hostMap,\n cachedAt: Date.now(),\n };\n\n const ls = this._getLocalStorageSafe();\n if (ls) {\n ls.setItem(CATALOG_CACHE_KEY_V2, JSON.stringify(updated));\n }\n } catch (e) {\n this.logger.warn('services: error caching catalog', e);\n }\n },\n\n /**\n * @private\n * Load the catalog from cache and hydrate the in-memory ServiceCatalog.\n * @returns {Promise<boolean>} true if cache was loaded, false otherwise\n */\n async _loadCatalogFromCache(): Promise<boolean> {\n let currentOrgId: string | undefined;\n try {\n // Respect calling.cacheU2C toggle; if disabled, skip using cache\n if (!this.webex.config?.calling?.cacheU2C) {\n this.logger.info('services: skipping cache warm-up as per the cache config');\n\n return false;\n }\n\n const ls = this._getLocalStorageSafe();\n if (!ls) {\n this.logger.info('services: skipping cache warm-up as no localStorage is available');\n\n return false;\n }\n const cachedJson = ls.getItem(CATALOG_CACHE_KEY_V2);\n const cached = cachedJson ? JSON.parse(cachedJson) : undefined;\n if (!cached) {\n return false;\n }\n\n // TTL enforcement\n const cachedAt = Number(cached.cachedAt) || 0;\n if (!cachedAt || Date.now() - cachedAt > CATALOG_TTL_MS) {\n this.clearCatalogCache();\n\n return false;\n }\n\n // If authorized, ensure cached org matches\n try {\n if (this.webex.credentials?.canAuthorize) {\n const {credentials} = this.webex;\n currentOrgId = credentials.getOrgId();\n if (cached.orgId && cached.orgId !== currentOrgId) {\n return false;\n }\n }\n } catch (e) {\n this.logger.warn('services: error checking orgId', e);\n }\n\n // Ensure cached environment matches current environment\n\n const fedramp = !!this.webex.config?.fedramp;\n const u2cDiscoveryUrl = this.webex.config?.services?.discovery?.u2c;\n const currentEnv = {fedramp, u2cDiscoveryUrl};\n if (cached.env) {\n const sameEnv =\n cached.env.fedramp === currentEnv.fedramp &&\n cached.env.u2cDiscoveryUrl === currentEnv.u2cDiscoveryUrl;\n if (!sameEnv) {\n return false;\n }\n }\n\n const catalog = this._getCatalog();\n const groups: Array<ServiceGroup> = ['preauth', 'signin', 'postauth'];\n\n groups.forEach((serviceGroup) => {\n const cachedGroup = cached[serviceGroup];\n if (!cachedGroup) {\n return;\n }\n\n // Support legacy (hostMap) and new ({hostMap, meta}) shapes\n const hostMap: ServiceHostmap =\n cachedGroup && cachedGroup.hostMap ? cachedGroup.hostMap : cachedGroup;\n const meta: SelectionMeta | undefined = cachedGroup?.meta;\n\n if (serviceGroup === 'preauth' && meta) {\n // For proximity-based selection, always fetch fresh to respect IP/region changes\n if (meta.selectionType === 'mode') {\n return;\n }\n\n const intended = this.getIntendedPreauthSelection(currentOrgId);\n const matches =\n intended &&\n intended.selectionType === meta.selectionType &&\n intended.selectionValue === meta.selectionValue;\n if (!matches) {\n return;\n }\n }\n\n if (hostMap) {\n catalog.updateServiceGroups(serviceGroup, hostMap?.services, hostMap?.timestamp);\n }\n });\n\n this.updateCredentialsConfig();\n\n return true;\n } catch (e) {\n return false;\n }\n },\n\n /**\n * Clear the catalog cache from the bounded storage (v2).\n * @returns {Promise<void>}\n */\n clearCatalogCache(): Promise<void> {\n try {\n const ls = this._getLocalStorageSafe();\n if (ls) {\n ls.removeItem(CATALOG_CACHE_KEY_V2);\n }\n } catch (e) {\n this.logger.warn('services: error clearing catalog cache', e);\n }\n\n return Promise.resolve();\n },\n\n /**\n * @private\n * Simplified method wrapper for sending a request to get\n * an updated service hostmap.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n _fetchNewServiceHostmap(\n {from, query, token, forceRefresh} = {} as {\n from: string;\n query: QueryOptions;\n token: string;\n forceRefresh: boolean;\n }\n ): Promise<object> {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {\n ...(query || {}),\n format: 'U2CV2',\n ...(this.webex.config?.services?.useCatalogOverride && {useCatalogOverride: true}),\n };\n\n if (forceRefresh) {\n qs.timestamp = new Date().getTime();\n }\n\n const requestObject = {\n method: 'GET',\n service,\n resource,\n qs,\n headers: {},\n };\n\n if (token) {\n requestObject.headers = {authorization: token};\n }\n\n return this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(() => this.request(requestObject), 'internal.get.u2c.time')\n .then(({body}) => this._formatReceivedHostmap(body || {}));\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig(): void {\n // Get the catalog and destructure the services config.\n const catalog = this._getCatalog();\n const {services, fedramp} = this.webex.config;\n\n // Validate that the services configuration exists.\n if (services) {\n if (fedramp) {\n services.discovery = fedRampServices;\n }\n // Check for discovery services.\n if (services.discovery) {\n // Format the discovery configuration into an injectable array.\n const formattedDiscoveryServices = Object.keys(services.discovery).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.discovery[key], priority: 1}],\n })\n );\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceGroups('discovery', formattedDiscoveryServices);\n }\n\n if (services.override) {\n // Format the override configuration into an injectable array.\n const formattedOverrideServices = Object.keys(services.override).map((key) =>\n this._formatHostMapEntry({\n id: key,\n serviceName: key,\n serviceUrls: [{baseUrl: services.override[key], priority: 1}],\n })\n );\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceGroups('override', formattedOverrideServices);\n }\n\n // if not fedramp, append on the commercialAllowedDomains\n if (!fedramp) {\n services.allowedDomains = union(services.allowedDomains, COMMERCIAL_ALLOWED_DOMAINS);\n }\n\n // Check for allowed host domains.\n if (services.allowedDomains) {\n // Store the allowed domains as a property of the catalog.\n catalog.setAllowedDomains(services.allowedDomains);\n }\n\n // Set `validateDomains` property to match configuration\n this.validateDomains = services.validateDomains;\n }\n },\n\n /**\n * Make the initial requests to collect the root catalogs.\n * @param {boolean} refresh - Is need force update\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs(refresh = false): Promise<void> {\n this.logger.info('services: initializing initial service catalogs');\n\n // Destructure the credentials plugin.\n const {credentials} = this.webex;\n const catalog = this._getCatalog();\n\n // Init a promise chain. Must be done as a Promise.resolve() to allow\n // credentials#getOrgId() to properly throw.\n return (\n Promise.resolve()\n // Get the user's OrgId.\n .then(() => credentials.getOrgId())\n // Begin collecting the preauth/limited catalog.\n .then((orgId) => this.collectPreauthCatalog({orgId}, refresh))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog, then mark the catalog\n // ready. Setting `isReady` here - rather than only in the init\n // callers - means a slow postauth fetch that loses the gated-init\n // timeout race still marks the catalog ready once it completes.\n return this.updateServices({forceRefresh: refresh})\n .then(() => {\n catalog.isReady = true;\n })\n .catch(() => {\n this.initFailed = true;\n this.logger.warn('services: cannot retrieve postauth catalog');\n });\n }\n\n // Return a resolved promise for consistent return value.\n return Promise.resolve();\n })\n );\n },\n\n /**\n * Await any in-flight credentials refresh, then flip `services.ready` so\n * `webex.ready` can fire. Closes the parallel-refresh window: if a credential\n * refresh is in flight when initial catalog collection settles, we must not\n * signal ready until the refresh has resolved - otherwise downstream\n * consumers may observe `canAuthorize`/token state that is about to change\n * under them.\n *\n * @private\n * @returns {Promise<void>}\n */\n async _finalizeReady(): Promise<void> {\n const {credentials} = this.webex;\n\n if (credentials && credentials.isRefreshing) {\n await new Promise<void>((resolve) => {\n credentials.once('change:isRefreshing', resolve);\n });\n }\n\n this.ready = true;\n },\n\n /**\n * Initializer\n *\n * @instance\n * @memberof Services\n * @returns {Services}\n */\n initialize(): typeof Services {\n const catalog = new ServiceCatalog();\n this._catalogs.set(this.webex, catalog);\n\n // Listen for configuration changes once. The config is not populated on the\n // webex instance until the `change:config` event fires, so any decision that\n // depends on config values (such as the gated-vs-ungated init below) must be\n // made from within this handler rather than synchronously in `initialize()`.\n this.listenToOnce(this.webex, 'change:config', () => {\n this.initConfig();\n\n // Feature flag: when enabled, `webex.ready` is blocked until the initial\n // catalog collection has settled AND any in-flight credentials refresh has\n // completed. When disabled (the default), preserves the pre-existing\n // behavior where `webex.ready` fires as soon as `webex.loaded` does and\n // the catalog is collected out-of-band.\n const waitForCatalogInit = this.webex.config?.services?.waitForCatalogInit === true;\n\n if (waitForCatalogInit) {\n this._initializeCatalogsGated(catalog);\n } else {\n // Not gating - immediately mark ready so we do not block webex.ready.\n this.ready = true;\n this._initializeCatalogsUngated(catalog);\n }\n });\n },\n\n /**\n * Original (pre-verified-ready) initialization path. Runs on `webex.ready`\n * and collects catalogs opportunistically without blocking anything.\n *\n * @private\n * @param {ServiceCatalog} catalog\n * @returns {void}\n */\n _initializeCatalogsUngated(catalog: ServiceCatalog): void {\n // wait for webex instance to be ready before attempting\n // to update the service catalogs\n this.listenToOnce(this.webex, 'ready', async () => {\n const warmed = await this._loadCatalogFromCache();\n if (warmed) {\n catalog.isReady = true;\n\n return;\n }\n const {supertoken} = this.webex.credentials;\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n // `initServiceCatalogs` marks the catalog ready internally once the\n // postauth catalog is collected.\n this.initServiceCatalogs().catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n });\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n });\n }\n });\n },\n\n /**\n * Verified-ready initialization path. Blocks `webex.ready` until the initial\n * catalog fetch has settled (or timed out) AND any in-flight credentials\n * refresh has completed. Also handles the fresh-login case where OAuth\n * completes after `loaded` fires.\n *\n * @private\n * @param {ServiceCatalog} catalog\n * @returns {void}\n */\n _initializeCatalogsGated(catalog: ServiceCatalog): void {\n // Wait for storage to be loaded before attempting to update the service\n // catalogs. We listen for 'loaded' instead of 'ready' because `services.ready`\n // now blocks `webex.ready` - listening to 'ready' would deadlock.\n this.listenToOnce(this.webex, 'loaded', async () => {\n const warmed = await this._loadCatalogFromCache();\n if (warmed) {\n catalog.isReady = true;\n await this._finalizeReady();\n\n return;\n }\n const {supertoken} = this.webex.credentials;\n\n // Race init against a hard timeout so a hung request never leaves\n // `services.ready` false forever - that would stall `webex.ready` and\n // leave consumers waiting on it indefinitely. Timeout is configurable via\n // `config.services.catalogInitTimeout` (defaults to 15s in config).\n const initTimeoutMs = this.webex.config?.services?.catalogInitTimeout;\n const initServiceCatalogsTimeout = new Promise<never>((_, reject) => {\n setTimeout(\n () => reject(new Error(`services: init timed out after ${initTimeoutMs}ms`)),\n initTimeoutMs\n );\n });\n\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n // `initServiceCatalogs` marks the catalog ready internally once the\n // postauth catalog is collected - even if it loses the timeout race\n // above, so a slow fetch still eventually flips `catalog.isReady`.\n Promise.race([this.initServiceCatalogs(), initServiceCatalogsTimeout])\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n })\n .finally(() => this._finalizeReady());\n } else {\n const {email} = this.webex.config;\n\n Promise.race([\n this.collectPreauthCatalog(email ? {email} : undefined),\n initServiceCatalogsTimeout,\n ])\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n })\n .finally(() => this._finalizeReady());\n\n // Handle fresh login: 'loaded' fires before OAuth completes, so listen\n // for `canAuthorize` flipping true and then collect the postauth catalog.\n this.listenToOnce(this.webex, 'change:canAuthorize', () => {\n if (this.webex.canAuthorize && !catalog.status.postauth.ready) {\n // `initServiceCatalogs` marks the catalog ready internally.\n this.initServiceCatalogs().catch((error) => {\n this.logger.error(\n `services: failed to init service catalogs after auth, ${error?.message}`\n );\n });\n }\n });\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":"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","ignoreList":[]}
|
package/dist/plugins/logger.js
CHANGED
|
@@ -57,7 +57,7 @@ var Logger = _webexPlugin.default.extend({
|
|
|
57
57
|
info: wrapConsoleMethod('info'),
|
|
58
58
|
debug: wrapConsoleMethod('debug'),
|
|
59
59
|
trace: wrapConsoleMethod('trace'),
|
|
60
|
-
version: "3.12.0-next.
|
|
60
|
+
version: "3.12.0-next.36"
|
|
61
61
|
});
|
|
62
62
|
(0, _webexCore.registerPlugin)('logger', Logger);
|
|
63
63
|
var _default = exports.default = Logger;
|
package/dist/webex-core.js
CHANGED
|
@@ -96,7 +96,7 @@ var MAX_FILE_SIZE_IN_MB = 2048;
|
|
|
96
96
|
* @class
|
|
97
97
|
*/
|
|
98
98
|
var WebexCore = _ampersandState.default.extend((_obj = {
|
|
99
|
-
version: "3.12.0-next.
|
|
99
|
+
version: "3.12.0-next.36",
|
|
100
100
|
children: {
|
|
101
101
|
internal: _webexInternalCore.default
|
|
102
102
|
},
|
|
@@ -634,7 +634,7 @@ var WebexCore = _ampersandState.default.extend((_obj = {
|
|
|
634
634
|
});
|
|
635
635
|
}
|
|
636
636
|
}, (0, _applyDecoratedDescriptor2.default)(_obj, "_uploadPhaseUpload", [_common.retry], (0, _getOwnPropertyDescriptor.default)(_obj, "_uploadPhaseUpload"), _obj), _obj));
|
|
637
|
-
WebexCore.version = "3.12.0-next.
|
|
637
|
+
WebexCore.version = "3.12.0-next.36";
|
|
638
638
|
(0, _webexInternalCorePluginMixin.default)(_webexInternalCore.default, _config.default, interceptors);
|
|
639
639
|
(0, _webexCorePluginMixin.default)(WebexCore, _config.default, interceptors);
|
|
640
640
|
var _default = exports.default = WebexCore;
|
package/package.json
CHANGED
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"@sinonjs/fake-timers": "^6.0.1",
|
|
34
34
|
"@webex/babel-config-legacy": "0.0.0",
|
|
35
35
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
36
|
-
"@webex/internal-plugin-device": "3.12.0-next.
|
|
36
|
+
"@webex/internal-plugin-device": "3.12.0-next.36",
|
|
37
37
|
"@webex/jest-config-legacy": "0.0.0",
|
|
38
38
|
"@webex/legacy-tools": "0.0.0",
|
|
39
|
-
"@webex/plugin-logger": "3.12.0-next.
|
|
39
|
+
"@webex/plugin-logger": "3.12.0-next.36",
|
|
40
40
|
"@webex/test-helper-chai": "3.12.0-next.5",
|
|
41
41
|
"@webex/test-helper-make-local-url": "3.12.0-next.5",
|
|
42
42
|
"@webex/test-helper-mocha": "3.12.0-next.5",
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"test:style": "eslint ./src/**/*.*",
|
|
74
74
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
75
75
|
},
|
|
76
|
-
"version": "3.12.0-next.
|
|
76
|
+
"version": "3.12.0-next.36"
|
|
77
77
|
}
|
package/src/config.js
CHANGED
|
@@ -27,6 +27,13 @@ export default {
|
|
|
27
27
|
*/
|
|
28
28
|
useUserOnboardingServiceForActivations: false,
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* When true, requests the U2C catalog override.
|
|
32
|
+
*
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
*/
|
|
35
|
+
useCatalogOverride: false,
|
|
36
|
+
|
|
30
37
|
/**
|
|
31
38
|
* Maximum time (in milliseconds) to wait for the initial service catalog
|
|
32
39
|
* collection when `waitForCatalogInit` is enabled, before letting
|
|
@@ -1235,7 +1235,11 @@ const Services = WebexPlugin.extend({
|
|
|
1235
1235
|
): Promise<object> {
|
|
1236
1236
|
const service = 'u2c';
|
|
1237
1237
|
const resource = from ? `/${from}/catalog` : '/catalog';
|
|
1238
|
-
const qs = {
|
|
1238
|
+
const qs = {
|
|
1239
|
+
...(query || {}),
|
|
1240
|
+
format: 'U2CV2',
|
|
1241
|
+
...(this.webex.config?.services?.useCatalogOverride && {useCatalogOverride: true}),
|
|
1242
|
+
};
|
|
1239
1243
|
|
|
1240
1244
|
if (forceRefresh) {
|
|
1241
1245
|
qs.timestamp = new Date().getTime();
|
|
@@ -675,6 +675,22 @@ describe('webex-core', () => {
|
|
|
675
675
|
);
|
|
676
676
|
});
|
|
677
677
|
|
|
678
|
+
it('includes the catalog override query when configured', async () => {
|
|
679
|
+
services.webex.config.services = {useCatalogOverride: true};
|
|
680
|
+
sinon.stub(services, '_formatReceivedHostmap').resolves('map response');
|
|
681
|
+
sinon.stub(services, 'request').resolves({});
|
|
682
|
+
|
|
683
|
+
await services._fetchNewServiceHostmap({from: 'limited'});
|
|
684
|
+
|
|
685
|
+
assert.calledOnceWithExactly(services.request, {
|
|
686
|
+
method: 'GET',
|
|
687
|
+
service: 'u2c',
|
|
688
|
+
resource: '/limited/catalog',
|
|
689
|
+
qs: {format: 'U2CV2', useCatalogOverride: true},
|
|
690
|
+
headers: {},
|
|
691
|
+
});
|
|
692
|
+
});
|
|
693
|
+
|
|
678
694
|
it('checks service request rejects', async () => {
|
|
679
695
|
const error = new Error('some error');
|
|
680
696
|
|