@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.
Files changed (184) hide show
  1. package/dist/config.js +1 -11
  2. package/dist/config.js.map +1 -1
  3. package/dist/credentials-config.js +44 -64
  4. package/dist/credentials-config.js.map +1 -1
  5. package/dist/index.js +0 -76
  6. package/dist/index.js.map +1 -1
  7. package/dist/interceptors/auth.js +22 -55
  8. package/dist/interceptors/auth.js.map +1 -1
  9. package/dist/interceptors/default-options.js +0 -20
  10. package/dist/interceptors/default-options.js.map +1 -1
  11. package/dist/interceptors/embargo.js +0 -21
  12. package/dist/interceptors/embargo.js.map +1 -1
  13. package/dist/interceptors/network-timing.js +2 -21
  14. package/dist/interceptors/network-timing.js.map +1 -1
  15. package/dist/interceptors/payload-transformer.js +2 -22
  16. package/dist/interceptors/payload-transformer.js.map +1 -1
  17. package/dist/interceptors/rate-limit.js +25 -57
  18. package/dist/interceptors/rate-limit.js.map +1 -1
  19. package/dist/interceptors/redirect.js +4 -33
  20. package/dist/interceptors/redirect.js.map +1 -1
  21. package/dist/interceptors/request-event.js +3 -30
  22. package/dist/interceptors/request-event.js.map +1 -1
  23. package/dist/interceptors/request-logger.js +1 -30
  24. package/dist/interceptors/request-logger.js.map +1 -1
  25. package/dist/interceptors/request-timing.js +3 -22
  26. package/dist/interceptors/request-timing.js.map +1 -1
  27. package/dist/interceptors/response-logger.js +2 -31
  28. package/dist/interceptors/response-logger.js.map +1 -1
  29. package/dist/interceptors/user-agent.js +2 -29
  30. package/dist/interceptors/user-agent.js.map +1 -1
  31. package/dist/interceptors/webex-tracking-id.js +5 -28
  32. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  33. package/dist/interceptors/webex-user-agent.js +5 -38
  34. package/dist/interceptors/webex-user-agent.js.map +1 -1
  35. package/dist/lib/batcher.js +3 -51
  36. package/dist/lib/batcher.js.map +1 -1
  37. package/dist/lib/credentials/credentials.js +39 -119
  38. package/dist/lib/credentials/credentials.js.map +1 -1
  39. package/dist/lib/credentials/grant-errors.js +0 -49
  40. package/dist/lib/credentials/grant-errors.js.map +1 -1
  41. package/dist/lib/credentials/index.js +1 -13
  42. package/dist/lib/credentials/index.js.map +1 -1
  43. package/dist/lib/credentials/scope.js +1 -7
  44. package/dist/lib/credentials/scope.js.map +1 -1
  45. package/dist/lib/credentials/token-collection.js +1 -7
  46. package/dist/lib/credentials/token-collection.js.map +1 -1
  47. package/dist/lib/credentials/token.js +39 -118
  48. package/dist/lib/credentials/token.js.map +1 -1
  49. package/dist/lib/page.js +13 -26
  50. package/dist/lib/page.js.map +1 -1
  51. package/dist/lib/services/constants.js +0 -2
  52. package/dist/lib/services/constants.js.map +1 -1
  53. package/dist/lib/services/index.js +1 -28
  54. package/dist/lib/services/index.js.map +1 -1
  55. package/dist/lib/services/interceptors/server-error.js +2 -23
  56. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  57. package/dist/lib/services/interceptors/service.js +12 -34
  58. package/dist/lib/services/interceptors/service.js.map +1 -1
  59. package/dist/lib/services/metrics.js +0 -2
  60. package/dist/lib/services/metrics.js.map +1 -1
  61. package/dist/lib/services/service-catalog.js +10 -90
  62. package/dist/lib/services/service-catalog.js.map +1 -1
  63. package/dist/lib/services/service-fed-ramp.js +0 -2
  64. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  65. package/dist/lib/services/service-host.js +47 -62
  66. package/dist/lib/services/service-host.js.map +1 -1
  67. package/dist/lib/services/service-registry.js +78 -90
  68. package/dist/lib/services/service-registry.js.map +1 -1
  69. package/dist/lib/services/service-state.js +3 -15
  70. package/dist/lib/services/service-state.js.map +1 -1
  71. package/dist/lib/services/service-url.js +4 -25
  72. package/dist/lib/services/service-url.js.map +1 -1
  73. package/dist/lib/services/services.js +122 -238
  74. package/dist/lib/services/services.js.map +1 -1
  75. package/dist/lib/stateless-webex-plugin.js +5 -28
  76. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  77. package/dist/lib/storage/decorators.js +19 -62
  78. package/dist/lib/storage/decorators.js.map +1 -1
  79. package/dist/lib/storage/errors.js +0 -23
  80. package/dist/lib/storage/errors.js.map +1 -1
  81. package/dist/lib/storage/index.js +2 -16
  82. package/dist/lib/storage/index.js.map +1 -1
  83. package/dist/lib/storage/make-webex-plugin-store.js +11 -41
  84. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  85. package/dist/lib/storage/make-webex-store.js +8 -30
  86. package/dist/lib/storage/make-webex-store.js.map +1 -1
  87. package/dist/lib/storage/memory-store-adapter.js +1 -19
  88. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  89. package/dist/lib/webex-core-plugin-mixin.js +9 -29
  90. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  91. package/dist/lib/webex-http-error.js +1 -31
  92. package/dist/lib/webex-http-error.js.map +1 -1
  93. package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
  94. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  95. package/dist/lib/webex-plugin.js +6 -40
  96. package/dist/lib/webex-plugin.js.map +1 -1
  97. package/dist/plugins/logger.js +3 -17
  98. package/dist/plugins/logger.js.map +1 -1
  99. package/dist/webex-core.js +79 -203
  100. package/dist/webex-core.js.map +1 -1
  101. package/dist/webex-internal-core.js +0 -10
  102. package/dist/webex-internal-core.js.map +1 -1
  103. package/package.json +14 -14
  104. package/src/config.js +9 -11
  105. package/src/credentials-config.js +110 -72
  106. package/src/index.js +4 -14
  107. package/src/interceptors/auth.js +36 -37
  108. package/src/interceptors/default-options.js +0 -1
  109. package/src/interceptors/embargo.js +1 -1
  110. package/src/interceptors/payload-transformer.js +1 -2
  111. package/src/interceptors/rate-limit.js +8 -5
  112. package/src/interceptors/redirect.js +14 -8
  113. package/src/interceptors/request-event.js +4 -8
  114. package/src/interceptors/request-logger.js +8 -5
  115. package/src/interceptors/response-logger.js +11 -8
  116. package/src/interceptors/user-agent.js +1 -2
  117. package/src/interceptors/webex-user-agent.js +3 -9
  118. package/src/lib/batcher.js +70 -69
  119. package/src/lib/credentials/credentials.js +112 -122
  120. package/src/lib/credentials/grant-errors.js +6 -7
  121. package/src/lib/credentials/index.js +1 -4
  122. package/src/lib/credentials/scope.js +1 -4
  123. package/src/lib/credentials/token-collection.js +1 -1
  124. package/src/lib/credentials/token.js +86 -80
  125. package/src/lib/page.js +10 -11
  126. package/src/lib/services/constants.js +3 -13
  127. package/src/lib/services/index.js +2 -2
  128. package/src/lib/services/interceptors/server-error.js +12 -7
  129. package/src/lib/services/interceptors/service.js +6 -5
  130. package/src/lib/services/metrics.js +1 -1
  131. package/src/lib/services/service-catalog.js +110 -100
  132. package/src/lib/services/service-fed-ramp.js +1 -2
  133. package/src/lib/services/service-host.js +10 -17
  134. package/src/lib/services/service-registry.js +69 -96
  135. package/src/lib/services/service-state.js +4 -6
  136. package/src/lib/services/service-url.js +24 -23
  137. package/src/lib/services/services.js +260 -251
  138. package/src/lib/stateless-webex-plugin.js +4 -2
  139. package/src/lib/storage/decorators.js +68 -66
  140. package/src/lib/storage/index.js +4 -6
  141. package/src/lib/storage/make-webex-plugin-store.js +34 -21
  142. package/src/lib/storage/make-webex-store.js +6 -7
  143. package/src/lib/storage/memory-store-adapter.js +3 -3
  144. package/src/lib/webex-core-plugin-mixin.js +10 -7
  145. package/src/lib/webex-http-error.js +7 -8
  146. package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
  147. package/src/lib/webex-plugin.js +41 -34
  148. package/src/plugins/logger.js +8 -3
  149. package/src/webex-core.js +185 -116
  150. package/src/webex-internal-core.js +15 -9
  151. package/test/integration/spec/credentials/credentials.js +26 -30
  152. package/test/integration/spec/credentials/token.js +36 -33
  153. package/test/integration/spec/services/service-catalog.js +177 -156
  154. package/test/integration/spec/services/services.js +313 -304
  155. package/test/integration/spec/webex-core.js +98 -86
  156. package/test/unit/spec/_setup.js +26 -18
  157. package/test/unit/spec/credentials/credentials.js +189 -154
  158. package/test/unit/spec/credentials/token.js +94 -76
  159. package/test/unit/spec/interceptors/auth.js +291 -243
  160. package/test/unit/spec/interceptors/default-options.js +36 -24
  161. package/test/unit/spec/interceptors/embargo.js +32 -27
  162. package/test/unit/spec/interceptors/network-timing.js +2 -2
  163. package/test/unit/spec/interceptors/payload-transformer.js +61 -52
  164. package/test/unit/spec/interceptors/rate-limit.js +104 -75
  165. package/test/unit/spec/interceptors/redirect.js +22 -20
  166. package/test/unit/spec/interceptors/request-timing.js +18 -22
  167. package/test/unit/spec/interceptors/user-agent.js +28 -16
  168. package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
  169. package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
  170. package/test/unit/spec/lib/batcher.js +36 -32
  171. package/test/unit/spec/lib/page.js +36 -32
  172. package/test/unit/spec/lib/webex-plugin.js +1 -1
  173. package/test/unit/spec/services/interceptors/server-error.js +67 -90
  174. package/test/unit/spec/services/interceptors/service.js +17 -28
  175. package/test/unit/spec/services/service-catalog.js +19 -27
  176. package/test/unit/spec/services/service-host.js +29 -26
  177. package/test/unit/spec/services/service-registry.js +128 -170
  178. package/test/unit/spec/services/service-state.js +13 -22
  179. package/test/unit/spec/services/service-url.js +24 -43
  180. package/test/unit/spec/services/services.js +85 -41
  181. package/test/unit/spec/storage/persist.js +6 -9
  182. package/test/unit/spec/storage/wait-for-value.js +22 -21
  183. package/test/unit/spec/webex-core.js +78 -57
  184. package/test/unit/spec/webex-internal-core.js +56 -31
