@webex/webex-core 3.0.0-beta.2 → 3.0.0-beta.21

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 (184) hide show
  1. package/dist/config.js +1 -11
  2. package/dist/config.js.map +1 -1
  3. package/dist/credentials-config.js +44 -64
  4. package/dist/credentials-config.js.map +1 -1
  5. package/dist/index.js +0 -76
  6. package/dist/index.js.map +1 -1
  7. package/dist/interceptors/auth.js +22 -55
  8. package/dist/interceptors/auth.js.map +1 -1
  9. package/dist/interceptors/default-options.js +0 -20
  10. package/dist/interceptors/default-options.js.map +1 -1
  11. package/dist/interceptors/embargo.js +0 -21
  12. package/dist/interceptors/embargo.js.map +1 -1
  13. package/dist/interceptors/network-timing.js +2 -21
  14. package/dist/interceptors/network-timing.js.map +1 -1
  15. package/dist/interceptors/payload-transformer.js +2 -22
  16. package/dist/interceptors/payload-transformer.js.map +1 -1
  17. package/dist/interceptors/rate-limit.js +25 -57
  18. package/dist/interceptors/rate-limit.js.map +1 -1
  19. package/dist/interceptors/redirect.js +4 -33
  20. package/dist/interceptors/redirect.js.map +1 -1
  21. package/dist/interceptors/request-event.js +3 -30
  22. package/dist/interceptors/request-event.js.map +1 -1
  23. package/dist/interceptors/request-logger.js +1 -30
  24. package/dist/interceptors/request-logger.js.map +1 -1
  25. package/dist/interceptors/request-timing.js +3 -22
  26. package/dist/interceptors/request-timing.js.map +1 -1
  27. package/dist/interceptors/response-logger.js +2 -31
  28. package/dist/interceptors/response-logger.js.map +1 -1
  29. package/dist/interceptors/user-agent.js +2 -29
  30. package/dist/interceptors/user-agent.js.map +1 -1
  31. package/dist/interceptors/webex-tracking-id.js +5 -28
  32. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  33. package/dist/interceptors/webex-user-agent.js +5 -38
  34. package/dist/interceptors/webex-user-agent.js.map +1 -1
  35. package/dist/lib/batcher.js +3 -51
  36. package/dist/lib/batcher.js.map +1 -1
  37. package/dist/lib/credentials/credentials.js +39 -119
  38. package/dist/lib/credentials/credentials.js.map +1 -1
  39. package/dist/lib/credentials/grant-errors.js +0 -49
  40. package/dist/lib/credentials/grant-errors.js.map +1 -1
  41. package/dist/lib/credentials/index.js +1 -13
  42. package/dist/lib/credentials/index.js.map +1 -1
  43. package/dist/lib/credentials/scope.js +1 -7
  44. package/dist/lib/credentials/scope.js.map +1 -1
  45. package/dist/lib/credentials/token-collection.js +1 -7
  46. package/dist/lib/credentials/token-collection.js.map +1 -1
  47. package/dist/lib/credentials/token.js +39 -118
  48. package/dist/lib/credentials/token.js.map +1 -1
  49. package/dist/lib/page.js +13 -26
  50. package/dist/lib/page.js.map +1 -1
  51. package/dist/lib/services/constants.js +0 -2
  52. package/dist/lib/services/constants.js.map +1 -1
  53. package/dist/lib/services/index.js +1 -28
  54. package/dist/lib/services/index.js.map +1 -1
  55. package/dist/lib/services/interceptors/server-error.js +2 -23
  56. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  57. package/dist/lib/services/interceptors/service.js +12 -34
  58. package/dist/lib/services/interceptors/service.js.map +1 -1
  59. package/dist/lib/services/metrics.js +0 -2
  60. package/dist/lib/services/metrics.js.map +1 -1
  61. package/dist/lib/services/service-catalog.js +10 -90
  62. package/dist/lib/services/service-catalog.js.map +1 -1
  63. package/dist/lib/services/service-fed-ramp.js +0 -2
  64. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  65. package/dist/lib/services/service-host.js +47 -62
  66. package/dist/lib/services/service-host.js.map +1 -1
  67. package/dist/lib/services/service-registry.js +78 -90
  68. package/dist/lib/services/service-registry.js.map +1 -1
  69. package/dist/lib/services/service-state.js +3 -15
  70. package/dist/lib/services/service-state.js.map +1 -1
  71. package/dist/lib/services/service-url.js +4 -25
  72. package/dist/lib/services/service-url.js.map +1 -1
  73. package/dist/lib/services/services.js +122 -238
  74. package/dist/lib/services/services.js.map +1 -1
  75. package/dist/lib/stateless-webex-plugin.js +5 -28
  76. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  77. package/dist/lib/storage/decorators.js +19 -62
  78. package/dist/lib/storage/decorators.js.map +1 -1
  79. package/dist/lib/storage/errors.js +0 -23
  80. package/dist/lib/storage/errors.js.map +1 -1
  81. package/dist/lib/storage/index.js +2 -16
  82. package/dist/lib/storage/index.js.map +1 -1
  83. package/dist/lib/storage/make-webex-plugin-store.js +11 -41
  84. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  85. package/dist/lib/storage/make-webex-store.js +8 -30
  86. package/dist/lib/storage/make-webex-store.js.map +1 -1
  87. package/dist/lib/storage/memory-store-adapter.js +1 -19
  88. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  89. package/dist/lib/webex-core-plugin-mixin.js +9 -29
  90. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  91. package/dist/lib/webex-http-error.js +1 -31
  92. package/dist/lib/webex-http-error.js.map +1 -1
  93. package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
  94. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  95. package/dist/lib/webex-plugin.js +6 -40
  96. package/dist/lib/webex-plugin.js.map +1 -1
  97. package/dist/plugins/logger.js +3 -17
  98. package/dist/plugins/logger.js.map +1 -1
  99. package/dist/webex-core.js +79 -203
  100. package/dist/webex-core.js.map +1 -1
  101. package/dist/webex-internal-core.js +0 -10
  102. package/dist/webex-internal-core.js.map +1 -1
  103. package/package.json +14 -14
  104. package/src/config.js +9 -11
  105. package/src/credentials-config.js +110 -72
  106. package/src/index.js +4 -14
  107. package/src/interceptors/auth.js +36 -37
  108. package/src/interceptors/default-options.js +0 -1
  109. package/src/interceptors/embargo.js +1 -1
  110. package/src/interceptors/payload-transformer.js +1 -2
  111. package/src/interceptors/rate-limit.js +8 -5
  112. package/src/interceptors/redirect.js +14 -8
  113. package/src/interceptors/request-event.js +4 -8
  114. package/src/interceptors/request-logger.js +8 -5
  115. package/src/interceptors/response-logger.js +11 -8
  116. package/src/interceptors/user-agent.js +1 -2
  117. package/src/interceptors/webex-user-agent.js +3 -9
  118. package/src/lib/batcher.js +70 -69
  119. package/src/lib/credentials/credentials.js +112 -122
  120. package/src/lib/credentials/grant-errors.js +6 -7
  121. package/src/lib/credentials/index.js +1 -4
  122. package/src/lib/credentials/scope.js +1 -4
  123. package/src/lib/credentials/token-collection.js +1 -1
  124. package/src/lib/credentials/token.js +86 -80
  125. package/src/lib/page.js +10 -11
  126. package/src/lib/services/constants.js +3 -13
  127. package/src/lib/services/index.js +2 -2
  128. package/src/lib/services/interceptors/server-error.js +12 -7
  129. package/src/lib/services/interceptors/service.js +6 -5
  130. package/src/lib/services/metrics.js +1 -1
  131. package/src/lib/services/service-catalog.js +110 -100
  132. package/src/lib/services/service-fed-ramp.js +1 -2
  133. package/src/lib/services/service-host.js +10 -17
  134. package/src/lib/services/service-registry.js +69 -96
  135. package/src/lib/services/service-state.js +4 -6
  136. package/src/lib/services/service-url.js +24 -23
  137. package/src/lib/services/services.js +260 -251
  138. package/src/lib/stateless-webex-plugin.js +4 -2
  139. package/src/lib/storage/decorators.js +68 -66
  140. package/src/lib/storage/index.js +4 -6
  141. package/src/lib/storage/make-webex-plugin-store.js +34 -21
  142. package/src/lib/storage/make-webex-store.js +6 -7
  143. package/src/lib/storage/memory-store-adapter.js +3 -3
  144. package/src/lib/webex-core-plugin-mixin.js +10 -7
  145. package/src/lib/webex-http-error.js +7 -8
  146. package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
  147. package/src/lib/webex-plugin.js +41 -34
  148. package/src/plugins/logger.js +8 -3
  149. package/src/webex-core.js +185 -116
  150. package/src/webex-internal-core.js +15 -9
  151. package/test/integration/spec/credentials/credentials.js +26 -30
  152. package/test/integration/spec/credentials/token.js +36 -33
  153. package/test/integration/spec/services/service-catalog.js +177 -156
  154. package/test/integration/spec/services/services.js +313 -304
  155. package/test/integration/spec/webex-core.js +98 -86
  156. package/test/unit/spec/_setup.js +26 -18
  157. package/test/unit/spec/credentials/credentials.js +189 -154
  158. package/test/unit/spec/credentials/token.js +94 -76
  159. package/test/unit/spec/interceptors/auth.js +291 -243
  160. package/test/unit/spec/interceptors/default-options.js +36 -24
  161. package/test/unit/spec/interceptors/embargo.js +32 -27
  162. package/test/unit/spec/interceptors/network-timing.js +2 -2
  163. package/test/unit/spec/interceptors/payload-transformer.js +61 -52
  164. package/test/unit/spec/interceptors/rate-limit.js +104 -75
  165. package/test/unit/spec/interceptors/redirect.js +22 -20
  166. package/test/unit/spec/interceptors/request-timing.js +18 -22
  167. package/test/unit/spec/interceptors/user-agent.js +28 -16
  168. package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
  169. package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
  170. package/test/unit/spec/lib/batcher.js +36 -32
  171. package/test/unit/spec/lib/page.js +36 -32
  172. package/test/unit/spec/lib/webex-plugin.js +1 -1
  173. package/test/unit/spec/services/interceptors/server-error.js +67 -90
  174. package/test/unit/spec/services/interceptors/service.js +17 -28
  175. package/test/unit/spec/services/service-catalog.js +19 -27
  176. package/test/unit/spec/services/service-host.js +29 -26
  177. package/test/unit/spec/services/service-registry.js +128 -170
  178. package/test/unit/spec/services/service-state.js +13 -22
  179. package/test/unit/spec/services/service-url.js +24 -43
  180. package/test/unit/spec/services/services.js +85 -41
  181. package/test/unit/spec/storage/persist.js +6 -9
  182. package/test/unit/spec/storage/wait-for-value.js +22 -21
  183. package/test/unit/spec/webex-core.js +78 -57
  184. package/test/unit/spec/webex-internal-core.js +56 -31
