@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,106 +1,106 @@
|
|
|
1
|
-
/* eslint-disable prefer-destructuring */
|
|
2
|
-
|
|
3
|
-
/*!
|
|
4
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {clone} from 'lodash';
|
|
8
|
-
import {Interceptor} from '@webex/http-core';
|
|
9
|
-
|
|
10
|
-
const requestHeaderName = 'cisco-no-http-redirect';
|
|
11
|
-
const responseHeaderName = 'cisco-location';
|
|
12
|
-
const LOCUS_REDIRECT_ERROR = 2000002;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @class
|
|
16
|
-
*/
|
|
17
|
-
export default class RedirectInterceptor extends Interceptor {
|
|
18
|
-
/**
|
|
19
|
-
* @returns {RedirectInterceptor}
|
|
20
|
-
*/
|
|
21
|
-
static create() {
|
|
22
|
-
return new RedirectInterceptor({webex: this});
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @see Interceptor#onRequest
|
|
27
|
-
* @param {Object} options
|
|
28
|
-
* @returns {Object}
|
|
29
|
-
*/
|
|
30
|
-
onRequest(options) {
|
|
31
|
-
if (options && options.uri && typeof options.uri === 'string') {
|
|
32
|
-
if (
|
|
33
|
-
options.uri.includes('https://idbroker') ||
|
|
34
|
-
options.uri.includes(this.webex.config.credentials.samlUrl) ||
|
|
35
|
-
options.uri.includes(this.webex.config.credentials.tokenUrl) ||
|
|
36
|
-
options.uri.includes(this.webex.config.credentials.authorizeUrl)
|
|
37
|
-
) {
|
|
38
|
-
return options;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// If cisco-no-http-redirect is already set, don't overwrite it
|
|
43
|
-
if (requestHeaderName in options.headers) {
|
|
44
|
-
// If cisco-no-http-redirect is set to null, false, or undefined, delete
|
|
45
|
-
// it to prevent a CORS preflight.
|
|
46
|
-
if (!options.headers[requestHeaderName]) {
|
|
47
|
-
Reflect.deleteProperty(options.headers, requestHeaderName);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
return options;
|
|
51
|
-
}
|
|
52
|
-
options.headers[requestHeaderName] = true;
|
|
53
|
-
options.$redirectCount = options.$redirectCount || 0;
|
|
54
|
-
|
|
55
|
-
return options;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* @see Interceptor#onResponse
|
|
60
|
-
* @param {Object} options
|
|
61
|
-
* @param {HttpResponse} response
|
|
62
|
-
* @returns {Object}
|
|
63
|
-
*/
|
|
64
|
-
onResponse(options, response) {
|
|
65
|
-
/* eslint-disable no-else-return */
|
|
66
|
-
if (response.headers && response.headers[responseHeaderName]) {
|
|
67
|
-
options = clone(options);
|
|
68
|
-
options.uri = response.headers[responseHeaderName];
|
|
69
|
-
options.$redirectCount += 1;
|
|
70
|
-
if (options.$redirectCount > this.webex.config.maxAppLevelRedirects) {
|
|
71
|
-
return Promise.reject(new Error('Maximum redirects exceeded'));
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return this.webex.request(options);
|
|
75
|
-
} else if (
|
|
76
|
-
response.headers &&
|
|
77
|
-
response.body &&
|
|
78
|
-
response.body.errorCode === LOCUS_REDIRECT_ERROR &&
|
|
79
|
-
response.body.location
|
|
80
|
-
) {
|
|
81
|
-
options = clone(options);
|
|
82
|
-
|
|
83
|
-
this.webex.logger.warn('redirect: url redirects needed from', options.uri);
|
|
84
|
-
if (response.options && response.options.qs) {
|
|
85
|
-
// for POST requests
|
|
86
|
-
const newUrl = response.body.location.split('?');
|
|
87
|
-
|
|
88
|
-
options.uri = newUrl[0]; // params are already present in the qs
|
|
89
|
-
} else {
|
|
90
|
-
// for GET requests
|
|
91
|
-
options.uri = response.body.location;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
this.webex.logger.warn('redirect: url redirects needed to', options.uri);
|
|
95
|
-
options.$redirectCount += 1;
|
|
96
|
-
if (options.$redirectCount > this.webex.config.maxLocusRedirects) {
|
|
97
|
-
return Promise.reject(new Error('Maximum redirects exceeded'));
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return this.webex.request(options);
|
|
101
|
-
}
|
|
102
|
-
/* eslint-enable no-else-return */
|
|
103
|
-
|
|
104
|
-
return response;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
1
|
+
/* eslint-disable prefer-destructuring */
|
|
2
|
+
|
|
3
|
+
/*!
|
|
4
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {clone} from 'lodash';
|
|
8
|
+
import {Interceptor} from '@webex/http-core';
|
|
9
|
+
|
|
10
|
+
const requestHeaderName = 'cisco-no-http-redirect';
|
|
11
|
+
const responseHeaderName = 'cisco-location';
|
|
12
|
+
const LOCUS_REDIRECT_ERROR = 2000002;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @class
|
|
16
|
+
*/
|
|
17
|
+
export default class RedirectInterceptor extends Interceptor {
|
|
18
|
+
/**
|
|
19
|
+
* @returns {RedirectInterceptor}
|
|
20
|
+
*/
|
|
21
|
+
static create() {
|
|
22
|
+
return new RedirectInterceptor({webex: this});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @see Interceptor#onRequest
|
|
27
|
+
* @param {Object} options
|
|
28
|
+
* @returns {Object}
|
|
29
|
+
*/
|
|
30
|
+
onRequest(options) {
|
|
31
|
+
if (options && options.uri && typeof options.uri === 'string') {
|
|
32
|
+
if (
|
|
33
|
+
options.uri.includes('https://idbroker') ||
|
|
34
|
+
options.uri.includes(this.webex.config.credentials.samlUrl) ||
|
|
35
|
+
options.uri.includes(this.webex.config.credentials.tokenUrl) ||
|
|
36
|
+
options.uri.includes(this.webex.config.credentials.authorizeUrl)
|
|
37
|
+
) {
|
|
38
|
+
return options;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// If cisco-no-http-redirect is already set, don't overwrite it
|
|
43
|
+
if (requestHeaderName in options.headers) {
|
|
44
|
+
// If cisco-no-http-redirect is set to null, false, or undefined, delete
|
|
45
|
+
// it to prevent a CORS preflight.
|
|
46
|
+
if (!options.headers[requestHeaderName]) {
|
|
47
|
+
Reflect.deleteProperty(options.headers, requestHeaderName);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return options;
|
|
51
|
+
}
|
|
52
|
+
options.headers[requestHeaderName] = true;
|
|
53
|
+
options.$redirectCount = options.$redirectCount || 0;
|
|
54
|
+
|
|
55
|
+
return options;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @see Interceptor#onResponse
|
|
60
|
+
* @param {Object} options
|
|
61
|
+
* @param {HttpResponse} response
|
|
62
|
+
* @returns {Object}
|
|
63
|
+
*/
|
|
64
|
+
onResponse(options, response) {
|
|
65
|
+
/* eslint-disable no-else-return */
|
|
66
|
+
if (response.headers && response.headers[responseHeaderName]) {
|
|
67
|
+
options = clone(options);
|
|
68
|
+
options.uri = response.headers[responseHeaderName];
|
|
69
|
+
options.$redirectCount += 1;
|
|
70
|
+
if (options.$redirectCount > this.webex.config.maxAppLevelRedirects) {
|
|
71
|
+
return Promise.reject(new Error('Maximum redirects exceeded'));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return this.webex.request(options);
|
|
75
|
+
} else if (
|
|
76
|
+
response.headers &&
|
|
77
|
+
response.body &&
|
|
78
|
+
response.body.errorCode === LOCUS_REDIRECT_ERROR &&
|
|
79
|
+
response.body.location
|
|
80
|
+
) {
|
|
81
|
+
options = clone(options);
|
|
82
|
+
|
|
83
|
+
this.webex.logger.warn('redirect: url redirects needed from', options.uri);
|
|
84
|
+
if (response.options && response.options.qs) {
|
|
85
|
+
// for POST requests
|
|
86
|
+
const newUrl = response.body.location.split('?');
|
|
87
|
+
|
|
88
|
+
options.uri = newUrl[0]; // params are already present in the qs
|
|
89
|
+
} else {
|
|
90
|
+
// for GET requests
|
|
91
|
+
options.uri = response.body.location;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
this.webex.logger.warn('redirect: url redirects needed to', options.uri);
|
|
95
|
+
options.$redirectCount += 1;
|
|
96
|
+
if (options.$redirectCount > this.webex.config.maxLocusRedirects) {
|
|
97
|
+
return Promise.reject(new Error('Maximum redirects exceeded'));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return this.webex.request(options);
|
|
101
|
+
}
|
|
102
|
+
/* eslint-enable no-else-return */
|
|
103
|
+
|
|
104
|
+
return response;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -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
|
+
}
|