@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
@@ -6,13 +6,7 @@
6
6
  import {assert} from '@webex/test-helper-chai';
7
7
  import MockWebex from '@webex/test-helper-mock-webex';
8
8
  import FakeTimers from '@sinonjs/fake-timers';
9
- import {
10
- RateLimitInterceptor,
11
- config,
12
- Credentials,
13
- WebexHttpError,
14
- Token
15
- } from '@webex/webex-core';
9
+ import {RateLimitInterceptor, config, Credentials, WebexHttpError, Token} from '@webex/webex-core';
16
10
  import {cloneDeep} from 'lodash';
17
11
 
18
12
  describe('webex-core', () => {
@@ -20,22 +14,23 @@ describe('webex-core', () => {
20
14
  describe('RateLimitInterceptor', () => {
21
15
  const idBrokerURL = process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com';
22
16
  const identityURL = process.env.IDENTITY_BASE_URL || 'https://identity.webex.com';
23
- let clock,
24
- interceptor,
25
- webex;
17
+ let clock, interceptor, webex;
26
18
 
27
19
  beforeEach(() => {
28
20
  webex = new MockWebex({
29
21
  children: {
30
- credentials: Credentials
22
+ credentials: Credentials,
31
23
  },
32
- config: cloneDeep(config)
24
+ config: cloneDeep(config),
33
25
  });
34
26
 
35
- webex.credentials.supertoken = new Token({
36
- access_token: 'ST1',
37
- token_type: 'Bearer'
38
- }, {parent: webex});
27
+ webex.credentials.supertoken = new Token(
28
+ {
29
+ access_token: 'ST1',
30
+ token_type: 'Bearer',
31
+ },
32
+ {parent: webex}
33
+ );
39
34
 
40
35
  interceptor = Reflect.apply(RateLimitInterceptor.create, webex, []);
41
36
  clock = FakeTimers.install({now: Date.now()});
@@ -58,8 +53,10 @@ describe('webex-core', () => {
58
53
 
59
54
  return assert.equal(interceptor.isRateLimited(`${identityURL}/horse/v1/myID`), false);
60
55
  });
61
- it('returns false when URI is not IDbroker URI', () => assert.equal(interceptor.isRateLimited('https://example.com/testFake'), false));
62
- it('returns false if the URI is null', () => assert.equal(interceptor.isRateLimited(null), false));
56
+ it('returns false when URI is not IDbroker URI', () =>
57
+ assert.equal(interceptor.isRateLimited('https://example.com/testFake'), false));
58
+ it('returns false if the URI is null', () =>
59
+ assert.equal(interceptor.isRateLimited(null), false));
63
60
  it.skip('returns true when idbroker API is rate limited', () => {
64
61
  interceptor.setRateLimitExpiry(`${idBrokerURL}/horse/v1/myID`, new Date().getTime() * 2);
65
62
 
@@ -73,35 +70,46 @@ describe('webex-core', () => {
73
70
  });
74
71
 
75
72
  describe('#getApiName', () => {
76
- it('returns null when there is no regex match', () => assert.equal(interceptor.getApiName('https://example.com/testFake'), null));
77
- it('returns null when the argument is null', () => assert.equal(interceptor.getApiName(null), null));
78
- it.skip('returns idbroker API name if there is a match', () => assert.equal(interceptor.getApiName(`${idBrokerURL}/horse/v1/myID`), 'horse'));
79
- it.skip('returns identity API name if there is a match', () => assert.equal(interceptor.getApiName(`${identityURL}/horse/v1/myID`), 'horse'));
73
+ it('returns null when there is no regex match', () =>
74
+ assert.equal(interceptor.getApiName('https://example.com/testFake'), null));
75
+ it('returns null when the argument is null', () =>
76
+ assert.equal(interceptor.getApiName(null), null));
77
+ it.skip('returns idbroker API name if there is a match', () =>
78
+ assert.equal(interceptor.getApiName(`${idBrokerURL}/horse/v1/myID`), 'horse'));
79
+ it.skip('returns identity API name if there is a match', () =>
80
+ assert.equal(interceptor.getApiName(`${identityURL}/horse/v1/myID`), 'horse'));
80
81
  });
81
82
 
82
83
  describe('#getRateLimitStatus', () => {
83
- it('returns false if API name is not in rate limit expiry map', () => assert.equal(interceptor.getRateLimitStatus('https://example.com/testFake'), false));
84
+ it('returns false if API name is not in rate limit expiry map', () =>
85
+ assert.equal(interceptor.getRateLimitStatus('https://example.com/testFake'), false));
84
86
  it('returns false if idbroker API name is not rate limited', () => {
85
87
  interceptor.setRateLimitExpiry(`${idBrokerURL}/horse/v1/myID`, 1);
86
88
  clock.tick(2000);
87
89
 
88
- return assert.equal(interceptor.getRateLimitStatus(`${idBrokerURL}/horse/v1/myID`), false);
90
+ return assert.equal(
91
+ interceptor.getRateLimitStatus(`${idBrokerURL}/horse/v1/myID`),
92
+ false
93
+ );
89
94
  });
90
95
  it('returns false if identity API name is not rate limited', () => {
91
96
  interceptor.setRateLimitExpiry(`${identityURL}/horse/v1/myID`, 1);
92
97
  clock.tick(2000);
93
98
 
94
- return assert.equal(interceptor.getRateLimitStatus(`${identityURL}/horse/v1/myID`), false);
99
+ return assert.equal(
100
+ interceptor.getRateLimitStatus(`${identityURL}/horse/v1/myID`),
101
+ false
102
+ );
95
103
  });
96
104
  it.skip('returns true if idbroker the API name is rate limited', () => {
97
- const future = (new Date().getTime()) * 2;
105
+ const future = new Date().getTime() * 2;
98
106
 
99
107
  interceptor.setRateLimitExpiry(`${idBrokerURL}/horse/v1/myID`, future);
100
108
 
101
109
  return assert.equal(interceptor.getRateLimitStatus(`${idBrokerURL}/horse/v1/myID`), true);
102
110
  });
103
111
  it.skip('returns true if the identity API name is rate limited', () => {
104
- const future = (new Date().getTime()) * 2;
112
+ const future = new Date().getTime() * 2;
105
113
 
106
114
  interceptor.setRateLimitExpiry(`${identityURL}/horse/v1/myID`, future);
107
115
 
@@ -110,7 +118,8 @@ describe('webex-core', () => {
110
118
  });
111
119
 
112
120
  describe('#setRateLimitExpiry', () => {
113
- it('returns false if URI results in API name that is null', () => assert.equal(interceptor.setRateLimitExpiry('https://example.com/testFake', 1), false));
121
+ it('returns false if URI results in API name that is null', () =>
122
+ assert.equal(interceptor.setRateLimitExpiry('https://example.com/testFake', 1), false));
114
123
  it.skip('sets expiry if idroker URI results in API name that can be mapped', () => {
115
124
  interceptor.setRateLimitExpiry(`${idBrokerURL}/horse/v1/myID`, new Date().getTime() * 2);
116
125
 
@@ -126,10 +135,26 @@ describe('webex-core', () => {
126
135
  describe('#extractRetryAfterTime', () => {
127
136
  const milliMultiplier = 1000;
128
137
 
129
- it('returns 60K milliseconds when retry-after <= 0S', () => assert.equal(interceptor.extractRetryAfterTime({headers: {'retry-after': -1}}), 60 * milliMultiplier));
130
- it('returns 60K milliseconds when retry-after is null', () => assert.equal(interceptor.extractRetryAfterTime({headers: {'retry-after-missing': 10}}), 60 * milliMultiplier));
131
- it('returns 3600K milliseconds when retry-after is > 3600S', () => assert.equal(interceptor.extractRetryAfterTime({headers: {'retry-after': 7200}}), 3600 * milliMultiplier));
132
- it('returns retry-after * 1000 (converts to milliseconds) if 0S < retry-after < 3600S', () => assert.equal(interceptor.extractRetryAfterTime({headers: {'retry-after': 55}}), 55 * milliMultiplier));
138
+ it('returns 60K milliseconds when retry-after <= 0S', () =>
139
+ assert.equal(
140
+ interceptor.extractRetryAfterTime({headers: {'retry-after': -1}}),
141
+ 60 * milliMultiplier
142
+ ));
143
+ it('returns 60K milliseconds when retry-after is null', () =>
144
+ assert.equal(
145
+ interceptor.extractRetryAfterTime({headers: {'retry-after-missing': 10}}),
146
+ 60 * milliMultiplier
147
+ ));
148
+ it('returns 3600K milliseconds when retry-after is > 3600S', () =>
149
+ assert.equal(
150
+ interceptor.extractRetryAfterTime({headers: {'retry-after': 7200}}),
151
+ 3600 * milliMultiplier
152
+ ));
153
+ it('returns retry-after * 1000 (converts to milliseconds) if 0S < retry-after < 3600S', () =>
154
+ assert.equal(
155
+ interceptor.extractRetryAfterTime({headers: {'retry-after': 55}}),
156
+ 55 * milliMultiplier
157
+ ));
133
158
  });
134
159
 
135
160
  describe('#onRequest', () => {
@@ -175,98 +200,102 @@ describe('webex-core', () => {
175
200
  options: {
176
201
  headers: {
177
202
  trackingid: 'test',
178
- 'retry-after': 60
203
+ 'retry-after': 60,
179
204
  },
180
- uri: `${idBrokerURL}/horse/v1/myID`
205
+ uri: `${idBrokerURL}/horse/v1/myID`,
181
206
  },
182
207
  body: {
183
- error: 'Too Many Requests'
184
- }
208
+ error: 'Too Many Requests',
209
+ },
185
210
  });
186
211
  const err429identity = new WebexHttpError.TooManyRequests({
187
212
  statusCode: 429,
188
213
  options: {
189
214
  headers: {
190
215
  trackingid: 'test',
191
- 'retry-after': 60
216
+ 'retry-after': 60,
192
217
  },
193
- uri: `${identityURL}/horse/v1/myID`
218
+ uri: `${identityURL}/horse/v1/myID`,
194
219
  },
195
220
  body: {
196
- error: 'Too Many Requests'
197
- }
221
+ error: 'Too Many Requests',
222
+ },
198
223
  });
199
224
  const err429notIdBroker = new WebexHttpError.TooManyRequests({
200
225
  statusCode: 429,
201
226
  options: {
202
227
  headers: {
203
228
  trackingid: 'test',
204
- 'retry-after': 60
229
+ 'retry-after': 60,
205
230
  },
206
- uri: 'https://example.com/horse/v1/myID'
231
+ uri: 'https://example.com/horse/v1/myID',
207
232
  },
208
233
  body: {
209
- error: 'Too Many Requests'
210
- }
234
+ error: 'Too Many Requests',
235
+ },
211
236
  });
212
237
  const err404 = new WebexHttpError.BadRequest({
213
238
  statusCode: 404,
214
239
  options: {
215
240
  headers: {
216
241
  trackingid: 'test',
217
- 'retry-after': 60
242
+ 'retry-after': 60,
218
243
  },
219
- uri: `${idBrokerURL}/horse/v1/myID`
244
+ uri: `${idBrokerURL}/horse/v1/myID`,
220
245
  },
221
246
  body: {
222
- error: 'Resource Not Found'
223
- }
247
+ error: 'Resource Not Found',
248
+ },
224
249
  });
225
250
  const optionsIdBroker = {
226
251
  headers: {
227
252
  trackingid: 'test',
228
- 'retry-after': 60
253
+ 'retry-after': 60,
229
254
  },
230
- uri: `${idBrokerURL}/horse/v1/myID`
255
+ uri: `${idBrokerURL}/horse/v1/myID`,
231
256
  };
232
257
 
233
-
234
258
  const optionsIdentity = {
235
259
  headers: {
236
260
  trackingid: 'test',
237
- 'retry-after': 60
261
+ 'retry-after': 60,
238
262
  },
239
- uri: `${identityURL}/horse/v1/myID`
263
+ uri: `${identityURL}/horse/v1/myID`,
240
264
  };
241
265
 
242
266
  const optionsNotIdBroker = {
243
267
  headers: {
244
268
  trackingid: 'test',
245
- 'retry-after': 60
269
+ 'retry-after': 60,
246
270
  },
247
- uri: 'https://example.com/horse/v1/myID'
271
+ uri: 'https://example.com/horse/v1/myID',
248
272
  };
249
273
 
250
- it.skip('Stores API name and retry-after when status code is 429 and URI is idbroker', () => interceptor.onResponseError(optionsIdBroker, err429).catch((resp) => {
251
- assert.equal(interceptor.isRateLimited(`${idBrokerURL}/horse/v1/myID`), true);
252
- assert.equal(resp, err429);
253
- }));
254
- it.skip('Stores API name and retry-after when status code is 429 and URI is identity', () => interceptor.onResponseError(optionsIdentity, err429identity).catch((resp) => {
255
- assert.equal(interceptor.isRateLimited(`${identityURL}/horse/v1/myID`), true);
256
- assert.equal(resp, err429identity);
257
- }));
258
- it('Does not store API name and retry-after when URI is idbroker and status code is not 429', () => interceptor.onResponseError(optionsIdBroker, err404).catch((resp) => {
259
- assert.equal(interceptor.isRateLimited(`${idBrokerURL}/horse/v1/myID`), false);
260
- assert.equal(resp, err404);
261
- }));
262
- it('Does not store API name and retry-after when URI is identity and status code is not 429', () => interceptor.onResponseError(optionsIdentity, err404).catch((resp) => {
263
- assert.equal(interceptor.isRateLimited(`${identityURL}/horse/v1/myID`), false);
264
- assert.equal(resp, err404);
265
- }));
266
- it('Does not store API name and retry-after when status is 429 and URI is not idbroker', () => interceptor.onResponseError(optionsNotIdBroker, err429notIdBroker).catch((resp) => {
267
- assert.equal(interceptor.isRateLimited('https://example.com/horse/v1/myID'), false);
268
- assert.equal(resp, err429notIdBroker);
269
- }));
274
+ it.skip('Stores API name and retry-after when status code is 429 and URI is idbroker', () =>
275
+ interceptor.onResponseError(optionsIdBroker, err429).catch((resp) => {
276
+ assert.equal(interceptor.isRateLimited(`${idBrokerURL}/horse/v1/myID`), true);
277
+ assert.equal(resp, err429);
278
+ }));
279
+ it.skip('Stores API name and retry-after when status code is 429 and URI is identity', () =>
280
+ interceptor.onResponseError(optionsIdentity, err429identity).catch((resp) => {
281
+ assert.equal(interceptor.isRateLimited(`${identityURL}/horse/v1/myID`), true);
282
+ assert.equal(resp, err429identity);
283
+ }));
284
+ it('Does not store API name and retry-after when URI is idbroker and status code is not 429', () =>
285
+ interceptor.onResponseError(optionsIdBroker, err404).catch((resp) => {
286
+ assert.equal(interceptor.isRateLimited(`${idBrokerURL}/horse/v1/myID`), false);
287
+ assert.equal(resp, err404);
288
+ }));
289
+ it('Does not store API name and retry-after when URI is identity and status code is not 429', () =>
290
+ interceptor.onResponseError(optionsIdentity, err404).catch((resp) => {
291
+ assert.equal(interceptor.isRateLimited(`${identityURL}/horse/v1/myID`), false);
292
+ assert.equal(resp, err404);
293
+ }));
294
+ it('Does not store API name and retry-after when status is 429 and URI is not idbroker', () =>
295
+ interceptor.onResponseError(optionsNotIdBroker, err429notIdBroker).catch((resp) => {
296
+ assert.equal(interceptor.isRateLimited('https://example.com/horse/v1/myID'), false);
297
+ assert.equal(resp, err429notIdBroker);
298
+ }));
270
299
  });
271
300
  });
272
301
  });
@@ -7,11 +7,7 @@
7
7
  import sinon from 'sinon';
8
8
  import {assert} from '@webex/test-helper-chai';
9
9
  import MockWebex from '@webex/test-helper-mock-webex';
10
- import {
11
- RedirectInterceptor,
12
- config,
13
- Credentials
14
- } from '@webex/webex-core';
10
+ import {RedirectInterceptor, config, Credentials} from '@webex/webex-core';
15
11
  import {cloneDeep} from 'lodash';
16
12
 
17
13
  describe('webex-core', () => {
@@ -22,10 +18,10 @@ describe('webex-core', () => {
22
18
  beforeEach(() => {
23
19
  webex = new MockWebex({
24
20
  children: {
25
- credentials: Credentials
21
+ credentials: Credentials,
26
22
  },
27
23
  config: cloneDeep(config),
28
- request: sinon.spy()
24
+ request: sinon.spy(),
29
25
  });
30
26
 
31
27
  interceptor = Reflect.apply(RedirectInterceptor.create, webex, []);
@@ -38,12 +34,15 @@ describe('webex-core', () => {
38
34
  headers: {},
39
35
  body: {
40
36
  errorCode: 2000002,
41
- location: 'http://newlocus.example.com'
42
- }
37
+ location: 'http://newlocus.example.com',
38
+ },
43
39
  };
44
40
 
45
41
  interceptor.onResponse({$redirectCount: 0}, response);
46
- sinon.assert.calledWith(webex.request, {$redirectCount: 1, uri: 'http://newlocus.example.com'});
42
+ sinon.assert.calledWith(webex.request, {
43
+ $redirectCount: 1,
44
+ uri: 'http://newlocus.example.com',
45
+ });
47
46
  });
48
47
 
49
48
  it('redirects POST requests to new url on locus redirect error', () => {
@@ -52,15 +51,18 @@ describe('webex-core', () => {
52
51
  headers: {},
53
52
  body: {
54
53
  errorCode: 2000002,
55
- location: 'http://newlocus.example.com?alternate=true'
54
+ location: 'http://newlocus.example.com?alternate=true',
56
55
  },
57
56
  options: {
58
- qs: true
59
- }
57
+ qs: true,
58
+ },
60
59
  };
61
60
 
62
61
  interceptor.onResponse({$redirectCount: 4}, response);
63
- sinon.assert.calledWith(webex.request, {$redirectCount: 5, uri: 'http://newlocus.example.com'});
62
+ sinon.assert.calledWith(webex.request, {
63
+ $redirectCount: 5,
64
+ uri: 'http://newlocus.example.com',
65
+ });
64
66
  });
65
67
 
66
68
  it('does not redirect on reaching max redirects', () => {
@@ -69,11 +71,11 @@ describe('webex-core', () => {
69
71
  headers: {},
70
72
  body: {
71
73
  errorCode: 2000002,
72
- location: 'http://newlocus.example.com?alternate=true'
74
+ location: 'http://newlocus.example.com?alternate=true',
73
75
  },
74
76
  options: {
75
- qs: true
76
- }
77
+ qs: true,
78
+ },
77
79
  };
78
80
 
79
81
  assert.isRejected(interceptor.onResponse({$redirectCount: 5}, response));
@@ -85,11 +87,11 @@ describe('webex-core', () => {
85
87
  headers: {},
86
88
  body: {
87
89
  errorCode: 20000,
88
- location: 'http://newlocus.example.com?alternate=true'
90
+ location: 'http://newlocus.example.com?alternate=true',
89
91
  },
90
92
  options: {
91
- qs: true
92
- }
93
+ qs: true,
94
+ },
93
95
  };
94
96
 
95
97
  assert.equal(interceptor.onResponse({$redirectCount: 5}, response), response);
@@ -24,7 +24,7 @@ describe('webex-core', () => {
24
24
 
25
25
  it('adds a requestStart time to options.$timings', () => {
26
26
  const options = {
27
- $timings: {}
27
+ $timings: {},
28
28
  };
29
29
 
30
30
  interceptor.onRequest(options);
@@ -36,31 +36,29 @@ describe('webex-core', () => {
36
36
  describe('.onRequestError()', () => {
37
37
  it('adds a requestEnd time to options.$timings', () => {
38
38
  const options = {
39
- $timings: {}
39
+ $timings: {},
40
40
  };
41
41
 
42
- return assert.isRejected(interceptor.onRequestError(options))
43
- .then(() => {
44
- assert.property(options.$timings, 'requestEnd');
45
- });
42
+ return assert.isRejected(interceptor.onRequestError(options)).then(() => {
43
+ assert.property(options.$timings, 'requestEnd');
44
+ });
46
45
  });
47
46
 
48
47
  it('adds a requestFail time to options.$timings', () => {
49
48
  const options = {
50
- $timings: {}
49
+ $timings: {},
51
50
  };
52
51
 
53
- return assert.isRejected(interceptor.onRequestError(options))
54
- .then(() => {
55
- assert.property(options.$timings, 'requestFail');
56
- });
52
+ return assert.isRejected(interceptor.onRequestError(options)).then(() => {
53
+ assert.property(options.$timings, 'requestFail');
54
+ });
57
55
  });
58
56
  });
59
57
 
60
58
  describe('.onResponse()', () => {
61
59
  it('adds a requestEnd time to options.$timings', () => {
62
60
  const options = {
63
- $timings: {}
61
+ $timings: {},
64
62
  };
65
63
 
66
64
  interceptor.onResponse(options);
@@ -71,24 +69,22 @@ describe('webex-core', () => {
71
69
  describe('.onResponseError()', () => {
72
70
  it('adds a requestEnd time to options.$timings', () => {
73
71
  const options = {
74
- $timings: {}
72
+ $timings: {},
75
73
  };
76
74
 
77
- return assert.isRejected(interceptor.onResponseError(options))
78
- .then(() => {
79
- assert.property(options.$timings, 'requestEnd');
80
- });
75
+ return assert.isRejected(interceptor.onResponseError(options)).then(() => {
76
+ assert.property(options.$timings, 'requestEnd');
77
+ });
81
78
  });
82
79
 
83
80
  it('adds a requestFail time to options.$timings', () => {
84
81
  const options = {
85
- $timings: {}
82
+ $timings: {},
86
83
  };
87
84
 
88
- return assert.isRejected(interceptor.onResponseError(options))
89
- .then(() => {
90
- assert.property(options.$timings, 'requestFail');
91
- });
85
+ return assert.isRejected(interceptor.onResponseError(options)).then(() => {
86
+ assert.property(options.$timings, 'requestFail');
87
+ });
92
88
  });
93
89
  });
94
90
  });
@@ -14,9 +14,13 @@ describe('webex-core', () => {
14
14
  // Do not set custom headers for browsers
15
15
  skipInBrowser(describe)('#onRequest', () => {
16
16
  it('default user-agent header', () => {
17
- const interceptor = Reflect.apply(UserAgentInterceptor.create, {
18
- version: pkg.version
19
- }, []);
17
+ const interceptor = Reflect.apply(
18
+ UserAgentInterceptor.create,
19
+ {
20
+ version: pkg.version,
21
+ },
22
+ []
23
+ );
20
24
  const options = {headers: {}};
21
25
 
22
26
  interceptor.onRequest(options);
@@ -27,13 +31,17 @@ describe('webex-core', () => {
27
31
  });
28
32
 
29
33
  it('custom user-agent header', () => {
30
- const interceptor = Reflect.apply(UserAgentInterceptor.create, {
31
- version: pkg.version,
32
- config: {
33
- appName: 'sample',
34
- appVersion: '1.0.0'
35
- }
36
- }, []);
34
+ const interceptor = Reflect.apply(
35
+ UserAgentInterceptor.create,
36
+ {
37
+ version: pkg.version,
38
+ config: {
39
+ appName: 'sample',
40
+ appVersion: '1.0.0',
41
+ },
42
+ },
43
+ []
44
+ );
37
45
  const options = {headers: {}};
38
46
 
39
47
  interceptor.onRequest(options);
@@ -44,12 +52,16 @@ describe('webex-core', () => {
44
52
  });
45
53
 
46
54
  it('custom user-agent header when there is no appVersion', () => {
47
- const interceptor = Reflect.apply(UserAgentInterceptor.create, {
48
- version: pkg.version,
49
- config: {
50
- appName: 'sample'
51
- }
52
- }, []);
55
+ const interceptor = Reflect.apply(
56
+ UserAgentInterceptor.create,
57
+ {
58
+ version: pkg.version,
59
+ config: {
60
+ appName: 'sample',
61
+ },
62
+ },
63
+ []
64
+ );
53
65
  const options = {headers: {}};
54
66
 
55
67
  interceptor.onRequest(options);
@@ -11,9 +11,13 @@ describe('webex-core', () => {
11
11
  let interceptor;
12
12
 
13
13
  beforeEach(() => {
14
- interceptor = Reflect.apply(WebexTrackingIdInterceptor.create, {
15
- sessionId: 'mock-webex_uuid'
16
- }, []);
14
+ interceptor = Reflect.apply(
15
+ WebexTrackingIdInterceptor.create,
16
+ {
17
+ sessionId: 'mock-webex_uuid',
18
+ },
19
+ []
20
+ );
17
21
  });
18
22
 
19
23
  describe('#sequence', () => {
@@ -36,11 +40,13 @@ describe('webex-core', () => {
36
40
  });
37
41
 
38
42
  it('does not add a trackingid if one has already been added', () => {
39
- assert.isFalse(interceptor.requiresTrackingId({
40
- headers: {
41
- trackingid: 'some id'
42
- }
43
- }));
43
+ assert.isFalse(
44
+ interceptor.requiresTrackingId({
45
+ headers: {
46
+ trackingid: 'some id',
47
+ },
48
+ })
49
+ );
44
50
  });
45
51
  });
46
52