@webex/webex-core 2.60.1-next.9 → 2.60.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/config.js +2 -1
  2. package/dist/config.js.map +1 -1
  3. package/dist/credentials-config.js +2 -1
  4. package/dist/credentials-config.js.map +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/interceptors/auth.js +3 -4
  8. package/dist/interceptors/auth.js.map +1 -1
  9. package/dist/interceptors/default-options.js +3 -4
  10. package/dist/interceptors/default-options.js.map +1 -1
  11. package/dist/interceptors/embargo.js +3 -4
  12. package/dist/interceptors/embargo.js.map +1 -1
  13. package/dist/interceptors/network-timing.js +3 -4
  14. package/dist/interceptors/network-timing.js.map +1 -1
  15. package/dist/interceptors/payload-transformer.js +3 -4
  16. package/dist/interceptors/payload-transformer.js.map +1 -1
  17. package/dist/interceptors/rate-limit.js +3 -4
  18. package/dist/interceptors/rate-limit.js.map +1 -1
  19. package/dist/interceptors/redirect.js +6 -7
  20. package/dist/interceptors/redirect.js.map +1 -1
  21. package/dist/interceptors/request-event.js +8 -9
  22. package/dist/interceptors/request-event.js.map +1 -1
  23. package/dist/interceptors/request-logger.js +15 -12
  24. package/dist/interceptors/request-logger.js.map +1 -1
  25. package/dist/interceptors/request-timing.js +3 -4
  26. package/dist/interceptors/request-timing.js.map +1 -1
  27. package/dist/interceptors/response-logger.js +10 -10
  28. package/dist/interceptors/response-logger.js.map +1 -1
  29. package/dist/interceptors/user-agent.js +7 -8
  30. package/dist/interceptors/user-agent.js.map +1 -1
  31. package/dist/interceptors/webex-tracking-id.js +3 -4
  32. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  33. package/dist/interceptors/webex-user-agent.js +8 -9
  34. package/dist/interceptors/webex-user-agent.js.map +1 -1
  35. package/dist/lib/batcher.js +5 -8
  36. package/dist/lib/batcher.js.map +1 -1
  37. package/dist/lib/credentials/credentials.js +35 -73
  38. package/dist/lib/credentials/credentials.js.map +1 -1
  39. package/dist/lib/credentials/grant-errors.js +5 -5
  40. package/dist/lib/credentials/grant-errors.js.map +1 -1
  41. package/dist/lib/credentials/scope.js +5 -26
  42. package/dist/lib/credentials/scope.js.map +1 -1
  43. package/dist/lib/credentials/token-collection.js +2 -1
  44. package/dist/lib/credentials/token-collection.js.map +1 -1
  45. package/dist/lib/credentials/token.js +10 -14
  46. package/dist/lib/credentials/token.js.map +1 -1
  47. package/dist/lib/page.js +2 -1
  48. package/dist/lib/page.js.map +1 -1
  49. package/dist/lib/services/constants.js +6 -3
  50. package/dist/lib/services/constants.js.map +1 -1
  51. package/dist/lib/services/index.js +2 -2
  52. package/dist/lib/services/index.js.map +1 -1
  53. package/dist/lib/services/interceptors/server-error.js +3 -4
  54. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  55. package/dist/lib/services/interceptors/service.js +5 -8
  56. package/dist/lib/services/interceptors/service.js.map +1 -1
  57. package/dist/lib/services/metrics.js +2 -1
  58. package/dist/lib/services/metrics.js.map +1 -1
  59. package/dist/lib/services/service-catalog.js +5 -5
  60. package/dist/lib/services/service-catalog.js.map +1 -1
  61. package/dist/lib/services/service-fed-ramp.js +2 -1
  62. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  63. package/dist/lib/services/service-host.js +2 -1
  64. package/dist/lib/services/service-host.js.map +1 -1
  65. package/dist/lib/services/service-registry.js +4 -3
  66. package/dist/lib/services/service-registry.js.map +1 -1
  67. package/dist/lib/services/service-state.js +2 -1
  68. package/dist/lib/services/service-state.js.map +1 -1
  69. package/dist/lib/services/service-url.js +2 -1
  70. package/dist/lib/services/service-url.js.map +1 -1
  71. package/dist/lib/services/services.js +9 -7
  72. package/dist/lib/services/services.js.map +1 -1
  73. package/dist/lib/stateless-webex-plugin.js +2 -1
  74. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  75. package/dist/lib/storage/decorators.js +16 -18
  76. package/dist/lib/storage/decorators.js.map +1 -1
  77. package/dist/lib/storage/errors.js +5 -5
  78. package/dist/lib/storage/errors.js.map +1 -1
  79. package/dist/lib/storage/make-webex-plugin-store.js +10 -8
  80. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  81. package/dist/lib/storage/make-webex-store.js.map +1 -1
  82. package/dist/lib/storage/memory-store-adapter.js +2 -1
  83. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  84. package/dist/lib/webex-core-plugin-mixin.js +14 -13
  85. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  86. package/dist/lib/webex-http-error.js +3 -4
  87. package/dist/lib/webex-http-error.js.map +1 -1
  88. package/dist/lib/webex-internal-core-plugin-mixin.js +14 -13
  89. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  90. package/dist/lib/webex-plugin.js +8 -5
  91. package/dist/lib/webex-plugin.js.map +1 -1
  92. package/dist/plugins/logger.js +3 -2
  93. package/dist/plugins/logger.js.map +1 -1
  94. package/dist/webex-core.js +38 -37
  95. package/dist/webex-core.js.map +1 -1
  96. package/dist/webex-internal-core.js +2 -1
  97. package/dist/webex-internal-core.js.map +1 -1
  98. package/package.json +20 -21
  99. package/src/lib/credentials/credentials.js +40 -82
  100. package/src/lib/credentials/scope.js +5 -24
  101. package/src/lib/credentials/token.js +1 -9
  102. package/src/lib/services/interceptors/service.js +2 -2
  103. package/src/lib/services/service-catalog.js +1 -3
  104. package/src/lib/services/services.js +0 -1
  105. package/src/webex-core.js +1 -13
  106. package/test/unit/spec/credentials/credentials.js +13 -169
  107. package/test/unit/spec/credentials/token.js +1 -11
  108. package/test/unit/spec/interceptors/auth.js +0 -3
  109. package/test/unit/spec/interceptors/webex-user-agent.js +6 -6
  110. package/test/unit/spec/services/interceptors/service.js +3 -9
  111. package/test/unit/spec/webex-core.js +0 -12
  112. package/dist/lib/constants.js +0 -13
  113. package/dist/lib/constants.js.map +0 -1
  114. package/src/lib/constants.js +0 -6
  115. package/test/unit/spec/credentials/scope.js +0 -80