@@ -10,13 +10,7 @@ import sinon from 'sinon';
10
10
  import {browserOnly, nodeOnly} from '@webex/test-helper-mocha';
11
11
  import Logger from '@webex/plugin-logger';
12
12
  import MockWebex from '@webex/test-helper-mock-webex';
13
- import {
14
- AuthInterceptor,
15
- config,
16
- Credentials,
17
- WebexHttpError,
18
- Token
19
- } from '@webex/webex-core';
13
+ import {AuthInterceptor, config, Credentials, WebexHttpError, Token} from '@webex/webex-core';
20
14
  import {cloneDeep, merge} from 'lodash';
21
15
 
22
16
  const {assert} = chai;
@@ -33,64 +27,83 @@ describe('webex-core', () => {
33
27
  webex = new MockWebex({
34
28
  children: {
35
29
  credentials: Credentials,
36
- logger: Logger
30
+ logger: Logger,
37
31
  },
38
- config: merge(cloneDeep(config), {credentials: {client_secret: 'fake'}})
32
+ config: merge(cloneDeep(config), {credentials: {client_secret: 'fake'}}),
39
33
  });
40
34
 
41
- webex.credentials.supertoken = new Token({
42
- access_token: 'ST1',
43
- token_type: 'Bearer'
44
- }, {parent: webex});
35
+ webex.credentials.supertoken = new Token(
36
+ {
37
+ access_token: 'ST1',
38
+ token_type: 'Bearer',
39
+ },
40
+ {parent: webex}
41
+ );
45
42
 
46
43
  interceptor = Reflect.apply(AuthInterceptor.create, webex, []);
47
44
  });
