@webex/webex-core 3.3.1-next.9 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -38,6 +38,12 @@ _Object$defineProperty(exports, "EmbargoInterceptor", {
38
38
  return _embargo.default;
39
39
  }
40
40
  });
41
+ _Object$defineProperty(exports, "HostMapInterceptor", {
42
+ enumerable: true,
43
+ get: function get() {
44
+ return _services.HostMapInterceptor;
45
+ }
46
+ });
41
47
  _Object$defineProperty(exports, "MemoryStoreAdapter", {
42
48
  enumerable: true,
43
49
  get: function get() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["require","_credentials","_services","_storage","_webexCore","_interopRequireWildcard","_webexHttpError","_interopRequireDefault","_statelessWebexPlugin","_webexPlugin","_auth","_networkTiming","_payloadTransformer","_redirect","_responseLogger","_requestEvent","_requestLogger","_requestTiming","_userAgent","_webexTrackingId","_webexUserAgent","_rateLimit","_embargo","_defaultOptions","_batcher","_page","_config","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n *\n * Services is currently a part of webex-core due to how the contents of\n * the original internal-plugin-services needed to be accessed when webex-core\n * is initialized. As a plugin outside of webex-core, it would initialize after\n * credentials, causing all requests prior to its initialization to fail\n * federation requirements, and instead send requests to the environmentally-\n * assigned urls.\n */\n\nimport './plugins/logger';\nimport './lib/credentials';\nimport './lib/services';\n\nexport {Credentials, filterScope, grantErrors, sortScope, Token} from './lib/credentials';\n\nexport {\n constants as serviceConstants,\n ServiceCatalog,\n ServiceRegistry,\n ServiceState,\n ServiceInterceptor,\n ServerErrorInterceptor,\n Services,\n ServiceHost,\n ServiceUrl,\n} from './lib/services';\n\nexport {\n makeWebexStore,\n makeWebexPluginStore,\n MemoryStoreAdapter,\n NotFoundError,\n persist,\n StorageError,\n waitForValue,\n} from './lib/storage';\n\nexport {default, registerPlugin, registerInternalPlugin} from './webex-core';\n\nexport {default as WebexHttpError} from './lib/webex-http-error';\nexport {default as StatelessWebexPlugin} from './lib/stateless-webex-plugin';\nexport {default as WebexPlugin} from './lib/webex-plugin';\nexport {default as AuthInterceptor} from './interceptors/auth';\nexport {default as NetworkTimingInterceptor} from './interceptors/network-timing';\nexport {default as PayloadTransformerInterceptor} from './interceptors/payload-transformer';\nexport {default as RedirectInterceptor} from './interceptors/redirect';\nexport {default as ResponseLoggerInterceptor} from './interceptors/response-logger';\nexport {default as RequestEventInterceptor} from './interceptors/request-event';\nexport {default as RequestLoggerInterceptor} from './interceptors/request-logger';\nexport {default as RequestTimingInterceptor} from './interceptors/request-timing';\nexport {default as UserAgentInterceptor} from './interceptors/user-agent';\nexport {default as WebexTrackingIdInterceptor} from './interceptors/webex-tracking-id';\nexport {default as WebexUserAgentInterceptor} from './interceptors/webex-user-agent';\nexport {default as RateLimitInterceptor} from './interceptors/rate-limit';\nexport {default as EmbargoInterceptor} from './interceptors/embargo';\nexport {default as DefaultOptionsInterceptor} from './interceptors/default-options';\n\nexport {default as Batcher} from './lib/batcher';\nexport {default as Page} from './lib/page';\nexport {default as config} from './config';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWAA,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAgBA,IAAAG,QAAA,GAAAH,OAAA;AAUA,IAAAI,UAAA,GAAAC,uBAAA,CAAAL,OAAA;AAEA,IAAAM,eAAA,GAAAC,sBAAA,CAAAP,OAAA;AACA,IAAAQ,qBAAA,GAAAD,sBAAA,CAAAP,OAAA;AACA,IAAAS,YAAA,GAAAF,sBAAA,CAAAP,OAAA;AACA,IAAAU,KAAA,GAAAH,sBAAA,CAAAP,OAAA;AACA,IAAAW,cAAA,GAAAJ,sBAAA,CAAAP,OAAA;AACA,IAAAY,mBAAA,GAAAL,sBAAA,CAAAP,OAAA;AACA,IAAAa,SAAA,GAAAN,sBAAA,CAAAP,OAAA;AACA,IAAAc,eAAA,GAAAP,sBAAA,CAAAP,OAAA;AACA,IAAAe,aAAA,GAAAR,sBAAA,CAAAP,OAAA;AACA,IAAAgB,cAAA,GAAAT,sBAAA,CAAAP,OAAA;AACA,IAAAiB,cAAA,GAAAV,sBAAA,CAAAP,OAAA;AACA,IAAAkB,UAAA,GAAAX,sBAAA,CAAAP,OAAA;AACA,IAAAmB,gBAAA,GAAAZ,sBAAA,CAAAP,OAAA;AACA,IAAAoB,eAAA,GAAAb,sBAAA,CAAAP,OAAA;AACA,IAAAqB,UAAA,GAAAd,sBAAA,CAAAP,OAAA;AACA,IAAAsB,QAAA,GAAAf,sBAAA,CAAAP,OAAA;AACA,IAAAuB,eAAA,GAAAhB,sBAAA,CAAAP,OAAA;AAEA,IAAAwB,QAAA,GAAAjB,sBAAA,CAAAP,OAAA;AACA,IAAAyB,KAAA,GAAAlB,sBAAA,CAAAP,OAAA;AACA,IAAA0B,OAAA,GAAAnB,sBAAA,CAAAP,OAAA;AAA2C,SAAA2B,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAvB,wBAAAuB,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA"}
1
+ {"version":3,"names":["require","_credentials","_services","_storage","_webexCore","_interopRequireWildcard","_webexHttpError","_interopRequireDefault","_statelessWebexPlugin","_webexPlugin","_auth","_networkTiming","_payloadTransformer","_redirect","_responseLogger","_requestEvent","_requestLogger","_requestTiming","_userAgent","_webexTrackingId","_webexUserAgent","_rateLimit","_embargo","_defaultOptions","_batcher","_page","_config","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n *\n * Services is currently a part of webex-core due to how the contents of\n * the original internal-plugin-services needed to be accessed when webex-core\n * is initialized. As a plugin outside of webex-core, it would initialize after\n * credentials, causing all requests prior to its initialization to fail\n * federation requirements, and instead send requests to the environmentally-\n * assigned urls.\n */\n\nimport './plugins/logger';\nimport './lib/credentials';\nimport './lib/services';\n\nexport {Credentials, filterScope, grantErrors, sortScope, Token} from './lib/credentials';\n\nexport {\n constants as serviceConstants,\n ServiceCatalog,\n ServiceRegistry,\n ServiceState,\n ServiceInterceptor,\n ServerErrorInterceptor,\n Services,\n ServiceHost,\n ServiceUrl,\n HostMapInterceptor,\n} from './lib/services';\n\nexport {\n makeWebexStore,\n makeWebexPluginStore,\n MemoryStoreAdapter,\n NotFoundError,\n persist,\n StorageError,\n waitForValue,\n} from './lib/storage';\n\nexport {default, registerPlugin, registerInternalPlugin} from './webex-core';\n\nexport {default as WebexHttpError} from './lib/webex-http-error';\nexport {default as StatelessWebexPlugin} from './lib/stateless-webex-plugin';\nexport {default as WebexPlugin} from './lib/webex-plugin';\nexport {default as AuthInterceptor} from './interceptors/auth';\nexport {default as NetworkTimingInterceptor} from './interceptors/network-timing';\nexport {default as PayloadTransformerInterceptor} from './interceptors/payload-transformer';\nexport {default as RedirectInterceptor} from './interceptors/redirect';\nexport {default as ResponseLoggerInterceptor} from './interceptors/response-logger';\nexport {default as RequestEventInterceptor} from './interceptors/request-event';\nexport {default as RequestLoggerInterceptor} from './interceptors/request-logger';\nexport {default as RequestTimingInterceptor} from './interceptors/request-timing';\nexport {default as UserAgentInterceptor} from './interceptors/user-agent';\nexport {default as WebexTrackingIdInterceptor} from './interceptors/webex-tracking-id';\nexport {default as WebexUserAgentInterceptor} from './interceptors/webex-user-agent';\nexport {default as RateLimitInterceptor} from './interceptors/rate-limit';\nexport {default as EmbargoInterceptor} from './interceptors/embargo';\nexport {default as DefaultOptionsInterceptor} from './interceptors/default-options';\n\nexport {default as Batcher} from './lib/batcher';\nexport {default as Page} from './lib/page';\nexport {default as config} from './config';\n"],"mappings":"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"}
@@ -286,7 +286,7 @@ var Batcher = _webexPlugin.default.extend({
286
286
  fingerprintResponse: function fingerprintResponse(item) {
287
287
  throw new Error('fingerprintResponse() must be implemented');
288
288
  },
289
- version: "3.3.1-next.9"
289
+ version: "3.4.0"
290
290
  });
291
291
  var _default2 = exports.default = Batcher;
292
292
  //# sourceMappingURL=batcher.js.map
@@ -558,7 +558,7 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
558
558
  this.refresh();
559
559
  }
560
560
  },
561
- version: "3.3.1-next.9"
561
+ version: "3.4.0"
562
562
  }, ((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)));
563
563
  var _default = exports.default = Credentials;
564
564
  //# 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.3.1-next.9"
535
+ version: "3.4.0"
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
@@ -8,6 +8,12 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
8
8
  _Object$defineProperty(exports, "__esModule", {
9
9
  value: true
10
10
  });
