@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,46 +1,46 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import util from 'util';
|
|
6
|
-
|
|
7
|
-
import AmpState from 'ampersand-state';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* WebexInternalCore is an extra layer of nesting to make it blatantly clear that
|
|
11
|
-
* private plugins are, in fact, private.
|
|
12
|
-
* @class
|
|
13
|
-
*/
|
|
14
|
-
const WebexInternalCore = AmpState.extend({
|
|
15
|
-
derived: {
|
|
16
|
-
ready: {
|
|
17
|
-
deps: [],
|
|
18
|
-
fn() {
|
|
19
|
-
return Object.keys(this._children).reduce(
|
|
20
|
-
(ready, name) => ready && this[name] && this[name].ready !== false,
|
|
21
|
-
true
|
|
22
|
-
);
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @instance
|
|
29
|
-
* @memberof WebexPlugin
|
|
30
|
-
* @param {number} depth
|
|
31
|
-
* @private
|
|
32
|
-
* @returns {Object}
|
|
33
|
-
*/
|
|
34
|
-
inspect(depth) {
|
|
35
|
-
return util.inspect(
|
|
36
|
-
this.serialize({
|
|
37
|
-
props: true,
|
|
38
|
-
session: true,
|
|
39
|
-
derived: true,
|
|
40
|
-
}),
|
|
41
|
-
{depth}
|
|
42
|
-
);
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
export default WebexInternalCore;
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import util from 'util';
|
|
6
|
+
|
|
7
|
+
import AmpState from 'ampersand-state';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* WebexInternalCore is an extra layer of nesting to make it blatantly clear that
|
|
11
|
+
* private plugins are, in fact, private.
|
|
12
|
+
* @class
|
|
13
|
+
*/
|
|
14
|
+
const WebexInternalCore = AmpState.extend({
|
|
15
|
+
derived: {
|
|
16
|
+
ready: {
|
|
17
|
+
deps: [],
|
|
18
|
+
fn() {
|
|
19
|
+
return Object.keys(this._children).reduce(
|
|
20
|
+
(ready, name) => ready && this[name] && this[name].ready !== false,
|
|
21
|
+
true
|
|
22
|
+
);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @instance
|
|
29
|
+
* @memberof WebexPlugin
|
|
30
|
+
* @param {number} depth
|
|
31
|
+
* @private
|
|
32
|
+
* @returns {Object}
|
|
33
|
+
*/
|
|
34
|
+
inspect(depth) {
|
|
35
|
+
return util.inspect(
|
|
36
|
+
this.serialize({
|
|
37
|
+
props: true,
|
|
38
|
+
session: true,
|
|
39
|
+
derived: true,
|
|
40
|
+
}),
|
|
41
|
+
{depth}
|
|
42
|
+
);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export default WebexInternalCore;
|
|
@@ -1,139 +1,139 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {browserOnly, nodeOnly} from '@webex/test-helper-mocha';
|
|
6
|
-
import {assert} from '@webex/test-helper-chai';
|
|
7
|
-
import testUsers from '@webex/test-helper-test-users';
|
|
8
|
-
import WebexCore from '@webex/webex-core';
|
|
9
|
-
import refreshCallback from '@webex/test-helper-refresh-callback';
|
|
10
|
-
|
|
11
|
-
/* eslint camelcase: [0] */
|
|
12
|
-
|
|
13
|
-
describe('webex-core', () => {
|
|
14
|
-
describe('Credentials', () => {
|
|
15
|
-
let user;
|
|
16
|
-
|
|
17
|
-
before(() =>
|
|
18
|
-
testUsers.create({count: 1}).then(([u]) => {
|
|
19
|
-
user = u;
|
|
20
|
-
})
|
|
21
|
-
);
|
|
22
|
-
|
|
23
|
-
describe('#config', () => {
|
|
24
|
-
let webex;
|
|
25
|
-
|
|
26
|
-
it('should accept an authorizationString to set authorizeUrl', () => {
|
|
27
|
-
const authorizeUrl = 'https://api.example.com/v1/auth';
|
|
28
|
-
|
|
29
|
-
webex = new WebexCore({
|
|
30
|
-
config: {
|
|
31
|
-
credentials: {
|
|
32
|
-
authorizationString: `${authorizeUrl}?example=value`,
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
assert.equal(webex.config.credentials.authorizeUrl, authorizeUrl);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
describe('#determineOrgId()', () => {
|
|
42
|
-
let credentials;
|
|
43
|
-
let webex;
|
|
44
|
-
|
|
45
|
-
beforeEach('generate the webex instance', () => {
|
|
46
|
-
webex = new WebexCore({
|
|
47
|
-
credentials: user.token,
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
credentials = webex.credentials;
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
it('should return the OrgId of a client authenticated user', () => {
|
|
54
|
-
const orgId = credentials.getOrgId();
|
|
55
|
-
|
|
56
|
-
assert.equal(orgId, user.orgId);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
describe('#extractOrgIdFromJWT()', () => {
|
|
61
|
-
let credentials;
|
|
62
|
-
let webex;
|
|
63
|
-
|
|
64
|
-
beforeEach('generate a JWT and Webex Instance', () => {
|
|
65
|
-
webex = new WebexCore({
|
|
66
|
-
credentials: user.token,
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
credentials = webex.credentials;
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should return the OrgId of the provided JWT', () => {
|
|
73
|
-
// The access token in a client-auth scenario is a JWT.
|
|
74
|
-
const token = user.token.access_token;
|
|
75
|
-
|
|
76
|
-
assert.equal(credentials.extractOrgIdFromJWT(token), user.orgId);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
describe('#extractOrgIdFromUserToken()', () => {
|
|
81
|
-
let credentials;
|
|
82
|
-
let webex;
|
|
83
|
-
|
|
84
|
-
beforeEach('define webex', () => {
|
|
85
|
-
webex = new WebexCore({
|
|
86
|
-
credentials: user.token,
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
credentials = webex.credentials;
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('should return the OrgId when the provided token is valid', () => {
|
|
93
|
-
// The refresh token is formatted like a normal user token.
|
|
94
|
-
const token = user.token.refresh_token;
|
|
95
|
-
|
|
96
|
-
assert.equal(credentials.extractOrgIdFromUserToken(token), user.orgId);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
describe('#refresh()', () => {
|
|
101
|
-
nodeOnly(it)('refreshes an access token', () => {
|
|
102
|
-
const webex = new WebexCore({
|
|
103
|
-
credentials: user.token,
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
return webex.credentials.refresh().then(() => {
|
|
107
|
-
assert.isDefined(user.token.access_token);
|
|
108
|
-
assert.isDefined(webex.credentials.supertoken.access_token);
|
|
109
|
-
assert.notEqual(webex.credentials.supertoken.access_token, user.token.access_token);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
browserOnly(it)('throws without a refresh callback', () => {
|
|
114
|
-
const webex = new WebexCore({
|
|
115
|
-
credentials: user.token,
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
return assert.isRejected(webex.credentials.refresh());
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
browserOnly(it)('refreshes with a refresh callback', () => {
|
|
122
|
-
const webex = new WebexCore({
|
|
123
|
-
credentials: user.token,
|
|
124
|
-
config: {
|
|
125
|
-
credentials: {
|
|
126
|
-
refreshCallback,
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
return webex.credentials.refresh().then(() => {
|
|
132
|
-
assert.isDefined(user.token.access_token);
|
|
133
|
-
assert.isDefined(webex.credentials.supertoken.access_token);
|
|
134
|
-
assert.notEqual(webex.credentials.supertoken.access_token, user.token.access_token);
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
});
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {browserOnly, nodeOnly} from '@webex/test-helper-mocha';
|
|
6
|
+
import {assert} from '@webex/test-helper-chai';
|
|
7
|
+
import testUsers from '@webex/test-helper-test-users';
|
|
8
|
+
import WebexCore from '@webex/webex-core';
|
|
9
|
+
import refreshCallback from '@webex/test-helper-refresh-callback';
|
|
10
|
+
|
|
11
|
+
/* eslint camelcase: [0] */
|
|
12
|
+
|
|
13
|
+
describe('webex-core', () => {
|
|
14
|
+
describe('Credentials', () => {
|
|
15
|
+
let user;
|
|
16
|
+
|
|
17
|
+
before(() =>
|
|
18
|
+
testUsers.create({count: 1}).then(([u]) => {
|
|
19
|
+
user = u;
|
|
20
|
+
})
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
describe('#config', () => {
|
|
24
|
+
let webex;
|
|
25
|
+
|
|
26
|
+
it('should accept an authorizationString to set authorizeUrl', () => {
|
|
27
|
+
const authorizeUrl = 'https://api.example.com/v1/auth';
|
|
28
|
+
|
|
29
|
+
webex = new WebexCore({
|
|
30
|
+
config: {
|
|
31
|
+
credentials: {
|
|
32
|
+
authorizationString: `${authorizeUrl}?example=value`,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
assert.equal(webex.config.credentials.authorizeUrl, authorizeUrl);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('#determineOrgId()', () => {
|
|
42
|
+
let credentials;
|
|
43
|
+
let webex;
|
|
44
|
+
|
|
45
|
+
beforeEach('generate the webex instance', () => {
|
|
46
|
+
webex = new WebexCore({
|
|
47
|
+
credentials: user.token,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
credentials = webex.credentials;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('should return the OrgId of a client authenticated user', () => {
|
|
54
|
+
const orgId = credentials.getOrgId();
|
|
55
|
+
|
|
56
|
+
assert.equal(orgId, user.orgId);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
describe('#extractOrgIdFromJWT()', () => {
|
|
61
|
+
let credentials;
|
|
62
|
+
let webex;
|
|
63
|
+
|
|
64
|
+
beforeEach('generate a JWT and Webex Instance', () => {
|
|
65
|
+
webex = new WebexCore({
|
|
66
|
+
credentials: user.token,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
credentials = webex.credentials;
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should return the OrgId of the provided JWT', () => {
|
|
73
|
+
// The access token in a client-auth scenario is a JWT.
|
|
74
|
+
const token = user.token.access_token;
|
|
75
|
+
|
|
76
|
+
assert.equal(credentials.extractOrgIdFromJWT(token), user.orgId);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
describe('#extractOrgIdFromUserToken()', () => {
|
|
81
|
+
let credentials;
|
|
82
|
+
let webex;
|
|
83
|
+
|
|
84
|
+
beforeEach('define webex', () => {
|
|
85
|
+
webex = new WebexCore({
|
|
86
|
+
credentials: user.token,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
credentials = webex.credentials;
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('should return the OrgId when the provided token is valid', () => {
|
|
93
|
+
// The refresh token is formatted like a normal user token.
|
|
94
|
+
const token = user.token.refresh_token;
|
|
95
|
+
|
|
96
|
+
assert.equal(credentials.extractOrgIdFromUserToken(token), user.orgId);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
describe('#refresh()', () => {
|
|
101
|
+
nodeOnly(it)('refreshes an access token', () => {
|
|
102
|
+
const webex = new WebexCore({
|
|
103
|
+
credentials: user.token,
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
return webex.credentials.refresh().then(() => {
|
|
107
|
+
assert.isDefined(user.token.access_token);
|
|
108
|
+
assert.isDefined(webex.credentials.supertoken.access_token);
|
|
109
|
+
assert.notEqual(webex.credentials.supertoken.access_token, user.token.access_token);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
browserOnly(it)('throws without a refresh callback', () => {
|
|
114
|
+
const webex = new WebexCore({
|
|
115
|
+
credentials: user.token,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
return assert.isRejected(webex.credentials.refresh());
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
browserOnly(it)('refreshes with a refresh callback', () => {
|
|
122
|
+
const webex = new WebexCore({
|
|
123
|
+
credentials: user.token,
|
|
124
|
+
config: {
|
|
125
|
+
credentials: {
|
|
126
|
+
refreshCallback,
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
return webex.credentials.refresh().then(() => {
|
|
132
|
+
assert.isDefined(user.token.access_token);
|
|
133
|
+
assert.isDefined(webex.credentials.supertoken.access_token);
|
|
134
|
+
assert.notEqual(webex.credentials.supertoken.access_token, user.token.access_token);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
});
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {browserOnly, nodeOnly} from '@webex/test-helper-mocha';
|
|
6
|
-
import {assert} from '@webex/test-helper-chai';
|
|
7
|
-
import testUsers from '@webex/test-helper-test-users';
|
|
8
|
-
import WebexCore, {filterScope} from '@webex/webex-core';
|
|
9
|
-
import refreshCallback from '@webex/test-helper-refresh-callback';
|
|
10
|
-
|
|
11
|
-
/* eslint camelcase: [0] */
|
|
12
|
-
|
|
13
|
-
describe('webex-core', () => {
|
|
14
|
-
describe('Credentials', () => {
|
|
15
|
-
describe('Token', () => {
|
|
16
|
-
let webex, user;
|
|
17
|
-
|
|
18
|
-
before(() =>
|
|
19
|
-
testUsers.create({count: 1}).then(([u]) => {
|
|
20
|
-
user = u;
|
|
21
|
-
})
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
describe('#downscope()', () => {
|
|
25
|
-
it('retrieves an access token with a subset of scopes', () => {
|
|
26
|
-
webex = new WebexCore({credentials: user.token});
|
|
27
|
-
const allScope = webex.credentials.config.scope;
|
|
28
|
-
const apiScope = filterScope('spark:kms', allScope);
|
|
29
|
-
|
|
30
|
-
return webex.credentials.supertoken
|
|
31
|
-
.downscope('spark:kms')
|
|
32
|
-
.then((downscopedToken) => downscopedToken.validate())
|
|
33
|
-
.then((details) => assert.deepEqual(details.scope, ['spark:kms']))
|
|
34
|
-
.then(() => webex.credentials.supertoken.downscope(apiScope))
|
|
35
|
-
.then((downscopedToken) => downscopedToken.validate())
|
|
36
|
-
.then((details) => assert.sameMembers(details.scope, apiScope.split(' ')))
|
|
37
|
-
.then(() =>
|
|
38
|
-
assert.isRejected(
|
|
39
|
-
webex.credentials.supertoken.downscope(allScope),
|
|
40
|
-
/token: scope reduction requires a reduced scope/
|
|
41
|
-
)
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
describe('#refresh()', () => {
|
|
47
|
-
nodeOnly(it)('refreshes the token, returning a new Token instance', () => {
|
|
48
|
-
webex = new WebexCore({credentials: user.token});
|
|
49
|
-
|
|
50
|
-
return webex.credentials.supertoken.refresh().then((token2) => {
|
|
51
|
-
assert.notEqual(token2.access_token, webex.credentials.supertoken.access_token);
|
|
52
|
-
assert.equal(token2.refresh_token, webex.credentials.supertoken.refresh_token);
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
browserOnly(it)('refreshes the token, returning a new Token instance', () => {
|
|
57
|
-
webex = new WebexCore({
|
|
58
|
-
credentials: user.token,
|
|
59
|
-
config: {
|
|
60
|
-
credentials: {
|
|
61
|
-
refreshCallback,
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
return webex.credentials.supertoken.refresh().then((token2) => {
|
|
67
|
-
assert.notEqual(token2.access_token, webex.credentials.supertoken.access_token);
|
|
68
|
-
assert.equal(token2.refresh_token, webex.credentials.supertoken.refresh_token);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
describe('#validate()', () => {
|
|
74
|
-
it("shows the token's scopes", () => {
|
|
75
|
-
webex = new WebexCore({credentials: user.token});
|
|
76
|
-
|
|
77
|
-
return webex.credentials.supertoken.validate().then((details) => {
|
|
78
|
-
const detailScope = details.scope.sort();
|
|
79
|
-
const localScope = webex.credentials.config.scope.split(' ').sort();
|
|
80
|
-
|
|
81
|
-
assert.sameMembers(detailScope, localScope);
|
|
82
|
-
assert.lengthOf(detailScope, localScope.length);
|
|
83
|
-
assert.equal(details.clientId, webex.credentials.config.client_id);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
// These tests have a bit of shared state, so revoke() needs to go last
|
|
89
|
-
describe('#revoke()', () => {
|
|
90
|
-
it('revokes the token', () => {
|
|
91
|
-
webex = new WebexCore({credentials: user.token});
|
|
92
|
-
|
|
93
|
-
return webex.credentials.supertoken.revoke().then(() => {
|
|
94
|
-
assert.isUndefined(webex.credentials.supertoken.access_token);
|
|
95
|
-
assert.isDefined(webex.credentials.supertoken.refresh_token);
|
|
96
|
-
assert.isUndefined(webex.credentials.supertoken.expires_in);
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
});
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {browserOnly, nodeOnly} from '@webex/test-helper-mocha';
|
|
6
|
+
import {assert} from '@webex/test-helper-chai';
|
|
7
|
+
import testUsers from '@webex/test-helper-test-users';
|
|
8
|
+
import WebexCore, {filterScope} from '@webex/webex-core';
|
|
9
|
+
import refreshCallback from '@webex/test-helper-refresh-callback';
|
|
10
|
+
|
|
11
|
+
/* eslint camelcase: [0] */
|
|
12
|
+
|
|
13
|
+
describe('webex-core', () => {
|
|
14
|
+
describe('Credentials', () => {
|
|
15
|
+
describe('Token', () => {
|
|
16
|
+
let webex, user;
|
|
17
|
+
|
|
18
|
+
before(() =>
|
|
19
|
+
testUsers.create({count: 1}).then(([u]) => {
|
|
20
|
+
user = u;
|
|
21
|
+
})
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
describe('#downscope()', () => {
|
|
25
|
+
it('retrieves an access token with a subset of scopes', () => {
|
|
26
|
+
webex = new WebexCore({credentials: user.token});
|
|
27
|
+
const allScope = webex.credentials.config.scope;
|
|
28
|
+
const apiScope = filterScope('spark:kms', allScope);
|
|
29
|
+
|
|
30
|
+
return webex.credentials.supertoken
|
|
31
|
+
.downscope('spark:kms')
|
|
32
|
+
.then((downscopedToken) => downscopedToken.validate())
|
|
33
|
+
.then((details) => assert.deepEqual(details.scope, ['spark:kms']))
|
|
34
|
+
.then(() => webex.credentials.supertoken.downscope(apiScope))
|
|
35
|
+
.then((downscopedToken) => downscopedToken.validate())
|
|
36
|
+
.then((details) => assert.sameMembers(details.scope, apiScope.split(' ')))
|
|
37
|
+
.then(() =>
|
|
38
|
+
assert.isRejected(
|
|
39
|
+
webex.credentials.supertoken.downscope(allScope),
|
|
40
|
+
/token: scope reduction requires a reduced scope/
|
|
41
|
+
)
|
|
42
|
+
);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe('#refresh()', () => {
|
|
47
|
+
nodeOnly(it)('refreshes the token, returning a new Token instance', () => {
|
|
48
|
+
webex = new WebexCore({credentials: user.token});
|
|
49
|
+
|
|
50
|
+
return webex.credentials.supertoken.refresh().then((token2) => {
|
|
51
|
+
assert.notEqual(token2.access_token, webex.credentials.supertoken.access_token);
|
|
52
|
+
assert.equal(token2.refresh_token, webex.credentials.supertoken.refresh_token);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
browserOnly(it)('refreshes the token, returning a new Token instance', () => {
|
|
57
|
+
webex = new WebexCore({
|
|
58
|
+
credentials: user.token,
|
|
59
|
+
config: {
|
|
60
|
+
credentials: {
|
|
61
|
+
refreshCallback,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
return webex.credentials.supertoken.refresh().then((token2) => {
|
|
67
|
+
assert.notEqual(token2.access_token, webex.credentials.supertoken.access_token);
|
|
68
|
+
assert.equal(token2.refresh_token, webex.credentials.supertoken.refresh_token);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
describe('#validate()', () => {
|
|
74
|
+
it("shows the token's scopes", () => {
|
|
75
|
+
webex = new WebexCore({credentials: user.token});
|
|
76
|
+
|
|
77
|
+
return webex.credentials.supertoken.validate().then((details) => {
|
|
78
|
+
const detailScope = details.scope.sort();
|
|
79
|
+
const localScope = webex.credentials.config.scope.split(' ').sort();
|
|
80
|
+
|
|
81
|
+
assert.sameMembers(detailScope, localScope);
|
|
82
|
+
assert.lengthOf(detailScope, localScope.length);
|
|
83
|
+
assert.equal(details.clientId, webex.credentials.config.client_id);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
// These tests have a bit of shared state, so revoke() needs to go last
|
|
89
|
+
describe('#revoke()', () => {
|
|
90
|
+
it('revokes the token', () => {
|
|
91
|
+
webex = new WebexCore({credentials: user.token});
|
|
92
|
+
|
|
93
|
+
return webex.credentials.supertoken.revoke().then(() => {
|
|
94
|
+
assert.isUndefined(webex.credentials.supertoken.access_token);
|
|
95
|
+
assert.isDefined(webex.credentials.supertoken.refresh_token);
|
|
96
|
+
assert.isUndefined(webex.credentials.supertoken.expires_in);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|