48
45
 
49
46
  describe('#onRequest()', () => {
50
- it('does not replace the auth header if one has been provided', () => interceptor.onRequest({
51
- uri: `${config.services.discovery.hydra}/ping`,
52
- headers: {
53
- authorization: 'Bearer Alternate'
54
- }
55
- })
56
- .then((result) => assert.deepEqual(result, {
57
- uri: `${config.services.discovery.hydra}/ping`,
58
- headers: {
59
- authorization: 'Bearer Alternate'
60
- }
61
- })));
47
+ it('does not replace the auth header if one has been provided', () =>
48
+ interceptor
49
+ .onRequest({
50
+ uri: `${config.services.discovery.hydra}/ping`,
51
+ headers: {
52
+ authorization: 'Bearer Alternate',
53
+ },
54
+ })
55
+ .then((result) =>
56
+ assert.deepEqual(result, {
57
+ uri: `${config.services.discovery.hydra}/ping`,
58
+ headers: {
59
+ authorization: 'Bearer Alternate',
60
+ },
61
+ })
62
+ ));
62
63
 
63
64
  [undefined, null, false].forEach((falsey) => {
64
- it(`does not add an auth header if ${falsey} has been provided`, () => interceptor.onRequest({
65
- uri: `${config.services.discovery.hydra}/ping`,
66
- headers: {
67
- authorization: falsey
68
- }
69
- })
70
- .then((result) => assert.deepEqual(result, {
71
- uri: `${config.services.discovery.hydra}/ping`,
72
- headers: {}
73
- })));
65
+ it(`does not add an auth header if ${falsey} has been provided`, () =>
66
+ interceptor
67
+ .onRequest({
68
+ uri: `${config.services.discovery.hydra}/ping`,
69
+ headers: {
70
+ authorization: falsey,
71
+ },
72
+ })
73
+ .then((result) =>
74
+ assert.deepEqual(result, {
75
+ uri: `${config.services.discovery.hydra}/ping`,
76
+ headers: {},
77
+ })
78
+ ));
74
79
  });
75
80
 
76
81
  // There should never be a case in which the services plugin is not
77
82
  // loaded. But testing for legacy support.
78
83
  describe('when the services plugin has not been loaded', () => {
79
- it('does not add the auth header to hydra requests', () => interceptor.onRequest({
80
- uri: `${config.services.discovery.hydra}/ping`
81
- })
82
- .then((result) => assert.deepEqual(result, {
83
- uri: `${config.services.discovery.hydra}/ping`,
84
- headers: {}
85
- })));
86
-
87
- it('does not add the auth header to u2c requests', () => interceptor.onRequest({
88
- uri: `${config.services.discovery.u2c}/ping`
89
- })
90
- .then((result) => assert.deepEqual(result, {
91
- uri: `${config.services.discovery.u2c}/ping`,
92
- headers: {}
93
- })));
84
+ it('does not add the auth header to hydra requests', () =>
85
+ interceptor
86
+ .onRequest({
87
+ uri: `${config.services.discovery.hydra}/ping`,
88
+ })
89
+ .then((result) =>
90
+ assert.deepEqual(result, {
91
+ uri: `${config.services.discovery.hydra}/ping`,
92
+ headers: {},
93
+ })
94
+ ));
95
+
96
+ it('does not add the auth header to u2c requests', () =>
97
+ interceptor
98
+ .onRequest({
99
+ uri: `${config.services.discovery.u2c}/ping`,
100
+ })
101
+ .then((result) =>
102
+ assert.deepEqual(result, {
103
+ uri: `${config.services.discovery.u2c}/ping`,
104
+ headers: {},
105
+ })
106
+ ));
94
107
  });
95
108
 
96
109
  describe('when the services plugin has been loaded', () => {
@@ -99,17 +112,14 @@ describe('webex-core', () => {
99
112
  beforeEach(() => {
100
113
  services = {
101
114
  hydra: 'https://hydra-a.wbx.com',
102
- example: 'https://service.example.com'
115
+ example: 'https://service.example.com',
103
116
  };
104
117
 
105
118
  webex.internal.services = {
106
119
  hasService: (service) => Object.keys(services).includes(service),
107
120
  hasAllowedDomains: () => true,
108
- isAllowedDomainUrl: (uri) => !!(config.services.allowedDomains
109
- .find(
110
- (host) => uri.includes(host)
111
- )
112
- ),
121
+ isAllowedDomainUrl: (uri) =>
122
+ !!config.services.allowedDomains.find((host) => uri.includes(host)),
113
123
  getServiceFromUrl: (uri) => {
114
124
  let targetKey;
115
125
 
@@ -120,78 +130,94 @@ describe('webex-core', () => {
120
130
  });
121
131
 
122
132
  return targetKey ? {name: targetKey} : undefined;
123
- }
133
+ },
124
134
  };
125
135
 
126
- webex.internal.services.waitForService = (pto) => Promise.resolve(
127
- services[pto.name] || pto.url
128
- );
136
+ webex.internal.services.waitForService = (pto) =>
137
+ Promise.resolve(services[pto.name] || pto.url);
129
138
  });
130
139
 
131
- it('adds the header to hydra requests', () => Promise.all([
132
- interceptor.onRequest({uri: `${services.hydra}/ping`})
133
- .then((result) => assert.deepEqual(result, {
134
- uri: `${services.hydra}/ping`,
135
- headers: {
136
- authorization: 'Bearer ST1'
137
- }
138
- })),
139
- interceptor.onRequest({
140
- service: 'hydra',
141
- resource: 'ping'
142
- })
143
- .then((result) => assert.deepEqual(result, {
144
- service: 'hydra',
145
- resource: 'ping',
146
- headers: {
147
- authorization: 'Bearer ST1'
148
- }
149
- }))
150
- ]));
151
-
152
- it('adds an auth header to uris that are in the service catalog',
153
- () => interceptor.onRequest({
154
- uri: `${services.example}/ping`
155
- })
156
- .then((result) => assert.deepEqual(result, {
140
+ it('adds the header to hydra requests', () =>
141
+ Promise.all([
142
+ interceptor.onRequest({uri: `${services.hydra}/ping`}).then((result) =>
143
+ assert.deepEqual(result, {
144
+ uri: `${services.hydra}/ping`,
145
+ headers: {
146
+ authorization: 'Bearer ST1',
147
+ },
148
+ })
149
+ ),
150
+ interceptor
151
+ .onRequest({
152
+ service: 'hydra',
153
+ resource: 'ping',
154
+ })
155
+ .then((result) =>
156
+ assert.deepEqual(result, {
157
+ service: 'hydra',
158
+ resource: 'ping',
159
+ headers: {
160
+ authorization: 'Bearer ST1',
161
+ },
162
+ })
163
+ ),
164
+ ]));
165
+
166
+ it('adds an auth header to uris that are in the service catalog', () =>
167
+ interceptor
168
+ .onRequest({
157
169
  uri: `${services.example}/ping`,
158
- headers: {
159
- authorization: 'Bearer ST1'
160
- }
161
- })));
170
+ })
171
+ .then((result) =>
172
+ assert.deepEqual(result, {
173
+ uri: `${services.example}/ping`,
174
+ headers: {
175
+ authorization: 'Bearer ST1',
176
+ },
177
+ })
178
+ ));
162
179
 
163
- it('adds an auth header to services that are in the service catalog',
164
- () => interceptor.onRequest({
165
- service: 'example',
166
- resource: 'some-resource'
167
- })
168
- .then((result) => assert.deepEqual(result, {
180
+ it('adds an auth header to services that are in the service catalog', () =>
181
+ interceptor
182
+ .onRequest({
169
183
  service: 'example',
170
184
  resource: 'some-resource',
171
- headers: {
172
- authorization: 'Bearer ST1'
173
- }
174
- })));
175
-
176
- it('does not add an auth header to uris not in the service catalog',
177
- () => interceptor.onRequest({
178
- uri: 'https://not-a-service.com/ping'
179
- })
180
- .then((result) => assert.deepEqual(result, {
181
- headers: {},
182
- uri: 'https://not-a-service.com/ping'
183
- })));
184
-
185
- it('does not add an auth header to non-existant services',
186
- () => interceptor.onRequest({
187
- service: 'non-existant',
188
- resource: 'no-resource'
189
- })
190
- .then((result) => assert.deepEqual(result, {
191
- headers: {},
185
+ })
186
+ .then((result) =>
187
+ assert.deepEqual(result, {
188
+ service: 'example',
189
+ resource: 'some-resource',
190
+ headers: {
191
+ authorization: 'Bearer ST1',
192
+ },
193
+ })
194
+ ));
195
+
196
+ it('does not add an auth header to uris not in the service catalog', () =>
197
+ interceptor
198
+ .onRequest({
199
+ uri: 'https://not-a-service.com/ping',
200
+ })
201
+ .then((result) =>
202
+ assert.deepEqual(result, {
203
+ headers: {},
204
+ uri: 'https://not-a-service.com/ping',
205
+ })
206
+ ));
207
+
208
+ it('does not add an auth header to non-existant services', () =>
209
+ interceptor
210
+ .onRequest({
192
211
  service: 'non-existant',
193
- resource: 'no-resource'
194
- })));
212
+ resource: 'no-resource',
213
+ })
214
+ .then((result) =>
215
+ assert.deepEqual(result, {
216
+ headers: {},
217
+ service: 'non-existant',
218
+ resource: 'no-resource',
219
+ })
220
+ ));
195
221
  });
196
222
  });
197
223
 
@@ -202,7 +228,7 @@ describe('webex-core', () => {
202
228
  services = {
203
229
  hydra: 'https://hydra-a.wbx.com',
204
230
  u2c: 'https://u2c.wbx2.com/u2c/api/v1',
205
- example: 'https://service.example.com'
231
+ example: 'https://service.example.com',
206
232
  };
207
233
 
208
234
  webex.internal.services = {
@@ -219,17 +245,13 @@ describe('webex-core', () => {
219
245
  },
220
246
  hasService: (service) => Object.keys(services).includes(service),
221
247
  hasAllowedDomains: () => true,
222
- isAllowedDomainUrl: (uri) => !!(config.services.allowedDomains
223
- .find(
224
- (host) => uri.includes(host)
225
- )
226
- ),
227
- validateDomains: true
248
+ isAllowedDomainUrl: (uri) =>
249
+ !!config.services.allowedDomains.find((host) => uri.includes(host)),
250
+ validateDomains: true,
228
251
  };
229
252
 
230
- webex.internal.services.waitForService = (pto) => Promise.resolve(
231
- services[pto.name] || pto.url
232
- );
253
+ webex.internal.services.waitForService = (pto) =>
254
+ Promise.resolve(services[pto.name] || pto.url);
233
255
  });
234
256
 
235
257
  afterEach('remove services plugin', () => {
@@ -238,76 +260,84 @@ describe('webex-core', () => {
238
260
  }
239
261
  });
240
262
 
241
- it('resolves to false when services plugin does not exist',
242
- () => {
243
- delete webex.internal.services;
263
+ it('resolves to false when services plugin does not exist', () => {
264
+ delete webex.internal.services;
244
265
 
245
- return interceptor.requiresCredentials({
246
- uri: `${services.hydra}/ping`
266
+ return interceptor
267
+ .requiresCredentials({
268
+ uri: `${services.hydra}/ping`,
247
269
  })
248
- .then((response) => assert.isFalse(response));
249
- });
270
+ .then((response) => assert.isFalse(response));
271
+ });
250
272
 
251
- it('resolves to true when the u2c service is specified via service',
252
- () => {
253
- services = {};
273
+ it('resolves to true when the u2c service is specified via service', () => {
274
+ services = {};
254
275
 
255
- return interceptor.requiresCredentials({
276
+ return interceptor
277
+ .requiresCredentials({
256
278
  service: 'u2c',
257
- resource: 'something'
279
+ resource: 'something',
258
280
  })
259
- .then((response) => assert.isTrue(response));
260
- });
281
+ .then((response) => assert.isTrue(response));
282
+ });
261
283
 
262
- it('resolves to false when the u2c limited service is used via uri',
263
- () => interceptor.requiresCredentials({
264
- uri: `${services.u2c}/limited`
265
- })
284
+ it('resolves to false when the u2c limited service is used via uri', () =>
285
+ interceptor
286
+ .requiresCredentials({
287
+ uri: `${services.u2c}/limited`,
288
+ })
266
289
  .then((response) => assert.isFalse(response)));
267
290
 
268
- it('resolves to true if the service exists in catalog via service',
269
- () => interceptor.requiresCredentials({service: 'hydra'})
291
+ it('resolves to true if the service exists in catalog via service', () =>
292
+ interceptor
293
+ .requiresCredentials({service: 'hydra'})
270
294
  .then((response) => assert.isTrue(response)));
271
295
 
272
- it('resolves to true if the service exists in catalog via uri',
273
- () => interceptor.requiresCredentials({uri: services.hydra})
296
+ it('resolves to true if the service exists in catalog via uri', () =>
297
+ interceptor
298
+ .requiresCredentials({uri: services.hydra})
274
299
  .then((response) => assert.isTrue(response)));
275
300
 
276
- it('resolves to false if that `addAuthHeader` is set to false',
277
- () => interceptor.requiresCredentials({
278
- addAuthHeader: false,
279
- service: 'unknown',
280
- resource: 'ping'
281
- })
301
+ it('resolves to false if that `addAuthHeader` is set to false', () =>
302
+ interceptor
303
+ .requiresCredentials({
304
+ addAuthHeader: false,
305
+ service: 'unknown',
306
+ resource: 'ping',
307
+ })
282
308
  .then((response) => assert.isFalse(response)));
283
309
 
284
- it('resolves to false if `validateDomains` is set to false',
285
- () => {
286
- webex.internal.services.validateDomains = false;
310
+ it('resolves to false if `validateDomains` is set to false', () => {
311
+ webex.internal.services.validateDomains = false;
287
312
 
288
- return interceptor.requiresCredentials({
289
- uri: 'https://allowed-uri.com/resource'
313
+ return interceptor
314
+ .requiresCredentials({
315
+ uri: 'https://allowed-uri.com/resource',
290
316
  })
291
- .then((response) => assert.isFalse(response));
292
- });
317
+ .then((response) => assert.isFalse(response));
318
+ });
293
319
 
294
- it('resolves to true with an allowed domain uri',
295
- () => interceptor.requiresCredentials({
296
- uri: `https://${config.services.allowedDomains[0]}/resource`
297
- })
320
+ it('resolves to true with an allowed domain uri', () =>
321
+ interceptor
322
+ .requiresCredentials({
323
+ uri: `https://${config.services.allowedDomains[0]}/resource`,
324
+ })
298
325
  .then((response) => assert.isTrue(response)));
299
326
 
300
- it('resolves to false with a non-allowed uri',
301
- () => interceptor.requiresCredentials({
302
- uri: 'https://not-allowed/resource'
303
- })
327
+ it('resolves to false with a non-allowed uri', () =>
328
+ interceptor
329
+ .requiresCredentials({
330
+ uri: 'https://not-allowed/resource',
331
+ })
304
332
  .then((response) => assert.isFalse(response)));
305
333
 
306
334
  it('should return true if domain exists using isAllowedDomainUrl()', () => {
307
335
  webex.internal.services.waitForService = sinon.stub();
308
336
  const {isAllowedDomainUrl} = webex.internal.services;
309
337
 
310
- const result = isAllowedDomainUrl(`https://${config.services.allowedDomains[0]}/resource`);
338
+ const result = isAllowedDomainUrl(
339
+ `https://${config.services.allowedDomains[0]}/resource`
340
+ );
311
341
 
312
342
  assert.equal(result, true);
313
343
  });
@@ -315,23 +345,25 @@ describe('webex-core', () => {
315
345
  it('should return true when called `requiresCredentials` with valid url', () => {
316
346
  webex.internal.services.waitForService = sinon.stub();
317
347
 
318
- return interceptor.requiresCredentials({
319
- uri: `https://${config.services.allowedDomains[0]}/resource`
320
- })
321
- .then((res) => { assert.equal(res, true); });
348
+ return interceptor
349
+ .requiresCredentials({
350
+ uri: `https://${config.services.allowedDomains[0]}/resource`,
351
+ })
352
+ .then((res) => {
353
+ assert.equal(res, true);
354
+ });
322
355
  });
323
356
 
324
357
  it('should call waitForService()', () => {
325
358
  webex.internal.services.waitForService = sinon.stub();
326
359
  const {waitForService} = webex.internal.services;
327
360
 
328
- waitForService.resolves(
329
- `https://${config.services.allowedDomains[0]}/resource`
330
- );
361
+ waitForService.resolves(`https://${config.services.allowedDomains[0]}/resource`);
331
362
 
332
- return interceptor.requiresCredentials({
333
- service: 'locus'
334
- })
363
+ return interceptor
364
+ .requiresCredentials({
365
+ service: 'locus',
366
+ })
335
367
  .then(() => assert.calledOnce(waitForService));
336
368
  });
337
369
  });
@@ -339,96 +371,108 @@ describe('webex-core', () => {
339
371
  describe('#onResponseError()', () => {
340
372
  describe('when the server responds with 401', () => {
341
373
  nodeOnly(it)('refreshes the access token and replays the request', () => {
342
- webex.request.onCall(0).returns(Promise.resolve({
343
- body: {
344
- access_token: 'ST2'
345
- }
346
- }));
347
- webex.credentials.supertoken = new Token({
348
- access_token: 'ST1',
349
- refresh_token: 'RT1'
350
- }, {parent: webex});
374
+ webex.request.onCall(0).returns(
375
+ Promise.resolve({
376
+ body: {
377
+ access_token: 'ST2',
378
+ },
379
+ })
380
+ );
381
+ webex.credentials.supertoken = new Token(
382
+ {
383
+ access_token: 'ST1',
384
+ refresh_token: 'RT1',
385
+ },
386
+ {parent: webex}
387
+ );
351
388
 
352
389
  const err = new WebexHttpError.Unauthorized({
353
390
  statusCode: 401,
354
391
  options: {
355
392
  headers: {
356
- trackingid: 'blarg'
393
+ trackingid: 'blarg',
357
394
  },
358
- uri: `${config.services.discovery.hydra}/ping`
395
+ uri: `${config.services.discovery.hydra}/ping`,
359
396
  },
360
397
  body: {
361
- error: 'fake error'
362
- }
398
+ error: 'fake error',
399
+ },
363
400
  });
364
401
 
365
402
  assert.notCalled(webex.request);
366
403
 
367
- return interceptor.onResponseError(err.options, err)
368
- .then(() => {
369
- // once for refresh, once for replay
370
- assert.calledTwice(webex.request);
371
- assert.equal(webex.credentials.supertoken.access_token, 'ST2');
372
- assert.equal(webex.request.args[1][0].replayCount, 1);
373
- });
404
+ return interceptor.onResponseError(err.options, err).then(() => {
405
+ // once for refresh, once for replay
406
+ assert.calledTwice(webex.request);
407
+ assert.equal(webex.credentials.supertoken.access_token, 'ST2');
408
+ assert.equal(webex.request.args[1][0].replayCount, 1);
409
+ });
374
410
  });
375
411
 
376
412
  browserOnly(it)('refreshes the access token and replays the request', () => {
377
- webex.config.credentials.refreshCallback = sinon.stub().returns(Promise.resolve({
378
- access_token: 'ST2'
379
- }));
413
+ webex.config.credentials.refreshCallback = sinon.stub().returns(
414
+ Promise.resolve({
415
+ access_token: 'ST2',
416
+ })
417
+ );
380
418
 
381
- webex.credentials.supertoken = new Token({
382
- access_token: 'ST1',
383
- refresh_token: 'RT1'
384
- }, {parent: webex});
419
+ webex.credentials.supertoken = new Token(
420
+ {
421
+ access_token: 'ST1',
422
+ refresh_token: 'RT1',
423
+ },
424
+ {parent: webex}
425
+ );
385
426
 
386
427
  const err = new WebexHttpError.Unauthorized({
387
428
  statusCode: 401,
388
429
  options: {
389
430
  headers: {
390
- trackingid: 'blarg'
431
+ trackingid: 'blarg',
391
432
  },
392
- uri: `${config.services.discovery.hydra}/ping`
433
+ uri: `${config.services.discovery.hydra}/ping`,
393
434
  },
394
435
  body: {
395
- error: 'fake error'
396
- }
436
+ error: 'fake error',
437
+ },
397
438
  });
398
439
 
399
440
  assert.notCalled(webex.request);
400
441
 
401
- return interceptor.onResponseError(err.options, err)
402
- .then(() => {
442
+ return interceptor.onResponseError(err.options, err).then(() => {
403
443
  // once for replay
404
- assert.calledOnce(webex.request);
405
- assert.equal(webex.credentials.supertoken.access_token, 'ST2');
406
- assert.equal(webex.request.args[0][0].replayCount, 1);
407
- });
444
+ assert.calledOnce(webex.request);
445
+ assert.equal(webex.credentials.supertoken.access_token, 'ST2');
446
+ assert.equal(webex.request.args[0][0].replayCount, 1);
447
+ });
408
448
  });
409
449
 
410
450
  describe('when the access token is not refreshable', () => {
411
451
  it('responds with the original error', () => {
412
- webex.credentials.supertoken = new Token({
413
- access_token: 'ST1'
414
- }, {parent: webex});
452
+ webex.credentials.supertoken = new Token(
453
+ {
454
+ access_token: 'ST1',
455
+ },
456
+ {parent: webex}
457
+ );
415
458
 
416
459
  const err = new WebexHttpError.Unauthorized({
417
460
  statusCode: 401,
418
461
  options: {
419
462
  headers: {
420
- trackingid: 'blarg'
463
+ trackingid: 'blarg',
421
464
  },
422
- uri: `${config.services.discovery.hydra}/ping`
465
+ uri: `${config.services.discovery.hydra}/ping`,
423
466
  },
424
467
  body: {
425
- error: 'fake error'
426
- }
468
+ error: 'fake error',
469
+ },
427
470
  });
428
471
 
429
472
  assert.notCalled(webex.request);
430
473
 
431
- return assert.isRejected(interceptor.onResponseError(err.options, err))
474
+ return assert
475
+ .isRejected(interceptor.onResponseError(err.options, err))
432
476
  .then((err2) => {
433
477
  assert.equal(err2, err);
434
478
  });
@@ -436,35 +480,39 @@ describe('webex-core', () => {
436
480
  });
437
481
 
438
482
  it('does not refresh if shouldRefreshAccessToken was false', () => {
439
- webex.config.credentials.refreshCallback = sinon.stub().returns(Promise.resolve({
440
- access_token: 'ST2'
441
- }));
483
+ webex.config.credentials.refreshCallback = sinon.stub().returns(
484
+ Promise.resolve({
485
+ access_token: 'ST2',
486
+ })
487
+ );
442
488
 
443
- webex.credentials.supertoken = new Token({
444
- access_token: 'ST1',
445
- refresh_token: 'RT1'
446
- }, {parent: webex});
489
+ webex.credentials.supertoken = new Token(
490
+ {
491
+ access_token: 'ST1',
492
+ refresh_token: 'RT1',
493
+ },
494
+ {parent: webex}
495
+ );
447
496
 
448
497
  const err = new WebexHttpError.Unauthorized({
449
498
  statusCode: 401,
450
499
  options: {
451
500
  headers: {
452
- trackingid: 'blarg'
501
+ trackingid: 'blarg',
453
502
  },
454
503
  uri: `${config.services.discovery.hydra}/ping`,
455
- shouldRefreshAccessToken: false
504
+ shouldRefreshAccessToken: false,
456
505
  },
457
506
  body: {
458
- error: 'fake error'
459
- }
507
+ error: 'fake error',
508
+ },
460
509
  });
461
510
 
462
511
  assert.notCalled(webex.request);
463
512
 
464
- return assert.isRejected(interceptor.onResponseError(err.options, err))
465
- .then((err2) => {
466
- assert.equal(err2, err);
467
- });
513
+ return assert.isRejected(interceptor.onResponseError(err.options, err)).then((err2) => {
514
+ assert.equal(err2, err);
515
+ });
468
516
  });
469
517
  });
470
518
  });