@webex/webex-core 2.59.1 → 2.59.3-next.1

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 (189) hide show
  1. package/.eslintrc.js +6 -6
  2. package/README.md +79 -79
  3. package/babel.config.js +3 -3
  4. package/dist/config.js +24 -24
  5. package/dist/config.js.map +1 -1
  6. package/dist/credentials-config.js +56 -56
  7. package/dist/credentials-config.js.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/interceptors/auth.js +28 -28
  10. package/dist/interceptors/auth.js.map +1 -1
  11. package/dist/interceptors/default-options.js +24 -24
  12. package/dist/interceptors/default-options.js.map +1 -1
  13. package/dist/interceptors/embargo.js +9 -9
  14. package/dist/interceptors/embargo.js.map +1 -1
  15. package/dist/interceptors/network-timing.js +19 -19
  16. package/dist/interceptors/network-timing.js.map +1 -1
  17. package/dist/interceptors/payload-transformer.js +19 -19
  18. package/dist/interceptors/payload-transformer.js.map +1 -1
  19. package/dist/interceptors/rate-limit.js +40 -40
  20. package/dist/interceptors/rate-limit.js.map +1 -1
  21. package/dist/interceptors/redirect.js +13 -13
  22. package/dist/interceptors/redirect.js.map +1 -1
  23. package/dist/interceptors/request-event.js +23 -23
  24. package/dist/interceptors/request-event.js.map +1 -1
  25. package/dist/interceptors/request-logger.js +13 -13
  26. package/dist/interceptors/request-logger.js.map +1 -1
  27. package/dist/interceptors/request-timing.js +23 -23
  28. package/dist/interceptors/request-timing.js.map +1 -1
  29. package/dist/interceptors/response-logger.js +19 -19
  30. package/dist/interceptors/response-logger.js.map +1 -1
  31. package/dist/interceptors/user-agent.js +29 -29
  32. package/dist/interceptors/user-agent.js.map +1 -1
  33. package/dist/interceptors/webex-tracking-id.js +15 -15
  34. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  35. package/dist/interceptors/webex-user-agent.js +13 -13
  36. package/dist/interceptors/webex-user-agent.js.map +1 -1
  37. package/dist/lib/batcher.js +83 -83
  38. package/dist/lib/batcher.js.map +1 -1
  39. package/dist/lib/credentials/credentials.js +103 -103
  40. package/dist/lib/credentials/credentials.js.map +1 -1
  41. package/dist/lib/credentials/grant-errors.js +17 -17
  42. package/dist/lib/credentials/grant-errors.js.map +1 -1
  43. package/dist/lib/credentials/index.js +2 -2
  44. package/dist/lib/credentials/index.js.map +1 -1
  45. package/dist/lib/credentials/scope.js +11 -11
  46. package/dist/lib/credentials/scope.js.map +1 -1
  47. package/dist/lib/credentials/token-collection.js +2 -2
  48. package/dist/lib/credentials/token-collection.js.map +1 -1
  49. package/dist/lib/credentials/token.js +145 -145
  50. package/dist/lib/credentials/token.js.map +1 -1
  51. package/dist/lib/page.js +49 -49
  52. package/dist/lib/page.js.map +1 -1
  53. package/dist/lib/services/constants.js.map +1 -1
  54. package/dist/lib/services/index.js +2 -2
  55. package/dist/lib/services/index.js.map +1 -1
  56. package/dist/lib/services/interceptors/server-error.js +9 -9
  57. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  58. package/dist/lib/services/interceptors/service.js +24 -24
  59. package/dist/lib/services/interceptors/service.js.map +1 -1
  60. package/dist/lib/services/metrics.js.map +1 -1
  61. package/dist/lib/services/service-catalog.js +104 -104
  62. package/dist/lib/services/service-catalog.js.map +1 -1
  63. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  64. package/dist/lib/services/service-host.js +134 -134
  65. package/dist/lib/services/service-host.js.map +1 -1
  66. package/dist/lib/services/service-registry.js +175 -175
  67. package/dist/lib/services/service-registry.js.map +1 -1
  68. package/dist/lib/services/service-state.js +38 -38
  69. package/dist/lib/services/service-state.js.map +1 -1
  70. package/dist/lib/services/service-url.js +31 -31
  71. package/dist/lib/services/service-url.js.map +1 -1
  72. package/dist/lib/services/services.js +245 -245
  73. package/dist/lib/services/services.js.map +1 -1
  74. package/dist/lib/stateless-webex-plugin.js +28 -28
  75. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  76. package/dist/lib/storage/decorators.js +27 -27
  77. package/dist/lib/storage/decorators.js.map +1 -1
  78. package/dist/lib/storage/errors.js +4 -4
  79. package/dist/lib/storage/errors.js.map +1 -1
  80. package/dist/lib/storage/index.js.map +1 -1
  81. package/dist/lib/storage/make-webex-plugin-store.js +44 -44
  82. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  83. package/dist/lib/storage/make-webex-store.js +40 -40
  84. package/dist/lib/storage/make-webex-store.js.map +1 -1
  85. package/dist/lib/storage/memory-store-adapter.js +9 -9
  86. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  87. package/dist/lib/webex-core-plugin-mixin.js +13 -13
  88. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  89. package/dist/lib/webex-http-error.js +9 -9
  90. package/dist/lib/webex-http-error.js.map +1 -1
  91. package/dist/lib/webex-internal-core-plugin-mixin.js +13 -13
  92. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  93. package/dist/lib/webex-plugin.js +36 -36
  94. package/dist/lib/webex-plugin.js.map +1 -1
  95. package/dist/plugins/logger.js +9 -9
  96. package/dist/plugins/logger.js.map +1 -1
  97. package/dist/webex-core.js +104 -104
  98. package/dist/webex-core.js.map +1 -1
  99. package/dist/webex-internal-core.js +12 -12
  100. package/dist/webex-internal-core.js.map +1 -1
  101. package/jest.config.js +3 -3
  102. package/package.json +20 -19
  103. package/process +1 -1
  104. package/src/config.js +90 -90
  105. package/src/credentials-config.js +212 -212
  106. package/src/index.js +62 -62
  107. package/src/interceptors/auth.js +186 -186
  108. package/src/interceptors/default-options.js +55 -55
  109. package/src/interceptors/embargo.js +43 -43
  110. package/src/interceptors/network-timing.js +54 -54
  111. package/src/interceptors/payload-transformer.js +55 -55
  112. package/src/interceptors/rate-limit.js +169 -169
  113. package/src/interceptors/redirect.js +106 -106
  114. package/src/interceptors/request-event.js +93 -93
  115. package/src/interceptors/request-logger.js +78 -78
  116. package/src/interceptors/request-timing.js +65 -65
  117. package/src/interceptors/response-logger.js +98 -98
  118. package/src/interceptors/user-agent.js +77 -77
  119. package/src/interceptors/webex-tracking-id.js +73 -73
  120. package/src/interceptors/webex-user-agent.js +79 -79
  121. package/src/lib/batcher.js +307 -307
  122. package/src/lib/credentials/credentials.js +552 -552
  123. package/src/lib/credentials/grant-errors.js +92 -92
  124. package/src/lib/credentials/index.js +16 -16
  125. package/src/lib/credentials/scope.js +34 -34
  126. package/src/lib/credentials/token-collection.js +17 -17
  127. package/src/lib/credentials/token.js +559 -559
  128. package/src/lib/page.js +159 -159
  129. package/src/lib/services/constants.js +9 -9
  130. package/src/lib/services/index.js +26 -26
  131. package/src/lib/services/interceptors/server-error.js +48 -48
  132. package/src/lib/services/interceptors/service.js +101 -101
  133. package/src/lib/services/metrics.js +4 -4
  134. package/src/lib/services/service-catalog.js +435 -435
  135. package/src/lib/services/service-fed-ramp.js +4 -4
  136. package/src/lib/services/service-host.js +267 -267
  137. package/src/lib/services/service-registry.js +465 -465
  138. package/src/lib/services/service-state.js +78 -78
  139. package/src/lib/services/service-url.js +124 -124
  140. package/src/lib/services/services.js +1018 -1018
  141. package/src/lib/stateless-webex-plugin.js +98 -98
  142. package/src/lib/storage/decorators.js +220 -220
  143. package/src/lib/storage/errors.js +15 -15
  144. package/src/lib/storage/index.js +10 -10
  145. package/src/lib/storage/make-webex-plugin-store.js +211 -211
  146. package/src/lib/storage/make-webex-store.js +140 -140
  147. package/src/lib/storage/memory-store-adapter.js +79 -79
  148. package/src/lib/webex-core-plugin-mixin.js +114 -114
  149. package/src/lib/webex-http-error.js +61 -61
  150. package/src/lib/webex-internal-core-plugin-mixin.js +107 -107
  151. package/src/lib/webex-plugin.js +222 -222
  152. package/src/plugins/logger.js +60 -60
  153. package/src/webex-core.js +745 -745
  154. package/src/webex-internal-core.js +46 -46
  155. package/test/integration/spec/credentials/credentials.js +139 -139
  156. package/test/integration/spec/credentials/token.js +102 -102
  157. package/test/integration/spec/services/service-catalog.js +838 -838
  158. package/test/integration/spec/services/services.js +1221 -1221
  159. package/test/integration/spec/webex-core.js +178 -178
  160. package/test/unit/spec/_setup.js +44 -44
  161. package/test/unit/spec/credentials/credentials.js +1017 -1017
  162. package/test/unit/spec/credentials/token.js +441 -441
  163. package/test/unit/spec/interceptors/auth.js +521 -521
  164. package/test/unit/spec/interceptors/default-options.js +84 -84
  165. package/test/unit/spec/interceptors/embargo.js +144 -144
  166. package/test/unit/spec/interceptors/network-timing.js +49 -49
  167. package/test/unit/spec/interceptors/payload-transformer.js +155 -155
  168. package/test/unit/spec/interceptors/rate-limit.js +302 -302
  169. package/test/unit/spec/interceptors/redirect.js +102 -102
  170. package/test/unit/spec/interceptors/request-timing.js +92 -92
  171. package/test/unit/spec/interceptors/user-agent.js +76 -76
  172. package/test/unit/spec/interceptors/webex-tracking-id.js +76 -76
  173. package/test/unit/spec/interceptors/webex-user-agent.js +159 -159
  174. package/test/unit/spec/lib/batcher.js +330 -330
  175. package/test/unit/spec/lib/page.js +148 -148
  176. package/test/unit/spec/lib/webex-plugin.js +48 -48
  177. package/test/unit/spec/services/interceptors/server-error.js +204 -204
  178. package/test/unit/spec/services/interceptors/service.js +188 -188
  179. package/test/unit/spec/services/service-catalog.js +194 -194
  180. package/test/unit/spec/services/service-host.js +260 -260
  181. package/test/unit/spec/services/service-registry.js +747 -747
  182. package/test/unit/spec/services/service-state.js +60 -60
  183. package/test/unit/spec/services/service-url.js +258 -258
  184. package/test/unit/spec/services/services.js +348 -348
  185. package/test/unit/spec/storage/persist.js +50 -50
  186. package/test/unit/spec/storage/storage-adapter.js +12 -12
  187. package/test/unit/spec/storage/wait-for-value.js +81 -81
  188. package/test/unit/spec/webex-core.js +253 -253
  189. package/test/unit/spec/webex-internal-core.js +91 -91