@@ -7,27 +7,25 @@ _Object$defineProperty(exports, "__esModule", {
7
7
  value: true
8
8
  });
9
9
  exports.default = void 0;
10
+ var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
11
+ var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
14
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
13
15
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
14
16
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
15
17
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
16
- var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
17
- var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
18
+ var _get2 = _interopRequireDefault(require("lodash/get"));
18
19
  var _common = require("@webex/common");
19
20
  var _httpCore = require("@webex/http-core");
20
- var _lodash = require("lodash");
21
21
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
22
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /*!
23
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
24
- */
22
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
25
23
  var strings = new _weakMap.default();
26
24
 
27
25
  /**
28
26
  * @class
29
27
  */
30
- var WebexUserAgentInterceptor = exports.default = /*#__PURE__*/function (_Interceptor) {
28
+ var WebexUserAgentInterceptor = /*#__PURE__*/function (_Interceptor) {
31
29
  (0, _inherits2.default)(WebexUserAgentInterceptor, _Interceptor);
32
30
  var _super = _createSuper(WebexUserAgentInterceptor);
33
31
  /**
@@ -40,8 +38,8 @@ var WebexUserAgentInterceptor = exports.default = /*#__PURE__*/function (_Interc
40
38
  var _this;
41
39
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
42
40
  (0, _classCallCheck2.default)(this, WebexUserAgentInterceptor);
43
- var libName = (0, _lodash.get)(options, 'webex.webex', false) ? 'webex' : 'webex-js-sdk';
44
- var libVersion = (0, _lodash.get)(options, 'webex.version', 'development');
41
+ var libName = (0, _get2.default)(options, 'webex.webex', false) ? 'webex' : 'webex-js-sdk';
42
+ var libVersion = (0, _get2.default)(options, 'webex.version', 'development');
45
43
  _this = _super.call(this, options);
46
44
  strings.set((0, _assertThisInitialized2.default)(_this), "".concat(libName, "/").concat(libVersion, " (").concat(_common.inBrowser ? 'web' : 'node', ")"));
47
45
  return _this;
@@ -97,4 +95,5 @@ var WebexUserAgentInterceptor = exports.default = /*#__PURE__*/function (_Interc
97
95
  }]);
98
96
  return WebexUserAgentInterceptor;
99
97
  }(_httpCore.Interceptor);
