@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
package/src/index.js CHANGED
@@ -13,13 +13,7 @@ import './plugins/logger';
13
13
  import './lib/credentials';
14
14
  import './lib/services';
15
15
 
16
- export {
17
- Credentials,
18
- filterScope,
19
- grantErrors,
20
- sortScope,
21
- Token
22
- } from './lib/credentials';
16
+ export {Credentials, filterScope, grantErrors, sortScope, Token} from './lib/credentials';
23
17
 
24
18
  export {
25
19
  constants as serviceConstants,
@@ -30,7 +24,7 @@ export {
30
24
  ServerErrorInterceptor,
31
25
  Services,
32
26
  ServiceHost,
33
- ServiceUrl
27
+ ServiceUrl,
34
28
  } from './lib/services';
35
29
 
36
30
  export {
@@ -40,14 +34,10 @@ export {
40
34
  NotFoundError,
41
35
  persist,
42
36
  StorageError,
43
- waitForValue
37
+ waitForValue,
44
38
  } from './lib/storage';
45
39
 
46
- export {
47
- default,
48
- registerPlugin,
49
- registerInternalPlugin
50
- } from './webex-core';
40
+ export {default, registerPlugin, registerInternalPlugin} from './webex-core';
51
41
 
52
42
  export {default as WebexHttpError} from './lib/webex-http-error';
53
43
  export {default as StatelessWebexPlugin} from './lib/stateless-webex-plugin';
@@ -34,19 +34,17 @@ export default class AuthInterceptor extends Interceptor {
34
34
  return Promise.resolve(options);
35
35
  }
36
36
 
37
- return this.requiresCredentials(options)
38
- .then((requires) => {
39
- if (!requires) {
40
- return options;
41
- }
37
+ return this.requiresCredentials(options).then((requires) => {
38
+ if (!requires) {
39
+ return options;
40
+ }
42
41
 
43
- return this.webex.credentials.getUserToken()
44
- .then((token) => {
45
- options.headers.authorization = token.toString();
42
+ return this.webex.credentials.getUserToken().then((token) => {
43
+ options.headers.authorization = token.toString();
46
44
 
47
- return options;
48
- });
45
+ return options;
49
46
  });
47
+ });
50
48
  }
51
49
 
52
50
  /**
@@ -77,26 +75,26 @@ export default class AuthInterceptor extends Interceptor {
77
75
 
78
76
  // Unique validation for the u2c service.
79
77
  if ((service && service === 'u2c') || (name && name === 'u2c')) {
80
- if (
81
- (resource && resource.includes('limited')) ||
82
- (uri && uri.includes('limited'))
83
- ) {
78
+ if ((resource && resource.includes('limited')) || (uri && uri.includes('limited'))) {
84
79
  return Promise.resolve(false);
85
80
  }
86
81
 
87
82
  return Promise.resolve(true);
88
83
  }
89
84
 
90
-
91
85
  // Validate that the allowed domains can be utilized.
92
- if (services.validateDomains &&
86
+ if (
87
+ services.validateDomains &&
93
88
  services.hasAllowedDomains() &&
94
- (uri && services.isAllowedDomainUrl(uri))) {
89
+ uri &&
90
+ services.isAllowedDomainUrl(uri)
91
+ ) {
95
92
  return Promise.resolve(true);
96
93
  }
97
94
 
98
95
  // Perform an additional validation in case the service does not exist yet.
99
- return services.waitForService({name: service, url: uri})
96
+ return services
97
+ .waitForService({name: service, url: uri})
100
98
  .then((detectedUrl) => {
101
99
  // Validate that the url exists in the catalog.
102
100
  if (services.getServiceFromUrl(detectedUrl)) {
@@ -123,23 +121,21 @@ export default class AuthInterceptor extends Interceptor {
123
121
  * @returns {Object}
124
122
  */
125
123
  onResponseError(options, reason) {
126
- return this.shouldAttemptReauth(reason, options)
127
- .then((shouldAttemptReauth) => {
128
- if (shouldAttemptReauth) {
129
- this.webex.logger.info('auth: received 401, attempting to reauthenticate');
130
-
131
- if (reason.options.headers) {
132
- Reflect.deleteProperty(reason.options.headers, 'authorization');
133
- }
134
-
135
- if (this.webex.credentials.canRefresh) {
136
- return this.webex.credentials.refresh()
137
- .then(() => this.replay(options));
138
- }
124
+ return this.shouldAttemptReauth(reason, options).then((shouldAttemptReauth) => {
125
+ if (shouldAttemptReauth) {
126
+ this.webex.logger.info('auth: received 401, attempting to reauthenticate');
127
+
128
+ if (reason.options.headers) {
129
+ Reflect.deleteProperty(reason.options.headers, 'authorization');
139
130
  }
140
131
 
141
- return Promise.reject(reason);
142
- });
132
+ if (this.webex.credentials.canRefresh) {
133
+ return this.webex.credentials.refresh().then(() => this.replay(options));
134
+ }
135
+ }
136
+
137
+ return Promise.reject(reason);
138
+ });
143
139
  }
144
140
 
145
141
  /**
@@ -150,15 +146,18 @@ export default class AuthInterceptor extends Interceptor {
150
146
  replay(options) {
151
147
  if (options.replayCount) {
152
148
  options.replayCount += 1;
153
- }
154
- else {
149
+ } else {
155
150
  options.replayCount = 1;
156
151
  }
157
152
 
158
153
  if (options.replayCount > this.webex.config.maxAuthenticationReplays) {
159
- this.webex.logger.error(`auth: failed after ${this.webex.config.maxAuthenticationReplays} replay attempts`);
154
+ this.webex.logger.error(
155
+ `auth: failed after ${this.webex.config.maxAuthenticationReplays} replay attempts`
156
+ );
160
157
 
161
- return Promise.reject(new Error(`Failed after ${this.webex.config.maxAuthenticationReplays} replay attempts`));
158
+ return Promise.reject(
159
+ new Error(`Failed after ${this.webex.config.maxAuthenticationReplays} replay attempts`)
160
+ );
162
161
  }
163
162
 
164
163
  this.webex.logger.info(`auth: replaying request ${options.replayCount} time`);
@@ -4,7 +4,6 @@
4
4
 
5
5
  import {Interceptor} from '@webex/http-core';
6
6
 
7
-
8
7
  /**
9
8
  * Allows the user of the SDK to set default options that apply every http request made by the SDK
10
9
  * For example a default timeout could be set for all requests like this :
@@ -27,7 +27,7 @@ export default class EmbargoInterceptor extends Interceptor {
27
27
  const {device} = this.webex.internal;
28
28
  const loggerMessage = [
29
29
  'Received `HTTP 451 Unavailable For Legal Reasons`, ',
30
- 'discarding credentials and device registration'
30
+ 'discarding credentials and device registration',
31
31
  ].join('');
32
32
 
33
33
  if (device) {
@@ -50,7 +50,6 @@ export default class PayloadTransformerInterceptor extends Interceptor {
50
50
  * @returns {Object}
51
51
  */
52
52
  onResponseError(options, reason) {
53
- return this.webex.transform('inbound', reason)
54
- .then((r) => Promise.reject(r || reason));
53
+ return this.webex.transform('inbound', reason).then((r) => Promise.reject(r || reason));
55
54
  }
56
55
  }
@@ -23,10 +23,10 @@ export default class RateLimitInterceptor extends Interceptor {
23
23
  }
24
24
 
25
25
  /**
26
- * constructor
27
- * @param {mixed} args
28
- * @returns {Exception}
29
- */
26
+ * constructor
27
+ * @param {mixed} args
28
+ * @returns {Exception}
29
+ */
30
30
  constructor(...args) {
31
31
  super(...args);
32
32
  rateLimitExpiryTime.set(this, new Map());
@@ -52,7 +52,10 @@ export default class RateLimitInterceptor extends Interceptor {
52
52
  * @returns {Object}
53
53
  */
54
54
  onResponseError(options, reason) {
55
- if (reason.statusCode === 429 && (options.uri.includes('idbroker') || options.uri.includes('identity'))) {
55
+ if (
56
+ reason.statusCode === 429 &&
57
+ (options.uri.includes('idbroker') || options.uri.includes('identity'))
58
+ ) {
56
59
  // set the retry after in the map, setting to milliseconds
57
60
  this.setRateLimitExpiry(options.uri, this.extractRetryAfterTime(options));
58
61
  }
@@ -1,3 +1,5 @@
1
+ /* eslint-disable prefer-destructuring */
2
+
1
3
  /*!
2
4
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
5
  */
@@ -27,10 +29,12 @@ export default class RedirectInterceptor extends Interceptor {
27
29
  */
28
30
  onRequest(options) {
29
31
  if (options && options.uri && typeof options.uri === 'string') {
30
- if (options.uri.includes('https://idbroker') ||
32
+ if (
33
+ options.uri.includes('https://idbroker') ||
31
34
  options.uri.includes(this.webex.config.credentials.samlUrl) ||
32
35
  options.uri.includes(this.webex.config.credentials.tokenUrl) ||
33
- options.uri.includes(this.webex.config.credentials.authorizeUrl)) {
36
+ options.uri.includes(this.webex.config.credentials.authorizeUrl)
37
+ ) {
34
38
  return options;
35
39
  }
36
40
  }
@@ -68,20 +72,22 @@ export default class RedirectInterceptor extends Interceptor {
68
72
  }
69
73
 
70
74
  return this.webex.request(options);
71
- }
72
- else if (response.headers &&
75
+ } else if (
76
+ response.headers &&
73
77
  response.body &&
74
78
  response.body.errorCode === LOCUS_REDIRECT_ERROR &&
75
- response.body.location) {
79
+ response.body.location
80
+ ) {
76
81
  options = clone(options);
77
82
 
78
83
  this.webex.logger.warn('redirect: url redirects needed from', options.uri);
79
- if (response.options && response.options.qs) { // for POST requests
84
+ if (response.options && response.options.qs) {
85
+ // for POST requests
80
86
  const newUrl = response.body.location.split('?');
81
87
 
82
88
  options.uri = newUrl[0]; // params are already present in the qs
83
- }
84
- else { // for GET requests
89
+ } else {
90
+ // for GET requests
85
91
  options.uri = response.body.location;
86
92
  }
87
93
 
@@ -26,8 +26,7 @@ export default class RequestEventInterceptor extends Interceptor {
26
26
 
27
27
  try {
28
28
  this.webex.trigger('request:start', options);
29
- }
30
- catch (error) {
29
+ } catch (error) {
31
30
  logger.warn('event handler for request:start failed ', error);
32
31
  }
33
32
 
@@ -48,8 +47,7 @@ export default class RequestEventInterceptor extends Interceptor {
48
47
  try {
49
48
  this.webex.trigger('request:end', options, reason);
50
49
  this.webex.trigger('request:failure', options, reason);
51
- }
52
- catch (error) {
50
+ } catch (error) {
53
51
  logger.warn('event handler for request:end failed ', error);
54
52
  }
55
53
 
@@ -67,8 +65,7 @@ export default class RequestEventInterceptor extends Interceptor {
67
65
 
68
66
  try {
69
67
  this.webex.trigger('request:success', response.options, response);
70
- }
71
- catch (error) {
68
+ } catch (error) {
72
69
  logger.warn('event handler for request:success failed ', error);
73
70
  }
74
71
 
@@ -87,8 +84,7 @@ export default class RequestEventInterceptor extends Interceptor {
87
84
  try {
88
85
  this.webex.trigger('request:end', options, reason);
89
86
  this.webex.trigger('request:failure', options, reason);
90
- }
91
- catch (error) {
87
+ } catch (error) {
92
88
  logger.warn('event handler for request:failure failed ', error);
93
89
  }
94
90
 
@@ -40,14 +40,17 @@ export default class RequestLoggerInterceptor extends Interceptor {
40
40
  try {
41
41
  // Determine if body is a buffer without relying on Buffer to avoid
42
42
  // node/browser conflicts.
43
- if (options.body && options.body.length && !isArray(options.body) && !isString(options.body)) {
43
+ if (
44
+ options.body &&
45
+ options.body.length &&
46
+ !isArray(options.body) &&
47
+ !isString(options.body)
48
+ ) {
44
49
  logger.info('Request Options:', util.inspect(omit(options, 'body'), {depth: null}));
45
- }
46
- else {
50
+ } else {
47
51
  logger.info('Request Options:', util.inspect(options, {depth: null}));
48
52
  }
49
- }
50
- catch (e) {
53
+ } catch (e) {
51
54
  logger.warn('Could not stringify request options:', e);
52
55
  }
53
56
  }
@@ -36,12 +36,10 @@ export default class ResponseLoggerInterceptor extends Interceptor {
36
36
  logger.info('timestamp (end): ', now.getTime(), now.toISOString());
37
37
  if (typeof response.body === 'string' || isBuffer(response.body)) {
38
38
  logger.info('Response: ', 'Not printed, it`s probably a file');
39
- }
40
- else if (typeof response.body === 'object') {
39
+ } else if (typeof response.body === 'object') {
41
40
  try {
42
41
  logger.info('Response: ', util.inspect(omit(response.body, 'features'), {depth: null}));
43
- }
44
- catch (err) {
42
+ } catch (err) {
45
43
  logger.info('Response: ', '[Not Serializable]', err);
46
44
  }
47
45
  }
@@ -68,8 +66,7 @@ export default class ResponseLoggerInterceptor extends Interceptor {
68
66
  logger.info('timestamp (end): ', now.getTime(), now.toISOString());
69
67
  try {
70
68
  logger.error('Response: ', util.inspect(reason.body, {depth: null}));
71
- }
72
- catch (err) {
69
+ } catch (err) {
73
70
  logger.error('Response: ', reason.body);
74
71
  }
75
72
  }
@@ -88,8 +85,14 @@ export default class ResponseLoggerInterceptor extends Interceptor {
88
85
  const logger = get(this, 'webex.logger', console);
89
86
 
90
87
  logger.info('Status Code:', response.statusCode);
91
- logger.info('WEBEX_TRACKINGID:', get(options, 'headers.trackingid') || get(response, 'headers.trackingid'));
88
+ logger.info(
89
+ 'WEBEX_TRACKINGID:',
90
+ get(options, 'headers.trackingid') || get(response, 'headers.trackingid')
91
+ );
92
92
  logger.info('Network duration:', options.$timings.networkEnd - options.$timings.networkStart);
93
- logger.info('Processing duration:', options.$timings.requestEnd - options.$timings.requestStart);
93
+ logger.info(
94
+ 'Processing duration:',
95
+ options.$timings.requestEnd - options.$timings.requestStart
96
+ );
94
97
  }
95
98
  }
@@ -41,8 +41,7 @@ export default class UserAgentInterceptor extends Interceptor {
41
41
  super(options);
42
42
  if (appName) {
43
43
  strings.set(this, `${appName}/${appVersion}`);
44
- }
45
- else {
44
+ } else {
46
45
  strings.set(this, '@webex/http-core'); // Using the traditional default from http-core
47
46
  }
48
47
  }
@@ -40,11 +40,7 @@ export default class WebexUserAgentInterceptor extends Interceptor {
40
40
  */
41
41
  onRequest(options) {
42
42
  options.headers = options.headers || {};
43
- const {
44
- appName,
45
- appVersion,
46
- appPlatform
47
- } = this.webex?.config ?? {};
43
+ const {appName, appVersion, appPlatform} = this.webex?.config ?? {};
48
44
  let sparkUserAgent = `${strings.get(this)}`;
49
45
 
50
46
  if (appName) {
@@ -61,11 +57,9 @@ export default class WebexUserAgentInterceptor extends Interceptor {
61
57
 
62
58
  if (
63
59
  options.uri &&
64
- (
65
- options.uri.includes(this.webex.config.credentials.samlUrl) ||
60
+ (options.uri.includes(this.webex.config.credentials.samlUrl) ||
66
61
  options.uri.includes(this.webex.config.credentials.tokenUrl) ||
67
- options.uri.includes(this.webex.config.credentials.authorizeUrl)
68
- )
62
+ options.uri.includes(this.webex.config.credentials.authorizeUrl))
69
63
  ) {
70
64
  return options;
71
65
  }
@@ -3,11 +3,7 @@
3
3
  */
4
4
 
5
5
  import {has} from 'lodash';
6
- import {
7
- cappedDebounce,
8
- Defer,
9
- tap
10
- } from '@webex/common';
6
+ import {cappedDebounce, Defer, tap} from '@webex/common';
11
7
 
12
8
  import WebexPlugin from './webex-plugin';
13
9
  import WebexHttpError from './webex-http-error';
@@ -22,14 +18,14 @@ const Batcher = WebexPlugin.extend({
22
18
  type: 'object',
23
19
  default() {
24
20
  return new Map();
25
- }
21
+ },
26
22
  },
27
23
  queue: {
28
24
  type: 'array',
29
25
  default() {
30
26
  return [];
31
- }
32
- }
27
+ },
28
+ },
33
29
  },
34
30
 
35
31
  derived: {
@@ -37,10 +33,10 @@ const Batcher = WebexPlugin.extend({
37
33
  fn() {
38
34
  return cappedDebounce((...args) => this.executeQueue(...args), this.config.batcherWait, {
39
35
  maxCalls: this.config.batcherMaxCalls,
40
- maxWait: this.config.batcherMaxWait
36
+ maxWait: this.config.batcherMaxWait,
41
37
  });
42
- }
43
- }
38
+ },
39
+ },
44
40
  },
45
41
 
46
42
  /**
@@ -113,25 +109,30 @@ const Batcher = WebexPlugin.extend({
113
109
  const queue = this.queue.splice(0, this.config.batcherMaxCalls);
114
110
 
115
111
  return new Promise((resolve) => {
116
- resolve(this.prepareRequest(queue)
117
- .then((payload) => this.submitHttpRequest(payload)
118
- .then((res) => this.handleHttpSuccess(res)))
119
- .catch((reason) => {
120
- if (reason instanceof WebexHttpError) {
121
- return this.handleHttpError(reason);
122
- }
123
-
124
- return Promise.all(queue.map((item) => this.getDeferredForRequest(item)
125
- .then((defer) => {
126
- defer.reject(reason);
127
- })));
128
- }));
129
- })
130
- .catch((reason) => {
131
- this.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);
132
-
133
- return Promise.reject(reason);
134
- });
112
+ resolve(
113
+ this.prepareRequest(queue)
114
+ .then((payload) =>
115
+ this.submitHttpRequest(payload).then((res) => this.handleHttpSuccess(res))
116
+ )
117
+ .catch((reason) => {
118
+ if (reason instanceof WebexHttpError) {
119
+ return this.handleHttpError(reason);
120
+ }
121
+
122
+ return Promise.all(
123
+ queue.map((item) =>
124
+ this.getDeferredForRequest(item).then((defer) => {
125
+ defer.reject(reason);
126
+ })
127
+ )
128
+ );
129
+ })
130
+ );
131
+ }).catch((reason) => {
132
+ this.logger.error(process.env.NODE_ENV === 'production' ? reason : reason.stack);
133
+
134
+ return Promise.reject(reason);
135
+ });
135
136
  },
136
137
 
137
138
  /**
@@ -162,7 +163,9 @@ const Batcher = WebexPlugin.extend({
162
163
  * @returns {Promise<undefined>}
163
164
  */
164
165
  handleHttpSuccess(res) {
165
- return Promise.all((res.body && res.body.items || res.body).map((item) => this.acceptItem(item)));
166
+ return Promise.all(
167
+ ((res.body && res.body.items) || res.body).map((item) => this.acceptItem(item))
168
+ );
166
169
  },
167
170
 
168
171
  /**
@@ -176,10 +179,13 @@ const Batcher = WebexPlugin.extend({
176
179
  handleHttpError(reason) {
177
180
  if (reason instanceof WebexHttpError) {
178
181
  if (has(reason, 'options.body.map')) {
179
- return Promise.all(reason.options.body.map((item) => this.getDeferredForRequest(item)
180
- .then((defer) => {
181
- defer.reject(reason);
182
- })));
182
+ return Promise.all(
183
+ reason.options.body.map((item) =>
184
+ this.getDeferredForRequest(item).then((defer) => {
185
+ defer.reject(reason);
186
+ })
187
+ )
188
+ );
183
189
  }
184
190
  }
185
191
  this.logger.error('http error handler called without a WebexHttpError object', reason);
@@ -193,14 +199,13 @@ const Batcher = WebexPlugin.extend({
193
199
  * @returns {Promise<undefined>}
194
200
  */
195
201
  acceptItem(item) {
196
- return this.didItemFail(item)
197
- .then((didFail) => {
198
- if (didFail) {
199
- return this.handleItemFailure(item);
200
- }
202
+ return this.didItemFail(item).then((didFail) => {
203
+ if (didFail) {
204
+ return this.handleItemFailure(item);
205
+ }
201
206
 
202
- return this.handleItemSuccess(item);
203
- });
207
+ return this.handleItemSuccess(item);
208
+ });
204
209
  },
205
210
 
206
211
  /**
@@ -221,10 +226,9 @@ const Batcher = WebexPlugin.extend({
221
226
  * @returns {Promise<undefined>}
222
227
  */
223
228
  handleItemFailure(item) {
224
- return this.getDeferredForResponse(item)
225
- .then((defer) => {
226
- defer.reject(item);
227
- });
229
+ return this.getDeferredForResponse(item).then((defer) => {
230
+ defer.reject(item);
231
+ });
228
232
  },
229
233
 
230
234
  /**
@@ -234,10 +238,9 @@ const Batcher = WebexPlugin.extend({
234
238
  * @returns {Promise<undefined>}
235
239
  */
236
240
  handleItemSuccess(item) {
237
- return this.getDeferredForResponse(item)
238
- .then((defer) => {
239
- defer.resolve(item);
240
- });
241
+ return this.getDeferredForResponse(item).then((defer) => {
242
+ defer.resolve(item);
243
+ });
241
244
  },
242
245
 
243
246
  /**
@@ -246,17 +249,16 @@ const Batcher = WebexPlugin.extend({
246
249
  * @returns {Promise<Defer>}
247
250
  */
248
251
  getDeferredForRequest(item) {
249
- return this.fingerprintRequest(item)
250
- .then((idx) => {
251
- const defer = this.deferreds.get(idx);
252
+ return this.fingerprintRequest(item).then((idx) => {
253
+ const defer = this.deferreds.get(idx);
252
254
 
253
- /* istanbul ignore if */
254
- if (!defer) {
255
- throw new Error('Could not find pending request for received response');
256
- }
255
+ /* istanbul ignore if */
256
+ if (!defer) {
257
+ throw new Error('Could not find pending request for received response');
258
+ }
257
259
 
258
- return defer;
259
- });
260
+ return defer;
261
+ });
260
262
  },
261
263
 
262
264
  /**
@@ -265,17 +267,16 @@ const Batcher = WebexPlugin.extend({
265
267
  * @returns {Promise<Defer>}
266
268
  */
267
269
  getDeferredForResponse(item) {
268
- return this.fingerprintResponse(item)
269
- .then((idx) => {
270
- const defer = this.deferreds.get(idx);
270
+ return this.fingerprintResponse(item).then((idx) => {
271
+ const defer = this.deferreds.get(idx);
271
272
 
272
- /* istanbul ignore if */
273
- if (!defer) {
274
- throw new Error('Could not find pending request for received response');
275
- }
273
+ /* istanbul ignore if */
274
+ if (!defer) {
275
+ throw new Error('Could not find pending request for received response');
276
+ }
276
277
 
277
- return defer;
278
- });
278
+ return defer;
279
+ });
279
280
  },
280
281
 
281
282
  /**
@@ -300,7 +301,7 @@ const Batcher = WebexPlugin.extend({
300
301
  // eslint-disable-next-line no-unused-vars
301
302
  fingerprintResponse(item) {
302
303
  throw new Error('fingerprintResponse() must be implemented');
303
- }
304
+ },
304
305
  });
305
306
 
306
307
  export default Batcher;