@@ -35,11 +35,11 @@ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (
35
35
  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; }
36
36
  /* eslint-disable camelcase */
37
37
 
38
- /**
39
- * Parse response from CI and converts to structured error when appropriate
40
- * @param {WebexHttpError} res
41
- * @private
42
- * @returns {GrantError}
38
+ /**
39
+ * Parse response from CI and converts to structured error when appropriate
40
+ * @param {WebexHttpError} res
41
+ * @private
42
+ * @returns {GrantError}
43
43
  */
44
44
  function processGrantError(res) {
45
45
  if (res.statusCode !== 400) {
@@ -55,8 +55,8 @@ function processGrantError(res) {
55
55
  return _promise.default.reject(new ErrorConstructor(res._res || res));
56
56
  }
57
57
 
58
- /**
59
- * @class
58
+ /**
59
+ * @class
60
60
  */
61
61
  var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
62
62
  keyFactory: function keyFactory(scope) {
@@ -64,14 +64,14 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
64
64
  }
65
65
  }), (_obj = {
66
66
  derived: {
67
- /**
68
- * Indicates if this token can be used in an auth header. `true` iff
69
- * {@link Token#access_token} is defined and {@link Token#isExpired} is
70
- * false.
71
- * @instance
72
- * @memberof Token
73
- * @readonly
74
- * @type {boolean}
67
+ /**
68
+ * Indicates if this token can be used in an auth header. `true` iff
69
+ * {@link Token#access_token} is defined and {@link Token#isExpired} is
70
+ * false.
71
+ * @instance
72
+ * @memberof Token
73
+ * @readonly
74
+ * @type {boolean}
75
75
  */
76
76
  canAuthorize: {
77
77
  deps: ['access_token', 'isExpired'],
@@ -79,19 +79,19 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
79
79
  return !!this.access_token && !this.isExpired;
80
80
  }
81
81
  },
82
- /**
83
- * Indicates that this token can be downscoped. `true` iff
84
- * {@link config.credentials.client_id} is defined and if
85
- * {@link Token#canAuthorize} is true
86
- *
87
- * Note: since {@link config} is not evented, we can't listen for changes to
88
- * {@link config.credentials.client_id}. As such,
89
- * {@link config.credentials.client_id} must always be set before
90
- * instantiating a {@link Token}
91
- * @instance
92
- * @memberof Token
93
- * @readonly
94
- * @type {boolean}
82
+ /**
83
+ * Indicates that this token can be downscoped. `true` iff
84
+ * {@link config.credentials.client_id} is defined and if
85
+ * {@link Token#canAuthorize} is true
86
+ *
87
+ * Note: since {@link config} is not evented, we can't listen for changes to
88
+ * {@link config.credentials.client_id}. As such,
89
+ * {@link config.credentials.client_id} must always be set before
90
+ * instantiating a {@link Token}
91
+ * @instance
92
+ * @memberof Token
93
+ * @readonly
94
+ * @type {boolean}
95
95
  */
96
96
  canDownscope: {
97
97
  deps: ['canAuthorize'],
@@ -99,19 +99,19 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
99
99
  return this.canAuthorize && !!this.config.client_id;
100
100
  }
101
101
  },
102
- /**
103
- * Indicates if this token can be refreshed. `true` iff
104
- * {@link Token@refresh_token} is defined and
105
- * {@link config.credentials.refreshCallback()} is defined
106
- *
107
- * Note: since {@link config} is not evented, we can't listen for changes to
108
- * {@link config.credentials.refreshCallback()}. As such,
109
- * {@link config.credentials.refreshCallback()} must always be set before
110
- * instantiating a {@link Token}
111
- * @instance
112
- * @memberof Token
113
- * @readonly
114
- * @type {boolean}
102
+ /**
103
+ * Indicates if this token can be refreshed. `true` iff
104
+ * {@link Token@refresh_token} is defined and
105
+ * {@link config.credentials.refreshCallback()} is defined
106
+ *
107
+ * Note: since {@link config} is not evented, we can't listen for changes to
108
+ * {@link config.credentials.refreshCallback()}. As such,
109
+ * {@link config.credentials.refreshCallback()} must always be set before
110
+ * instantiating a {@link Token}
111
+ * @instance
112
+ * @memberof Token
113
+ * @readonly
114
+ * @type {boolean}
115
115
  */
116
116
  canRefresh: {
117
117
  deps: ['refresh_token'],
@@ -122,13 +122,13 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
122
122
  return !!this.refresh_token && !!this.config.client_secret;
123
123
  }
124
124
  },
