@webex/webex-core 2.59.3-next.1 → 2.59.4
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 +13 -13
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js +23 -23
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js +13 -13
- 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 +19 -19
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js +29 -29
- 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 +13 -13
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +83 -83
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +103 -103
- 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 +145 -145
- 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 +27 -27
- 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 +44 -44
- 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 +13 -13
- 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 +13 -13
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js +36 -36
- 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 +104 -104
- 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 +19 -20
- 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,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
|
+
}
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {inBrowser} from '@webex/common';
|
|
6
|
-
import {Interceptor} from '@webex/http-core';
|
|
7
|
-
import {get} from 'lodash';
|
|
8
|
-
|
|
9
|
-
const strings = new WeakMap();
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Sets a 'user-agent' header on all requests if one is not present.
|
|
13
|
-
* Defaults to '@webex/http-core' though a custom user-agent can be set
|
|
14
|
-
* using the appName and appVersion configuration. e.g.
|
|
15
|
-
*
|
|
16
|
-
* webex = WebexSdk.init({
|
|
17
|
-
* credentials: {
|
|
18
|
-
* supertoken: superToken
|
|
19
|
-
* },
|
|
20
|
-
* config: {
|
|
21
|
-
* credentials: {
|
|
22
|
-
* client_id,
|
|
23
|
-
* client_secret
|
|
24
|
-
* },
|
|
25
|
-
* appName: 'custom-user-agent',
|
|
26
|
-
* appVersion: '1.0',
|
|
27
|
-
* }
|
|
28
|
-
* });
|
|
29
|
-
*/
|
|
30
|
-
export default class UserAgentInterceptor extends Interceptor {
|
|
31
|
-
/**
|
|
32
|
-
* @param {Object} [options={}]
|
|
33
|
-
* @param {WebexCore} [options.webex]
|
|
34
|
-
* @private
|
|
35
|
-
* @returns {UserAgentInterceptor}
|
|
36
|
-
*/
|
|
37
|
-
constructor(options = {}) {
|
|
38
|
-
const appName = get(options, 'webex.config.appName');
|
|
39
|
-
const appVersion = get(options, 'webex.config.appVersion') || '0.0';
|
|
40
|
-
|
|
41
|
-
super(options);
|
|
42
|
-
if (appName) {
|
|
43
|
-
strings.set(this, `${appName}/${appVersion}`);
|
|
44
|
-
} else {
|
|
45
|
-
strings.set(this, '@webex/http-core'); // Using the traditional default from http-core
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* @returns {UserAgentInterceptor}
|
|
51
|
-
*/
|
|
52
|
-
static create() {
|
|
53
|
-
return new UserAgentInterceptor({webex: this});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @see Interceptor#onRequest
|
|
58
|
-
* @param {Object} options
|
|
59
|
-
* @returns {Object}
|
|
60
|
-
*/
|
|
61
|
-
onRequest(options) {
|
|
62
|
-
// Do not set a custom user-agent for browsers
|
|
63
|
-
if (inBrowser) {
|
|
64
|
-
return options;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
options.headers = options.headers || {};
|
|
68
|
-
|
|
69
|
-
if ('user-agent' in options.headers && options.headers['spark-user-agent']) {
|
|
70
|
-
return options;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
options.headers['user-agent'] = strings.get(this);
|
|
74
|
-
|
|
75
|
-
return options;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {inBrowser} from '@webex/common';
|
|
6
|
+
import {Interceptor} from '@webex/http-core';
|
|
7
|
+
import {get} from 'lodash';
|
|
8
|
+
|
|
9
|
+
const strings = new WeakMap();
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Sets a 'user-agent' header on all requests if one is not present.
|
|
13
|
+
* Defaults to '@webex/http-core' though a custom user-agent can be set
|
|
14
|
+
* using the appName and appVersion configuration. e.g.
|
|
15
|
+
*
|
|
16
|
+
* webex = WebexSdk.init({
|
|
17
|
+
* credentials: {
|
|
18
|
+
* supertoken: superToken
|
|
19
|
+
* },
|
|
20
|
+
* config: {
|
|
21
|
+
* credentials: {
|
|
22
|
+
* client_id,
|
|
23
|
+
* client_secret
|
|
24
|
+
* },
|
|
25
|
+
* appName: 'custom-user-agent',
|
|
26
|
+
* appVersion: '1.0',
|
|
27
|
+
* }
|
|
28
|
+
* });
|
|
29
|
+
*/
|
|
30
|
+
export default class UserAgentInterceptor extends Interceptor {
|
|
31
|
+
/**
|
|
32
|
+
* @param {Object} [options={}]
|
|
33
|
+
* @param {WebexCore} [options.webex]
|
|
34
|
+
* @private
|
|
35
|
+
* @returns {UserAgentInterceptor}
|
|
36
|
+
*/
|
|
37
|
+
constructor(options = {}) {
|
|
38
|
+
const appName = get(options, 'webex.config.appName');
|
|
39
|
+
const appVersion = get(options, 'webex.config.appVersion') || '0.0';
|
|
40
|
+
|
|
41
|
+
super(options);
|
|
42
|
+
if (appName) {
|
|
43
|
+
strings.set(this, `${appName}/${appVersion}`);
|
|
44
|
+
} else {
|
|
45
|
+
strings.set(this, '@webex/http-core'); // Using the traditional default from http-core
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @returns {UserAgentInterceptor}
|
|
51
|
+
*/
|
|
52
|
+
static create() {
|
|
53
|
+
return new UserAgentInterceptor({webex: this});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @see Interceptor#onRequest
|
|
58
|
+
* @param {Object} options
|
|
59
|
+
* @returns {Object}
|
|
60
|
+
*/
|
|
61
|
+
onRequest(options) {
|
|
62
|
+
// Do not set a custom user-agent for browsers
|
|
63
|
+
if (inBrowser) {
|
|
64
|
+
return options;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
options.headers = options.headers || {};
|
|
68
|
+
|
|
69
|
+
if ('user-agent' in options.headers && options.headers['spark-user-agent']) {
|
|
70
|
+
return options;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
options.headers['user-agent'] = strings.get(this);
|
|
74
|
+
|
|
75
|
+
return options;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {Interceptor} from '@webex/http-core';
|
|
6
|
-
|
|
7
|
-
const sequenceNumbers = new WeakMap();
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @class
|
|
11
|
-
*/
|
|
12
|
-
export default class WebexTrackingIdInterceptor extends Interceptor {
|
|
13
|
-
/**
|
|
14
|
-
* Sequence number; increments on access
|
|
15
|
-
* @type {Number}
|
|
16
|
-
*/
|
|
17
|
-
get sequence() {
|
|
18
|
-
let sq = sequenceNumbers.get(this) || 0;
|
|
19
|
-
|
|
20
|
-
sq += 1;
|
|
21
|
-
sequenceNumbers.set(this, sq);
|
|
22
|
-
|
|
23
|
-
return sq;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @returns {WebexTrackingIdInterceptor}
|
|
28
|
-
*/
|
|
29
|
-
static create() {
|
|
30
|
-
return new WebexTrackingIdInterceptor({webex: this});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* @see Interceptor#onRequest
|
|
35
|
-
* @param {Object} options
|
|
36
|
-
* @returns {Object}
|
|
37
|
-
*/
|
|
38
|
-
onRequest(options) {
|
|
39
|
-
options.headers = options.headers || {};
|
|
40
|
-
// If trackingid is already set, don't overwrite it
|
|
41
|
-
if ('trackingid' in options.headers) {
|
|
42
|
-
// If trackingid is set to null, false, or undefined, delete it to
|
|
43
|
-
// prevent a CORS preflight.
|
|
44
|
-
if (!options.headers.trackingid) {
|
|
45
|
-
Reflect.deleteProperty(options.headers, 'trackingid');
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return options;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (this.requiresTrackingId(options)) {
|
|
52
|
-
options.headers.trackingid = `${this.webex.sessionId}_${this.sequence}`;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (options.headers.trackingid && options.replayCount) {
|
|
56
|
-
const tid = options.headers.trackingid.split('+');
|
|
57
|
-
|
|
58
|
-
tid[1] = options.replayCount;
|
|
59
|
-
options.headers.trackingid = tid.join('+');
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return options;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Determines whether or not include a tracking id
|
|
67
|
-
* @param {Object} options
|
|
68
|
-
* @returns {boolean}
|
|
69
|
-
*/
|
|
70
|
-
requiresTrackingId(options) {
|
|
71
|
-
return !options.headers.trackingid;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {Interceptor} from '@webex/http-core';
|
|
6
|
+
|
|
7
|
+
const sequenceNumbers = new WeakMap();
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @class
|
|
11
|
+
*/
|
|
12
|
+
export default class WebexTrackingIdInterceptor extends Interceptor {
|
|
13
|
+
/**
|
|
14
|
+
* Sequence number; increments on access
|
|
15
|
+
* @type {Number}
|
|
16
|
+
*/
|
|
17
|
+
get sequence() {
|
|
18
|
+
let sq = sequenceNumbers.get(this) || 0;
|
|
19
|
+
|
|
20
|
+
sq += 1;
|
|
21
|
+
sequenceNumbers.set(this, sq);
|
|
22
|
+
|
|
23
|
+
return sq;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @returns {WebexTrackingIdInterceptor}
|
|
28
|
+
*/
|
|
29
|
+
static create() {
|
|
30
|
+
return new WebexTrackingIdInterceptor({webex: this});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @see Interceptor#onRequest
|
|
35
|
+
* @param {Object} options
|
|
36
|
+
* @returns {Object}
|
|
37
|
+
*/
|
|
38
|
+
onRequest(options) {
|
|
39
|
+
options.headers = options.headers || {};
|
|
40
|
+
// If trackingid is already set, don't overwrite it
|
|
41
|
+
if ('trackingid' in options.headers) {
|
|
42
|
+
// If trackingid is set to null, false, or undefined, delete it to
|
|
43
|
+
// prevent a CORS preflight.
|
|
44
|
+
if (!options.headers.trackingid) {
|
|
45
|
+
Reflect.deleteProperty(options.headers, 'trackingid');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return options;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (this.requiresTrackingId(options)) {
|
|
52
|
+
options.headers.trackingid = `${this.webex.sessionId}_${this.sequence}`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (options.headers.trackingid && options.replayCount) {
|
|
56
|
+
const tid = options.headers.trackingid.split('+');
|
|
57
|
+
|
|
58
|
+
tid[1] = options.replayCount;
|
|
59
|
+
options.headers.trackingid = tid.join('+');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return options;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Determines whether or not include a tracking id
|
|
67
|
+
* @param {Object} options
|
|
68
|
+
* @returns {boolean}
|
|
69
|
+
*/
|
|
70
|
+
requiresTrackingId(options) {
|
|
71
|
+
return !options.headers.trackingid;
|
|
72
|
+
}
|
|
73
|
+
}
|