@webex/webex-core 1.159.3 → 1.159.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.js.map +1 -1
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js +88 -88
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/network-timing.js.map +1 -1
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/request-timing.js.map +1 -1
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-tracking-id.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +1 -1
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +1 -1
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js +6 -6
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js +8 -8
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js +1 -1
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +1 -1
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js +1 -1
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js +12 -12
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +1 -1
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js +2 -2
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js +2 -2
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +3 -3
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/errors.js +5 -3
- package/dist/lib/storage/errors.js.map +1 -1
- package/dist/lib/storage/index.js +12 -12
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js +1 -1
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +1 -1
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +6 -6
- package/dist/webex-core.js.map +1 -1
- package/dist/webex-internal-core.js.map +1 -1
- package/package.json +5 -5
- package/src/lib/services/interceptors/service.js +1 -1
- package/src/lib/stateless-webex-plugin.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["rateLimitExpiryTime","idBrokerRegex","RateLimitInterceptor","args","set","options","isRateLimited","uri","reject","Error","resolve","reason","statusCode","includes","setRateLimitExpiry","extractRetryAfterTime","milliMultiplier","retryAfter","headers","apiName","getApiName","currTimeMilli","Date","getTime","expiry","dict","get","expiryTime","undefined","results","match","getRateLimitStatus","webex","Interceptor"],"sources":["rate-limit.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n// contains the system time in milliseconds at which the retry after associated with a 429 expires\n// mapped by the API name, e.g.: idbroker.webex.com/doStuff would be mapped as 'doStuff'\nconst rateLimitExpiryTime = new WeakMap();\n\n// extracts the common identity API being called\nconst idBrokerRegex = /.*(idbroker|identity)(bts)?.ciscospark.com\\/([^/]+)/;\n\n/**\n * @class\n */\nexport default class RateLimitInterceptor extends Interceptor {\n /**\n * @returns {RateLimitInterceptor}\n */\n static create() {\n return new RateLimitInterceptor({webex: this});\n }\n\n /**\n * constructor\n * @param {mixed} args\n * @returns {Exception}\n */\n constructor(...args) {\n super(...args);\n rateLimitExpiryTime.set(this, new Map());\n }\n\n /**\n * @see {@link Interceptor#onRequest}\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (this.isRateLimited(options.uri)) {\n return Promise.reject(new Error(`API rate limited ${options.uri}`));\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see {@link Interceptor#onResponseError}\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n if (reason.statusCode === 429 && (options.uri.includes('idbroker') || options.uri.includes('identity'))) {\n // set the retry after in the map, setting to milliseconds\n this.setRateLimitExpiry(options.uri, this.extractRetryAfterTime(options));\n }\n\n return Promise.reject(reason);\n }\n\n /**\n * @param {object} options associated with the request\n * @returns {number} retry after time in milliseconds\n */\n extractRetryAfterTime(options) {\n // 1S * 1K === 1MS\n const milliMultiplier = 1000;\n const retryAfter = options.headers['retry-after'] || null;\n\n // set 60 retry if no usable time defined\n if (retryAfter === null || retryAfter <= 0) {\n return 60 * milliMultiplier;\n }\n // set max to 3600 S (1 hour) if greater than 1 hour\n if (retryAfter > 3600) {\n return 3600 * milliMultiplier;\n }\n\n return retryAfter * milliMultiplier;\n }\n\n /**\n * Set the system time at which the rate limiting\n * will expire in the rateLimitExpiryTime map.\n * Assumes retryAfter is in milliseconds\n * @param {string} uri API issuing the rate limiting\n * @param {number} retryAfter milliseconds until rate limiting expires\n * @returns {bool} true is value was successfully set\n */\n setRateLimitExpiry(uri, retryAfter) {\n const apiName = this.getApiName(uri);\n\n if (!apiName) {\n return false;\n }\n\n const currTimeMilli = new Date().getTime();\n const expiry = currTimeMilli + retryAfter;\n const dict = rateLimitExpiryTime.get(this);\n\n return dict.set(apiName, expiry);\n }\n\n /**\n * returns true if the API is currently rate limited\n * @param {string} uri\n * @returns {Boolean} indicates whether or not the API is rate currently rate limited\n */\n getRateLimitStatus(uri) {\n const apiName = this.getApiName(uri);\n\n if (!apiName) {\n return false;\n }\n\n const currTimeMilli = new Date().getTime();\n const dict = rateLimitExpiryTime.get(this);\n const expiryTime = dict.get(apiName);\n\n // if no rate limit expiry has been registered in the map, return false.\n if (expiryTime === undefined) {\n return false;\n }\n\n // return true, indicating rate limiting, if the system time is less than the expiry time\n return currTimeMilli < dict.get(apiName);\n }\n\n /**\n * split the URI and returns the API name of idBroker\n * @param {string} uri\n * @returns {string}\n */\n getApiName(uri) {\n if (!uri) {\n return null;\n }\n\n const results = uri.match(idBrokerRegex);\n\n if (!results) {\n return null;\n }\n\n // group 0 = full match of URL, group 1 = identity or idbroker base\n // group 2 = api name\n return results[2];\n }\n\n /**\n * check URI against list of currently rate limited\n * URIs, and determines if retry-after\n * @param {String} uri pattern to check\n * @returns {bool}\n */\n isRateLimited(uri) {\n // determine if the URI is associated with a common identity API\n if (uri && (uri.includes('idbroker') || uri.includes('identity'))) {\n return this.getRateLimitStatus(uri);\n }\n\n return false;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["requestHeaderName","responseHeaderName","LOCUS_REDIRECT_ERROR","RedirectInterceptor","options","uri","includes","webex","config","credentials","samlUrl","tokenUrl","authorizeUrl","headers","$redirectCount","response","maxAppLevelRedirects","reject","Error","request","body","errorCode","location","logger","warn","qs","newUrl","split","maxLocusRedirects","Interceptor"],"sources":["redirect.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {clone} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\nconst requestHeaderName = 'cisco-no-http-redirect';\nconst responseHeaderName = 'cisco-location';\nconst LOCUS_REDIRECT_ERROR = 2000002;\n\n/**\n * @class\n */\nexport default class RedirectInterceptor extends Interceptor {\n /**\n * @returns {RedirectInterceptor}\n */\n static create() {\n return new RedirectInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n if (options && options.uri && typeof options.uri === 'string') {\n if (options.uri.includes('https://idbroker') ||\n options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl)) {\n return options;\n }\n }\n\n // If cisco-no-http-redirect is already set, don't overwrite it\n if (requestHeaderName in options.headers) {\n // If cisco-no-http-redirect is set to null, false, or undefined, delete\n // it to prevent a CORS preflight.\n if (!options.headers[requestHeaderName]) {\n Reflect.deleteProperty(options.headers, requestHeaderName);\n }\n\n return options;\n }\n options.headers[requestHeaderName] = true;\n options.$redirectCount = options.$redirectCount || 0;\n\n return options;\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n /* eslint-disable no-else-return */\n if (response.headers && response.headers[responseHeaderName]) {\n options = clone(options);\n options.uri = response.headers[responseHeaderName];\n options.$redirectCount += 1;\n if (options.$redirectCount > this.webex.config.maxAppLevelRedirects) {\n return Promise.reject(new Error('Maximum redirects exceeded'));\n }\n\n return this.webex.request(options);\n }\n else if (response.headers &&\n response.body &&\n response.body.errorCode === LOCUS_REDIRECT_ERROR &&\n response.body.location) {\n options = clone(options);\n\n this.webex.logger.warn('redirect: url redirects needed from', options.uri);\n if (response.options && response.options.qs) { // for POST requests\n const newUrl = response.body.location.split('?');\n\n options.uri = newUrl[0]; // params are already present in the qs\n }\n else { // for GET requests\n options.uri = response.body.location;\n }\n\n this.webex.logger.warn('redirect: url redirects needed to', options.uri);\n options.$redirectCount += 1;\n if (options.$redirectCount > this.webex.config.maxLocusRedirects) {\n return Promise.reject(new Error('Maximum redirects exceeded'));\n }\n\n return this.webex.request(options);\n }\n /* eslint-enable no-else-return */\n\n return response;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["RequestEventInterceptor","options","logger","console","webex","trigger","error","warn","resolve","reason","reject","response","Interceptor"],"sources":["request-event.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {get} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestEventInterceptor extends Interceptor {\n /**\n * @returns {RequestEventInterceptor}\n */\n static create() {\n return new RequestEventInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:start', options);\n }\n catch (error) {\n logger.warn('event handler for request:start failed ', error);\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onRequestError(options, reason) {\n // We need to do the normal onRequest logging, but then log how the request\n // failed since the response logger won't be called.\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:end', options, reason);\n this.webex.trigger('request:failure', options, reason);\n }\n catch (error) {\n logger.warn('event handler for request:end failed ', error);\n }\n\n return Promise.reject(reason);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:success', response.options, response);\n }\n catch (error) {\n logger.warn('event handler for request:success failed ', error);\n }\n\n return Promise.resolve(response);\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n const logger = get(this, 'webex.logger', console);\n\n try {\n this.webex.trigger('request:end', options, reason);\n this.webex.trigger('request:failure', options, reason);\n }\n catch (error) {\n logger.warn('event handler for request:failure failed ', error);\n }\n\n return Promise.reject(reason);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;;;;;;AAEA;AACA;AACA;IACqBA,uB;;;;;;;;;;;;;IAQnB;AACF;AACA;AACA;AACA;IACE,mBAAUC,OAAV,EAAmB;MACjB,IAAMC,MAAM,GAAG,mBAAI,IAAJ,EAAU,cAAV,EAA0BC,OAA1B,CAAf;;MAEA,IAAI;QACF,KAAKC,KAAL,CAAWC,OAAX,CAAmB,eAAnB,EAAoCJ,OAApC;MACD,CAFD,CAGA,OAAOK,KAAP,EAAc;QACZJ,MAAM,CAACK,IAAP,CAAY,yCAAZ,EAAuDD,KAAvD;MACD;;MAED,OAAO,iBAAQE,OAAR,CAAgBP,OAAhB,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,wBAAeA,OAAf,EAAwBQ,MAAxB,EAAgC;MAC9B;MACA;MACA,IAAMP,MAAM,GAAG,mBAAI,IAAJ,EAAU,cAAV,EAA0BC,OAA1B,CAAf;;MAEA,IAAI;QACF,KAAKC,KAAL,CAAWC,OAAX,CAAmB,aAAnB,EAAkCJ,OAAlC,EAA2CQ,MAA3C;QACA,KAAKL,KAAL,CAAWC,OAAX,CAAmB,iBAAnB,EAAsCJ,OAAtC,EAA+CQ,MAA/C;MACD,CAHD,CAIA,OAAOH,KAAP,EAAc;QACZJ,MAAM,CAACK,IAAP,CAAY,uCAAZ,EAAqDD,KAArD;MACD;;MAED,OAAO,iBAAQI,MAAR,CAAeD,MAAf,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,oBAAWR,OAAX,EAAoBU,QAApB,EAA8B;MAC5B,IAAMT,MAAM,GAAG,mBAAI,IAAJ,EAAU,cAAV,EAA0BC,OAA1B,CAAf;;MAEA,IAAI;QACF,KAAKC,KAAL,CAAWC,OAAX,CAAmB,iBAAnB,EAAsCM,QAAQ,CAACV,OAA/C,EAAwDU,QAAxD;MACD,CAFD,CAGA,OAAOL,KAAP,EAAc;QACZJ,MAAM,CAACK,IAAP,CAAY,2CAAZ,EAAyDD,KAAzD;MACD;;MAED,OAAO,iBAAQE,OAAR,CAAgBG,QAAhB,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBV,OAAhB,EAAyBQ,MAAzB,EAAiC;MAC/B,IAAMP,MAAM,GAAG,mBAAI,IAAJ,EAAU,cAAV,EAA0BC,OAA1B,CAAf;;MAEA,IAAI;QACF,KAAKC,KAAL,CAAWC,OAAX,CAAmB,aAAnB,EAAkCJ,OAAlC,EAA2CQ,MAA3C;QACA,KAAKL,KAAL,CAAWC,OAAX,CAAmB,iBAAnB,EAAsCJ,OAAtC,EAA+CQ,MAA/C;MACD,CAHD,CAIA,OAAOH,KAAP,EAAc;QACZJ,MAAM,CAACK,IAAP,CAAY,2CAAZ,EAAyDD,KAAzD;MACD;;MAED,OAAO,iBAAQI,MAAR,CAAeD,MAAf,CAAP;IACD;;;;IApFD;AACF;AACA;IACE,kBAAgB;MACd,OAAO,IAAIT,uBAAJ,CAA4B;QAACI,KAAK,EAAE;MAAR,CAA5B,CAAP;IACD;;;EANkDQ,qB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["RequestLoggerInterceptor","options","logger","console","info","method","uri","now","Date","process","env","ENABLE_VERBOSE_NETWORK_LOGGING","getTime","toISOString","body","length","util","inspect","depth","e","warn","resolve","reason","onRequest","error","stack","reject","webex","Interceptor"],"sources":["request-logger.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport util from 'util';\n\nimport {get, has, isArray, isString, omit} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestLoggerInterceptor extends Interceptor {\n /**\n * @returns {RequestLoggerInterceptor}\n */\n static create() {\n return new RequestLoggerInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n const logger = get(this, 'webex.logger', console);\n\n logger.info('/**********************************************************************\\\\ ');\n logger.info('Request:', options.method || 'GET', options.uri);\n logger.info('WEBEX_TRACKINGID: ', get(options, 'headers.trackingid'));\n /* istanbul ignore next */\n if (has(options, 'headers.x-trans-id')) {\n logger.info('X-Trans-ID: ', get(options, 'headers.x-trans-id'));\n }\n const now = new Date();\n\n if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {\n logger.info('timestamp (start): ', now.getTime(), now.toISOString());\n try {\n // Determine if body is a buffer without relying on Buffer to avoid\n // node/browser conflicts.\n if (options.body && options.body.length && !isArray(options.body) && !isString(options.body)) {\n logger.info('Request Options:', util.inspect(omit(options, 'body'), {depth: null}));\n }\n else {\n logger.info('Request Options:', util.inspect(options, {depth: null}));\n }\n }\n catch (e) {\n logger.warn('Could not stringify request options:', e);\n }\n }\n\n return Promise.resolve(options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onRequestError(options, reason) {\n // We need to do the normal onRequest logging, but then log how the request\n // failed since the response logger won't be called.\n this.onRequest(options);\n const logger = get(this, 'webex.logger', console);\n\n logger.error('Request Failed: ', reason.stack);\n logger.info('\\\\**********************************************************************/');\n\n return Promise.reject(reason);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AAGA;;;;;;AAEA;AACA;AACA;IACqBA,wB;;;;;;;;;;;;;IAQnB;AACF;AACA;AACA;AACA;IACE,mBAAUC,OAAV,EAAmB;MACjB,IAAMC,MAAM,GAAG,mBAAI,IAAJ,EAAU,cAAV,EAA0BC,OAA1B,CAAf;MAEAD,MAAM,CAACE,IAAP,CAAY,4EAAZ;MACAF,MAAM,CAACE,IAAP,CAAY,UAAZ,EAAwBH,OAAO,CAACI,MAAR,IAAkB,KAA1C,EAAiDJ,OAAO,CAACK,GAAzD;MACAJ,MAAM,CAACE,IAAP,CAAY,oBAAZ,EAAkC,mBAAIH,OAAJ,EAAa,oBAAb,CAAlC;MACA;;MACA,IAAI,mBAAIA,OAAJ,EAAa,oBAAb,CAAJ,EAAwC;QACtCC,MAAM,CAACE,IAAP,CAAY,cAAZ,EAA4B,mBAAIH,OAAJ,EAAa,oBAAb,CAA5B;MACD;;MACD,IAAMM,GAAG,GAAG,IAAIC,IAAJ,EAAZ;;MAEA,IAAIC,OAAO,CAACC,GAAR,CAAYC,8BAAhB,EAAgD;QAC9CT,MAAM,CAACE,IAAP,CAAY,qBAAZ,EAAmCG,GAAG,CAACK,OAAJ,EAAnC,EAAkDL,GAAG,CAACM,WAAJ,EAAlD;;QACA,IAAI;UACF;UACA;UACA,IAAIZ,OAAO,CAACa,IAAR,IAAgBb,OAAO,CAACa,IAAR,CAAaC,MAA7B,IAAuC,CAAC,uBAAQd,OAAO,CAACa,IAAhB,CAAxC,IAAiE,CAAC,wBAASb,OAAO,CAACa,IAAjB,CAAtE,EAA8F;YAC5FZ,MAAM,CAACE,IAAP,CAAY,kBAAZ,EAAgCY,cAAKC,OAAL,CAAa,oBAAKhB,OAAL,EAAc,MAAd,CAAb,EAAoC;cAACiB,KAAK,EAAE;YAAR,CAApC,CAAhC;UACD,CAFD,MAGK;YACHhB,MAAM,CAACE,IAAP,CAAY,kBAAZ,EAAgCY,cAAKC,OAAL,CAAahB,OAAb,EAAsB;cAACiB,KAAK,EAAE;YAAR,CAAtB,CAAhC;UACD;QACF,CATD,CAUA,OAAOC,CAAP,EAAU;UACRjB,MAAM,CAACkB,IAAP,CAAY,sCAAZ,EAAoDD,CAApD;QACD;MACF;;MAED,OAAO,iBAAQE,OAAR,CAAgBpB,OAAhB,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,wBAAeA,OAAf,EAAwBqB,MAAxB,EAAgC;MAC9B;MACA;MACA,KAAKC,SAAL,CAAetB,OAAf;MACA,IAAMC,MAAM,GAAG,mBAAI,IAAJ,EAAU,cAAV,EAA0BC,OAA1B,CAAf;MAEAD,MAAM,CAACsB,KAAP,CAAa,kBAAb,EAAiCF,MAAM,CAACG,KAAxC;MACAvB,MAAM,CAACE,IAAP,CAAY,2EAAZ;MAEA,OAAO,iBAAQsB,MAAR,CAAeJ,MAAf,CAAP;IACD;;;;IA5DD;AACF;AACA;IACE,kBAAgB;MACd,OAAO,IAAItB,wBAAJ,CAA6B;QAAC2B,KAAK,EAAE;MAAR,CAA7B,CAAP;IACD;;;EANmDC,qB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["RequestTimingInterceptor","options","$timings","requestStart","requestEnd","requestFail","reject","response","resolve","reason","Interceptor"],"sources":["request-timing.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\n/**\n * @class\n */\nexport default class RequestTimingInterceptor extends Interceptor {\n /**\n * @param {Object} options\n * @returns {RequestTimingInterceptor}\n */\n static create(options) {\n return new RequestTimingInterceptor(this, options);\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.$timings = options.$timings || {};\n options.$timings.requestStart = Date.now();\n\n return options;\n }\n\n /**\n * @see Interceptor#onRequestError\n * @param {Object} options\n * @returns {Object}\n */\n onRequestError(options) {\n options.$timings.requestEnd = options.$timings.requestFail = Date.now();\n\n return Promise.reject(options);\n }\n\n /**\n * @see Interceptor#onResponse\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n options.$timings.requestEnd = Date.now();\n\n return Promise.resolve(response);\n }\n\n /**\n * @see Interceptor#onResponseError\n * @param {Object} options\n * @param {Error} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n options.$timings.requestEnd = options.$timings.requestFail = Date.now();\n\n return Promise.reject(reason);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;;;AAEA;AACA;AACA;IACqBA,wB;;;;;;;;;;;;;IASnB;AACF;AACA;AACA;AACA;IACE,mBAAUC,OAAV,EAAmB;MACjBA,OAAO,CAACC,QAAR,GAAmBD,OAAO,CAACC,QAAR,IAAoB,EAAvC;MACAD,OAAO,CAACC,QAAR,CAAiBC,YAAjB,GAAgC,mBAAhC;MAEA,OAAOF,OAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,wBAAeA,OAAf,EAAwB;MACtBA,OAAO,CAACC,QAAR,CAAiBE,UAAjB,GAA8BH,OAAO,CAACC,QAAR,CAAiBG,WAAjB,GAA+B,mBAA7D;MAEA,OAAO,iBAAQC,MAAR,CAAeL,OAAf,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,oBAAWA,OAAX,EAAoBM,QAApB,EAA8B;MAC5BN,OAAO,CAACC,QAAR,CAAiBE,UAAjB,GAA8B,mBAA9B;MAEA,OAAO,iBAAQI,OAAR,CAAgBD,QAAhB,CAAP;IACD;IAED;AACF;AACA;AACA;AACA;AACA;;;;WACE,yBAAgBN,OAAhB,EAAyBQ,MAAzB,EAAiC;MAC/BR,OAAO,CAACC,QAAR,CAAiBE,UAAjB,GAA8BH,OAAO,CAACC,QAAR,CAAiBG,WAAjB,GAA+B,mBAA7D;MAEA,OAAO,iBAAQC,MAAR,CAAeG,MAAf,CAAP;IACD;;;;IArDD;AACF;AACA;AACA;IACE,gBAAcR,OAAd,EAAuB;MACrB,OAAO,IAAID,wBAAJ,CAA6B,IAA7B,EAAmCC,OAAnC,CAAP;IACD;;;EAPmDS,qB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["ResponseLoggerInterceptor","options","response","now","Date","printResponseHeader","logger","console","process","env","ENABLE_VERBOSE_NETWORK_LOGGING","info","getTime","toISOString","body","util","inspect","depth","err","reason","error","reject","statusCode","$timings","networkEnd","networkStart","requestEnd","requestStart","webex","Interceptor"],"sources":["response-logger.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport util from 'util';\n\nimport {get, omit} from 'lodash';\nimport {Interceptor} from '@webex/http-core';\nimport {isBuffer} from '@webex/common';\n\n/**\n * @class\n */\nexport default class ResponseLoggerInterceptor extends Interceptor {\n /**\n * @returns {ResponseLoggerInterceptor}\n */\n static create() {\n return new ResponseLoggerInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {HttpResponse} response\n * @returns {Object}\n */\n onResponse(options, response) {\n const now = new Date();\n\n this.printResponseHeader(options, response);\n\n const logger = get(this, 'webex.logger', console);\n\n if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {\n logger.info('timestamp (end): ', now.getTime(), now.toISOString());\n if (typeof response.body === 'string' || isBuffer(response.body)) {\n logger.info('Response: ', 'Not printed, it`s probably a file');\n }\n else if (typeof response.body === 'object') {\n try {\n logger.info('Response: ', util.inspect(omit(response.body, 'features'), {depth: null}));\n }\n catch (err) {\n logger.info('Response: ', '[Not Serializable]', err);\n }\n }\n }\n logger.info('\\\\**********************************************************************/');\n\n return response;\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @param {Object} reason\n * @returns {Object}\n */\n onResponseError(options, reason) {\n const now = new Date();\n\n this.printResponseHeader(options, reason);\n\n const logger = get(this, 'webex.logger', console);\n\n if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {\n logger.info('timestamp (end): ', now.getTime(), now.toISOString());\n try {\n logger.error('Response: ', util.inspect(reason.body, {depth: null}));\n }\n catch (err) {\n logger.error('Response: ', reason.body);\n }\n }\n logger.info('\\\\**********************************************************************/');\n\n return Promise.reject(reason);\n }\n\n /**\n * Prints the basic header\n * @param {Object} options\n * @param {HttpResponse|WebexHttpError} response\n * @returns {undefined}\n */\n printResponseHeader(options, response) {\n const logger = get(this, 'webex.logger', console);\n\n logger.info('Status Code:', response.statusCode);\n logger.info('WEBEX_TRACKINGID:', get(options, 'headers.trackingid') || get(response, 'headers.trackingid'));\n logger.info('Network duration:', options.$timings.networkEnd - options.$timings.networkStart);\n logger.info('Processing duration:', options.$timings.requestEnd - options.$timings.requestStart);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["strings","UserAgentInterceptor","options","appName","appVersion","set","inBrowser","headers","get","webex","Interceptor"],"sources":["user-agent.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser} from '@webex/common';\nimport {Interceptor} from '@webex/http-core';\nimport {get} from 'lodash';\n\nconst strings = new WeakMap();\n\n/**\n * Sets a 'user-agent' header on all requests if one is not present.\n * Defaults to '@webex/http-core' though a custom user-agent can be set\n * using the appName and appVersion configuration. e.g.\n *\n * webex = WebexSdk.init({\n * credentials: {\n * supertoken: superToken\n * },\n * config: {\n * credentials: {\n * client_id,\n * client_secret\n * },\n * appName: 'custom-user-agent',\n * appVersion: '1.0',\n * }\n * });\n */\nexport default class UserAgentInterceptor extends Interceptor {\n /**\n * @param {Object} [options={}]\n * @param {WebexCore} [options.webex]\n * @private\n * @returns {UserAgentInterceptor}\n */\n constructor(options = {}) {\n const appName = get(options, 'webex.config.appName');\n const appVersion = get(options, 'webex.config.appVersion') || '0.0';\n\n super(options);\n if (appName) {\n strings.set(this, `${appName}/${appVersion}`);\n }\n else {\n strings.set(this, '@webex/http-core'); // Using the traditional default from http-core\n }\n }\n\n /**\n * @returns {UserAgentInterceptor}\n */\n static create() {\n return new UserAgentInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n // Do not set a custom user-agent for browsers\n if (inBrowser) {\n return options;\n }\n\n options.headers = options.headers || {};\n\n if ('user-agent' in options.headers && options.headers['spark-user-agent']) {\n return options;\n }\n\n options.headers['user-agent'] = strings.get(this);\n\n return options;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AACA;;;;;;AAGA,IAAMA,OAAO,GAAG,sBAAhB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IACqBC,oB;;;;;EACnB;AACF;AACA;AACA;AACA;AACA;EACE,gCAA0B;IAAA;;IAAA,IAAdC,OAAc,uEAAJ,EAAI;IAAA;IACxB,IAAMC,OAAO,GAAG,mBAAID,OAAJ,EAAa,sBAAb,CAAhB;IACA,IAAME,UAAU,GAAG,mBAAIF,OAAJ,EAAa,yBAAb,KAA2C,KAA9D;IAEA,0BAAMA,OAAN;;IACA,IAAIC,OAAJ,EAAa;MACXH,OAAO,CAACK,GAAR,wDAAqBF,OAArB,cAAgCC,UAAhC;IACD,CAFD,MAGK;MACHJ,OAAO,CAACK,GAAR,8CAAkB,kBAAlB,EADG,CACoC;IACxC;;IAVuB;EAWzB;EAED;AACF;AACA;;;;;;IAKE;AACF;AACA;AACA;AACA;IACE,mBAAUH,OAAV,EAAmB;MACjB;MACA,IAAII,iBAAJ,EAAe;QACb,OAAOJ,OAAP;MACD;;MAEDA,OAAO,CAACK,OAAR,GAAkBL,OAAO,CAACK,OAAR,IAAmB,EAArC;;MAEA,IAAI,gBAAgBL,OAAO,CAACK,OAAxB,IAAmCL,OAAO,CAACK,OAAR,CAAgB,kBAAhB,CAAvC,EAA4E;QAC1E,OAAOL,OAAP;MACD;;MAEDA,OAAO,CAACK,OAAR,CAAgB,YAAhB,IAAgCP,OAAO,CAACQ,GAAR,CAAY,IAAZ,CAAhC;MAEA,OAAON,OAAP;IACD;;;WAxBD,kBAAgB;MACd,OAAO,IAAID,oBAAJ,CAAyB;QAACQ,KAAK,EAAE;MAAR,CAAzB,CAAP;IACD;;;EAzB+CC,qB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["sequenceNumbers","WebexTrackingIdInterceptor","sq","get","set","options","headers","trackingid","requiresTrackingId","webex","sessionId","sequence","replayCount","tid","split","join","Interceptor"],"sources":["webex-tracking-id.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Interceptor} from '@webex/http-core';\n\nconst sequenceNumbers = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexTrackingIdInterceptor extends Interceptor {\n /**\n * Sequence number; increments on access\n * @type {Number}\n */\n get sequence() {\n let sq = sequenceNumbers.get(this) || 0;\n\n sq += 1;\n sequenceNumbers.set(this, sq);\n\n return sq;\n }\n\n /**\n * @returns {WebexTrackingIdInterceptor}\n */\n static create() {\n return new WebexTrackingIdInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n // If trackingid is already set, don't overwrite it\n if ('trackingid' in options.headers) {\n // If trackingid is set to null, false, or undefined, delete it to\n // prevent a CORS preflight.\n if (!options.headers.trackingid) {\n Reflect.deleteProperty(options.headers, 'trackingid');\n }\n\n return options;\n }\n\n if (this.requiresTrackingId(options)) {\n options.headers.trackingid = `${this.webex.sessionId}_${this.sequence}`;\n }\n\n if (options.headers.trackingid && options.replayCount) {\n const tid = options.headers.trackingid.split('+');\n\n tid[1] = options.replayCount;\n options.headers.trackingid = tid.join('+');\n }\n\n return options;\n }\n\n /**\n * Determines whether or not include a tracking id\n * @param {Object} options\n * @returns {boolean}\n */\n requiresTrackingId(options) {\n return !options.headers.trackingid;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;;;AAEA,IAAMA,eAAe,GAAG,sBAAxB;AAEA;AACA;AACA;;IACqBC,0B;;;;;;;;;;;;;IACnB;AACF;AACA;AACA;IACE,eAAe;MACb,IAAIC,EAAE,GAAGF,eAAe,CAACG,GAAhB,CAAoB,IAApB,KAA6B,CAAtC;MAEAD,EAAE,IAAI,CAAN;MACAF,eAAe,CAACI,GAAhB,CAAoB,IAApB,EAA0BF,EAA1B;MAEA,OAAOA,EAAP;IACD;IAED;AACF;AACA;;;;;IAKE;AACF;AACA;AACA;AACA;IACE,mBAAUG,OAAV,EAAmB;MACjBA,OAAO,CAACC,OAAR,GAAkBD,OAAO,CAACC,OAAR,IAAmB,EAArC,CADiB,CAEjB;;MACA,IAAI,gBAAgBD,OAAO,CAACC,OAA5B,EAAqC;QACnC;QACA;QACA,IAAI,CAACD,OAAO,CAACC,OAAR,CAAgBC,UAArB,EAAiC;UAC/B,6BAAuBF,OAAO,CAACC,OAA/B,EAAwC,YAAxC;QACD;;QAED,OAAOD,OAAP;MACD;;MAED,IAAI,KAAKG,kBAAL,CAAwBH,OAAxB,CAAJ,EAAsC;QACpCA,OAAO,CAACC,OAAR,CAAgBC,UAAhB,aAAgC,KAAKE,KAAL,CAAWC,SAA3C,cAAwD,KAAKC,QAA7D;MACD;;MAED,IAAIN,OAAO,CAACC,OAAR,CAAgBC,UAAhB,IAA8BF,OAAO,CAACO,WAA1C,EAAuD;QACrD,IAAMC,GAAG,GAAGR,OAAO,CAACC,OAAR,CAAgBC,UAAhB,CAA2BO,KAA3B,CAAiC,GAAjC,CAAZ;QAEAD,GAAG,CAAC,CAAD,CAAH,GAASR,OAAO,CAACO,WAAjB;QACAP,OAAO,CAACC,OAAR,CAAgBC,UAAhB,GAA6BM,GAAG,CAACE,IAAJ,CAAS,GAAT,CAA7B;MACD;;MAED,OAAOV,OAAP;IACD;IAED;AACF;AACA;AACA;AACA;;;;WACE,4BAAmBA,OAAnB,EAA4B;MAC1B,OAAO,CAACA,OAAO,CAACC,OAAR,CAAgBC,UAAxB;IACD;;;WA3CD,kBAAgB;MACd,OAAO,IAAIN,0BAAJ,CAA+B;QAACQ,KAAK,EAAE;MAAR,CAA/B,CAAP;IACD;;;EAnBqDO,qB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["strings","WebexUserAgentInterceptor","options","libName","libVersion","set","inBrowser","headers","webex","config","appName","appVersion","appPlatform","sparkUserAgent","get","uri","includes","credentials","samlUrl","tokenUrl","authorizeUrl","Interceptor"],"sources":["webex-user-agent.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {inBrowser} from '@webex/common';\nimport {Interceptor} from '@webex/http-core';\nimport {get} from 'lodash';\n\nconst strings = new WeakMap();\n\n/**\n * @class\n */\nexport default class WebexUserAgentInterceptor extends Interceptor {\n /**\n * @param {Object} [options={}]\n * @param {WebexCore} [options.webex]\n * @private\n * @returns {WebexUserAgentInterceptor}\n */\n constructor(options = {}) {\n const libName = get(options, 'webex.webex', false) ? 'webex' : 'webex-js-sdk';\n const libVersion = get(options, 'webex.version', 'development');\n\n super(options);\n strings.set(this, `${libName}/${libVersion} (${inBrowser ? 'web' : 'node'})`);\n }\n\n /**\n * @returns {WebexUserAgentInterceptor}\n */\n static create() {\n return new WebexUserAgentInterceptor({webex: this});\n }\n\n /**\n * @see Interceptor#onRequest\n * @param {Object} options\n * @returns {Object}\n */\n onRequest(options) {\n options.headers = options.headers || {};\n const {\n appName,\n appVersion,\n appPlatform\n } = this.webex?.config ?? {};\n let sparkUserAgent = `${strings.get(this)}`;\n\n if (appName) {\n sparkUserAgent += ` ${appName}/${appVersion ?? '0.0'}`;\n }\n\n if (appPlatform) {\n sparkUserAgent += ` ${appPlatform}`;\n }\n\n if (options.uri && options.uri.includes('https://idbroker')) {\n return options;\n }\n\n if (\n options.uri &&\n (\n options.uri.includes(this.webex.config.credentials.samlUrl) ||\n options.uri.includes(this.webex.config.credentials.tokenUrl) ||\n options.uri.includes(this.webex.config.credentials.authorizeUrl)\n )\n ) {\n return options;\n }\n\n if ('spark-user-agent' in options.headers) {\n if (!options.headers['spark-user-agent']) {\n Reflect.deleteProperty(options.headers, 'spark-user-agent');\n }\n\n return options;\n }\n\n options.headers['spark-user-agent'] = sparkUserAgent;\n\n return options;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AACA;;;;;;AAGA,IAAMA,OAAO,GAAG,sBAAhB;AAEA;AACA;AACA;;IACqBC,yB;;;;;EACnB;AACF;AACA;AACA;AACA;AACA;EACE,qCAA0B;IAAA;;IAAA,IAAdC,OAAc,uEAAJ,EAAI;IAAA;IACxB,IAAMC,OAAO,GAAG,mBAAID,OAAJ,EAAa,aAAb,EAA4B,KAA5B,IAAqC,OAArC,GAA+C,cAA/D;IACA,IAAME,UAAU,GAAG,mBAAIF,OAAJ,EAAa,eAAb,EAA8B,aAA9B,CAAnB;IAEA,0BAAMA,OAAN;IACAF,OAAO,CAACK,GAAR,wDAAqBF,OAArB,cAAgCC,UAAhC,eAA+CE,oBAAY,KAAZ,GAAoB,MAAnE;IALwB;EAMzB;EAED;AACF;AACA;;;;;;IAKE;AACF;AACA;AACA;AACA;IACE,mBAAUJ,OAAV,EAAmB;MAAA;;MACjBA,OAAO,CAACK,OAAR,GAAkBL,OAAO,CAACK,OAAR,IAAmB,EAArC;;MACA,gDAII,KAAKC,KAJT,gDAII,YAAYC,MAJhB,mEAI0B,EAJ1B;MAAA,IACEC,OADF,QACEA,OADF;MAAA,IAEEC,UAFF,QAEEA,UAFF;MAAA,IAGEC,WAHF,QAGEA,WAHF;;MAKA,IAAIC,cAAc,aAAMb,OAAO,CAACc,GAAR,CAAY,IAAZ,CAAN,CAAlB;;MAEA,IAAIJ,OAAJ,EAAa;QACXG,cAAc,eAAQH,OAAR,cAAmBC,UAAnB,aAAmBA,UAAnB,cAAmBA,UAAnB,GAAiC,KAAjC,CAAd;MACD;;MAED,IAAIC,WAAJ,EAAiB;QACfC,cAAc,eAAQD,WAAR,CAAd;MACD;;MAED,IAAIV,OAAO,CAACa,GAAR,IAAeb,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,kBAArB,CAAnB,EAA6D;QAC3D,OAAOd,OAAP;MACD;;MAED,IACEA,OAAO,CAACa,GAAR,KAEEb,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,KAAKR,KAAL,CAAWC,MAAX,CAAkBQ,WAAlB,CAA8BC,OAAnD,KACAhB,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,KAAKR,KAAL,CAAWC,MAAX,CAAkBQ,WAAlB,CAA8BE,QAAnD,CADA,IAEAjB,OAAO,CAACa,GAAR,CAAYC,QAAZ,CAAqB,KAAKR,KAAL,CAAWC,MAAX,CAAkBQ,WAAlB,CAA8BG,YAAnD,CAJF,CADF,EAOE;QACA,OAAOlB,OAAP;MACD;;MAED,IAAI,sBAAsBA,OAAO,CAACK,OAAlC,EAA2C;QACzC,IAAI,CAACL,OAAO,CAACK,OAAR,CAAgB,kBAAhB,CAAL,EAA0C;UACxC,6BAAuBL,OAAO,CAACK,OAA/B,EAAwC,kBAAxC;QACD;;QAED,OAAOL,OAAP;MACD;;MAEDA,OAAO,CAACK,OAAR,CAAgB,kBAAhB,IAAsCM,cAAtC;MAEA,OAAOX,OAAP;IACD;;;WApDD,kBAAgB;MACd,OAAO,IAAID,yBAAJ,CAA8B;QAACO,KAAK,EAAE;MAAR,CAA9B,CAAP;IACD;;;EApBoDa,qB"}
|
package/dist/lib/batcher.js
CHANGED
|
@@ -329,7 +329,7 @@ var Batcher = _webexPlugin.default.extend({
|
|
|
329
329
|
fingerprintResponse: function fingerprintResponse(item) {
|
|
330
330
|
throw new Error('fingerprintResponse() must be implemented');
|
|
331
331
|
},
|
|
332
|
-
version: "1.159.
|
|
332
|
+
version: "1.159.6"
|
|
333
333
|
});
|
|
334
334
|
|
|
335
335
|
var _default2 = Batcher;
|
package/dist/lib/batcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["batcher.js"],"names":["Batcher","WebexPlugin","extend","session","deferreds","type","default","queue","derived","bounce","fn","executeQueue","config","batcherWait","maxCalls","batcherMaxCalls","maxWait","batcherMaxWait","request","item","defer","Defer","fingerprintRequest","then","idx","has","resolve","get","promise","set","prepareItem","req","delete","catch","reason","reject","enqueue","push","splice","prepareRequest","payload","submitHttpRequest","res","handleHttpSuccess","WebexHttpError","handleHttpError","all","map","getDeferredForRequest","logger","error","process","env","NODE_ENV","stack","Error","body","items","acceptItem","options","didItemFail","didFail","handleItemFailure","handleItemSuccess","getDeferredForResponse","fingerprintResponse"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {has} from 'lodash';\nimport {\n cappedDebounce,\n Defer,\n tap\n} from '@webex/common';\n\nimport WebexPlugin from './webex-plugin';\nimport WebexHttpError from './webex-http-error';\n\n/**\n * Base class for coalescing requests to batched APIs\n * @class Batcher\n */\nconst Batcher = WebexPlugin.extend({\n session: {\n deferreds: {\n type: 'object',\n default() {\n return new Map();\n }\n },\n queue: {\n type: 'array',\n default() {\n return [];\n }\n }\n },\n\n derived: {\n bounce: {\n fn() {\n return cappedDebounce((...args) => this.executeQueue(...args), this.config.batcherWait, {\n maxCalls: this.config.batcherMaxCalls,\n maxWait: this.config.batcherMaxWait\n });\n }\n }\n },\n\n /**\n * Requests an item from a batched API\n * @param {Object} item\n * @returns {Promise<mixed>}\n */\n request(item) {\n // So far, I can't find a way to avoid three layers of nesting here.\n /* eslint max-nested-callbacks: [0] */\n const defer = new Defer();\n\n this.fingerprintRequest(item)\n .then((idx) => {\n if (this.deferreds.has(idx)) {\n defer.resolve(this.deferreds.get(idx).promise);\n\n return;\n }\n this.deferreds.set(idx, defer);\n this.prepareItem(item)\n .then((req) => {\n defer.promise = defer.promise\n .then(tap(() => this.deferreds.delete(idx)))\n .catch((reason) => {\n this.deferreds.delete(idx);\n\n return Promise.reject(reason);\n });\n\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n\n return defer.promise;\n },\n\n /**\n * Adds an item to the queue.\n * Intended to be overridden\n * @param {mixed} req\n * @returns {Promise<undefined>}\n */\n enqueue(req) {\n this.queue.push(req);\n\n return Promise.resolve();\n },\n\n /**\n * Transform the item before adding it to the queue\n * Intended to be overridden\n * @param {mixed} item\n * @returns {Promise<mixed>}\n */\n prepareItem(item) {\n return Promise.resolve(item);\n },\n\n /**\n * Detaches the current queue, does any appropriate transforms, and submits it\n * to the API.\n * @returns {Promise<undefined>}\n */\n executeQueue() {\n const queue = this.queue.splice(0, this.config.batcherMaxCalls);\n\n return new Promise((resolve) => {\n resolve(this.prepareRequest(queue)\n .then((payload) => this.submitHttpRequest(payload)\n .then((res) => this.handleHttpSuccess(res)))\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(queue.map((item) => this.getDeferredForRequest(item)\n .then((defer) => {\n defer.reject(reason);\n })));\n }));\n })\n .catch((reason) => {\n this.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);\n\n return Promise.reject(reason);\n });\n },\n\n /**\n * Performs any final transforms on the queue before submitting it to the API\n * Intended to be overridden\n * @param {Object|Array} queue\n * @returns {Promise<Object>}\n */\n prepareRequest(queue) {\n return Promise.resolve(queue);\n },\n\n /**\n * Submits the prepared request body to the API.\n * This method *must* be overridden\n * @param {Object} payload\n * @returns {Promise<HttpResponseObject>}\n */\n // eslint-disable-next-line no-unused-vars\n submitHttpRequest(payload) {\n throw new Error('request() must be implemented');\n },\n\n /**\n * Actions taken when the http request returns a success\n * Intended to be overridden\n * @param {Promise<HttpResponseObject>} res\n * @returns {Promise<undefined>}\n */\n handleHttpSuccess(res) {\n return Promise.all((res.body && res.body.items || res.body).map((item) => this.acceptItem(item)));\n },\n\n /**\n * Actions taken when the http request returns a failure. Typically, this\n * means failing the entire queue, but could be overridden in some\n * implementations to e.g. reenqueue.\n * Intended to be overridden\n * @param {WebexHttpError} reason\n * @returns {Promise<undefined>}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError) {\n if (has(reason, 'options.body.map')) {\n return Promise.all(reason.options.body.map((item) => this.getDeferredForRequest(item)\n .then((defer) => {\n defer.reject(reason);\n })));\n }\n }\n this.logger.error('http error handler called without a WebexHttpError object', reason);\n\n return Promise.reject(reason);\n },\n\n /**\n * Determines if the item succeeded or failed and delegates accordingly\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n acceptItem(item) {\n return this.didItemFail(item)\n .then((didFail) => {\n if (didFail) {\n return this.handleItemFailure(item);\n }\n\n return this.handleItemSuccess(item);\n });\n },\n\n /**\n * Indicates if the specified response item implies a success or a failure\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<Boolean>}\n */\n // eslint-disable-next-line no-unused-vars\n didItemFail(item) {\n return Promise.resolve(false);\n },\n\n /**\n * Finds the Defer for the specified item and rejects its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemFailure(item) {\n return this.getDeferredForResponse(item)\n .then((defer) => {\n defer.reject(item);\n });\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item)\n .then((defer) => {\n defer.resolve(item);\n });\n },\n\n /**\n * Returns the Deferred for the specified request item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForRequest(item) {\n return this.fingerprintRequest(item)\n .then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Returns the Deferred for the specified response item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForResponse(item) {\n return this.fingerprintResponse(item)\n .then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Generates a unique identifier for the item in a request payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintRequest(item) {\n throw new Error('fingerprintRequest() must be implemented');\n },\n\n /**\n * Generates a unique identifier for the item in a response payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintResponse(item) {\n throw new Error('fingerprintResponse() must be implemented');\n }\n});\n\nexport default Batcher;\n"]}
|
|
1
|
+
{"version":3,"names":["Batcher","WebexPlugin","extend","session","deferreds","type","default","queue","derived","bounce","fn","executeQueue","config","batcherWait","maxCalls","batcherMaxCalls","maxWait","batcherMaxWait","request","item","defer","Defer","fingerprintRequest","then","idx","has","resolve","get","promise","set","prepareItem","req","delete","catch","reason","reject","enqueue","push","splice","prepareRequest","payload","submitHttpRequest","res","handleHttpSuccess","WebexHttpError","handleHttpError","all","map","getDeferredForRequest","logger","error","process","env","NODE_ENV","stack","Error","body","items","acceptItem","options","didItemFail","didFail","handleItemFailure","handleItemSuccess","getDeferredForResponse","fingerprintResponse"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {has} from 'lodash';\nimport {\n cappedDebounce,\n Defer,\n tap\n} from '@webex/common';\n\nimport WebexPlugin from './webex-plugin';\nimport WebexHttpError from './webex-http-error';\n\n/**\n * Base class for coalescing requests to batched APIs\n * @class Batcher\n */\nconst Batcher = WebexPlugin.extend({\n session: {\n deferreds: {\n type: 'object',\n default() {\n return new Map();\n }\n },\n queue: {\n type: 'array',\n default() {\n return [];\n }\n }\n },\n\n derived: {\n bounce: {\n fn() {\n return cappedDebounce((...args) => this.executeQueue(...args), this.config.batcherWait, {\n maxCalls: this.config.batcherMaxCalls,\n maxWait: this.config.batcherMaxWait\n });\n }\n }\n },\n\n /**\n * Requests an item from a batched API\n * @param {Object} item\n * @returns {Promise<mixed>}\n */\n request(item) {\n // So far, I can't find a way to avoid three layers of nesting here.\n /* eslint max-nested-callbacks: [0] */\n const defer = new Defer();\n\n this.fingerprintRequest(item)\n .then((idx) => {\n if (this.deferreds.has(idx)) {\n defer.resolve(this.deferreds.get(idx).promise);\n\n return;\n }\n this.deferreds.set(idx, defer);\n this.prepareItem(item)\n .then((req) => {\n defer.promise = defer.promise\n .then(tap(() => this.deferreds.delete(idx)))\n .catch((reason) => {\n this.deferreds.delete(idx);\n\n return Promise.reject(reason);\n });\n\n this.enqueue(req)\n .then(() => this.bounce())\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n })\n .catch((reason) => defer.reject(reason));\n\n return defer.promise;\n },\n\n /**\n * Adds an item to the queue.\n * Intended to be overridden\n * @param {mixed} req\n * @returns {Promise<undefined>}\n */\n enqueue(req) {\n this.queue.push(req);\n\n return Promise.resolve();\n },\n\n /**\n * Transform the item before adding it to the queue\n * Intended to be overridden\n * @param {mixed} item\n * @returns {Promise<mixed>}\n */\n prepareItem(item) {\n return Promise.resolve(item);\n },\n\n /**\n * Detaches the current queue, does any appropriate transforms, and submits it\n * to the API.\n * @returns {Promise<undefined>}\n */\n executeQueue() {\n const queue = this.queue.splice(0, this.config.batcherMaxCalls);\n\n return new Promise((resolve) => {\n resolve(this.prepareRequest(queue)\n .then((payload) => this.submitHttpRequest(payload)\n .then((res) => this.handleHttpSuccess(res)))\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(queue.map((item) => this.getDeferredForRequest(item)\n .then((defer) => {\n defer.reject(reason);\n })));\n }));\n })\n .catch((reason) => {\n this.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);\n\n return Promise.reject(reason);\n });\n },\n\n /**\n * Performs any final transforms on the queue before submitting it to the API\n * Intended to be overridden\n * @param {Object|Array} queue\n * @returns {Promise<Object>}\n */\n prepareRequest(queue) {\n return Promise.resolve(queue);\n },\n\n /**\n * Submits the prepared request body to the API.\n * This method *must* be overridden\n * @param {Object} payload\n * @returns {Promise<HttpResponseObject>}\n */\n // eslint-disable-next-line no-unused-vars\n submitHttpRequest(payload) {\n throw new Error('request() must be implemented');\n },\n\n /**\n * Actions taken when the http request returns a success\n * Intended to be overridden\n * @param {Promise<HttpResponseObject>} res\n * @returns {Promise<undefined>}\n */\n handleHttpSuccess(res) {\n return Promise.all((res.body && res.body.items || res.body).map((item) => this.acceptItem(item)));\n },\n\n /**\n * Actions taken when the http request returns a failure. Typically, this\n * means failing the entire queue, but could be overridden in some\n * implementations to e.g. reenqueue.\n * Intended to be overridden\n * @param {WebexHttpError} reason\n * @returns {Promise<undefined>}\n */\n handleHttpError(reason) {\n if (reason instanceof WebexHttpError) {\n if (has(reason, 'options.body.map')) {\n return Promise.all(reason.options.body.map((item) => this.getDeferredForRequest(item)\n .then((defer) => {\n defer.reject(reason);\n })));\n }\n }\n this.logger.error('http error handler called without a WebexHttpError object', reason);\n\n return Promise.reject(reason);\n },\n\n /**\n * Determines if the item succeeded or failed and delegates accordingly\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n acceptItem(item) {\n return this.didItemFail(item)\n .then((didFail) => {\n if (didFail) {\n return this.handleItemFailure(item);\n }\n\n return this.handleItemSuccess(item);\n });\n },\n\n /**\n * Indicates if the specified response item implies a success or a failure\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<Boolean>}\n */\n // eslint-disable-next-line no-unused-vars\n didItemFail(item) {\n return Promise.resolve(false);\n },\n\n /**\n * Finds the Defer for the specified item and rejects its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemFailure(item) {\n return this.getDeferredForResponse(item)\n .then((defer) => {\n defer.reject(item);\n });\n },\n\n /**\n * Finds the Defer for the specified item and resolves its promise\n * Intended to be overridden\n * @param {Object} item\n * @returns {Promise<undefined>}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item)\n .then((defer) => {\n defer.resolve(item);\n });\n },\n\n /**\n * Returns the Deferred for the specified request item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForRequest(item) {\n return this.fingerprintRequest(item)\n .then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Returns the Deferred for the specified response item\n * @param {Object} item\n * @returns {Promise<Defer>}\n */\n getDeferredForResponse(item) {\n return this.fingerprintResponse(item)\n .then((idx) => {\n const defer = this.deferreds.get(idx);\n\n /* istanbul ignore if */\n if (!defer) {\n throw new Error('Could not find pending request for received response');\n }\n\n return defer;\n });\n },\n\n /**\n * Generates a unique identifier for the item in a request payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintRequest(item) {\n throw new Error('fingerprintRequest() must be implemented');\n },\n\n /**\n * Generates a unique identifier for the item in a response payload\n * Intended to be overridden\n * Note that overrides must return a primitive.\n * @param {Object} item\n * @returns {Promise<primitive>}\n */\n // eslint-disable-next-line no-unused-vars\n fingerprintResponse(item) {\n throw new Error('fingerprintResponse() must be implemented');\n }\n});\n\nexport default Batcher;\n"],"mappings":"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"}
|
|
@@ -598,7 +598,7 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
|
|
|
598
598
|
this.refresh();
|
|
599
599
|
}
|
|
600
600
|
},
|
|
601
|
-
version: "1.159.
|
|
601
|
+
version: "1.159.6"
|
|
602
602
|
}, ((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)));
|
|
603
603
|
|
|
604
604
|
var _default = Credentials;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["credentials.js"],"names":["Credentials","WebexPlugin","extend","keyFactory","scope","collections","userTokens","TokenCollection","dataTypes","token","Token","dataType","derived","canAuthorize","deps","fn","Boolean","supertoken","canRefresh","config","jwtRefreshCallback","props","prop","namespace","session","isRefreshing","default","type","ready","refreshTimer","undefined","buildLoginUrl","options","clientType","state","Error","client_id","redirect_uri","response_type","base64","toBase64Url","authorizeUrl","querystring","stringify","getOrgId","logger","info","extractOrgIdFromJWT","access_token","e","extractOrgIdFromUserToken","f","decodedJWT","jwt","decode","realm","fields","split","length","buildLogoutUrl","logoutUrl","cisService","service","goto","calcRefreshTimeout","expiration","Math","floor","random","constructor","_dataTypes","forEach","key","set","bind","args","downscope","catch","reason","trace","resolve","serialize","parent","getClientToken","webex","request","method","uri","tokenUrl","form","grant_type","self_contained_token","auth","user","pass","client_secret","sendImmediately","shouldRefreshAccessToken","then","res","body","statusCode","reject","ErrorConstructor","grantErrors","select","error","_res","getUserToken","once","get","t","add","initialize","attrs","authorization","expires","scheduleRefresh","prototype","listenToOnce","authorizationString","parsed","url","parse","query","href","substr","indexOf","invalidate","clearTimeout","unset","err","warn","models","remove","refresh","tokens","requestAccessTokenFromJwt","internal","services","updateCredentialsConfig","st","all","map","revoke","InvalidRequestError","trigger","expiresIn","timeoutLength","oneFlight"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\nimport url from 'url';\n\nimport jwt from 'jsonwebtoken';\nimport {\n base64,\n makeStateDataType,\n oneFlight,\n tap,\n whileInFlight\n} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {clone, cloneDeep, isObject, isEmpty} from 'lodash';\n\nimport WebexPlugin from '../webex-plugin';\nimport {persist, waitForValue} from '../storage/decorators';\n\nimport grantErrors from './grant-errors';\nimport {filterScope, sortScope} from './scope';\nimport Token from './token';\nimport TokenCollection from './token-collection';\n\n/**\n * @class\n */\nconst Credentials = WebexPlugin.extend({\n collections: {\n userTokens: TokenCollection\n },\n\n dataTypes: {\n token: makeStateDataType(Token, 'token').dataType\n },\n\n derived: {\n canAuthorize: {\n deps: [\n 'supertoken',\n 'supertoken.canAuthorize',\n 'canRefresh'\n ],\n fn() {\n return Boolean(this.supertoken && this.supertoken.canAuthorize || this.canRefresh);\n }\n },\n canRefresh: {\n deps: [\n 'supertoken',\n 'supertoken.canRefresh'\n ],\n fn() {\n // If we're operating in JWT mode, we have to delegate to the consumer\n if (this.config.jwtRefreshCallback) {\n return true;\n }\n\n return Boolean(this.supertoken && this.supertoken.canRefresh);\n }\n }\n },\n\n props: {\n supertoken: makeStateDataType(Token, 'token').prop\n },\n\n namespace: 'Credentials',\n\n session: {\n isRefreshing: {\n default: false,\n type: 'boolean'\n },\n /**\n * Becomes `true` once the {@link loaded} event fires.\n * @see {@link WebexPlugin#ready}\n * @instance\n * @memberof Credentials\n * @type {boolean}\n */\n ready: {\n default: false,\n type: 'boolean'\n },\n refreshTimer: {\n default: undefined,\n type: 'any'\n }\n },\n\n /**\n * Generates an OAuth Login URL. Prefers the api.ciscospark.com proxy if the\n * instance is initialize with an authorizatUrl, but fallsback to idbroker\n * as the base otherwise.\n * @instance\n * @memberof Credentials\n * @param {Object} [options={}]\n * @returns {string}\n */\n buildLoginUrl(options = {clientType: 'public'}) {\n /* eslint-disable camelcase */\n if (options.state && !isObject(options.state)) {\n throw new Error('if specified, `options.state` must be an object');\n }\n\n options.client_id = this.config.client_id;\n options.redirect_uri = this.config.redirect_uri;\n options.scope = this.config.scope;\n\n options = cloneDeep(options);\n\n if (!options.response_type) {\n options.response_type = options.clientType === 'public' ? 'token' : 'code';\n }\n Reflect.deleteProperty(options, 'clientType');\n\n if (options.state) {\n if (!isEmpty(options.state)) {\n options.state = base64.toBase64Url(JSON.stringify(options.state));\n }\n else {\n delete options.state;\n }\n }\n\n return `${this.config.authorizeUrl}?${querystring.stringify(options)}`;\n /* eslint-enable camelcase */\n },\n\n /**\n * Get the determined OrgId.\n *\n * @throws {Error} - If the OrgId could not be determined.\n * @returns {string} - The OrgId.\n */\n getOrgId() {\n this.logger.info(\n 'credentials: attempting to retrieve the OrgId from token'\n );\n\n try {\n // Attempt to extract a client-authenticated token's OrgId.\n this.logger.info('credentials: trying to extract OrgId from JWT');\n\n return this.extractOrgIdFromJWT(this.supertoken.access_token);\n }\n catch (e) {\n // Attempt to extract a user token's OrgId.\n this.logger.info('credentials: could not extract OrgId from JWT');\n this.logger.info(\n 'credentials: attempting to extract OrgId from user token'\n );\n\n try {\n return this.extractOrgIdFromUserToken(this.supertoken?.access_token);\n }\n catch (f) {\n this.logger.info('credentials: could not extract OrgId from user token');\n throw f;\n }\n }\n },\n\n /**\n * Extract the OrgId [realm] from a provided JWT.\n *\n * @private\n * @param {string} token - The JWT to extract the OrgId from.\n * @throws {Error} - If the token does not pass JWT general/realm validation.\n * @returns {string} - The OrgId.\n */\n extractOrgIdFromJWT(token = '') {\n // Decoded the provided token.\n const decodedJWT = jwt.decode(token);\n\n // Validate that the provided token is a JWT.\n if (!decodedJWT) {\n throw new Error('unable to extract the OrgId from the provided JWT');\n }\n\n if (!decodedJWT.realm) {\n throw new Error('the provided JWT does not contain an OrgId');\n }\n\n // Return the OrgId [realm].\n return decodedJWT.realm;\n },\n\n /**\n * Extract the OrgId [realm] from a provided user token.\n *\n * @private\n * @param {string} token - The user token to extract the OrgId from.\n * @throws {Error} - Will throw an error if the provided token is invalid.\n * @returns {string} - The OrgId.\n */\n extractOrgIdFromUserToken(token = '') {\n // Split the provided token into subsections.\n const fields = token.split('_');\n\n // Validate that the provided token has the proper amount of sections.\n if (fields.length !== 3) {\n throw new Error('the provided token is not a valid format');\n }\n\n // Return the token section that contains the OrgId.\n return fields[2];\n },\n\n /**\n * Generates a Logout URL\n * @instance\n * @memberof Credentials\n * @param {Object} [options={}]\n * @returns {[type]}\n */\n buildLogoutUrl(options = {}) {\n return `${this.config.logoutUrl}?${querystring.stringify(Object.assign({\n cisService: this.config.service,\n goto: this.config.redirect_uri\n }, options))}`;\n },\n\n /**\n * Generates a number between 60% - 90% of expired value\n * @instance\n * @memberof Credentials\n * @param {number} expiration\n * @private\n * @returns {number}\n */\n calcRefreshTimeout(expiration) {\n return Math.floor((Math.floor(Math.random() * 4) + 6) / 10 * expiration);\n },\n\n constructor(...args) {\n // HACK to deal with the fact that AmpersandState#dataTypes#set is a pure\n // function.\n this._dataTypes = cloneDeep(this._dataTypes);\n Object.keys(this._dataTypes).forEach((key) => {\n if (this._dataTypes[key].set) {\n this._dataTypes[key].set = this._dataTypes[key].set.bind(this);\n }\n });\n // END HACK\n Reflect.apply(WebexPlugin, this, args);\n },\n\n /**\n * Downscopes a token\n * @instance\n * @memberof Credentials\n * @param {string} scope\n * @private\n * @returns {Promise<Token>}\n */\n downscope(scope) {\n return this.supertoken.downscope(scope)\n .catch((reason) => {\n this.logger.trace(`credentials: failed to downscope supertoken to ${scope}`, reason);\n this.logger.trace(`credentials: falling back to supertoken for ${scope}`);\n\n return Promise.resolve(new Token(Object.assign({scope}, this.supertoken.serialize())), {parent: this});\n });\n },\n\n /**\n * Requests a client credentials grant and returns the token. Given the\n * limited use for such tokens as this time, this method does not cache its\n * token.\n * @instance\n * @memberof Credentials\n * @param {Object} options\n * @returns {Promise<Token>}\n */\n getClientToken(options = {}) {\n this.logger.info('credentials: requesting client credentials grant');\n\n return this.webex.request({\n /* eslint-disable camelcase */\n method: 'POST',\n uri: options.uri || this.config.tokenUrl,\n form: {\n grant_type: 'client_credentials',\n scope: options.scope || 'webexsquare:admin',\n self_contained_token: true\n },\n auth: {\n user: this.config.client_id,\n pass: this.config.client_secret,\n sendImmediately: true\n },\n shouldRefreshAccessToken: false\n /* eslint-enable camelcase */\n })\n .then((res) => new Token(res.body, {parent: this}))\n .catch((res) => {\n if (res.statusCode !== 400) {\n return Promise.reject(res);\n }\n\n const ErrorConstructor = grantErrors.select(res.body.error);\n\n return Promise.reject(new ErrorConstructor(res._res || res));\n });\n },\n\n @oneFlight({keyFactory: (scope) => scope})\n @waitForValue('@')\n /**\n * Resolves with a token with the specified scopes. If no scope is specified,\n * defaults to omit(webex.credentials.scope, 'spark:kms'). If no such token is\n * available, downscopes the supertoken to that scope.\n * @instance\n * @memberof Credentials\n * @param {string} scope\n * @returns {Promise<Token>}\n */\n getUserToken(scope) {\n return Promise.resolve(!this.isRefreshing || new Promise((resolve) => {\n this.logger.info('credentials: token refresh inflight; delaying getUserToken until refresh completes');\n this.once('change:isRefreshing', () => {\n this.logger.info('credentials: token refresh complete; reinvoking getUserToken');\n resolve();\n });\n }))\n .then(() => {\n if (!this.canAuthorize) {\n this.logger.info('credentials: cannot produce an access token from current state');\n\n return Promise.reject(new Error('Current state cannot produce an access token'));\n }\n\n if (!scope) {\n scope = filterScope('spark:kms', this.config.scope);\n }\n\n scope = sortScope(scope);\n\n if (scope === sortScope(this.config.scope)) {\n return Promise.resolve(this.supertoken);\n }\n\n const token = this.userTokens.get(scope);\n\n // we should also check for the token.access_token since token object does\n // not get cleared on unsetting while logging out.\n if (!token || !token.access_token) {\n return this.downscope(scope)\n .then(tap((t) => this.userTokens.add(t)));\n }\n\n return Promise.resolve(token);\n });\n },\n\n @persist('@')\n /**\n * Initializer\n * @instance\n * @memberof Credentials\n * @param {Object} attrs\n * @param {Object} options\n * @private\n * @returns {Credentials}\n */\n initialize(attrs, options) {\n if (attrs) {\n if (typeof attrs === 'string') {\n this.supertoken = attrs;\n }\n\n if (attrs.access_token) {\n this.supertoken = attrs;\n }\n\n if (attrs.authorization) {\n if (attrs.authorization.supertoken) {\n this.supertoken = attrs.authorization.supertoken;\n }\n else {\n this.supertoken = attrs.authorization;\n }\n }\n\n // schedule refresh\n if (this.supertoken && this.supertoken.expires) {\n this.scheduleRefresh(this.supertoken.expires);\n }\n }\n\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n this.listenToOnce(this.parent, 'change:config', () => {\n if (this.config.authorizationString) {\n const parsed = url.parse(this.config.authorizationString, true);\n\n /* eslint-disable camelcase */\n this.config.client_id = parsed.query.client_id;\n this.config.redirect_uri = parsed.query.redirect_uri;\n this.config.scope = parsed.query.scope;\n this.config.authorizeUrl = parsed.href.substr(0, parsed.href.indexOf('?'));\n /* eslint-enable camelcase */\n }\n });\n\n this.webex.once('loaded', () => {\n this.ready = true;\n });\n },\n\n @oneFlight\n @waitForValue('@')\n /**\n * Clears all tokens from store them from the stores.\n *\n * This is no longer quite the right name for this method, but all of the\n * alternatives I'm coming up with are already taken.\n * @instance\n * @memberof Credentials\n * @returns {Promise}\n */\n invalidate() {\n this.logger.info('credentials: invalidating tokens');\n\n // clear refresh timer\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n this.unset('refreshTimer');\n }\n\n try {\n this.unset('supertoken');\n }\n catch (err) {\n this.logger.warn('credentials: failed to clear supertoken', err);\n }\n\n while (this.userTokens.models.length) {\n try {\n this.userTokens.remove(this.userTokens.models[0]);\n }\n catch (err) {\n this.logger.warn('credentials: failed to remove user token', err);\n }\n }\n\n this.logger.info('credentials: finished removing tokens');\n\n // Return a promise to give the storage layer a tick or two to clear\n // localStorage\n return Promise.resolve();\n },\n\n @oneFlight\n @whileInFlight('isRefreshing')\n @waitForValue('@')\n /**\n * Removes the supertoken and child tokens, then refreshes the supertoken;\n * subsequent calls to {@link Credentials#getUserToken()} will re-downscope\n * child tokens. Enqueus revocation of previous previousTokens. Yes, that's\n * the correct number of \"previous\"es.\n * @instance\n * @memberof Credentials\n * @returns {Promise}\n */\n refresh() {\n this.logger.info('credentials: refresh requested');\n\n const {supertoken} = this;\n const tokens = clone(this.userTokens.models);\n\n // This is kind of a leaky abstraction, since it relies on the authorization\n // plugin, but the only alternatives I see are\n // 1. put all JWT support in core\n // 2. have separate jwt and non-jwt auth plugins\n // while I like #2 from a code simplicity standpoint, the third-party DX\n // isn't great\n if (this.config.jwtRefreshCallback) {\n return this.config.jwtRefreshCallback(this.webex)\n .then((jwt) => this.webex.authorization.requestAccessTokenFromJwt({jwt}));\n }\n\n if (this.webex.internal.services) {\n this.webex.internal.services.updateCredentialsConfig();\n }\n\n return supertoken.refresh()\n .then((st) => {\n // clear refresh timer\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n this.unset('refreshTimer');\n }\n this.supertoken = st;\n\n return Promise.all(tokens.map((token) => this.downscope(token.scope)\n // eslint-disable-next-line max-nested-callbacks\n .then((t) => {\n this.logger.info(`credentials: revoking token for ${token.scope}`);\n\n return token.revoke()\n .catch((err) => {\n this.logger.warn('credentials: failed to revoke user token', err);\n })\n .then(() => {\n this.userTokens.remove(token.scope);\n this.userTokens.add(t);\n });\n })));\n })\n .then(() => {\n this.scheduleRefresh(this.supertoken.expires);\n })\n .catch((error) => {\n const {InvalidRequestError} = grantErrors;\n\n if (error instanceof InvalidRequestError) {\n // Error: The refresh token provided is expired, revoked, malformed, or invalid. Hence emit an event to the client, an opportunity to logout.\n this.unset('supertoken');\n while (this.userTokens.models.length) {\n try {\n this.userTokens.remove(this.userTokens.models[0]);\n }\n catch (err) {\n this.logger.warn('credentials: failed to remove user token', err);\n }\n }\n this.webex.trigger('client:InvalidRequestError');\n }\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Schedules a token refresh or refreshes the token if token has expired\n * @instance\n * @memberof Credentials\n * @param {number} expires\n * @private\n * @returns {undefined}\n */\n scheduleRefresh(expires) {\n const expiresIn = expires - Date.now();\n\n if (expiresIn > 0) {\n const timeoutLength = this.calcRefreshTimeout(expiresIn);\n\n this.refreshTimer = safeSetTimeout(() => this.refresh(), timeoutLength);\n }\n else {\n this.refresh();\n }\n }\n\n});\n\nexport default Credentials;\n"]}
|
|
1
|
+
{"version":3,"names":["Credentials","WebexPlugin","extend","keyFactory","scope","collections","userTokens","TokenCollection","dataTypes","token","Token","dataType","derived","canAuthorize","deps","fn","Boolean","supertoken","canRefresh","config","jwtRefreshCallback","props","prop","namespace","session","isRefreshing","default","type","ready","refreshTimer","undefined","buildLoginUrl","options","clientType","state","Error","client_id","redirect_uri","response_type","base64","toBase64Url","authorizeUrl","querystring","stringify","getOrgId","logger","info","extractOrgIdFromJWT","access_token","e","extractOrgIdFromUserToken","f","decodedJWT","jwt","decode","realm","fields","split","length","buildLogoutUrl","logoutUrl","cisService","service","goto","calcRefreshTimeout","expiration","Math","floor","random","constructor","_dataTypes","forEach","key","set","bind","args","downscope","catch","reason","trace","resolve","serialize","parent","getClientToken","webex","request","method","uri","tokenUrl","form","grant_type","self_contained_token","auth","user","pass","client_secret","sendImmediately","shouldRefreshAccessToken","then","res","body","statusCode","reject","ErrorConstructor","grantErrors","select","error","_res","getUserToken","once","get","t","add","initialize","attrs","authorization","expires","scheduleRefresh","prototype","listenToOnce","authorizationString","parsed","url","parse","query","href","substr","indexOf","invalidate","clearTimeout","unset","err","warn","models","remove","refresh","tokens","requestAccessTokenFromJwt","internal","services","updateCredentialsConfig","st","all","map","revoke","InvalidRequestError","trigger","expiresIn","timeoutLength","oneFlight"],"sources":["credentials.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\nimport url from 'url';\n\nimport jwt from 'jsonwebtoken';\nimport {\n base64,\n makeStateDataType,\n oneFlight,\n tap,\n whileInFlight\n} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {clone, cloneDeep, isObject, isEmpty} from 'lodash';\n\nimport WebexPlugin from '../webex-plugin';\nimport {persist, waitForValue} from '../storage/decorators';\n\nimport grantErrors from './grant-errors';\nimport {filterScope, sortScope} from './scope';\nimport Token from './token';\nimport TokenCollection from './token-collection';\n\n/**\n * @class\n */\nconst Credentials = WebexPlugin.extend({\n collections: {\n userTokens: TokenCollection\n },\n\n dataTypes: {\n token: makeStateDataType(Token, 'token').dataType\n },\n\n derived: {\n canAuthorize: {\n deps: [\n 'supertoken',\n 'supertoken.canAuthorize',\n 'canRefresh'\n ],\n fn() {\n return Boolean(this.supertoken && this.supertoken.canAuthorize || this.canRefresh);\n }\n },\n canRefresh: {\n deps: [\n 'supertoken',\n 'supertoken.canRefresh'\n ],\n fn() {\n // If we're operating in JWT mode, we have to delegate to the consumer\n if (this.config.jwtRefreshCallback) {\n return true;\n }\n\n return Boolean(this.supertoken && this.supertoken.canRefresh);\n }\n }\n },\n\n props: {\n supertoken: makeStateDataType(Token, 'token').prop\n },\n\n namespace: 'Credentials',\n\n session: {\n isRefreshing: {\n default: false,\n type: 'boolean'\n },\n /**\n * Becomes `true` once the {@link loaded} event fires.\n * @see {@link WebexPlugin#ready}\n * @instance\n * @memberof Credentials\n * @type {boolean}\n */\n ready: {\n default: false,\n type: 'boolean'\n },\n refreshTimer: {\n default: undefined,\n type: 'any'\n }\n },\n\n /**\n * Generates an OAuth Login URL. Prefers the api.ciscospark.com proxy if the\n * instance is initialize with an authorizatUrl, but fallsback to idbroker\n * as the base otherwise.\n * @instance\n * @memberof Credentials\n * @param {Object} [options={}]\n * @returns {string}\n */\n buildLoginUrl(options = {clientType: 'public'}) {\n /* eslint-disable camelcase */\n if (options.state && !isObject(options.state)) {\n throw new Error('if specified, `options.state` must be an object');\n }\n\n options.client_id = this.config.client_id;\n options.redirect_uri = this.config.redirect_uri;\n options.scope = this.config.scope;\n\n options = cloneDeep(options);\n\n if (!options.response_type) {\n options.response_type = options.clientType === 'public' ? 'token' : 'code';\n }\n Reflect.deleteProperty(options, 'clientType');\n\n if (options.state) {\n if (!isEmpty(options.state)) {\n options.state = base64.toBase64Url(JSON.stringify(options.state));\n }\n else {\n delete options.state;\n }\n }\n\n return `${this.config.authorizeUrl}?${querystring.stringify(options)}`;\n /* eslint-enable camelcase */\n },\n\n /**\n * Get the determined OrgId.\n *\n * @throws {Error} - If the OrgId could not be determined.\n * @returns {string} - The OrgId.\n */\n getOrgId() {\n this.logger.info(\n 'credentials: attempting to retrieve the OrgId from token'\n );\n\n try {\n // Attempt to extract a client-authenticated token's OrgId.\n this.logger.info('credentials: trying to extract OrgId from JWT');\n\n return this.extractOrgIdFromJWT(this.supertoken.access_token);\n }\n catch (e) {\n // Attempt to extract a user token's OrgId.\n this.logger.info('credentials: could not extract OrgId from JWT');\n this.logger.info(\n 'credentials: attempting to extract OrgId from user token'\n );\n\n try {\n return this.extractOrgIdFromUserToken(this.supertoken?.access_token);\n }\n catch (f) {\n this.logger.info('credentials: could not extract OrgId from user token');\n throw f;\n }\n }\n },\n\n /**\n * Extract the OrgId [realm] from a provided JWT.\n *\n * @private\n * @param {string} token - The JWT to extract the OrgId from.\n * @throws {Error} - If the token does not pass JWT general/realm validation.\n * @returns {string} - The OrgId.\n */\n extractOrgIdFromJWT(token = '') {\n // Decoded the provided token.\n const decodedJWT = jwt.decode(token);\n\n // Validate that the provided token is a JWT.\n if (!decodedJWT) {\n throw new Error('unable to extract the OrgId from the provided JWT');\n }\n\n if (!decodedJWT.realm) {\n throw new Error('the provided JWT does not contain an OrgId');\n }\n\n // Return the OrgId [realm].\n return decodedJWT.realm;\n },\n\n /**\n * Extract the OrgId [realm] from a provided user token.\n *\n * @private\n * @param {string} token - The user token to extract the OrgId from.\n * @throws {Error} - Will throw an error if the provided token is invalid.\n * @returns {string} - The OrgId.\n */\n extractOrgIdFromUserToken(token = '') {\n // Split the provided token into subsections.\n const fields = token.split('_');\n\n // Validate that the provided token has the proper amount of sections.\n if (fields.length !== 3) {\n throw new Error('the provided token is not a valid format');\n }\n\n // Return the token section that contains the OrgId.\n return fields[2];\n },\n\n /**\n * Generates a Logout URL\n * @instance\n * @memberof Credentials\n * @param {Object} [options={}]\n * @returns {[type]}\n */\n buildLogoutUrl(options = {}) {\n return `${this.config.logoutUrl}?${querystring.stringify(Object.assign({\n cisService: this.config.service,\n goto: this.config.redirect_uri\n }, options))}`;\n },\n\n /**\n * Generates a number between 60% - 90% of expired value\n * @instance\n * @memberof Credentials\n * @param {number} expiration\n * @private\n * @returns {number}\n */\n calcRefreshTimeout(expiration) {\n return Math.floor((Math.floor(Math.random() * 4) + 6) / 10 * expiration);\n },\n\n constructor(...args) {\n // HACK to deal with the fact that AmpersandState#dataTypes#set is a pure\n // function.\n this._dataTypes = cloneDeep(this._dataTypes);\n Object.keys(this._dataTypes).forEach((key) => {\n if (this._dataTypes[key].set) {\n this._dataTypes[key].set = this._dataTypes[key].set.bind(this);\n }\n });\n // END HACK\n Reflect.apply(WebexPlugin, this, args);\n },\n\n /**\n * Downscopes a token\n * @instance\n * @memberof Credentials\n * @param {string} scope\n * @private\n * @returns {Promise<Token>}\n */\n downscope(scope) {\n return this.supertoken.downscope(scope)\n .catch((reason) => {\n this.logger.trace(`credentials: failed to downscope supertoken to ${scope}`, reason);\n this.logger.trace(`credentials: falling back to supertoken for ${scope}`);\n\n return Promise.resolve(new Token(Object.assign({scope}, this.supertoken.serialize())), {parent: this});\n });\n },\n\n /**\n * Requests a client credentials grant and returns the token. Given the\n * limited use for such tokens as this time, this method does not cache its\n * token.\n * @instance\n * @memberof Credentials\n * @param {Object} options\n * @returns {Promise<Token>}\n */\n getClientToken(options = {}) {\n this.logger.info('credentials: requesting client credentials grant');\n\n return this.webex.request({\n /* eslint-disable camelcase */\n method: 'POST',\n uri: options.uri || this.config.tokenUrl,\n form: {\n grant_type: 'client_credentials',\n scope: options.scope || 'webexsquare:admin',\n self_contained_token: true\n },\n auth: {\n user: this.config.client_id,\n pass: this.config.client_secret,\n sendImmediately: true\n },\n shouldRefreshAccessToken: false\n /* eslint-enable camelcase */\n })\n .then((res) => new Token(res.body, {parent: this}))\n .catch((res) => {\n if (res.statusCode !== 400) {\n return Promise.reject(res);\n }\n\n const ErrorConstructor = grantErrors.select(res.body.error);\n\n return Promise.reject(new ErrorConstructor(res._res || res));\n });\n },\n\n @oneFlight({keyFactory: (scope) => scope})\n @waitForValue('@')\n /**\n * Resolves with a token with the specified scopes. If no scope is specified,\n * defaults to omit(webex.credentials.scope, 'spark:kms'). If no such token is\n * available, downscopes the supertoken to that scope.\n * @instance\n * @memberof Credentials\n * @param {string} scope\n * @returns {Promise<Token>}\n */\n getUserToken(scope) {\n return Promise.resolve(!this.isRefreshing || new Promise((resolve) => {\n this.logger.info('credentials: token refresh inflight; delaying getUserToken until refresh completes');\n this.once('change:isRefreshing', () => {\n this.logger.info('credentials: token refresh complete; reinvoking getUserToken');\n resolve();\n });\n }))\n .then(() => {\n if (!this.canAuthorize) {\n this.logger.info('credentials: cannot produce an access token from current state');\n\n return Promise.reject(new Error('Current state cannot produce an access token'));\n }\n\n if (!scope) {\n scope = filterScope('spark:kms', this.config.scope);\n }\n\n scope = sortScope(scope);\n\n if (scope === sortScope(this.config.scope)) {\n return Promise.resolve(this.supertoken);\n }\n\n const token = this.userTokens.get(scope);\n\n // we should also check for the token.access_token since token object does\n // not get cleared on unsetting while logging out.\n if (!token || !token.access_token) {\n return this.downscope(scope)\n .then(tap((t) => this.userTokens.add(t)));\n }\n\n return Promise.resolve(token);\n });\n },\n\n @persist('@')\n /**\n * Initializer\n * @instance\n * @memberof Credentials\n * @param {Object} attrs\n * @param {Object} options\n * @private\n * @returns {Credentials}\n */\n initialize(attrs, options) {\n if (attrs) {\n if (typeof attrs === 'string') {\n this.supertoken = attrs;\n }\n\n if (attrs.access_token) {\n this.supertoken = attrs;\n }\n\n if (attrs.authorization) {\n if (attrs.authorization.supertoken) {\n this.supertoken = attrs.authorization.supertoken;\n }\n else {\n this.supertoken = attrs.authorization;\n }\n }\n\n // schedule refresh\n if (this.supertoken && this.supertoken.expires) {\n this.scheduleRefresh(this.supertoken.expires);\n }\n }\n\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n this.listenToOnce(this.parent, 'change:config', () => {\n if (this.config.authorizationString) {\n const parsed = url.parse(this.config.authorizationString, true);\n\n /* eslint-disable camelcase */\n this.config.client_id = parsed.query.client_id;\n this.config.redirect_uri = parsed.query.redirect_uri;\n this.config.scope = parsed.query.scope;\n this.config.authorizeUrl = parsed.href.substr(0, parsed.href.indexOf('?'));\n /* eslint-enable camelcase */\n }\n });\n\n this.webex.once('loaded', () => {\n this.ready = true;\n });\n },\n\n @oneFlight\n @waitForValue('@')\n /**\n * Clears all tokens from store them from the stores.\n *\n * This is no longer quite the right name for this method, but all of the\n * alternatives I'm coming up with are already taken.\n * @instance\n * @memberof Credentials\n * @returns {Promise}\n */\n invalidate() {\n this.logger.info('credentials: invalidating tokens');\n\n // clear refresh timer\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n this.unset('refreshTimer');\n }\n\n try {\n this.unset('supertoken');\n }\n catch (err) {\n this.logger.warn('credentials: failed to clear supertoken', err);\n }\n\n while (this.userTokens.models.length) {\n try {\n this.userTokens.remove(this.userTokens.models[0]);\n }\n catch (err) {\n this.logger.warn('credentials: failed to remove user token', err);\n }\n }\n\n this.logger.info('credentials: finished removing tokens');\n\n // Return a promise to give the storage layer a tick or two to clear\n // localStorage\n return Promise.resolve();\n },\n\n @oneFlight\n @whileInFlight('isRefreshing')\n @waitForValue('@')\n /**\n * Removes the supertoken and child tokens, then refreshes the supertoken;\n * subsequent calls to {@link Credentials#getUserToken()} will re-downscope\n * child tokens. Enqueus revocation of previous previousTokens. Yes, that's\n * the correct number of \"previous\"es.\n * @instance\n * @memberof Credentials\n * @returns {Promise}\n */\n refresh() {\n this.logger.info('credentials: refresh requested');\n\n const {supertoken} = this;\n const tokens = clone(this.userTokens.models);\n\n // This is kind of a leaky abstraction, since it relies on the authorization\n // plugin, but the only alternatives I see are\n // 1. put all JWT support in core\n // 2. have separate jwt and non-jwt auth plugins\n // while I like #2 from a code simplicity standpoint, the third-party DX\n // isn't great\n if (this.config.jwtRefreshCallback) {\n return this.config.jwtRefreshCallback(this.webex)\n .then((jwt) => this.webex.authorization.requestAccessTokenFromJwt({jwt}));\n }\n\n if (this.webex.internal.services) {\n this.webex.internal.services.updateCredentialsConfig();\n }\n\n return supertoken.refresh()\n .then((st) => {\n // clear refresh timer\n if (this.refreshTimer) {\n clearTimeout(this.refreshTimer);\n this.unset('refreshTimer');\n }\n this.supertoken = st;\n\n return Promise.all(tokens.map((token) => this.downscope(token.scope)\n // eslint-disable-next-line max-nested-callbacks\n .then((t) => {\n this.logger.info(`credentials: revoking token for ${token.scope}`);\n\n return token.revoke()\n .catch((err) => {\n this.logger.warn('credentials: failed to revoke user token', err);\n })\n .then(() => {\n this.userTokens.remove(token.scope);\n this.userTokens.add(t);\n });\n })));\n })\n .then(() => {\n this.scheduleRefresh(this.supertoken.expires);\n })\n .catch((error) => {\n const {InvalidRequestError} = grantErrors;\n\n if (error instanceof InvalidRequestError) {\n // Error: The refresh token provided is expired, revoked, malformed, or invalid. Hence emit an event to the client, an opportunity to logout.\n this.unset('supertoken');\n while (this.userTokens.models.length) {\n try {\n this.userTokens.remove(this.userTokens.models[0]);\n }\n catch (err) {\n this.logger.warn('credentials: failed to remove user token', err);\n }\n }\n this.webex.trigger('client:InvalidRequestError');\n }\n\n return Promise.reject(error);\n });\n },\n\n /**\n * Schedules a token refresh or refreshes the token if token has expired\n * @instance\n * @memberof Credentials\n * @param {number} expires\n * @private\n * @returns {undefined}\n */\n scheduleRefresh(expires) {\n const expiresIn = expires - Date.now();\n\n if (expiresIn > 0) {\n const timeoutLength = this.calcRefreshTimeout(expiresIn);\n\n this.refreshTimer = safeSetTimeout(() => this.refresh(), timeoutLength);\n }\n else {\n this.refresh();\n }\n }\n\n});\n\nexport default Credentials;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AACA;;AAEA;;AACA;;AAOA;;AAGA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;AAEA;AACA;AACA;AACA,IAAMA,WAAW,GAAGC,qBAAYC,MAAZ,SAyRjB,uBAAU;EAACC,UAAU,EAAE,oBAACC,KAAD;IAAA,OAAWA,KAAX;EAAA;AAAb,CAAV,CAzRiB,UA0RjB,8BAAa,GAAb,CA1RiB,UA0UjB,yBAAQ,GAAR,CA1UiB,UAkYjB,8BAAa,GAAb,CAlYiB,UA6ajB,2BAAc,cAAd,CA7aiB,UA8ajB,8BAAa,GAAb,CA9aiB,UAAmB;EACrCC,WAAW,EAAE;IACXC,UAAU,EAAEC;EADD,CADwB;EAKrCC,SAAS,EAAE;IACTC,KAAK,EAAE,+BAAkBC,cAAlB,EAAyB,OAAzB,EAAkCC;EADhC,CAL0B;EASrCC,OAAO,EAAE;IACPC,YAAY,EAAE;MACZC,IAAI,EAAE,CACJ,YADI,EAEJ,yBAFI,EAGJ,YAHI,CADM;MAMZC,EANY,gBAMP;QACH,OAAOC,OAAO,CAAC,KAAKC,UAAL,IAAmB,KAAKA,UAAL,CAAgBJ,YAAnC,IAAmD,KAAKK,UAAzD,CAAd;MACD;IARW,CADP;IAWPA,UAAU,EAAE;MACVJ,IAAI,EAAE,CACJ,YADI,EAEJ,uBAFI,CADI;MAKVC,EALU,gBAKL;QACH;QACA,IAAI,KAAKI,MAAL,CAAYC,kBAAhB,EAAoC;UAClC,OAAO,IAAP;QACD;;QAED,OAAOJ,OAAO,CAAC,KAAKC,UAAL,IAAmB,KAAKA,UAAL,CAAgBC,UAApC,CAAd;MACD;IAZS;EAXL,CAT4B;EAoCrCG,KAAK,EAAE;IACLJ,UAAU,EAAE,+BAAkBP,cAAlB,EAAyB,OAAzB,EAAkCY;EADzC,CApC8B;EAwCrCC,SAAS,EAAE,aAxC0B;EA0CrCC,OAAO,EAAE;IACPC,YAAY,EAAE;MACZC,OAAO,EAAE,KADG;MAEZC,IAAI,EAAE;IAFM,CADP;;IAKP;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,KAAK,EAAE;MACLF,OAAO,EAAE,KADJ;MAELC,IAAI,EAAE;IAFD,CAZA;IAgBPE,YAAY,EAAE;MACZH,OAAO,EAAEI,SADG;MAEZH,IAAI,EAAE;IAFM;EAhBP,CA1C4B;;EAgErC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEI,aAzEqC,2BAyEW;IAAA,IAAlCC,OAAkC,uEAAxB;MAACC,UAAU,EAAE;IAAb,CAAwB;;IAC9C;IACA,IAAID,OAAO,CAACE,KAAR,IAAiB,CAAC,wBAASF,OAAO,CAACE,KAAjB,CAAtB,EAA+C;MAC7C,MAAM,IAAIC,KAAJ,CAAU,iDAAV,CAAN;IACD;;IAEDH,OAAO,CAACI,SAAR,GAAoB,KAAKjB,MAAL,CAAYiB,SAAhC;IACAJ,OAAO,CAACK,YAAR,GAAuB,KAAKlB,MAAL,CAAYkB,YAAnC;IACAL,OAAO,CAAC5B,KAAR,GAAgB,KAAKe,MAAL,CAAYf,KAA5B;IAEA4B,OAAO,GAAG,yBAAUA,OAAV,CAAV;;IAEA,IAAI,CAACA,OAAO,CAACM,aAAb,EAA4B;MAC1BN,OAAO,CAACM,aAAR,GAAwBN,OAAO,CAACC,UAAR,KAAuB,QAAvB,GAAkC,OAAlC,GAA4C,MAApE;IACD;;IACD,6BAAuBD,OAAvB,EAAgC,YAAhC;;IAEA,IAAIA,OAAO,CAACE,KAAZ,EAAmB;MACjB,IAAI,CAAC,uBAAQF,OAAO,CAACE,KAAhB,CAAL,EAA6B;QAC3BF,OAAO,CAACE,KAAR,GAAgBK,eAAOC,WAAP,CAAmB,wBAAeR,OAAO,CAACE,KAAvB,CAAnB,CAAhB;MACD,CAFD,MAGK;QACH,OAAOF,OAAO,CAACE,KAAf;MACD;IACF;;IAED,iBAAU,KAAKf,MAAL,CAAYsB,YAAtB,cAAsCC,qBAAYC,SAAZ,CAAsBX,OAAtB,CAAtC;IACA;EACD,CArGoC;;EAuGrC;AACF;AACA;AACA;AACA;AACA;EACEY,QA7GqC,sBA6G1B;IACT,KAAKC,MAAL,CAAYC,IAAZ,CACE,0DADF;;IAIA,IAAI;MACF;MACA,KAAKD,MAAL,CAAYC,IAAZ,CAAiB,+CAAjB;MAEA,OAAO,KAAKC,mBAAL,CAAyB,KAAK9B,UAAL,CAAgB+B,YAAzC,CAAP;IACD,CALD,CAMA,OAAOC,CAAP,EAAU;MACR;MACA,KAAKJ,MAAL,CAAYC,IAAZ,CAAiB,+CAAjB;MACA,KAAKD,MAAL,CAAYC,IAAZ,CACE,0DADF;;MAIA,IAAI;QAAA;;QACF,OAAO,KAAKI,yBAAL,qBAA+B,KAAKjC,UAApC,qDAA+B,iBAAiB+B,YAAhD,CAAP;MACD,CAFD,CAGA,OAAOG,CAAP,EAAU;QACR,KAAKN,MAAL,CAAYC,IAAZ,CAAiB,sDAAjB;QACA,MAAMK,CAAN;MACD;IACF;EACF,CAvIoC;;EAyIrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEJ,mBAjJqC,iCAiJL;IAAA,IAAZtC,KAAY,uEAAJ,EAAI;;IAC9B;IACA,IAAM2C,UAAU,GAAGC,sBAAIC,MAAJ,CAAW7C,KAAX,CAAnB,CAF8B,CAI9B;;;IACA,IAAI,CAAC2C,UAAL,EAAiB;MACf,MAAM,IAAIjB,KAAJ,CAAU,mDAAV,CAAN;IACD;;IAED,IAAI,CAACiB,UAAU,CAACG,KAAhB,EAAuB;MACrB,MAAM,IAAIpB,KAAJ,CAAU,4CAAV,CAAN;IACD,CAX6B,CAa9B;;;IACA,OAAOiB,UAAU,CAACG,KAAlB;EACD,CAhKoC;;EAkKrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEL,yBA1KqC,uCA0KC;IAAA,IAAZzC,KAAY,uEAAJ,EAAI;IACpC;IACA,IAAM+C,MAAM,GAAG/C,KAAK,CAACgD,KAAN,CAAY,GAAZ,CAAf,CAFoC,CAIpC;;IACA,IAAID,MAAM,CAACE,MAAP,KAAkB,CAAtB,EAAyB;MACvB,MAAM,IAAIvB,KAAJ,CAAU,0CAAV,CAAN;IACD,CAPmC,CASpC;;;IACA,OAAOqB,MAAM,CAAC,CAAD,CAAb;EACD,CArLoC;;EAuLrC;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,cA9LqC,4BA8LR;IAAA,IAAd3B,OAAc,uEAAJ,EAAI;IAC3B,iBAAU,KAAKb,MAAL,CAAYyC,SAAtB,cAAmClB,qBAAYC,SAAZ,CAAsB,qBAAc;MACrEkB,UAAU,EAAE,KAAK1C,MAAL,CAAY2C,OAD6C;MAErEC,IAAI,EAAE,KAAK5C,MAAL,CAAYkB;IAFmD,CAAd,EAGtDL,OAHsD,CAAtB,CAAnC;EAID,CAnMoC;;EAqMrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEgC,kBA7MqC,8BA6MlBC,UA7MkB,EA6MN;IAC7B,OAAOC,IAAI,CAACC,KAAL,CAAW,CAACD,IAAI,CAACC,KAAL,CAAWD,IAAI,CAACE,MAAL,KAAgB,CAA3B,IAAgC,CAAjC,IAAsC,EAAtC,GAA2CH,UAAtD,CAAP;EACD,CA/MoC;EAiNrCI,WAjNqC,yBAiNhB;IAAA;;IACnB;IACA;IACA,KAAKC,UAAL,GAAkB,yBAAU,KAAKA,UAAf,CAAlB;IACA,mBAAY,KAAKA,UAAjB,EAA6BC,OAA7B,CAAqC,UAACC,GAAD,EAAS;MAC5C,IAAI,KAAI,CAACF,UAAL,CAAgBE,GAAhB,EAAqBC,GAAzB,EAA8B;QAC5B,KAAI,CAACH,UAAL,CAAgBE,GAAhB,EAAqBC,GAArB,GAA2B,KAAI,CAACH,UAAL,CAAgBE,GAAhB,EAAqBC,GAArB,CAAyBC,IAAzB,CAA8B,KAA9B,CAA3B;MACD;IACF,CAJD,EAJmB,CASnB;;IATmB,kCAANC,IAAM;MAANA,IAAM;IAAA;;IAUnB,oBAAc1E,oBAAd,EAA2B,IAA3B,EAAiC0E,IAAjC;EACD,CA5NoC;;EA8NrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,SAtOqC,qBAsO3BxE,KAtO2B,EAsOpB;IAAA;;IACf,OAAO,KAAKa,UAAL,CAAgB2D,SAAhB,CAA0BxE,KAA1B,EACJyE,KADI,CACE,UAACC,MAAD,EAAY;MACjB,MAAI,CAACjC,MAAL,CAAYkC,KAAZ,0DAAoE3E,KAApE,GAA6E0E,MAA7E;;MACA,MAAI,CAACjC,MAAL,CAAYkC,KAAZ,uDAAiE3E,KAAjE;;MAEA,OAAO,iBAAQ4E,OAAR,CAAgB,IAAItE,cAAJ,CAAU,qBAAc;QAACN,KAAK,EAALA;MAAD,CAAd,EAAuB,MAAI,CAACa,UAAL,CAAgBgE,SAAhB,EAAvB,CAAV,CAAhB,EAAgF;QAACC,MAAM,EAAE;MAAT,CAAhF,CAAP;IACD,CANI,CAAP;EAOD,CA9OoC;;EAgPrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,cAzPqC,4BAyPR;IAAA;;IAAA,IAAdnD,OAAc,uEAAJ,EAAI;IAC3B,KAAKa,MAAL,CAAYC,IAAZ,CAAiB,kDAAjB;IAEA,OAAO,KAAKsC,KAAL,CAAWC,OAAX,CAAmB;MACxB;MACAC,MAAM,EAAE,MAFgB;MAGxBC,GAAG,EAAEvD,OAAO,CAACuD,GAAR,IAAe,KAAKpE,MAAL,CAAYqE,QAHR;MAIxBC,IAAI,EAAE;QACJC,UAAU,EAAE,oBADR;QAEJtF,KAAK,EAAE4B,OAAO,CAAC5B,KAAR,IAAiB,mBAFpB;QAGJuF,oBAAoB,EAAE;MAHlB,CAJkB;MASxBC,IAAI,EAAE;QACJC,IAAI,EAAE,KAAK1E,MAAL,CAAYiB,SADd;QAEJ0D,IAAI,EAAE,KAAK3E,MAAL,CAAY4E,aAFd;QAGJC,eAAe,EAAE;MAHb,CATkB;MAcxBC,wBAAwB,EAAE;MAC1B;;IAfwB,CAAnB,EAiBJC,IAjBI,CAiBC,UAACC,GAAD;MAAA,OAAS,IAAIzF,cAAJ,CAAUyF,GAAG,CAACC,IAAd,EAAoB;QAAClB,MAAM,EAAE;MAAT,CAApB,CAAT;IAAA,CAjBD,EAkBJL,KAlBI,CAkBE,UAACsB,GAAD,EAAS;MACd,IAAIA,GAAG,CAACE,UAAJ,KAAmB,GAAvB,EAA4B;QAC1B,OAAO,iBAAQC,MAAR,CAAeH,GAAf,CAAP;MACD;;MAED,IAAMI,gBAAgB,GAAGC,qBAAYC,MAAZ,CAAmBN,GAAG,CAACC,IAAJ,CAASM,KAA5B,CAAzB;;MAEA,OAAO,iBAAQJ,MAAR,CAAe,IAAIC,gBAAJ,CAAqBJ,GAAG,CAACQ,IAAJ,IAAYR,GAAjC,CAAf,CAAP;IACD,CA1BI,CAAP;EA2BD,CAvRoC;;EA2RrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACES,YApSqC,wBAoSxBxG,KApSwB,EAoSjB;IAAA;;IAClB,OAAO,iBAAQ4E,OAAR,CAAgB,CAAC,KAAKvD,YAAN,IAAsB,qBAAY,UAACuD,OAAD,EAAa;MACpE,MAAI,CAACnC,MAAL,CAAYC,IAAZ,CAAiB,oFAAjB;;MACA,MAAI,CAAC+D,IAAL,CAAU,qBAAV,EAAiC,YAAM;QACrC,MAAI,CAAChE,MAAL,CAAYC,IAAZ,CAAiB,8DAAjB;;QACAkC,OAAO;MACR,CAHD;IAID,CAN4C,CAAtC,EAOJkB,IAPI,CAOC,YAAM;MACV,IAAI,CAAC,MAAI,CAACrF,YAAV,EAAwB;QACtB,MAAI,CAACgC,MAAL,CAAYC,IAAZ,CAAiB,gEAAjB;;QAEA,OAAO,iBAAQwD,MAAR,CAAe,IAAInE,KAAJ,CAAU,8CAAV,CAAf,CAAP;MACD;;MAED,IAAI,CAAC/B,KAAL,EAAY;QACVA,KAAK,GAAG,wBAAY,WAAZ,EAAyB,MAAI,CAACe,MAAL,CAAYf,KAArC,CAAR;MACD;;MAEDA,KAAK,GAAG,sBAAUA,KAAV,CAAR;;MAEA,IAAIA,KAAK,KAAK,sBAAU,MAAI,CAACe,MAAL,CAAYf,KAAtB,CAAd,EAA4C;QAC1C,OAAO,iBAAQ4E,OAAR,CAAgB,MAAI,CAAC/D,UAArB,CAAP;MACD;;MAED,IAAMR,KAAK,GAAG,MAAI,CAACH,UAAL,CAAgBwG,GAAhB,CAAoB1G,KAApB,CAAd,CAjBU,CAmBV;MACA;;;MACA,IAAI,CAACK,KAAD,IAAU,CAACA,KAAK,CAACuC,YAArB,EAAmC;QACjC,OAAO,MAAI,CAAC4B,SAAL,CAAexE,KAAf,EACJ8F,IADI,CACC,iBAAI,UAACa,CAAD;UAAA,OAAO,MAAI,CAACzG,UAAL,CAAgB0G,GAAhB,CAAoBD,CAApB,CAAP;QAAA,CAAJ,CADD,CAAP;MAED;;MAED,OAAO,iBAAQ/B,OAAR,CAAgBvE,KAAhB,CAAP;IACD,CAlCI,CAAP;EAmCD,CAxUoC;;EA2UrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEwG,UApVqC,sBAoV1BC,KApV0B,EAoVnBlF,OApVmB,EAoVV;IAAA;;IACzB,IAAIkF,KAAJ,EAAW;MACT,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;QAC7B,KAAKjG,UAAL,GAAkBiG,KAAlB;MACD;;MAED,IAAIA,KAAK,CAAClE,YAAV,EAAwB;QACtB,KAAK/B,UAAL,GAAkBiG,KAAlB;MACD;;MAED,IAAIA,KAAK,CAACC,aAAV,EAAyB;QACvB,IAAID,KAAK,CAACC,aAAN,CAAoBlG,UAAxB,EAAoC;UAClC,KAAKA,UAAL,GAAkBiG,KAAK,CAACC,aAAN,CAAoBlG,UAAtC;QACD,CAFD,MAGK;UACH,KAAKA,UAAL,GAAkBiG,KAAK,CAACC,aAAxB;QACD;MACF,CAhBQ,CAkBT;;;MACA,IAAI,KAAKlG,UAAL,IAAmB,KAAKA,UAAL,CAAgBmG,OAAvC,EAAgD;QAC9C,KAAKC,eAAL,CAAqB,KAAKpG,UAAL,CAAgBmG,OAArC;MACD;IACF;;IAED,oBAAcnH,qBAAYqH,SAAZ,CAAsBL,UAApC,EAAgD,IAAhD,EAAsD,CAACC,KAAD,EAAQlF,OAAR,CAAtD;IAEA,KAAKuF,YAAL,CAAkB,KAAKrC,MAAvB,EAA+B,eAA/B,EAAgD,YAAM;MACpD,IAAI,MAAI,CAAC/D,MAAL,CAAYqG,mBAAhB,EAAqC;QACnC,IAAMC,MAAM,GAAGC,aAAIC,KAAJ,CAAU,MAAI,CAACxG,MAAL,CAAYqG,mBAAtB,EAA2C,IAA3C,CAAf;QAEA;;;QACA,MAAI,CAACrG,MAAL,CAAYiB,SAAZ,GAAwBqF,MAAM,CAACG,KAAP,CAAaxF,SAArC;QACA,MAAI,CAACjB,MAAL,CAAYkB,YAAZ,GAA2BoF,MAAM,CAACG,KAAP,CAAavF,YAAxC;QACA,MAAI,CAAClB,MAAL,CAAYf,KAAZ,GAAoBqH,MAAM,CAACG,KAAP,CAAaxH,KAAjC;QACA,MAAI,CAACe,MAAL,CAAYsB,YAAZ,GAA2BgF,MAAM,CAACI,IAAP,CAAYC,MAAZ,CAAmB,CAAnB,EAAsBL,MAAM,CAACI,IAAP,CAAYE,OAAZ,CAAoB,GAApB,CAAtB,CAA3B;QACA;MACD;IACF,CAXD;IAaA,KAAK3C,KAAL,CAAWyB,IAAX,CAAgB,QAAhB,EAA0B,YAAM;MAC9B,MAAI,CAACjF,KAAL,GAAa,IAAb;IACD,CAFD;EAGD,CA/XoC;;EAmYrC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEoG,UA5YqC,wBA4YxB;IACX,KAAKnF,MAAL,CAAYC,IAAZ,CAAiB,kCAAjB,EADW,CAGX;;IACA,IAAI,KAAKjB,YAAT,EAAuB;MACrBoG,YAAY,CAAC,KAAKpG,YAAN,CAAZ;MACA,KAAKqG,KAAL,CAAW,cAAX;IACD;;IAED,IAAI;MACF,KAAKA,KAAL,CAAW,YAAX;IACD,CAFD,CAGA,OAAOC,GAAP,EAAY;MACV,KAAKtF,MAAL,CAAYuF,IAAZ,CAAiB,yCAAjB,EAA4DD,GAA5D;IACD;;IAED,OAAO,KAAK7H,UAAL,CAAgB+H,MAAhB,CAAuB3E,MAA9B,EAAsC;MACpC,IAAI;QACF,KAAKpD,UAAL,CAAgBgI,MAAhB,CAAuB,KAAKhI,UAAL,CAAgB+H,MAAhB,CAAuB,CAAvB,CAAvB;MACD,CAFD,CAGA,OAAOF,GAAP,EAAY;QACV,KAAKtF,MAAL,CAAYuF,IAAZ,CAAiB,0CAAjB,EAA6DD,GAA7D;MACD;IACF;;IAED,KAAKtF,MAAL,CAAYC,IAAZ,CAAiB,uCAAjB,EAzBW,CA2BX;IACA;;IACA,OAAO,iBAAQkC,OAAR,EAAP;EACD,CA1aoC;;EA+arC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEuD,OAxbqC,qBAwb3B;IAAA;;IACR,KAAK1F,MAAL,CAAYC,IAAZ,CAAiB,gCAAjB;IAEA,IAAO7B,UAAP,GAAqB,IAArB,CAAOA,UAAP;IACA,IAAMuH,MAAM,GAAG,qBAAM,KAAKlI,UAAL,CAAgB+H,MAAtB,CAAf,CAJQ,CAMR;IACA;IACA;IACA;IACA;IACA;;IACA,IAAI,KAAKlH,MAAL,CAAYC,kBAAhB,EAAoC;MAClC,OAAO,KAAKD,MAAL,CAAYC,kBAAZ,CAA+B,KAAKgE,KAApC,EACJc,IADI,CACC,UAAC7C,GAAD;QAAA,OAAS,MAAI,CAAC+B,KAAL,CAAW+B,aAAX,CAAyBsB,yBAAzB,CAAmD;UAACpF,GAAG,EAAHA;QAAD,CAAnD,CAAT;MAAA,CADD,CAAP;IAED;;IAED,IAAI,KAAK+B,KAAL,CAAWsD,QAAX,CAAoBC,QAAxB,EAAkC;MAChC,KAAKvD,KAAL,CAAWsD,QAAX,CAAoBC,QAApB,CAA6BC,uBAA7B;IACD;;IAED,OAAO3H,UAAU,CAACsH,OAAX,GACJrC,IADI,CACC,UAAC2C,EAAD,EAAQ;MACZ;MACA,IAAI,MAAI,CAAChH,YAAT,EAAuB;QACrBoG,YAAY,CAAC,MAAI,CAACpG,YAAN,CAAZ;;QACA,MAAI,CAACqG,KAAL,CAAW,cAAX;MACD;;MACD,MAAI,CAACjH,UAAL,GAAkB4H,EAAlB;MAEA,OAAO,iBAAQC,GAAR,CAAYN,MAAM,CAACO,GAAP,CAAW,UAACtI,KAAD;QAAA,OAAW,MAAI,CAACmE,SAAL,CAAenE,KAAK,CAACL,KAArB,EACvC;QADuC,CAEtC8F,IAFsC,CAEjC,UAACa,CAAD,EAAO;UACX,MAAI,CAAClE,MAAL,CAAYC,IAAZ,2CAAoDrC,KAAK,CAACL,KAA1D;;UAEA,OAAOK,KAAK,CAACuI,MAAN,GACJnE,KADI,CACE,UAACsD,GAAD,EAAS;YACd,MAAI,CAACtF,MAAL,CAAYuF,IAAZ,CAAiB,0CAAjB,EAA6DD,GAA7D;UACD,CAHI,EAIJjC,IAJI,CAIC,YAAM;YACV,MAAI,CAAC5F,UAAL,CAAgBgI,MAAhB,CAAuB7H,KAAK,CAACL,KAA7B;;YACA,MAAI,CAACE,UAAL,CAAgB0G,GAAhB,CAAoBD,CAApB;UACD,CAPI,CAAP;QAQD,CAbsC,CAAX;MAAA,CAAX,CAAZ,CAAP;IAcD,CAvBI,EAwBJb,IAxBI,CAwBC,YAAM;MACV,MAAI,CAACmB,eAAL,CAAqB,MAAI,CAACpG,UAAL,CAAgBmG,OAArC;IACD,CA1BI,EA2BJvC,KA3BI,CA2BE,UAAC6B,KAAD,EAAW;MAChB,IAAOuC,mBAAP,GAA8BzC,oBAA9B,CAAOyC,mBAAP;;MAEA,IAAIvC,KAAK,YAAYuC,mBAArB,EAA0C;QACxC;QACA,MAAI,CAACf,KAAL,CAAW,YAAX;;QACA,OAAO,MAAI,CAAC5H,UAAL,CAAgB+H,MAAhB,CAAuB3E,MAA9B,EAAsC;UACpC,IAAI;YACF,MAAI,CAACpD,UAAL,CAAgBgI,MAAhB,CAAuB,MAAI,CAAChI,UAAL,CAAgB+H,MAAhB,CAAuB,CAAvB,CAAvB;UACD,CAFD,CAGA,OAAOF,GAAP,EAAY;YACV,MAAI,CAACtF,MAAL,CAAYuF,IAAZ,CAAiB,0CAAjB,EAA6DD,GAA7D;UACD;QACF;;QACD,MAAI,CAAC/C,KAAL,CAAW8D,OAAX,CAAmB,4BAAnB;MACD;;MAED,OAAO,iBAAQ5C,MAAR,CAAeI,KAAf,CAAP;IACD,CA7CI,CAAP;EA8CD,CA3foC;;EA6frC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEW,eArgBqC,2BAqgBrBD,OArgBqB,EAqgBZ;IAAA;;IACvB,IAAM+B,SAAS,GAAG/B,OAAO,GAAG,mBAA5B;;IAEA,IAAI+B,SAAS,GAAG,CAAhB,EAAmB;MACjB,IAAMC,aAAa,GAAG,KAAKpF,kBAAL,CAAwBmF,SAAxB,CAAtB;MAEA,KAAKtH,YAAL,GAAoB,kCAAe;QAAA,OAAM,MAAI,CAAC0G,OAAL,EAAN;MAAA,CAAf,EAAqCa,aAArC,CAApB;IACD,CAJD,MAKK;MACH,KAAKb,OAAL;IACD;EACF,CAhhBoC;EAAA;AAAA,CAAnB,0VAiYjBc,iBAjYiB,uIA4ajBA,iBA5aiB,yFAApB;;eAohBerJ,W"}
|
|
@@ -93,7 +93,7 @@ var InvalidRequestError = /*#__PURE__*/function (_OAuthError) {
|
|
|
93
93
|
return _super2.apply(this, arguments);
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
return InvalidRequestError;
|
|
96
|
+
return (0, _createClass2.default)(InvalidRequestError);
|
|
97
97
|
}(OAuthError);
|
|
98
98
|
/**
|
|
99
99
|
* InvalidClientError
|
|
@@ -110,7 +110,7 @@ var InvalidClientError = /*#__PURE__*/function (_OAuthError2) {
|
|
|
110
110
|
return _super3.apply(this, arguments);
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
return InvalidClientError;
|
|
113
|
+
return (0, _createClass2.default)(InvalidClientError);
|
|
114
114
|
}(OAuthError);
|
|
115
115
|
/**
|
|
116
116
|
* InvalidGrantError
|
|
@@ -127,7 +127,7 @@ var InvalidGrantError = /*#__PURE__*/function (_OAuthError3) {
|
|
|
127
127
|
return _super4.apply(this, arguments);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
return InvalidGrantError;
|
|
130
|
+
return (0, _createClass2.default)(InvalidGrantError);
|
|
131
131
|
}(OAuthError);
|
|
132
132
|
/**
|
|
133
133
|
* UnauthorizedClientError
|
|
@@ -144,7 +144,7 @@ var UnauthorizedClientError = /*#__PURE__*/function (_OAuthError4) {
|
|
|
144
144
|
return _super5.apply(this, arguments);
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
return UnauthorizedClientError;
|
|
147
|
+
return (0, _createClass2.default)(UnauthorizedClientError);
|
|
148
148
|
}(OAuthError);
|
|
149
149
|
/**
|
|
150
150
|
* UnsupportGrantTypeError
|
|
@@ -161,7 +161,7 @@ var UnsupportGrantTypeError = /*#__PURE__*/function (_OAuthError5) {
|
|
|
161
161
|
return _super6.apply(this, arguments);
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
return UnsupportGrantTypeError;
|
|
164
|
+
return (0, _createClass2.default)(UnsupportGrantTypeError);
|
|
165
165
|
}(OAuthError);
|
|
166
166
|
/**
|
|
167
167
|
* InvalidScopeError
|
|
@@ -178,7 +178,7 @@ var InvalidScopeError = /*#__PURE__*/function (_OAuthError6) {
|
|
|
178
178
|
return _super7.apply(this, arguments);
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
return InvalidScopeError;
|
|
181
|
+
return (0, _createClass2.default)(InvalidScopeError);
|
|
182
182
|
}(OAuthError);
|
|
183
183
|
|
|
184
184
|
var errors = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["OAuthError","res","body","error","enumerable","value","errorDescription","error_description","errorUri","error_uri","Exception","InvalidRequestError","InvalidClientError","InvalidGrantError","UnauthorizedClientError","UnsupportGrantTypeError","InvalidScopeError","errors","invalid_request","invalid_client","invalid_grant","unauthorized_client","unsupported_grant_type","invalid_scope","select","errorString"],"sources":["grant-errors.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint camelcase: [0] */\n\nimport {Exception} from '@webex/common';\n\n/**\n * Error thrown during oauth flow\n */\nexport class OAuthError extends Exception {\n /**\n * @param {HttpResponse} res\n * @returns {string}\n */\n parse(res) {\n // This error may be returned in an HTTPResponse or as part of a querystring\n const body = res.body || res;\n\n Object.defineProperties(this, {\n error: {\n enumerable: true,\n value: body.error\n },\n errorDescription: {\n enumerable: true,\n value: body.error_description\n },\n errorUri: {\n enumerable: true,\n value: body.error_uri\n },\n res: {\n enumerable: false,\n value: res\n }\n });\n\n return this.errorDescription;\n }\n}\n/**\n * InvalidRequestError\n */\nclass InvalidRequestError extends OAuthError {}\n\n/**\n * InvalidClientError\n */\nclass InvalidClientError extends OAuthError {}\n\n/**\n * InvalidGrantError\n */\nclass InvalidGrantError extends OAuthError {}\n\n/**\n * UnauthorizedClientError\n */\nclass UnauthorizedClientError extends OAuthError {}\n\n/**\n * UnsupportGrantTypeError\n */\nclass UnsupportGrantTypeError extends OAuthError {}\n\n/**\n * InvalidScopeError\n */\nclass InvalidScopeError extends OAuthError {}\n\n\nconst errors = {\n OAuthError,\n InvalidRequestError,\n InvalidClientError,\n InvalidGrantError,\n UnauthorizedClientError,\n UnsupportGrantTypeError,\n InvalidScopeError,\n invalid_request: InvalidRequestError,\n invalid_client: InvalidClientError,\n invalid_grant: InvalidGrantError,\n unauthorized_client: UnauthorizedClientError,\n unsupported_grant_type: UnsupportGrantTypeError,\n invalid_scope: InvalidScopeError,\n select(errorString) {\n return errors[errorString] || OAuthError;\n }\n};\n\nexport default errors;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAMA;;;;;;AAEA;AACA;AACA;IACaA,U;;;;;;;;;;;;;IACX;AACF;AACA;AACA;IACE,eAAMC,GAAN,EAAW;MACT;MACA,IAAMC,IAAI,GAAGD,GAAG,CAACC,IAAJ,IAAYD,GAAzB;MAEA,+BAAwB,IAAxB,EAA8B;QAC5BE,KAAK,EAAE;UACLC,UAAU,EAAE,IADP;UAELC,KAAK,EAAEH,IAAI,CAACC;QAFP,CADqB;QAK5BG,gBAAgB,EAAE;UAChBF,UAAU,EAAE,IADI;UAEhBC,KAAK,EAAEH,IAAI,CAACK;QAFI,CALU;QAS5BC,QAAQ,EAAE;UACRJ,UAAU,EAAE,IADJ;UAERC,KAAK,EAAEH,IAAI,CAACO;QAFJ,CATkB;QAa5BR,GAAG,EAAE;UACHG,UAAU,EAAE,KADT;UAEHC,KAAK,EAAEJ;QAFJ;MAbuB,CAA9B;MAmBA,OAAO,KAAKK,gBAAZ;IACD;;;EA7B6BI,iB;AA+BhC;AACA;AACA;;;;;IACMC,mB;;;;;;;;;;;EAA4BX,U;AAElC;AACA;AACA;;;IACMY,kB;;;;;;;;;;;EAA2BZ,U;AAEjC;AACA;AACA;;;IACMa,iB;;;;;;;;;;;EAA0Bb,U;AAEhC;AACA;AACA;;;IACMc,uB;;;;;;;;;;;EAAgCd,U;AAEtC;AACA;AACA;;;IACMe,uB;;;;;;;;;;;EAAgCf,U;AAEtC;AACA;AACA;;;IACMgB,iB;;;;;;;;;;;EAA0BhB,U;;AAGhC,IAAMiB,MAAM,GAAG;EACbjB,UAAU,EAAVA,UADa;EAEbW,mBAAmB,EAAnBA,mBAFa;EAGbC,kBAAkB,EAAlBA,kBAHa;EAIbC,iBAAiB,EAAjBA,iBAJa;EAKbC,uBAAuB,EAAvBA,uBALa;EAMbC,uBAAuB,EAAvBA,uBANa;EAObC,iBAAiB,EAAjBA,iBAPa;EAQbE,eAAe,EAAEP,mBARJ;EASbQ,cAAc,EAAEP,kBATH;EAUbQ,aAAa,EAAEP,iBAVF;EAWbQ,mBAAmB,EAAEP,uBAXR;EAYbQ,sBAAsB,EAAEP,uBAZX;EAabQ,aAAa,EAAEP,iBAbF;EAcbQ,MAda,kBAcNC,WAdM,EAcO;IAClB,OAAOR,MAAM,CAACQ,WAAD,CAAN,IAAuBzB,UAA9B;EACD;AAhBY,CAAf;eAmBeiB,M"}
|