125
- /**
126
- * Indicates if this `Token` is expired. `true` iff {@link Token#expires} is
127
- * defined and is less than {@link Date.now()}.
128
- * @instance
129
- * @memberof Token
130
- * @readonly
131
- * @type {boolean}
125
+ /**
126
+ * Indicates if this `Token` is expired. `true` iff {@link Token#expires} is
127
+ * defined and is less than {@link Date.now()}.
128
+ * @instance
129
+ * @memberof Token
130
+ * @readonly
131
+ * @type {boolean}
132
132
  */
133
133
  isExpired: {
134
134
  deps: ['expires', '_isExpired'],
@@ -138,13 +138,13 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
138
138
  return !!this.expires && this._isExpired;
139
139
  }
140
140
  },
141
- /**
142
- * Cache for toString()
143
- * @instance
144
- * @memberof Token
145
- * @private
146
- * @readonly
147
- * @type {string}
141
+ /**
142
+ * Cache for toString()
143
+ * @instance
144
+ * @memberof Token
145
+ * @private
146
+ * @readonly
147
+ * @type {string}
148
148
  */
149
149
  _string: {
150
150
  deps: ['access_token', 'token_type'],
@@ -158,55 +158,55 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
158
158
  },
159
159
  namespace: 'Credentials',
160
160
  props: {
161
- /**
162
- * Used for indexing in the credentials userTokens collection
163
- * @instance
164
- * @memberof Token
165
- * @private
166
- * @type {string}
161
+ /**
162
+ * Used for indexing in the credentials userTokens collection
163
+ * @instance
164
+ * @memberof Token
165
+ * @private
166
+ * @type {string}
167
167
  */
168
168
  scope: 'string',
169
- /**
170
- * @instance
171
- * @memberof Token
172
- * @type {string}
169
+ /**
170
+ * @instance
171
+ * @memberof Token
172
+ * @type {string}
173
173
  */
174
174
  access_token: 'string',
175
- /**
176
- * @instance
177
- * @memberof Token
178
- * @type {number}
175
+ /**
176
+ * @instance
177
+ * @memberof Token
178
+ * @type {number}
179
179
  */
180
180
  expires: 'number',
181
- /**
182
- * @instance
183
- * @memberof Token
184
- * @type {number}
181
+ /**
182
+ * @instance
183
+ * @memberof Token
184
+ * @type {number}
185
185
  */
186
186
  expires_in: 'number',
187
- /**
188
- * @instance
189
- * @memberof Token
190
- * @type {string}
187
+ /**
188
+ * @instance
189
+ * @memberof Token
190
+ * @type {string}
191
191
  */
192
192
  refresh_token: 'string',
193
- /**
194
- * @instance
195
- * @memberof Token
196
- * @type {number}
193
+ /**
194
+ * @instance
195
+ * @memberof Token
196
+ * @type {number}
197
197
  */
198
198
  refresh_token_expires: 'number',
199
- /**
200
- * @instance
201
- * @memberof Token
202
- * @type {number}
199
+ /**
200
+ * @instance
201
+ * @memberof Token
202
+ * @type {number}
203
203
  */
204
204
  refresh_token_expires_in: 'number',
205
- /**
206
- * @default "Bearer"
207
- * @instance
208
- * @memberof Token
209
- * @type {string}
205
+ /**
206
+ * @default "Bearer"
207
+ * @instance
208
+ * @memberof Token
209
+ * @type {string}
210
210
  */
211
211
  token_type: {
212
212
  default: 'Bearer',
@@ -214,38 +214,38 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
214
214
  }
215
215
  },
216
216
  session: {
217
- /**
218
- * Used by {@link Token#isExpired} to avoid doing a Date comparison.
219
- * @instance
220
- * @memberof Token
221
- * @private
222
- * @type {boolean}
217
+ /**
218
+ * Used by {@link Token#isExpired} to avoid doing a Date comparison.
219
+ * @instance
220
+ * @memberof Token
221
+ * @private
222
+ * @type {boolean}
223
223
  */
224
224
  _isExpired: {
225
225
  default: false,
226
226
  type: 'boolean'
227
227
  },
228
- /**
229
- * Handle to the previous token that we'll revoke when we refresh this
230
- * token. The idea is to keep allow two valid tokens when a refresh occurs;
231
- * we don't want revoke a token that's in the middle of being used, so when
232
- * we do a token refresh, we won't revoke the token being refreshed, but
233
- * we'll revoke the previous one.
234
- * @instance
235
- * @memberof Token
236
- * @private
237
- * @type {Object}
228
+ /**
229
+ * Handle to the previous token that we'll revoke when we refresh this
230
+ * token. The idea is to keep allow two valid tokens when a refresh occurs;
231
+ * we don't want revoke a token that's in the middle of being used, so when
232
+ * we do a token refresh, we won't revoke the token being refreshed, but
233
+ * we'll revoke the previous one.
234
+ * @instance
235
+ * @memberof Token
236
+ * @private
237
+ * @type {Object}
238
238
  */
239
239
  previousToken: {
240
240
  type: 'state'
241
241
  }
242
242
  },
243
- /**
244
- * Uses this token to request a new Token with a subset of this Token's scopes
245
- * @instance
246
- * @memberof Token
247
- * @param {string} scope
248
- * @returns {Promise<Token>}
243
+ /**
244
+ * Uses this token to request a new Token with a subset of this Token's scopes
245
+ * @instance
246
+ * @memberof Token
247
+ * @param {string} scope
248
+ * @returns {Promise<Token>}
249
249
  */
250
250
  downscope: function downscope(scope) {
251
251
  var _this = this;
@@ -295,14 +295,14 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
295
295
  });
296
296
  });
297
297
  },
298
- /**
299
- * Initializer
300
- * @instance
301
- * @memberof Token
302
- * @param {Object} [attrs={}]
303
- * @param {Object} [options={}]
304
- * @see {@link WebexPlugin#initialize()}
305
- * @returns {Token}
298
+ /**
299
+ * Initializer
300
+ * @instance
301
+ * @memberof Token
302
+ * @param {Object} [attrs={}]
303
+ * @param {Object} [options={}]
304
+ * @see {@link WebexPlugin#initialize()}
305
+ * @returns {Token}
306
306
  */
307
307
  initialize: function initialize() {
308
308
  var _this2 = this;
@@ -328,12 +328,12 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
328
328
  }