98
+ exports.default = WebexUserAgentInterceptor;
100
99
  //# sourceMappingURL=webex-user-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_common","require","_httpCore","_lodash","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","strings","_weakMap","WebexUserAgentInterceptor","exports","_Interceptor","_inherits2","_super","_this","options","length","undefined","_classCallCheck2","libName","get","libVersion","set","_assertThisInitialized2","concat","inBrowser","_createClass2","key","value","onRequest","_this$webex$config","_this$webex","headers","_ref","webex","config","appName","appVersion","appPlatform","sparkUserAgent","uri","includes","credentials","samlUrl","tokenUrl","authorizeUrl","_deleteProperty","create","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 {appName, appVersion, appPlatform} = 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 (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 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":"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"}
1
+ {"version":3,"names":["_common","require","_httpCore","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","strings","_weakMap","WebexUserAgentInterceptor","_Interceptor","_inherits2","_super","_this","options","length","undefined","_classCallCheck2","libName","_get2","libVersion","set","_assertThisInitialized2","concat","inBrowser","_createClass2","key","value","onRequest","_this$webex$config","_this$webex","headers","_ref","webex","config","appName","appVersion","appPlatform","sparkUserAgent","get","uri","includes","credentials","samlUrl","tokenUrl","authorizeUrl","_deleteProperty","create","Interceptor","exports"],"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 {appName, appVersion, appPlatform} = 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 (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 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":"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"}
@@ -8,14 +8,10 @@ _Object$defineProperty(exports, "__esModule", {
8
8
  exports.default = void 0;
9
9
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
10
10
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
11
- var _lodash = require("lodash");
11
+ var _has2 = _interopRequireDefault(require("lodash/has"));
12
12
  var _common = require("@webex/common");
13
13
  var _webexPlugin = _interopRequireDefault(require("./webex-plugin"));
14
14
  var _webexHttpError = _interopRequireDefault(require("./webex-http-error"));
15
- /*!
16
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
17
- */
18
-
19
15
  /**
20
16
  * Base class for coalescing requests to batched APIs
21
17
  * @class Batcher
@@ -173,7 +169,7 @@ var Batcher = _webexPlugin.default.extend({
173
169
  handleHttpError: function handleHttpError(reason) {
174
170
  var _this5 = this;
175
171
  if (reason instanceof _webexHttpError.default) {
176
- if ((0, _lodash.has)(reason, 'options.body.map')) {
172
+ if ((0, _has2.default)(reason, 'options.body.map')) {
177
173
  return _promise.default.all(reason.options.body.map(function (item) {
178
174
  return _this5.getDeferredForRequest(item).then(function (defer) {
179
175
  defer.reject(reason);
@@ -286,7 +282,8 @@ var Batcher = _webexPlugin.default.extend({
286
282
  fingerprintResponse: function fingerprintResponse(item) {
287
283
  throw new Error('fingerprintResponse() must be implemented');
288
284
  },
289
- version: "2.60.1-next.9"
285
+ version: "2.60.2"
290
286
  });
291
- var _default2 = exports.default = Batcher;
287
+ var _default2 = Batcher;
288
+ exports.default = _default2;
292
289
  //# sourceMappingURL=batcher.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_lodash","require","_common","_webexPlugin","_interopRequireDefault","_webexHttpError","Batcher","WebexPlugin","extend","session","deferreds","type","default","_default","_map","queue","derived","bounce","fn","_this","cappedDebounce","executeQueue","apply","arguments","config","batcherWait","maxCalls","batcherMaxCalls","maxWait","batcherMaxWait","request","item","_this2","defer","Defer","fingerprintRequest","then","idx","has","resolve","get","promise","set","prepareItem","req","tap","delete","catch","reason","_promise","reject","enqueue","push","_this3","splice","prepareRequest","payload","submitHttpRequest","res","handleHttpSuccess","WebexHttpError","handleHttpError","all","map","getDeferredForRequest","logger","error","process","env","NODE_ENV","stack","Error","_this4","body","items","acceptItem","_this5","options","_this6","didItemFail","didFail","handleItemFailure","handleItemSuccess","getDeferredForResponse","_this7","_this8","fingerprintResponse","version","_default2","exports"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {has} from 'lodash';\nimport {cappedDebounce, Defer, tap} 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(\n this.prepareRequest(queue)\n .then((payload) =>\n this.submitHttpRequest(payload).then((res) => this.handleHttpSuccess(res))\n )\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(\n queue.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\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(\n ((res.body && res.body.items) || res.body).map((item) => this.acceptItem(item))\n );\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(\n reason.options.body.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\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).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).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).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).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).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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"}
1
+ {"version":3,"names":["_common","require","_webexPlugin","_interopRequireDefault","_webexHttpError","Batcher","WebexPlugin","extend","session","deferreds","type","default","_default","_map","queue","derived","bounce","fn","_this","cappedDebounce","executeQueue","apply","arguments","config","batcherWait","maxCalls","batcherMaxCalls","maxWait","batcherMaxWait","request","item","_this2","defer","Defer","fingerprintRequest","then","idx","has","resolve","get","promise","set","prepareItem","req","tap","delete","catch","reason","_promise","reject","enqueue","push","_this3","splice","prepareRequest","payload","submitHttpRequest","res","handleHttpSuccess","WebexHttpError","handleHttpError","all","map","getDeferredForRequest","logger","error","process","env","NODE_ENV","stack","Error","_this4","body","items","acceptItem","_this5","_has2","options","_this6","didItemFail","didFail","handleItemFailure","handleItemSuccess","getDeferredForResponse","_this7","_this8","fingerprintResponse","version","_default2","exports"],"sources":["batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {has} from 'lodash';\nimport {cappedDebounce, Defer, tap} 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(\n this.prepareRequest(queue)\n .then((payload) =>\n this.submitHttpRequest(payload).then((res) => this.handleHttpSuccess(res))\n )\n .catch((reason) => {\n if (reason instanceof WebexHttpError) {\n return this.handleHttpError(reason);\n }\n\n return Promise.all(\n queue.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\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(\n ((res.body && res.body.items) || res.body).map((item) => this.acceptItem(item))\n );\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(\n reason.options.body.map((item) =>\n this.getDeferredForRequest(item).then((defer) => {\n defer.reject(reason);\n })\n )\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).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).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).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).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).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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"}
@@ -1,13 +1,11 @@
1
1
  "use strict";
2
2
 
3
- var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
3
  var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
5
4
  var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
5
  var _Object$getOwnPropertyDescriptor2 = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
6
  var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
7
  var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
9
8
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
10
- var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
11
9
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
12
10
  _Object$defineProperty(exports, "__esModule", {
13
11
  value: true
@@ -22,27 +20,24 @@ var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/n
22
20
  var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor"));
23
21
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
24
22
  var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/applyDecoratedDescriptor"));
23
+ var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
24
+ var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
25
+ var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
26
+ var _clone2 = _interopRequireDefault(require("lodash/clone"));
25
27
  var _querystring = _interopRequireDefault(require("querystring"));
26
28
  var _url = _interopRequireDefault(require("url"));
27
29
  var _jsonwebtoken = _interopRequireDefault(require("jsonwebtoken"));
28
30
  var _common = require("@webex/common");
29
31
  var _commonTimers = require("@webex/common-timers");
30
- var _lodash = require("lodash");
31
32
  var _webexPlugin = _interopRequireDefault(require("../webex-plugin"));
32
33
  var _decorators = require("../storage/decorators");
33
- var _grantErrors = _interopRequireWildcard(require("./grant-errors"));
34
+ var _grantErrors = _interopRequireDefault(require("./grant-errors"));
34
35
  var _scope = require("./scope");
35
36
  var _token = _interopRequireDefault(require("./token"));
36
37
  var _tokenCollection = _interopRequireDefault(require("./token-collection"));
37
- var _constants = require("../constants");
38
38
  var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _obj;
39
- /*!
40
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
41
- */
42
- function _getRequireWildcardCache(e) { if ("function" != typeof _WeakMap) return null; var r = new _WeakMap(), t = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
43
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = _Object$defineProperty && _Object$getOwnPropertyDescriptor2; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? _Object$getOwnPropertyDescriptor2(e, u) : null; i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
44
- function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor2(e, r).enumerable; })), t.push.apply(t, o); } return t; }
45
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor2(t, r)); }); } return e; }
39
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor2(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
40
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor2(source, key)); }); } return target; }
46
41
  /**
47
42
  * @class
48
43
  */
