@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.
- package/.eslintrc.js +6 -6
- package/README.md +79 -79
- package/babel.config.js +3 -3
- package/dist/config.js +24 -24
- package/dist/config.js.map +1 -1
- package/dist/credentials-config.js +56 -56
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js +28 -28
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js +24 -24
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js +9 -9
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/network-timing.js +19 -19
- package/dist/interceptors/network-timing.js.map +1 -1
- package/dist/interceptors/payload-transformer.js +19 -19
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js +40 -40
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js +16 -16
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js +28 -28
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js +21 -25
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/request-timing.js +23 -23
- package/dist/interceptors/request-timing.js.map +1 -1
- package/dist/interceptors/response-logger.js +25 -26
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js +33 -33
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-tracking-id.js +15 -15
- package/dist/interceptors/webex-tracking-id.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js +18 -18
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +89 -85
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +109 -112
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js +17 -17
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js +2 -2
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js +11 -11
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js +2 -2
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +147 -147
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +49 -49
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js +2 -2
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js +9 -9
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +24 -24
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js +104 -104
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js +134 -134
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js +175 -175
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js +38 -38
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js +31 -31
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +245 -245
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js +28 -28
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js +45 -43
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/errors.js +4 -4
- package/dist/lib/storage/errors.js.map +1 -1
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js +52 -54
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js +40 -40
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js +9 -9
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js +26 -27
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js +9 -9
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js +26 -27
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js +40 -42
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +9 -9
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +128 -136
- package/dist/webex-core.js.map +1 -1
- package/dist/webex-internal-core.js +12 -12
- package/dist/webex-internal-core.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +13 -13
- package/process +1 -1
- package/src/config.js +90 -90
- package/src/credentials-config.js +212 -212
- package/src/index.js +62 -62
- package/src/interceptors/auth.js +186 -186
- package/src/interceptors/default-options.js +55 -55
- package/src/interceptors/embargo.js +43 -43
- package/src/interceptors/network-timing.js +54 -54
- package/src/interceptors/payload-transformer.js +55 -55
- package/src/interceptors/rate-limit.js +169 -169
- package/src/interceptors/redirect.js +106 -106
- package/src/interceptors/request-event.js +93 -93
- package/src/interceptors/request-logger.js +78 -78
- package/src/interceptors/request-timing.js +65 -65
- package/src/interceptors/response-logger.js +98 -98
- package/src/interceptors/user-agent.js +77 -77
- package/src/interceptors/webex-tracking-id.js +73 -73
- package/src/interceptors/webex-user-agent.js +79 -79
- package/src/lib/batcher.js +307 -307
- package/src/lib/credentials/credentials.js +552 -552
- package/src/lib/credentials/grant-errors.js +92 -92
- package/src/lib/credentials/index.js +16 -16
- package/src/lib/credentials/scope.js +34 -34
- package/src/lib/credentials/token-collection.js +17 -17
- package/src/lib/credentials/token.js +559 -559
- package/src/lib/page.js +159 -159
- package/src/lib/services/constants.js +9 -9
- package/src/lib/services/index.js +26 -26
- package/src/lib/services/interceptors/server-error.js +48 -48
- package/src/lib/services/interceptors/service.js +101 -101
- package/src/lib/services/metrics.js +4 -4
- package/src/lib/services/service-catalog.js +435 -435
- package/src/lib/services/service-fed-ramp.js +4 -4
- package/src/lib/services/service-host.js +267 -267
- package/src/lib/services/service-registry.js +465 -465
- package/src/lib/services/service-state.js +78 -78
- package/src/lib/services/service-url.js +124 -124
- package/src/lib/services/services.js +1018 -1018
- package/src/lib/stateless-webex-plugin.js +98 -98
- package/src/lib/storage/decorators.js +220 -220
- package/src/lib/storage/errors.js +15 -15
- package/src/lib/storage/index.js +10 -10
- package/src/lib/storage/make-webex-plugin-store.js +211 -211
- package/src/lib/storage/make-webex-store.js +140 -140
- package/src/lib/storage/memory-store-adapter.js +79 -79
- package/src/lib/webex-core-plugin-mixin.js +114 -114
- package/src/lib/webex-http-error.js +61 -61
- package/src/lib/webex-internal-core-plugin-mixin.js +107 -107
- package/src/lib/webex-plugin.js +222 -222
- package/src/plugins/logger.js +60 -60
- package/src/webex-core.js +745 -745
- package/src/webex-internal-core.js +46 -46
- package/test/integration/spec/credentials/credentials.js +139 -139
- package/test/integration/spec/credentials/token.js +102 -102
- package/test/integration/spec/services/service-catalog.js +838 -838
- package/test/integration/spec/services/services.js +1221 -1221
- package/test/integration/spec/webex-core.js +178 -178
- package/test/unit/spec/_setup.js +44 -44
- package/test/unit/spec/credentials/credentials.js +1017 -1017
- package/test/unit/spec/credentials/token.js +441 -441
- package/test/unit/spec/interceptors/auth.js +521 -521
- package/test/unit/spec/interceptors/default-options.js +84 -84
- package/test/unit/spec/interceptors/embargo.js +144 -144
- package/test/unit/spec/interceptors/network-timing.js +49 -49
- package/test/unit/spec/interceptors/payload-transformer.js +155 -155
- package/test/unit/spec/interceptors/rate-limit.js +302 -302
- package/test/unit/spec/interceptors/redirect.js +102 -102
- package/test/unit/spec/interceptors/request-timing.js +92 -92
- package/test/unit/spec/interceptors/user-agent.js +76 -76
- package/test/unit/spec/interceptors/webex-tracking-id.js +76 -76
- package/test/unit/spec/interceptors/webex-user-agent.js +159 -159
- package/test/unit/spec/lib/batcher.js +330 -330
- package/test/unit/spec/lib/page.js +148 -148
- package/test/unit/spec/lib/webex-plugin.js +48 -48
- package/test/unit/spec/services/interceptors/server-error.js +204 -204
- package/test/unit/spec/services/interceptors/service.js +188 -188
- package/test/unit/spec/services/service-catalog.js +194 -194
- package/test/unit/spec/services/service-host.js +260 -260
- package/test/unit/spec/services/service-registry.js +747 -747
- package/test/unit/spec/services/service-state.js +60 -60
- package/test/unit/spec/services/service-url.js +258 -258
- package/test/unit/spec/services/services.js +348 -348
- package/test/unit/spec/storage/persist.js +50 -50
- package/test/unit/spec/storage/storage-adapter.js +12 -12
- package/test/unit/spec/storage/wait-for-value.js +81 -81
- package/test/unit/spec/webex-core.js +253 -253
- 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
|
+
}
|