@webex/webex-core 3.11.0-webex-services-ready.1 → 3.12.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/interceptors/redirect.js +1 -1
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/lib/batcher.js +1 -1
- package/dist/lib/credentials/credentials.js +1 -1
- package/dist/lib/credentials/token.js +1 -1
- package/dist/lib/services/services.js +28 -39
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/services-v2/services-v2.js +23 -35
- package/dist/lib/services-v2/services-v2.js.map +1 -1
- package/dist/plugins/logger.js +1 -1
- package/dist/webex-core.js +2 -2
- package/dist/webex-core.js.map +1 -1
- package/package.json +13 -13
- package/src/interceptors/redirect.js +4 -1
- package/src/lib/services/services.js +32 -48
- package/src/lib/services-v2/services-v2.ts +27 -44
- package/test/integration/spec/services/service-catalog.js +7 -6
- package/test/integration/spec/services/services.js +6 -17
- package/test/integration/spec/services-v2/services-v2.js +6 -17
- package/test/unit/spec/services/services.js +173 -342
- package/test/unit/spec/services-v2/services-v2.ts +114 -236
- package/test/unit/spec/webex-core.js +0 -2
- package/test/unit/spec/webex-internal-core.js +0 -2
package/dist/webex-core.js.map
CHANGED
|
@@ -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","_proxy","_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","ProxyInterceptor","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","interceptorsObj","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","file","reject","Error","phases","finalize","defaultsDeep","method","body","uploadProtocol","withCredentials","headers","shunt","EventEmitter","_uploadPhaseInitialize","_uploadPhaseUpload","transferEvents","_len5","_key5","_uploadPhaseFinalize","res","proxyEvents","_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","_this0","_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 ProxyInterceptor from './interceptors/proxy';\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/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 ProxyInterceptor: ProxyInterceptor.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 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 interceptorsObj = this.config.interceptors || interceptors;\n const interceptor = interceptorsObj[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 if (this.config.interceptors) {\n Object.keys(this.config.interceptors).reduce(addInterceptor, ints);\n } else {\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\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 /**\n * Uploads a file provided in `file` property\n *\n * @param {Object} options\n * @returns {Promise}\n */\n upload(options) {\n if (!options || !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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","require","_util","_interopRequireDefault","_common","_httpCore","_lodash","_ampersandState","_uuid","_auth","_networkTiming","_payloadTransformer","_redirect","_requestEvent","_requestLogger","_requestTiming","_responseLogger","_webexHttpError","_userAgent","_proxy","_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","ProxyInterceptor","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","interceptorsObj","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","file","reject","Error","phases","finalize","defaultsDeep","method","body","uploadProtocol","withCredentials","headers","shunt","EventEmitter","_uploadPhaseInitialize","_uploadPhaseUpload","transferEvents","_len5","_key5","_uploadPhaseFinalize","res","proxyEvents","_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","_this0","_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 ProxyInterceptor from './interceptors/proxy';\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/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 ProxyInterceptor: ProxyInterceptor.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 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 interceptorsObj = this.config.interceptors || interceptors;\n const interceptor = interceptorsObj[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 if (this.config.interceptors) {\n Object.keys(this.config.interceptors).reduce(addInterceptor, ints);\n } else {\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\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 /**\n * Uploads a file provided in `file` property\n *\n * @param {Object} options\n * @returns {Promise}\n */\n upload(options) {\n if (!options || !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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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -33,16 +33,16 @@
|
|
|
33
33
|
"@sinonjs/fake-timers": "^6.0.1",
|
|
34
34
|
"@webex/babel-config-legacy": "0.0.0",
|
|
35
35
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
36
|
-
"@webex/internal-plugin-device": "3.
|
|
36
|
+
"@webex/internal-plugin-device": "3.12.0",
|
|
37
37
|
"@webex/jest-config-legacy": "0.0.0",
|
|
38
38
|
"@webex/legacy-tools": "0.0.0",
|
|
39
|
-
"@webex/plugin-logger": "3.
|
|
40
|
-
"@webex/test-helper-chai": "3.
|
|
41
|
-
"@webex/test-helper-make-local-url": "3.
|
|
42
|
-
"@webex/test-helper-mocha": "3.
|
|
43
|
-
"@webex/test-helper-mock-webex": "3.
|
|
44
|
-
"@webex/test-helper-refresh-callback": "3.
|
|
45
|
-
"@webex/test-helper-test-users": "3.
|
|
39
|
+
"@webex/plugin-logger": "3.12.0",
|
|
40
|
+
"@webex/test-helper-chai": "3.12.0",
|
|
41
|
+
"@webex/test-helper-make-local-url": "3.12.0",
|
|
42
|
+
"@webex/test-helper-mocha": "3.12.0",
|
|
43
|
+
"@webex/test-helper-mock-webex": "3.12.0",
|
|
44
|
+
"@webex/test-helper-refresh-callback": "3.12.0",
|
|
45
|
+
"@webex/test-helper-test-users": "3.12.0",
|
|
46
46
|
"chai": "^4.3.4",
|
|
47
47
|
"chai-as-promised": "^7.1.1",
|
|
48
48
|
"eslint": "^8.24.0",
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"sinon": "^9.2.4"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@webex/common": "3.
|
|
54
|
-
"@webex/common-timers": "3.
|
|
55
|
-
"@webex/http-core": "3.
|
|
56
|
-
"@webex/storage-adapter-spec": "3.
|
|
53
|
+
"@webex/common": "3.12.0",
|
|
54
|
+
"@webex/common-timers": "3.12.0",
|
|
55
|
+
"@webex/http-core": "3.12.0",
|
|
56
|
+
"@webex/storage-adapter-spec": "3.12.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.
|
|
76
|
+
"version": "3.12.0"
|
|
77
77
|
}
|
|
@@ -116,7 +116,10 @@ export default class RedirectInterceptor extends Interceptor {
|
|
|
116
116
|
options.uri = newUrl[0]; // params are already present in the qs
|
|
117
117
|
} else {
|
|
118
118
|
// for GET requests
|
|
119
|
-
options.uri = options.uri.replace(
|
|
119
|
+
options.uri = options.uri.replace(
|
|
120
|
+
/(https:\/\/)[^/]+/,
|
|
121
|
+
`$1${response.body.data.siteFullUrl}`
|
|
122
|
+
);
|
|
120
123
|
}
|
|
121
124
|
|
|
122
125
|
if (options.resource === 'preJoin' && options.service === 'webex-appapi-service') {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/* eslint-disable no-console */
|
|
2
1
|
import sha256 from 'crypto-js/sha256';
|
|
3
2
|
|
|
4
3
|
import {union, forEach} from 'lodash';
|
|
@@ -58,20 +57,6 @@ const Services = WebexPlugin.extend({
|
|
|
58
57
|
initFailed: ['boolean', false, false],
|
|
59
58
|
},
|
|
60
59
|
|
|
61
|
-
session: {
|
|
62
|
-
/**
|
|
63
|
-
* Becomes `true` once service catalog initialization has completed.
|
|
64
|
-
* Blocks `webex.ready` until services are initialized.
|
|
65
|
-
* @instance
|
|
66
|
-
* @memberof Services
|
|
67
|
-
* @type {boolean}
|
|
68
|
-
*/
|
|
69
|
-
ready: {
|
|
70
|
-
default: false,
|
|
71
|
-
type: 'boolean',
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
|
|
75
60
|
_catalogs: new WeakMap(),
|
|
76
61
|
|
|
77
62
|
_serviceUrls: null,
|
|
@@ -258,6 +243,28 @@ const Services = WebexPlugin.extend({
|
|
|
258
243
|
|
|
259
244
|
return !!hostCatalog[host]?.length;
|
|
260
245
|
},
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Checks if the current environment is an integration (INT) environment
|
|
249
|
+
* by examining the u2c discovery URL from webex config.
|
|
250
|
+
* INT environments use discovery URLs containing 'intb' (e.g., u2c-intb.ciscospark.com).
|
|
251
|
+
* @returns {boolean} True if INT environment, false otherwise
|
|
252
|
+
*/
|
|
253
|
+
isIntegrationEnvironment() {
|
|
254
|
+
try {
|
|
255
|
+
const u2cUrl = this.webex?.config?.services?.discovery?.u2c || '';
|
|
256
|
+
const isInt = u2cUrl.includes('intb');
|
|
257
|
+
|
|
258
|
+
this.logger.info(`services: isIntegrationEnvironment: ${isInt}`);
|
|
259
|
+
|
|
260
|
+
return isInt;
|
|
261
|
+
} catch (error) {
|
|
262
|
+
this.logger.error('services: failed to determine integration environment', error);
|
|
263
|
+
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
},
|
|
267
|
+
|
|
261
268
|
/**
|
|
262
269
|
* Merge provided active cluster mappings into current state.
|
|
263
270
|
* @param {Record<string,string>} activeServices
|
|
@@ -1386,10 +1393,11 @@ const Services = WebexPlugin.extend({
|
|
|
1386
1393
|
this.initConfig();
|
|
1387
1394
|
});
|
|
1388
1395
|
|
|
1389
|
-
//
|
|
1390
|
-
//
|
|
1391
|
-
//
|
|
1392
|
-
|
|
1396
|
+
// wait for webex instance to be ready before attempting
|
|
1397
|
+
// to update the service catalogs
|
|
1398
|
+
// this can cause a race condition because credentials may
|
|
1399
|
+
// not be valid when services is initialized
|
|
1400
|
+
this.listenToOnce(this.webex, 'ready', async () => {
|
|
1393
1401
|
const cachedCatalog = await this._loadCatalogFromCache();
|
|
1394
1402
|
if (cachedCatalog) {
|
|
1395
1403
|
catalog.isReady = true;
|
|
@@ -1408,39 +1416,15 @@ const Services = WebexPlugin.extend({
|
|
|
1408
1416
|
this.logger.error(
|
|
1409
1417
|
`services: failed to init initial services when credentials available, ${error?.message}`
|
|
1410
1418
|
);
|
|
1411
|
-
})
|
|
1412
|
-
.finally(() => {
|
|
1413
|
-
this.ready = true;
|
|
1414
|
-
this.trigger('services:initialized');
|
|
1415
1419
|
});
|
|
1416
1420
|
} else {
|
|
1417
1421
|
const {email} = this.webex.config;
|
|
1418
1422
|
|
|
1419
|
-
this.collectPreauthCatalog(email ? {email} : undefined)
|
|
1420
|
-
.
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
);
|
|
1425
|
-
})
|
|
1426
|
-
.finally(() => {
|
|
1427
|
-
this.ready = true;
|
|
1428
|
-
this.trigger('services:initialized');
|
|
1429
|
-
});
|
|
1430
|
-
// Listen for when credentials become available to fetch the full catalog.
|
|
1431
|
-
// This handles fresh login where 'loaded' fires before OAuth completes.
|
|
1432
|
-
this.listenToOnce(this.webex, 'change:canAuthorize', () => {
|
|
1433
|
-
if (this.webex.canAuthorize && !catalog.status.postauth.ready) {
|
|
1434
|
-
this.initServiceCatalogs()
|
|
1435
|
-
.then(() => {
|
|
1436
|
-
catalog.isReady = true;
|
|
1437
|
-
})
|
|
1438
|
-
.catch((error) => {
|
|
1439
|
-
this.logger.error(
|
|
1440
|
-
`services: failed to init service catalogs after auth, ${error?.message}`
|
|
1441
|
-
);
|
|
1442
|
-
});
|
|
1443
|
-
}
|
|
1423
|
+
this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {
|
|
1424
|
+
this.initFailed = true;
|
|
1425
|
+
this.logger.error(
|
|
1426
|
+
`services: failed to init initial services when no credentials available, ${error?.message}`
|
|
1427
|
+
);
|
|
1444
1428
|
});
|
|
1445
1429
|
}
|
|
1446
1430
|
});
|
|
@@ -44,20 +44,6 @@ const Services = WebexPlugin.extend({
|
|
|
44
44
|
initFailed: ['boolean', false, false],
|
|
45
45
|
},
|
|
46
46
|
|
|
47
|
-
session: {
|
|
48
|
-
/**
|
|
49
|
-
* Becomes `true` once services initialization has completed.
|
|
50
|
-
* This blocks `webex.ready` until services are initialized.
|
|
51
|
-
* @instance
|
|
52
|
-
* @memberof Services
|
|
53
|
-
* @type {boolean}
|
|
54
|
-
*/
|
|
55
|
-
ready: {
|
|
56
|
-
default: false,
|
|
57
|
-
type: 'boolean',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
|
|
61
47
|
_catalogs: new WeakMap(),
|
|
62
48
|
|
|
63
49
|
_activeServices: {},
|
|
@@ -212,6 +198,27 @@ const Services = WebexPlugin.extend({
|
|
|
212
198
|
});
|
|
213
199
|
});
|
|
214
200
|
},
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Checks if the current environment is an integration (INT) environment
|
|
204
|
+
* by examining the u2c discovery URL from webex config.
|
|
205
|
+
* INT environments use discovery URLs containing 'intb' (e.g., u2c-intb.ciscospark.com).
|
|
206
|
+
* @returns {boolean} True if INT environment, false otherwise
|
|
207
|
+
*/
|
|
208
|
+
isIntegrationEnvironment(): boolean {
|
|
209
|
+
try {
|
|
210
|
+
const u2cUrl = this.webex?.config?.services?.discovery?.u2c || '';
|
|
211
|
+
const isInt = u2cUrl.includes('intb');
|
|
212
|
+
|
|
213
|
+
this.logger.info(`services: isIntegrationEnvironment: ${isInt}`);
|
|
214
|
+
|
|
215
|
+
return isInt;
|
|
216
|
+
} catch (error) {
|
|
217
|
+
this.logger.error('services: failed to determine integration environment', error);
|
|
218
|
+
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
},
|
|
215
222
|
/**
|
|
216
223
|
* saves all the services from the pre and post catalog service
|
|
217
224
|
* @param {ActiveServices} activeServices
|
|
@@ -1348,7 +1355,7 @@ const Services = WebexPlugin.extend({
|
|
|
1348
1355
|
|
|
1349
1356
|
// wait for webex instance to be ready before attempting
|
|
1350
1357
|
// to update the service catalogs
|
|
1351
|
-
this.listenToOnce(this.webex, '
|
|
1358
|
+
this.listenToOnce(this.webex, 'ready', async () => {
|
|
1352
1359
|
const warmed = await this._loadCatalogFromCache();
|
|
1353
1360
|
if (warmed) {
|
|
1354
1361
|
catalog.isReady = true;
|
|
@@ -1367,39 +1374,15 @@ const Services = WebexPlugin.extend({
|
|
|
1367
1374
|
this.logger.error(
|
|
1368
1375
|
`services: failed to init initial services when credentials available, ${error?.message}`
|
|
1369
1376
|
);
|
|
1370
|
-
})
|
|
1371
|
-
.finally(() => {
|
|
1372
|
-
this.ready = true;
|
|
1373
|
-
this.trigger('services:initialized');
|
|
1374
1377
|
});
|
|
1375
1378
|
} else {
|
|
1376
1379
|
const {email} = this.webex.config;
|
|
1377
1380
|
|
|
1378
|
-
this.collectPreauthCatalog(email ? {email} : undefined)
|
|
1379
|
-
.
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
);
|
|
1384
|
-
})
|
|
1385
|
-
.finally(() => {
|
|
1386
|
-
this.ready = true;
|
|
1387
|
-
this.trigger('services:initialized');
|
|
1388
|
-
});
|
|
1389
|
-
// Listen for when credentials become available to fetch the full catalog.
|
|
1390
|
-
// This handles fresh login where 'loaded' fires before OAuth completes.
|
|
1391
|
-
this.listenToOnce(this.webex, 'change:canAuthorize', () => {
|
|
1392
|
-
if (this.webex.canAuthorize && !catalog.status.postauth.ready) {
|
|
1393
|
-
this.initServiceCatalogs()
|
|
1394
|
-
.then(() => {
|
|
1395
|
-
catalog.isReady = true;
|
|
1396
|
-
})
|
|
1397
|
-
.catch((error) => {
|
|
1398
|
-
this.logger.error(
|
|
1399
|
-
`services: failed to init service catalogs after auth, ${error?.message}`
|
|
1400
|
-
);
|
|
1401
|
-
});
|
|
1402
|
-
}
|
|
1381
|
+
this.collectPreauthCatalog(email ? {email} : undefined).catch((error) => {
|
|
1382
|
+
this.initFailed = true;
|
|
1383
|
+
this.logger.error(
|
|
1384
|
+
`services: failed to init initial services when no credentials available, ${error?.message}`
|
|
1385
|
+
);
|
|
1403
1386
|
});
|
|
1404
1387
|
}
|
|
1405
1388
|
});
|
|
@@ -23,12 +23,13 @@ describe('webex-core', () => {
|
|
|
23
23
|
.then(
|
|
24
24
|
([user]) =>
|
|
25
25
|
new Promise((resolve) => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
setTimeout(() => {
|
|
27
|
+
webexUser = user;
|
|
28
|
+
webex = new WebexCore({credentials: user.token});
|
|
29
|
+
services = webex.internal.services;
|
|
30
|
+
catalog = services._getCatalog();
|
|
31
|
+
resolve();
|
|
32
|
+
}, 1000);
|
|
32
33
|
})
|
|
33
34
|
)
|
|
34
35
|
.then(() => webex.internal.device.register())
|
|
@@ -404,26 +404,15 @@ describe('webex-core', () => {
|
|
|
404
404
|
assert.isTrue(catalog.isReady);
|
|
405
405
|
});
|
|
406
406
|
|
|
407
|
-
it('should call services#initServiceCatalogs() on webex
|
|
407
|
+
it('should call services#initServiceCatalogs() on webex ready', async () => {
|
|
408
|
+
services._loadCatalogFromCache = sinon.stub().resolves(false);
|
|
408
409
|
services.initServiceCatalogs = sinon.stub().resolves();
|
|
409
410
|
services.initialize();
|
|
410
|
-
webex.trigger('
|
|
411
|
-
// Wait for the async
|
|
412
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
411
|
+
webex.trigger('ready');
|
|
412
|
+
// Wait for the async 'ready' handler to complete
|
|
413
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
413
414
|
assert.called(services.initServiceCatalogs);
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
it('should set services.ready to true after initialization completes', async () => {
|
|
417
|
-
// services.ready starts as false
|
|
418
|
-
const newWebex = new WebexCore({credentials: {supertoken: webexUser.token}});
|
|
419
|
-
const newServices = newWebex.internal.services;
|
|
420
|
-
|
|
421
|
-
// Wait for initialization to complete
|
|
422
|
-
await new Promise((resolve) => {
|
|
423
|
-
newServices.on('services:initialized', resolve);
|
|
424
|
-
});
|
|
425
|
-
|
|
426
|
-
assert.isTrue(newServices.ready);
|
|
415
|
+
assert.isTrue(catalog.isReady);
|
|
427
416
|
});
|
|
428
417
|
|
|
429
418
|
it('should collect different catalogs based on OrgId region', () =>
|
|
@@ -316,26 +316,15 @@ describe('webex-core', () => {
|
|
|
316
316
|
assert.isTrue(catalog.isReady);
|
|
317
317
|
});
|
|
318
318
|
|
|
319
|
-
it('should call services#initServiceCatalogs() on webex
|
|
319
|
+
it('should call services#initServiceCatalogs() on webex ready', async () => {
|
|
320
|
+
services._loadCatalogFromCache = sinon.stub().resolves(false);
|
|
320
321
|
services.initServiceCatalogs = sinon.stub().resolves();
|
|
321
322
|
services.initialize();
|
|
322
|
-
webex.trigger('
|
|
323
|
-
// Wait for the async
|
|
324
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
323
|
+
webex.trigger('ready');
|
|
324
|
+
// Wait for the async 'ready' handler to complete
|
|
325
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
325
326
|
assert.called(services.initServiceCatalogs);
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
it('should set services.ready to true after initialization completes', async () => {
|
|
329
|
-
// services.ready starts as false
|
|
330
|
-
const newWebex = new WebexCore({credentials: {supertoken: webexUser.token}});
|
|
331
|
-
const newServices = newWebex.internal.services;
|
|
332
|
-
|
|
333
|
-
// Wait for initialization to complete
|
|
334
|
-
await new Promise((resolve) => {
|
|
335
|
-
newServices.on('services:initialized', resolve);
|
|
336
|
-
});
|
|
337
|
-
|
|
338
|
-
assert.isTrue(newServices.ready);
|
|
327
|
+
assert.isTrue(catalog.isReady);
|
|
339
328
|
});
|
|
340
329
|
|
|
341
330
|
it('should collect different catalogs based on OrgId region', () =>
|