@webex/webex-core 3.0.0-beta.2 → 3.0.0-beta.200
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/dist/config.js +1 -11
- package/dist/config.js.map +1 -1
- package/dist/credentials-config.js +44 -64
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js +0 -76
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js +22 -55
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js +0 -20
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js +0 -21
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/network-timing.js +2 -21
- package/dist/interceptors/network-timing.js.map +1 -1
- package/dist/interceptors/payload-transformer.js +2 -22
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js +25 -57
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js +4 -33
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js +3 -30
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js +1 -30
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/request-timing.js +3 -22
- package/dist/interceptors/request-timing.js.map +1 -1
- package/dist/interceptors/response-logger.js +2 -31
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js +2 -29
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-tracking-id.js +5 -28
- package/dist/interceptors/webex-tracking-id.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js +5 -38
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +3 -51
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +55 -119
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js +0 -49
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js +1 -13
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js +1 -7
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js +1 -7
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +39 -118
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +13 -26
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js +0 -2
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js +1 -28
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js +2 -23
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +12 -34
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js +0 -2
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js +10 -90
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js +0 -2
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js +47 -62
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js +78 -90
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js +3 -15
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js +4 -25
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +122 -238
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js +5 -28
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js +19 -62
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/errors.js +0 -23
- package/dist/lib/storage/errors.js.map +1 -1
- package/dist/lib/storage/index.js +2 -16
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js +11 -41
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js +8 -30
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js +1 -19
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js +1 -31
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js +6 -40
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +3 -17
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +84 -203
- package/dist/webex-core.js.map +1 -1
- package/dist/webex-internal-core.js +0 -10
- package/dist/webex-internal-core.js.map +1 -1
- package/package.json +14 -14
- package/src/config.js +9 -11
- package/src/credentials-config.js +110 -72
- package/src/index.js +4 -14
- package/src/interceptors/auth.js +36 -37
- package/src/interceptors/default-options.js +0 -1
- package/src/interceptors/embargo.js +1 -1
- package/src/interceptors/payload-transformer.js +1 -2
- package/src/interceptors/rate-limit.js +8 -5
- package/src/interceptors/redirect.js +14 -8
- package/src/interceptors/request-event.js +4 -8
- package/src/interceptors/request-logger.js +8 -5
- package/src/interceptors/response-logger.js +11 -8
- package/src/interceptors/user-agent.js +1 -2
- package/src/interceptors/webex-user-agent.js +3 -9
- package/src/lib/batcher.js +70 -69
- package/src/lib/credentials/credentials.js +131 -122
- package/src/lib/credentials/grant-errors.js +6 -7
- package/src/lib/credentials/index.js +1 -4
- package/src/lib/credentials/scope.js +1 -4
- package/src/lib/credentials/token-collection.js +1 -1
- package/src/lib/credentials/token.js +86 -80
- package/src/lib/page.js +10 -11
- package/src/lib/services/constants.js +3 -13
- package/src/lib/services/index.js +2 -2
- package/src/lib/services/interceptors/server-error.js +12 -7
- package/src/lib/services/interceptors/service.js +6 -5
- package/src/lib/services/metrics.js +1 -1
- package/src/lib/services/service-catalog.js +110 -100
- package/src/lib/services/service-fed-ramp.js +1 -2
- package/src/lib/services/service-host.js +10 -17
- package/src/lib/services/service-registry.js +69 -96
- package/src/lib/services/service-state.js +4 -6
- package/src/lib/services/service-url.js +24 -23
- package/src/lib/services/services.js +260 -251
- package/src/lib/stateless-webex-plugin.js +4 -2
- package/src/lib/storage/decorators.js +68 -66
- package/src/lib/storage/index.js +4 -6
- package/src/lib/storage/make-webex-plugin-store.js +34 -21
- package/src/lib/storage/make-webex-store.js +6 -7
- package/src/lib/storage/memory-store-adapter.js +3 -3
- package/src/lib/webex-core-plugin-mixin.js +10 -7
- package/src/lib/webex-http-error.js +7 -8
- package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
- package/src/lib/webex-plugin.js +41 -34
- package/src/plugins/logger.js +8 -3
- package/src/webex-core.js +198 -117
- package/src/webex-internal-core.js +15 -9
- package/test/integration/spec/credentials/credentials.js +26 -30
- package/test/integration/spec/credentials/token.js +36 -33
- package/test/integration/spec/services/service-catalog.js +177 -156
- package/test/integration/spec/services/services.js +313 -304
- package/test/integration/spec/webex-core.js +98 -86
- package/test/unit/spec/_setup.js +26 -18
- package/test/unit/spec/credentials/credentials.js +217 -154
- package/test/unit/spec/credentials/token.js +94 -76
- package/test/unit/spec/interceptors/auth.js +291 -243
- package/test/unit/spec/interceptors/default-options.js +36 -24
- package/test/unit/spec/interceptors/embargo.js +32 -27
- package/test/unit/spec/interceptors/network-timing.js +2 -2
- package/test/unit/spec/interceptors/payload-transformer.js +61 -52
- package/test/unit/spec/interceptors/rate-limit.js +104 -75
- package/test/unit/spec/interceptors/redirect.js +22 -20
- package/test/unit/spec/interceptors/request-timing.js +18 -22
- package/test/unit/spec/interceptors/user-agent.js +28 -16
- package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
- package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
- package/test/unit/spec/lib/batcher.js +36 -32
- package/test/unit/spec/lib/page.js +36 -32
- package/test/unit/spec/lib/webex-plugin.js +1 -1
- package/test/unit/spec/services/interceptors/server-error.js +67 -90
- package/test/unit/spec/services/interceptors/service.js +17 -28
- package/test/unit/spec/services/service-catalog.js +19 -27
- package/test/unit/spec/services/service-host.js +29 -26
- package/test/unit/spec/services/service-registry.js +128 -170
- package/test/unit/spec/services/service-state.js +13 -22
- package/test/unit/spec/services/service-url.js +24 -43
- package/test/unit/spec/services/services.js +85 -41
- package/test/unit/spec/storage/persist.js +6 -9
- package/test/unit/spec/storage/wait-for-value.js +22 -21
- package/test/unit/spec/webex-core.js +90 -57
- package/test/unit/spec/webex-internal-core.js +56 -31
package/src/plugins/logger.js
CHANGED
|
@@ -9,7 +9,7 @@ const precedence = {
|
|
|
9
9
|
warn: ['error', 'log'],
|
|
10
10
|
info: ['log'],
|
|
11
11
|
debug: ['info', 'log'],
|
|
12
|
-
trace: ['debug', 'info', 'log']
|
|
12
|
+
trace: ['debug', 'info', 'log'],
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -33,7 +33,12 @@ function wrapConsoleMethod(level) {
|
|
|
33
33
|
return function wrappedConsoleMethod(...args) {
|
|
34
34
|
/* eslint no-invalid-this: [0] */
|
|
35
35
|
/* istanbul ignore if */
|
|
36
|
-
if (
|
|
36
|
+
if (
|
|
37
|
+
process.env.NODE_ENV === 'test' &&
|
|
38
|
+
this.webex &&
|
|
39
|
+
this.webex.internal.device &&
|
|
40
|
+
this.webex.internal.device.url
|
|
41
|
+
) {
|
|
37
42
|
args.unshift(this.webex.internal.device.url.slice(-3));
|
|
38
43
|
}
|
|
39
44
|
console[level](...args);
|
|
@@ -47,7 +52,7 @@ const Logger = WebexPlugin.extend({
|
|
|
47
52
|
log: wrapConsoleMethod('log'),
|
|
48
53
|
info: wrapConsoleMethod('info'),
|
|
49
54
|
debug: wrapConsoleMethod('debug'),
|
|
50
|
-
trace: wrapConsoleMethod('trace')
|
|
55
|
+
trace: wrapConsoleMethod('trace'),
|
|
51
56
|
});
|
|
52
57
|
|
|
53
58
|
registerPlugin('logger', Logger);
|
package/src/webex-core.js
CHANGED
|
@@ -6,7 +6,12 @@ import {EventEmitter} from 'events';
|
|
|
6
6
|
import util from 'util';
|
|
7
7
|
|
|
8
8
|
import {proxyEvents, retry, transferEvents} from '@webex/common';
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
HttpStatusInterceptor,
|
|
11
|
+
defaults as requestDefaults,
|
|
12
|
+
protoprepareFetchOptions as prepareFetchOptions,
|
|
13
|
+
setTimingsAndFetch as _setTimingsAndFetch,
|
|
14
|
+
} from '@webex/http-core';
|
|
10
15
|
import {defaultsDeep, get, isFunction, isString, last, merge, omit, set, unset} from 'lodash';
|
|
11
16
|
import AmpState from 'ampersand-state';
|
|
12
17
|
import uuid from 'uuid';
|
|
@@ -40,8 +45,14 @@ const interceptors = {
|
|
|
40
45
|
RequestEventInterceptor: RequestEventInterceptor.create,
|
|
41
46
|
RateLimitInterceptor: RateLimitInterceptor.create,
|
|
42
47
|
/* eslint-disable no-extra-parens */
|
|
43
|
-
RequestLoggerInterceptor:
|
|
44
|
-
|
|
48
|
+
RequestLoggerInterceptor:
|
|
49
|
+
process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING
|
|
50
|
+
? RequestLoggerInterceptor.create
|
|
51
|
+
: undefined,
|
|
52
|
+
ResponseLoggerInterceptor:
|
|
53
|
+
process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING
|
|
54
|
+
? ResponseLoggerInterceptor.create
|
|
55
|
+
: undefined,
|
|
45
56
|
/* eslint-enable no-extra-parens */
|
|
46
57
|
RequestTimingInterceptor: RequestTimingInterceptor.create,
|
|
47
58
|
ServiceInterceptor: undefined,
|
|
@@ -54,12 +65,12 @@ const interceptors = {
|
|
|
54
65
|
RedirectInterceptor: RedirectInterceptor.create,
|
|
55
66
|
HttpStatusInterceptor() {
|
|
56
67
|
return HttpStatusInterceptor.create({
|
|
57
|
-
error: WebexHttpError
|
|
68
|
+
error: WebexHttpError,
|
|
58
69
|
});
|
|
59
70
|
},
|
|
60
71
|
NetworkTimingInterceptor: NetworkTimingInterceptor.create,
|
|
61
72
|
EmbargoInterceptor: EmbargoInterceptor.create,
|
|
62
|
-
DefaultOptionsInterceptor: DefaultOptionsInterceptor.create
|
|
73
|
+
DefaultOptionsInterceptor: DefaultOptionsInterceptor.create,
|
|
63
74
|
};
|
|
64
75
|
|
|
65
76
|
const preInterceptors = [
|
|
@@ -67,7 +78,7 @@ const preInterceptors = [
|
|
|
67
78
|
'RequestTimingInterceptor',
|
|
68
79
|
'RequestEventInterceptor',
|
|
69
80
|
'WebexTrackingIdInterceptor',
|
|
70
|
-
'RateLimitInterceptor'
|
|
81
|
+
'RateLimitInterceptor',
|
|
71
82
|
];
|
|
72
83
|
|
|
73
84
|
const postInterceptors = [
|
|
@@ -75,7 +86,7 @@ const postInterceptors = [
|
|
|
75
86
|
'NetworkTimingInterceptor',
|
|
76
87
|
'EmbargoInterceptor',
|
|
77
88
|
'RequestLoggerInterceptor',
|
|
78
|
-
'RateLimitInterceptor'
|
|
89
|
+
'RateLimitInterceptor',
|
|
79
90
|
];
|
|
80
91
|
|
|
81
92
|
const MAX_FILE_SIZE_IN_MB = 2048;
|
|
@@ -87,7 +98,7 @@ const WebexCore = AmpState.extend({
|
|
|
87
98
|
version: PACKAGE_VERSION,
|
|
88
99
|
|
|
89
100
|
children: {
|
|
90
|
-
internal: WebexInternalCore
|
|
101
|
+
internal: WebexInternalCore,
|
|
91
102
|
},
|
|
92
103
|
|
|
93
104
|
constructor(attrs = {}, options) {
|
|
@@ -96,12 +107,11 @@ const WebexCore = AmpState.extend({
|
|
|
96
107
|
credentials: {
|
|
97
108
|
supertoken: {
|
|
98
109
|
// eslint-disable-next-line camelcase
|
|
99
|
-
access_token: attrs
|
|
100
|
-
}
|
|
101
|
-
}
|
|
110
|
+
access_token: attrs,
|
|
111
|
+
},
|
|
112
|
+
},
|
|
102
113
|
};
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
114
|
+
} else {
|
|
105
115
|
// Reminder: order is important here
|
|
106
116
|
[
|
|
107
117
|
'credentials.authorization',
|
|
@@ -109,7 +119,7 @@ const WebexCore = AmpState.extend({
|
|
|
109
119
|
'credentials.supertoken.supertoken',
|
|
110
120
|
'supertoken',
|
|
111
121
|
'access_token',
|
|
112
|
-
'credentials.authorization.supertoken'
|
|
122
|
+
'credentials.authorization.supertoken',
|
|
113
123
|
].forEach((path) => {
|
|
114
124
|
const val = get(attrs, path);
|
|
115
125
|
|
|
@@ -119,22 +129,22 @@ const WebexCore = AmpState.extend({
|
|
|
119
129
|
}
|
|
120
130
|
});
|
|
121
131
|
|
|
122
|
-
[
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
unset(attrs, path);
|
|
131
|
-
set(attrs, 'credentials.supertoken', val);
|
|
132
|
-
}
|
|
133
|
-
});
|
|
132
|
+
['credentials', 'credentials.authorization'].forEach((path) => {
|
|
133
|
+
const val = get(attrs, path);
|
|
134
|
+
|
|
135
|
+
if (typeof val === 'string') {
|
|
136
|
+
unset(attrs, path);
|
|
137
|
+
set(attrs, 'credentials.supertoken', val);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
134
140
|
|
|
135
141
|
if (typeof get(attrs, 'credentials.access_token') === 'string') {
|
|
136
142
|
// Send access_token to get validated and corrected and then set it
|
|
137
|
-
set(
|
|
143
|
+
set(
|
|
144
|
+
attrs,
|
|
145
|
+
'credentials.access_token',
|
|
146
|
+
this.bearerValidator(get(attrs, 'credentials.access_token').trim())
|
|
147
|
+
);
|
|
138
148
|
|
|
139
149
|
set(attrs, 'credentials.supertoken', attrs.credentials);
|
|
140
150
|
}
|
|
@@ -148,25 +158,31 @@ const WebexCore = AmpState.extend({
|
|
|
148
158
|
deps: [],
|
|
149
159
|
fn() {
|
|
150
160
|
return makeWebexStore('bounded', this);
|
|
151
|
-
}
|
|
161
|
+
},
|
|
152
162
|
},
|
|
153
163
|
unboundedStorage: {
|
|
154
164
|
deps: [],
|
|
155
165
|
fn() {
|
|
156
166
|
return makeWebexStore('unbounded', this);
|
|
157
|
-
}
|
|
167
|
+
},
|
|
158
168
|
},
|
|
159
169
|
ready: {
|
|
160
170
|
deps: ['loaded', 'internal.ready'],
|
|
161
171
|
fn() {
|
|
162
|
-
return
|
|
163
|
-
|
|
164
|
-
|
|
172
|
+
return (
|
|
173
|
+
this.loaded &&
|
|
174
|
+
Object.keys(this._children).reduce(
|
|
175
|
+
(ready, name) => ready && this[name] && this[name].ready !== false,
|
|
176
|
+
true
|
|
177
|
+
)
|
|
178
|
+
);
|
|
179
|
+
},
|
|
180
|
+
},
|
|
165
181
|
},
|
|
166
182
|
|
|
167
183
|
session: {
|
|
168
184
|
config: {
|
|
169
|
-
type: 'object'
|
|
185
|
+
type: 'object',
|
|
170
186
|
},
|
|
171
187
|
/**
|
|
172
188
|
* When true, indicates that the initial load from the storage layer is
|
|
@@ -177,18 +193,18 @@ const WebexCore = AmpState.extend({
|
|
|
177
193
|
*/
|
|
178
194
|
loaded: {
|
|
179
195
|
default: false,
|
|
180
|
-
type: 'boolean'
|
|
196
|
+
type: 'boolean',
|
|
181
197
|
},
|
|
182
198
|
request: {
|
|
183
199
|
setOnce: true,
|
|
184
200
|
// It's supposed to be a function, but that's not a type defined in
|
|
185
201
|
// Ampersand
|
|
186
|
-
type: 'any'
|
|
202
|
+
type: 'any',
|
|
187
203
|
},
|
|
188
204
|
sessionId: {
|
|
189
205
|
setOnce: true,
|
|
190
|
-
type: 'string'
|
|
191
|
-
}
|
|
206
|
+
type: 'string',
|
|
207
|
+
},
|
|
192
208
|
},
|
|
193
209
|
|
|
194
210
|
/**
|
|
@@ -212,32 +228,44 @@ const WebexCore = AmpState.extend({
|
|
|
212
228
|
(p) => !p.direction || p.direction === direction
|
|
213
229
|
);
|
|
214
230
|
const ctx = {
|
|
215
|
-
webex: this
|
|
231
|
+
webex: this,
|
|
216
232
|
};
|
|
217
233
|
|
|
218
|
-
return Promise.all(
|
|
219
|
-
.
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
return p.extract(object)
|
|
225
|
-
// eslint-disable-next-line max-nested-callbacks
|
|
226
|
-
.then((target) => ({
|
|
227
|
-
name: p.name,
|
|
228
|
-
target
|
|
229
|
-
}));
|
|
230
|
-
})))
|
|
231
|
-
.then((data) => data
|
|
232
|
-
.filter((d) => Boolean(d))
|
|
233
|
-
// eslint-disable-next-line max-nested-callbacks
|
|
234
|
-
.reduce((promise, {name, target, alias}) => promise.then(() => {
|
|
235
|
-
if (alias) {
|
|
236
|
-
return this.applyNamedTransform(direction, alias, target);
|
|
234
|
+
return Promise.all(
|
|
235
|
+
predicates.map((p) =>
|
|
236
|
+
p.test(ctx, object).then((shouldTransform) => {
|
|
237
|
+
if (!shouldTransform) {
|
|
238
|
+
return undefined;
|
|
237
239
|
}
|
|
238
240
|
|
|
239
|
-
return
|
|
240
|
-
|
|
241
|
+
return (
|
|
242
|
+
p
|
|
243
|
+
.extract(object)
|
|
244
|
+
// eslint-disable-next-line max-nested-callbacks
|
|
245
|
+
.then((target) => ({
|
|
246
|
+
name: p.name,
|
|
247
|
+
target,
|
|
248
|
+
}))
|
|
249
|
+
);
|
|
250
|
+
})
|
|
251
|
+
)
|
|
252
|
+
)
|
|
253
|
+
.then((data) =>
|
|
254
|
+
data
|
|
255
|
+
.filter((d) => Boolean(d))
|
|
256
|
+
// eslint-disable-next-line max-nested-callbacks
|
|
257
|
+
.reduce(
|
|
258
|
+
(promise, {name, target, alias}) =>
|
|
259
|
+
promise.then(() => {
|
|
260
|
+
if (alias) {
|
|
261
|
+
return this.applyNamedTransform(direction, alias, target);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return this.applyNamedTransform(direction, name, target);
|
|
265
|
+
}),
|
|
266
|
+
Promise.resolve()
|
|
267
|
+
)
|
|
268
|
+
)
|
|
241
269
|
.then(() => object);
|
|
242
270
|
},
|
|
243
271
|
|
|
@@ -254,7 +282,7 @@ const WebexCore = AmpState.extend({
|
|
|
254
282
|
name = ctx;
|
|
255
283
|
ctx = {
|
|
256
284
|
webex: this,
|
|
257
|
-
transform: (...args) => this.applyNamedTransform(direction, ctx, ...args)
|
|
285
|
+
transform: (...args) => this.applyNamedTransform(direction, ctx, ...args),
|
|
258
286
|
};
|
|
259
287
|
}
|
|
260
288
|
|
|
@@ -264,13 +292,18 @@ const WebexCore = AmpState.extend({
|
|
|
264
292
|
|
|
265
293
|
// too many implicit returns on the same line is difficult to interpret
|
|
266
294
|
// eslint-disable-next-line arrow-body-style
|
|
267
|
-
return transforms
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
295
|
+
return transforms
|
|
296
|
+
.reduce(
|
|
297
|
+
(promise, tx) =>
|
|
298
|
+
promise.then(() => {
|
|
299
|
+
if (tx.alias) {
|
|
300
|
+
return ctx.transform(tx.alias, ...rest);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return Promise.resolve(tx.fn(ctx, ...rest));
|
|
304
|
+
}),
|
|
305
|
+
Promise.resolve()
|
|
306
|
+
)
|
|
274
307
|
.then(() => last(rest));
|
|
275
308
|
},
|
|
276
309
|
|
|
@@ -296,7 +329,6 @@ const WebexCore = AmpState.extend({
|
|
|
296
329
|
initialize(attrs = {}) {
|
|
297
330
|
this.config = merge({}, config, attrs.config);
|
|
298
331
|
|
|
299
|
-
|
|
300
332
|
// There's some unfortunateness with the way {@link AmpersandState#children}
|
|
301
333
|
// get initialized. We'll fire the change:config event so that
|
|
302
334
|
// {@link WebexPlugin#initialize()} can use
|
|
@@ -372,10 +404,21 @@ const WebexCore = AmpState.extend({
|
|
|
372
404
|
|
|
373
405
|
this.request = requestDefaults({
|
|
374
406
|
json: true,
|
|
375
|
-
interceptors: ints
|
|
407
|
+
interceptors: ints,
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
this.prepareFetchOptions = prepareFetchOptions({
|
|
411
|
+
json: true,
|
|
412
|
+
interceptors: ints,
|
|
376
413
|
});
|
|
377
414
|
|
|
378
|
-
|
|
415
|
+
this.setTimingsAndFetch = _setTimingsAndFetch;
|
|
416
|
+
|
|
417
|
+
let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(
|
|
418
|
+
this,
|
|
419
|
+
'config.trackingIdBase',
|
|
420
|
+
uuid.v4()
|
|
421
|
+
)}`;
|
|
379
422
|
|
|
380
423
|
if (get(this, 'config.trackingIdSuffix')) {
|
|
381
424
|
sessionId += `_${get(this, 'config.trackingIdSuffix')}`;
|
|
@@ -408,9 +451,13 @@ const WebexCore = AmpState.extend({
|
|
|
408
451
|
bearerValidator(token) {
|
|
409
452
|
if (token.includes('Bearer') && token.split(' ').length - 1 === 0) {
|
|
410
453
|
console.warn(
|
|
411
|
-
`Your access token does not have a space between 'Bearer' and the token, please add a space to it or replace it with this already fixed version:\n\n${token
|
|
454
|
+
`Your access token does not have a space between 'Bearer' and the token, please add a space to it or replace it with this already fixed version:\n\n${token
|
|
455
|
+
.replace('Bearer', 'Bearer ')
|
|
456
|
+
.replace(/\s+/g, ' ')}`
|
|
457
|
+
);
|
|
458
|
+
console.info(
|
|
459
|
+
"Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine"
|
|
412
460
|
);
|
|
413
|
-
console.info("Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine");
|
|
414
461
|
|
|
415
462
|
return token.replace('Bearer', 'Bearer ').replace(/\s+/g, ' ');
|
|
416
463
|
}
|
|
@@ -418,9 +465,13 @@ const WebexCore = AmpState.extend({
|
|
|
418
465
|
// eslint-disable-next-line no-else-return
|
|
419
466
|
else if (token.split(' ').length - 1 > 1) {
|
|
420
467
|
console.warn(
|
|
421
|
-
`Your access token has ${
|
|
468
|
+
`Your access token has ${
|
|
469
|
+
token.split(' ').length - 2
|
|
470
|
+
} too many spaces, please use this format:\n\n${token.replace(/\s+/g, ' ')}`
|
|
471
|
+
);
|
|
472
|
+
console.info(
|
|
473
|
+
"Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine"
|
|
422
474
|
);
|
|
423
|
-
console.info("Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine");
|
|
424
475
|
|
|
425
476
|
return token.replace(/\s+/g, ' ');
|
|
426
477
|
}
|
|
@@ -436,11 +487,20 @@ const WebexCore = AmpState.extend({
|
|
|
436
487
|
* @returns {Object}
|
|
437
488
|
*/
|
|
438
489
|
inspect(depth) {
|
|
439
|
-
return util.inspect(
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
490
|
+
return util.inspect(
|
|
491
|
+
omit(
|
|
492
|
+
this.serialize({
|
|
493
|
+
props: true,
|
|
494
|
+
session: true,
|
|
495
|
+
derived: true,
|
|
496
|
+
}),
|
|
497
|
+
'boundedStorage',
|
|
498
|
+
'unboundedStorage',
|
|
499
|
+
'request',
|
|
500
|
+
'config'
|
|
501
|
+
),
|
|
502
|
+
{depth}
|
|
503
|
+
);
|
|
444
504
|
},
|
|
445
505
|
|
|
446
506
|
/**
|
|
@@ -459,7 +519,9 @@ const WebexCore = AmpState.extend({
|
|
|
459
519
|
logout(options, ...rest) {
|
|
460
520
|
// prefer the refresh token, but for clients that don't have one, fallback
|
|
461
521
|
// to the access token
|
|
462
|
-
const token =
|
|
522
|
+
const token =
|
|
523
|
+
this.credentials.supertoken &&
|
|
524
|
+
(this.credentials.supertoken.refresh_token || this.credentials.supertoken.access_token);
|
|
463
525
|
|
|
464
526
|
options = Object.assign({token}, options);
|
|
465
527
|
|
|
@@ -467,19 +529,31 @@ const WebexCore = AmpState.extend({
|
|
|
467
529
|
// were registered. In that way, wdm unregister() will be above mercury
|
|
468
530
|
// disconnect(), but disconnect() will execute first.
|
|
469
531
|
// eslint-disable-next-line arrow-body-style
|
|
470
|
-
return this.config.onBeforeLogout
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
532
|
+
return this.config.onBeforeLogout
|
|
533
|
+
.reverse()
|
|
534
|
+
.reduce(
|
|
535
|
+
(promise, {plugin, fn}) =>
|
|
536
|
+
promise.then(() => {
|
|
537
|
+
return (
|
|
538
|
+
Promise.resolve(
|
|
539
|
+
Reflect.apply(fn, this[plugin] || this.internal[plugin], [options, ...rest])
|
|
540
|
+
)
|
|
541
|
+
// eslint-disable-next-line max-nested-callbacks
|
|
542
|
+
.catch((err) => {
|
|
543
|
+
this.logger.warn(`onBeforeLogout from plugin ${plugin}: failed`, err);
|
|
544
|
+
})
|
|
545
|
+
);
|
|
546
|
+
}),
|
|
547
|
+
Promise.resolve()
|
|
548
|
+
)
|
|
549
|
+
.then(() => Promise.all([this.boundedStorage.clear(), this.unboundedStorage.clear()]))
|
|
481
550
|
.then(() => this.credentials.invalidate(...rest))
|
|
482
|
-
.then(
|
|
551
|
+
.then(
|
|
552
|
+
() =>
|
|
553
|
+
this.authorization &&
|
|
554
|
+
this.authorization.logout &&
|
|
555
|
+
this.authorization.logout(options, ...rest)
|
|
556
|
+
)
|
|
483
557
|
.then(() => this.trigger('client:logout'));
|
|
484
558
|
},
|
|
485
559
|
|
|
@@ -508,12 +582,16 @@ const WebexCore = AmpState.extend({
|
|
|
508
582
|
options.phases.upload = options.phases.upload || {};
|
|
509
583
|
options.phases.finalize = options.phases.finalize || {};
|
|
510
584
|
|
|
511
|
-
defaultsDeep(
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
585
|
+
defaultsDeep(
|
|
586
|
+
options.phases.initialize,
|
|
587
|
+
{
|
|
588
|
+
method: 'POST',
|
|
589
|
+
body: {
|
|
590
|
+
uploadProtocol: 'content-length',
|
|
591
|
+
},
|
|
592
|
+
},
|
|
593
|
+
omit(options, 'file', 'phases')
|
|
594
|
+
);
|
|
517
595
|
|
|
518
596
|
defaultsDeep(options.phases.upload, {
|
|
519
597
|
method: 'PUT',
|
|
@@ -522,13 +600,17 @@ const WebexCore = AmpState.extend({
|
|
|
522
600
|
body: options.file,
|
|
523
601
|
headers: {
|
|
524
602
|
'x-trans-id': uuid.v4(),
|
|
525
|
-
authorization: undefined
|
|
526
|
-
}
|
|
603
|
+
authorization: undefined,
|
|
604
|
+
},
|
|
527
605
|
});
|
|
528
606
|
|
|
529
|
-
defaultsDeep(
|
|
530
|
-
|
|
531
|
-
|
|
607
|
+
defaultsDeep(
|
|
608
|
+
options.phases.finalize,
|
|
609
|
+
{
|
|
610
|
+
method: 'POST',
|
|
611
|
+
},
|
|
612
|
+
omit(options, 'file', 'phases')
|
|
613
|
+
);
|
|
532
614
|
|
|
533
615
|
const shunt = new EventEmitter();
|
|
534
616
|
|
|
@@ -553,7 +635,8 @@ const WebexCore = AmpState.extend({
|
|
|
553
635
|
|
|
554
636
|
return this.request(options.phases.initialize)
|
|
555
637
|
.then((...args) => {
|
|
556
|
-
const fileUploadSizeLimitInBytes =
|
|
638
|
+
const fileUploadSizeLimitInBytes =
|
|
639
|
+
(args[0].body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB) * 1024 * 1024;
|
|
557
640
|
const currentFileSizeInBytes = options.file.byteLength;
|
|
558
641
|
|
|
559
642
|
if (fileUploadSizeLimitInBytes && fileUploadSizeLimitInBytes < currentFileSizeInBytes) {
|
|
@@ -575,14 +658,14 @@ const WebexCore = AmpState.extend({
|
|
|
575
658
|
return this.request({
|
|
576
659
|
method: 'DELETE',
|
|
577
660
|
url: response.body.url,
|
|
578
|
-
headers: response.options.headers
|
|
661
|
+
headers: response.options.headers,
|
|
579
662
|
}).then(() => {
|
|
580
663
|
this.logger.debug('client: deleting uploaded file complete');
|
|
581
664
|
|
|
582
665
|
const abortErrorDetails = {
|
|
583
666
|
currentFileSizeInBytes,
|
|
584
667
|
fileUploadSizeLimitInMB: response.body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB,
|
|
585
|
-
message: 'file-upload-size-limit-enabled'
|
|
668
|
+
message: 'file-upload-size-limit-enabled',
|
|
586
669
|
};
|
|
587
670
|
|
|
588
671
|
return Promise.reject(new Error(`${JSON.stringify(abortErrorDetails)}`));
|
|
@@ -610,12 +693,11 @@ const WebexCore = AmpState.extend({
|
|
|
610
693
|
_uploadPhaseUpload(options) {
|
|
611
694
|
this.logger.debug('client: uploading file');
|
|
612
695
|
|
|
613
|
-
const promise = this.request(options.phases.upload)
|
|
614
|
-
.
|
|
615
|
-
this.logger.debug('client: uploaded file');
|
|
696
|
+
const promise = this.request(options.phases.upload).then((res) => {
|
|
697
|
+
this.logger.debug('client: uploaded file');
|
|
616
698
|
|
|
617
|
-
|
|
618
|
-
|
|
699
|
+
return res;
|
|
700
|
+
});
|
|
619
701
|
|
|
620
702
|
proxyEvents(options.phases.upload.upload, promise);
|
|
621
703
|
|
|
@@ -632,13 +714,12 @@ const WebexCore = AmpState.extend({
|
|
|
632
714
|
_uploadPhaseFinalize: function _uploadPhaseFinalize(options) {
|
|
633
715
|
this.logger.debug('client: finalizing upload session');
|
|
634
716
|
|
|
635
|
-
return this.request(options.phases.finalize)
|
|
636
|
-
.
|
|
637
|
-
this.logger.debug('client: finalized upload session');
|
|
717
|
+
return this.request(options.phases.finalize).then((res) => {
|
|
718
|
+
this.logger.debug('client: finalized upload session');
|
|
638
719
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
}
|
|
720
|
+
return res;
|
|
721
|
+
});
|
|
722
|
+
},
|
|
642
723
|
});
|
|
643
724
|
|
|
644
725
|
WebexCore.version = PACKAGE_VERSION;
|
|
@@ -16,9 +16,12 @@ const WebexInternalCore = AmpState.extend({
|
|
|
16
16
|
ready: {
|
|
17
17
|
deps: [],
|
|
18
18
|
fn() {
|
|
19
|
-
return Object.keys(this._children).reduce(
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
return Object.keys(this._children).reduce(
|
|
20
|
+
(ready, name) => ready && this[name] && this[name].ready !== false,
|
|
21
|
+
true
|
|
22
|
+
);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
22
25
|
},
|
|
23
26
|
|
|
24
27
|
/**
|
|
@@ -29,12 +32,15 @@ const WebexInternalCore = AmpState.extend({
|
|
|
29
32
|
* @returns {Object}
|
|
30
33
|
*/
|
|
31
34
|
inspect(depth) {
|
|
32
|
-
return util.inspect(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
return util.inspect(
|
|
36
|
+
this.serialize({
|
|
37
|
+
props: true,
|
|
38
|
+
session: true,
|
|
39
|
+
derived: true,
|
|
40
|
+
}),
|
|
41
|
+
{depth}
|
|
42
|
+
);
|
|
43
|
+
},
|
|
38
44
|
});
|
|
39
45
|
|
|
40
46
|
export default WebexInternalCore;
|