@@ -73,22 +68,6 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
73
68
  }
74
69
  return Boolean(this.supertoken && this.supertoken.canRefresh);
75
70
  }
76
- },
77
- isUnverifiedGuest: {
78
- deps: ['supertoken'],
79
- /**
80
- * Returns true if the user is an unverified guest
81
- * @returns {boolean}
82
- */
83
- fn: function fn() {
84
- var isGuest = false;
85
- try {
86
- isGuest = JSON.parse(_common.base64.decode(this.supertoken.access_token.split('.')[1])).user_type === 'guest';
87
- } catch (_unused) {
88
- /* the non-guest token is formatted differently so catch is expected */
89
- }
90
- return isGuest;
91
- }
92
71
  }
93
72
  },
94
73
  props: {
@@ -130,19 +109,19 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
130
109
  clientType: 'public'
131
110
  };
132
111
  /* eslint-disable camelcase */
133
- if (options.state && !(0, _lodash.isObject)(options.state)) {
112
+ if (options.state && !(0, _isObject2.default)(options.state)) {
134
113
  throw new Error('if specified, `options.state` must be an object');
135
114
  }
136
115
  options.client_id = this.config.client_id;
137
116
  options.redirect_uri = this.config.redirect_uri;
138
117
  options.scope = this.config.scope;
139
- options = (0, _lodash.cloneDeep)(options);
118
+ options = (0, _cloneDeep2.default)(options);
140
119
  if (!options.response_type) {
141
120
  options.response_type = options.clientType === 'public' ? 'token' : 'code';
142
121
  }
143
122
  (0, _deleteProperty.default)(options, 'clientType');
144
123
  if (options.state) {
145
- if (!(0, _lodash.isEmpty)(options.state)) {
124
+ if (!(0, _isEmpty2.default)(options.state)) {
146
125
  options.state = _common.base64.toBase64Url((0, _stringify.default)(options.state));
147
126
  } else {
148
127
  delete options.state;
@@ -250,7 +229,7 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
250
229
  var _this = this;
251
230
  // HACK to deal with the fact that AmpersandState#dataTypes#set is a pure
252
231
  // function.
253
- this._dataTypes = (0, _lodash.cloneDeep)(this._dataTypes);
232
+ this._dataTypes = (0, _cloneDeep2.default)(this._dataTypes);
254
233
  (0, _keys.default)(this._dataTypes).forEach(function (key) {
255
234
  if (_this._dataTypes[key].set) {
256
235
  _this._dataTypes[key].set = _this._dataTypes[key].set.bind(_this);
@@ -273,16 +252,8 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
273
252
  downscope: function downscope(scope) {
274
253
  var _this2 = this;
275
254
  return this.supertoken.downscope(scope).catch(function (reason) {
276
- var _reason$body;
277
- var failReason = (_reason$body = reason === null || reason === void 0 ? void 0 : reason.body) !== null && _reason$body !== void 0 ? _reason$body : reason;
278
- _this2.logger.warn("credentials: failed to downscope supertoken to \"".concat(scope, "\""), failReason);
255
+ _this2.logger.trace("credentials: failed to downscope supertoken to ".concat(scope), reason);
279
256
  _this2.logger.trace("credentials: falling back to supertoken for ".concat(scope));
280
- _this2.webex.internal.metrics.submitClientMetrics(_constants.METRICS.JS_SDK_CREDENTIALS_DOWNSCOPE_FAILED, {
281
- fields: {
282
- requestedScope: scope,
283
- failReason: failReason
284
- }
285
- });
286
257
  return _promise.default.resolve(new _token.default(_objectSpread({
287
258
  scope: scope
288
259
  }, _this2.supertoken.serialize())), {
@@ -354,10 +325,10 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
354
325
  return _promise.default.reject(new Error('Current state cannot produce an access token'));
355
326
  }
356
327
  if (!scope) {
357
- scope = (0, _scope.filterScope)('spark:kms', _this4.supertoken.scope);
328
+ scope = (0, _scope.filterScope)('spark:kms', _this4.config.scope);
358
329
  }
359
330
  scope = (0, _scope.sortScope)(scope);
360
- if (scope === (0, _scope.sortScope)(_this4.supertoken.scope)) {
331
+ if (scope === (0, _scope.sortScope)(_this4.config.scope)) {
361
332
  return _promise.default.resolve(_this4.supertoken);
362
333
  }
363
334
  var token = _this4.userTokens.get(scope);
@@ -469,7 +440,7 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
469
440
  var _this6 = this;
470
441
  this.logger.info('credentials: refresh requested');
471
442
  var supertoken = this.supertoken;
472
- var tokens = (0, _lodash.clone)(this.userTokens.models);
443
+ var tokens = (0, _clone2.default)(this.userTokens.models);
473
444
 
474
445
  // This is kind of a leaky abstraction, since it relies on the authorization
475
446
  // plugin, but the only alternatives I see are
@@ -489,40 +460,15 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
489
460
  if (this.webex.internal.services) {
490
461
  this.webex.internal.services.updateCredentialsConfig();
491
462
  }
492
- return supertoken.refresh().catch(function (error) {
493
- if (error instanceof _grantErrors.OAuthError) {
494
- // Error: super token refresh failed with 400 status code.
495
- // Hence emit an event to the client, an opportunity to logout.
496
- _this6.unset('supertoken');
497
- while (_this6.userTokens.models.length) {
498
- try {
499
- _this6.userTokens.remove(_this6.userTokens.models[0]);
500
- } catch (err) {
501
- _this6.logger.warn('credentials: failed to remove user token', err);
502
- }
503
- }
504
- _this6.webex.trigger('client:InvalidRequestError');
505
- }
506
- return _promise.default.reject(error);
507
- }).then(function (st) {
463
+ return supertoken.refresh().then(function (st) {
508
464
  // clear refresh timer
509
465
  if (_this6.refreshTimer) {
510
466
  clearTimeout(_this6.refreshTimer);
511
467
  _this6.unset('refreshTimer');
512
468
  }
513
469
  _this6.supertoken = st;
514
- var invalidScopes = (0, _scope.diffScopes)(_this6.config.scope, st.scope);
515
- if (invalidScopes !== '') {
516
- _this6.logger.warn("credentials: \"".concat(invalidScopes, "\" scope(s) are invalid because not listed in the supertoken, they will be excluded from user token requests."));
517
- _this6.webex.internal.metrics.submitClientMetrics(_constants.METRICS.JS_SDK_CREDENTIALS_TOKEN_REFRESH_SCOPE_MISMATCH, {
518
- fields: {
519
- invalidScopes: invalidScopes
520
- }
521
- });
522
- }
523
470
  return _promise.default.all(tokens.map(function (token) {
524
- var tokenScope = (0, _scope.filterScope)((0, _scope.diffScopes)(token.scope, st.scope), token.scope);
525
- return _this6.downscope(tokenScope)
471
+ return _this6.downscope(token.scope)
526
472
  // eslint-disable-next-line max-nested-callbacks
527
473
  .then(function (t) {
528
474
  _this6.logger.info("credentials: revoking token for ".concat(token.scope));
@@ -536,6 +482,21 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
536
482
  }));
537
483
  }).then(function () {
538
484
  _this6.scheduleRefresh(_this6.supertoken.expires);
485
+ }).catch(function (error) {
486
+ var InvalidRequestError = _grantErrors.default.InvalidRequestError;
487
+ if (error instanceof InvalidRequestError) {
488
+ // Error: The refresh token provided is expired, revoked, malformed, or invalid. Hence emit an event to the client, an opportunity to logout.
489
+ _this6.unset('supertoken');
490
+ while (_this6.userTokens.models.length) {
491
+ try {
492
+ _this6.userTokens.remove(_this6.userTokens.models[0]);
493
+ } catch (err) {
494
+ _this6.logger.warn('credentials: failed to remove user token', err);
495
+ }
496
+ }
497
+ _this6.webex.trigger('client:InvalidRequestError');
498
+ }
499
+ return _promise.default.reject(error);
539
500
  });
540
501
  },
541
502
  /**
@@ -558,7 +519,8 @@ var Credentials = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
558
519
  this.refresh();
559
520
  }
560
521
  },
561
- version: "2.60.1-next.9"
522
+ version: "2.60.2"
562
523
  }, ((0, _applyDecoratedDescriptor2.default)(_obj, "getUserToken", [_dec, _dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "getUserToken"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "initialize", [_dec3], (0, _getOwnPropertyDescriptor.default)(_obj, "initialize"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "invalidate", [_common.oneFlight, _dec4], (0, _getOwnPropertyDescriptor.default)(_obj, "invalidate"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "refresh", [_common.oneFlight, _dec5, _dec6], (0, _getOwnPropertyDescriptor.default)(_obj, "refresh"), _obj)), _obj)));
563
- var _default = exports.default = Credentials;
524
+ var _default = Credentials;
525
+ exports.default = _default;
564
526
  //# sourceMappingURL=credentials.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_querystring","_interopRequireDefault","require","_url","_jsonwebtoken","_common","_commonTimers","_lodash","_webexPlugin","_decorators","_grantErrors","_interopRequireWildcard","_scope","_token","_tokenCollection","_constants","_dec","_dec2","_dec3","_dec4","_dec5","_dec6","_obj","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor2","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","Credentials","WebexPlugin","extend","oneFlight","keyFactory","scope","waitForValue","persist","whileInFlight","collections","userTokens","TokenCollection","dataTypes","token","makeStateDataType","Token","dataType","derived","canAuthorize","deps","fn","Boolean","supertoken","canRefresh","config","jwtRefreshCallback","isUnverifiedGuest","isGuest","JSON","parse","base64","decode","access_token","split","user_type","_unused","props","prop","namespace","session","isRefreshing","type","ready","refreshTimer","undefined","buildLoginUrl","options","clientType","state","isObject","Error","client_id","redirect_uri","cloneDeep","response_type","_deleteProperty","isEmpty","toBase64Url","_stringify","concat","authorizeUrl","querystring","stringify","getOrgId","logger","info","extractOrgIdFromJWT","_this$supertoken","extractOrgIdFromUserToken","f","decodedJWT","jwt","realm","fields","buildLogoutUrl","logoutUrl","cisService","service","goto","calcRefreshTimeout","expiration","Math","floor","random","constructor","_this","_dataTypes","_keys","key","bind","_len","args","Array","_key","_apply","downscope","_this2","catch","reason","_reason$body","failReason","body","warn","trace","webex","internal","metrics","submitClientMetrics","METRICS","JS_SDK_CREDENTIALS_DOWNSCOPE_FAILED","requestedScope","_promise","resolve","serialize","parent","getClientToken","_this3","request","method","uri","tokenUrl","form","grant_type","self_contained_token","auth","user","pass","client_secret","sendImmediately","shouldRefreshAccessToken","then","res","statusCode","reject","ErrorConstructor","grantErrors","select","error","_res","getUserToken","_this4","once","filterScope","sortScope","tap","add","initialize","attrs","_this5","authorization","expires","scheduleRefresh","listenToOnce","authorizationString","parsed","url","query","href","substr","indexOf","invalidate","clearTimeout","unset","err","models","remove","refresh","_this6","tokens","clone","requestAccessTokenFromJwt","services","updateCredentialsConfig","OAuthError","trigger","st","invalidScopes","diffScopes","JS_SDK_CREDENTIALS_TOKEN_REFRESH_SCOPE_MISMATCH","all","map","tokenScope","revoke","_this7","expiresIn","_now","timeoutLength","safeSetTimeout","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default","exports"],"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 {base64, makeStateDataType, oneFlight, tap, whileInFlight} 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, {OAuthError} from './grant-errors';\nimport {filterScope, diffScopes, sortScope} from './scope';\nimport Token from './token';\nimport TokenCollection from './token-collection';\nimport {METRICS} from '../constants';\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: ['supertoken', 'supertoken.canAuthorize', 'canRefresh'],\n fn() {\n return Boolean((this.supertoken && this.supertoken.canAuthorize) || this.canRefresh);\n },\n },\n canRefresh: {\n deps: ['supertoken', 'supertoken.canRefresh'],\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 isUnverifiedGuest: {\n deps: ['supertoken'],\n /**\n * Returns true if the user is an unverified guest\n * @returns {boolean}\n */\n fn() {\n let isGuest = false;\n try {\n isGuest =\n JSON.parse(base64.decode(this.supertoken.access_token.split('.')[1])).user_type ===\n 'guest';\n } catch {\n /* the non-guest token is formatted differently so catch is expected */\n }\n\n return isGuest;\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 } 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('credentials: attempting to retrieve the OrgId from token');\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 } 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('credentials: attempting to extract OrgId from user token');\n\n try {\n return this.extractOrgIdFromUserToken(this.supertoken?.access_token);\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({\n cisService: this.config.service,\n goto: this.config.redirect_uri,\n ...options,\n })}`;\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).catch((reason) => {\n const failReason = reason?.body ?? reason;\n this.logger.warn(`credentials: failed to downscope supertoken to \"${scope}\"`, failReason);\n this.logger.trace(`credentials: falling back to supertoken for ${scope}`);\n this.webex.internal.metrics.submitClientMetrics(METRICS.JS_SDK_CREDENTIALS_DOWNSCOPE_FAILED, {\n fields: {\n requestedScope: scope,\n failReason,\n },\n });\n\n return Promise.resolve(new Token({scope, ...this.supertoken.serialize()}), {\n parent: this,\n });\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\n .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(\n !this.isRefreshing ||\n new Promise((resolve) => {\n this.logger.info(\n 'credentials: token refresh inflight; delaying getUserToken until refresh completes'\n );\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.supertoken.scope);\n }\n\n scope = sortScope(scope);\n\n if (scope === sortScope(this.supertoken.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).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 } 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 } 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 } 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 (\n this.config\n .jwtRefreshCallback(this.webex)\n // eslint-disable-next-line no-shadow\n .then((jwt) => this.webex.authorization.requestAccessTokenFromJwt({jwt}))\n );\n }\n\n if (this.webex.internal.services) {\n this.webex.internal.services.updateCredentialsConfig();\n }\n\n return supertoken\n .refresh()\n .catch((error) => {\n if (error instanceof OAuthError) {\n // Error: super token refresh failed with 400 status code.\n // 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 } 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 .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 const invalidScopes = diffScopes(this.config.scope, st.scope);\n\n if (invalidScopes !== '') {\n this.logger.warn(\n `credentials: \"${invalidScopes}\" scope(s) are invalid because not listed in the supertoken, they will be excluded from user token requests.`\n );\n this.webex.internal.metrics.submitClientMetrics(\n METRICS.JS_SDK_CREDENTIALS_TOKEN_REFRESH_SCOPE_MISMATCH,\n {fields: {invalidScopes}}\n );\n }\n\n return Promise.all(\n tokens.map((token) => {\n const tokenScope = filterScope(diffScopes(token.scope, st.scope), token.scope);\n\n return (\n this.downscope(tokenScope)\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\n .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 })\n );\n })\n .then(() => {\n this.scheduleRefresh(this.supertoken.expires);\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 } else {\n this.refresh();\n }\n },\n});\n\nexport default Credentials;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_querystring","_interopRequireDefault","require","_url","_jsonwebtoken","_common","_commonTimers","_webexPlugin","_decorators","_grantErrors","_scope","_token","_tokenCollection","_dec","_dec2","_dec3","_dec4","_dec5","_dec6","_obj","ownKeys","object","enumerableOnly","keys","_Object$keys2","_Object$getOwnPropertySymbols","symbols","filter","sym","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","Object","forEach","key","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","Credentials","WebexPlugin","extend","oneFlight","keyFactory","scope","waitForValue","persist","whileInFlight","collections","userTokens","TokenCollection","dataTypes","token","makeStateDataType","Token","dataType","derived","canAuthorize","deps","fn","Boolean","supertoken","canRefresh","config","jwtRefreshCallback","props","prop","namespace","session","isRefreshing","type","ready","refreshTimer","undefined","buildLoginUrl","options","clientType","state","_isObject2","Error","client_id","redirect_uri","_cloneDeep2","response_type","_deleteProperty","_isEmpty2","base64","toBase64Url","_stringify","concat","authorizeUrl","querystring","stringify","getOrgId","logger","info","extractOrgIdFromJWT","access_token","e","_this$supertoken","extractOrgIdFromUserToken","f","decodedJWT","jwt","decode","realm","fields","split","buildLogoutUrl","logoutUrl","cisService","service","goto","calcRefreshTimeout","expiration","Math","floor","random","constructor","_this","_dataTypes","_keys","set","bind","_len","args","Array","_key","_apply","downscope","_this2","catch","reason","trace","_promise","resolve","serialize","parent","getClientToken","_this3","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","_this4","once","filterScope","sortScope","get","tap","t","add","initialize","attrs","_this5","authorization","expires","scheduleRefresh","prototype","listenToOnce","authorizationString","parsed","url","parse","query","href","substr","indexOf","invalidate","clearTimeout","unset","err","warn","models","remove","refresh","_this6","tokens","_clone2","requestAccessTokenFromJwt","internal","services","updateCredentialsConfig","st","all","map","revoke","InvalidRequestError","trigger","_this7","expiresIn","_now","timeoutLength","safeSetTimeout","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default","exports"],"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 {base64, makeStateDataType, oneFlight, tap, whileInFlight} 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: ['supertoken', 'supertoken.canAuthorize', 'canRefresh'],\n fn() {\n return Boolean((this.supertoken && this.supertoken.canAuthorize) || this.canRefresh);\n },\n },\n canRefresh: {\n deps: ['supertoken', 'supertoken.canRefresh'],\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 } 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('credentials: attempting to retrieve the OrgId from token');\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 } 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('credentials: attempting to extract OrgId from user token');\n\n try {\n return this.extractOrgIdFromUserToken(this.supertoken?.access_token);\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({\n cisService: this.config.service,\n goto: this.config.redirect_uri,\n ...options,\n })}`;\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).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({scope, ...this.supertoken.serialize()}), {\n parent: this,\n });\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\n .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(\n !this.isRefreshing ||\n new Promise((resolve) => {\n this.logger.info(\n 'credentials: token refresh inflight; delaying getUserToken until refresh completes'\n );\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).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 } 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 } 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 } 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 (\n this.config\n .jwtRefreshCallback(this.webex)\n // eslint-disable-next-line no-shadow\n .then((jwt) => this.webex.authorization.requestAccessTokenFromJwt({jwt}))\n );\n }\n\n if (this.webex.internal.services) {\n this.webex.internal.services.updateCredentialsConfig();\n }\n\n return supertoken\n .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(\n tokens.map((token) =>\n 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\n .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 );\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 } 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 } else {\n this.refresh();\n }\n },\n});\n\nexport default Credentials;\n"],"mappings":"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"}