329
329
  }
330
330
  },
331
- /**
332
- * Refreshes this Token. Relies on
333
- * {@link config.credentials.refreshCallback()}
334
- * @instance
335
- * @memberof Token
336
- * @returns {Promise<Token>}
331
+ /**
332
+ * Refreshes this Token. Relies on
333
+ * {@link config.credentials.refreshCallback()}
334
+ * @instance
335
+ * @memberof Token
336
+ * @returns {Promise<Token>}
337
337
  */
338
338
  refresh: function refresh() {
339
339
  var _this3 = this;
@@ -396,11 +396,11 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
396
396
  });
397
397
  }).catch(processGrantError);
398
398
  },
399
- /**
400
- * Revokes this token and unsets its local properties
401
- * @instance
402
- * @memberof Token
403
- * @returns {Promise}
399
+ /**
400
+ * Revokes this token and unsets its local properties
401
+ * @instance
402
+ * @memberof Token
403
+ * @returns {Promise}
404
404
  */
405
405
  revoke: function revoke() {
406
406
  var _this4 = this;
@@ -470,12 +470,12 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
470
470
  }
471
471
  return (0, _apply.default)(_webexPlugin.default.prototype.set, this, [attrs, options]);
472
472
  },
473
- /**
474
- * Renders the token object as an HTTP Header Value
475
- * @instance
476
- * @memberof Token
477
- * @returns {string}
478
- * @see {@link Object#toString()}
473
+ /**
474
+ * Renders the token object as an HTTP Header Value
475
+ * @instance
476
+ * @memberof Token
477
+ * @returns {string}
478
+ * @see {@link Object#toString()}
479
479
  */
480
480
  toString: function toString() {
481
481
  if (!this._string) {
@@ -483,13 +483,13 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
483
483
  }
484
484
  return this._string;
485
485
  },
486
- /**
487
- * Uses a non-producation api to return information about this token. This
488
- * method is primarily for tests and will throw if NODE_ENV === production
489
- * @instance
490
- * @memberof Token
491
- * @private
492
- * @returns {Promise}
486
+ /**
487
+ * Uses a non-producation api to return information about this token. This
488
+ * method is primarily for tests and will throw if NODE_ENV === production
489
+ * @instance
490
+ * @memberof Token
491
+ * @private
492
+ * @returns {Promise}
493
493
  */
494
494
  validate: function validate() {
495
495
  var _this5 = this;
@@ -527,7 +527,7 @@ var Token = _webexPlugin.default.extend((_dec = (0, _common.oneFlight)({
527
527
  return res.body;
528
528
  });
529
529
  },
530
- version: "2.59.1"
530
+ version: "2.59.0"
531
531
  }, ((0, _applyDecoratedDescriptor2.default)(_obj, "downscope", [_dec], (0, _getOwnPropertyDescriptor.default)(_obj, "downscope"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "refresh", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "refresh"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "revoke", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "revoke"), _obj)), _obj)));
532
532
  var _default = Token;
