@webex/webex-core 2.59.3-next.1 → 2.59.4-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 +16 -16
  22. package/dist/interceptors/redirect.js.map +1 -1
  23. package/dist/interceptors/request-event.js +28 -28
  24. package/dist/interceptors/request-event.js.map +1 -1
  25. package/dist/interceptors/request-logger.js +21 -25
  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 +25 -26
  30. package/dist/interceptors/response-logger.js.map +1 -1
  31. package/dist/interceptors/user-agent.js +33 -33
  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 +18 -18
  36. package/dist/interceptors/webex-user-agent.js.map +1 -1
  37. package/dist/lib/batcher.js +89 -85
  38. package/dist/lib/batcher.js.map +1 -1
  39. package/dist/lib/credentials/credentials.js +109 -112
  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 +147 -147
  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 +45 -43
  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 +52 -54
  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 +26 -27
  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 +26 -27
  92. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  93. package/dist/lib/webex-plugin.js +40 -42
  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 +128 -136
  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 +13 -13
  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
@@ -1,93 +1,93 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import {get} from 'lodash';
6
- import {Interceptor} from '@webex/http-core';
7
-
8
- /**
9
- * @class
10
- */
11
- export default class RequestEventInterceptor extends Interceptor {
12
- /**
13
- * @returns {RequestEventInterceptor}
14
- */
15
- static create() {
16
- return new RequestEventInterceptor({webex: this});
17
- }
18
-
19
- /**
20
- * @see Interceptor#onRequest
21
- * @param {Object} options
22
- * @returns {Object}
23
- */
24
- onRequest(options) {
25
- const logger = get(this, 'webex.logger', console);
26
-
27
- try {
28
- this.webex.trigger('request:start', options);
29
- } catch (error) {
30
- logger.warn('event handler for request:start failed ', error);
31
- }
32
-
33
- return Promise.resolve(options);
34
- }
35
-
36
- /**
37
- * @see Interceptor#onRequest
38
- * @param {Object} options
39
- * @param {Error} reason
40
- * @returns {Object}
41
- */
42
- onRequestError(options, reason) {
43
- // We need to do the normal onRequest logging, but then log how the request
44
- // failed since the response logger won't be called.
45
- const logger = get(this, 'webex.logger', console);
46
-
47
- try {
48
- this.webex.trigger('request:end', options, reason);
49
- this.webex.trigger('request:failure', options, reason);
50
- } catch (error) {
51
- logger.warn('event handler for request:end failed ', error);
52
- }
53
-
54
- return Promise.reject(reason);
55
- }
56
-
57
- /**
58
- * @see Interceptor#onResponse
59
- * @param {Object} options
60
- * @param {HttpResponse} response
61
- * @returns {Object}
62
- */
63
- onResponse(options, response) {
64
- const logger = get(this, 'webex.logger', console);
65
-
66
- try {
67
- this.webex.trigger('request:success', response.options, response);
68
- } catch (error) {
69
- logger.warn('event handler for request:success failed ', error);
70
- }
71
-
72
- return Promise.resolve(response);
73
- }
74
-
75
- /**
76
- * @see Interceptor#onResponseError
77
- * @param {Object} options
78
- * @param {Error} reason
79
- * @returns {Object}
80
- */
81
- onResponseError(options, reason) {
82
- const logger = get(this, 'webex.logger', console);
83
-
84
- try {
85
- this.webex.trigger('request:end', options, reason);
86
- this.webex.trigger('request:failure', options, reason);
87
- } catch (error) {
88
- logger.warn('event handler for request:failure failed ', error);
89
- }
90
-
91
- return Promise.reject(reason);
92
- }
93
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {get} from 'lodash';
6
+ import {Interceptor} from '@webex/http-core';
7
+
8
+ /**
9
+ * @class
10
+ */
11
+ export default class RequestEventInterceptor extends Interceptor {
12
+ /**
13
+ * @returns {RequestEventInterceptor}
14
+ */
15
+ static create() {
16
+ return new RequestEventInterceptor({webex: this});
17
+ }
18
+
19
+ /**
20
+ * @see Interceptor#onRequest
21
+ * @param {Object} options
22
+ * @returns {Object}
23
+ */
24
+ onRequest(options) {
25
+ const logger = get(this, 'webex.logger', console);
26
+
27
+ try {
28
+ this.webex.trigger('request:start', options);
29
+ } catch (error) {
30
+ logger.warn('event handler for request:start failed ', error);
31
+ }
32
+
33
+ return Promise.resolve(options);
34
+ }
35
+
36
+ /**
37
+ * @see Interceptor#onRequest
38
+ * @param {Object} options
39
+ * @param {Error} reason
40
+ * @returns {Object}
41
+ */
42
+ onRequestError(options, reason) {
43
+ // We need to do the normal onRequest logging, but then log how the request
44
+ // failed since the response logger won't be called.
45
+ const logger = get(this, 'webex.logger', console);
46
+
47
+ try {
48
+ this.webex.trigger('request:end', options, reason);
49
+ this.webex.trigger('request:failure', options, reason);
50
+ } catch (error) {
51
+ logger.warn('event handler for request:end failed ', error);
52
+ }
53
+
54
+ return Promise.reject(reason);
55
+ }
56
+
57
+ /**
58
+ * @see Interceptor#onResponse
59
+ * @param {Object} options
60
+ * @param {HttpResponse} response
61
+ * @returns {Object}
62
+ */
63
+ onResponse(options, response) {
64
+ const logger = get(this, 'webex.logger', console);
65
+
66
+ try {
67
+ this.webex.trigger('request:success', response.options, response);
68
+ } catch (error) {
69
+ logger.warn('event handler for request:success failed ', error);
70
+ }
71
+
72
+ return Promise.resolve(response);
73
+ }
74
+
75
+ /**
76
+ * @see Interceptor#onResponseError
77
+ * @param {Object} options
78
+ * @param {Error} reason
79
+ * @returns {Object}
80
+ */
81
+ onResponseError(options, reason) {
82
+ const logger = get(this, 'webex.logger', console);
83
+
84
+ try {
85
+ this.webex.trigger('request:end', options, reason);
86
+ this.webex.trigger('request:failure', options, reason);
87
+ } catch (error) {
88
+ logger.warn('event handler for request:failure failed ', error);
89
+ }
90
+
91
+ return Promise.reject(reason);
92
+ }
93
+ }
@@ -1,78 +1,78 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import util from 'util';
6
-
7
- import {get, has, isArray, isString, omit} from 'lodash';
8
- import {Interceptor} from '@webex/http-core';
9
-
10
- /**
11
- * @class
12
- */
13
- export default class RequestLoggerInterceptor extends Interceptor {
14
- /**
15
- * @returns {RequestLoggerInterceptor}
16
- */
17
- static create() {
18
- return new RequestLoggerInterceptor({webex: this});
19
- }
20
-
21
- /**
22
- * @see Interceptor#onRequest
23
- * @param {Object} options
24
- * @returns {Object}
25
- */
26
- onRequest(options) {
27
- const logger = get(this, 'webex.logger', console);
28
-
29
- logger.info('/**********************************************************************\\ ');
30
- logger.info('Request:', options.method || 'GET', options.uri);
31
- logger.info('WEBEX_TRACKINGID: ', get(options, 'headers.trackingid'));
32
- /* istanbul ignore next */
33
- if (has(options, 'headers.x-trans-id')) {
34
- logger.info('X-Trans-ID: ', get(options, 'headers.x-trans-id'));
35
- }
36
- const now = new Date();
37
-
38
- if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
39
- logger.info('timestamp (start): ', now.getTime(), now.toISOString());
40
- try {
41
- // Determine if body is a buffer without relying on Buffer to avoid
42
- // node/browser conflicts.
43
- if (
44
- options.body &&
45
- options.body.length &&
46
- !isArray(options.body) &&
47
- !isString(options.body)
48
- ) {
49
- logger.info('Request Options:', util.inspect(omit(options, 'body'), {depth: null}));
50
- } else {
51
- logger.info('Request Options:', util.inspect(options, {depth: null}));
52
- }
53
- } catch (e) {
54
- logger.warn('Could not stringify request options:', e);
55
- }
56
- }
57
-
58
- return Promise.resolve(options);
59
- }
60
-
61
- /**
62
- * @see Interceptor#onRequest
63
- * @param {Object} options
64
- * @param {Error} reason
65
- * @returns {Object}
66
- */
67
- onRequestError(options, reason) {
68
- // We need to do the normal onRequest logging, but then log how the request
69
- // failed since the response logger won't be called.
70
- this.onRequest(options);
71
- const logger = get(this, 'webex.logger', console);
72
-
73
- logger.error('Request Failed: ', reason.stack);
74
- logger.info('\\**********************************************************************/');
75
-
76
- return Promise.reject(reason);
77
- }
78
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import util from 'util';
6
+
7
+ import {get, has, isArray, isString, omit} from 'lodash';
8
+ import {Interceptor} from '@webex/http-core';
9
+
10
+ /**
11
+ * @class
12
+ */
13
+ export default class RequestLoggerInterceptor extends Interceptor {
14
+ /**
15
+ * @returns {RequestLoggerInterceptor}
16
+ */
17
+ static create() {
18
+ return new RequestLoggerInterceptor({webex: this});
19
+ }
20
+
21
+ /**
22
+ * @see Interceptor#onRequest
23
+ * @param {Object} options
24
+ * @returns {Object}
25
+ */
26
+ onRequest(options) {
27
+ const logger = get(this, 'webex.logger', console);
28
+
29
+ logger.info('/**********************************************************************\\ ');
30
+ logger.info('Request:', options.method || 'GET', options.uri);
31
+ logger.info('WEBEX_TRACKINGID: ', get(options, 'headers.trackingid'));
32
+ /* istanbul ignore next */
33
+ if (has(options, 'headers.x-trans-id')) {
34
+ logger.info('X-Trans-ID: ', get(options, 'headers.x-trans-id'));
35
+ }
36
+ const now = new Date();
37
+
38
+ if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
39
+ logger.info('timestamp (start): ', now.getTime(), now.toISOString());
40
+ try {
41
+ // Determine if body is a buffer without relying on Buffer to avoid
42
+ // node/browser conflicts.
43
+ if (
44
+ options.body &&
45
+ options.body.length &&
46
+ !isArray(options.body) &&
47
+ !isString(options.body)
48
+ ) {
49
+ logger.info('Request Options:', util.inspect(omit(options, 'body'), {depth: null}));
50
+ } else {
51
+ logger.info('Request Options:', util.inspect(options, {depth: null}));
52
+ }
53
+ } catch (e) {
54
+ logger.warn('Could not stringify request options:', e);
55
+ }
56
+ }
57
+
58
+ return Promise.resolve(options);
59
+ }
60
+
61
+ /**
62
+ * @see Interceptor#onRequest
63
+ * @param {Object} options
64
+ * @param {Error} reason
65
+ * @returns {Object}
66
+ */
67
+ onRequestError(options, reason) {
68
+ // We need to do the normal onRequest logging, but then log how the request
69
+ // failed since the response logger won't be called.
70
+ this.onRequest(options);
71
+ const logger = get(this, 'webex.logger', console);
72
+
73
+ logger.error('Request Failed: ', reason.stack);
74
+ logger.info('\\**********************************************************************/');
75
+
76
+ return Promise.reject(reason);
77
+ }
78
+ }
@@ -1,65 +1,65 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import {Interceptor} from '@webex/http-core';
6
-
7
- /**
8
- * @class
9
- */
10
- export default class RequestTimingInterceptor extends Interceptor {
11
- /**
12
- * @param {Object} options
13
- * @returns {RequestTimingInterceptor}
14
- */
15
- static create(options) {
16
- return new RequestTimingInterceptor(this, options);
17
- }
18
-
19
- /**
20
- * @see Interceptor#onRequest
21
- * @param {Object} options
22
- * @returns {Object}
23
- */
24
- onRequest(options) {
25
- options.$timings = options.$timings || {};
26
- options.$timings.requestStart = Date.now();
27
-
28
- return options;
29
- }
30
-
31
- /**
32
- * @see Interceptor#onRequestError
33
- * @param {Object} options
34
- * @returns {Object}
35
- */
36
- onRequestError(options) {
37
- options.$timings.requestEnd = options.$timings.requestFail = Date.now();
38
-
39
- return Promise.reject(options);
40
- }
41
-
42
- /**
43
- * @see Interceptor#onResponse
44
- * @param {Object} options
45
- * @param {HttpResponse} response
46
- * @returns {Object}
47
- */
48
- onResponse(options, response) {
49
- options.$timings.requestEnd = Date.now();
50
-
51
- return Promise.resolve(response);
52
- }
53
-
54
- /**
55
- * @see Interceptor#onResponseError
56
- * @param {Object} options
57
- * @param {Error} reason
58
- * @returns {Object}
59
- */
60
- onResponseError(options, reason) {
61
- options.$timings.requestEnd = options.$timings.requestFail = Date.now();
62
-
63
- return Promise.reject(reason);
64
- }
65
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {Interceptor} from '@webex/http-core';
6
+
7
+ /**
8
+ * @class
9
+ */
10
+ export default class RequestTimingInterceptor extends Interceptor {
11
+ /**
12
+ * @param {Object} options
13
+ * @returns {RequestTimingInterceptor}
14
+ */
15
+ static create(options) {
16
+ return new RequestTimingInterceptor(this, options);
17
+ }
18
+
19
+ /**
20
+ * @see Interceptor#onRequest
21
+ * @param {Object} options
22
+ * @returns {Object}
23
+ */
24
+ onRequest(options) {
25
+ options.$timings = options.$timings || {};
26
+ options.$timings.requestStart = Date.now();
27
+
28
+ return options;
29
+ }
30
+
31
+ /**
32
+ * @see Interceptor#onRequestError
33
+ * @param {Object} options
34
+ * @returns {Object}
35
+ */
36
+ onRequestError(options) {
37
+ options.$timings.requestEnd = options.$timings.requestFail = Date.now();
38
+
39
+ return Promise.reject(options);
40
+ }
41
+
42
+ /**
43
+ * @see Interceptor#onResponse
44
+ * @param {Object} options
45
+ * @param {HttpResponse} response
46
+ * @returns {Object}
47
+ */
48
+ onResponse(options, response) {
49
+ options.$timings.requestEnd = Date.now();
50
+
51
+ return Promise.resolve(response);
52
+ }
53
+
54
+ /**
55
+ * @see Interceptor#onResponseError
56
+ * @param {Object} options
57
+ * @param {Error} reason
58
+ * @returns {Object}
59
+ */
60
+ onResponseError(options, reason) {
61
+ options.$timings.requestEnd = options.$timings.requestFail = Date.now();
62
+
63
+ return Promise.reject(reason);
64
+ }
65
+ }
@@ -1,98 +1,98 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import util from 'util';
6
-
7
- import {get, omit} from 'lodash';
8
- import {Interceptor} from '@webex/http-core';
9
- import {isBuffer} from '@webex/common';
10
-
11
- /**
12
- * @class
13
- */
14
- export default class ResponseLoggerInterceptor extends Interceptor {
15
- /**
16
- * @returns {ResponseLoggerInterceptor}
17
- */
18
- static create() {
19
- return new ResponseLoggerInterceptor({webex: this});
20
- }
21
-
22
- /**
23
- * @see Interceptor#onRequest
24
- * @param {Object} options
25
- * @param {HttpResponse} response
26
- * @returns {Object}
27
- */
28
- onResponse(options, response) {
29
- const now = new Date();
30
-
31
- this.printResponseHeader(options, response);
32
-
33
- const logger = get(this, 'webex.logger', console);
34
-
35
- if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
36
- logger.info('timestamp (end): ', now.getTime(), now.toISOString());
37
- if (typeof response.body === 'string' || isBuffer(response.body)) {
38
- logger.info('Response: ', 'Not printed, it`s probably a file');
39
- } else if (typeof response.body === 'object') {
40
- try {
41
- logger.info('Response: ', util.inspect(omit(response.body, 'features'), {depth: null}));
42
- } catch (err) {
43
- logger.info('Response: ', '[Not Serializable]', err);
44
- }
45
- }
46
- }
47
- logger.info('\\**********************************************************************/');
48
-
49
- return response;
50
- }
51
-
52
- /**
53
- * @see Interceptor#onRequest
54
- * @param {Object} options
55
- * @param {Object} reason
56
- * @returns {Object}
57
- */
58
- onResponseError(options, reason) {
59
- const now = new Date();
60
-
61
- this.printResponseHeader(options, reason);
62
-
63
- const logger = get(this, 'webex.logger', console);
64
-
65
- if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
66
- logger.info('timestamp (end): ', now.getTime(), now.toISOString());
67
- try {
68
- logger.error('Response: ', util.inspect(reason.body, {depth: null}));
69
- } catch (err) {
70
- logger.error('Response: ', reason.body);
71
- }
72
- }
73
- logger.info('\\**********************************************************************/');
74
-
75
- return Promise.reject(reason);
76
- }
77
-
78
- /**
79
- * Prints the basic header
80
- * @param {Object} options
81
- * @param {HttpResponse|WebexHttpError} response
82
- * @returns {undefined}
83
- */
84
- printResponseHeader(options, response) {
85
- const logger = get(this, 'webex.logger', console);
86
-
87
- logger.info('Status Code:', response.statusCode);
88
- logger.info(
89
- 'WEBEX_TRACKINGID:',
90
- get(options, 'headers.trackingid') || get(response, 'headers.trackingid')
91
- );
92
- logger.info('Network duration:', options.$timings.networkEnd - options.$timings.networkStart);
93
- logger.info(
94
- 'Processing duration:',
95
- options.$timings.requestEnd - options.$timings.requestStart
96
- );
97
- }
98
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import util from 'util';
6
+
7
+ import {get, omit} from 'lodash';
8
+ import {Interceptor} from '@webex/http-core';
9
+ import {isBuffer} from '@webex/common';
10
+
11
+ /**
12
+ * @class
13
+ */
14
+ export default class ResponseLoggerInterceptor extends Interceptor {
15
+ /**
16
+ * @returns {ResponseLoggerInterceptor}
17
+ */
18
+ static create() {
19
+ return new ResponseLoggerInterceptor({webex: this});
20
+ }
21
+
22
+ /**
23
+ * @see Interceptor#onRequest
24
+ * @param {Object} options
25
+ * @param {HttpResponse} response
26
+ * @returns {Object}
27
+ */
28
+ onResponse(options, response) {
29
+ const now = new Date();
30
+
31
+ this.printResponseHeader(options, response);
32
+
33
+ const logger = get(this, 'webex.logger', console);
34
+
35
+ if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
36
+ logger.info('timestamp (end): ', now.getTime(), now.toISOString());
37
+ if (typeof response.body === 'string' || isBuffer(response.body)) {
38
+ logger.info('Response: ', 'Not printed, it`s probably a file');
39
+ } else if (typeof response.body === 'object') {
40
+ try {
41
+ logger.info('Response: ', util.inspect(omit(response.body, 'features'), {depth: null}));
42
+ } catch (err) {
43
+ logger.info('Response: ', '[Not Serializable]', err);
44
+ }
45
+ }
46
+ }
47
+ logger.info('\\**********************************************************************/');
48
+
49
+ return response;
50
+ }
51
+
52
+ /**
53
+ * @see Interceptor#onRequest
54
+ * @param {Object} options
55
+ * @param {Object} reason
56
+ * @returns {Object}
57
+ */
58
+ onResponseError(options, reason) {
59
+ const now = new Date();
60
+
61
+ this.printResponseHeader(options, reason);
62
+
63
+ const logger = get(this, 'webex.logger', console);
64
+
65
+ if (process.env.ENABLE_VERBOSE_NETWORK_LOGGING) {
66
+ logger.info('timestamp (end): ', now.getTime(), now.toISOString());
67
+ try {
68
+ logger.error('Response: ', util.inspect(reason.body, {depth: null}));
69
+ } catch (err) {
70
+ logger.error('Response: ', reason.body);
71
+ }
72
+ }
73
+ logger.info('\\**********************************************************************/');
74
+
75
+ return Promise.reject(reason);
76
+ }
77
+
78
+ /**
79
+ * Prints the basic header
80
+ * @param {Object} options
81
+ * @param {HttpResponse|WebexHttpError} response
82
+ * @returns {undefined}
83
+ */
84
+ printResponseHeader(options, response) {
85
+ const logger = get(this, 'webex.logger', console);
86
+
87
+ logger.info('Status Code:', response.statusCode);
88
+ logger.info(
89
+ 'WEBEX_TRACKINGID:',
90
+ get(options, 'headers.trackingid') || get(response, 'headers.trackingid')
91
+ );
92
+ logger.info('Network duration:', options.$timings.networkEnd - options.$timings.networkStart);
93
+ logger.info(
94
+ 'Processing duration:',
95
+ options.$timings.requestEnd - options.$timings.requestStart
96
+ );
97
+ }
98
+ }