@@ -1 +1 @@
1
- {"version":3,"names":["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","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","filterScope","sortScope","get","tap","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","safeSetTimeout"],"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":"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"}
1
+ {"version":3,"names":["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","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","filterScope","sortScope","get","tap","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","safeSetTimeout"],"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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"}
@@ -1,48 +1,31 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.default = exports.OAuthError = void 0;
14
-
15
10
  var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-properties"));
16
-
17
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
-
19
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
20
-
21
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
22
-
23
14
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
24
-
25
15
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
26
-
27
16
  var _common = require("@webex/common");
28
-
29
17
  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); }; }
30
-
31
18
  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; } }
32
-
33
19
  /**
34
20
  * Error thrown during oauth flow
35
21
  */
36
22
  var OAuthError = /*#__PURE__*/function (_Exception) {
37
23
  (0, _inherits2.default)(OAuthError, _Exception);
38
-
39
24
  var _super = _createSuper(OAuthError);
40
-
41
25
  function OAuthError() {
42
26
  (0, _classCallCheck2.default)(this, OAuthError);
43
27
  return _super.apply(this, arguments);
44
28
  }
45
-
46
29
  (0, _createClass2.default)(OAuthError, [{
47
30
  key: "parse",
48
31
  value:
@@ -79,108 +62,76 @@ var OAuthError = /*#__PURE__*/function (_Exception) {
79
62
  /**
80
63
  * InvalidRequestError
81
64
  */
82
-
83
-
84
65
  exports.OAuthError = OAuthError;
85
-
86
66
  var InvalidRequestError = /*#__PURE__*/function (_OAuthError) {
87
67
  (0, _inherits2.default)(InvalidRequestError, _OAuthError);
88
-
89
68
  var _super2 = _createSuper(InvalidRequestError);
90
-
91
69
  function InvalidRequestError() {
92
70
  (0, _classCallCheck2.default)(this, InvalidRequestError);
93
71
  return _super2.apply(this, arguments);
94
72
  }
95
-
96
73
  return (0, _createClass2.default)(InvalidRequestError);
97
74
  }(OAuthError);
98
75
  /**
99
76
  * InvalidClientError
100
77
  */
101
-
102
-
103
78
  var InvalidClientError = /*#__PURE__*/function (_OAuthError2) {
104
79
  (0, _inherits2.default)(InvalidClientError, _OAuthError2);
105
-
106
80
  var _super3 = _createSuper(InvalidClientError);
107
-
108
81
  function InvalidClientError() {
109
82
  (0, _classCallCheck2.default)(this, InvalidClientError);
110
83
  return _super3.apply(this, arguments);
111
84
  }
112
-
113
85
  return (0, _createClass2.default)(InvalidClientError);
114
86
  }(OAuthError);
115
87
  /**
116
88
  * InvalidGrantError
117
89
  */
118
-
119
-
120
90
  var InvalidGrantError = /*#__PURE__*/function (_OAuthError3) {
121
91
  (0, _inherits2.default)(InvalidGrantError, _OAuthError3);
122
-
123
92
  var _super4 = _createSuper(InvalidGrantError);
124
-
125
93
  function InvalidGrantError() {
126
94
  (0, _classCallCheck2.default)(this, InvalidGrantError);
127
95
  return _super4.apply(this, arguments);
128
96
  }
129
-
130
97
  return (0, _createClass2.default)(InvalidGrantError);
131
98
  }(OAuthError);
132
99
  /**
133
100
  * UnauthorizedClientError
134
101
  */
135
-
136
-
137
102
  var UnauthorizedClientError = /*#__PURE__*/function (_OAuthError4) {
138
103
  (0, _inherits2.default)(UnauthorizedClientError, _OAuthError4);
139
-
140
104
  var _super5 = _createSuper(UnauthorizedClientError);
141
-
142
105
  function UnauthorizedClientError() {
143
106
  (0, _classCallCheck2.default)(this, UnauthorizedClientError);
144
107
  return _super5.apply(this, arguments);
145
108
  }
146
-
147
109
  return (0, _createClass2.default)(UnauthorizedClientError);
148
110
  }(OAuthError);
149
111
  /**
150
112
  * UnsupportGrantTypeError
151
113
  */
152
-
153
-
154
114
  var UnsupportGrantTypeError = /*#__PURE__*/function (_OAuthError5) {
155
115
  (0, _inherits2.default)(UnsupportGrantTypeError, _OAuthError5);
156
-
157
116
  var _super6 = _createSuper(UnsupportGrantTypeError);
158
-
159
117
  function UnsupportGrantTypeError() {
160
118
  (0, _classCallCheck2.default)(this, UnsupportGrantTypeError);
161
119
  return _super6.apply(this, arguments);
162
120
  }
163
-
164
121
  return (0, _createClass2.default)(UnsupportGrantTypeError);
165
122
  }(OAuthError);
166
123
  /**
167
124
  * InvalidScopeError
168
125
  */
169
-
170
-
171
126
  var InvalidScopeError = /*#__PURE__*/function (_OAuthError6) {
172
127
  (0, _inherits2.default)(InvalidScopeError, _OAuthError6);
173
-
174
128
  var _super7 = _createSuper(InvalidScopeError);
175
-
176
129
  function InvalidScopeError() {
177
130
  (0, _classCallCheck2.default)(this, InvalidScopeError);
178
131
  return _super7.apply(this, arguments);
179
132
  }
180
-
181
133
  return (0, _createClass2.default)(InvalidScopeError);
182
134
  }(OAuthError);
183
-
184
135
  var errors = {
185
136
  OAuthError: OAuthError,
186
137
  InvalidRequestError: InvalidRequestError,
@@ -1 +1 @@
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"}
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\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;AAAwC;AAAA;AAExC;AACA;AACA;AAFA,IAGaA,UAAU;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;IAAA;IAAA;IACrB;AACF;AACA;AACA;IACE,eAAMC,GAAG,EAAE;MACT;MACA,IAAMC,IAAI,GAAGD,GAAG,CAACC,IAAI,IAAID,GAAG;MAE5B,+BAAwB,IAAI,EAAE;QAC5BE,KAAK,EAAE;UACLC,UAAU,EAAE,IAAI;UAChBC,KAAK,EAAEH,IAAI,CAACC;QACd,CAAC;QACDG,gBAAgB,EAAE;UAChBF,UAAU,EAAE,IAAI;UAChBC,KAAK,EAAEH,IAAI,CAACK;QACd,CAAC;QACDC,QAAQ,EAAE;UACRJ,UAAU,EAAE,IAAI;UAChBC,KAAK,EAAEH,IAAI,CAACO;QACd,CAAC;QACDR,GAAG,EAAE;UACHG,UAAU,EAAE,KAAK;UACjBC,KAAK,EAAEJ;QACT;MACF,CAAC,CAAC;MAEF,OAAO,IAAI,CAACK,gBAAgB;IAC9B;EAAC;EAAA;AAAA,EA7B6BI,iBAAS;AA+BzC;AACA;AACA;AAFA;AAAA,IAGMC,mBAAmB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASX,UAAU;AAE5C;AACA;AACA;AAFA,IAGMY,kBAAkB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASZ,UAAU;AAE3C;AACA;AACA;AAFA,IAGMa,iBAAiB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASb,UAAU;AAE1C;AACA;AACA;AAFA,IAGMc,uBAAuB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASd,UAAU;AAEhD;AACA;AACA;AAFA,IAGMe,uBAAuB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAASf,UAAU;AAEhD;AACA;AACA;AAFA,IAGMgB,iBAAiB;EAAA;EAAA;EAAA;IAAA;IAAA;EAAA;EAAA;AAAA,EAAShB,UAAU;AAE1C,IAAMiB,MAAM,GAAG;EACbjB,UAAU,EAAVA,UAAU;EACVW,mBAAmB,EAAnBA,mBAAmB;EACnBC,kBAAkB,EAAlBA,kBAAkB;EAClBC,iBAAiB,EAAjBA,iBAAiB;EACjBC,uBAAuB,EAAvBA,uBAAuB;EACvBC,uBAAuB,EAAvBA,uBAAuB;EACvBC,iBAAiB,EAAjBA,iBAAiB;EACjBE,eAAe,EAAEP,mBAAmB;EACpCQ,cAAc,EAAEP,kBAAkB;EAClCQ,aAAa,EAAEP,iBAAiB;EAChCQ,mBAAmB,EAAEP,uBAAuB;EAC5CQ,sBAAsB,EAAEP,uBAAuB;EAC/CQ,aAAa,EAAEP,iBAAiB;EAChCQ,MAAM,kBAACC,WAAW,EAAE;IAClB,OAAOR,MAAM,CAACQ,WAAW,CAAC,IAAIzB,UAAU;EAC1C;AACF,CAAC;AAAC,eAEaiB,MAAM;AAAA"}
@@ -1,61 +1,49 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  _Object$defineProperty(exports, "Credentials", {
12
9
  enumerable: true,
13
10
  get: function get() {
14
11
  return _credentials.default;
15
12
  }
16
13
  });
17
-
18
14
  _Object$defineProperty(exports, "Token", {
19
15
  enumerable: true,
20
16
  get: function get() {
21
17
  return _token.default;
22
18
  }
23
19
  });
24
-
25
20
  _Object$defineProperty(exports, "filterScope", {
26
21
  enumerable: true,
27
22
  get: function get() {
28
23
  return _scope.filterScope;
29
24
  }
30
25
  });
31
-
32
26
  _Object$defineProperty(exports, "grantErrors", {
33
27
  enumerable: true,
34
28
  get: function get() {
35
29
  return _grantErrors.default;
36
30
  }
37
31
  });
38
-
39
32
  _Object$defineProperty(exports, "sortScope", {
40
33
  enumerable: true,
41
34
  get: function get() {
42
35
  return _scope.sortScope;
43
36
  }
44
37
  });
45
-
46
38
  var _webexCore = require("../../webex-core");
47
-
48
39
  var _credentials = _interopRequireDefault(require("./credentials"));
49
-
50
40
  var _scope = require("./scope");
51
-
52
41
  var _token = _interopRequireDefault(require("./token"));
53
-
54
42
  var _grantErrors = _interopRequireDefault(require("./grant-errors"));
55
-
56
43
  /*!
57
44
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
58
45
  */
46
+
59
47
  (0, _webexCore.registerPlugin)('credentials', _credentials.default, {
60
48
  proxies: ['canAuthorize', 'canRefresh']
61
49
  });
@@ -1 +1 @@
1
- {"version":3,"names":["registerPlugin","Credentials","proxies"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '../../webex-core';\n\nimport Credentials from './credentials';\n\nregisterPlugin('credentials', Credentials, {\n proxies: [\n 'canAuthorize',\n 'canRefresh'\n ]\n});\n\nexport {default as Credentials} from './credentials';\nexport {filterScope, sortScope} from './scope';\nexport {default as Token} from './token';\nexport {default as grantErrors} from './grant-errors';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AAEA;;AAUA;;AACA;;AACA;;AAlBA;AACA;AACA;AAMA,IAAAA,yBAAA,EAAe,aAAf,EAA8BC,oBAA9B,EAA2C;EACzCC,OAAO,EAAE,CACP,cADO,EAEP,YAFO;AADgC,CAA3C"}
1
+ {"version":3,"names":["registerPlugin","Credentials","proxies"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {registerPlugin} from '../../webex-core';\n\nimport Credentials from './credentials';\n\nregisterPlugin('credentials', Credentials, {\n proxies: ['canAuthorize', 'canRefresh'],\n});\n\nexport {default as Credentials} from './credentials';\nexport {filterScope, sortScope} from './scope';\nexport {default as Token} from './token';\nexport {default as grantErrors} from './grant-errors';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;AAEA;AAOA;AACA;AACA;AAfA;AACA;AACA;;AAMA,IAAAA,yBAAc,EAAC,aAAa,EAAEC,oBAAW,EAAE;EACzCC,OAAO,EAAE,CAAC,cAAc,EAAE,YAAY;AACxC,CAAC,CAAC"}
@@ -1,14 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.filterScope = filterScope;
10
8
  exports.sortScope = sortScope;
11
-
12
9
  /*!
13
10
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
14
11
  */
@@ -22,22 +19,19 @@ function sortScope(scope) {
22
19
  if (!scope) {
23
20
  return '';
24
21
  }
25
-
26
22
  return scope.split(' ').sort().join(' ');
27
23
  }
24
+
28
25
  /**
29
26
  * sorts a list of scopes and filters the specified scope
30
27
  * @param {string} toFilter
31
28
  * @param {string} scope
32
29
  * @returns {string}
33
30
  */
34
-
35
-
36
31
  function filterScope(toFilter, scope) {
37
32
  if (!scope) {
38
33
  return '';
39
34
  }
40
-
41
35
  return scope.split(' ').filter(function (item) {
42
36
  return item !== toFilter;
43
37
  }).sort().join(' ');
@@ -1 +1 @@
1
- {"version":3,"names":["sortScope","scope","split","sort","join","filterScope","toFilter","filter","item"],"sources":["scope.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * sorts a list of scopes\n * @param {string} scope\n * @returns {string}\n */\nexport function sortScope(scope) {\n if (!scope) {\n return '';\n }\n\n return scope\n .split(' ')\n .sort()\n .join(' ');\n}\n\n/**\n * sorts a list of scopes and filters the specified scope\n * @param {string} toFilter\n * @param {string} scope\n * @returns {string}\n */\nexport function filterScope(toFilter, scope) {\n if (!scope) {\n return '';\n }\n\n return scope\n .split(' ')\n .filter((item) => item !== toFilter)\n .sort()\n .join(' ');\n}\n"],"mappings":";;;;;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASA,SAAT,CAAmBC,KAAnB,EAA0B;EAC/B,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,EAAP;EACD;;EAED,OAAOA,KAAK,CACTC,KADI,CACE,GADF,EAEJC,IAFI,GAGJC,IAHI,CAGC,GAHD,CAAP;AAID;AAED;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,WAAT,CAAqBC,QAArB,EAA+BL,KAA/B,EAAsC;EAC3C,IAAI,CAACA,KAAL,EAAY;IACV,OAAO,EAAP;EACD;;EAED,OAAOA,KAAK,CACTC,KADI,CACE,GADF,EAEJK,MAFI,CAEG,UAACC,IAAD;IAAA,OAAUA,IAAI,KAAKF,QAAnB;EAAA,CAFH,EAGJH,IAHI,GAIJC,IAJI,CAIC,GAJD,CAAP;AAKD"}
1
+ {"version":3,"names":["sortScope","scope","split","sort","join","filterScope","toFilter","filter","item"],"sources":["scope.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/**\n * sorts a list of scopes\n * @param {string} scope\n * @returns {string}\n */\nexport function sortScope(scope) {\n if (!scope) {\n return '';\n }\n\n return scope.split(' ').sort().join(' ');\n}\n\n/**\n * sorts a list of scopes and filters the specified scope\n * @param {string} toFilter\n * @param {string} scope\n * @returns {string}\n */\nexport function filterScope(toFilter, scope) {\n if (!scope) {\n return '';\n }\n\n return scope\n .split(' ')\n .filter((item) => item !== toFilter)\n .sort()\n .join(' ');\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASA,SAAS,CAACC,KAAK,EAAE;EAC/B,IAAI,CAACA,KAAK,EAAE;IACV,OAAO,EAAE;EACX;EAEA,OAAOA,KAAK,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,IAAI,EAAE,CAACC,IAAI,CAAC,GAAG,CAAC;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,WAAW,CAACC,QAAQ,EAAEL,KAAK,EAAE;EAC3C,IAAI,CAACA,KAAK,EAAE;IACV,OAAO,EAAE;EACX;EAEA,OAAOA,KAAK,CACTC,KAAK,CAAC,GAAG,CAAC,CACVK,MAAM,CAAC,UAACC,IAAI;IAAA,OAAKA,IAAI,KAAKF,QAAQ;EAAA,EAAC,CACnCH,IAAI,EAAE,CACNC,IAAI,CAAC,GAAG,CAAC;AACd"}
@@ -1,28 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _ampersandCollection = _interopRequireDefault(require("ampersand-collection"));
14
-
15
10
  var _token = _interopRequireDefault(require("./token"));
16
-
17
11
  /*!
18
12
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
19
13
  */
14
+
20
15
  var TokenCollection = _ampersandCollection.default.extend({
21
16
  mainIndex: 'scope',
22
17
  model: _token.default,
23
18
  namespace: 'Credentials'
24
19
  });
25
-
26
20
  var _default = TokenCollection;
27
21
  exports.default = _default;
28
22
  //# sourceMappingURL=token-collection.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["TokenCollection","AmpCollection","extend","mainIndex","model","Token","namespace"],"sources":["token-collection.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport AmpCollection from 'ampersand-collection';\n\nimport Token from './token';\n\nconst TokenCollection = AmpCollection.extend({\n mainIndex: 'scope',\n\n model: Token,\n\n namespace: 'Credentials'\n});\n\nexport default TokenCollection;\n"],"mappings":";;;;;;;;;;;;AAIA;;AAEA;;AANA;AACA;AACA;AAMA,IAAMA,eAAe,GAAGC,4BAAA,CAAcC,MAAd,CAAqB;EAC3CC,SAAS,EAAE,OADgC;EAG3CC,KAAK,EAAEC,cAHoC;EAK3CC,SAAS,EAAE;AALgC,CAArB,CAAxB;;eAQeN,e"}
1
+ {"version":3,"names":["TokenCollection","AmpCollection","extend","mainIndex","model","Token","namespace"],"sources":["token-collection.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport AmpCollection from 'ampersand-collection';\n\nimport Token from './token';\n\nconst TokenCollection = AmpCollection.extend({\n mainIndex: 'scope',\n\n model: Token,\n\n namespace: 'Credentials',\n});\n\nexport default TokenCollection;\n"],"mappings":";;;;;;;;AAIA;AAEA;AANA;AACA;AACA;;AAMA,IAAMA,eAAe,GAAGC,4BAAa,CAACC,MAAM,CAAC;EAC3CC,SAAS,EAAE,OAAO;EAElBC,KAAK,EAAEC,cAAK;EAEZC,SAAS,EAAE;AACb,CAAC,CAAC;AAAC,eAEYN,eAAe;AAAA"}