@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,253 +1,253 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {assert} from '@webex/test-helper-chai';
|
|
6
|
-
import sinon from 'sinon';
|
|
7
|
-
import WebexCore, {MemoryStoreAdapter, registerPlugin, WebexPlugin} from '@webex/webex-core';
|
|
8
|
-
import {set} from 'lodash';
|
|
9
|
-
import {version} from '@webex/webex-core/package';
|
|
10
|
-
|
|
11
|
-
describe('Webex', () => {
|
|
12
|
-
let webex;
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
webex = new WebexCore();
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
describe('#logger', () => {
|
|
19
|
-
it('exists', () => {
|
|
20
|
-
assert.property(webex, 'logger');
|
|
21
|
-
assert.doesNotThrow(() => {
|
|
22
|
-
webex.logger.log('test');
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
describe('.config.fedramp', () => {
|
|
28
|
-
it('exists', () => {
|
|
29
|
-
assert.property(webex.config, 'fedramp');
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
describe('.version', () => {
|
|
34
|
-
it.skip('exists', () => {
|
|
35
|
-
assert.property(WebexCore, 'version');
|
|
36
|
-
assert.equal(WebexCore.version, version);
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
describe('#version', () => {
|
|
41
|
-
it.skip('exists', () => {
|
|
42
|
-
assert.property(webex, 'version');
|
|
43
|
-
assert.equal(webex.version, version);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
describe('#credentials', () => {
|
|
48
|
-
describe('#version', () => {
|
|
49
|
-
it.skip('exists', () => {
|
|
50
|
-
assert.property(webex, 'credentials');
|
|
51
|
-
assert.property(webex.credentials, 'version');
|
|
52
|
-
assert.equal(webex.credentials.version, version);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
describe('#initialize()', () => {
|
|
58
|
-
it('initializes without arguments', () => {
|
|
59
|
-
let webex;
|
|
60
|
-
|
|
61
|
-
assert.doesNotThrow(() => {
|
|
62
|
-
webex = new WebexCore();
|
|
63
|
-
});
|
|
64
|
-
assert.isFalse(webex.canAuthorize);
|
|
65
|
-
assert.property(webex, 'credentials');
|
|
66
|
-
assert.property(webex, 'canAuthorize');
|
|
67
|
-
assert.property(webex.credentials, 'canAuthorize');
|
|
68
|
-
assert.isFalse(webex.credentials.canAuthorize);
|
|
69
|
-
assert.isFalse(webex.canAuthorize);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
[
|
|
73
|
-
'data',
|
|
74
|
-
'data.access_token',
|
|
75
|
-
'data.supertoken',
|
|
76
|
-
'data.supertoken.access_token',
|
|
77
|
-
'data.authorization',
|
|
78
|
-
'data.authorization.supertoken',
|
|
79
|
-
'data.authorization.supertoken.access_token',
|
|
80
|
-
'data.credentials',
|
|
81
|
-
'data.credentials.access_token',
|
|
82
|
-
'data.credentials.supertoken',
|
|
83
|
-
'data.credentials.supertoken.access_token',
|
|
84
|
-
'data.credentials.authorization',
|
|
85
|
-
'data.credentials.authorization.access_token',
|
|
86
|
-
'data.credentials.authorization.supertoken',
|
|
87
|
-
'data.credentials.authorization.supertoken.access_token',
|
|
88
|
-
]
|
|
89
|
-
.reduce(
|
|
90
|
-
(acc, path) =>
|
|
91
|
-
acc.concat(
|
|
92
|
-
['ST', 'Bearer ST'].map((str) => {
|
|
93
|
-
const obj = {
|
|
94
|
-
msg: `accepts token string "${str}" at path "${path
|
|
95
|
-
.split('.')
|
|
96
|
-
.slice(1)
|
|
97
|
-
.join('.')}"`,
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
set(obj, path, str);
|
|
101
|
-
|
|
102
|
-
return obj;
|
|
103
|
-
})
|
|
104
|
-
),
|
|
105
|
-
[]
|
|
106
|
-
)
|
|
107
|
-
.forEach(({msg, data}) => {
|
|
108
|
-
it(msg, () => {
|
|
109
|
-
const webex = new WebexCore(data);
|
|
110
|
-
|
|
111
|
-
assert.isTrue(webex.credentials.canAuthorize);
|
|
112
|
-
assert.equal(webex.credentials.supertoken.access_token, 'ST');
|
|
113
|
-
assert.equal(webex.credentials.supertoken.token_type, 'Bearer');
|
|
114
|
-
assert.isTrue(webex.canAuthorize);
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
describe('initializes with Bearer Token', () => {
|
|
120
|
-
[
|
|
121
|
-
['initializes with a correctly formatted token', 'Bearer 1234'],
|
|
122
|
-
[
|
|
123
|
-
'initializes and removes extra space from a token that has an extra space after Bearer',
|
|
124
|
-
'Bearer 1234',
|
|
125
|
-
],
|
|
126
|
-
[
|
|
127
|
-
'initializes and adds a space after Bearer from a token that has no spaces after Bearer',
|
|
128
|
-
'Bearer1234',
|
|
129
|
-
],
|
|
130
|
-
[
|
|
131
|
-
'initializes and trims whitespace from a token that has spaces before Bearer and after token',
|
|
132
|
-
' Bearer 1234 ',
|
|
133
|
-
],
|
|
134
|
-
[
|
|
135
|
-
'initializes and removes extra space and trims whitespace from a token that has spaces before and after Bearer and after token',
|
|
136
|
-
' Bearer 1234 ',
|
|
137
|
-
],
|
|
138
|
-
[
|
|
139
|
-
'initializes and trims whitspace and adds a space after Bearer from a token that has spaces before Bearer and after token and no spaces after Bearer',
|
|
140
|
-
' Bearer1234 ',
|
|
141
|
-
],
|
|
142
|
-
].forEach(([msg, token]) => {
|
|
143
|
-
it(msg, () => {
|
|
144
|
-
const webex = new WebexCore({
|
|
145
|
-
credentials: {
|
|
146
|
-
access_token: token,
|
|
147
|
-
},
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
assert.isTrue(webex.credentials.canAuthorize);
|
|
151
|
-
assert.equal(webex.credentials.supertoken.access_token, '1234');
|
|
152
|
-
assert.equal(webex.credentials.supertoken.token_type, 'Bearer');
|
|
153
|
-
assert.isTrue(webex.canAuthorize);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
describe('#setConfig()', () => {
|
|
159
|
-
it('updates the config', () => {
|
|
160
|
-
const config = {credentials: {prop: true}};
|
|
161
|
-
|
|
162
|
-
const webex = new WebexCore();
|
|
163
|
-
|
|
164
|
-
assert.isUndefined(webex.config.credentials.prop);
|
|
165
|
-
|
|
166
|
-
webex.setConfig(config);
|
|
167
|
-
|
|
168
|
-
assert.isTrue(webex.config.credentials.prop);
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
it('emits the `loaded` event when the storage layer has loaded all data', () => {
|
|
173
|
-
// I'd love to do this with mock webex, or at least, a mock plugin, but I
|
|
174
|
-
// couldn't get it to work. We do get better coverage this way, but it means
|
|
175
|
-
// that the storage tests are dependent on the credentials implementation.
|
|
176
|
-
const webex = new WebexCore({
|
|
177
|
-
config: {
|
|
178
|
-
storage: {
|
|
179
|
-
boundedAdapter: MemoryStoreAdapter.preload({
|
|
180
|
-
Credentials: {
|
|
181
|
-
'@': {
|
|
182
|
-
supertoken: {
|
|
183
|
-
// eslint-disable-next-line camelcase
|
|
184
|
-
access_token: 'AT',
|
|
185
|
-
},
|
|
186
|
-
},
|
|
187
|
-
},
|
|
188
|
-
}),
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
assert.isFalse(webex.loaded);
|
|
194
|
-
assert.isFalse(webex.canAuthorize);
|
|
195
|
-
|
|
196
|
-
return new Promise((resolve) => {
|
|
197
|
-
webex.once('loaded', resolve);
|
|
198
|
-
}).then(() => {
|
|
199
|
-
assert.isTrue(webex.loaded);
|
|
200
|
-
assert.equal(webex.credentials.supertoken.access_token, 'AT');
|
|
201
|
-
assert.isTrue(webex.canAuthorize);
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
|
|
205
|
-
it('emits the ready event when the storage layer has loaded and all plugins signal ready', () => {
|
|
206
|
-
const webex = new WebexCore();
|
|
207
|
-
|
|
208
|
-
assert.isFalse(webex.ready);
|
|
209
|
-
|
|
210
|
-
return new Promise((resolve) => {
|
|
211
|
-
webex.once('ready', resolve);
|
|
212
|
-
}).then(() => assert.isTrue(webex.ready));
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
it('allows plugins to control ready status', () => {
|
|
216
|
-
registerPlugin(
|
|
217
|
-
'test',
|
|
218
|
-
WebexPlugin.extend({
|
|
219
|
-
namespace: 'test',
|
|
220
|
-
session: {
|
|
221
|
-
ready: {
|
|
222
|
-
default: false,
|
|
223
|
-
type: 'boolean',
|
|
224
|
-
},
|
|
225
|
-
},
|
|
226
|
-
}),
|
|
227
|
-
{replace: true}
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
const webex = new WebexCore();
|
|
231
|
-
|
|
232
|
-
const changeSpy = sinon.spy();
|
|
233
|
-
|
|
234
|
-
webex.on('change:ready', changeSpy);
|
|
235
|
-
|
|
236
|
-
const readySpy = sinon.spy();
|
|
237
|
-
|
|
238
|
-
webex.on('ready', readySpy);
|
|
239
|
-
|
|
240
|
-
assert.isFalse(webex.test.ready);
|
|
241
|
-
assert.isFalse(webex.ready);
|
|
242
|
-
|
|
243
|
-
return new Promise((resolve) => webex.once('loaded', resolve)).then(() => {
|
|
244
|
-
assert.isFalse(webex.ready);
|
|
245
|
-
assert.isFalse(webex.test.ready);
|
|
246
|
-
webex.test.ready = true;
|
|
247
|
-
assert.isTrue(webex.test.ready);
|
|
248
|
-
assert.isTrue(webex.ready);
|
|
249
|
-
assert.called(changeSpy);
|
|
250
|
-
assert.called(readySpy);
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
});
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {assert} from '@webex/test-helper-chai';
|
|
6
|
+
import sinon from 'sinon';
|
|
7
|
+
import WebexCore, {MemoryStoreAdapter, registerPlugin, WebexPlugin} from '@webex/webex-core';
|
|
8
|
+
import {set} from 'lodash';
|
|
9
|
+
import {version} from '@webex/webex-core/package';
|
|
10
|
+
|
|
11
|
+
describe('Webex', () => {
|
|
12
|
+
let webex;
|
|
13
|
+
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
webex = new WebexCore();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
describe('#logger', () => {
|
|
19
|
+
it('exists', () => {
|
|
20
|
+
assert.property(webex, 'logger');
|
|
21
|
+
assert.doesNotThrow(() => {
|
|
22
|
+
webex.logger.log('test');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe('.config.fedramp', () => {
|
|
28
|
+
it('exists', () => {
|
|
29
|
+
assert.property(webex.config, 'fedramp');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe('.version', () => {
|
|
34
|
+
it.skip('exists', () => {
|
|
35
|
+
assert.property(WebexCore, 'version');
|
|
36
|
+
assert.equal(WebexCore.version, version);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe('#version', () => {
|
|
41
|
+
it.skip('exists', () => {
|
|
42
|
+
assert.property(webex, 'version');
|
|
43
|
+
assert.equal(webex.version, version);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe('#credentials', () => {
|
|
48
|
+
describe('#version', () => {
|
|
49
|
+
it.skip('exists', () => {
|
|
50
|
+
assert.property(webex, 'credentials');
|
|
51
|
+
assert.property(webex.credentials, 'version');
|
|
52
|
+
assert.equal(webex.credentials.version, version);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe('#initialize()', () => {
|
|
58
|
+
it('initializes without arguments', () => {
|
|
59
|
+
let webex;
|
|
60
|
+
|
|
61
|
+
assert.doesNotThrow(() => {
|
|
62
|
+
webex = new WebexCore();
|
|
63
|
+
});
|
|
64
|
+
assert.isFalse(webex.canAuthorize);
|
|
65
|
+
assert.property(webex, 'credentials');
|
|
66
|
+
assert.property(webex, 'canAuthorize');
|
|
67
|
+
assert.property(webex.credentials, 'canAuthorize');
|
|
68
|
+
assert.isFalse(webex.credentials.canAuthorize);
|
|
69
|
+
assert.isFalse(webex.canAuthorize);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
[
|
|
73
|
+
'data',
|
|
74
|
+
'data.access_token',
|
|
75
|
+
'data.supertoken',
|
|
76
|
+
'data.supertoken.access_token',
|
|
77
|
+
'data.authorization',
|
|
78
|
+
'data.authorization.supertoken',
|
|
79
|
+
'data.authorization.supertoken.access_token',
|
|
80
|
+
'data.credentials',
|
|
81
|
+
'data.credentials.access_token',
|
|
82
|
+
'data.credentials.supertoken',
|
|
83
|
+
'data.credentials.supertoken.access_token',
|
|
84
|
+
'data.credentials.authorization',
|
|
85
|
+
'data.credentials.authorization.access_token',
|
|
86
|
+
'data.credentials.authorization.supertoken',
|
|
87
|
+
'data.credentials.authorization.supertoken.access_token',
|
|
88
|
+
]
|
|
89
|
+
.reduce(
|
|
90
|
+
(acc, path) =>
|
|
91
|
+
acc.concat(
|
|
92
|
+
['ST', 'Bearer ST'].map((str) => {
|
|
93
|
+
const obj = {
|
|
94
|
+
msg: `accepts token string "${str}" at path "${path
|
|
95
|
+
.split('.')
|
|
96
|
+
.slice(1)
|
|
97
|
+
.join('.')}"`,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
set(obj, path, str);
|
|
101
|
+
|
|
102
|
+
return obj;
|
|
103
|
+
})
|
|
104
|
+
),
|
|
105
|
+
[]
|
|
106
|
+
)
|
|
107
|
+
.forEach(({msg, data}) => {
|
|
108
|
+
it(msg, () => {
|
|
109
|
+
const webex = new WebexCore(data);
|
|
110
|
+
|
|
111
|
+
assert.isTrue(webex.credentials.canAuthorize);
|
|
112
|
+
assert.equal(webex.credentials.supertoken.access_token, 'ST');
|
|
113
|
+
assert.equal(webex.credentials.supertoken.token_type, 'Bearer');
|
|
114
|
+
assert.isTrue(webex.canAuthorize);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
describe('initializes with Bearer Token', () => {
|
|
120
|
+
[
|
|
121
|
+
['initializes with a correctly formatted token', 'Bearer 1234'],
|
|
122
|
+
[
|
|
123
|
+
'initializes and removes extra space from a token that has an extra space after Bearer',
|
|
124
|
+
'Bearer 1234',
|
|
125
|
+
],
|
|
126
|
+
[
|
|
127
|
+
'initializes and adds a space after Bearer from a token that has no spaces after Bearer',
|
|
128
|
+
'Bearer1234',
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
'initializes and trims whitespace from a token that has spaces before Bearer and after token',
|
|
132
|
+
' Bearer 1234 ',
|
|
133
|
+
],
|
|
134
|
+
[
|
|
135
|
+
'initializes and removes extra space and trims whitespace from a token that has spaces before and after Bearer and after token',
|
|
136
|
+
' Bearer 1234 ',
|
|
137
|
+
],
|
|
138
|
+
[
|
|
139
|
+
'initializes and trims whitspace and adds a space after Bearer from a token that has spaces before Bearer and after token and no spaces after Bearer',
|
|
140
|
+
' Bearer1234 ',
|
|
141
|
+
],
|
|
142
|
+
].forEach(([msg, token]) => {
|
|
143
|
+
it(msg, () => {
|
|
144
|
+
const webex = new WebexCore({
|
|
145
|
+
credentials: {
|
|
146
|
+
access_token: token,
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
assert.isTrue(webex.credentials.canAuthorize);
|
|
151
|
+
assert.equal(webex.credentials.supertoken.access_token, '1234');
|
|
152
|
+
assert.equal(webex.credentials.supertoken.token_type, 'Bearer');
|
|
153
|
+
assert.isTrue(webex.canAuthorize);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
describe('#setConfig()', () => {
|
|
159
|
+
it('updates the config', () => {
|
|
160
|
+
const config = {credentials: {prop: true}};
|
|
161
|
+
|
|
162
|
+
const webex = new WebexCore();
|
|
163
|
+
|
|
164
|
+
assert.isUndefined(webex.config.credentials.prop);
|
|
165
|
+
|
|
166
|
+
webex.setConfig(config);
|
|
167
|
+
|
|
168
|
+
assert.isTrue(webex.config.credentials.prop);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('emits the `loaded` event when the storage layer has loaded all data', () => {
|
|
173
|
+
// I'd love to do this with mock webex, or at least, a mock plugin, but I
|
|
174
|
+
// couldn't get it to work. We do get better coverage this way, but it means
|
|
175
|
+
// that the storage tests are dependent on the credentials implementation.
|
|
176
|
+
const webex = new WebexCore({
|
|
177
|
+
config: {
|
|
178
|
+
storage: {
|
|
179
|
+
boundedAdapter: MemoryStoreAdapter.preload({
|
|
180
|
+
Credentials: {
|
|
181
|
+
'@': {
|
|
182
|
+
supertoken: {
|
|
183
|
+
// eslint-disable-next-line camelcase
|
|
184
|
+
access_token: 'AT',
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
}),
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
assert.isFalse(webex.loaded);
|
|
194
|
+
assert.isFalse(webex.canAuthorize);
|
|
195
|
+
|
|
196
|
+
return new Promise((resolve) => {
|
|
197
|
+
webex.once('loaded', resolve);
|
|
198
|
+
}).then(() => {
|
|
199
|
+
assert.isTrue(webex.loaded);
|
|
200
|
+
assert.equal(webex.credentials.supertoken.access_token, 'AT');
|
|
201
|
+
assert.isTrue(webex.canAuthorize);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it('emits the ready event when the storage layer has loaded and all plugins signal ready', () => {
|
|
206
|
+
const webex = new WebexCore();
|
|
207
|
+
|
|
208
|
+
assert.isFalse(webex.ready);
|
|
209
|
+
|
|
210
|
+
return new Promise((resolve) => {
|
|
211
|
+
webex.once('ready', resolve);
|
|
212
|
+
}).then(() => assert.isTrue(webex.ready));
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it('allows plugins to control ready status', () => {
|
|
216
|
+
registerPlugin(
|
|
217
|
+
'test',
|
|
218
|
+
WebexPlugin.extend({
|
|
219
|
+
namespace: 'test',
|
|
220
|
+
session: {
|
|
221
|
+
ready: {
|
|
222
|
+
default: false,
|
|
223
|
+
type: 'boolean',
|
|
224
|
+
},
|
|
225
|
+
},
|
|
226
|
+
}),
|
|
227
|
+
{replace: true}
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
const webex = new WebexCore();
|
|
231
|
+
|
|
232
|
+
const changeSpy = sinon.spy();
|
|
233
|
+
|
|
234
|
+
webex.on('change:ready', changeSpy);
|
|
235
|
+
|
|
236
|
+
const readySpy = sinon.spy();
|
|
237
|
+
|
|
238
|
+
webex.on('ready', readySpy);
|
|
239
|
+
|
|
240
|
+
assert.isFalse(webex.test.ready);
|
|
241
|
+
assert.isFalse(webex.ready);
|
|
242
|
+
|
|
243
|
+
return new Promise((resolve) => webex.once('loaded', resolve)).then(() => {
|
|
244
|
+
assert.isFalse(webex.ready);
|
|
245
|
+
assert.isFalse(webex.test.ready);
|
|
246
|
+
webex.test.ready = true;
|
|
247
|
+
assert.isTrue(webex.test.ready);
|
|
248
|
+
assert.isTrue(webex.ready);
|
|
249
|
+
assert.called(changeSpy);
|
|
250
|
+
assert.called(readySpy);
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
});
|