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

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 +55 -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 +84 -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 +131 -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 +198 -117
  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 +217 -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 +90 -57
  184. package/test/unit/spec/webex-internal-core.js +56 -31
@@ -9,7 +9,7 @@ const precedence = {
9
9
  warn: ['error', 'log'],
10
10
  info: ['log'],
11
11
  debug: ['info', 'log'],
12
- trace: ['debug', 'info', 'log']
12
+ trace: ['debug', 'info', 'log'],
13
13
  };
14
14
 
15
15
  /**
@@ -33,7 +33,12 @@ function wrapConsoleMethod(level) {
33
33
  return function wrappedConsoleMethod(...args) {
34
34
  /* eslint no-invalid-this: [0] */
35
35
  /* istanbul ignore if */
36
- if (process.env.NODE_ENV === 'test' && this.webex && this.webex.internal.device && this.webex.internal.device.url) {
36
+ if (
37
+ process.env.NODE_ENV === 'test' &&
38
+ this.webex &&
39
+ this.webex.internal.device &&
40
+ this.webex.internal.device.url
41
+ ) {
37
42
  args.unshift(this.webex.internal.device.url.slice(-3));
38
43
  }
39
44
  console[level](...args);
@@ -47,7 +52,7 @@ const Logger = WebexPlugin.extend({
47
52
  log: wrapConsoleMethod('log'),
48
53
  info: wrapConsoleMethod('info'),
49
54
  debug: wrapConsoleMethod('debug'),
50
- trace: wrapConsoleMethod('trace')
55
+ trace: wrapConsoleMethod('trace'),
51
56
  });
52
57
 
53
58
  registerPlugin('logger', Logger);
package/src/webex-core.js CHANGED
@@ -6,7 +6,12 @@ import {EventEmitter} from 'events';
6
6
  import util from 'util';
7
7
 
8
8
  import {proxyEvents, retry, transferEvents} from '@webex/common';
9
- import {HttpStatusInterceptor, defaults as requestDefaults} from '@webex/http-core';
9
+ import {
10
+ HttpStatusInterceptor,
11
+ defaults as requestDefaults,
12
+ protoprepareFetchOptions as prepareFetchOptions,
13
+ setTimingsAndFetch as _setTimingsAndFetch,
14
+ } from '@webex/http-core';
10
15
  import {defaultsDeep, get, isFunction, isString, last, merge, omit, set, unset} from 'lodash';
11
16
  import AmpState from 'ampersand-state';
12
17
  import uuid from 'uuid';
@@ -40,8 +45,14 @@ const interceptors = {
40
45
  RequestEventInterceptor: RequestEventInterceptor.create,
41
46
  RateLimitInterceptor: RateLimitInterceptor.create,
42
47
  /* eslint-disable no-extra-parens */
43
- RequestLoggerInterceptor: (process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING) ? RequestLoggerInterceptor.create : undefined,
44
- ResponseLoggerInterceptor: (process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING) ? ResponseLoggerInterceptor.create : undefined,
48
+ RequestLoggerInterceptor:
49
+ process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING
50
+ ? RequestLoggerInterceptor.create
51
+ : undefined,
52
+ ResponseLoggerInterceptor:
53
+ process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING
54
+ ? ResponseLoggerInterceptor.create
55
+ : undefined,
45
56
  /* eslint-enable no-extra-parens */
46
57
  RequestTimingInterceptor: RequestTimingInterceptor.create,
47
58
  ServiceInterceptor: undefined,
@@ -54,12 +65,12 @@ const interceptors = {
54
65
  RedirectInterceptor: RedirectInterceptor.create,
55
66
  HttpStatusInterceptor() {
56
67
  return HttpStatusInterceptor.create({
57
- error: WebexHttpError
68
+ error: WebexHttpError,
58
69
  });
59
70
  },
60
71
  NetworkTimingInterceptor: NetworkTimingInterceptor.create,
61
72
  EmbargoInterceptor: EmbargoInterceptor.create,
62
- DefaultOptionsInterceptor: DefaultOptionsInterceptor.create
73
+ DefaultOptionsInterceptor: DefaultOptionsInterceptor.create,
63
74
  };
64
75
 
65
76
  const preInterceptors = [
@@ -67,7 +78,7 @@ const preInterceptors = [
67
78
  'RequestTimingInterceptor',
68
79
  'RequestEventInterceptor',
69
80
  'WebexTrackingIdInterceptor',
70
- 'RateLimitInterceptor'
81
+ 'RateLimitInterceptor',
71
82
  ];
72
83
 
73
84
  const postInterceptors = [
@@ -75,7 +86,7 @@ const postInterceptors = [
75
86
  'NetworkTimingInterceptor',
76
87
  'EmbargoInterceptor',
77
88
  'RequestLoggerInterceptor',
78
- 'RateLimitInterceptor'
89
+ 'RateLimitInterceptor',
79
90
  ];
80
91
 
81
92
  const MAX_FILE_SIZE_IN_MB = 2048;
@@ -87,7 +98,7 @@ const WebexCore = AmpState.extend({
87
98
  version: PACKAGE_VERSION,
88
99
 
89
100
  children: {
90
- internal: WebexInternalCore
101
+ internal: WebexInternalCore,
91
102
  },
92
103
 
93
104
  constructor(attrs = {}, options) {
@@ -96,12 +107,11 @@ const WebexCore = AmpState.extend({
96
107
  credentials: {
97
108
  supertoken: {
98
109
  // eslint-disable-next-line camelcase
99
- access_token: attrs
100
- }
101
- }
110
+ access_token: attrs,
111
+ },
112
+ },
102
113
  };
103
- }
104
- else {
114
+ } else {
105
115
  // Reminder: order is important here
106
116
  [
107
117
  'credentials.authorization',
@@ -109,7 +119,7 @@ const WebexCore = AmpState.extend({
109
119
  'credentials.supertoken.supertoken',
110
120
  'supertoken',
111
121
  'access_token',
112
- 'credentials.authorization.supertoken'
122
+ 'credentials.authorization.supertoken',
113
123
  ].forEach((path) => {
114
124
  const val = get(attrs, path);
115
125
 
@@ -119,22 +129,22 @@ const WebexCore = AmpState.extend({
119
129
  }
120
130
  });
121
131
 
122
- [
123
- 'credentials',
124
- 'credentials.authorization'
125
- ]
126
- .forEach((path) => {
127
- const val = get(attrs, path);
128
-
129
- if (typeof val === 'string') {
130
- unset(attrs, path);
131
- set(attrs, 'credentials.supertoken', val);
132
- }
133
- });
132
+ ['credentials', 'credentials.authorization'].forEach((path) => {
133
+ const val = get(attrs, path);
134
+
135
+ if (typeof val === 'string') {
136
+ unset(attrs, path);
137
+ set(attrs, 'credentials.supertoken', val);
138
+ }
139
+ });
134
140
 
135
141
  if (typeof get(attrs, 'credentials.access_token') === 'string') {
136
142
  // Send access_token to get validated and corrected and then set it
137
- set(attrs, 'credentials.access_token', this.bearerValidator(get(attrs, 'credentials.access_token').trim()));
143
+ set(
144
+ attrs,
145
+ 'credentials.access_token',
146
+ this.bearerValidator(get(attrs, 'credentials.access_token').trim())
147
+ );
138
148
 
139
149
  set(attrs, 'credentials.supertoken', attrs.credentials);
140
150
  }
@@ -148,25 +158,31 @@ const WebexCore = AmpState.extend({
148
158
  deps: [],
149
159
  fn() {
150
160
  return makeWebexStore('bounded', this);
151
- }
161
+ },
152
162
  },
153
163
  unboundedStorage: {
154
164
  deps: [],
155
165
  fn() {
156
166
  return makeWebexStore('unbounded', this);
157
- }
167
+ },
158
168
  },
159
169
  ready: {
160
170
  deps: ['loaded', 'internal.ready'],
161
171
  fn() {
162
- return this.loaded && Object.keys(this._children).reduce((ready, name) => ready && this[name] && this[name].ready !== false, true);
163
- }
164
- }
172
+ return (
173
+ this.loaded &&
174
+ Object.keys(this._children).reduce(
175
+ (ready, name) => ready && this[name] && this[name].ready !== false,
176
+ true
177
+ )
178
+ );
179
+ },
180
+ },
165
181
  },
166
182
 
167
183
  session: {
168
184
  config: {
169
- type: 'object'
185
+ type: 'object',
170
186
  },
171
187
  /**
172
188
  * When true, indicates that the initial load from the storage layer is
@@ -177,18 +193,18 @@ const WebexCore = AmpState.extend({
177
193
  */
178
194
  loaded: {
179
195
  default: false,
180
- type: 'boolean'
196
+ type: 'boolean',
181
197
  },
182
198
  request: {
183
199
  setOnce: true,
184
200
  // It's supposed to be a function, but that's not a type defined in
185
201
  // Ampersand
186
- type: 'any'
202
+ type: 'any',
187
203
  },
188
204
  sessionId: {
189
205
  setOnce: true,
190
- type: 'string'
191
- }
206
+ type: 'string',
207
+ },
192
208
  },
193
209
 
194
210
  /**
@@ -212,32 +228,44 @@ const WebexCore = AmpState.extend({
212
228
  (p) => !p.direction || p.direction === direction
213
229
  );
214
230
  const ctx = {
215
- webex: this
231
+ webex: this,
216
232
  };
217
233
 
218
- return Promise.all(predicates.map((p) => p.test(ctx, object)
219
- .then((shouldTransform) => {
220
- if (!shouldTransform) {
221
- return undefined;
222
- }
223
-
224
- return p.extract(object)
225
- // eslint-disable-next-line max-nested-callbacks
226
- .then((target) => ({
227
- name: p.name,
228
- target
229
- }));
230
- })))
231
- .then((data) => data
232
- .filter((d) => Boolean(d))
233
- // eslint-disable-next-line max-nested-callbacks
234
- .reduce((promise, {name, target, alias}) => promise.then(() => {
235
- if (alias) {
236
- return this.applyNamedTransform(direction, alias, target);
234
+ return Promise.all(
235
+ predicates.map((p) =>
236
+ p.test(ctx, object).then((shouldTransform) => {
237
+ if (!shouldTransform) {
238
+ return undefined;
237
239
  }
238
240
 
239
- return this.applyNamedTransform(direction, name, target);
240
- }), Promise.resolve()))
241
+ return (
242
+ p
243
+ .extract(object)
244
+ // eslint-disable-next-line max-nested-callbacks
245
+ .then((target) => ({
246
+ name: p.name,
247
+ target,
248
+ }))
249
+ );
250
+ })
251
+ )
252
+ )
253
+ .then((data) =>
254
+ data
255
+ .filter((d) => Boolean(d))
256
+ // eslint-disable-next-line max-nested-callbacks
257
+ .reduce(
258
+ (promise, {name, target, alias}) =>
259
+ promise.then(() => {
260
+ if (alias) {
261
+ return this.applyNamedTransform(direction, alias, target);
262
+ }
263
+
264
+ return this.applyNamedTransform(direction, name, target);
265
+ }),
266
+ Promise.resolve()
267
+ )
268
+ )
241
269
  .then(() => object);
242
270
  },
243
271
 
@@ -254,7 +282,7 @@ const WebexCore = AmpState.extend({
254
282
  name = ctx;
255
283
  ctx = {
256
284
  webex: this,
257
- transform: (...args) => this.applyNamedTransform(direction, ctx, ...args)
285
+ transform: (...args) => this.applyNamedTransform(direction, ctx, ...args),
258
286
  };
259
287
  }
260
288
 
@@ -264,13 +292,18 @@ const WebexCore = AmpState.extend({
264
292
 
265
293
  // too many implicit returns on the same line is difficult to interpret
266
294
  // eslint-disable-next-line arrow-body-style
267
- return transforms.reduce((promise, tx) => promise.then(() => {
268
- if (tx.alias) {
269
- return ctx.transform(tx.alias, ...rest);
270
- }
271
-
272
- return Promise.resolve(tx.fn(ctx, ...rest));
273
- }), Promise.resolve())
295
+ return transforms
296
+ .reduce(
297
+ (promise, tx) =>
298
+ promise.then(() => {
299
+ if (tx.alias) {
300
+ return ctx.transform(tx.alias, ...rest);
301
+ }
302
+
303
+ return Promise.resolve(tx.fn(ctx, ...rest));
304
+ }),
305
+ Promise.resolve()
306
+ )
274
307
  .then(() => last(rest));
275
308
  },
276
309
 
@@ -296,7 +329,6 @@ const WebexCore = AmpState.extend({
296
329
  initialize(attrs = {}) {
297
330
  this.config = merge({}, config, attrs.config);
298
331
 
299
-
300
332
  // There's some unfortunateness with the way {@link AmpersandState#children}
301
333
  // get initialized. We'll fire the change:config event so that
302
334
  // {@link WebexPlugin#initialize()} can use
@@ -372,10 +404,21 @@ const WebexCore = AmpState.extend({
372
404
 
373
405
  this.request = requestDefaults({
374
406
  json: true,
375
- interceptors: ints
407
+ interceptors: ints,
408
+ });
409
+
410
+ this.prepareFetchOptions = prepareFetchOptions({
411
+ json: true,
412
+ interceptors: ints,
376
413
  });
377
414
 
378
- let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(this, 'config.trackingIdBase', uuid.v4())}`;
415
+ this.setTimingsAndFetch = _setTimingsAndFetch;
416
+
417
+ let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(
418
+ this,
419
+ 'config.trackingIdBase',
420
+ uuid.v4()
421
+ )}`;
379
422
 
380
423
  if (get(this, 'config.trackingIdSuffix')) {
381
424
  sessionId += `_${get(this, 'config.trackingIdSuffix')}`;
@@ -408,9 +451,13 @@ const WebexCore = AmpState.extend({
408
451
  bearerValidator(token) {
409
452
  if (token.includes('Bearer') && token.split(' ').length - 1 === 0) {
410
453
  console.warn(
411
- `Your access token does not have a space between 'Bearer' and the token, please add a space to it or replace it with this already fixed version:\n\n${token.replace('Bearer', 'Bearer ').replace(/\s+/g, ' ')}`
454
+ `Your access token does not have a space between 'Bearer' and the token, please add a space to it or replace it with this already fixed version:\n\n${token
455
+ .replace('Bearer', 'Bearer ')
456
+ .replace(/\s+/g, ' ')}`
457
+ );
458
+ console.info(
459
+ "Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine"
412
460
  );
413
- console.info("Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine");
414
461
 
415
462
  return token.replace('Bearer', 'Bearer ').replace(/\s+/g, ' ');
416
463
  }
@@ -418,9 +465,13 @@ const WebexCore = AmpState.extend({
418
465
  // eslint-disable-next-line no-else-return
419
466
  else if (token.split(' ').length - 1 > 1) {
420
467
  console.warn(
421
- `Your access token has ${token.split(' ').length - 2} too many spaces, please use this format:\n\n${token.replace(/\s+/g, ' ')}`
468
+ `Your access token has ${
469
+ token.split(' ').length - 2
470
+ } too many spaces, please use this format:\n\n${token.replace(/\s+/g, ' ')}`
471
+ );
472
+ console.info(
473
+ "Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine"
422
474
  );
423
- console.info("Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine");
424
475
 
425
476
  return token.replace(/\s+/g, ' ');
426
477
  }
@@ -436,11 +487,20 @@ const WebexCore = AmpState.extend({
436
487
  * @returns {Object}
437
488
  */
438
489
  inspect(depth) {
439
- return util.inspect(omit(this.serialize({
440
- props: true,
441
- session: true,
442
- derived: true
443
- }), 'boundedStorage', 'unboundedStorage', 'request', 'config'), {depth});
490
+ return util.inspect(
491
+ omit(
492
+ this.serialize({
493
+ props: true,
494
+ session: true,
495
+ derived: true,
496
+ }),
497
+ 'boundedStorage',
498
+ 'unboundedStorage',
499
+ 'request',
500
+ 'config'
501
+ ),
502
+ {depth}
503
+ );
444
504
  },
445
505
 
446
506
  /**
@@ -459,7 +519,9 @@ const WebexCore = AmpState.extend({
459
519
  logout(options, ...rest) {
460
520
  // prefer the refresh token, but for clients that don't have one, fallback
461
521
  // to the access token
462
- const token = this.credentials.supertoken && (this.credentials.supertoken.refresh_token || this.credentials.supertoken.access_token);
522
+ const token =
523
+ this.credentials.supertoken &&
524
+ (this.credentials.supertoken.refresh_token || this.credentials.supertoken.access_token);
463
525
 
464
526
  options = Object.assign({token}, options);
465
527
 
@@ -467,19 +529,31 @@ const WebexCore = AmpState.extend({
467
529
  // were registered. In that way, wdm unregister() will be above mercury
468
530
  // disconnect(), but disconnect() will execute first.
469
531
  // eslint-disable-next-line arrow-body-style
470
- return this.config.onBeforeLogout.reverse().reduce((promise, {plugin, fn}) => promise.then(() => {
471
- return Promise.resolve(Reflect.apply(fn, this[plugin] || this.internal[plugin], [options, ...rest]))
472
- // eslint-disable-next-line max-nested-callbacks
473
- .catch((err) => {
474
- this.logger.warn(`onBeforeLogout from plugin ${plugin}: failed`, err);
475
- });
476
- }), Promise.resolve())
477
- .then(() => Promise.all([
478
- this.boundedStorage.clear(),
479
- this.unboundedStorage.clear()
480
- ]))
532
+ return this.config.onBeforeLogout
533
+ .reverse()
534
+ .reduce(
535
+ (promise, {plugin, fn}) =>
536
+ promise.then(() => {
537
+ return (
538
+ Promise.resolve(
539
+ Reflect.apply(fn, this[plugin] || this.internal[plugin], [options, ...rest])
540
+ )
541
+ // eslint-disable-next-line max-nested-callbacks
542
+ .catch((err) => {
543
+ this.logger.warn(`onBeforeLogout from plugin ${plugin}: failed`, err);
544
+ })
545
+ );
546
+ }),
547
+ Promise.resolve()
548
+ )
549
+ .then(() => Promise.all([this.boundedStorage.clear(), this.unboundedStorage.clear()]))
481
550
  .then(() => this.credentials.invalidate(...rest))
482
- .then(() => this.authorization && this.authorization.logout && this.authorization.logout(options, ...rest))
551
+ .then(
552
+ () =>
553
+ this.authorization &&
554
+ this.authorization.logout &&
555
+ this.authorization.logout(options, ...rest)
556
+ )
483
557
  .then(() => this.trigger('client:logout'));
484
558
  },
485
559
 
@@ -508,12 +582,16 @@ const WebexCore = AmpState.extend({
508
582
  options.phases.upload = options.phases.upload || {};
509
583
  options.phases.finalize = options.phases.finalize || {};
510
584
 
511
- defaultsDeep(options.phases.initialize, {
512
- method: 'POST',
513
- body: {
514
- uploadProtocol: 'content-length'
515
- }
516
- }, omit(options, 'file', 'phases'));
585
+ defaultsDeep(
586
+ options.phases.initialize,
587
+ {
588
+ method: 'POST',
589
+ body: {
590
+ uploadProtocol: 'content-length',
591
+ },
592
+ },
593
+ omit(options, 'file', 'phases')
594
+ );
517
595
 
518
596
  defaultsDeep(options.phases.upload, {
519
597
  method: 'PUT',
@@ -522,13 +600,17 @@ const WebexCore = AmpState.extend({
522
600
  body: options.file,
523
601
  headers: {
524
602
  'x-trans-id': uuid.v4(),
525
- authorization: undefined
526
- }
603
+ authorization: undefined,
604
+ },
527
605
  });
528
606
 
529
- defaultsDeep(options.phases.finalize, {
530
- method: 'POST'
531
- }, omit(options, 'file', 'phases'));
607
+ defaultsDeep(
608
+ options.phases.finalize,
609
+ {
610
+ method: 'POST',
611
+ },
612
+ omit(options, 'file', 'phases')
613
+ );
532
614
 
533
615
  const shunt = new EventEmitter();
534
616
 
@@ -553,7 +635,8 @@ const WebexCore = AmpState.extend({
553
635
 
554
636
  return this.request(options.phases.initialize)
555
637
  .then((...args) => {
556
- const fileUploadSizeLimitInBytes = (args[0].body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB) * 1024 * 1024;
638
+ const fileUploadSizeLimitInBytes =
639
+ (args[0].body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB) * 1024 * 1024;
557
640
  const currentFileSizeInBytes = options.file.byteLength;
558
641
 
559
642
  if (fileUploadSizeLimitInBytes && fileUploadSizeLimitInBytes < currentFileSizeInBytes) {
@@ -575,14 +658,14 @@ const WebexCore = AmpState.extend({
575
658
  return this.request({
576
659
  method: 'DELETE',
577
660
  url: response.body.url,
578
- headers: response.options.headers
661
+ headers: response.options.headers,
579
662
  }).then(() => {
580
663
  this.logger.debug('client: deleting uploaded file complete');
581
664
 
582
665
  const abortErrorDetails = {
583
666
  currentFileSizeInBytes,
584
667
  fileUploadSizeLimitInMB: response.body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB,
585
- message: 'file-upload-size-limit-enabled'
668
+ message: 'file-upload-size-limit-enabled',
586
669
  };
587
670
 
588
671
  return Promise.reject(new Error(`${JSON.stringify(abortErrorDetails)}`));
@@ -610,12 +693,11 @@ const WebexCore = AmpState.extend({
610
693
  _uploadPhaseUpload(options) {
611
694
  this.logger.debug('client: uploading file');
612
695
 
613
- const promise = this.request(options.phases.upload)
614
- .then((res) => {
615
- this.logger.debug('client: uploaded file');
696
+ const promise = this.request(options.phases.upload).then((res) => {
697
+ this.logger.debug('client: uploaded file');
616
698
 
617
- return res;
618
- });
699
+ return res;
700
+ });
619
701
 
620
702
  proxyEvents(options.phases.upload.upload, promise);
621
703
 
@@ -632,13 +714,12 @@ const WebexCore = AmpState.extend({
632
714
  _uploadPhaseFinalize: function _uploadPhaseFinalize(options) {
633
715
  this.logger.debug('client: finalizing upload session');
634
716
 
635
- return this.request(options.phases.finalize)
636
- .then((res) => {
637
- this.logger.debug('client: finalized upload session');
717
+ return this.request(options.phases.finalize).then((res) => {
718
+ this.logger.debug('client: finalized upload session');
638
719
 
639
- return res;
640
- });
641
- }
720
+ return res;
721
+ });
722
+ },
642
723
  });
643
724
 
644
725
  WebexCore.version = PACKAGE_VERSION;
@@ -16,9 +16,12 @@ const WebexInternalCore = AmpState.extend({
16
16
  ready: {
17
17
  deps: [],
18
18
  fn() {
19
- return Object.keys(this._children).reduce((ready, name) => ready && this[name] && this[name].ready !== false, true);
20
- }
21
- }
19
+ return Object.keys(this._children).reduce(
20
+ (ready, name) => ready && this[name] && this[name].ready !== false,
21
+ true
22
+ );
23
+ },
24
+ },
22
25
  },
23
26
 
24
27
  /**
@@ -29,12 +32,15 @@ const WebexInternalCore = AmpState.extend({
29
32
  * @returns {Object}
30
33
  */
31
34
  inspect(depth) {
32
- return util.inspect(this.serialize({
33
- props: true,
34
- session: true,
35
- derived: true
36
- }), {depth});
37
- }
35
+ return util.inspect(
36
+ this.serialize({
37
+ props: true,
38
+ session: true,
39
+ derived: true,
40
+ }),
41
+ {depth}
42
+ );
43
+ },
38
44
  });
39
45
 
40
46
  export default WebexInternalCore;