@webex/webex-core 3.0.0-beta.2 → 3.0.0-beta.21
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 +39 -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 +79 -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 +112 -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 +185 -116
- 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 +189 -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 +78 -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
|
@@ -40,8 +40,14 @@ const interceptors = {
|
|
|
40
40
|
RequestEventInterceptor: RequestEventInterceptor.create,
|
|
41
41
|
RateLimitInterceptor: RateLimitInterceptor.create,
|
|
42
42
|
/* eslint-disable no-extra-parens */
|
|
43
|
-
RequestLoggerInterceptor:
|
|
44
|
-
|
|
43
|
+
RequestLoggerInterceptor:
|
|
44
|
+
process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING
|
|
45
|
+
? RequestLoggerInterceptor.create
|
|
46
|
+
: undefined,
|
|
47
|
+
ResponseLoggerInterceptor:
|
|
48
|
+
process.env.ENABLE_NETWORK_LOGGING || process.env.ENABLE_VERBOSE_NETWORK_LOGGING
|
|
49
|
+
? ResponseLoggerInterceptor.create
|
|
50
|
+
: undefined,
|
|
45
51
|
/* eslint-enable no-extra-parens */
|
|
46
52
|
RequestTimingInterceptor: RequestTimingInterceptor.create,
|
|
47
53
|
ServiceInterceptor: undefined,
|
|
@@ -54,12 +60,12 @@ const interceptors = {
|
|
|
54
60
|
RedirectInterceptor: RedirectInterceptor.create,
|
|
55
61
|
HttpStatusInterceptor() {
|
|
56
62
|
return HttpStatusInterceptor.create({
|
|
57
|
-
error: WebexHttpError
|
|
63
|
+
error: WebexHttpError,
|
|
58
64
|
});
|
|
59
65
|
},
|
|
60
66
|
NetworkTimingInterceptor: NetworkTimingInterceptor.create,
|
|
61
67
|
EmbargoInterceptor: EmbargoInterceptor.create,
|
|
62
|
-
DefaultOptionsInterceptor: DefaultOptionsInterceptor.create
|
|
68
|
+
DefaultOptionsInterceptor: DefaultOptionsInterceptor.create,
|
|
63
69
|
};
|
|
64
70
|
|
|
65
71
|
const preInterceptors = [
|
|
@@ -67,7 +73,7 @@ const preInterceptors = [
|
|
|
67
73
|
'RequestTimingInterceptor',
|
|
68
74
|
'RequestEventInterceptor',
|
|
69
75
|
'WebexTrackingIdInterceptor',
|
|
70
|
-
'RateLimitInterceptor'
|
|
76
|
+
'RateLimitInterceptor',
|
|
71
77
|
];
|
|
72
78
|
|
|
73
79
|
const postInterceptors = [
|
|
@@ -75,7 +81,7 @@ const postInterceptors = [
|
|
|
75
81
|
'NetworkTimingInterceptor',
|
|
76
82
|
'EmbargoInterceptor',
|
|
77
83
|
'RequestLoggerInterceptor',
|
|
78
|
-
'RateLimitInterceptor'
|
|
84
|
+
'RateLimitInterceptor',
|
|
79
85
|
];
|
|
80
86
|
|
|
81
87
|
const MAX_FILE_SIZE_IN_MB = 2048;
|
|
@@ -87,7 +93,7 @@ const WebexCore = AmpState.extend({
|
|
|
87
93
|
version: PACKAGE_VERSION,
|
|
88
94
|
|
|
89
95
|
children: {
|
|
90
|
-
internal: WebexInternalCore
|
|
96
|
+
internal: WebexInternalCore,
|
|
91
97
|
},
|
|
92
98
|
|
|
93
99
|
constructor(attrs = {}, options) {
|
|
@@ -96,12 +102,11 @@ const WebexCore = AmpState.extend({
|
|
|
96
102
|
credentials: {
|
|
97
103
|
supertoken: {
|
|
98
104
|
// eslint-disable-next-line camelcase
|
|
99
|
-
access_token: attrs
|
|
100
|
-
}
|
|
101
|
-
}
|
|
105
|
+
access_token: attrs,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
102
108
|
};
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
109
|
+
} else {
|
|
105
110
|
// Reminder: order is important here
|
|
106
111
|
[
|
|
107
112
|
'credentials.authorization',
|
|
@@ -109,7 +114,7 @@ const WebexCore = AmpState.extend({
|
|
|
109
114
|
'credentials.supertoken.supertoken',
|
|
110
115
|
'supertoken',
|
|
111
116
|
'access_token',
|
|
112
|
-
'credentials.authorization.supertoken'
|
|
117
|
+
'credentials.authorization.supertoken',
|
|
113
118
|
].forEach((path) => {
|
|
114
119
|
const val = get(attrs, path);
|
|
115
120
|
|
|
@@ -119,22 +124,22 @@ const WebexCore = AmpState.extend({
|
|
|
119
124
|
}
|
|
120
125
|
});
|
|
121
126
|
|
|
122
|
-
[
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
unset(attrs, path);
|
|
131
|
-
set(attrs, 'credentials.supertoken', val);
|
|
132
|
-
}
|
|
133
|
-
});
|
|
127
|
+
['credentials', 'credentials.authorization'].forEach((path) => {
|
|
128
|
+
const val = get(attrs, path);
|
|
129
|
+
|
|
130
|
+
if (typeof val === 'string') {
|
|
131
|
+
unset(attrs, path);
|
|
132
|
+
set(attrs, 'credentials.supertoken', val);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
134
135
|
|
|
135
136
|
if (typeof get(attrs, 'credentials.access_token') === 'string') {
|
|
136
137
|
// Send access_token to get validated and corrected and then set it
|
|
137
|
-
set(
|
|
138
|
+
set(
|
|
139
|
+
attrs,
|
|
140
|
+
'credentials.access_token',
|
|
141
|
+
this.bearerValidator(get(attrs, 'credentials.access_token').trim())
|
|
142
|
+
);
|
|
138
143
|
|
|
139
144
|
set(attrs, 'credentials.supertoken', attrs.credentials);
|
|
140
145
|
}
|
|
@@ -148,25 +153,31 @@ const WebexCore = AmpState.extend({
|
|
|
148
153
|
deps: [],
|
|
149
154
|
fn() {
|
|
150
155
|
return makeWebexStore('bounded', this);
|
|
151
|
-
}
|
|
156
|
+
},
|
|
152
157
|
},
|
|
153
158
|
unboundedStorage: {
|
|
154
159
|
deps: [],
|
|
155
160
|
fn() {
|
|
156
161
|
return makeWebexStore('unbounded', this);
|
|
157
|
-
}
|
|
162
|
+
},
|
|
158
163
|
},
|
|
159
164
|
ready: {
|
|
160
165
|
deps: ['loaded', 'internal.ready'],
|
|
161
166
|
fn() {
|
|
162
|
-
return
|
|
163
|
-
|
|
164
|
-
|
|
167
|
+
return (
|
|
168
|
+
this.loaded &&
|
|
169
|
+
Object.keys(this._children).reduce(
|
|
170
|
+
(ready, name) => ready && this[name] && this[name].ready !== false,
|
|
171
|
+
true
|
|
172
|
+
)
|
|
173
|
+
);
|
|
174
|
+
},
|
|
175
|
+
},
|
|
165
176
|
},
|
|
166
177
|
|
|
167
178
|
session: {
|
|
168
179
|
config: {
|
|
169
|
-
type: 'object'
|
|
180
|
+
type: 'object',
|
|
170
181
|
},
|
|
171
182
|
/**
|
|
172
183
|
* When true, indicates that the initial load from the storage layer is
|
|
@@ -177,18 +188,18 @@ const WebexCore = AmpState.extend({
|
|
|
177
188
|
*/
|
|
178
189
|
loaded: {
|
|
179
190
|
default: false,
|
|
180
|
-
type: 'boolean'
|
|
191
|
+
type: 'boolean',
|
|
181
192
|
},
|
|
182
193
|
request: {
|
|
183
194
|
setOnce: true,
|
|
184
195
|
// It's supposed to be a function, but that's not a type defined in
|
|
185
196
|
// Ampersand
|
|
186
|
-
type: 'any'
|
|
197
|
+
type: 'any',
|
|
187
198
|
},
|
|
188
199
|
sessionId: {
|
|
189
200
|
setOnce: true,
|
|
190
|
-
type: 'string'
|
|
191
|
-
}
|
|
201
|
+
type: 'string',
|
|
202
|
+
},
|
|
192
203
|
},
|
|
193
204
|
|
|
194
205
|
/**
|
|
@@ -212,32 +223,44 @@ const WebexCore = AmpState.extend({
|
|
|
212
223
|
(p) => !p.direction || p.direction === direction
|
|
213
224
|
);
|
|
214
225
|
const ctx = {
|
|
215
|
-
webex: this
|
|
226
|
+
webex: this,
|
|
216
227
|
};
|
|
217
228
|
|
|
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);
|
|
229
|
+
return Promise.all(
|
|
230
|
+
predicates.map((p) =>
|
|
231
|
+
p.test(ctx, object).then((shouldTransform) => {
|
|
232
|
+
if (!shouldTransform) {
|
|
233
|
+
return undefined;
|
|
237
234
|
}
|
|
238
235
|
|
|
239
|
-
return
|
|
240
|
-
|
|
236
|
+
return (
|
|
237
|
+
p
|
|
238
|
+
.extract(object)
|
|
239
|
+
// eslint-disable-next-line max-nested-callbacks
|
|
240
|
+
.then((target) => ({
|
|
241
|
+
name: p.name,
|
|
242
|
+
target,
|
|
243
|
+
}))
|
|
244
|
+
);
|
|
245
|
+
})
|
|
246
|
+
)
|
|
247
|
+
)
|
|
248
|
+
.then((data) =>
|
|
249
|
+
data
|
|
250
|
+
.filter((d) => Boolean(d))
|
|
251
|
+
// eslint-disable-next-line max-nested-callbacks
|
|
252
|
+
.reduce(
|
|
253
|
+
(promise, {name, target, alias}) =>
|
|
254
|
+
promise.then(() => {
|
|
255
|
+
if (alias) {
|
|
256
|
+
return this.applyNamedTransform(direction, alias, target);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
return this.applyNamedTransform(direction, name, target);
|
|
260
|
+
}),
|
|
261
|
+
Promise.resolve()
|
|
262
|
+
)
|
|
263
|
+
)
|
|
241
264
|
.then(() => object);
|
|
242
265
|
},
|
|
243
266
|
|
|
@@ -254,7 +277,7 @@ const WebexCore = AmpState.extend({
|
|
|
254
277
|
name = ctx;
|
|
255
278
|
ctx = {
|
|
256
279
|
webex: this,
|
|
257
|
-
transform: (...args) => this.applyNamedTransform(direction, ctx, ...args)
|
|
280
|
+
transform: (...args) => this.applyNamedTransform(direction, ctx, ...args),
|
|
258
281
|
};
|
|
259
282
|
}
|
|
260
283
|
|
|
@@ -264,13 +287,18 @@ const WebexCore = AmpState.extend({
|
|
|
264
287
|
|
|
265
288
|
// too many implicit returns on the same line is difficult to interpret
|
|
266
289
|
// eslint-disable-next-line arrow-body-style
|
|
267
|
-
return transforms
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
290
|
+
return transforms
|
|
291
|
+
.reduce(
|
|
292
|
+
(promise, tx) =>
|
|
293
|
+
promise.then(() => {
|
|
294
|
+
if (tx.alias) {
|
|
295
|
+
return ctx.transform(tx.alias, ...rest);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
return Promise.resolve(tx.fn(ctx, ...rest));
|
|
299
|
+
}),
|
|
300
|
+
Promise.resolve()
|
|
301
|
+
)
|
|
274
302
|
.then(() => last(rest));
|
|
275
303
|
},
|
|
276
304
|
|
|
@@ -296,7 +324,6 @@ const WebexCore = AmpState.extend({
|
|
|
296
324
|
initialize(attrs = {}) {
|
|
297
325
|
this.config = merge({}, config, attrs.config);
|
|
298
326
|
|
|
299
|
-
|
|
300
327
|
// There's some unfortunateness with the way {@link AmpersandState#children}
|
|
301
328
|
// get initialized. We'll fire the change:config event so that
|
|
302
329
|
// {@link WebexPlugin#initialize()} can use
|
|
@@ -372,10 +399,14 @@ const WebexCore = AmpState.extend({
|
|
|
372
399
|
|
|
373
400
|
this.request = requestDefaults({
|
|
374
401
|
json: true,
|
|
375
|
-
interceptors: ints
|
|
402
|
+
interceptors: ints,
|
|
376
403
|
});
|
|
377
404
|
|
|
378
|
-
let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(
|
|
405
|
+
let sessionId = `${get(this, 'config.trackingIdPrefix', 'webex-js-sdk')}_${get(
|
|
406
|
+
this,
|
|
407
|
+
'config.trackingIdBase',
|
|
408
|
+
uuid.v4()
|
|
409
|
+
)}`;
|
|
379
410
|
|
|
380
411
|
if (get(this, 'config.trackingIdSuffix')) {
|
|
381
412
|
sessionId += `_${get(this, 'config.trackingIdSuffix')}`;
|
|
@@ -408,9 +439,13 @@ const WebexCore = AmpState.extend({
|
|
|
408
439
|
bearerValidator(token) {
|
|
409
440
|
if (token.includes('Bearer') && token.split(' ').length - 1 === 0) {
|
|
410
441
|
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
|
|
442
|
+
`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
|
|
443
|
+
.replace('Bearer', 'Bearer ')
|
|
444
|
+
.replace(/\s+/g, ' ')}`
|
|
445
|
+
);
|
|
446
|
+
console.info(
|
|
447
|
+
"Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine"
|
|
412
448
|
);
|
|
413
|
-
console.info("Tip: You don't need to add 'Bearer' to the access_token field. The token by itself is fine");
|
|
414
449
|
|
|
415
450
|
return token.replace('Bearer', 'Bearer ').replace(/\s+/g, ' ');
|
|
416
451
|
}
|
|
@@ -418,9 +453,13 @@ const WebexCore = AmpState.extend({
|
|
|
418
453
|
// eslint-disable-next-line no-else-return
|
|
419
454
|
else if (token.split(' ').length - 1 > 1) {
|
|
420
455
|
console.warn(
|
|
421
|
-
`Your access token has ${
|
|
456
|
+
`Your access token has ${
|
|
457
|
+
token.split(' ').length - 2
|
|
458
|
+
} too many spaces, please use this format:\n\n${token.replace(/\s+/g, ' ')}`
|
|
459
|
+
);
|
|
460
|
+
console.info(
|
|
461
|
+
"Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine"
|
|
422
462
|
);
|
|
423
|
-
console.info("Tip: You don't need to add 'Bearer' to the access_token field, the token by itself is fine");
|
|
424
463
|
|
|
425
464
|
return token.replace(/\s+/g, ' ');
|
|
426
465
|
}
|
|
@@ -436,11 +475,20 @@ const WebexCore = AmpState.extend({
|
|
|
436
475
|
* @returns {Object}
|
|
437
476
|
*/
|
|
438
477
|
inspect(depth) {
|
|
439
|
-
return util.inspect(
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
478
|
+
return util.inspect(
|
|
479
|
+
omit(
|
|
480
|
+
this.serialize({
|
|
481
|
+
props: true,
|
|
482
|
+
session: true,
|
|
483
|
+
derived: true,
|
|
484
|
+
}),
|
|
485
|
+
'boundedStorage',
|
|
486
|
+
'unboundedStorage',
|
|
487
|
+
'request',
|
|
488
|
+
'config'
|
|
489
|
+
),
|
|
490
|
+
{depth}
|
|
491
|
+
);
|
|
444
492
|
},
|
|
445
493
|
|
|
446
494
|
/**
|
|
@@ -459,7 +507,9 @@ const WebexCore = AmpState.extend({
|
|
|
459
507
|
logout(options, ...rest) {
|
|
460
508
|
// prefer the refresh token, but for clients that don't have one, fallback
|
|
461
509
|
// to the access token
|
|
462
|
-
const token =
|
|
510
|
+
const token =
|
|
511
|
+
this.credentials.supertoken &&
|
|
512
|
+
(this.credentials.supertoken.refresh_token || this.credentials.supertoken.access_token);
|
|
463
513
|
|
|
464
514
|
options = Object.assign({token}, options);
|
|
465
515
|
|
|
@@ -467,19 +517,31 @@ const WebexCore = AmpState.extend({
|
|
|
467
517
|
// were registered. In that way, wdm unregister() will be above mercury
|
|
468
518
|
// disconnect(), but disconnect() will execute first.
|
|
469
519
|
// eslint-disable-next-line arrow-body-style
|
|
470
|
-
return this.config.onBeforeLogout
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
520
|
+
return this.config.onBeforeLogout
|
|
521
|
+
.reverse()
|
|
522
|
+
.reduce(
|
|
523
|
+
(promise, {plugin, fn}) =>
|
|
524
|
+
promise.then(() => {
|
|
525
|
+
return (
|
|
526
|
+
Promise.resolve(
|
|
527
|
+
Reflect.apply(fn, this[plugin] || this.internal[plugin], [options, ...rest])
|
|
528
|
+
)
|
|
529
|
+
// eslint-disable-next-line max-nested-callbacks
|
|
530
|
+
.catch((err) => {
|
|
531
|
+
this.logger.warn(`onBeforeLogout from plugin ${plugin}: failed`, err);
|
|
532
|
+
})
|
|
533
|
+
);
|
|
534
|
+
}),
|
|
535
|
+
Promise.resolve()
|
|
536
|
+
)
|
|
537
|
+
.then(() => Promise.all([this.boundedStorage.clear(), this.unboundedStorage.clear()]))
|
|
481
538
|
.then(() => this.credentials.invalidate(...rest))
|
|
482
|
-
.then(
|
|
539
|
+
.then(
|
|
540
|
+
() =>
|
|
541
|
+
this.authorization &&
|
|
542
|
+
this.authorization.logout &&
|
|
543
|
+
this.authorization.logout(options, ...rest)
|
|
544
|
+
)
|
|
483
545
|
.then(() => this.trigger('client:logout'));
|
|
484
546
|
},
|
|
485
547
|
|
|
@@ -508,12 +570,16 @@ const WebexCore = AmpState.extend({
|
|
|
508
570
|
options.phases.upload = options.phases.upload || {};
|
|
509
571
|
options.phases.finalize = options.phases.finalize || {};
|
|
510
572
|
|
|
511
|
-
defaultsDeep(
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
573
|
+
defaultsDeep(
|
|
574
|
+
options.phases.initialize,
|
|
575
|
+
{
|
|
576
|
+
method: 'POST',
|
|
577
|
+
body: {
|
|
578
|
+
uploadProtocol: 'content-length',
|
|
579
|
+
},
|
|
580
|
+
},
|
|
581
|
+
omit(options, 'file', 'phases')
|
|
582
|
+
);
|
|
517
583
|
|
|
518
584
|
defaultsDeep(options.phases.upload, {
|
|
519
585
|
method: 'PUT',
|
|
@@ -522,13 +588,17 @@ const WebexCore = AmpState.extend({
|
|
|
522
588
|
body: options.file,
|
|
523
589
|
headers: {
|
|
524
590
|
'x-trans-id': uuid.v4(),
|
|
525
|
-
authorization: undefined
|
|
526
|
-
}
|
|
591
|
+
authorization: undefined,
|
|
592
|
+
},
|
|
527
593
|
});
|
|
528
594
|
|
|
529
|
-
defaultsDeep(
|
|
530
|
-
|
|
531
|
-
|
|
595
|
+
defaultsDeep(
|
|
596
|
+
options.phases.finalize,
|
|
597
|
+
{
|
|
598
|
+
method: 'POST',
|
|
599
|
+
},
|
|
600
|
+
omit(options, 'file', 'phases')
|
|
601
|
+
);
|
|
532
602
|
|
|
533
603
|
const shunt = new EventEmitter();
|
|
534
604
|
|
|
@@ -553,7 +623,8 @@ const WebexCore = AmpState.extend({
|
|
|
553
623
|
|
|
554
624
|
return this.request(options.phases.initialize)
|
|
555
625
|
.then((...args) => {
|
|
556
|
-
const fileUploadSizeLimitInBytes =
|
|
626
|
+
const fileUploadSizeLimitInBytes =
|
|
627
|
+
(args[0].body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB) * 1024 * 1024;
|
|
557
628
|
const currentFileSizeInBytes = options.file.byteLength;
|
|
558
629
|
|
|
559
630
|
if (fileUploadSizeLimitInBytes && fileUploadSizeLimitInBytes < currentFileSizeInBytes) {
|
|
@@ -575,14 +646,14 @@ const WebexCore = AmpState.extend({
|
|
|
575
646
|
return this.request({
|
|
576
647
|
method: 'DELETE',
|
|
577
648
|
url: response.body.url,
|
|
578
|
-
headers: response.options.headers
|
|
649
|
+
headers: response.options.headers,
|
|
579
650
|
}).then(() => {
|
|
580
651
|
this.logger.debug('client: deleting uploaded file complete');
|
|
581
652
|
|
|
582
653
|
const abortErrorDetails = {
|
|
583
654
|
currentFileSizeInBytes,
|
|
584
655
|
fileUploadSizeLimitInMB: response.body.fileUploadSizeLimit || MAX_FILE_SIZE_IN_MB,
|
|
585
|
-
message: 'file-upload-size-limit-enabled'
|
|
656
|
+
message: 'file-upload-size-limit-enabled',
|
|
586
657
|
};
|
|
587
658
|
|
|
588
659
|
return Promise.reject(new Error(`${JSON.stringify(abortErrorDetails)}`));
|
|
@@ -610,12 +681,11 @@ const WebexCore = AmpState.extend({
|
|
|
610
681
|
_uploadPhaseUpload(options) {
|
|
611
682
|
this.logger.debug('client: uploading file');
|
|
612
683
|
|
|
613
|
-
const promise = this.request(options.phases.upload)
|
|
614
|
-
.
|
|
615
|
-
this.logger.debug('client: uploaded file');
|
|
684
|
+
const promise = this.request(options.phases.upload).then((res) => {
|
|
685
|
+
this.logger.debug('client: uploaded file');
|
|
616
686
|
|
|
617
|
-
|
|
618
|
-
|
|
687
|
+
return res;
|
|
688
|
+
});
|
|
619
689
|
|
|
620
690
|
proxyEvents(options.phases.upload.upload, promise);
|
|
621
691
|
|
|
@@ -632,13 +702,12 @@ const WebexCore = AmpState.extend({
|
|
|
632
702
|
_uploadPhaseFinalize: function _uploadPhaseFinalize(options) {
|
|
633
703
|
this.logger.debug('client: finalizing upload session');
|
|
634
704
|
|
|
635
|
-
return this.request(options.phases.finalize)
|
|
636
|
-
.
|
|
637
|
-
this.logger.debug('client: finalized upload session');
|
|
705
|
+
return this.request(options.phases.finalize).then((res) => {
|
|
706
|
+
this.logger.debug('client: finalized upload session');
|
|
638
707
|
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
}
|
|
708
|
+
return res;
|
|
709
|
+
});
|
|
710
|
+
},
|
|
642
711
|
});
|
|
643
712
|
|
|
644
713
|
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;
|