11
+ _Object$defineProperty(exports, "HostMapInterceptor", {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return _hostmap.default;
15
+ }
16
+ });
11
17
  _Object$defineProperty(exports, "ServerErrorInterceptor", {
12
18
  enumerable: true,
13
19
  get: function get() {
@@ -63,6 +69,7 @@ exports.constants = constants;
63
69
  var _services = _interopRequireDefault(require("./services"));
64
70
  var _serverError = _interopRequireDefault(require("./interceptors/server-error"));
65
71
  var _service = _interopRequireDefault(require("./interceptors/service"));
72
+ var _hostmap = _interopRequireDefault(require("./interceptors/hostmap"));
66
73
  var _serviceCatalog = _interopRequireDefault(require("./service-catalog"));
67
74
  var _serviceRegistry = _interopRequireDefault(require("./service-registry"));
68
75
  var _serviceState = _interopRequireDefault(require("./service-state"));
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","constants","_interopRequireWildcard","exports","_services","_interopRequireDefault","_serverError","_service","_serviceCatalog","_serviceRegistry","_serviceState","_serviceHost","_serviceUrl","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","registerInternalPlugin","Services","interceptors","ServiceInterceptor","create","ServerErrorInterceptor"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {registerInternalPlugin} from '../../webex-core';\n\nimport * as constants from './constants';\nimport Services from './services';\nimport ServerErrorInterceptor from './interceptors/server-error';\nimport ServiceInterceptor from './interceptors/service';\n\nregisterInternalPlugin('services', Services, {\n interceptors: {\n ServiceInterceptor: ServiceInterceptor.create,\n ServerErrorInterceptor: ServerErrorInterceptor.create,\n },\n});\n\nexport {constants};\nexport {default as ServiceInterceptor} from './interceptors/service';\nexport {default as ServerErrorInterceptor} from './interceptors/server-error';\nexport {default as Services} from './services';\nexport {default as ServiceCatalog} from './service-catalog';\nexport {default as ServiceRegistry} from './service-registry';\nexport {default as ServiceState} from './service-state';\nexport {default as ServiceHost} from './service-host';\nexport {default as ServiceUrl} from './service-url';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAyCG,OAAA,CAAAF,SAAA,GAAAA,SAAA;AACzC,IAAAG,SAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,YAAA,GAAAD,sBAAA,CAAAL,OAAA;AACA,IAAAO,QAAA,GAAAF,sBAAA,CAAAL,OAAA;AAaA,IAAAQ,eAAA,GAAAH,sBAAA,CAAAL,OAAA;AACA,IAAAS,gBAAA,GAAAJ,sBAAA,CAAAL,OAAA;AACA,IAAAU,aAAA,GAAAL,sBAAA,CAAAL,OAAA;AACA,IAAAW,YAAA,GAAAN,sBAAA,CAAAL,OAAA;AACA,IAAAY,WAAA,GAAAP,sBAAA,CAAAL,OAAA;AAAoD,SAAAa,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAZ,wBAAAY,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AAzBpD;AACA;AACA;;AAQA,IAAAY,iCAAsB,EAAC,UAAU,EAAEC,iBAAQ,EAAE;EAC3CC,YAAY,EAAE;IACZC,kBAAkB,EAAEA,gBAAkB,CAACC,MAAM;IAC7CC,sBAAsB,EAAEA,oBAAsB,CAACD;EACjD;AACF,CAAC,CAAC"}
1
+ {"version":3,"names":["_webexCore","require","constants","_interopRequireWildcard","exports","_services","_interopRequireDefault","_serverError","_service","_hostmap","_serviceCatalog","_serviceRegistry","_serviceState","_serviceHost","_serviceUrl","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","registerInternalPlugin","Services","interceptors","ServiceInterceptor","create","ServerErrorInterceptor"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport {registerInternalPlugin} from '../../webex-core';\n\nimport * as constants from './constants';\nimport Services from './services';\nimport ServerErrorInterceptor from './interceptors/server-error';\nimport ServiceInterceptor from './interceptors/service';\n\nregisterInternalPlugin('services', Services, {\n interceptors: {\n ServiceInterceptor: ServiceInterceptor.create,\n ServerErrorInterceptor: ServerErrorInterceptor.create,\n },\n});\n\nexport {constants};\nexport {default as ServiceInterceptor} from './interceptors/service';\nexport {default as ServerErrorInterceptor} from './interceptors/server-error';\nexport {default as HostMapInterceptor} from './interceptors/hostmap';\nexport {default as Services} from './services';\nexport {default as ServiceCatalog} from './service-catalog';\nexport {default as ServiceRegistry} from './service-registry';\nexport {default as ServiceState} from './service-state';\nexport {default as ServiceHost} from './service-host';\nexport {default as ServiceUrl} from './service-url';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAyCG,OAAA,CAAAF,SAAA,GAAAA,SAAA;AACzC,IAAAG,SAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,YAAA,GAAAD,sBAAA,CAAAL,OAAA;AACA,IAAAO,QAAA,GAAAF,sBAAA,CAAAL,OAAA;AAYA,IAAAQ,QAAA,GAAAH,sBAAA,CAAAL,OAAA;AAEA,IAAAS,eAAA,GAAAJ,sBAAA,CAAAL,OAAA;AACA,IAAAU,gBAAA,GAAAL,sBAAA,CAAAL,OAAA;AACA,IAAAW,aAAA,GAAAN,sBAAA,CAAAL,OAAA;AACA,IAAAY,YAAA,GAAAP,sBAAA,CAAAL,OAAA;AACA,IAAAa,WAAA,GAAAR,sBAAA,CAAAL,OAAA;AAAoD,SAAAc,yBAAAC,CAAA,6BAAAC,QAAA,mBAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAF,wBAAA,YAAAA,yBAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAb,wBAAAa,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,gBAAAK,OAAA,CAAAL,CAAA,0BAAAA,CAAA,WAAAM,OAAA,EAAAN,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAI,GAAA,CAAAP,CAAA,UAAAG,CAAA,CAAAK,GAAA,CAAAR,CAAA,OAAAS,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,sBAAA,IAAAC,gCAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAC,MAAA,CAAAC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAlB,CAAA,EAAAc,CAAA,SAAAK,CAAA,GAAAR,CAAA,GAAAE,gCAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAK,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,sBAAA,CAAAH,CAAA,EAAAK,CAAA,EAAAK,CAAA,IAAAV,CAAA,CAAAK,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAL,CAAA,CAAAH,OAAA,GAAAN,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAiB,GAAA,CAAApB,CAAA,EAAAS,CAAA,GAAAA,CAAA;AA1BpD;AACA;AACA;;AAQA,IAAAY,iCAAsB,EAAC,UAAU,EAAEC,iBAAQ,EAAE;EAC3CC,YAAY,EAAE;IACZC,kBAAkB,EAAEA,gBAAkB,CAACC,MAAM;IAC7CC,sBAAsB,EAAEA,oBAAsB,CAACD;EACjD;AACF,CAAC,CAAC"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
+ _Object$defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.default = void 0;
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
13
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
14
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
15
+ var _httpCore = require("@webex/http-core");
16
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
17
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /*!
18
+ * Copyright (c) 2015-2024 Cisco Systems, Inc. See LICENSE file.
19
+ */
20
+ /**
21
+ * This interceptor replaces the host in the request uri with the host from the hostmap
22
+ * It will attempt to do this for every request, but not all URIs will be in the hostmap
23
+ * URIs with hosts that are not in the hostmap will be left unchanged
24
+ */
25
+ var HostMapInterceptor = exports.default = /*#__PURE__*/function (_Interceptor) {
26
+ (0, _inherits2.default)(HostMapInterceptor, _Interceptor);
27
+ var _super = _createSuper(HostMapInterceptor);
28
+ function HostMapInterceptor() {
29
+ (0, _classCallCheck2.default)(this, HostMapInterceptor);
30
+ return _super.apply(this, arguments);
31
+ }
32
+ (0, _createClass2.default)(HostMapInterceptor, [{
33
+ key: "onRequest",
34
+ value:
35
+ /**
36
+ * @see Interceptor#onRequest
37
+ * @param {Object} options
38
+ * @returns {Object}
39
+ */
40
+ function onRequest(options) {
41
+ if (options.uri) {
42
+ try {
43
+ options.uri = this.webex.internal.services.replaceHostFromHostmap(options.uri);
44
+ } catch (error) {
45
+ /* empty */
46
+ }
47
+ }
48
+ return options;
49
+ }
50
+ }], [{
51
+ key: "create",
52
+ value:
53
+ /**
54
+ * @returns {HostMapInterceptor}
55
+ */
56
+ function create() {
57
+ return new HostMapInterceptor({
58
+ webex: this
59
+ });
60
+ }
61
+ }]);
62
+ return HostMapInterceptor;
63
+ }(_httpCore.Interceptor);
64
+ //# sourceMappingURL=hostmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_httpCore","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","HostMapInterceptor","exports","_Interceptor","_inherits2","_super","_classCallCheck2","_createClass2","key","value","onRequest","options","uri","webex","internal","services","replaceHostFromHostmap","error","create","Interceptor"],"sources":["hostmap.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2024 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * This interceptor replaces the host in the request uri with the host from the hostmap\n * It will attempt to do this for every request, but not all URIs will be in the hostmap\n * URIs with hosts that are not in the hostmap will be left unchanged\n */\nexport default class HostMapInterceptor extends Interceptor {\n /**\n * @returns {HostMapInterceptor}\n */\n static create() {\n return new HostMapInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options.uri) {\n try {\n options.uri = this.webex.internal.services.replaceHostFromHostmap(options.uri);\n } catch (error) {\n /* empty */\n }\n }\n\n return options;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAIA,IAAAA,SAAA,GAAAC,OAAA;AAA6C,SAAAC,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBAJ7C;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AAJA,IAKqBC,kBAAkB,GAAAC,OAAA,CAAAjB,OAAA,0BAAAkB,YAAA;EAAA,IAAAC,UAAA,CAAAnB,OAAA,EAAAgB,kBAAA,EAAAE,YAAA;EAAA,IAAAE,MAAA,GAAA3B,YAAA,CAAAuB,kBAAA;EAAA,SAAAA,mBAAA;IAAA,IAAAK,gBAAA,CAAArB,OAAA,QAAAgB,kBAAA;IAAA,OAAAI,MAAA,CAAAd,KAAA,OAAAD,SAAA;EAAA;EAAA,IAAAiB,aAAA,CAAAtB,OAAA,EAAAgB,kBAAA;IAAAO,GAAA;IAAAC,KAAA;IAQrC;AACF;AACA;AACA;AACA;IACE,SAAAC,UAAUC,OAAO,EAAE;MACjB,IAAIA,OAAO,CAACC,GAAG,EAAE;QACf,IAAI;UACFD,OAAO,CAACC,GAAG,GAAG,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,QAAQ,CAACC,sBAAsB,CAACL,OAAO,CAACC,GAAG,CAAC;QAChF,CAAC,CAAC,OAAOK,KAAK,EAAE;UACd;QAAA;MAEJ;MAEA,OAAON,OAAO;IAChB;EAAC;IAAAH,GAAA;IAAAC,KAAA;IAtBD;AACF;AACA;IACE,SAAAS,OAAA,EAAgB;MACd,OAAO,IAAIjB,kBAAkB,CAAC;QAACY,KAAK,EAAE;MAAI,CAAC,CAAC;IAC9C;EAAC;EAAA,OAAAZ,kBAAA;AAAA,EAN6CkB,qBAAW"}
@@ -666,6 +666,26 @@ var Services = _webexPlugin.default.extend({
666
666
  });
667
667
  });
668
668
  },
669
+ /**
670
+ * Looks up the hostname in the host catalog
671
+ * and replaces it with the first host if it finds it
672
+ * @param {string} uri
673
+ * @returns {string} uri with the host replaced
674
+ */
675
+ replaceHostFromHostmap: function replaceHostFromHostmap(uri) {
676
+ var url = new URL(uri);
677
+ var hostCatalog = this._hostCatalog;
678
+ if (!hostCatalog) {
679
+ return uri;
680
+ }
681
+ var host = hostCatalog[url.host];
682
+ if (host && host[0]) {
683
+ var newHost = host[0].host;
684
+ url.host = newHost;
685
+ return url.toString();
686
+ }
687
+ return uri;
688
+ },
669
689
  /**
670
690
  * @private
671
691
  * Organize a received hostmap from a service
@@ -1034,7 +1054,7 @@ var Services = _webexPlugin.default.extend({
1034
1054
  }
1035
1055
  });
1036
1056
  },
1037
- version: "3.3.1-next.9"
1057
+ version: "3.4.0"
1038
1058
  });
1039
1059
  /* eslint-enable no-underscore-dangle */
1040
1060
  var _default = exports.default = Services;
@@ -1 +1 @@
1
- {"version":3,"names":["_sha","_interopRequireDefault","require","_lodash","_webexPlugin","_metrics","_serviceCatalog","_serviceRegistry","_serviceState","_serviceFedRamp","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","trailingSlashes","DEFAULT_CLUSTER","exports","DEFAULT_CLUSTER_SERVICE","CLUSTER_SERVICE","process","env","WEBEX_CONVERSATION_CLUSTER_SERVICE","DEFAULT_CLUSTER_IDENTIFIER","WEBEX_CONVERSATION_DEFAULT_CLUSTER","concat","Services","WebexPlugin","extend","namespace","registries","_weakMap","states","props","validateDomains","initFailed","_catalogs","_serviceUrls","_hostCatalog","getRegistry","get","webex","getState","_getCatalog","name","priorityHost","serviceGroup","catalog","hasService","serviceName","hasAllowedDomains","getAllowedDomains","list","markFailedUrl","url","noPriorityHosts","_updateServiceUrls","serviceUrls","_updateHostCatalog","hostCatalog","updateServices","_this","_ref","undefined","from","query","token","forceRefresh","formattedQuery","status","collecting","waitForCatalog","queryKey","_keys","includes","_promise","reject","Error","email","emailhash","sha256","toLowerCase","toString","_fetchNewServiceHostmap","then","serviceHostMap","updateServiceUrls","updateCredentialsConfig","catch","error","validateUser","_ref2","_this2","_ref2$reqId","reqId","_ref2$forceRefresh","_ref2$activationOptio","activationOptions","preloginUserId","logger","info","canAuthorize","credentials","getUserToken","sendUserActivation","userObj","activated","exists","details","user","_this$webex$credentia","config","client_id","client_secret","collectPreauthCatalog","idbrokerService","getClientToken","uri","scope","tokenObj","collectSigninCatalog","rto","all","_ref3","_ref4","_slicedToArray2","response","statusCode","responseText","body","message","getMeetingPreferences","_this3","request","method","service","resource","res","err","fetchClientRegionInfo","_this4","addAuthHeader","headers","timeout","_ref5","_this5","countryCode","timezone","clientRegionInfo","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","mode","_ref7","_this$list","idbroker","identity","_this$webex$config$cr","authorizationString","authorizeUrl","replace","setConfig","supertoken","access_token","postauth","ready","preauth","initServiceCatalogs","waitForService","_ref8","_this6","_ref8$timeout","services","fetchFromServiceUrl","servicesNotNeedValidation","find","resolve","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","_formatReceivedHostmap","serviceHostmap","extractId","entry","id","split","formattedHostmap","serviceLinks","_formattedHost$hosts","serviceUrl","host","URL","matchingCatalogEntry","formattedHost","defaultUrl","defaultHost","hosts","serviceId","homeCluster","otherHosts","entryHost","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref9","_ref9$cluster","cluster","clusterId","_ref10","findServiceUrlFromUrl","isServiceUrl","isAllowedDomainUrl","findAllowedDomain","convertUrlToPriorityHostUrl","data","_this7","_ref11","qs","format","timestamp","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref12","initConfig","_this$webex$config","fedramp","discovery","fedRampServices","formattedDiscoveryServices","key","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this8","getOrgId","orgId","warn","initialize","_this9","ServiceCatalog","registry","ServiceRegistry","state","ServiceState","set","listenToOnce","version","_default"],"sources":["services.js"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {union, forEach} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from './metrics';\nimport ServiceCatalog from './service-catalog';\nimport ServiceRegistry from './service-registry';\nimport ServiceState from './service-state';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from './constants';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n// The default cluster when one is not provided (usually as 'US' from hydra)\nexport const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';\n// The default service name for convo (currently identityLookup due to some weird CSB issue)\nexport const DEFAULT_CLUSTER_SERVICE = 'identityLookup';\n\nconst CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;\nconst DEFAULT_CLUSTER_IDENTIFIER =\n process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n /**\n * The {@link WeakMap} of {@link ServiceRegistry} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceRegistry>}\n * @private\n * @memberof Services\n */\n registries: new WeakMap(),\n\n /**\n * The {@link WeakMap} of {@link ServiceState} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceState>}\n * @private\n * @memberof Services\n */\n states: new WeakMap(),\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n _catalogs: new WeakMap(),\n\n _serviceUrls: null,\n\n _hostCatalog: null,\n\n /**\n * Get the registry associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceRegistry} - The associated {@link ServiceRegistry}.\n */\n getRegistry() {\n return this.registries.get(this.webex);\n },\n\n /**\n * Get the state associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceState} - The associated {@link ServiceState}.\n */\n getState() {\n return this.states.get(this.webex);\n },\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {ServiceCatalog}\n */\n _getCatalog() {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Get a service url from the current services list by name\n * from the associated instance catalog.\n * @param {string} name\n * @param {boolean} [priorityHost]\n * @param {string} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name, priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.get(name, priorityHost, serviceGroup);\n },\n\n /**\n * Determine if the catalog contains a specific service\n *\n * @param {string} serviceName - The service name to validate.\n * @returns {boolean} - True if the service exists.\n */\n hasService(serviceName) {\n return !!this.get(serviceName);\n },\n\n /**\n * Determine if a whilelist exists in the service catalog.\n *\n * @returns {boolean} - True if a allowed domains list exists.\n */\n hasAllowedDomains() {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Generate a service catalog as an object from\n * the associated instance catalog.\n * @param {boolean} [priorityHost] - use highest priority host if set to `true`\n * @param {string} [serviceGroup]\n * @returns {Record<string, string>}\n */\n list(priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.list(priorityHost, serviceGroup);\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceUrl` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceUrls` host array,\n * or the `ServiceUrls` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @param {boolean} noPriorityHosts\n * @returns {string}\n */\n markFailedUrl(url, noPriorityHosts) {\n const catalog = this._getCatalog();\n\n return catalog.markFailedUrl(url, noPriorityHosts);\n },\n\n /**\n * saves all the services from the pre and post catalog service\n * @param {Object} serviceUrls\n * @returns {void}\n */\n _updateServiceUrls(serviceUrls) {\n this._serviceUrls = {...this._serviceUrls, ...serviceUrls};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Object} hostCatalog\n * @returns {void}\n */\n _updateHostCatalog(hostCatalog) {\n this._hostCatalog = {...this._hostCatalog, ...hostCatalog};\n },\n\n /**\n * Update a list of `serviceUrls` to the most current\n * catalog via the defined `discoveryUrl` then returns the current\n * list of services.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n updateServices({from, query, token, forceRefresh} = {}) {\n const catalog = this._getCatalog();\n let formattedQuery;\n let serviceGroup;\n\n // map catalog name to service group name.\n switch (from) {\n case 'limited':\n serviceGroup = 'preauth';\n break;\n case 'signin':\n serviceGroup = 'signin';\n break;\n default:\n serviceGroup = 'postauth';\n break;\n }\n\n // confirm catalog update for group is not in progress.\n if (catalog.status[serviceGroup].collecting) {\n return this.waitForCatalog(serviceGroup);\n }\n\n catalog.status[serviceGroup].collecting = true;\n\n if (serviceGroup === 'preauth') {\n const queryKey = query && Object.keys(query)[0];\n\n if (!['email', 'emailhash', 'userId', 'orgId', 'mode'].includes(queryKey)) {\n return Promise.reject(\n new Error('a query param of email, emailhash, userId, orgId, or mode is required')\n );\n }\n }\n // encode email when query key is email\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const queryKey = Object.keys(query)[0];\n\n formattedQuery = {};\n\n if (queryKey === 'email' && query.email) {\n formattedQuery.emailhash = sha256(query.email.toLowerCase()).toString();\n } else {\n formattedQuery[queryKey] = query[queryKey];\n }\n }\n\n return this._fetchNewServiceHostmap({\n from,\n token,\n query: formattedQuery,\n forceRefresh,\n })\n .then((serviceHostMap) => {\n catalog.updateServiceUrls(serviceGroup, serviceHostMap);\n this.updateCredentialsConfig();\n catalog.status[serviceGroup].collecting = false;\n })\n .catch((error) => {\n catalog.status[serviceGroup].collecting = false;\n\n return Promise.reject(error);\n });\n },\n\n /**\n * User validation parameter transfer object for {@link validateUser}.\n * @param {object} ValidateUserPTO\n * @property {string} ValidateUserPTO.email - The email of the user.\n * @property {string} [ValidateUserPTO.reqId] - The activation requester.\n * @property {object} [ValidateUserPTO.activationOptions] - Extra options to pass when sending the activation\n * @property {object} [ValidateUserPTO.preloginUserId] - The prelogin user id to set when sending the activation.\n */\n\n /**\n * User validation return transfer object for {@link validateUser}.\n * @param {object} ValidateUserRTO\n * @property {boolean} ValidateUserRTO.activated - If the user is activated.\n * @property {boolean} ValidateUserRTO.exists - If the user exists.\n * @property {string} ValidateUserRTO.details - A descriptive status message.\n * @property {object} ValidateUserRTO.user - **License** service user object.\n */\n\n /**\n * Validate if a user is activated and update the service catalogs as needed\n * based on the user's activation status.\n *\n * @param {ValidateUserPTO} - The parameter transfer object.\n * @returns {ValidateUserRTO} - The return transfer object.\n */\n validateUser({\n email,\n reqId = 'WEBCLIENT',\n forceRefresh = false,\n activationOptions = {},\n preloginUserId,\n }) {\n this.logger.info('services: validating a user');\n\n // Validate that an email parameter key was provided.\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n\n // Destructure the credentials object.\n const {canAuthorize} = this.webex.credentials;\n\n // Validate that the user is already authorized.\n if (canAuthorize) {\n return this.updateServices({forceRefresh})\n .then(() => this.webex.credentials.getUserToken())\n .then((token) =>\n this.sendUserActivation({\n email,\n reqId,\n token: token.toString(),\n activationOptions,\n preloginUserId,\n })\n )\n .then((userObj) => ({\n activated: true,\n exists: true,\n details: 'user is authorized via a user token',\n user: userObj,\n }));\n }\n\n // Destructure the client authorization details.\n /* eslint-disable camelcase */\n const {client_id, client_secret} = this.webex.credentials.config;\n\n // Validate that client authentication details exist.\n if (!client_id || !client_secret) {\n return Promise.reject(new Error('client authentication details are not available'));\n }\n /* eslint-enable camelcase */\n\n // Declare a class-memeber-scoped token for usage within the promise chain.\n let token;\n\n // Begin client authentication user validation.\n return (\n this.collectPreauthCatalog({email})\n .then(() => {\n // Retrieve the service url from the updated catalog. This is required\n // since `WebexCore` is usually not fully initialized at the time this\n // request completes.\n const idbrokerService = this.get('idbroker', true);\n\n // Collect the client auth token.\n return this.webex.credentials.getClientToken({\n uri: `${idbrokerService}idb/oauth2/v1/access_token`,\n scope: 'webexsquare:admin webexsquare:get_conversation Identity:SCIM',\n });\n })\n .then((tokenObj) => {\n // Generate the token string.\n token = tokenObj.toString();\n\n // Collect the signin catalog using the client auth information.\n return this.collectSigninCatalog({email, token, forceRefresh});\n })\n // Validate if collecting the signin catalog failed and populate the RTO\n // with the appropriate content.\n .catch((error) => ({\n exists: error.name !== 'NotFound',\n activated: false,\n details:\n error.name !== 'NotFound'\n ? 'user exists but is not activated'\n : 'user does not exist and is not activated',\n }))\n // Validate if the previous promise resolved with an RTO and populate the\n // new RTO accordingly.\n .then((rto) =>\n Promise.all([\n rto || {\n activated: true,\n exists: true,\n details: 'user exists and is activated',\n },\n this.sendUserActivation({\n email,\n reqId,\n token,\n activationOptions,\n preloginUserId,\n }),\n ])\n )\n .then(([rto, user]) => ({...rto, user}))\n .catch((error) => {\n const response = {\n statusCode: error.statusCode,\n responseText: error.body && error.body.message,\n body: error.body,\n };\n\n return Promise.reject(response);\n })\n );\n },\n\n /**\n * Get user meeting preferences (preferred webex site).\n *\n * @returns {object} - User Information including user preferrences .\n */\n getMeetingPreferences() {\n return this.request({\n method: 'GET',\n service: 'hydra',\n resource: 'meetingPreferences',\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to fetch user login information', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * Fetches client region info such as countryCode and timezone.\n *\n * @returns {object} - The region info object.\n */\n fetchClientRegionInfo() {\n return this.request({\n uri: 'https://ds.ciscospark.com/v1/region',\n addAuthHeader: false,\n headers: {\n 'spark-user-agent': null,\n },\n timeout: 5000,\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to get user region info', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * User activation parameter transfer object for {@link sendUserActivation}.\n * @typedef {object} SendUserActivationPTO\n * @property {string} SendUserActivationPTO.email - The email of the user.\n * @property {string} SendUserActivationPTO.reqId - The activation requester.\n * @property {string} SendUserActivationPTO.token - The client auth token.\n * @property {object} SendUserActivationPTO.activationOptions - Extra options to pass when sending the activation.\n * @property {object} SendUserActivationPTO.preloginUserId - The prelogin user id to set when sending the activation.\n */\n\n /**\n * Send a request to activate a user using a client token.\n *\n * @param {SendUserActivationPTO} - The Parameter transfer object.\n * @returns {LicenseDTO} - The DTO returned from the **License** service.\n */\n sendUserActivation({email, reqId, token, activationOptions, preloginUserId}) {\n this.logger.info('services: sending user activation request');\n let countryCode;\n let timezone;\n\n // try to fetch client region info first\n return (\n this.fetchClientRegionInfo()\n .then((clientRegionInfo) => {\n if (clientRegionInfo) {\n ({countryCode, timezone} = clientRegionInfo);\n }\n\n // Send the user activation request to the **License** service.\n return this.request({\n service: 'license',\n resource: 'users/activations',\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: token,\n 'x-prelogin-userid': preloginUserId,\n },\n body: {\n email,\n reqId,\n countryCode,\n timeZone: timezone,\n ...activationOptions,\n },\n shouldRefreshAccessToken: false,\n });\n })\n // On success, return the **License** user object.\n .then(({body}) => body)\n // On failure, reject with error from **License**.\n .catch((error) => Promise.reject(error))\n );\n },\n\n /**\n * simplified method to update the preauth catalog via email\n *\n * @param {object} query\n * @param {string} query.email - A standard format email.\n * @param {string} query.orgId - The user's OrgId.\n * @param {boolean} forceRefresh - Boolean to bypass u2c cache control header\n * @returns {Promise<void>}\n */\n collectPreauthCatalog(query, forceRefresh = false) {\n if (!query) {\n return this.updateServices({\n from: 'limited',\n query: {mode: 'DEFAULT_BY_PROXIMITY'},\n forceRefresh,\n });\n }\n\n return this.updateServices({from: 'limited', query, forceRefresh});\n },\n\n /**\n * simplified method to update the signin catalog via email and token\n * @param {object} param\n * @param {string} param.email - must be a standard-format email\n * @param {string} param.token - must be a client token\n * @returns {Promise<void>}\n */\n collectSigninCatalog({email, token, forceRefresh} = {}) {\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n if (!token) {\n return Promise.reject(new Error('`token` is required'));\n }\n\n return this.updateServices({\n from: 'signin',\n query: {email},\n token,\n forceRefresh,\n });\n },\n\n /**\n * Updates credentials config to utilize u2c catalog\n * urls.\n * @returns {void}\n */\n updateCredentialsConfig() {\n const {idbroker, identity} = this.list(true);\n\n if (idbroker && identity) {\n const {authorizationString, authorizeUrl} = this.webex.config.credentials;\n\n // This must be set outside of the setConfig method used to assign the\n // idbroker and identity url values.\n this.webex.config.credentials.authorizeUrl = authorizationString\n ? authorizeUrl\n : `${idbroker.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbroker.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identity.replace(trailingSlashes, ''), // remove trailing slash\n },\n },\n });\n }\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject afte ra timeout of 60 seconds.\n * @param {string} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup, timeout) {\n const catalog = this._getCatalog();\n const {supertoken} = this.webex.credentials;\n\n if (\n serviceGroup === 'postauth' &&\n supertoken &&\n supertoken.access_token &&\n !catalog.status.postauth.collecting &&\n !catalog.status.postauth.ready\n ) {\n if (!catalog.status.preauth.ready) {\n return this.initServiceCatalogs();\n }\n\n return this.updateServices();\n }\n\n return catalog.waitForCatalog(serviceGroup, timeout);\n },\n\n /**\n * Service waiting parameter transfer object for {@link waitForService}.\n *\n * @typedef {object} WaitForServicePTO\n * @property {string} [WaitForServicePTO.name] - The service name.\n * @property {string} [WaitForServicePTO.url] - The service url.\n * @property {string} [WaitForServicePTO.timeout] - wait duration in seconds.\n */\n\n /**\n * Wait until the service has been ammended to any service catalog. This\n * method prioritizes the service name over the service url when searching.\n *\n * @param {WaitForServicePTO} - The parameter transfer object.\n * @returns {Promise<string>} - Resolves to the priority host of a service.\n */\n waitForService({name, timeout = 5, url}) {\n const {services} = this.webex.config;\n\n // Save memory by grabbing the catalog after there isn't a priortyURL\n const catalog = this._getCatalog();\n\n const fetchFromServiceUrl = services.servicesNotNeedValidation.find(\n (service) => service === name\n );\n\n if (fetchFromServiceUrl) {\n return Promise.resolve(this._serviceUrls[name]);\n }\n\n const priorityUrl = this.get(name, true);\n const priorityUrlObj = this.getServiceFromUrl(url);\n\n if (priorityUrl || priorityUrlObj) {\n return Promise.resolve(priorityUrl || priorityUrlObj.priorityUrl);\n }\n\n if (catalog.isReady) {\n if (url) {\n return Promise.resolve(url);\n }\n\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n\n return Promise.reject(\n new Error(`services: service '${name}' was not found in any of the catalogs`)\n );\n }\n\n return new Promise((resolve, reject) => {\n const groupsToCheck = ['preauth', 'signin', 'postauth'];\n const checkCatalog = (catalogGroup) =>\n catalog\n .waitForCatalog(catalogGroup, timeout)\n .then(() => {\n const scopedPriorityUrl = this.get(name, true);\n const scopedPrioriryUrlObj = this.getServiceFromUrl(url);\n\n if (scopedPriorityUrl || scopedPrioriryUrlObj) {\n resolve(scopedPriorityUrl || scopedPrioriryUrlObj.priorityUrl);\n }\n })\n .catch(() => undefined);\n\n Promise.all(groupsToCheck.map((group) => checkCatalog(group))).then(() => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n reject(new Error(`services: service '${name}' was not found after waiting`));\n });\n });\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * catalog endpoint.\n * @param {object} serviceHostmap\n * @returns {object}\n */\n _formatReceivedHostmap(serviceHostmap) {\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n const extractId = (entry) => entry.id.split(':')[3];\n\n const formattedHostmap = [];\n\n // for each of the services in the serviceLinks, find the matching host in the catalog\n Object.keys(serviceHostmap.serviceLinks).forEach((serviceName) => {\n const serviceUrl = serviceHostmap.serviceLinks[serviceName];\n\n let host;\n try {\n host = new URL(serviceUrl).host;\n } catch (e) {\n return;\n }\n\n const matchingCatalogEntry = serviceHostmap.hostCatalog[host];\n\n const formattedHost = {\n name: serviceName,\n defaultUrl: serviceUrl,\n defaultHost: host,\n hosts: [],\n };\n\n formattedHostmap.push(formattedHost);\n\n // If the catalog does not have any hosts we will be unable to find the service ID\n // so can't search for other hosts\n if (!matchingCatalogEntry || !matchingCatalogEntry[0]) {\n return;\n }\n\n const serviceId = extractId(matchingCatalogEntry[0]);\n\n forEach(matchingCatalogEntry, (entry) => {\n // The ids for all hosts within a hostCatalog entry should be the same\n // but for safety, only add host entries that have the same id as the first one\n if (extractId(entry) === serviceId) {\n formattedHost.hosts.push({\n ...entry,\n homeCluster: true,\n });\n }\n });\n\n const otherHosts = [];\n\n // find the services in the host catalog that have the same id\n // and add them to the otherHosts\n forEach(serviceHostmap.hostCatalog, (entry) => {\n // exclude the matching catalog entry as we have already added that\n if (entry === matchingCatalogEntry) {\n return;\n }\n\n forEach(entry, (entryHost) => {\n // only add hosts that have the correct id\n if (extractId(entryHost) === serviceId) {\n otherHosts.push({\n ...entryHost,\n homeCluster: false,\n });\n }\n });\n });\n\n formattedHost.hosts.push(...otherHosts);\n });\n\n // update all the service urls in the host catalog\n\n this._updateServiceUrls(serviceHostmap.serviceLinks);\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string} - Cluster ID of url provided\n */\n getClusterId(url) {\n const catalog = this._getCatalog();\n\n return catalog.findClusterId(url);\n },\n\n /**\n * Get a service value from a provided clusterId. This method will\n * return an object containing both the name and url of a found service.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {boolean} [params.priorityHost] - returns priority host url if true\n * @param {string} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n getServiceFromClusterId(params) {\n const catalog = this._getCatalog();\n\n return catalog.findServiceFromClusterId(params);\n },\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the service\n */\n getServiceUrlFromClusterId({cluster = 'us'} = {}) {\n let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;\n\n // Determine if cluster has service name (non-US clusters from hydra do not)\n if (clusterId.split(':').length < 4) {\n // Add Service to cluster identifier\n clusterId = `${cluster}:${CLUSTER_SERVICE}`;\n }\n\n const {url} = this.getServiceFromClusterId({clusterId}) || {};\n\n if (!url) {\n throw Error(`Could not find service for cluster [${cluster}]`);\n }\n\n return url;\n },\n\n /**\n * Get a service object from a service url if the service url exists in the\n * catalog.\n *\n * @param {string} url - The url to be validated.\n * @returns {object} - Service object.\n * @returns {object.name} - The name of the service found.\n * @returns {object.priorityUrl} - The priority url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = '') {\n const service = this._getCatalog().findServiceUrlFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n return {\n name: service.name,\n priorityUrl: service.get(true),\n defaultUrl: service.get(),\n };\n },\n\n /**\n * Verify that a provided url exists in the service\n * catalog.\n * @param {string} url\n * @returns {boolean} - true if exists, false otherwise\n */\n isServiceUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findServiceUrlFromUrl(url);\n },\n\n /**\n * Determine if a provided url is in the catalog's allowed domains.\n *\n * @param {string} url - The url to match allowed domains against.\n * @returns {boolean} - True if the url provided is allowed.\n */\n isAllowedDomainUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findAllowedDomain(url);\n },\n\n /**\n * Converts the host portion of the url from default host\n * to a priority host\n *\n * @param {string} url a service url that contains a default host\n * @returns {string} a service url that contains the top priority host.\n * @throws if url isn't a service url\n */\n convertUrlToPriorityHostUrl(url = '') {\n const data = this.getServiceFromUrl(url);\n\n if (!data) {\n throw Error(`No service associated with url: [${url}]`);\n }\n\n return url.replace(data.defaultUrl, data.priorityUrl);\n },\n\n /**\n * @private\n * Simplified method wrapper for sending a request to get\n * an updated service hostmap.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n _fetchNewServiceHostmap({from, query, token, forceRefresh} = {}) {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...query, format: 'hostmap'};\n\n if (forceRefresh) {\n qs.timestamp = new Date().getTime();\n }\n\n const requestObject = {\n method: 'GET',\n service,\n resource,\n qs,\n };\n\n if (token) {\n requestObject.headers = {authorization: token};\n }\n\n return this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(() => this.request(requestObject), 'internal.get.u2c.time')\n .then(({body}) => this._formatReceivedHostmap(body));\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig() {\n // Get the catalog and destructure the services config.\n const catalog = this._getCatalog();\n const {services, fedramp} = this.webex.config;\n\n // Validate that the services configuration exists.\n if (services) {\n if (fedramp) {\n services.discovery = fedRampServices;\n }\n // Check for discovery services.\n if (services.discovery) {\n // Format the discovery configuration into an injectable array.\n const formattedDiscoveryServices = Object.keys(services.discovery).map((key) => ({\n name: key,\n defaultUrl: services.discovery[key],\n }));\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceUrls('discovery', formattedDiscoveryServices);\n }\n\n if (services.override) {\n // Format the override configuration into an injectable array.\n const formattedOverrideServices = Object.keys(services.override).map((key) => ({\n name: key,\n defaultUrl: services.override[key],\n }));\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceUrls('override', formattedOverrideServices);\n }\n\n // if not fedramp, append on the commercialAllowedDomains\n if (!fedramp) {\n services.allowedDomains = union(services.allowedDomains, COMMERCIAL_ALLOWED_DOMAINS);\n }\n\n // Check for allowed host domains.\n if (services.allowedDomains) {\n // Store the allowed domains as a property of the catalog.\n catalog.setAllowedDomains(services.allowedDomains);\n }\n\n // Set `validateDomains` property to match configuration\n this.validateDomains = services.validateDomains;\n }\n },\n\n /**\n * Make the initial requests to collect the root catalogs.\n *\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs() {\n this.logger.info('services: initializing initial service catalogs');\n\n // Destructure the credentials plugin.\n const {credentials} = this.webex;\n\n // Init a promise chain. Must be done as a Promise.resolve() to allow\n // credentials#getOrgId() to properly throw.\n return (\n Promise.resolve()\n // Get the user's OrgId.\n .then(() => credentials.getOrgId())\n // Begin collecting the preauth/limited catalog.\n .then((orgId) => this.collectPreauthCatalog({orgId}))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog.\n return this.updateServices().catch(() =>\n this.logger.warn('services: cannot retrieve postauth catalog')\n );\n }\n\n // Return a resolved promise for consistent return value.\n return Promise.resolve();\n })\n );\n },\n\n /**\n * Initializer\n *\n * @instance\n * @memberof Services\n * @returns {Services}\n */\n initialize() {\n const catalog = new ServiceCatalog();\n const registry = new ServiceRegistry();\n const state = new ServiceState();\n\n this._catalogs.set(this.webex, catalog);\n this.registries.set(this.webex, registry);\n this.states.set(this.webex, state);\n\n // Listen for configuration changes once.\n this.listenToOnce(this.webex, 'change:config', () => {\n this.initConfig();\n });\n\n // wait for webex instance to be ready before attempting\n // to update the service catalogs\n this.listenToOnce(this.webex, 'ready', () => {\n const {supertoken} = this.webex.credentials;\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n this.initServiceCatalogs()\n .then(() => {\n catalog.isReady = true;\n })\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n });\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n });\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_sha","_interopRequireDefault","require","_lodash","_webexPlugin","_metrics","_serviceCatalog","_serviceRegistry","_serviceState","_serviceFedRamp","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","trailingSlashes","DEFAULT_CLUSTER","exports","DEFAULT_CLUSTER_SERVICE","CLUSTER_SERVICE","process","env","WEBEX_CONVERSATION_CLUSTER_SERVICE","DEFAULT_CLUSTER_IDENTIFIER","WEBEX_CONVERSATION_DEFAULT_CLUSTER","concat","Services","WebexPlugin","extend","namespace","registries","_weakMap","states","props","validateDomains","initFailed","_catalogs","_serviceUrls","_hostCatalog","getRegistry","get","webex","getState","_getCatalog","name","priorityHost","serviceGroup","catalog","hasService","serviceName","hasAllowedDomains","getAllowedDomains","list","markFailedUrl","url","noPriorityHosts","_updateServiceUrls","serviceUrls","_updateHostCatalog","hostCatalog","updateServices","_this","_ref","undefined","from","query","token","forceRefresh","formattedQuery","status","collecting","waitForCatalog","queryKey","_keys","includes","_promise","reject","Error","email","emailhash","sha256","toLowerCase","toString","_fetchNewServiceHostmap","then","serviceHostMap","updateServiceUrls","updateCredentialsConfig","catch","error","validateUser","_ref2","_this2","_ref2$reqId","reqId","_ref2$forceRefresh","_ref2$activationOptio","activationOptions","preloginUserId","logger","info","canAuthorize","credentials","getUserToken","sendUserActivation","userObj","activated","exists","details","user","_this$webex$credentia","config","client_id","client_secret","collectPreauthCatalog","idbrokerService","getClientToken","uri","scope","tokenObj","collectSigninCatalog","rto","all","_ref3","_ref4","_slicedToArray2","response","statusCode","responseText","body","message","getMeetingPreferences","_this3","request","method","service","resource","res","err","fetchClientRegionInfo","_this4","addAuthHeader","headers","timeout","_ref5","_this5","countryCode","timezone","clientRegionInfo","accept","authorization","timeZone","shouldRefreshAccessToken","_ref6","mode","_ref7","_this$list","idbroker","identity","_this$webex$config$cr","authorizationString","authorizeUrl","replace","setConfig","supertoken","access_token","postauth","ready","preauth","initServiceCatalogs","waitForService","_ref8","_this6","_ref8$timeout","services","fetchFromServiceUrl","servicesNotNeedValidation","find","resolve","priorityUrl","priorityUrlObj","getServiceFromUrl","isReady","internal","metrics","submitClientMetrics","METRICS","JS_SDK_SERVICE_NOT_FOUND","fields","service_name","groupsToCheck","checkCatalog","catalogGroup","scopedPriorityUrl","scopedPrioriryUrlObj","map","group","replaceHostFromHostmap","URL","host","newHost","_formatReceivedHostmap","serviceHostmap","extractId","entry","id","split","formattedHostmap","serviceLinks","_formattedHost$hosts","serviceUrl","matchingCatalogEntry","formattedHost","defaultUrl","defaultHost","hosts","serviceId","homeCluster","otherHosts","entryHost","getClusterId","findClusterId","getServiceFromClusterId","params","findServiceFromClusterId","getServiceUrlFromClusterId","_ref9","_ref9$cluster","cluster","clusterId","_ref10","findServiceUrlFromUrl","isServiceUrl","isAllowedDomainUrl","findAllowedDomain","convertUrlToPriorityHostUrl","data","_this7","_ref11","qs","format","timestamp","Date","getTime","requestObject","newMetrics","callDiagnosticLatencies","measureLatency","_ref12","initConfig","_this$webex$config","fedramp","discovery","fedRampServices","formattedDiscoveryServices","key","override","formattedOverrideServices","allowedDomains","union","COMMERCIAL_ALLOWED_DOMAINS","setAllowedDomains","_this8","getOrgId","orgId","warn","initialize","_this9","ServiceCatalog","registry","ServiceRegistry","state","ServiceState","set","listenToOnce","version","_default"],"sources":["services.js"],"sourcesContent":["import sha256 from 'crypto-js/sha256';\n\nimport {union, forEach} from 'lodash';\nimport WebexPlugin from '../webex-plugin';\n\nimport METRICS from './metrics';\nimport ServiceCatalog from './service-catalog';\nimport ServiceRegistry from './service-registry';\nimport ServiceState from './service-state';\nimport fedRampServices from './service-fed-ramp';\nimport {COMMERCIAL_ALLOWED_DOMAINS} from './constants';\n\nconst trailingSlashes = /(?:^\\/)|(?:\\/$)/;\n\n// The default cluster when one is not provided (usually as 'US' from hydra)\nexport const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';\n// The default service name for convo (currently identityLookup due to some weird CSB issue)\nexport const DEFAULT_CLUSTER_SERVICE = 'identityLookup';\n\nconst CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;\nconst DEFAULT_CLUSTER_IDENTIFIER =\n process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;\n\n/* eslint-disable no-underscore-dangle */\n/**\n * @class\n */\nconst Services = WebexPlugin.extend({\n namespace: 'Services',\n\n /**\n * The {@link WeakMap} of {@link ServiceRegistry} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceRegistry>}\n * @private\n * @memberof Services\n */\n registries: new WeakMap(),\n\n /**\n * The {@link WeakMap} of {@link ServiceState} class instances that are\n * keyed with WebexCore instances.\n *\n * @instance\n * @type {WeakMap<WebexCore, ServiceState>}\n * @private\n * @memberof Services\n */\n states: new WeakMap(),\n\n props: {\n validateDomains: ['boolean', false, true],\n initFailed: ['boolean', false, false],\n },\n\n _catalogs: new WeakMap(),\n\n _serviceUrls: null,\n\n _hostCatalog: null,\n\n /**\n * Get the registry associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceRegistry} - The associated {@link ServiceRegistry}.\n */\n getRegistry() {\n return this.registries.get(this.webex);\n },\n\n /**\n * Get the state associated with this webex instance.\n *\n * @private\n * @memberof Services\n * @returns {ServiceState} - The associated {@link ServiceState}.\n */\n getState() {\n return this.states.get(this.webex);\n },\n\n /**\n * @private\n * Get the current catalog based on the assocaited\n * webex instance.\n * @returns {ServiceCatalog}\n */\n _getCatalog() {\n return this._catalogs.get(this.webex);\n },\n\n /**\n * Get a service url from the current services list by name\n * from the associated instance catalog.\n * @param {string} name\n * @param {boolean} [priorityHost]\n * @param {string} [serviceGroup]\n * @returns {string|undefined}\n */\n get(name, priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.get(name, priorityHost, serviceGroup);\n },\n\n /**\n * Determine if the catalog contains a specific service\n *\n * @param {string} serviceName - The service name to validate.\n * @returns {boolean} - True if the service exists.\n */\n hasService(serviceName) {\n return !!this.get(serviceName);\n },\n\n /**\n * Determine if a whilelist exists in the service catalog.\n *\n * @returns {boolean} - True if a allowed domains list exists.\n */\n hasAllowedDomains() {\n const catalog = this._getCatalog();\n\n return catalog.getAllowedDomains().length > 0;\n },\n\n /**\n * Generate a service catalog as an object from\n * the associated instance catalog.\n * @param {boolean} [priorityHost] - use highest priority host if set to `true`\n * @param {string} [serviceGroup]\n * @returns {Record<string, string>}\n */\n list(priorityHost, serviceGroup) {\n const catalog = this._getCatalog();\n\n return catalog.list(priorityHost, serviceGroup);\n },\n\n /**\n * Mark a priority host service url as failed.\n * This will mark the host associated with the\n * `ServiceUrl` to be removed from the its\n * respective host array, and then return the next\n * viable host from the `ServiceUrls` host array,\n * or the `ServiceUrls` default url if no other priority\n * hosts are available, or if `noPriorityHosts` is set to\n * `true`.\n * @param {string} url\n * @param {boolean} noPriorityHosts\n * @returns {string}\n */\n markFailedUrl(url, noPriorityHosts) {\n const catalog = this._getCatalog();\n\n return catalog.markFailedUrl(url, noPriorityHosts);\n },\n\n /**\n * saves all the services from the pre and post catalog service\n * @param {Object} serviceUrls\n * @returns {void}\n */\n _updateServiceUrls(serviceUrls) {\n this._serviceUrls = {...this._serviceUrls, ...serviceUrls};\n },\n\n /**\n * saves the hostCatalog object\n * @param {Object} hostCatalog\n * @returns {void}\n */\n _updateHostCatalog(hostCatalog) {\n this._hostCatalog = {...this._hostCatalog, ...hostCatalog};\n },\n\n /**\n * Update a list of `serviceUrls` to the most current\n * catalog via the defined `discoveryUrl` then returns the current\n * list of services.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n updateServices({from, query, token, forceRefresh} = {}) {\n const catalog = this._getCatalog();\n let formattedQuery;\n let serviceGroup;\n\n // map catalog name to service group name.\n switch (from) {\n case 'limited':\n serviceGroup = 'preauth';\n break;\n case 'signin':\n serviceGroup = 'signin';\n break;\n default:\n serviceGroup = 'postauth';\n break;\n }\n\n // confirm catalog update for group is not in progress.\n if (catalog.status[serviceGroup].collecting) {\n return this.waitForCatalog(serviceGroup);\n }\n\n catalog.status[serviceGroup].collecting = true;\n\n if (serviceGroup === 'preauth') {\n const queryKey = query && Object.keys(query)[0];\n\n if (!['email', 'emailhash', 'userId', 'orgId', 'mode'].includes(queryKey)) {\n return Promise.reject(\n new Error('a query param of email, emailhash, userId, orgId, or mode is required')\n );\n }\n }\n // encode email when query key is email\n if (serviceGroup === 'preauth' || serviceGroup === 'signin') {\n const queryKey = Object.keys(query)[0];\n\n formattedQuery = {};\n\n if (queryKey === 'email' && query.email) {\n formattedQuery.emailhash = sha256(query.email.toLowerCase()).toString();\n } else {\n formattedQuery[queryKey] = query[queryKey];\n }\n }\n\n return this._fetchNewServiceHostmap({\n from,\n token,\n query: formattedQuery,\n forceRefresh,\n })\n .then((serviceHostMap) => {\n catalog.updateServiceUrls(serviceGroup, serviceHostMap);\n this.updateCredentialsConfig();\n catalog.status[serviceGroup].collecting = false;\n })\n .catch((error) => {\n catalog.status[serviceGroup].collecting = false;\n\n return Promise.reject(error);\n });\n },\n\n /**\n * User validation parameter transfer object for {@link validateUser}.\n * @param {object} ValidateUserPTO\n * @property {string} ValidateUserPTO.email - The email of the user.\n * @property {string} [ValidateUserPTO.reqId] - The activation requester.\n * @property {object} [ValidateUserPTO.activationOptions] - Extra options to pass when sending the activation\n * @property {object} [ValidateUserPTO.preloginUserId] - The prelogin user id to set when sending the activation.\n */\n\n /**\n * User validation return transfer object for {@link validateUser}.\n * @param {object} ValidateUserRTO\n * @property {boolean} ValidateUserRTO.activated - If the user is activated.\n * @property {boolean} ValidateUserRTO.exists - If the user exists.\n * @property {string} ValidateUserRTO.details - A descriptive status message.\n * @property {object} ValidateUserRTO.user - **License** service user object.\n */\n\n /**\n * Validate if a user is activated and update the service catalogs as needed\n * based on the user's activation status.\n *\n * @param {ValidateUserPTO} - The parameter transfer object.\n * @returns {ValidateUserRTO} - The return transfer object.\n */\n validateUser({\n email,\n reqId = 'WEBCLIENT',\n forceRefresh = false,\n activationOptions = {},\n preloginUserId,\n }) {\n this.logger.info('services: validating a user');\n\n // Validate that an email parameter key was provided.\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n\n // Destructure the credentials object.\n const {canAuthorize} = this.webex.credentials;\n\n // Validate that the user is already authorized.\n if (canAuthorize) {\n return this.updateServices({forceRefresh})\n .then(() => this.webex.credentials.getUserToken())\n .then((token) =>\n this.sendUserActivation({\n email,\n reqId,\n token: token.toString(),\n activationOptions,\n preloginUserId,\n })\n )\n .then((userObj) => ({\n activated: true,\n exists: true,\n details: 'user is authorized via a user token',\n user: userObj,\n }));\n }\n\n // Destructure the client authorization details.\n /* eslint-disable camelcase */\n const {client_id, client_secret} = this.webex.credentials.config;\n\n // Validate that client authentication details exist.\n if (!client_id || !client_secret) {\n return Promise.reject(new Error('client authentication details are not available'));\n }\n /* eslint-enable camelcase */\n\n // Declare a class-memeber-scoped token for usage within the promise chain.\n let token;\n\n // Begin client authentication user validation.\n return (\n this.collectPreauthCatalog({email})\n .then(() => {\n // Retrieve the service url from the updated catalog. This is required\n // since `WebexCore` is usually not fully initialized at the time this\n // request completes.\n const idbrokerService = this.get('idbroker', true);\n\n // Collect the client auth token.\n return this.webex.credentials.getClientToken({\n uri: `${idbrokerService}idb/oauth2/v1/access_token`,\n scope: 'webexsquare:admin webexsquare:get_conversation Identity:SCIM',\n });\n })\n .then((tokenObj) => {\n // Generate the token string.\n token = tokenObj.toString();\n\n // Collect the signin catalog using the client auth information.\n return this.collectSigninCatalog({email, token, forceRefresh});\n })\n // Validate if collecting the signin catalog failed and populate the RTO\n // with the appropriate content.\n .catch((error) => ({\n exists: error.name !== 'NotFound',\n activated: false,\n details:\n error.name !== 'NotFound'\n ? 'user exists but is not activated'\n : 'user does not exist and is not activated',\n }))\n // Validate if the previous promise resolved with an RTO and populate the\n // new RTO accordingly.\n .then((rto) =>\n Promise.all([\n rto || {\n activated: true,\n exists: true,\n details: 'user exists and is activated',\n },\n this.sendUserActivation({\n email,\n reqId,\n token,\n activationOptions,\n preloginUserId,\n }),\n ])\n )\n .then(([rto, user]) => ({...rto, user}))\n .catch((error) => {\n const response = {\n statusCode: error.statusCode,\n responseText: error.body && error.body.message,\n body: error.body,\n };\n\n return Promise.reject(response);\n })\n );\n },\n\n /**\n * Get user meeting preferences (preferred webex site).\n *\n * @returns {object} - User Information including user preferrences .\n */\n getMeetingPreferences() {\n return this.request({\n method: 'GET',\n service: 'hydra',\n resource: 'meetingPreferences',\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to fetch user login information', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * Fetches client region info such as countryCode and timezone.\n *\n * @returns {object} - The region info object.\n */\n fetchClientRegionInfo() {\n return this.request({\n uri: 'https://ds.ciscospark.com/v1/region',\n addAuthHeader: false,\n headers: {\n 'spark-user-agent': null,\n },\n timeout: 5000,\n })\n .then((res) => {\n this.logger.info('services: received user region info');\n\n return res.body;\n })\n .catch((err) => {\n this.logger.info('services: was not able to get user region info', err);\n // resolve successfully even if request failed\n });\n },\n\n /**\n * User activation parameter transfer object for {@link sendUserActivation}.\n * @typedef {object} SendUserActivationPTO\n * @property {string} SendUserActivationPTO.email - The email of the user.\n * @property {string} SendUserActivationPTO.reqId - The activation requester.\n * @property {string} SendUserActivationPTO.token - The client auth token.\n * @property {object} SendUserActivationPTO.activationOptions - Extra options to pass when sending the activation.\n * @property {object} SendUserActivationPTO.preloginUserId - The prelogin user id to set when sending the activation.\n */\n\n /**\n * Send a request to activate a user using a client token.\n *\n * @param {SendUserActivationPTO} - The Parameter transfer object.\n * @returns {LicenseDTO} - The DTO returned from the **License** service.\n */\n sendUserActivation({email, reqId, token, activationOptions, preloginUserId}) {\n this.logger.info('services: sending user activation request');\n let countryCode;\n let timezone;\n\n // try to fetch client region info first\n return (\n this.fetchClientRegionInfo()\n .then((clientRegionInfo) => {\n if (clientRegionInfo) {\n ({countryCode, timezone} = clientRegionInfo);\n }\n\n // Send the user activation request to the **License** service.\n return this.request({\n service: 'license',\n resource: 'users/activations',\n method: 'POST',\n headers: {\n accept: 'application/json',\n authorization: token,\n 'x-prelogin-userid': preloginUserId,\n },\n body: {\n email,\n reqId,\n countryCode,\n timeZone: timezone,\n ...activationOptions,\n },\n shouldRefreshAccessToken: false,\n });\n })\n // On success, return the **License** user object.\n .then(({body}) => body)\n // On failure, reject with error from **License**.\n .catch((error) => Promise.reject(error))\n );\n },\n\n /**\n * simplified method to update the preauth catalog via email\n *\n * @param {object} query\n * @param {string} query.email - A standard format email.\n * @param {string} query.orgId - The user's OrgId.\n * @param {boolean} forceRefresh - Boolean to bypass u2c cache control header\n * @returns {Promise<void>}\n */\n collectPreauthCatalog(query, forceRefresh = false) {\n if (!query) {\n return this.updateServices({\n from: 'limited',\n query: {mode: 'DEFAULT_BY_PROXIMITY'},\n forceRefresh,\n });\n }\n\n return this.updateServices({from: 'limited', query, forceRefresh});\n },\n\n /**\n * simplified method to update the signin catalog via email and token\n * @param {object} param\n * @param {string} param.email - must be a standard-format email\n * @param {string} param.token - must be a client token\n * @returns {Promise<void>}\n */\n collectSigninCatalog({email, token, forceRefresh} = {}) {\n if (!email) {\n return Promise.reject(new Error('`email` is required'));\n }\n if (!token) {\n return Promise.reject(new Error('`token` is required'));\n }\n\n return this.updateServices({\n from: 'signin',\n query: {email},\n token,\n forceRefresh,\n });\n },\n\n /**\n * Updates credentials config to utilize u2c catalog\n * urls.\n * @returns {void}\n */\n updateCredentialsConfig() {\n const {idbroker, identity} = this.list(true);\n\n if (idbroker && identity) {\n const {authorizationString, authorizeUrl} = this.webex.config.credentials;\n\n // This must be set outside of the setConfig method used to assign the\n // idbroker and identity url values.\n this.webex.config.credentials.authorizeUrl = authorizationString\n ? authorizeUrl\n : `${idbroker.replace(trailingSlashes, '')}/idb/oauth2/v1/authorize`;\n\n this.webex.setConfig({\n credentials: {\n idbroker: {\n url: idbroker.replace(trailingSlashes, ''), // remove trailing slash\n },\n identity: {\n url: identity.replace(trailingSlashes, ''), // remove trailing slash\n },\n },\n });\n }\n },\n\n /**\n * Wait until the service catalog is available,\n * or reject afte ra timeout of 60 seconds.\n * @param {string} serviceGroup\n * @param {number} [timeout] - in seconds\n * @returns {Promise<void>}\n */\n waitForCatalog(serviceGroup, timeout) {\n const catalog = this._getCatalog();\n const {supertoken} = this.webex.credentials;\n\n if (\n serviceGroup === 'postauth' &&\n supertoken &&\n supertoken.access_token &&\n !catalog.status.postauth.collecting &&\n !catalog.status.postauth.ready\n ) {\n if (!catalog.status.preauth.ready) {\n return this.initServiceCatalogs();\n }\n\n return this.updateServices();\n }\n\n return catalog.waitForCatalog(serviceGroup, timeout);\n },\n\n /**\n * Service waiting parameter transfer object for {@link waitForService}.\n *\n * @typedef {object} WaitForServicePTO\n * @property {string} [WaitForServicePTO.name] - The service name.\n * @property {string} [WaitForServicePTO.url] - The service url.\n * @property {string} [WaitForServicePTO.timeout] - wait duration in seconds.\n */\n\n /**\n * Wait until the service has been ammended to any service catalog. This\n * method prioritizes the service name over the service url when searching.\n *\n * @param {WaitForServicePTO} - The parameter transfer object.\n * @returns {Promise<string>} - Resolves to the priority host of a service.\n */\n waitForService({name, timeout = 5, url}) {\n const {services} = this.webex.config;\n\n // Save memory by grabbing the catalog after there isn't a priortyURL\n const catalog = this._getCatalog();\n\n const fetchFromServiceUrl = services.servicesNotNeedValidation.find(\n (service) => service === name\n );\n\n if (fetchFromServiceUrl) {\n return Promise.resolve(this._serviceUrls[name]);\n }\n\n const priorityUrl = this.get(name, true);\n const priorityUrlObj = this.getServiceFromUrl(url);\n\n if (priorityUrl || priorityUrlObj) {\n return Promise.resolve(priorityUrl || priorityUrlObj.priorityUrl);\n }\n\n if (catalog.isReady) {\n if (url) {\n return Promise.resolve(url);\n }\n\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n\n return Promise.reject(\n new Error(`services: service '${name}' was not found in any of the catalogs`)\n );\n }\n\n return new Promise((resolve, reject) => {\n const groupsToCheck = ['preauth', 'signin', 'postauth'];\n const checkCatalog = (catalogGroup) =>\n catalog\n .waitForCatalog(catalogGroup, timeout)\n .then(() => {\n const scopedPriorityUrl = this.get(name, true);\n const scopedPrioriryUrlObj = this.getServiceFromUrl(url);\n\n if (scopedPriorityUrl || scopedPrioriryUrlObj) {\n resolve(scopedPriorityUrl || scopedPrioriryUrlObj.priorityUrl);\n }\n })\n .catch(() => undefined);\n\n Promise.all(groupsToCheck.map((group) => checkCatalog(group))).then(() => {\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_SERVICE_NOT_FOUND, {\n fields: {service_name: name},\n });\n reject(new Error(`services: service '${name}' was not found after waiting`));\n });\n });\n },\n\n /**\n * Looks up the hostname in the host catalog\n * and replaces it with the first host if it finds it\n * @param {string} uri\n * @returns {string} uri with the host replaced\n */\n replaceHostFromHostmap(uri) {\n const url = new URL(uri);\n const hostCatalog = this._hostCatalog;\n\n if (!hostCatalog) {\n return uri;\n }\n\n const host = hostCatalog[url.host];\n\n if (host && host[0]) {\n const newHost = host[0].host;\n\n url.host = newHost;\n\n return url.toString();\n }\n\n return uri;\n },\n\n /**\n * @private\n * Organize a received hostmap from a service\n * catalog endpoint.\n * @param {object} serviceHostmap\n * @returns {object}\n */\n _formatReceivedHostmap(serviceHostmap) {\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n const extractId = (entry) => entry.id.split(':')[3];\n\n const formattedHostmap = [];\n\n // for each of the services in the serviceLinks, find the matching host in the catalog\n Object.keys(serviceHostmap.serviceLinks).forEach((serviceName) => {\n const serviceUrl = serviceHostmap.serviceLinks[serviceName];\n\n let host;\n try {\n host = new URL(serviceUrl).host;\n } catch (e) {\n return;\n }\n\n const matchingCatalogEntry = serviceHostmap.hostCatalog[host];\n\n const formattedHost = {\n name: serviceName,\n defaultUrl: serviceUrl,\n defaultHost: host,\n hosts: [],\n };\n\n formattedHostmap.push(formattedHost);\n\n // If the catalog does not have any hosts we will be unable to find the service ID\n // so can't search for other hosts\n if (!matchingCatalogEntry || !matchingCatalogEntry[0]) {\n return;\n }\n\n const serviceId = extractId(matchingCatalogEntry[0]);\n\n forEach(matchingCatalogEntry, (entry) => {\n // The ids for all hosts within a hostCatalog entry should be the same\n // but for safety, only add host entries that have the same id as the first one\n if (extractId(entry) === serviceId) {\n formattedHost.hosts.push({\n ...entry,\n homeCluster: true,\n });\n }\n });\n\n const otherHosts = [];\n\n // find the services in the host catalog that have the same id\n // and add them to the otherHosts\n forEach(serviceHostmap.hostCatalog, (entry) => {\n // exclude the matching catalog entry as we have already added that\n if (entry === matchingCatalogEntry) {\n return;\n }\n\n forEach(entry, (entryHost) => {\n // only add hosts that have the correct id\n if (extractId(entryHost) === serviceId) {\n otherHosts.push({\n ...entryHost,\n homeCluster: false,\n });\n }\n });\n });\n\n formattedHost.hosts.push(...otherHosts);\n });\n\n // update all the service urls in the host catalog\n\n this._updateServiceUrls(serviceHostmap.serviceLinks);\n this._updateHostCatalog(serviceHostmap.hostCatalog);\n\n return formattedHostmap;\n },\n\n /**\n * Get the clusterId associated with a URL string.\n * @param {string} url\n * @returns {string} - Cluster ID of url provided\n */\n getClusterId(url) {\n const catalog = this._getCatalog();\n\n return catalog.findClusterId(url);\n },\n\n /**\n * Get a service value from a provided clusterId. This method will\n * return an object containing both the name and url of a found service.\n * @param {object} params\n * @param {string} params.clusterId - clusterId of found service\n * @param {boolean} [params.priorityHost] - returns priority host url if true\n * @param {string} [params.serviceGroup] - specify service group\n * @returns {object} service\n * @returns {string} service.name\n * @returns {string} service.url\n */\n getServiceFromClusterId(params) {\n const catalog = this._getCatalog();\n\n return catalog.findServiceFromClusterId(params);\n },\n\n /**\n * @param {String} cluster the cluster containing the id\n * @param {UUID} [id] the id of the conversation.\n * If empty, just return the base URL.\n * @returns {String} url of the service\n */\n getServiceUrlFromClusterId({cluster = 'us'} = {}) {\n let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;\n\n // Determine if cluster has service name (non-US clusters from hydra do not)\n if (clusterId.split(':').length < 4) {\n // Add Service to cluster identifier\n clusterId = `${cluster}:${CLUSTER_SERVICE}`;\n }\n\n const {url} = this.getServiceFromClusterId({clusterId}) || {};\n\n if (!url) {\n throw Error(`Could not find service for cluster [${cluster}]`);\n }\n\n return url;\n },\n\n /**\n * Get a service object from a service url if the service url exists in the\n * catalog.\n *\n * @param {string} url - The url to be validated.\n * @returns {object} - Service object.\n * @returns {object.name} - The name of the service found.\n * @returns {object.priorityUrl} - The priority url of the found service.\n * @returns {object.defaultUrl} - The default url of the found service.\n */\n getServiceFromUrl(url = '') {\n const service = this._getCatalog().findServiceUrlFromUrl(url);\n\n if (!service) {\n return undefined;\n }\n\n return {\n name: service.name,\n priorityUrl: service.get(true),\n defaultUrl: service.get(),\n };\n },\n\n /**\n * Verify that a provided url exists in the service\n * catalog.\n * @param {string} url\n * @returns {boolean} - true if exists, false otherwise\n */\n isServiceUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findServiceUrlFromUrl(url);\n },\n\n /**\n * Determine if a provided url is in the catalog's allowed domains.\n *\n * @param {string} url - The url to match allowed domains against.\n * @returns {boolean} - True if the url provided is allowed.\n */\n isAllowedDomainUrl(url) {\n const catalog = this._getCatalog();\n\n return !!catalog.findAllowedDomain(url);\n },\n\n /**\n * Converts the host portion of the url from default host\n * to a priority host\n *\n * @param {string} url a service url that contains a default host\n * @returns {string} a service url that contains the top priority host.\n * @throws if url isn't a service url\n */\n convertUrlToPriorityHostUrl(url = '') {\n const data = this.getServiceFromUrl(url);\n\n if (!data) {\n throw Error(`No service associated with url: [${url}]`);\n }\n\n return url.replace(data.defaultUrl, data.priorityUrl);\n },\n\n /**\n * @private\n * Simplified method wrapper for sending a request to get\n * an updated service hostmap.\n * @param {object} [param]\n * @param {string} [param.from] - This accepts `limited` or `signin`\n * @param {object} [param.query] - This accepts `email`, `orgId` or `userId` key values\n * @param {string} [param.query.email] - must be a standard-format email\n * @param {string} [param.query.orgId] - must be an organization id\n * @param {string} [param.query.userId] - must be a user id\n * @param {string} [param.token] - used for signin catalog\n * @returns {Promise<object>}\n */\n _fetchNewServiceHostmap({from, query, token, forceRefresh} = {}) {\n const service = 'u2c';\n const resource = from ? `/${from}/catalog` : '/catalog';\n const qs = {...query, format: 'hostmap'};\n\n if (forceRefresh) {\n qs.timestamp = new Date().getTime();\n }\n\n const requestObject = {\n method: 'GET',\n service,\n resource,\n qs,\n };\n\n if (token) {\n requestObject.headers = {authorization: token};\n }\n\n return this.webex.internal.newMetrics.callDiagnosticLatencies\n .measureLatency(() => this.request(requestObject), 'internal.get.u2c.time')\n .then(({body}) => this._formatReceivedHostmap(body));\n },\n\n /**\n * Initialize the discovery services and the whitelisted services.\n *\n * @returns {void}\n */\n initConfig() {\n // Get the catalog and destructure the services config.\n const catalog = this._getCatalog();\n const {services, fedramp} = this.webex.config;\n\n // Validate that the services configuration exists.\n if (services) {\n if (fedramp) {\n services.discovery = fedRampServices;\n }\n // Check for discovery services.\n if (services.discovery) {\n // Format the discovery configuration into an injectable array.\n const formattedDiscoveryServices = Object.keys(services.discovery).map((key) => ({\n name: key,\n defaultUrl: services.discovery[key],\n }));\n\n // Inject formatted discovery services into services catalog.\n catalog.updateServiceUrls('discovery', formattedDiscoveryServices);\n }\n\n if (services.override) {\n // Format the override configuration into an injectable array.\n const formattedOverrideServices = Object.keys(services.override).map((key) => ({\n name: key,\n defaultUrl: services.override[key],\n }));\n\n // Inject formatted override services into services catalog.\n catalog.updateServiceUrls('override', formattedOverrideServices);\n }\n\n // if not fedramp, append on the commercialAllowedDomains\n if (!fedramp) {\n services.allowedDomains = union(services.allowedDomains, COMMERCIAL_ALLOWED_DOMAINS);\n }\n\n // Check for allowed host domains.\n if (services.allowedDomains) {\n // Store the allowed domains as a property of the catalog.\n catalog.setAllowedDomains(services.allowedDomains);\n }\n\n // Set `validateDomains` property to match configuration\n this.validateDomains = services.validateDomains;\n }\n },\n\n /**\n * Make the initial requests to collect the root catalogs.\n *\n * @returns {Promise<void, Error>} - Errors if the token is unavailable.\n */\n initServiceCatalogs() {\n this.logger.info('services: initializing initial service catalogs');\n\n // Destructure the credentials plugin.\n const {credentials} = this.webex;\n\n // Init a promise chain. Must be done as a Promise.resolve() to allow\n // credentials#getOrgId() to properly throw.\n return (\n Promise.resolve()\n // Get the user's OrgId.\n .then(() => credentials.getOrgId())\n // Begin collecting the preauth/limited catalog.\n .then((orgId) => this.collectPreauthCatalog({orgId}))\n .then(() => {\n // Validate if the token is authorized.\n if (credentials.canAuthorize) {\n // Attempt to collect the postauth catalog.\n return this.updateServices().catch(() =>\n this.logger.warn('services: cannot retrieve postauth catalog')\n );\n }\n\n // Return a resolved promise for consistent return value.\n return Promise.resolve();\n })\n );\n },\n\n /**\n * Initializer\n *\n * @instance\n * @memberof Services\n * @returns {Services}\n */\n initialize() {\n const catalog = new ServiceCatalog();\n const registry = new ServiceRegistry();\n const state = new ServiceState();\n\n this._catalogs.set(this.webex, catalog);\n this.registries.set(this.webex, registry);\n this.states.set(this.webex, state);\n\n // Listen for configuration changes once.\n this.listenToOnce(this.webex, 'change:config', () => {\n this.initConfig();\n });\n\n // wait for webex instance to be ready before attempting\n // to update the service catalogs\n this.listenToOnce(this.webex, 'ready', () => {\n const {supertoken} = this.webex.credentials;\n // Validate if the supertoken exists.\n if (supertoken && supertoken.access_token) {\n this.initServiceCatalogs()\n .then(() => {\n catalog.isReady = true;\n })\n .catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when credentials available, ${error?.message}`\n );\n });\n } else {\n const {email} = this.webex.config;\n\n this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {\n this.initFailed = true;\n this.logger.error(\n `services: failed to init initial services when no credentials available, ${error?.message}`\n );\n });\n }\n });\n },\n});\n/* eslint-enable no-underscore-dangle */\n\nexport default Services;\n"],"mappings":"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"}
@@ -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.3.1-next.9"
60
+ version: "3.4.0"
61
61
  });
62
62
  (0, _webexCore.registerPlugin)('logger', Logger);
63
63
  var _default = exports.default = Logger;
@@ -46,6 +46,7 @@ var _webexUserAgent = _interopRequireDefault(require("./interceptors/webex-user-
46
46
  var _rateLimit = _interopRequireDefault(require("./interceptors/rate-limit"));
47
47
  var _embargo = _interopRequireDefault(require("./interceptors/embargo"));
48
48
  var _defaultOptions = _interopRequireDefault(require("./interceptors/default-options"));
49
+ var _hostmap = _interopRequireDefault(require("./lib/services/interceptors/hostmap"));
49
50
  var _config = _interopRequireDefault(require("./config"));
50
51
  var _storage = require("./lib/storage");
51
52
  var _webexCorePluginMixin = _interopRequireDefault(require("./lib/webex-core-plugin-mixin"));
@@ -84,7 +85,8 @@ var interceptors = {
84
85
  },
85
86
  NetworkTimingInterceptor: _networkTiming.default.create,
86
87
  EmbargoInterceptor: _embargo.default.create,
87
- DefaultOptionsInterceptor: _defaultOptions.default.create
88
+ DefaultOptionsInterceptor: _defaultOptions.default.create,
89
+ HostMapInterceptor: _hostmap.default.create
88
90
  };
89
91
  var preInterceptors = ['ResponseLoggerInterceptor', 'RequestTimingInterceptor', 'RequestEventInterceptor', 'WebexTrackingIdInterceptor', 'RateLimitInterceptor'];
90
92
  var postInterceptors = ['HttpStatusInterceptor', 'NetworkTimingInterceptor', 'EmbargoInterceptor', 'RequestLoggerInterceptor', 'RateLimitInterceptor'];
@@ -94,7 +96,7 @@ var MAX_FILE_SIZE_IN_MB = 2048;
94
96
  * @class
95
97
  */
96
98
  var WebexCore = _ampersandState.default.extend((_obj = {
97
- version: "3.3.1-next.9",
99
+ version: "3.4.0",
98
100
  children: {
99
101
  internal: _webexInternalCore.default
100
102
  },
@@ -636,7 +638,7 @@ var WebexCore = _ampersandState.default.extend((_obj = {
636
638
  });
637
639
  }
638
640
  }, ((0, _applyDecoratedDescriptor2.default)(_obj, "_uploadPhaseUpload", [_common.retry], (0, _getOwnPropertyDescriptor.default)(_obj, "_uploadPhaseUpload"), _obj)), _obj));
639
- WebexCore.version = "3.3.1-next.9";
641
+ WebexCore.version = "3.4.0";
640
642
  (0, _webexInternalCorePluginMixin.default)(_webexInternalCore.default, _config.default, interceptors);
641
643
  (0, _webexCorePluginMixin.default)(WebexCore, _config.default, interceptors);
642
644
  var _default = exports.default = WebexCore;
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_util","_interopRequireDefault","_common","_httpCore","_lodash","_ampersandState","_uuid","_auth","_networkTiming","_payloadTransformer","_redirect","_requestEvent","_requestLogger","_requestTiming","_responseLogger","_webexHttpError","_userAgent","_webexTrackingId","_webexUserAgent","_rateLimit","_embargo","_defaultOptions","_config","_storage","_webexCorePluginMixin","_webexInternalCorePluginMixin","_webexInternalCore","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","interceptors","WebexTrackingIdInterceptor","create","RequestEventInterceptor","RateLimitInterceptor","RequestLoggerInterceptor","process","env","ENABLE_NETWORK_LOGGING","ENABLE_VERBOSE_NETWORK_LOGGING","undefined","ResponseLoggerInterceptor","RequestTimingInterceptor","ServiceInterceptor","UserAgentInterceptor","WebexUserAgentInterceptor","AuthInterceptor","KmsDryErrorInterceptor","PayloadTransformerInterceptor","ConversationInterceptor","RedirectInterceptor","HttpStatusInterceptor","error","WebexHttpError","NetworkTimingInterceptor","EmbargoInterceptor","DefaultOptionsInterceptor","preInterceptors","postInterceptors","MAX_FILE_SIZE_IN_MB","WebexCore","AmpState","extend","version","children","internal","WebexInternalCore","constructor","attrs","options","credentials","supertoken","access_token","path","val","get","unset","set","bearerValidator","trim","_apply","derived","boundedStorage","deps","fn","makeWebexStore","unboundedStorage","ready","_this","loaded","_keys","_children","reduce","name","session","config","type","request","setOnce","sessionId","refresh","_this$credentials","transform","direction","object","_this2","predicates","payloadTransformer","p","ctx","webex","_promise","all","map","test","then","shouldTransform","extract","target","data","d","Boolean","promise","_ref","alias","applyNamedTransform","resolve","_this3","_len","rest","Array","_key","isString","unshift","_len2","args","_key2","concat","transforms","tx","_ctx","last","getWindow","window","initialize","_this4","merge","trigger","onLoaded","stopListening","nextTick","listenToAndRun","onReady","prototype","key","listenTo","_len3","_key3","addInterceptor","ints","interceptor","isFunction","includes","requestDefaults","json","prepareFetchOptions","setTimingsAndFetch","_setTimingsAndFetch","uuid","v4","setConfig","newConfig","token","split","console","warn","replace","info","inspect","depth","util","omit","serialize","props","logout","_this5","_len4","_key4","refresh_token","_assign","onBeforeLogout","reverse","_ref2","plugin","catch","err","logger","clear","_this5$credentials","invalidate","_this5$authorization","authorization","measure","metrics","_this$metrics","sendUnstructured","upload","_this6","_asyncToGenerator2","_regenerator","mark","_callee","shunt","wrap","_callee$","_context","prev","next","file","abrupt","reject","Error","phases","finalize","defaultsDeep","method","body","uploadProtocol","withCredentials","headers","EventEmitter","_uploadPhaseInitialize","_uploadPhaseUpload","transferEvents","_len5","_key5","_uploadPhaseFinalize","res","proxyEvents","stop","_this7","debug","_len6","_key6","fileUploadSizeLimitInBytes","fileUploadSizeLimit","currentFileSizeInBytes","byteLength","_uploadAbortSession","_uploadApplySession","response","_this8","url","abortErrorDetails","fileUploadSizeLimitInMB","message","_stringify","opts","phaseOptions","phaseKey","startsWith","substr","_deleteProperty","_this9","NODE_ENV","on","event","total","_this10","_applyDecoratedDescriptor2","retry","_getOwnPropertyDescriptor","mixinWebexInternalCorePlugins","mixinWebexCorePlugins","_default","exports","registerPlugin","registerInternalPlugin"],"sources":["webex-core.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\nimport util from 'util';\n\nimport {proxyEvents, retry, transferEvents} from '@webex/common';\nimport {\n HttpStatusInterceptor,\n defaults as requestDefaults,\n protoprepareFetchOptions as prepareFetchOptions,\n setTimingsAndFetch as _setTimingsAndFetch,\n} from '@webex/http-core';\nimport {defaultsDeep, get, isFunction, isString, last, merge, omit, set, unset} from 'lodash';\nimport AmpState from 'ampersand-state';\nimport uuid from 'uuid';\n\nimport AuthInterceptor from './interceptors/auth';\nimport NetworkTimingInterceptor from './interceptors/network-timing';\nimport PayloadTransformerInterceptor from './interceptors/payload-transformer';\nimport RedirectInterceptor from './interceptors/redirect';\nimport RequestEventInterceptor from './interceptors/request-event';\nimport RequestLoggerInterceptor from './interceptors/request-logger';\nimport RequestTimingInterceptor from './interceptors/request-timing';\nimport ResponseLoggerInterceptor from './interceptors/response-logger';\nimport WebexHttpError from './lib/webex-http-error';\nimport UserAgentInterceptor from './interceptors/user-agent';\nimport WebexTrackingIdInterceptor from './interceptors/webex-tracking-id';\nimport WebexUserAgentInterceptor from './interceptors/webex-user-agent';\nimport RateLimitInterceptor from './interceptors/rate-limit';\nimport EmbargoInterceptor from './interceptors/embargo';\nimport DefaultOptionsInterceptor from './interceptors/default-options';\nimport config from './config';\nimport {makeWebexStore} from './lib/storage';\nimport mixinWebexCorePlugins from './lib/webex-core-plugin-mixin';\nimport mixinWebexInternalCorePlugins from './lib/webex-internal-core-plugin-mixin';\nimport WebexInternalCore from './webex-internal-core';\n\n// TODO replace the Interceptor.create with Reflect.construct (\n// Interceptor.create exists because new was really hard to call on an array of\n// constructors)\nconst interceptors = {\n WebexTrackingIdInterceptor: WebexTrackingIdInterceptor.create,\n RequestEventInterceptor: RequestEventInterceptor.create,\n RateLimitInterceptor: RateLimitInterceptor.create,\n /* eslint-disable no-extra-parens */\n RequestLoggerInterceptor:\n process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING\n ? RequestLoggerInterceptor.create\n : undefined,\n ResponseLoggerInterceptor:\n process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING\n ? ResponseLoggerInterceptor.create\n : undefined,\n /* eslint-enable no-extra-parens */\n RequestTimingInterceptor: RequestTimingInterceptor.create,\n ServiceInterceptor: undefined,\n UserAgentInterceptor: UserAgentInterceptor.create,\n WebexUserAgentInterceptor: WebexUserAgentInterceptor.create,\n AuthInterceptor: AuthInterceptor.create,\n KmsDryErrorInterceptor: undefined,\n PayloadTransformerInterceptor: PayloadTransformerInterceptor.create,\n ConversationInterceptor: undefined,\n RedirectInterceptor: RedirectInterceptor.create,\n HttpStatusInterceptor() {\n return HttpStatusInterceptor.create({\n error: WebexHttpError,\n });\n },\n NetworkTimingInterceptor: NetworkTimingInterceptor.create,\n EmbargoInterceptor: EmbargoInterceptor.create,\n DefaultOptionsInterceptor: DefaultOptionsInterceptor.create,\n};\n\nconst preInterceptors = [\n 'ResponseLoggerInterceptor',\n 'RequestTimingInterceptor',\n 'RequestEventInterceptor',\n 'WebexTrackingIdInterceptor',\n 'RateLimitInterceptor',\n];\n\nconst postInterceptors = [\n 'HttpStatusInterceptor',\n 'NetworkTimingInterceptor',\n 'EmbargoInterceptor',\n 'RequestLoggerInterceptor',\n 'RateLimitInterceptor',\n];\n\nconst MAX_FILE_SIZE_IN_MB = 2048;\n\n/**\n * @class\n */\nconst WebexCore = AmpState.extend({\n version: PACKAGE_VERSION,\n\n children: {\n internal: WebexInternalCore,\n },\n\n constructor(attrs = {}, options) {\n if (typeof attrs === 'string') {\n attrs = {\n credentials: {\n supertoken: {\n // eslint-disable-next-line camelcase\n access_token: attrs,\n },\n },\n };\n } else {\n // Reminder: order is important here\n [\n 'credentials.authorization',\n 'authorization',\n 'credentials.supertoken.supertoken',\n 'supertoken',\n 'access_token',\n 'credentials.authorization.supertoken',\n ].forEach((path) => {\n const val = get(attrs, path);\n\n if (val) {\n unset(attrs, path);\n set(attrs, 'credentials.supertoken', val);\n }\n });\n\n ['credentials', 'credentials.authorization'].forEach((path) => {\n const val = get(attrs, path);\n\n if (typeof val === 'string') {\n unset(attrs, path);\n set(attrs, 'credentials.supertoken', val);\n }\n });\n\n if (typeof get(attrs, 'credentials.access_token') === 'string') {\n // Send access_token to get validated and corrected and then set it\n set(\n attrs,\n 'credentials.access_token',\n this.bearerValidator(get(attrs, 'credentials.access_token').trim())\n );\n\n set(attrs, 'credentials.supertoken', attrs.credentials);\n }\n }\n\n return Reflect.apply(AmpState, this, [attrs, options]);\n },\n\n derived: {\n boundedStorage: {\n deps: [],\n fn() {\n return makeWebexStore('bounded', this);\n },\n },\n unboundedStorage: {\n deps: [],\n fn() {\n return makeWebexStore('unbounded', this);\n },\n },\n ready: {\n deps: ['loaded', 'internal.ready'],\n fn() {\n return (\n this.loaded &&\n Object.keys(this._children).reduce(\n (ready, name) => ready && this[name] && this[name].ready !== false,\n true\n )\n );\n },\n },\n },\n\n session: {\n config: {\n type: 'object',\n },\n /**\n * When true, indicates that the initial load from the storage layer is\n * complete\n * @instance\n * @memberof WebexCore\n * @type {boolean}\n */\n loaded: {\n default: false,\n type: 'boolean',\n },\n request: {\n setOnce: true,\n // It's supposed to be a function, but that's not a type defined in\n // Ampersand\n type: 'any',\n },\n sessionId: {\n setOnce: true,\n type: 'string',\n },\n },\n\n /**\n * @instance\n * @memberof WebexCore\n * @param {[type]} args\n * @returns {[type]}\n */\n refresh(...args) {\n return this.credentials.refresh(...args);\n },\n\n /**\n * Applies the directionally appropriate transforms to the specified object\n * @param {string} direction\n * @param {Object} object\n * @returns {Promise}\n */\n transform(direction, object) {\n const predicates = this.config.payloadTransformer.predicates.filter(\n (p) => !p.direction || p.direction === direction\n );\n const ctx = {\n webex: this,\n };\n\n return Promise.all(\n predicates.map((p) =>\n p.test(ctx, object).then((shouldTransform) => {\n if (!shouldTransform) {\n return undefined;\n }\n\n return (\n p\n .extract(object)\n // eslint-disable-next-line max-nested-callbacks\n .then((target) => ({\n name: p.name,\n target,\n }))\n );\n })\n )\n )\n .then((data) =>\n data\n .filter((d) => Boolean(d))\n // eslint-disable-next-line max-nested-callbacks\n .reduce(\n (promise, {name, target, alias}) =>\n promise.then(() => {\n if (alias) {\n return this.applyNamedTransform(direction, alias, target);\n }\n\n return this.applyNamedTransform(direction, name, target);\n }),\n Promise.resolve()\n )\n )\n .then(() => object);\n },\n\n /**\n * Applies the directionally appropriate transform to the specified parameters\n * @param {string} direction\n * @param {Object} ctx\n * @param {string} name\n * @returns {Promise}\n */\n applyNamedTransform(direction, ctx, name, ...rest) {\n if (isString(ctx)) {\n rest.unshift(name);\n name = ctx;\n ctx = {\n webex: this,\n transform: (...args) => this.applyNamedTransform(direction, ctx, ...args),\n };\n }\n\n const transforms = ctx.webex.config.payloadTransformer.transforms.filter(\n (tx) => tx.name === name && (!tx.direction || tx.direction === direction)\n );\n\n // too many implicit returns on the same line is difficult to interpret\n // eslint-disable-next-line arrow-body-style\n return transforms\n .reduce(\n (promise, tx) =>\n promise.then(() => {\n if (tx.alias) {\n return ctx.transform(tx.alias, ...rest);\n }\n\n return Promise.resolve(tx.fn(ctx, ...rest));\n }),\n Promise.resolve()\n )\n .then(() => last(rest));\n },\n\n /**\n * @private\n * @returns {Window}\n */\n getWindow() {\n // eslint-disable-next-line\n return window;\n },\n\n /**\n * Initializer\n *\n * @emits WebexCore#loaded\n * @emits WebexCore#ready\n * @instance\n * @memberof WebexCore\n * @param {Object} attrs\n * @returns {WebexCore}\n */\n initialize(attrs = {}) {\n this.config = merge({}, config, attrs.config);\n\n // There's some unfortunateness with the way {@link AmpersandState#children}\n // get initialized. We'll fire the change:config event so that\n // {@link WebexPlugin#initialize()} can use\n // `this.listenToOnce(parent, 'change:config', () => {});` to act on config\n // during initialization\n this.trigger('change:config');\n\n const onLoaded = () => {\n if (this.loaded) {\n /**\n * Fires when all data has been loaded from the storage layer\n * @event loaded\n * @instance\n * @memberof WebexCore\n */\n this.trigger('loaded');\n\n this.stopListening(this, 'change:loaded', onLoaded);\n }\n };\n\n // This needs to run on nextTick or we'll never be able to wire up listeners\n process.nextTick(() => {\n this.listenToAndRun(this, 'change:loaded', onLoaded);\n });\n\n const onReady = () => {\n if (this.ready) {\n /**\n * Fires when all plugins have fully initialized\n * @event ready\n * @instance\n * @memberof WebexCore\n */\n this.trigger('ready');\n\n this.stopListening(this, 'change:ready', onReady);\n }\n };\n\n // This needs to run on nextTick or we'll never be able to wire up listeners\n process.nextTick(() => {\n this.listenToAndRun(this, 'change:ready', onReady);\n });\n\n // Make nested events propagate in a consistent manner\n Object.keys(this.constructor.prototype._children).forEach((key) => {\n this.listenTo(this[key], 'change', (...args) => {\n args.unshift(`change:${key}`);\n this.trigger(...args);\n });\n });\n\n const addInterceptor = (ints, key) => {\n const interceptor = interceptors[key];\n\n if (!isFunction(interceptor)) {\n return ints;\n }\n\n ints.push(Reflect.apply(interceptor, this, []));\n\n return ints;\n };\n\n let ints = [];\n\n ints = preInterceptors.reduce(addInterceptor, ints);\n ints = Object.keys(interceptors)\n .filter((key) => !(preInterceptors.includes(key) || postInterceptors.includes(key)))\n .reduce(addInterceptor, ints);\n ints = postInterceptors.reduce(addInterceptor, ints);\n\n this.request = requestDefaults({\n json: true,\n interceptors: ints,\n });\n\n this.prepareFetchOptions = prepareFetchOptions({\n json: true,\n interceptors: ints,\n });\n\n this.setTimingsAndFetch = _setTimingsAndFetch;\n\n let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(\n this,\n 'config.trackingIdBase',\n uuid.v4()\n )}`;\n\n if (get(this, 'config.trackingIdSuffix')) {\n sessionId += `_${get(this, 'config.trackingIdSuffix')}`;\n }\n\n this.sessionId = sessionId;\n },\n\n /**\n * setConfig\n *\n * Allows updating config\n *\n * @instance\n * @memberof WebexCore\n * @param {Object} newConfig\n * @returns {null}\n */\n setConfig(newConfig = {}) {\n this.config = merge({}, this.config, newConfig);\n },\n\n /**\n *\n * Check if access token is correctly formated and correct if it's not\n * Warn user if token string has errors in it\n * @param {string} token\n * @returns {string}\n */\n bearerValidator(token) {\n if (token.includes('Bearer') && token.split(' ').length - 1 === 0) {\n console.warn(\n `Your access token does not have a space between 'Bearer' and the token, please add a space to it or replace it with this already fixed version:\\n\\n${token\n .replace('Bearer', 'Bearer ')\n .replace(/\\s+/g, ' ')}`\n );\n console.info(\n \"Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine\"\n );\n\n return token.replace('Bearer', 'Bearer ').replace(/\\s+/g, ' ');\n }\n // Allow elseIf return\n // eslint-disable-next-line no-else-return\n else if (token.split(' ').length - 1 > 1) {\n console.warn(\n `Your access token has ${\n token.split(' ').length - 2\n } too many spaces, please use this format:\\n\\n${token.replace(/\\s+/g, ' ')}`\n );\n console.info(\n \"Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine\"\n );\n\n return token.replace(/\\s+/g, ' ');\n }\n\n return token.replace(/\\s+/g, ' '); // Clean it anyway (just in case)\n },\n\n /**\n * @instance\n * @memberof WebexPlugin\n * @param {number} depth\n * @private\n * @returns {Object}\n */\n inspect(depth) {\n return util.inspect(\n omit(\n this.serialize({\n props: true,\n session: true,\n derived: true,\n }),\n 'boundedStorage',\n 'unboundedStorage',\n 'request',\n 'config'\n ),\n {depth}\n );\n },\n\n /**\n * Invokes all `onBeforeLogout` handlers in the scope of their plugin, clears\n * all stores, and revokes the access token\n * Note: If you're using the sdk in a server environment, you may be more\n * interested in {@link `webex.internal.mercury.disconnect()`| Mercury#disconnect()}\n * and {@link `webex.internal.device.unregister()`|Device#unregister()}\n * or {@link `webex.phone.unregister()`|Phone#unregister}\n * @instance\n * @memberof WebexCore\n * @param {Object} options Passed as the first argument to all\n * `onBeforeLogout` handlers\n * @returns {Promise}\n */\n logout(options, ...rest) {\n // prefer the refresh token, but for clients that don't have one, fallback\n // to the access token\n const token =\n this.credentials.supertoken &&\n (this.credentials.supertoken.refresh_token || this.credentials.supertoken.access_token);\n\n options = Object.assign({token}, options);\n\n // onBeforeLogout should be executed in the opposite order in which handlers\n // were registered. In that way, wdm unregister() will be above mercury\n // disconnect(), but disconnect() will execute first.\n // eslint-disable-next-line arrow-body-style\n return this.config.onBeforeLogout\n .reverse()\n .reduce(\n (promise, {plugin, fn}) =>\n promise.then(() => {\n return (\n Promise.resolve(\n Reflect.apply(fn, this[plugin] || this.internal[plugin], [options, ...rest])\n )\n // eslint-disable-next-line max-nested-callbacks\n .catch((err) => {\n this.logger.warn(`onBeforeLogout from plugin ${plugin}: failed`, err);\n })\n );\n }),\n Promise.resolve()\n )\n .then(() => Promise.all([this.boundedStorage.clear(), this.unboundedStorage.clear()]))\n .then(() => this.credentials.invalidate(...rest))\n .then(\n () =>\n this.authorization &&\n this.authorization.logout &&\n this.authorization.logout(options, ...rest)\n )\n .then(() => this.trigger('client:logout'));\n },\n\n /**\n * General purpose wrapper to submit metrics via the metrics plugin (if the\n * metrics plugin is installed)\n * @instance\n * @memberof WebexCore\n * @returns {Promise}\n */\n measure(...args) {\n if (this.metrics) {\n return this.metrics.sendUnstructured(...args);\n }\n\n return Promise.resolve();\n },\n\n async upload(options) {\n if (!options.file) {\n return Promise.reject(new Error('`options.file` is required'));\n }\n\n options.phases = options.phases || {};\n options.phases.initialize = options.phases.initialize || {};\n options.phases.upload = options.phases.upload || {};\n options.phases.finalize = options.phases.finalize || {};\n\n defaultsDeep(\n options.phases.initialize,\n {\n method: 'POST',\n body: {\n uploadProtocol: 'content-length',\n },\n },\n omit(options, 'file', 'phases')\n );\n\n defaultsDeep(options.phases.upload, {\n method: 'PUT',\n json: false,\n withCredentials: false,\n body: options.file,\n headers: {\n 'x-trans-id': uuid.v4(),\n authorization: undefined,\n },\n });\n\n defaultsDeep(\n options.phases.finalize,\n {\n method: 'POST',\n },\n omit(options, 'file', 'phases')\n );\n\n const shunt = new EventEmitter();\n\n const promise = this._uploadPhaseInitialize(options)\n .then(() => {\n const p = this._uploadPhaseUpload(options);\n\n transferEvents('progress', p, shunt);\n\n return p;\n })\n .then((...args) => this._uploadPhaseFinalize(options, ...args))\n .then((res) => ({...res.body, ...res.headers}));\n\n proxyEvents(shunt, promise);\n\n return promise;\n },\n\n _uploadPhaseInitialize: function _uploadPhaseInitialize(options) {\n this.logger.debug('client: initiating upload session');\n\n return this.request(options.phases.initialize)\n .then((...args) => {\n const fileUploadSizeLimitInBytes =\n (args[0].body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB) * 1024 * 1024;\n const currentFileSizeInBytes = options.file.byteLength;\n\n if (fileUploadSizeLimitInBytes && fileUploadSizeLimitInBytes < currentFileSizeInBytes) {\n return this._uploadAbortSession(currentFileSizeInBytes, ...args);\n }\n\n return this._uploadApplySession(options, ...args);\n })\n .then((res) => {\n this.logger.debug('client: initiated upload session');\n\n return res;\n });\n },\n\n _uploadAbortSession(currentFileSizeInBytes, response) {\n this.logger.debug('client: deleting uploaded file');\n\n return this.request({\n method: 'DELETE',\n url: response.body.url,\n headers: response.options.headers,\n }).then(() => {\n this.logger.debug('client: deleting uploaded file complete');\n\n const abortErrorDetails = {\n currentFileSizeInBytes,\n fileUploadSizeLimitInMB: response.body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB,\n message: 'file-upload-size-limit-enabled',\n };\n\n return Promise.reject(new Error(`${JSON.stringify(abortErrorDetails)}`));\n });\n },\n\n _uploadApplySession(options, res) {\n const session = res.body;\n\n ['upload', 'finalize'].reduce((opts, key) => {\n opts[key] = Object.keys(opts[key]).reduce((phaseOptions, phaseKey) => {\n if (phaseKey.startsWith('$')) {\n phaseOptions[phaseKey.substr(1)] = phaseOptions[phaseKey](session);\n Reflect.deleteProperty(phaseOptions, phaseKey);\n }\n\n return phaseOptions;\n }, opts[key]);\n\n return opts;\n }, options.phases);\n },\n\n @retry\n _uploadPhaseUpload(options) {\n this.logger.debug('client: uploading file');\n\n const promise = this.request(options.phases.upload).then((res) => {\n this.logger.debug('client: uploaded file');\n\n return res;\n });\n\n proxyEvents(options.phases.upload.upload, promise);\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV === 'test') {\n promise.on('progress', (event) => {\n this.logger.info('upload progress', event.loaded, event.total);\n });\n }\n\n return promise;\n },\n\n _uploadPhaseFinalize: function _uploadPhaseFinalize(options) {\n this.logger.debug('client: finalizing upload session');\n\n return this.request(options.phases.finalize).then((res) => {\n this.logger.debug('client: finalized upload session');\n\n return res;\n });\n },\n});\n\nWebexCore.version = PACKAGE_VERSION;\n\nmixinWebexInternalCorePlugins(WebexInternalCore, config, interceptors);\nmixinWebexCorePlugins(WebexCore, config, interceptors);\n\nexport default WebexCore;\n\n/**\n * @method registerPlugin\n * @param {string} name\n * @param {function} constructor\n * @param {Object} options\n * @param {Array<string>} options.proxies\n * @param {Object} options.interceptors\n * @returns {null}\n */\nexport function registerPlugin(name, constructor, options = {}) {\n WebexCore.registerPlugin(name, constructor, options);\n}\n\n/**\n * Registers plugins used by internal products that do not talk to public APIs.\n * @method registerInternalPlugin\n * @param {string} name\n * @param {function} constructor\n * @param {Object} options\n * @param {Object} options.interceptors\n * @private\n * @returns {null}\n */\nexport function registerInternalPlugin(name, constructor, options) {\n WebexInternalCore.registerPlugin(name, constructor, options);\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_events","require","_util","_interopRequireDefault","_common","_httpCore","_lodash","_ampersandState","_uuid","_auth","_networkTiming","_payloadTransformer","_redirect","_requestEvent","_requestLogger","_requestTiming","_responseLogger","_webexHttpError","_userAgent","_webexTrackingId","_webexUserAgent","_rateLimit","_embargo","_defaultOptions","_hostmap","_config","_storage","_webexCorePluginMixin","_webexInternalCorePluginMixin","_webexInternalCore","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","interceptors","WebexTrackingIdInterceptor","create","RequestEventInterceptor","RateLimitInterceptor","RequestLoggerInterceptor","process","env","ENABLE_NETWORK_LOGGING","ENABLE_VERBOSE_NETWORK_LOGGING","undefined","ResponseLoggerInterceptor","RequestTimingInterceptor","ServiceInterceptor","UserAgentInterceptor","WebexUserAgentInterceptor","AuthInterceptor","KmsDryErrorInterceptor","PayloadTransformerInterceptor","ConversationInterceptor","RedirectInterceptor","HttpStatusInterceptor","error","WebexHttpError","NetworkTimingInterceptor","EmbargoInterceptor","DefaultOptionsInterceptor","HostMapInterceptor","preInterceptors","postInterceptors","MAX_FILE_SIZE_IN_MB","WebexCore","AmpState","extend","version","children","internal","WebexInternalCore","constructor","attrs","options","credentials","supertoken","access_token","path","val","get","unset","set","bearerValidator","trim","_apply","derived","boundedStorage","deps","fn","makeWebexStore","unboundedStorage","ready","_this","loaded","_keys","_children","reduce","name","session","config","type","request","setOnce","sessionId","refresh","_this$credentials","transform","direction","object","_this2","predicates","payloadTransformer","p","ctx","webex","_promise","all","map","test","then","shouldTransform","extract","target","data","d","Boolean","promise","_ref","alias","applyNamedTransform","resolve","_this3","_len","rest","Array","_key","isString","unshift","_len2","args","_key2","concat","transforms","tx","_ctx","last","getWindow","window","initialize","_this4","merge","trigger","onLoaded","stopListening","nextTick","listenToAndRun","onReady","prototype","key","listenTo","_len3","_key3","addInterceptor","ints","interceptor","isFunction","includes","requestDefaults","json","prepareFetchOptions","setTimingsAndFetch","_setTimingsAndFetch","uuid","v4","setConfig","newConfig","token","split","console","warn","replace","info","inspect","depth","util","omit","serialize","props","logout","_this5","_len4","_key4","refresh_token","_assign","onBeforeLogout","reverse","_ref2","plugin","catch","err","logger","clear","_this5$credentials","invalidate","_this5$authorization","authorization","measure","metrics","_this$metrics","sendUnstructured","upload","_this6","_asyncToGenerator2","_regenerator","mark","_callee","shunt","wrap","_callee$","_context","prev","next","file","abrupt","reject","Error","phases","finalize","defaultsDeep","method","body","uploadProtocol","withCredentials","headers","EventEmitter","_uploadPhaseInitialize","_uploadPhaseUpload","transferEvents","_len5","_key5","_uploadPhaseFinalize","res","proxyEvents","stop","_this7","debug","_len6","_key6","fileUploadSizeLimitInBytes","fileUploadSizeLimit","currentFileSizeInBytes","byteLength","_uploadAbortSession","_uploadApplySession","response","_this8","url","abortErrorDetails","fileUploadSizeLimitInMB","message","_stringify","opts","phaseOptions","phaseKey","startsWith","substr","_deleteProperty","_this9","NODE_ENV","on","event","total","_this10","_applyDecoratedDescriptor2","retry","_getOwnPropertyDescriptor","mixinWebexInternalCorePlugins","mixinWebexCorePlugins","_default","exports","registerPlugin","registerInternalPlugin"],"sources":["webex-core.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\nimport util from 'util';\n\nimport {proxyEvents, retry, transferEvents} from '@webex/common';\nimport {\n HttpStatusInterceptor,\n defaults as requestDefaults,\n protoprepareFetchOptions as prepareFetchOptions,\n setTimingsAndFetch as _setTimingsAndFetch,\n} from '@webex/http-core';\nimport {defaultsDeep, get, isFunction, isString, last, merge, omit, set, unset} from 'lodash';\nimport AmpState from 'ampersand-state';\nimport uuid from 'uuid';\n\nimport AuthInterceptor from './interceptors/auth';\nimport NetworkTimingInterceptor from './interceptors/network-timing';\nimport PayloadTransformerInterceptor from './interceptors/payload-transformer';\nimport RedirectInterceptor from './interceptors/redirect';\nimport RequestEventInterceptor from './interceptors/request-event';\nimport RequestLoggerInterceptor from './interceptors/request-logger';\nimport RequestTimingInterceptor from './interceptors/request-timing';\nimport ResponseLoggerInterceptor from './interceptors/response-logger';\nimport WebexHttpError from './lib/webex-http-error';\nimport UserAgentInterceptor from './interceptors/user-agent';\nimport WebexTrackingIdInterceptor from './interceptors/webex-tracking-id';\nimport WebexUserAgentInterceptor from './interceptors/webex-user-agent';\nimport RateLimitInterceptor from './interceptors/rate-limit';\nimport EmbargoInterceptor from './interceptors/embargo';\nimport DefaultOptionsInterceptor from './interceptors/default-options';\nimport HostMapInterceptor from './lib/services/interceptors/hostmap';\nimport config from './config';\nimport {makeWebexStore} from './lib/storage';\nimport mixinWebexCorePlugins from './lib/webex-core-plugin-mixin';\nimport mixinWebexInternalCorePlugins from './lib/webex-internal-core-plugin-mixin';\nimport WebexInternalCore from './webex-internal-core';\n\n// TODO replace the Interceptor.create with Reflect.construct (\n// Interceptor.create exists because new was really hard to call on an array of\n// constructors)\nconst interceptors = {\n WebexTrackingIdInterceptor: WebexTrackingIdInterceptor.create,\n RequestEventInterceptor: RequestEventInterceptor.create,\n RateLimitInterceptor: RateLimitInterceptor.create,\n /* eslint-disable no-extra-parens */\n RequestLoggerInterceptor:\n process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING\n ? RequestLoggerInterceptor.create\n : undefined,\n ResponseLoggerInterceptor:\n process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING\n ? ResponseLoggerInterceptor.create\n : undefined,\n /* eslint-enable no-extra-parens */\n RequestTimingInterceptor: RequestTimingInterceptor.create,\n ServiceInterceptor: undefined,\n UserAgentInterceptor: UserAgentInterceptor.create,\n WebexUserAgentInterceptor: WebexUserAgentInterceptor.create,\n AuthInterceptor: AuthInterceptor.create,\n KmsDryErrorInterceptor: undefined,\n PayloadTransformerInterceptor: PayloadTransformerInterceptor.create,\n ConversationInterceptor: undefined,\n RedirectInterceptor: RedirectInterceptor.create,\n HttpStatusInterceptor() {\n return HttpStatusInterceptor.create({\n error: WebexHttpError,\n });\n },\n NetworkTimingInterceptor: NetworkTimingInterceptor.create,\n EmbargoInterceptor: EmbargoInterceptor.create,\n DefaultOptionsInterceptor: DefaultOptionsInterceptor.create,\n HostMapInterceptor: HostMapInterceptor.create,\n};\n\nconst preInterceptors = [\n 'ResponseLoggerInterceptor',\n 'RequestTimingInterceptor',\n 'RequestEventInterceptor',\n 'WebexTrackingIdInterceptor',\n 'RateLimitInterceptor',\n];\n\nconst postInterceptors = [\n 'HttpStatusInterceptor',\n 'NetworkTimingInterceptor',\n 'EmbargoInterceptor',\n 'RequestLoggerInterceptor',\n 'RateLimitInterceptor',\n];\n\nconst MAX_FILE_SIZE_IN_MB = 2048;\n\n/**\n * @class\n */\nconst WebexCore = AmpState.extend({\n version: PACKAGE_VERSION,\n\n children: {\n internal: WebexInternalCore,\n },\n\n constructor(attrs = {}, options) {\n if (typeof attrs === 'string') {\n attrs = {\n credentials: {\n supertoken: {\n // eslint-disable-next-line camelcase\n access_token: attrs,\n },\n },\n };\n } else {\n // Reminder: order is important here\n [\n 'credentials.authorization',\n 'authorization',\n 'credentials.supertoken.supertoken',\n 'supertoken',\n 'access_token',\n 'credentials.authorization.supertoken',\n ].forEach((path) => {\n const val = get(attrs, path);\n\n if (val) {\n unset(attrs, path);\n set(attrs, 'credentials.supertoken', val);\n }\n });\n\n ['credentials', 'credentials.authorization'].forEach((path) => {\n const val = get(attrs, path);\n\n if (typeof val === 'string') {\n unset(attrs, path);\n set(attrs, 'credentials.supertoken', val);\n }\n });\n\n if (typeof get(attrs, 'credentials.access_token') === 'string') {\n // Send access_token to get validated and corrected and then set it\n set(\n attrs,\n 'credentials.access_token',\n this.bearerValidator(get(attrs, 'credentials.access_token').trim())\n );\n\n set(attrs, 'credentials.supertoken', attrs.credentials);\n }\n }\n\n return Reflect.apply(AmpState, this, [attrs, options]);\n },\n\n derived: {\n boundedStorage: {\n deps: [],\n fn() {\n return makeWebexStore('bounded', this);\n },\n },\n unboundedStorage: {\n deps: [],\n fn() {\n return makeWebexStore('unbounded', this);\n },\n },\n ready: {\n deps: ['loaded', 'internal.ready'],\n fn() {\n return (\n this.loaded &&\n Object.keys(this._children).reduce(\n (ready, name) => ready && this[name] && this[name].ready !== false,\n true\n )\n );\n },\n },\n },\n\n session: {\n config: {\n type: 'object',\n },\n /**\n * When true, indicates that the initial load from the storage layer is\n * complete\n * @instance\n * @memberof WebexCore\n * @type {boolean}\n */\n loaded: {\n default: false,\n type: 'boolean',\n },\n request: {\n setOnce: true,\n // It's supposed to be a function, but that's not a type defined in\n // Ampersand\n type: 'any',\n },\n sessionId: {\n setOnce: true,\n type: 'string',\n },\n },\n\n /**\n * @instance\n * @memberof WebexCore\n * @param {[type]} args\n * @returns {[type]}\n */\n refresh(...args) {\n return this.credentials.refresh(...args);\n },\n\n /**\n * Applies the directionally appropriate transforms to the specified object\n * @param {string} direction\n * @param {Object} object\n * @returns {Promise}\n */\n transform(direction, object) {\n const predicates = this.config.payloadTransformer.predicates.filter(\n (p) => !p.direction || p.direction === direction\n );\n const ctx = {\n webex: this,\n };\n\n return Promise.all(\n predicates.map((p) =>\n p.test(ctx, object).then((shouldTransform) => {\n if (!shouldTransform) {\n return undefined;\n }\n\n return (\n p\n .extract(object)\n // eslint-disable-next-line max-nested-callbacks\n .then((target) => ({\n name: p.name,\n target,\n }))\n );\n })\n )\n )\n .then((data) =>\n data\n .filter((d) => Boolean(d))\n // eslint-disable-next-line max-nested-callbacks\n .reduce(\n (promise, {name, target, alias}) =>\n promise.then(() => {\n if (alias) {\n return this.applyNamedTransform(direction, alias, target);\n }\n\n return this.applyNamedTransform(direction, name, target);\n }),\n Promise.resolve()\n )\n )\n .then(() => object);\n },\n\n /**\n * Applies the directionally appropriate transform to the specified parameters\n * @param {string} direction\n * @param {Object} ctx\n * @param {string} name\n * @returns {Promise}\n */\n applyNamedTransform(direction, ctx, name, ...rest) {\n if (isString(ctx)) {\n rest.unshift(name);\n name = ctx;\n ctx = {\n webex: this,\n transform: (...args) => this.applyNamedTransform(direction, ctx, ...args),\n };\n }\n\n const transforms = ctx.webex.config.payloadTransformer.transforms.filter(\n (tx) => tx.name === name && (!tx.direction || tx.direction === direction)\n );\n\n // too many implicit returns on the same line is difficult to interpret\n // eslint-disable-next-line arrow-body-style\n return transforms\n .reduce(\n (promise, tx) =>\n promise.then(() => {\n if (tx.alias) {\n return ctx.transform(tx.alias, ...rest);\n }\n\n return Promise.resolve(tx.fn(ctx, ...rest));\n }),\n Promise.resolve()\n )\n .then(() => last(rest));\n },\n\n /**\n * @private\n * @returns {Window}\n */\n getWindow() {\n // eslint-disable-next-line\n return window;\n },\n\n /**\n * Initializer\n *\n * @emits WebexCore#loaded\n * @emits WebexCore#ready\n * @instance\n * @memberof WebexCore\n * @param {Object} attrs\n * @returns {WebexCore}\n */\n initialize(attrs = {}) {\n this.config = merge({}, config, attrs.config);\n\n // There's some unfortunateness with the way {@link AmpersandState#children}\n // get initialized. We'll fire the change:config event so that\n // {@link WebexPlugin#initialize()} can use\n // `this.listenToOnce(parent, 'change:config', () => {});` to act on config\n // during initialization\n this.trigger('change:config');\n\n const onLoaded = () => {\n if (this.loaded) {\n /**\n * Fires when all data has been loaded from the storage layer\n * @event loaded\n * @instance\n * @memberof WebexCore\n */\n this.trigger('loaded');\n\n this.stopListening(this, 'change:loaded', onLoaded);\n }\n };\n\n // This needs to run on nextTick or we'll never be able to wire up listeners\n process.nextTick(() => {\n this.listenToAndRun(this, 'change:loaded', onLoaded);\n });\n\n const onReady = () => {\n if (this.ready) {\n /**\n * Fires when all plugins have fully initialized\n * @event ready\n * @instance\n * @memberof WebexCore\n */\n this.trigger('ready');\n\n this.stopListening(this, 'change:ready', onReady);\n }\n };\n\n // This needs to run on nextTick or we'll never be able to wire up listeners\n process.nextTick(() => {\n this.listenToAndRun(this, 'change:ready', onReady);\n });\n\n // Make nested events propagate in a consistent manner\n Object.keys(this.constructor.prototype._children).forEach((key) => {\n this.listenTo(this[key], 'change', (...args) => {\n args.unshift(`change:${key}`);\n this.trigger(...args);\n });\n });\n\n const addInterceptor = (ints, key) => {\n const interceptor = interceptors[key];\n\n if (!isFunction(interceptor)) {\n return ints;\n }\n\n ints.push(Reflect.apply(interceptor, this, []));\n\n return ints;\n };\n\n let ints = [];\n\n ints = preInterceptors.reduce(addInterceptor, ints);\n ints = Object.keys(interceptors)\n .filter((key) => !(preInterceptors.includes(key) || postInterceptors.includes(key)))\n .reduce(addInterceptor, ints);\n ints = postInterceptors.reduce(addInterceptor, ints);\n\n this.request = requestDefaults({\n json: true,\n interceptors: ints,\n });\n\n this.prepareFetchOptions = prepareFetchOptions({\n json: true,\n interceptors: ints,\n });\n\n this.setTimingsAndFetch = _setTimingsAndFetch;\n\n let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(\n this,\n 'config.trackingIdBase',\n uuid.v4()\n )}`;\n\n if (get(this, 'config.trackingIdSuffix')) {\n sessionId += `_${get(this, 'config.trackingIdSuffix')}`;\n }\n\n this.sessionId = sessionId;\n },\n\n /**\n * setConfig\n *\n * Allows updating config\n *\n * @instance\n * @memberof WebexCore\n * @param {Object} newConfig\n * @returns {null}\n */\n setConfig(newConfig = {}) {\n this.config = merge({}, this.config, newConfig);\n },\n\n /**\n *\n * Check if access token is correctly formated and correct if it's not\n * Warn user if token string has errors in it\n * @param {string} token\n * @returns {string}\n */\n bearerValidator(token) {\n if (token.includes('Bearer') && token.split(' ').length - 1 === 0) {\n console.warn(\n `Your access token does not have a space between 'Bearer' and the token, please add a space to it or replace it with this already fixed version:\\n\\n${token\n .replace('Bearer', 'Bearer ')\n .replace(/\\s+/g, ' ')}`\n );\n console.info(\n \"Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine\"\n );\n\n return token.replace('Bearer', 'Bearer ').replace(/\\s+/g, ' ');\n }\n // Allow elseIf return\n // eslint-disable-next-line no-else-return\n else if (token.split(' ').length - 1 > 1) {\n console.warn(\n `Your access token has ${\n token.split(' ').length - 2\n } too many spaces, please use this format:\\n\\n${token.replace(/\\s+/g, ' ')}`\n );\n console.info(\n \"Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine\"\n );\n\n return token.replace(/\\s+/g, ' ');\n }\n\n return token.replace(/\\s+/g, ' '); // Clean it anyway (just in case)\n },\n\n /**\n * @instance\n * @memberof WebexPlugin\n * @param {number} depth\n * @private\n * @returns {Object}\n */\n inspect(depth) {\n return util.inspect(\n omit(\n this.serialize({\n props: true,\n session: true,\n derived: true,\n }),\n 'boundedStorage',\n 'unboundedStorage',\n 'request',\n 'config'\n ),\n {depth}\n );\n },\n\n /**\n * Invokes all `onBeforeLogout` handlers in the scope of their plugin, clears\n * all stores, and revokes the access token\n * Note: If you're using the sdk in a server environment, you may be more\n * interested in {@link `webex.internal.mercury.disconnect()`| Mercury#disconnect()}\n * and {@link `webex.internal.device.unregister()`|Device#unregister()}\n * or {@link `webex.phone.unregister()`|Phone#unregister}\n * @instance\n * @memberof WebexCore\n * @param {Object} options Passed as the first argument to all\n * `onBeforeLogout` handlers\n * @returns {Promise}\n */\n logout(options, ...rest) {\n // prefer the refresh token, but for clients that don't have one, fallback\n // to the access token\n const token =\n this.credentials.supertoken &&\n (this.credentials.supertoken.refresh_token || this.credentials.supertoken.access_token);\n\n options = Object.assign({token}, options);\n\n // onBeforeLogout should be executed in the opposite order in which handlers\n // were registered. In that way, wdm unregister() will be above mercury\n // disconnect(), but disconnect() will execute first.\n // eslint-disable-next-line arrow-body-style\n return this.config.onBeforeLogout\n .reverse()\n .reduce(\n (promise, {plugin, fn}) =>\n promise.then(() => {\n return (\n Promise.resolve(\n Reflect.apply(fn, this[plugin] || this.internal[plugin], [options, ...rest])\n )\n // eslint-disable-next-line max-nested-callbacks\n .catch((err) => {\n this.logger.warn(`onBeforeLogout from plugin ${plugin}: failed`, err);\n })\n );\n }),\n Promise.resolve()\n )\n .then(() => Promise.all([this.boundedStorage.clear(), this.unboundedStorage.clear()]))\n .then(() => this.credentials.invalidate(...rest))\n .then(\n () =>\n this.authorization &&\n this.authorization.logout &&\n this.authorization.logout(options, ...rest)\n )\n .then(() => this.trigger('client:logout'));\n },\n\n /**\n * General purpose wrapper to submit metrics via the metrics plugin (if the\n * metrics plugin is installed)\n * @instance\n * @memberof WebexCore\n * @returns {Promise}\n */\n measure(...args) {\n if (this.metrics) {\n return this.metrics.sendUnstructured(...args);\n }\n\n return Promise.resolve();\n },\n\n async upload(options) {\n if (!options.file) {\n return Promise.reject(new Error('`options.file` is required'));\n }\n\n options.phases = options.phases || {};\n options.phases.initialize = options.phases.initialize || {};\n options.phases.upload = options.phases.upload || {};\n options.phases.finalize = options.phases.finalize || {};\n\n defaultsDeep(\n options.phases.initialize,\n {\n method: 'POST',\n body: {\n uploadProtocol: 'content-length',\n },\n },\n omit(options, 'file', 'phases')\n );\n\n defaultsDeep(options.phases.upload, {\n method: 'PUT',\n json: false,\n withCredentials: false,\n body: options.file,\n headers: {\n 'x-trans-id': uuid.v4(),\n authorization: undefined,\n },\n });\n\n defaultsDeep(\n options.phases.finalize,\n {\n method: 'POST',\n },\n omit(options, 'file', 'phases')\n );\n\n const shunt = new EventEmitter();\n\n const promise = this._uploadPhaseInitialize(options)\n .then(() => {\n const p = this._uploadPhaseUpload(options);\n\n transferEvents('progress', p, shunt);\n\n return p;\n })\n .then((...args) => this._uploadPhaseFinalize(options, ...args))\n .then((res) => ({...res.body, ...res.headers}));\n\n proxyEvents(shunt, promise);\n\n return promise;\n },\n\n _uploadPhaseInitialize: function _uploadPhaseInitialize(options) {\n this.logger.debug('client: initiating upload session');\n\n return this.request(options.phases.initialize)\n .then((...args) => {\n const fileUploadSizeLimitInBytes =\n (args[0].body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB) * 1024 * 1024;\n const currentFileSizeInBytes = options.file.byteLength;\n\n if (fileUploadSizeLimitInBytes && fileUploadSizeLimitInBytes < currentFileSizeInBytes) {\n return this._uploadAbortSession(currentFileSizeInBytes, ...args);\n }\n\n return this._uploadApplySession(options, ...args);\n })\n .then((res) => {\n this.logger.debug('client: initiated upload session');\n\n return res;\n });\n },\n\n _uploadAbortSession(currentFileSizeInBytes, response) {\n this.logger.debug('client: deleting uploaded file');\n\n return this.request({\n method: 'DELETE',\n url: response.body.url,\n headers: response.options.headers,\n }).then(() => {\n this.logger.debug('client: deleting uploaded file complete');\n\n const abortErrorDetails = {\n currentFileSizeInBytes,\n fileUploadSizeLimitInMB: response.body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB,\n message: 'file-upload-size-limit-enabled',\n };\n\n return Promise.reject(new Error(`${JSON.stringify(abortErrorDetails)}`));\n });\n },\n\n _uploadApplySession(options, res) {\n const session = res.body;\n\n ['upload', 'finalize'].reduce((opts, key) => {\n opts[key] = Object.keys(opts[key]).reduce((phaseOptions, phaseKey) => {\n if (phaseKey.startsWith('$')) {\n phaseOptions[phaseKey.substr(1)] = phaseOptions[phaseKey](session);\n Reflect.deleteProperty(phaseOptions, phaseKey);\n }\n\n return phaseOptions;\n }, opts[key]);\n\n return opts;\n }, options.phases);\n },\n\n @retry\n _uploadPhaseUpload(options) {\n this.logger.debug('client: uploading file');\n\n const promise = this.request(options.phases.upload).then((res) => {\n this.logger.debug('client: uploaded file');\n\n return res;\n });\n\n proxyEvents(options.phases.upload.upload, promise);\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV === 'test') {\n promise.on('progress', (event) => {\n this.logger.info('upload progress', event.loaded, event.total);\n });\n }\n\n return promise;\n },\n\n _uploadPhaseFinalize: function _uploadPhaseFinalize(options) {\n this.logger.debug('client: finalizing upload session');\n\n return this.request(options.phases.finalize).then((res) => {\n this.logger.debug('client: finalized upload session');\n\n return res;\n });\n },\n});\n\nWebexCore.version = PACKAGE_VERSION;\n\nmixinWebexInternalCorePlugins(WebexInternalCore, config, interceptors);\nmixinWebexCorePlugins(WebexCore, config, interceptors);\n\nexport default WebexCore;\n\n/**\n * @method registerPlugin\n * @param {string} name\n * @param {function} constructor\n * @param {Object} options\n * @param {Array<string>} options.proxies\n * @param {Object} options.interceptors\n * @returns {null}\n */\nexport function registerPlugin(name, constructor, options = {}) {\n WebexCore.registerPlugin(name, constructor, options);\n}\n\n/**\n * Registers plugins used by internal products that do not talk to public APIs.\n * @method registerInternalPlugin\n * @param {string} name\n * @param {function} constructor\n * @param {Object} options\n * @param {Object} options.interceptors\n * @private\n * @returns {null}\n */\nexport function registerInternalPlugin(name, constructor, options) {\n WebexInternalCore.registerPlugin(name, constructor, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AAMA,IAAAK,OAAA,GAAAL,OAAA;AACA,IAAAM,eAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,KAAA,GAAAL,sBAAA,CAAAF,OAAA;AAEA,IAAAQ,KAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,cAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,mBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,SAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,aAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,cAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,cAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,eAAA,GAAAb,sBAAA,CAAAF,OAAA;AACA,IAAAgB,eAAA,GAAAd,sBAAA,CAAAF,OAAA;AACA,IAAAiB,UAAA,GAAAf,sBAAA,CAAAF,OAAA;AACA,IAAAkB,gBAAA,GAAAhB,sBAAA,CAAAF,OAAA;AACA,IAAAmB,eAAA,GAAAjB,sBAAA,CAAAF,OAAA;AACA,IAAAoB,UAAA,GAAAlB,sBAAA,CAAAF,OAAA;AACA,IAAAqB,QAAA,GAAAnB,sBAAA,CAAAF,OAAA;AACA,IAAAsB,eAAA,GAAApB,sBAAA,CAAAF,OAAA;AACA,IAAAuB,QAAA,GAAArB,sBAAA,CAAAF,OAAA;AACA,IAAAwB,OAAA,GAAAtB,sBAAA,CAAAF,OAAA;AACA,IAAAyB,QAAA,GAAAzB,OAAA;AACA,IAAA0B,qBAAA,GAAAxB,sBAAA,CAAAF,OAAA;AACA,IAAA2B,6BAAA,GAAAzB,sBAAA,CAAAF,OAAA;AACA,IAAA4B,kBAAA,GAAA1B,sBAAA,CAAAF,OAAA;AAAsD,IAAA6B,IAAA;AAtCtD;AACA;AACA;AAFA,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,iCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,iCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAwCA;AACA;AACA;AACA,IAAMqB,YAAY,GAAG;EACnBC,0BAA0B,EAAEA,wBAA0B,CAACC,MAAM;EAC7DC,uBAAuB,EAAEA,qBAAuB,CAACD,MAAM;EACvDE,oBAAoB,EAAEA,kBAAoB,CAACF,MAAM;EACjD;EACAG,wBAAwB,EACtBC,OAAO,CAACC,GAAG,CAACC,sBAAsB,IAAIF,OAAO,CAACC,GAAG,CAACE,8BAA8B,GAC5EJ,sBAAwB,CAACH,MAAM,GAC/BQ,SAAS;EACfC,yBAAyB,EACvBL,OAAO,CAACC,GAAG,CAACC,sBAAsB,IAAIF,OAAO,CAACC,GAAG,CAACE,8BAA8B,GAC5EE,uBAAyB,CAACT,MAAM,GAChCQ,SAAS;EACf;EACAE,wBAAwB,EAAEA,sBAAwB,CAACV,MAAM;EACzDW,kBAAkB,EAAEH,SAAS;EAC7BI,oBAAoB,EAAEA,kBAAoB,CAACZ,MAAM;EACjDa,yBAAyB,EAAEA,uBAAyB,CAACb,MAAM;EAC3Dc,eAAe,EAAEA,aAAe,CAACd,MAAM;EACvCe,sBAAsB,EAAEP,SAAS;EACjCQ,6BAA6B,EAAEA,2BAA6B,CAAChB,MAAM;EACnEiB,uBAAuB,EAAET,SAAS;EAClCU,mBAAmB,EAAEA,iBAAmB,CAAClB,MAAM;EAC/CmB,qBAAqB,WAAAA,sBAAA,EAAG;IACtB,OAAOA,+BAAqB,CAACnB,MAAM,CAAC;MAClCoB,KAAK,EAAEC;IACT,CAAC,CAAC;EACJ,CAAC;EACDC,wBAAwB,EAAEA,sBAAwB,CAACtB,MAAM;EACzDuB,kBAAkB,EAAEA,gBAAkB,CAACvB,MAAM;EAC7CwB,yBAAyB,EAAEA,uBAAyB,CAACxB,MAAM;EAC3DyB,kBAAkB,EAAEA,gBAAkB,CAACzB;AACzC,CAAC;AAED,IAAM0B,eAAe,GAAG,CACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,CACvB;AAED,IAAMC,gBAAgB,GAAG,CACvB,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,CACvB;AAED,IAAMC,mBAAmB,GAAG,IAAI;;AAEhC;AACA;AACA;AACA,IAAMC,SAAS,GAAGC,uBAAQ,CAACC,MAAM,EAAAxD,IAAA,GAAC;EAChCyD,OAAO,SAAiB;EAExBC,QAAQ,EAAE;IACRC,QAAQ,EAAEC;EACZ,CAAC;EAEDC,WAAW,WAAAA,YAAA,EAAsB;IAAA,IAArBC,KAAK,GAAAhD,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAmB,SAAA,GAAAnB,SAAA,MAAG,CAAC,CAAC;IAAA,IAAEiD,OAAO,GAAAjD,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAmB,SAAA;IAC7B,IAAI,OAAO6B,KAAK,KAAK,QAAQ,EAAE;MAC7BA,KAAK,GAAG;QACNE,WAAW,EAAE;UACXC,UAAU,EAAE;YACV;YACAC,YAAY,EAAEJ;UAChB;QACF;MACF,CAAC;IACH,CAAC,MAAM;MACL;MACA,CACE,2BAA2B,EAC3B,eAAe,EACf,mCAAmC,EACnC,YAAY,EACZ,cAAc,EACd,sCAAsC,CACvC,CAAC7C,OAAO,CAAC,UAACkD,IAAI,EAAK;QAClB,IAAMC,GAAG,GAAG,IAAAC,WAAG,EAACP,KAAK,EAAEK,IAAI,CAAC;QAE5B,IAAIC,GAAG,EAAE;UACP,IAAAE,aAAK,EAACR,KAAK,EAAEK,IAAI,CAAC;UAClB,IAAAI,WAAG,EAACT,KAAK,EAAE,wBAAwB,EAAEM,GAAG,CAAC;QAC3C;MACF,CAAC,CAAC;MAEF,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAACnD,OAAO,CAAC,UAACkD,IAAI,EAAK;QAC7D,IAAMC,GAAG,GAAG,IAAAC,WAAG,EAACP,KAAK,EAAEK,IAAI,CAAC;QAE5B,IAAI,OAAOC,GAAG,KAAK,QAAQ,EAAE;UAC3B,IAAAE,aAAK,EAACR,KAAK,EAAEK,IAAI,CAAC;UAClB,IAAAI,WAAG,EAACT,KAAK,EAAE,wBAAwB,EAAEM,GAAG,CAAC;QAC3C;MACF,CAAC,CAAC;MAEF,IAAI,OAAO,IAAAC,WAAG,EAACP,KAAK,EAAE,0BAA0B,CAAC,KAAK,QAAQ,EAAE;QAC9D;QACA,IAAAS,WAAG,EACDT,KAAK,EACL,0BAA0B,EAC1B,IAAI,CAACU,eAAe,CAAC,IAAAH,WAAG,EAACP,KAAK,EAAE,0BAA0B,CAAC,CAACW,IAAI,CAAC,CAAC,CACpE,CAAC;QAED,IAAAF,WAAG,EAACT,KAAK,EAAE,wBAAwB,EAAEA,KAAK,CAACE,WAAW,CAAC;MACzD;IACF;IAEA,OAAO,IAAAU,MAAA,CAAAvD,OAAA,EAAcoC,uBAAQ,EAAE,IAAI,EAAE,CAACO,KAAK,EAAEC,OAAO,CAAC,CAAC;EACxD,CAAC;EAEDY,OAAO,EAAE;IACPC,cAAc,EAAE;MACdC,IAAI,EAAE,EAAE;MACRC,EAAE,WAAAA,GAAA,EAAG;QACH,OAAO,IAAAC,uBAAc,EAAC,SAAS,EAAE,IAAI,CAAC;MACxC;IACF,CAAC;IACDC,gBAAgB,EAAE;MAChBH,IAAI,EAAE,EAAE;MACRC,EAAE,WAAAA,GAAA,EAAG;QACH,OAAO,IAAAC,uBAAc,EAAC,WAAW,EAAE,IAAI,CAAC;MAC1C;IACF,CAAC;IACDE,KAAK,EAAE;MACLJ,IAAI,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;MAClCC,EAAE,WAAAA,GAAA,EAAG;QAAA,IAAAI,KAAA;QACH,OACE,IAAI,CAACC,MAAM,IACX,IAAAC,KAAA,CAAAjE,OAAA,EAAY,IAAI,CAACkE,SAAS,CAAC,CAACC,MAAM,CAChC,UAACL,KAAK,EAAEM,IAAI;UAAA,OAAKN,KAAK,IAAIC,KAAI,CAACK,IAAI,CAAC,IAAIL,KAAI,CAACK,IAAI,CAAC,CAACN,KAAK,KAAK,KAAK;QAAA,GAClE,IACF,CAAC;MAEL;IACF;EACF,CAAC;EAEDO,OAAO,EAAE;IACPC,MAAM,EAAE;MACNC,IAAI,EAAE;IACR,CAAC;IACD;AACJ;AACA;AACA;AACA;AACA;AACA;IACIP,MAAM,EAAE;MACNhE,OAAO,EAAE,KAAK;MACduE,IAAI,EAAE;IACR,CAAC;IACDC,OAAO,EAAE;MACPC,OAAO,EAAE,IAAI;MACb;MACA;MACAF,IAAI,EAAE;IACR,CAAC;IACDG,SAAS,EAAE;MACTD,OAAO,EAAE,IAAI;MACbF,IAAI,EAAE;IACR;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEI,OAAO,WAAAA,QAAA,EAAU;IAAA,IAAAC,iBAAA;IACf,OAAO,CAAAA,iBAAA,OAAI,CAAC/B,WAAW,EAAC8B,OAAO,CAAAlF,KAAA,CAAAmF,iBAAA,EAAAjF,SAAQ,CAAC;EAC1C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEkF,SAAS,WAAAA,UAACC,SAAS,EAAEC,MAAM,EAAE;IAAA,IAAAC,MAAA;IAC3B,IAAMC,UAAU,GAAG,IAAI,CAACX,MAAM,CAACY,kBAAkB,CAACD,UAAU,CAAC5F,MAAM,CACjE,UAAC8F,CAAC;MAAA,OAAK,CAACA,CAAC,CAACL,SAAS,IAAIK,CAAC,CAACL,SAAS,KAAKA,SAAS;IAAA,CAClD,CAAC;IACD,IAAMM,GAAG,GAAG;MACVC,KAAK,EAAE;IACT,CAAC;IAED,OAAOC,QAAA,CAAAtF,OAAA,CAAQuF,GAAG,CAChBN,UAAU,CAACO,GAAG,CAAC,UAACL,CAAC;MAAA,OACfA,CAAC,CAACM,IAAI,CAACL,GAAG,EAAEL,MAAM,CAAC,CAACW,IAAI,CAAC,UAACC,eAAe,EAAK;QAC5C,IAAI,CAACA,eAAe,EAAE;UACpB,OAAO7E,SAAS;QAClB;QAEA,OACEqE,CAAC,CACES,OAAO,CAACb,MAAM;QACf;QAAA,CACCW,IAAI,CAAC,UAACG,MAAM;UAAA,OAAM;YACjBzB,IAAI,EAAEe,CAAC,CAACf,IAAI;YACZyB,MAAM,EAANA;UACF,CAAC;QAAA,CAAC,CAAC;MAET,CAAC,CAAC;IAAA,CACJ,CACF,CAAC,CACEH,IAAI,CAAC,UAACI,IAAI;MAAA,OACTA,IAAI,CACDzG,MAAM,CAAC,UAAC0G,CAAC;QAAA,OAAKC,OAAO,CAACD,CAAC,CAAC;MAAA;MACzB;MAAA,CACC5B,MAAM,CACL,UAAC8B,OAAO,EAAAC,IAAA;QAAA,IAAG9B,IAAI,GAAA8B,IAAA,CAAJ9B,IAAI;UAAEyB,MAAM,GAAAK,IAAA,CAANL,MAAM;UAAEM,KAAK,GAAAD,IAAA,CAALC,KAAK;QAAA,OAC5BF,OAAO,CAACP,IAAI,CAAC,YAAM;UACjB,IAAIS,KAAK,EAAE;YACT,OAAOnB,MAAI,CAACoB,mBAAmB,CAACtB,SAAS,EAAEqB,KAAK,EAAEN,MAAM,CAAC;UAC3D;UAEA,OAAOb,MAAI,CAACoB,mBAAmB,CAACtB,SAAS,EAAEV,IAAI,EAAEyB,MAAM,CAAC;QAC1D,CAAC,CAAC;MAAA,GACJP,QAAA,CAAAtF,OAAA,CAAQqG,OAAO,CAAC,CAClB,CAAC;IAAA,CACL,CAAC,CACAX,IAAI,CAAC;MAAA,OAAMX,MAAM;IAAA,EAAC;EACvB,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEqB,mBAAmB,WAAAA,oBAACtB,SAAS,EAAEM,GAAG,EAAEhB,IAAI,EAAW;IAAA,IAAAkC,MAAA;IAAA,SAAAC,IAAA,GAAA5G,SAAA,CAAAC,MAAA,EAAN4G,IAAI,OAAAC,KAAA,CAAAF,IAAA,OAAAA,IAAA,WAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;MAAJF,IAAI,CAAAE,IAAA,QAAA/G,SAAA,CAAA+G,IAAA;IAAA;IAC/C,IAAI,IAAAC,gBAAQ,EAACvB,GAAG,CAAC,EAAE;MACjBoB,IAAI,CAACI,OAAO,CAACxC,IAAI,CAAC;MAClBA,IAAI,GAAGgB,GAAG;MACVA,GAAG,GAAG;QACJC,KAAK,EAAE,IAAI;QACXR,SAAS,EAAE,SAAAA,UAAA;UAAA,SAAAgC,KAAA,GAAAlH,SAAA,CAAAC,MAAA,EAAIkH,IAAI,OAAAL,KAAA,CAAAI,KAAA,GAAAE,KAAA,MAAAA,KAAA,GAAAF,KAAA,EAAAE,KAAA;YAAJD,IAAI,CAAAC,KAAA,IAAApH,SAAA,CAAAoH,KAAA;UAAA;UAAA,OAAKT,MAAI,CAACF,mBAAmB,CAAA3G,KAAA,CAAxB6G,MAAI,GAAqBxB,SAAS,EAAEM,GAAG,EAAA4B,MAAA,CAAKF,IAAI,EAAC;QAAA;MAC3E,CAAC;IACH;IAEA,IAAMG,UAAU,GAAG7B,GAAG,CAACC,KAAK,CAACf,MAAM,CAACY,kBAAkB,CAAC+B,UAAU,CAAC5H,MAAM,CACtE,UAAC6H,EAAE;MAAA,OAAKA,EAAE,CAAC9C,IAAI,KAAKA,IAAI,KAAK,CAAC8C,EAAE,CAACpC,SAAS,IAAIoC,EAAE,CAACpC,SAAS,KAAKA,SAAS,CAAC;IAAA,CAC3E,CAAC;;IAED;IACA;IACA,OAAOmC,UAAU,CACd9C,MAAM,CACL,UAAC8B,OAAO,EAAEiB,EAAE;MAAA,OACVjB,OAAO,CAACP,IAAI,CAAC,YAAM;QACjB,IAAIwB,EAAE,CAACf,KAAK,EAAE;UAAA,IAAAgB,IAAA;UACZ,OAAO,CAAAA,IAAA,GAAA/B,GAAG,EAACP,SAAS,CAAApF,KAAA,CAAA0H,IAAA,GAACD,EAAE,CAACf,KAAK,EAAAa,MAAA,CAAKR,IAAI,EAAC;QACzC;QAEA,OAAOlB,QAAA,CAAAtF,OAAA,CAAQqG,OAAO,CAACa,EAAE,CAACvD,EAAE,CAAAlE,KAAA,CAALyH,EAAE,GAAI9B,GAAG,EAAA4B,MAAA,CAAKR,IAAI,EAAC,CAAC;MAC7C,CAAC,CAAC;IAAA,GACJlB,QAAA,CAAAtF,OAAA,CAAQqG,OAAO,CAAC,CAClB,CAAC,CACAX,IAAI,CAAC;MAAA,OAAM,IAAA0B,YAAI,EAACZ,IAAI,CAAC;IAAA,EAAC;EAC3B,CAAC;EAED;AACF;AACA;AACA;EACEa,SAAS,WAAAA,UAAA,EAAG;IACV;IACA,OAAOC,MAAM;EACf,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,UAAU,WAAAA,WAAA,EAAa;IAAA,IAAAC,MAAA;IAAA,IAAZ7E,KAAK,GAAAhD,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAmB,SAAA,GAAAnB,SAAA,MAAG,CAAC,CAAC;IACnB,IAAI,CAAC2E,MAAM,GAAG,IAAAmD,aAAK,EAAC,CAAC,CAAC,EAAEnD,eAAM,EAAE3B,KAAK,CAAC2B,MAAM,CAAC;;IAE7C;IACA;IACA;IACA;IACA;IACA,IAAI,CAACoD,OAAO,CAAC,eAAe,CAAC;IAE7B,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAA,EAAS;MACrB,IAAIH,MAAI,CAACxD,MAAM,EAAE;QACf;AACR;AACA;AACA;AACA;AACA;QACQwD,MAAI,CAACE,OAAO,CAAC,QAAQ,CAAC;QAEtBF,MAAI,CAACI,aAAa,CAACJ,MAAI,EAAE,eAAe,EAAEG,QAAQ,CAAC;MACrD;IACF,CAAC;;IAED;IACAjH,OAAO,CAACmH,QAAQ,CAAC,YAAM;MACrBL,MAAI,CAACM,cAAc,CAACN,MAAI,EAAE,eAAe,EAAEG,QAAQ,CAAC;IACtD,CAAC,CAAC;IAEF,IAAMI,OAAO,GAAG,SAAVA,OAAOA,CAAA,EAAS;MACpB,IAAIP,MAAI,CAAC1D,KAAK,EAAE;QACd;AACR;AACA;AACA;AACA;AACA;QACQ0D,MAAI,CAACE,OAAO,CAAC,OAAO,CAAC;QAErBF,MAAI,CAACI,aAAa,CAACJ,MAAI,EAAE,cAAc,EAAEO,OAAO,CAAC;MACnD;IACF,CAAC;;IAED;IACArH,OAAO,CAACmH,QAAQ,CAAC,YAAM;MACrBL,MAAI,CAACM,cAAc,CAACN,MAAI,EAAE,cAAc,EAAEO,OAAO,CAAC;IACpD,CAAC,CAAC;;IAEF;IACA,IAAA9D,KAAA,CAAAjE,OAAA,EAAY,IAAI,CAAC0C,WAAW,CAACsF,SAAS,CAAC9D,SAAS,CAAC,CAACpE,OAAO,CAAC,UAACmI,GAAG,EAAK;MACjET,MAAI,CAACU,QAAQ,CAACV,MAAI,CAACS,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAa;QAAA,SAAAE,KAAA,GAAAxI,SAAA,CAAAC,MAAA,EAATkH,IAAI,OAAAL,KAAA,CAAA0B,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;UAAJtB,IAAI,CAAAsB,KAAA,IAAAzI,SAAA,CAAAyI,KAAA;QAAA;QACzCtB,IAAI,CAACF,OAAO,WAAAI,MAAA,CAAWiB,GAAG,CAAE,CAAC;QAC7BT,MAAI,CAACE,OAAO,CAAAjI,KAAA,CAAZ+H,MAAI,EAAYV,IAAI,CAAC;MACvB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAMuB,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAI,EAAEL,GAAG,EAAK;MACpC,IAAMM,WAAW,GAAGnI,YAAY,CAAC6H,GAAG,CAAC;MAErC,IAAI,CAAC,IAAAO,kBAAU,EAACD,WAAW,CAAC,EAAE;QAC5B,OAAOD,IAAI;MACb;MAEAA,IAAI,CAAC9I,IAAI,CAAC,IAAA+D,MAAA,CAAAvD,OAAA,EAAcuI,WAAW,EAAEf,MAAI,EAAE,EAAE,CAAC,CAAC;MAE/C,OAAOc,IAAI;IACb,CAAC;IAED,IAAIA,IAAI,GAAG,EAAE;IAEbA,IAAI,GAAGtG,eAAe,CAACmC,MAAM,CAACkE,cAAc,EAAEC,IAAI,CAAC;IACnDA,IAAI,GAAG,IAAArE,KAAA,CAAAjE,OAAA,EAAYI,YAAY,CAAC,CAC7Bf,MAAM,CAAC,UAAC4I,GAAG;MAAA,OAAK,EAAEjG,eAAe,CAACyG,QAAQ,CAACR,GAAG,CAAC,IAAIhG,gBAAgB,CAACwG,QAAQ,CAACR,GAAG,CAAC,CAAC;IAAA,EAAC,CACnF9D,MAAM,CAACkE,cAAc,EAAEC,IAAI,CAAC;IAC/BA,IAAI,GAAGrG,gBAAgB,CAACkC,MAAM,CAACkE,cAAc,EAAEC,IAAI,CAAC;IAEpD,IAAI,CAAC9D,OAAO,GAAG,IAAAkE,kBAAe,EAAC;MAC7BC,IAAI,EAAE,IAAI;MACVvI,YAAY,EAAEkI;IAChB,CAAC,CAAC;IAEF,IAAI,CAACM,mBAAmB,GAAG,IAAAA,kCAAmB,EAAC;MAC7CD,IAAI,EAAE,IAAI;MACVvI,YAAY,EAAEkI;IAChB,CAAC,CAAC;IAEF,IAAI,CAACO,kBAAkB,GAAGC,4BAAmB;IAE7C,IAAIpE,SAAS,MAAAsC,MAAA,CAAM,IAAA9D,WAAG,EAAC,IAAI,EAAE,yBAAyB,EAAE,cAAc,CAAC,OAAA8D,MAAA,CAAI,IAAA9D,WAAG,EAC5E,IAAI,EACJ,uBAAuB,EACvB6F,aAAI,CAACC,EAAE,CAAC,CACV,CAAC,CAAE;IAEH,IAAI,IAAA9F,WAAG,EAAC,IAAI,EAAE,yBAAyB,CAAC,EAAE;MACxCwB,SAAS,QAAAsC,MAAA,CAAQ,IAAA9D,WAAG,EAAC,IAAI,EAAE,yBAAyB,CAAC,CAAE;IACzD;IAEA,IAAI,CAACwB,SAAS,GAAGA,SAAS;EAC5B,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEuE,SAAS,WAAAA,UAAA,EAAiB;IAAA,IAAhBC,SAAS,GAAAvJ,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAmB,SAAA,GAAAnB,SAAA,MAAG,CAAC,CAAC;IACtB,IAAI,CAAC2E,MAAM,GAAG,IAAAmD,aAAK,EAAC,CAAC,CAAC,EAAE,IAAI,CAACnD,MAAM,EAAE4E,SAAS,CAAC;EACjD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE7F,eAAe,WAAAA,gBAAC8F,KAAK,EAAE;IACrB,IAAIA,KAAK,CAACV,QAAQ,CAAC,QAAQ,CAAC,IAAIU,KAAK,CAACC,KAAK,CAAC,GAAG,CAAC,CAACxJ,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;MACjEyJ,OAAO,CAACC,IAAI,uJAAAtC,MAAA,CAC4ImC,KAAK,CACxJI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAC5BA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CACzB,CAAC;MACDF,OAAO,CAACG,IAAI,CACV,4FACF,CAAC;MAED,OAAOL,KAAK,CAACI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAACA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;IAChE;IACA;IACA;IAAA,KACK,IAAIJ,KAAK,CAACC,KAAK,CAAC,GAAG,CAAC,CAACxJ,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE;MACxCyJ,OAAO,CAACC,IAAI,0BAAAtC,MAAA,CAERmC,KAAK,CAACC,KAAK,CAAC,GAAG,CAAC,CAACxJ,MAAM,GAAG,CAAC,mDAAAoH,MAAA,CACmBmC,KAAK,CAACI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAC5E,CAAC;MACDF,OAAO,CAACG,IAAI,CACV,4FACF,CAAC;MAED,OAAOL,KAAK,CAACI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;IACnC;IAEA,OAAOJ,KAAK,CAACI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;EACrC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEE,OAAO,WAAAA,QAACC,KAAK,EAAE;IACb,OAAOC,aAAI,CAACF,OAAO,CACjB,IAAAG,YAAI,EACF,IAAI,CAACC,SAAS,CAAC;MACbC,KAAK,EAAE,IAAI;MACXzF,OAAO,EAAE,IAAI;MACbb,OAAO,EAAE;IACX,CAAC,CAAC,EACF,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,QACF,CAAC,EACD;MAACkG,KAAK,EAALA;IAAK,CACR,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEK,MAAM,WAAAA,OAACnH,OAAO,EAAW;IAAA,IAAAoH,MAAA;IAAA,SAAAC,KAAA,GAAAtK,SAAA,CAAAC,MAAA,EAAN4G,IAAI,OAAAC,KAAA,CAAAwD,KAAA,OAAAA,KAAA,WAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAJ1D,IAAI,CAAA0D,KAAA,QAAAvK,SAAA,CAAAuK,KAAA;IAAA;IACrB;IACA;IACA,IAAMf,KAAK,GACT,IAAI,CAACtG,WAAW,CAACC,UAAU,KAC1B,IAAI,CAACD,WAAW,CAACC,UAAU,CAACqH,aAAa,IAAI,IAAI,CAACtH,WAAW,CAACC,UAAU,CAACC,YAAY,CAAC;IAEzFH,OAAO,GAAG,IAAAwH,OAAA,CAAApK,OAAA,EAAc;MAACmJ,KAAK,EAALA;IAAK,CAAC,EAAEvG,OAAO,CAAC;;IAEzC;IACA;IACA;IACA;IACA,OAAO,IAAI,CAAC0B,MAAM,CAAC+F,cAAc,CAC9BC,OAAO,CAAC,CAAC,CACTnG,MAAM,CACL,UAAC8B,OAAO,EAAAsE,KAAA;MAAA,IAAGC,MAAM,GAAAD,KAAA,CAANC,MAAM;QAAE7G,EAAE,GAAA4G,KAAA,CAAF5G,EAAE;MAAA,OACnBsC,OAAO,CAACP,IAAI,CAAC,YAAM;QACjB,OACEJ,QAAA,CAAAtF,OAAA,CAAQqG,OAAO,CACb,IAAA9C,MAAA,CAAAvD,OAAA,EAAc2D,EAAE,EAAEqG,MAAI,CAACQ,MAAM,CAAC,IAAIR,MAAI,CAACxH,QAAQ,CAACgI,MAAM,CAAC,GAAG5H,OAAO,EAAAoE,MAAA,CAAKR,IAAI,CAAC,CAC7E;QACE;QAAA,CACCiE,KAAK,CAAC,UAACC,GAAG,EAAK;UACdV,MAAI,CAACW,MAAM,CAACrB,IAAI,+BAAAtC,MAAA,CAA+BwD,MAAM,eAAYE,GAAG,CAAC;QACvE,CAAC,CAAC;MAER,CAAC,CAAC;IAAA,GACJpF,QAAA,CAAAtF,OAAA,CAAQqG,OAAO,CAAC,CAClB,CAAC,CACAX,IAAI,CAAC;MAAA,OAAMJ,QAAA,CAAAtF,OAAA,CAAQuF,GAAG,CAAC,CAACyE,MAAI,CAACvG,cAAc,CAACmH,KAAK,CAAC,CAAC,EAAEZ,MAAI,CAACnG,gBAAgB,CAAC+G,KAAK,CAAC,CAAC,CAAC,CAAC;IAAA,EAAC,CACrFlF,IAAI,CAAC;MAAA,IAAAmF,kBAAA;MAAA,OAAM,CAAAA,kBAAA,GAAAb,MAAI,CAACnH,WAAW,EAACiI,UAAU,CAAArL,KAAA,CAAAoL,kBAAA,EAAIrE,IAAI,CAAC;IAAA,EAAC,CAChDd,IAAI,CACH;MAAA,IAAAqF,oBAAA;MAAA,OACEf,MAAI,CAACgB,aAAa,IAClBhB,MAAI,CAACgB,aAAa,CAACjB,MAAM,IACzB,CAAAgB,oBAAA,GAAAf,MAAI,CAACgB,aAAa,EAACjB,MAAM,CAAAtK,KAAA,CAAAsL,oBAAA,GAACnI,OAAO,EAAAoE,MAAA,CAAKR,IAAI,EAAC;IAAA,CAC/C,CAAC,CACAd,IAAI,CAAC;MAAA,OAAMsE,MAAI,CAACtC,OAAO,CAAC,eAAe,CAAC;IAAA,EAAC;EAC9C,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEuD,OAAO,WAAAA,QAAA,EAAU;IACf,IAAI,IAAI,CAACC,OAAO,EAAE;MAAA,IAAAC,aAAA;MAChB,OAAO,CAAAA,aAAA,OAAI,CAACD,OAAO,EAACE,gBAAgB,CAAA3L,KAAA,CAAA0L,aAAA,EAAAxL,SAAQ,CAAC;IAC/C;IAEA,OAAO2F,QAAA,CAAAtF,OAAA,CAAQqG,OAAO,CAAC,CAAC;EAC1B,CAAC;EAEKgF,MAAM,WAAAA,OAACzI,OAAO,EAAE;IAAA,IAAA0I,MAAA;IAAA,WAAAC,kBAAA,CAAAvL,OAAA,gBAAAwL,YAAA,CAAAxL,OAAA,CAAAyL,IAAA,UAAAC,QAAA;MAAA,IAAAC,KAAA,EAAA1F,OAAA;MAAA,OAAAuF,YAAA,CAAAxL,OAAA,CAAA4L,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAA,IACfpJ,OAAO,CAACqJ,IAAI;cAAAH,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAA,OAAAF,QAAA,CAAAI,MAAA,WACR5G,QAAA,CAAAtF,OAAA,CAAQmM,MAAM,CAAC,IAAIC,KAAK,CAAC,4BAA4B,CAAC,CAAC;UAAA;YAGhExJ,OAAO,CAACyJ,MAAM,GAAGzJ,OAAO,CAACyJ,MAAM,IAAI,CAAC,CAAC;YACrCzJ,OAAO,CAACyJ,MAAM,CAAC9E,UAAU,GAAG3E,OAAO,CAACyJ,MAAM,CAAC9E,UAAU,IAAI,CAAC,CAAC;YAC3D3E,OAAO,CAACyJ,MAAM,CAAChB,MAAM,GAAGzI,OAAO,CAACyJ,MAAM,CAAChB,MAAM,IAAI,CAAC,CAAC;YACnDzI,OAAO,CAACyJ,MAAM,CAACC,QAAQ,GAAG1J,OAAO,CAACyJ,MAAM,CAACC,QAAQ,IAAI,CAAC,CAAC;YAEvD,IAAAC,oBAAY,EACV3J,OAAO,CAACyJ,MAAM,CAAC9E,UAAU,EACzB;cACEiF,MAAM,EAAE,MAAM;cACdC,IAAI,EAAE;gBACJC,cAAc,EAAE;cAClB;YACF,CAAC,EACD,IAAA9C,YAAI,EAAChH,OAAO,EAAE,MAAM,EAAE,QAAQ,CAChC,CAAC;YAED,IAAA2J,oBAAY,EAAC3J,OAAO,CAACyJ,MAAM,CAAChB,MAAM,EAAE;cAClCmB,MAAM,EAAE,KAAK;cACb7D,IAAI,EAAE,KAAK;cACXgE,eAAe,EAAE,KAAK;cACtBF,IAAI,EAAE7J,OAAO,CAACqJ,IAAI;cAClBW,OAAO,EAAE;gBACP,YAAY,EAAE7D,aAAI,CAACC,EAAE,CAAC,CAAC;gBACvBgC,aAAa,EAAElK;cACjB;YACF,CAAC,CAAC;YAEF,IAAAyL,oBAAY,EACV3J,OAAO,CAACyJ,MAAM,CAACC,QAAQ,EACvB;cACEE,MAAM,EAAE;YACV,CAAC,EACD,IAAA5C,YAAI,EAAChH,OAAO,EAAE,MAAM,EAAE,QAAQ,CAChC,CAAC;YAEK+I,KAAK,GAAG,IAAIkB,oBAAY,CAAC,CAAC;YAE1B5G,OAAO,GAAGqF,MAAI,CAACwB,sBAAsB,CAAClK,OAAO,CAAC,CACjD8C,IAAI,CAAC,YAAM;cACV,IAAMP,CAAC,GAAGmG,MAAI,CAACyB,kBAAkB,CAACnK,OAAO,CAAC;cAE1C,IAAAoK,sBAAc,EAAC,UAAU,EAAE7H,CAAC,EAAEwG,KAAK,CAAC;cAEpC,OAAOxG,CAAC;YACV,CAAC,CAAC,CACDO,IAAI,CAAC;cAAA,SAAAuH,KAAA,GAAAtN,SAAA,CAAAC,MAAA,EAAIkH,IAAI,OAAAL,KAAA,CAAAwG,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;gBAAJpG,IAAI,CAAAoG,KAAA,IAAAvN,SAAA,CAAAuN,KAAA;cAAA;cAAA,OAAK5B,MAAI,CAAC6B,oBAAoB,CAAA1N,KAAA,CAAzB6L,MAAI,GAAsB1I,OAAO,EAAAoE,MAAA,CAAKF,IAAI,EAAC;YAAA,EAAC,CAC9DpB,IAAI,CAAC,UAAC0H,GAAG;cAAA,OAAA1N,aAAA,CAAAA,aAAA,KAAU0N,GAAG,CAACX,IAAI,GAAKW,GAAG,CAACR,OAAO;YAAA,CAAE,CAAC;YAEjD,IAAAS,mBAAW,EAAC1B,KAAK,EAAE1F,OAAO,CAAC;YAAC,OAAA6F,QAAA,CAAAI,MAAA,WAErBjG,OAAO;UAAA;UAAA;YAAA,OAAA6F,QAAA,CAAAwB,IAAA;QAAA;MAAA,GAAA5B,OAAA;IAAA;EAChB,CAAC;EAEDoB,sBAAsB,EAAE,SAASA,sBAAsBA,CAAClK,OAAO,EAAE;IAAA,IAAA2K,MAAA;IAC/D,IAAI,CAAC5C,MAAM,CAAC6C,KAAK,CAAC,mCAAmC,CAAC;IAEtD,OAAO,IAAI,CAAChJ,OAAO,CAAC5B,OAAO,CAACyJ,MAAM,CAAC9E,UAAU,CAAC,CAC3C7B,IAAI,CAAC,YAAa;MAAA,SAAA+H,KAAA,GAAA9N,SAAA,CAAAC,MAAA,EAATkH,IAAI,OAAAL,KAAA,CAAAgH,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJ5G,IAAI,CAAA4G,KAAA,IAAA/N,SAAA,CAAA+N,KAAA;MAAA;MACZ,IAAMC,0BAA0B,GAC9B,CAAC7G,IAAI,CAAC,CAAC,CAAC,CAAC2F,IAAI,CAACmB,mBAAmB,IAAI1L,mBAAmB,IAAI,IAAI,GAAG,IAAI;MACzE,IAAM2L,sBAAsB,GAAGjL,OAAO,CAACqJ,IAAI,CAAC6B,UAAU;MAEtD,IAAIH,0BAA0B,IAAIA,0BAA0B,GAAGE,sBAAsB,EAAE;QACrF,OAAON,MAAI,CAACQ,mBAAmB,CAAAtO,KAAA,CAAxB8N,MAAI,GAAqBM,sBAAsB,EAAA7G,MAAA,CAAKF,IAAI,EAAC;MAClE;MAEA,OAAOyG,MAAI,CAACS,mBAAmB,CAAAvO,KAAA,CAAxB8N,MAAI,GAAqB3K,OAAO,EAAAoE,MAAA,CAAKF,IAAI,EAAC;IACnD,CAAC,CAAC,CACDpB,IAAI,CAAC,UAAC0H,GAAG,EAAK;MACbG,MAAI,CAAC5C,MAAM,CAAC6C,KAAK,CAAC,kCAAkC,CAAC;MAErD,OAAOJ,GAAG;IACZ,CAAC,CAAC;EACN,CAAC;EAEDW,mBAAmB,WAAAA,oBAACF,sBAAsB,EAAEI,QAAQ,EAAE;IAAA,IAAAC,MAAA;IACpD,IAAI,CAACvD,MAAM,CAAC6C,KAAK,CAAC,gCAAgC,CAAC;IAEnD,OAAO,IAAI,CAAChJ,OAAO,CAAC;MAClBgI,MAAM,EAAE,QAAQ;MAChB2B,GAAG,EAAEF,QAAQ,CAACxB,IAAI,CAAC0B,GAAG;MACtBvB,OAAO,EAAEqB,QAAQ,CAACrL,OAAO,CAACgK;IAC5B,CAAC,CAAC,CAAClH,IAAI,CAAC,YAAM;MACZwI,MAAI,CAACvD,MAAM,CAAC6C,KAAK,CAAC,yCAAyC,CAAC;MAE5D,IAAMY,iBAAiB,GAAG;QACxBP,sBAAsB,EAAtBA,sBAAsB;QACtBQ,uBAAuB,EAAEJ,QAAQ,CAACxB,IAAI,CAACmB,mBAAmB,IAAI1L,mBAAmB;QACjFoM,OAAO,EAAE;MACX,CAAC;MAED,OAAOhJ,QAAA,CAAAtF,OAAA,CAAQmM,MAAM,CAAC,IAAIC,KAAK,IAAApF,MAAA,CAAI,IAAAuH,UAAA,CAAAvO,OAAA,EAAeoO,iBAAiB,CAAC,CAAE,CAAC,CAAC;IAC1E,CAAC,CAAC;EACJ,CAAC;EAEDJ,mBAAmB,WAAAA,oBAACpL,OAAO,EAAEwK,GAAG,EAAE;IAChC,IAAM/I,OAAO,GAAG+I,GAAG,CAACX,IAAI;IAExB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAACtI,MAAM,CAAC,UAACqK,IAAI,EAAEvG,GAAG,EAAK;MAC3CuG,IAAI,CAACvG,GAAG,CAAC,GAAG,IAAAhE,KAAA,CAAAjE,OAAA,EAAYwO,IAAI,CAACvG,GAAG,CAAC,CAAC,CAAC9D,MAAM,CAAC,UAACsK,YAAY,EAAEC,QAAQ,EAAK;QACpE,IAAIA,QAAQ,CAACC,UAAU,CAAC,GAAG,CAAC,EAAE;UAC5BF,YAAY,CAACC,QAAQ,CAACE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAGH,YAAY,CAACC,QAAQ,CAAC,CAACrK,OAAO,CAAC;UAClE,IAAAwK,eAAA,CAAA7O,OAAA,EAAuByO,YAAY,EAAEC,QAAQ,CAAC;QAChD;QAEA,OAAOD,YAAY;MACrB,CAAC,EAAED,IAAI,CAACvG,GAAG,CAAC,CAAC;MAEb,OAAOuG,IAAI;IACb,CAAC,EAAE5L,OAAO,CAACyJ,MAAM,CAAC;EACpB,CAAC;EAGDU,kBAAkB,WAAAA,mBAACnK,OAAO,EAAE;IAAA,IAAAkM,MAAA;IAC1B,IAAI,CAACnE,MAAM,CAAC6C,KAAK,CAAC,wBAAwB,CAAC;IAE3C,IAAMvH,OAAO,GAAG,IAAI,CAACzB,OAAO,CAAC5B,OAAO,CAACyJ,MAAM,CAAChB,MAAM,CAAC,CAAC3F,IAAI,CAAC,UAAC0H,GAAG,EAAK;MAChE0B,MAAI,CAACnE,MAAM,CAAC6C,KAAK,CAAC,uBAAuB,CAAC;MAE1C,OAAOJ,GAAG;IACZ,CAAC,CAAC;IAEF,IAAAC,mBAAW,EAACzK,OAAO,CAACyJ,MAAM,CAAChB,MAAM,CAACA,MAAM,EAAEpF,OAAO,CAAC;;IAElD;IACA,IAAIvF,OAAO,CAACC,GAAG,CAACoO,QAAQ,KAAK,MAAM,EAAE;MACnC9I,OAAO,CAAC+I,EAAE,CAAC,UAAU,EAAE,UAACC,KAAK,EAAK;QAChCH,MAAI,CAACnE,MAAM,CAACnB,IAAI,CAAC,iBAAiB,EAAEyF,KAAK,CAACjL,MAAM,EAAEiL,KAAK,CAACC,KAAK,CAAC;MAChE,CAAC,CAAC;IACJ;IAEA,OAAOjJ,OAAO;EAChB,CAAC;EAEDkH,oBAAoB,EAAE,SAASA,oBAAoBA,CAACvK,OAAO,EAAE;IAAA,IAAAuM,OAAA;IAC3D,IAAI,CAACxE,MAAM,CAAC6C,KAAK,CAAC,mCAAmC,CAAC;IAEtD,OAAO,IAAI,CAAChJ,OAAO,CAAC5B,OAAO,CAACyJ,MAAM,CAACC,QAAQ,CAAC,CAAC5G,IAAI,CAAC,UAAC0H,GAAG,EAAK;MACzD+B,OAAI,CAACxE,MAAM,CAAC6C,KAAK,CAAC,kCAAkC,CAAC;MAErD,OAAOJ,GAAG;IACZ,CAAC,CAAC;EACJ;AACF,CAAC,OAAAgC,0BAAA,CAAApP,OAAA,EAAAnB,IAAA,yBA/BEwQ,aAAK,OAAAC,yBAAA,CAAAtP,OAAA,EAAAnB,IAAA,yBAAAA,IAAA,IAAAA,IAAA,CA+BP,CAAC;AAEFsD,SAAS,CAACG,OAAO,UAAkB;AAEnC,IAAAiN,qCAA6B,EAAC9M,0BAAiB,EAAE6B,eAAM,EAAElE,YAAY,CAAC;AACtE,IAAAoP,6BAAqB,EAACrN,SAAS,EAAEmC,eAAM,EAAElE,YAAY,CAAC;AAAC,IAAAqP,QAAA,GAAAC,OAAA,CAAA1P,OAAA,GAExCmC,SAAS;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASwN,cAAcA,CAACvL,IAAI,EAAE1B,WAAW,EAAgB;EAAA,IAAdE,OAAO,GAAAjD,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAmB,SAAA,GAAAnB,SAAA,MAAG,CAAC,CAAC;EAC5DwC,SAAS,CAACwN,cAAc,CAACvL,IAAI,EAAE1B,WAAW,EAAEE,OAAO,CAAC;AACtD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASgN,sBAAsBA,CAACxL,IAAI,EAAE1B,WAAW,EAAEE,OAAO,EAAE;EACjEH,0BAAiB,CAACkN,cAAc,CAACvL,IAAI,EAAE1B,WAAW,EAAEE,OAAO,CAAC;AAC9D"}
package/package.json CHANGED
@@ -35,12 +35,12 @@
35
35
  "@webex/eslint-config-legacy": "0.0.0",
36
36
  "@webex/jest-config-legacy": "0.0.0",
37
37
  "@webex/legacy-tools": "0.0.0",
38
- "@webex/test-helper-chai": "3.3.1-next.9",
39
- "@webex/test-helper-make-local-url": "3.3.1-next.9",
40
- "@webex/test-helper-mocha": "3.3.1-next.9",
41
- "@webex/test-helper-mock-webex": "3.3.1-next.9",
42
- "@webex/test-helper-refresh-callback": "3.3.1-next.9",
43
- "@webex/test-helper-test-users": "3.3.1-next.9",
38
+ "@webex/test-helper-chai": "3.4.0",
39
+ "@webex/test-helper-make-local-url": "3.4.0",
40
+ "@webex/test-helper-mocha": "3.4.0",
41
+ "@webex/test-helper-mock-webex": "3.4.0",
42
+ "@webex/test-helper-refresh-callback": "3.4.0",
43
+ "@webex/test-helper-test-users": "3.4.0",
44
44
  "chai": "^4.3.4",
45
45
  "chai-as-promised": "^7.1.1",
46
46
  "eslint": "^8.24.0",
@@ -48,12 +48,12 @@
48
48
  "sinon": "^9.2.4"
49
49
  },
50
50
  "dependencies": {
51
- "@webex/common": "3.3.1-next.9",
52
- "@webex/common-timers": "3.3.1-next.9",
53
- "@webex/http-core": "3.3.1-next.9",
54
- "@webex/internal-plugin-device": "3.3.1-next.9",
55
- "@webex/plugin-logger": "3.3.1-next.9",
56
- "@webex/storage-adapter-spec": "3.3.1-next.9",
51
+ "@webex/common": "3.4.0",
52
+ "@webex/common-timers": "3.4.0",
53
+ "@webex/http-core": "3.4.0",
54
+ "@webex/internal-plugin-device": "3.4.0",
55
+ "@webex/plugin-logger": "3.4.0",
56
+ "@webex/storage-adapter-spec": "3.4.0",
57
57
  "ampersand-collection": "^2.0.2",
58
58
  "ampersand-events": "^2.0.2",
59
59
  "ampersand-state": "^5.0.3",
@@ -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.3.1-next.9"
76
+ "version": "3.4.0"
77
77
  }
package/src/index.js CHANGED
@@ -25,6 +25,7 @@ export {
25
25
  Services,
26
26
  ServiceHost,
27
27
  ServiceUrl,
28
+ HostMapInterceptor,
28
29
  } from './lib/services';
29
30
 
30
31
  export {
@@ -18,6 +18,7 @@ registerInternalPlugin('services', Services, {
18
18
  export {constants};
19
19
  export {default as ServiceInterceptor} from './interceptors/service';
20
20
  export {default as ServerErrorInterceptor} from './interceptors/server-error';
21
+ export {default as HostMapInterceptor} from './interceptors/hostmap';
21
22
  export {default as Services} from './services';
22
23
  export {default as ServiceCatalog} from './service-catalog';
23
24
  export {default as ServiceRegistry} from './service-registry';
@@ -0,0 +1,36 @@
1
+ /*!
2
+ * Copyright (c) 2015-2024 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {Interceptor} from '@webex/http-core';
6
+
7
+ /**
8
+ * This interceptor replaces the host in the request uri with the host from the hostmap
9
+ * It will attempt to do this for every request, but not all URIs will be in the hostmap
10
+ * URIs with hosts that are not in the hostmap will be left unchanged
11
+ */
12
+ export default class HostMapInterceptor extends Interceptor {
13
+ /**
14
+ * @returns {HostMapInterceptor}
15
+ */
16
+ static create() {
17
+ return new HostMapInterceptor({webex: this});
18
+ }
19
+
20
+ /**
21
+ * @see Interceptor#onRequest
22
+ * @param {Object} options
23
+ * @returns {Object}
24
+ */
25
+ onRequest(options) {
26
+ if (options.uri) {
27
+ try {
28
+ options.uri = this.webex.internal.services.replaceHostFromHostmap(options.uri);
29
+ } catch (error) {
30
+ /* empty */
31
+ }
32
+ }
33
+
34
+ return options;
35
+ }
36
+ }
@@ -675,6 +675,33 @@ const Services = WebexPlugin.extend({
675
675
  });
676
676
  },
677
677
 
678
+ /**
679
+ * Looks up the hostname in the host catalog
680
+ * and replaces it with the first host if it finds it
681
+ * @param {string} uri
682
+ * @returns {string} uri with the host replaced
683
+ */
684
+ replaceHostFromHostmap(uri) {
685
+ const url = new URL(uri);
686
+ const hostCatalog = this._hostCatalog;
687
+
688
+ if (!hostCatalog) {
689
+ return uri;
690
+ }
691
+
692
+ const host = hostCatalog[url.host];
693
+
694
+ if (host && host[0]) {
695
+ const newHost = host[0].host;
696
+
697
+ url.host = newHost;
698
+
699
+ return url.toString();
700
+ }
701
+
702
+ return uri;
703
+ },
704
+
678
705
  /**
679
706
  * @private
680
707
  * Organize a received hostmap from a service
package/src/webex-core.js CHANGED
@@ -31,6 +31,7 @@ import WebexUserAgentInterceptor from './interceptors/webex-user-agent';
31
31
  import RateLimitInterceptor from './interceptors/rate-limit';
32
32
  import EmbargoInterceptor from './interceptors/embargo';
33
33
  import DefaultOptionsInterceptor from './interceptors/default-options';
34
+ import HostMapInterceptor from './lib/services/interceptors/hostmap';
34
35
  import config from './config';
35
36
  import {makeWebexStore} from './lib/storage';
36
37
  import mixinWebexCorePlugins from './lib/webex-core-plugin-mixin';
@@ -71,6 +72,7 @@ const interceptors = {
71
72
  NetworkTimingInterceptor: NetworkTimingInterceptor.create,
72
73
  EmbargoInterceptor: EmbargoInterceptor.create,
73
74
  DefaultOptionsInterceptor: DefaultOptionsInterceptor.create,
75
+ HostMapInterceptor: HostMapInterceptor.create,
74
76
  };
75
77
 
76
78
  const preInterceptors = [
@@ -0,0 +1,79 @@
1
+ /*!
2
+ * Copyright (c) 2015-2024 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ /* eslint-disable camelcase */
6
+
7
+ import sinon from 'sinon';
8
+ import {assert} from '@webex/test-helper-chai';
9
+ import MockWebex from '@webex/test-helper-mock-webex';
10
+ import {HostMapInterceptor, config, Credentials} from '@webex/webex-core';
11
+ import {cloneDeep} from 'lodash';
12
+
13
+ describe('webex-core', () => {
14
+ describe('Interceptors', () => {
15
+ describe('HostMapInterceptor', () => {
16
+ let interceptor, webex;
17
+
18
+ beforeEach(() => {
19
+ webex = new MockWebex({
20
+ children: {
21
+ credentials: Credentials,
22
+ },
23
+ config: cloneDeep(config),
24
+ request: sinon.spy(),
25
+ });
26
+
27
+ webex.internal.services = {
28
+ replaceHostFromHostmap: sinon.stub().returns('http://replaceduri.com'),
29
+ }
30
+
31
+ interceptor = Reflect.apply(HostMapInterceptor.create, webex, []);
32
+ });
33
+
34
+ describe('#onRequest', () => {
35
+ it('calls replaceHostFromHostmap if options.uri is defined', () => {
36
+ const options = {
37
+ uri: 'http://example.com',
38
+ };
39
+
40
+ interceptor.onRequest(options);
41
+
42
+ sinon.assert.calledWith(
43
+ webex.internal.services.replaceHostFromHostmap,
44
+ 'http://example.com'
45
+ );
46
+
47
+ assert.equal(options.uri, 'http://replaceduri.com');
48
+ });
49
+
50
+ it('does not call replaceHostFromHostmap if options.uri is not defined', () => {
51
+ const options = {};
52
+
53
+ interceptor.onRequest(options);
54
+
55
+ sinon.assert.notCalled(webex.internal.services.replaceHostFromHostmap);
56
+
57
+ assert.isUndefined(options.uri);
58
+ });
59
+
60
+ it('does not modify options.uri if replaceHostFromHostmap throws an error', () => {
61
+ const options = {
62
+ uri: 'http://example.com',
63
+ };
64
+
65
+ webex.internal.services.replaceHostFromHostmap.throws(new Error('replaceHostFromHostmap error'));
66
+
67
+ interceptor.onRequest(options);
68
+
69
+ sinon.assert.calledWith(
70
+ webex.internal.services.replaceHostFromHostmap,
71
+ 'http://example.com'
72
+ );
73
+
74
+ assert.equal(options.uri, 'http://example.com');
75
+ });
76
+ });
77
+ });
78
+ });
79
+ });
@@ -290,6 +290,61 @@ describe('webex-core', () => {
290
290
  });
291
291
  });
292
292
 
293
+ describe('replaceHostFromHostmap', () => {
294
+ it('returns the same uri if the hostmap is not set', () => {
295
+ services._hostCatalog = null;
296
+
297
+ const uri = 'http://example.com';
298
+
299
+ assert.equal(services.replaceHostFromHostmap(uri), uri);
300
+ });
301
+
302
+ it('returns the same uri if the hostmap does not contain the host', () => {
303
+ services._hostCatalog = {
304
+ 'not-example.com': [
305
+ {
306
+ host: 'example-1.com',
307
+ ttl: -1,
308
+ priority: 5,
309
+ id: '0:0:0:example',
310
+ },
311
+ ],
312
+ };
313
+
314
+ const uri = 'http://example.com';
315
+
316
+ assert.equal(services.replaceHostFromHostmap(uri), uri);
317
+ });
318
+
319
+ it('returns the original uri if the hostmap has no hosts for the host', () => {
320
+
321
+ services._hostCatalog = {
322
+ 'example.com': [],
323
+ };
324
+
325
+ const uri = 'http://example.com';
326
+
327
+ assert.equal(services.replaceHostFromHostmap(uri), uri);
328
+ });
329
+
330
+ it('returns the replaces the host in the uri with the host from the hostmap', () => {
331
+ services._hostCatalog = {
332
+ 'example.com': [
333
+ {
334
+ host: 'example-1.com',
335
+ ttl: -1,
336
+ priority: 5,
337
+ id: '0:0:0:example',
338
+ },
339
+ ],
340
+ };
341
+
342
+ const uri = 'http://example.com/somepath';
343
+
344
+ assert.equal(services.replaceHostFromHostmap(uri), 'http://example-1.com/somepath');
345
+ });
346
+ });
347
+
293
348
  describe('#_formatReceivedHostmap()', () => {
294
349
  let serviceHostmap;
295
350
  let formattedHM;