533
533
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["_common","require","_commonTimers","_webexHttpError","_interopRequireDefault","_webexPlugin","_scope","_grantErrors","_interopRequireWildcard","_dec","_obj","_getRequireWildcardCache","nodeInterop","_WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","_Object$defineProperty","_Object$getOwnPropertyDescriptor2","key","Object","prototype","hasOwnProperty","call","desc","set","ownKeys","object","enumerableOnly","keys","_Object$keys","_Object$getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","processGrantError","res","statusCode","_promise","reject","ErrorConstructor","grantErrors","select","body","error","OAuthError","WebexHttpError","_res","Token","WebexPlugin","extend","oneFlight","keyFactory","scope","derived","canAuthorize","deps","fn","access_token","isExpired","canDownscope","config","client_id","canRefresh","inBrowser","refresh_token","refreshCallback","client_secret","expires","_isExpired","_string","token_type","concat","namespace","props","expires_in","refresh_token_expires","refresh_token_expires_in","type","session","previousToken","downscope","_this","logger","info","Error","trace","sortScope","webex","request","method","uri","tokenUrl","addAuthHeader","form","grant_type","token","self_contained_token","then","_assign","parent","initialize","_this2","attrs","undefined","options","_apply","_now","safeSetTimeout","refresh","_this3","promise","resolve","redirect_uri","auth","user","pass","sendImmediately","shouldRefreshAccessToken","_pick2","process","env","NODE_ENV","revoke","unset","catch","_this4","revokeUrl","token_type_hint","_this$_filterSetParam","_filterSetParameters","_this$_filterSetParam2","_slicedToArray2","includes","_attrs$access_token$s","split","_attrs$access_token$s2","now","toString","validate","_this5","service","resource","reason","convApi","CONVERSATION_SERVICE","CONVERSATION_SERVICE_URL","headers","authorization","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default","exports"],"sources":["token.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {pick} from 'lodash';\nimport {inBrowser, oneFlight} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\n\nimport WebexHttpError from '../webex-http-error';\nimport WebexPlugin from '../webex-plugin';\n\nimport {sortScope} from './scope';\nimport grantErrors, {OAuthError} from './grant-errors';\n\n/* eslint-disable camelcase */\n\n/**\n * Parse response from CI and converts to structured error when appropriate\n * @param {WebexHttpError} res\n * @private\n * @returns {GrantError}\n */\nfunction processGrantError(res) {\n if (res.statusCode !== 400) {\n return Promise.reject(res);\n }\n\n const ErrorConstructor = grantErrors.select(res.body.error);\n\n if (ErrorConstructor === OAuthError && res instanceof WebexHttpError) {\n return Promise.reject(res);\n }\n if (!ErrorConstructor) {\n return Promise.reject(res);\n }\n\n return Promise.reject(new ErrorConstructor(res._res || res));\n}\n\n/**\n * @class\n */\nconst Token = WebexPlugin.extend({\n derived: {\n /**\n * Indicates if this token can be used in an auth header. `true` iff\n * {@link Token#access_token} is defined and {@link Token#isExpired} is\n * false.\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n canAuthorize: {\n deps: ['access_token', 'isExpired'],\n fn() {\n return !!this.access_token && !this.isExpired;\n },\n },\n\n /**\n * Indicates that this token can be downscoped. `true` iff\n * {@link config.credentials.client_id} is defined and if\n * {@link Token#canAuthorize} is true\n *\n * Note: since {@link config} is not evented, we can't listen for changes to\n * {@link config.credentials.client_id}. As such,\n * {@link config.credentials.client_id} must always be set before\n * instantiating a {@link Token}\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n canDownscope: {\n deps: ['canAuthorize'],\n fn() {\n return this.canAuthorize && !!this.config.client_id;\n },\n },\n\n /**\n * Indicates if this token can be refreshed. `true` iff\n * {@link Token@refresh_token} is defined and\n * {@link config.credentials.refreshCallback()} is defined\n *\n * Note: since {@link config} is not evented, we can't listen for changes to\n * {@link config.credentials.refreshCallback()}. As such,\n * {@link config.credentials.refreshCallback()} must always be set before\n * instantiating a {@link Token}\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n canRefresh: {\n deps: ['refresh_token'],\n fn() {\n if (inBrowser) {\n return !!this.refresh_token && !!this.config.refreshCallback;\n }\n\n return !!this.refresh_token && !!this.config.client_secret;\n },\n },\n\n /**\n * Indicates if this `Token` is expired. `true` iff {@link Token#expires} is\n * defined and is less than {@link Date.now()}.\n * @instance\n * @memberof Token\n * @readonly\n * @type {boolean}\n */\n isExpired: {\n deps: ['expires', '_isExpired'],\n fn() {\n // in order to avoid setting `cache:false`, we'll use a private property\n // and a timer rather than comparing to `Date.now()`;\n return !!this.expires && this._isExpired;\n },\n },\n\n /**\n * Cache for toString()\n * @instance\n * @memberof Token\n * @private\n * @readonly\n * @type {string}\n */\n _string: {\n deps: ['access_token', 'token_type'],\n fn() {\n if (!this.access_token || !this.token_type) {\n return '';\n }\n\n return `${this.token_type} ${this.access_token}`;\n },\n },\n },\n\n namespace: 'Credentials',\n\n props: {\n /**\n * Used for indexing in the credentials userTokens collection\n * @instance\n * @memberof Token\n * @private\n * @type {string}\n */\n scope: 'string',\n /**\n * @instance\n * @memberof Token\n * @type {string}\n */\n access_token: 'string',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n expires: 'number',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n expires_in: 'number',\n /**\n * @instance\n * @memberof Token\n * @type {string}\n */\n refresh_token: 'string',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n refresh_token_expires: 'number',\n /**\n * @instance\n * @memberof Token\n * @type {number}\n */\n refresh_token_expires_in: 'number',\n /**\n * @default \"Bearer\"\n * @instance\n * @memberof Token\n * @type {string}\n */\n token_type: {\n default: 'Bearer',\n type: 'string',\n },\n },\n\n session: {\n /**\n * Used by {@link Token#isExpired} to avoid doing a Date comparison.\n * @instance\n * @memberof Token\n * @private\n * @type {boolean}\n */\n _isExpired: {\n default: false,\n type: 'boolean',\n },\n /**\n * Handle to the previous token that we'll revoke when we refresh this\n * token. The idea is to keep allow two valid tokens when a refresh occurs;\n * we don't want revoke a token that's in the middle of being used, so when\n * we do a token refresh, we won't revoke the token being refreshed, but\n * we'll revoke the previous one.\n * @instance\n * @memberof Token\n * @private\n * @type {Object}\n */\n previousToken: {\n type: 'state',\n },\n },\n\n @oneFlight({\n keyFactory(scope) {\n return scope;\n },\n })\n /**\n * Uses this token to request a new Token with a subset of this Token's scopes\n * @instance\n * @memberof Token\n * @param {string} scope\n * @returns {Promise<Token>}\n */\n downscope(scope) {\n this.logger.info(`token: downscoping token to ${scope}`);\n\n if (this.isExpired) {\n this.logger.info('token: request received to downscope expired access_token');\n\n return Promise.reject(new Error('cannot downscope expired access token'));\n }\n\n if (!this.canDownscope) {\n if (this.config.client_id) {\n this.logger.info('token: request received to downscope invalid access_token');\n } else {\n this.logger.trace('token: cannot downscope without client_id');\n }\n\n return Promise.reject(new Error('cannot downscope access token'));\n }\n\n // Since we're going to use scope as the index in our token collection, it's\n // important scopes are always deterministically specified.\n if (scope) {\n scope = sortScope(scope);\n }\n\n // Ideally, we could depend on the service to communicate this error, but\n // all we get is \"invalid scope\", which, to the lay person, implies\n // something wrong with *one* of the scopes, not the whole thing.\n if (scope === sortScope(this.config.scope)) {\n return Promise.reject(new Error('token: scope reduction requires a reduced scope'));\n }\n\n return this.webex\n .request({\n method: 'POST',\n uri: this.config.tokenUrl,\n addAuthHeader: false,\n form: {\n grant_type: 'urn:cisco:oauth:grant-type:scope-reduction',\n token: this.access_token,\n scope,\n client_id: this.config.client_id,\n self_contained_token: true,\n },\n })\n .then((res) => {\n this.logger.info(`token: downscoped token to ${scope}`);\n\n return new Token(Object.assign(res.body, {scope}), {parent: this.parent});\n });\n },\n\n /**\n * Initializer\n * @instance\n * @memberof Token\n * @param {Object} [attrs={}]\n * @param {Object} [options={}]\n * @see {@link WebexPlugin#initialize()}\n * @returns {Token}\n */\n initialize(attrs = {}, options = {}) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n if (typeof attrs === 'string') {\n this.access_token = attrs;\n }\n\n if (!this.access_token) {\n throw new Error('`access_token` is required');\n }\n\n // We don't want the derived property `isExpired` to need {cache:false}, so\n // we'll set up a timer the runs when this token should expire.\n if (this.expires) {\n if (this.expires < Date.now()) {\n this._isExpired = true;\n } else {\n safeSetTimeout(() => {\n this._isExpired = true;\n }, this.expires - Date.now());\n }\n }\n },\n\n @oneFlight\n /**\n * Refreshes this Token. Relies on\n * {@link config.credentials.refreshCallback()}\n * @instance\n * @memberof Token\n * @returns {Promise<Token>}\n */\n refresh() {\n if (!this.canRefresh) {\n throw new Error('Not enough information available to refresh this access token');\n }\n\n let promise;\n\n if (inBrowser) {\n if (!this.config.refreshCallback) {\n throw new Error('Cannot refresh access token without refreshCallback');\n }\n\n promise = Promise.resolve(this.config.refreshCallback(this.webex, this));\n }\n\n return (\n promise ||\n this.webex\n .request({\n method: 'POST',\n uri: this.config.tokenUrl,\n form: {\n grant_type: 'refresh_token',\n redirect_uri: this.config.redirect_uri,\n refresh_token: this.refresh_token,\n },\n auth: {\n user: this.config.client_id,\n pass: this.config.client_secret,\n sendImmediately: true,\n },\n shouldRefreshAccessToken: false,\n })\n .then((res) => res.body)\n )\n .then((obj) => {\n if (!obj) {\n throw new Error('token: refreshCallback() did not produce an object');\n }\n // If the authentication server did not send back a refresh token, copy\n // the current refresh token and related values to the response (note:\n // at time of implementation, CI never sends a new refresh token)\n if (!obj.refresh_token) {\n Object.assign(\n obj,\n pick(this, 'refresh_token', 'refresh_token_expires', 'refresh_token_expires_in')\n );\n }\n\n // If the new token is the same as the previous token, then we may have\n // found a bug in CI; log the details and reject the Promise\n if (this.access_token === obj.access_token) {\n this.logger.error('token: new token matches current token');\n // log the tokens if it is not production\n if (process.env.NODE_ENV !== 'production') {\n this.logger.error('token: current token:', this.access_token);\n this.logger.error('token: new token:', obj.access_token);\n }\n\n return Promise.reject(new Error('new token matches current token'));\n }\n\n if (this.previousToken) {\n this.previousToken.revoke();\n this.unset('previousToken');\n }\n\n obj.previousToken = this;\n obj.scope = this.scope;\n\n return new Token(obj, {parent: this.parent});\n })\n .catch(processGrantError);\n },\n\n @oneFlight\n /**\n * Revokes this token and unsets its local properties\n * @instance\n * @memberof Token\n * @returns {Promise}\n */\n revoke() {\n if (this.isExpired) {\n this.logger.info('token: already expired, not making making revocation request');\n\n return Promise.resolve();\n }\n\n if (!this.canAuthorize) {\n this.logger.info('token: no longer valid, not making revocation request');\n\n return Promise.resolve();\n }\n\n // FIXME we need to use the user token revocation endpoint to revoke a token\n // without a client_secret, but it doesn't current support using a token to\n // revoke itself\n // Note: I'm not making a canRevoke property because there should be changes\n // coming to the user token revocation endpoint that allow us to do this\n // correctly.\n if (!this.config.client_secret) {\n this.logger.info('token: no client secret available, not making revocation request');\n\n return Promise.resolve();\n }\n\n this.logger.info('token: revoking access token');\n\n return this.webex\n .request({\n method: 'POST',\n uri: this.config.revokeUrl,\n form: {\n token: this.access_token,\n token_type_hint: 'access_token',\n },\n auth: {\n user: this.config.client_id,\n pass: this.config.client_secret,\n sendImmediately: true,\n },\n shouldRefreshAccessToken: false,\n })\n .then(() => {\n this.unset(['access_token', 'expires', 'expires_in', 'token_type']);\n this.logger.info('token: access token revoked');\n })\n .catch(processGrantError);\n },\n\n set(...args) {\n // eslint-disable-next-line prefer-const\n let [attrs, options] = this._filterSetParameters(...args);\n\n if (!attrs.token_type && attrs.access_token && attrs.access_token.includes(' ')) {\n const [token_type, access_token] = attrs.access_token.split(' ');\n\n attrs = {...attrs, access_token, token_type};\n }\n const now = Date.now();\n\n if (!attrs.expires && attrs.expires_in) {\n attrs.expires = now + attrs.expires_in * 1000;\n }\n\n if (!attrs.refresh_token_expires && attrs.refresh_token_expires_in) {\n attrs.refresh_token_expires = now + attrs.refresh_token_expires_in * 1000;\n }\n\n if (attrs.scope) {\n attrs.scope = sortScope(attrs.scope);\n }\n\n return Reflect.apply(WebexPlugin.prototype.set, this, [attrs, options]);\n },\n\n /**\n * Renders the token object as an HTTP Header Value\n * @instance\n * @memberof Token\n * @returns {string}\n * @see {@link Object#toString()}\n */\n toString() {\n if (!this._string) {\n throw new Error('cannot stringify Token');\n }\n\n return this._string;\n },\n\n /**\n * Uses a non-producation api to return information about this token. This\n * method is primarily for tests and will throw if NODE_ENV === production\n * @instance\n * @memberof Token\n * @private\n * @returns {Promise}\n */\n validate() {\n if (process.env.NODE_ENV === 'production') {\n throw new Error('Token#validate() must not be used in production');\n }\n\n return this.webex\n .request({\n method: 'POST',\n service: 'conversation',\n resource: 'users/validateAuthToken',\n body: {\n token: this.access_token,\n },\n })\n .catch((reason) => {\n if ('statusCode' in reason) {\n return Promise.reject(reason);\n }\n this.logger.info(\"REMINDER: If you're investigating a network error here, it's normal\");\n\n // If we got an error that isn't a WebexHttpError, assume the problem is\n // that we don't have the wdm plugin loaded and service/resource isn't\n // a valid means of identifying a request.\n const convApi =\n process.env.CONVERSATION_SERVICE ||\n process.env.CONVERSATION_SERVICE_URL ||\n 'https://conv-a.wbx2.com/conversation/api/v1';\n\n return this.webex.request({\n method: 'POST',\n uri: `${convApi}/users/validateAuthToken`,\n body: {\n token: this.access_token,\n },\n headers: {\n authorization: `Bearer ${this.access_token}`,\n },\n });\n })\n .then((res) => res.body);\n },\n});\n\nexport default Token;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_common","require","_commonTimers","_webexHttpError","_interopRequireDefault","_webexPlugin","_scope","_grantErrors","_interopRequireWildcard","_dec","_obj","_getRequireWildcardCache","nodeInterop","_WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","_Object$defineProperty","_Object$getOwnPropertyDescriptor2","key","Object","prototype","hasOwnProperty","call","desc","set","ownKeys","object","enumerableOnly","keys","_Object$keys","_Object$getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","processGrantError","res","statusCode","_promise","reject","ErrorConstructor","grantErrors","select","body","error","OAuthError","WebexHttpError","_res","Token","WebexPlugin","extend","oneFlight","keyFactory","scope","derived","canAuthorize","deps","fn","access_token","isExpired","canDownscope","config","client_id","canRefresh","inBrowser","refresh_token","refreshCallback","client_secret","expires","_isExpired","_string","token_type","concat","namespace","props","expires_in","refresh_token_expires","refresh_token_expires_in","type","session","previousToken","downscope","_this","logger","info","Error","trace","sortScope","webex","request","method","uri","tokenUrl","addAuthHeader","form","grant_type","token","self_contained_token","then","_assign","parent","initialize","_this2","attrs","undefined","options","_apply","_now","safeSetTimeout","refresh","_this3","promise","resolve","redirect_uri","auth","user","pass","sendImmediately","shouldRefreshAccessToken","_pick2","process","env","NODE_ENV","revoke","unset","catch","_this4","revokeUrl","token_type_hint","_this$_filterSetParam","_filterSetParameters","_this$_filterSetParam2","_slicedToArray2","includes","_attrs$access_token$s","split","_attrs$access_token$s2","now","toString","validate","_this5","service","resource","reason","convApi","CONVERSATION_SERVICE","CONVERSATION_SERVICE_URL","headers","authorization","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default","exports"],"sources":["token.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport {pick} from 'lodash';\r\nimport {inBrowser, oneFlight} from '@webex/common';\r\nimport {safeSetTimeout} from '@webex/common-timers';\r\n\r\nimport WebexHttpError from '../webex-http-error';\r\nimport WebexPlugin from '../webex-plugin';\r\n\r\nimport {sortScope} from './scope';\r\nimport grantErrors, {OAuthError} from './grant-errors';\r\n\r\n/* eslint-disable camelcase */\r\n\r\n/**\r\n * Parse response from CI and converts to structured error when appropriate\r\n * @param {WebexHttpError} res\r\n * @private\r\n * @returns {GrantError}\r\n */\r\nfunction processGrantError(res) {\r\n if (res.statusCode !== 400) {\r\n return Promise.reject(res);\r\n }\r\n\r\n const ErrorConstructor = grantErrors.select(res.body.error);\r\n\r\n if (ErrorConstructor === OAuthError && res instanceof WebexHttpError) {\r\n return Promise.reject(res);\r\n }\r\n if (!ErrorConstructor) {\r\n return Promise.reject(res);\r\n }\r\n\r\n return Promise.reject(new ErrorConstructor(res._res || res));\r\n}\r\n\r\n/**\r\n * @class\r\n */\r\nconst Token = WebexPlugin.extend({\r\n derived: {\r\n /**\r\n * Indicates if this token can be used in an auth header. `true` iff\r\n * {@link Token#access_token} is defined and {@link Token#isExpired} is\r\n * false.\r\n * @instance\r\n * @memberof Token\r\n * @readonly\r\n * @type {boolean}\r\n */\r\n canAuthorize: {\r\n deps: ['access_token', 'isExpired'],\r\n fn() {\r\n return !!this.access_token && !this.isExpired;\r\n },\r\n },\r\n\r\n /**\r\n * Indicates that this token can be downscoped. `true` iff\r\n * {@link config.credentials.client_id} is defined and if\r\n * {@link Token#canAuthorize} is true\r\n *\r\n * Note: since {@link config} is not evented, we can't listen for changes to\r\n * {@link config.credentials.client_id}. As such,\r\n * {@link config.credentials.client_id} must always be set before\r\n * instantiating a {@link Token}\r\n * @instance\r\n * @memberof Token\r\n * @readonly\r\n * @type {boolean}\r\n */\r\n canDownscope: {\r\n deps: ['canAuthorize'],\r\n fn() {\r\n return this.canAuthorize && !!this.config.client_id;\r\n },\r\n },\r\n\r\n /**\r\n * Indicates if this token can be refreshed. `true` iff\r\n * {@link Token@refresh_token} is defined and\r\n * {@link config.credentials.refreshCallback()} is defined\r\n *\r\n * Note: since {@link config} is not evented, we can't listen for changes to\r\n * {@link config.credentials.refreshCallback()}. As such,\r\n * {@link config.credentials.refreshCallback()} must always be set before\r\n * instantiating a {@link Token}\r\n * @instance\r\n * @memberof Token\r\n * @readonly\r\n * @type {boolean}\r\n */\r\n canRefresh: {\r\n deps: ['refresh_token'],\r\n fn() {\r\n if (inBrowser) {\r\n return !!this.refresh_token && !!this.config.refreshCallback;\r\n }\r\n\r\n return !!this.refresh_token && !!this.config.client_secret;\r\n },\r\n },\r\n\r\n /**\r\n * Indicates if this `Token` is expired. `true` iff {@link Token#expires} is\r\n * defined and is less than {@link Date.now()}.\r\n * @instance\r\n * @memberof Token\r\n * @readonly\r\n * @type {boolean}\r\n */\r\n isExpired: {\r\n deps: ['expires', '_isExpired'],\r\n fn() {\r\n // in order to avoid setting `cache:false`, we'll use a private property\r\n // and a timer rather than comparing to `Date.now()`;\r\n return !!this.expires && this._isExpired;\r\n },\r\n },\r\n\r\n /**\r\n * Cache for toString()\r\n * @instance\r\n * @memberof Token\r\n * @private\r\n * @readonly\r\n * @type {string}\r\n */\r\n _string: {\r\n deps: ['access_token', 'token_type'],\r\n fn() {\r\n if (!this.access_token || !this.token_type) {\r\n return '';\r\n }\r\n\r\n return `${this.token_type} ${this.access_token}`;\r\n },\r\n },\r\n },\r\n\r\n namespace: 'Credentials',\r\n\r\n props: {\r\n /**\r\n * Used for indexing in the credentials userTokens collection\r\n * @instance\r\n * @memberof Token\r\n * @private\r\n * @type {string}\r\n */\r\n scope: 'string',\r\n /**\r\n * @instance\r\n * @memberof Token\r\n * @type {string}\r\n */\r\n access_token: 'string',\r\n /**\r\n * @instance\r\n * @memberof Token\r\n * @type {number}\r\n */\r\n expires: 'number',\r\n /**\r\n * @instance\r\n * @memberof Token\r\n * @type {number}\r\n */\r\n expires_in: 'number',\r\n /**\r\n * @instance\r\n * @memberof Token\r\n * @type {string}\r\n */\r\n refresh_token: 'string',\r\n /**\r\n * @instance\r\n * @memberof Token\r\n * @type {number}\r\n */\r\n refresh_token_expires: 'number',\r\n /**\r\n * @instance\r\n * @memberof Token\r\n * @type {number}\r\n */\r\n refresh_token_expires_in: 'number',\r\n /**\r\n * @default \"Bearer\"\r\n * @instance\r\n * @memberof Token\r\n * @type {string}\r\n */\r\n token_type: {\r\n default: 'Bearer',\r\n type: 'string',\r\n },\r\n },\r\n\r\n session: {\r\n /**\r\n * Used by {@link Token#isExpired} to avoid doing a Date comparison.\r\n * @instance\r\n * @memberof Token\r\n * @private\r\n * @type {boolean}\r\n */\r\n _isExpired: {\r\n default: false,\r\n type: 'boolean',\r\n },\r\n /**\r\n * Handle to the previous token that we'll revoke when we refresh this\r\n * token. The idea is to keep allow two valid tokens when a refresh occurs;\r\n * we don't want revoke a token that's in the middle of being used, so when\r\n * we do a token refresh, we won't revoke the token being refreshed, but\r\n * we'll revoke the previous one.\r\n * @instance\r\n * @memberof Token\r\n * @private\r\n * @type {Object}\r\n */\r\n previousToken: {\r\n type: 'state',\r\n },\r\n },\r\n\r\n @oneFlight({\r\n keyFactory(scope) {\r\n return scope;\r\n },\r\n })\r\n /**\r\n * Uses this token to request a new Token with a subset of this Token's scopes\r\n * @instance\r\n * @memberof Token\r\n * @param {string} scope\r\n * @returns {Promise<Token>}\r\n */\r\n downscope(scope) {\r\n this.logger.info(`token: downscoping token to ${scope}`);\r\n\r\n if (this.isExpired) {\r\n this.logger.info('token: request received to downscope expired access_token');\r\n\r\n return Promise.reject(new Error('cannot downscope expired access token'));\r\n }\r\n\r\n if (!this.canDownscope) {\r\n if (this.config.client_id) {\r\n this.logger.info('token: request received to downscope invalid access_token');\r\n } else {\r\n this.logger.trace('token: cannot downscope without client_id');\r\n }\r\n\r\n return Promise.reject(new Error('cannot downscope access token'));\r\n }\r\n\r\n // Since we're going to use scope as the index in our token collection, it's\r\n // important scopes are always deterministically specified.\r\n if (scope) {\r\n scope = sortScope(scope);\r\n }\r\n\r\n // Ideally, we could depend on the service to communicate this error, but\r\n // all we get is \"invalid scope\", which, to the lay person, implies\r\n // something wrong with *one* of the scopes, not the whole thing.\r\n if (scope === sortScope(this.config.scope)) {\r\n return Promise.reject(new Error('token: scope reduction requires a reduced scope'));\r\n }\r\n\r\n return this.webex\r\n .request({\r\n method: 'POST',\r\n uri: this.config.tokenUrl,\r\n addAuthHeader: false,\r\n form: {\r\n grant_type: 'urn:cisco:oauth:grant-type:scope-reduction',\r\n token: this.access_token,\r\n scope,\r\n client_id: this.config.client_id,\r\n self_contained_token: true,\r\n },\r\n })\r\n .then((res) => {\r\n this.logger.info(`token: downscoped token to ${scope}`);\r\n\r\n return new Token(Object.assign(res.body, {scope}), {parent: this.parent});\r\n });\r\n },\r\n\r\n /**\r\n * Initializer\r\n * @instance\r\n * @memberof Token\r\n * @param {Object} [attrs={}]\r\n * @param {Object} [options={}]\r\n * @see {@link WebexPlugin#initialize()}\r\n * @returns {Token}\r\n */\r\n initialize(attrs = {}, options = {}) {\r\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\r\n\r\n if (typeof attrs === 'string') {\r\n this.access_token = attrs;\r\n }\r\n\r\n if (!this.access_token) {\r\n throw new Error('`access_token` is required');\r\n }\r\n\r\n // We don't want the derived property `isExpired` to need {cache:false}, so\r\n // we'll set up a timer the runs when this token should expire.\r\n if (this.expires) {\r\n if (this.expires < Date.now()) {\r\n this._isExpired = true;\r\n } else {\r\n safeSetTimeout(() => {\r\n this._isExpired = true;\r\n }, this.expires - Date.now());\r\n }\r\n }\r\n },\r\n\r\n @oneFlight\r\n /**\r\n * Refreshes this Token. Relies on\r\n * {@link config.credentials.refreshCallback()}\r\n * @instance\r\n * @memberof Token\r\n * @returns {Promise<Token>}\r\n */\r\n refresh() {\r\n if (!this.canRefresh) {\r\n throw new Error('Not enough information available to refresh this access token');\r\n }\r\n\r\n let promise;\r\n\r\n if (inBrowser) {\r\n if (!this.config.refreshCallback) {\r\n throw new Error('Cannot refresh access token without refreshCallback');\r\n }\r\n\r\n promise = Promise.resolve(this.config.refreshCallback(this.webex, this));\r\n }\r\n\r\n return (\r\n promise ||\r\n this.webex\r\n .request({\r\n method: 'POST',\r\n uri: this.config.tokenUrl,\r\n form: {\r\n grant_type: 'refresh_token',\r\n redirect_uri: this.config.redirect_uri,\r\n refresh_token: this.refresh_token,\r\n },\r\n auth: {\r\n user: this.config.client_id,\r\n pass: this.config.client_secret,\r\n sendImmediately: true,\r\n },\r\n shouldRefreshAccessToken: false,\r\n })\r\n .then((res) => res.body)\r\n )\r\n .then((obj) => {\r\n if (!obj) {\r\n throw new Error('token: refreshCallback() did not produce an object');\r\n }\r\n // If the authentication server did not send back a refresh token, copy\r\n // the current refresh token and related values to the response (note:\r\n // at time of implementation, CI never sends a new refresh token)\r\n if (!obj.refresh_token) {\r\n Object.assign(\r\n obj,\r\n pick(this, 'refresh_token', 'refresh_token_expires', 'refresh_token_expires_in')\r\n );\r\n }\r\n\r\n // If the new token is the same as the previous token, then we may have\r\n // found a bug in CI; log the details and reject the Promise\r\n if (this.access_token === obj.access_token) {\r\n this.logger.error('token: new token matches current token');\r\n // log the tokens if it is not production\r\n if (process.env.NODE_ENV !== 'production') {\r\n this.logger.error('token: current token:', this.access_token);\r\n this.logger.error('token: new token:', obj.access_token);\r\n }\r\n\r\n return Promise.reject(new Error('new token matches current token'));\r\n }\r\n\r\n if (this.previousToken) {\r\n this.previousToken.revoke();\r\n this.unset('previousToken');\r\n }\r\n\r\n obj.previousToken = this;\r\n obj.scope = this.scope;\r\n\r\n return new Token(obj, {parent: this.parent});\r\n })\r\n .catch(processGrantError);\r\n },\r\n\r\n @oneFlight\r\n /**\r\n * Revokes this token and unsets its local properties\r\n * @instance\r\n * @memberof Token\r\n * @returns {Promise}\r\n */\r\n revoke() {\r\n if (this.isExpired) {\r\n this.logger.info('token: already expired, not making making revocation request');\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n if (!this.canAuthorize) {\r\n this.logger.info('token: no longer valid, not making revocation request');\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n // FIXME we need to use the user token revocation endpoint to revoke a token\r\n // without a client_secret, but it doesn't current support using a token to\r\n // revoke itself\r\n // Note: I'm not making a canRevoke property because there should be changes\r\n // coming to the user token revocation endpoint that allow us to do this\r\n // correctly.\r\n if (!this.config.client_secret) {\r\n this.logger.info('token: no client secret available, not making revocation request');\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n this.logger.info('token: revoking access token');\r\n\r\n return this.webex\r\n .request({\r\n method: 'POST',\r\n uri: this.config.revokeUrl,\r\n form: {\r\n token: this.access_token,\r\n token_type_hint: 'access_token',\r\n },\r\n auth: {\r\n user: this.config.client_id,\r\n pass: this.config.client_secret,\r\n sendImmediately: true,\r\n },\r\n shouldRefreshAccessToken: false,\r\n })\r\n .then(() => {\r\n this.unset(['access_token', 'expires', 'expires_in', 'token_type']);\r\n this.logger.info('token: access token revoked');\r\n })\r\n .catch(processGrantError);\r\n },\r\n\r\n set(...args) {\r\n // eslint-disable-next-line prefer-const\r\n let [attrs, options] = this._filterSetParameters(...args);\r\n\r\n if (!attrs.token_type && attrs.access_token && attrs.access_token.includes(' ')) {\r\n const [token_type, access_token] = attrs.access_token.split(' ');\r\n\r\n attrs = {...attrs, access_token, token_type};\r\n }\r\n const now = Date.now();\r\n\r\n if (!attrs.expires && attrs.expires_in) {\r\n attrs.expires = now + attrs.expires_in * 1000;\r\n }\r\n\r\n if (!attrs.refresh_token_expires && attrs.refresh_token_expires_in) {\r\n attrs.refresh_token_expires = now + attrs.refresh_token_expires_in * 1000;\r\n }\r\n\r\n if (attrs.scope) {\r\n attrs.scope = sortScope(attrs.scope);\r\n }\r\n\r\n return Reflect.apply(WebexPlugin.prototype.set, this, [attrs, options]);\r\n },\r\n\r\n /**\r\n * Renders the token object as an HTTP Header Value\r\n * @instance\r\n * @memberof Token\r\n * @returns {string}\r\n * @see {@link Object#toString()}\r\n */\r\n toString() {\r\n if (!this._string) {\r\n throw new Error('cannot stringify Token');\r\n }\r\n\r\n return this._string;\r\n },\r\n\r\n /**\r\n * Uses a non-producation api to return information about this token. This\r\n * method is primarily for tests and will throw if NODE_ENV === production\r\n * @instance\r\n * @memberof Token\r\n * @private\r\n * @returns {Promise}\r\n */\r\n validate() {\r\n if (process.env.NODE_ENV === 'production') {\r\n throw new Error('Token#validate() must not be used in production');\r\n }\r\n\r\n return this.webex\r\n .request({\r\n method: 'POST',\r\n service: 'conversation',\r\n resource: 'users/validateAuthToken',\r\n body: {\r\n token: this.access_token,\r\n },\r\n })\r\n .catch((reason) => {\r\n if ('statusCode' in reason) {\r\n return Promise.reject(reason);\r\n }\r\n this.logger.info(\"REMINDER: If you're investigating a network error here, it's normal\");\r\n\r\n // If we got an error that isn't a WebexHttpError, assume the problem is\r\n // that we don't have the wdm plugin loaded and service/resource isn't\r\n // a valid means of identifying a request.\r\n const convApi =\r\n process.env.CONVERSATION_SERVICE ||\r\n process.env.CONVERSATION_SERVICE_URL ||\r\n 'https://conv-a.wbx2.com/conversation/api/v1';\r\n\r\n return this.webex.request({\r\n method: 'POST',\r\n uri: `${convApi}/users/validateAuthToken`,\r\n body: {\r\n token: this.access_token,\r\n },\r\n headers: {\r\n authorization: `Bearer ${this.access_token}`,\r\n },\r\n });\r\n })\r\n .then((res) => res.body);\r\n },\r\n});\r\n\r\nexport default Token;\r\n"],"mappings":"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"}