@webex/webex-core 3.0.0-beta.4 → 3.0.0-beta.400

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 (188) 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/constants.js +14 -0
  38. package/dist/lib/constants.js.map +1 -0
  39. package/dist/lib/credentials/credentials.js +98 -139
  40. package/dist/lib/credentials/credentials.js.map +1 -1
  41. package/dist/lib/credentials/grant-errors.js +0 -49
  42. package/dist/lib/credentials/grant-errors.js.map +1 -1
  43. package/dist/lib/credentials/index.js +1 -13
  44. package/dist/lib/credentials/index.js.map +1 -1
  45. package/dist/lib/credentials/scope.js +25 -14
  46. package/dist/lib/credentials/scope.js.map +1 -1
  47. package/dist/lib/credentials/token-collection.js +1 -7
  48. package/dist/lib/credentials/token-collection.js.map +1 -1
  49. package/dist/lib/credentials/token.js +42 -118
  50. package/dist/lib/credentials/token.js.map +1 -1
  51. package/dist/lib/page.js +13 -26
  52. package/dist/lib/page.js.map +1 -1
  53. package/dist/lib/services/constants.js +0 -2
  54. package/dist/lib/services/constants.js.map +1 -1
  55. package/dist/lib/services/index.js +1 -28
  56. package/dist/lib/services/index.js.map +1 -1
  57. package/dist/lib/services/interceptors/server-error.js +2 -23
  58. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  59. package/dist/lib/services/interceptors/service.js +15 -35
  60. package/dist/lib/services/interceptors/service.js.map +1 -1
  61. package/dist/lib/services/metrics.js +0 -2
  62. package/dist/lib/services/metrics.js.map +1 -1
  63. package/dist/lib/services/service-catalog.js +12 -91
  64. package/dist/lib/services/service-catalog.js.map +1 -1
  65. package/dist/lib/services/service-fed-ramp.js +0 -2
  66. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  67. package/dist/lib/services/service-host.js +47 -62
  68. package/dist/lib/services/service-host.js.map +1 -1
  69. package/dist/lib/services/service-registry.js +78 -90
  70. package/dist/lib/services/service-registry.js.map +1 -1
  71. package/dist/lib/services/service-state.js +3 -15
  72. package/dist/lib/services/service-state.js.map +1 -1
  73. package/dist/lib/services/service-url.js +4 -25
  74. package/dist/lib/services/service-url.js.map +1 -1
  75. package/dist/lib/services/services.js +135 -239
  76. package/dist/lib/services/services.js.map +1 -1
  77. package/dist/lib/stateless-webex-plugin.js +5 -28
  78. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  79. package/dist/lib/storage/decorators.js +19 -62
  80. package/dist/lib/storage/decorators.js.map +1 -1
  81. package/dist/lib/storage/errors.js +0 -23
  82. package/dist/lib/storage/errors.js.map +1 -1
  83. package/dist/lib/storage/index.js +2 -16
  84. package/dist/lib/storage/index.js.map +1 -1
  85. package/dist/lib/storage/make-webex-plugin-store.js +11 -41
  86. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  87. package/dist/lib/storage/make-webex-store.js +8 -30
  88. package/dist/lib/storage/make-webex-store.js.map +1 -1
  89. package/dist/lib/storage/memory-store-adapter.js +1 -19
  90. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  91. package/dist/lib/webex-core-plugin-mixin.js +9 -29
  92. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  93. package/dist/lib/webex-http-error.js +1 -31
  94. package/dist/lib/webex-http-error.js.map +1 -1
  95. package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
  96. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  97. package/dist/lib/webex-plugin.js +6 -40
  98. package/dist/lib/webex-plugin.js.map +1 -1
  99. package/dist/plugins/logger.js +3 -17
  100. package/dist/plugins/logger.js.map +1 -1
  101. package/dist/webex-core.js +84 -203
  102. package/dist/webex-core.js.map +1 -1
  103. package/dist/webex-internal-core.js +0 -10
  104. package/dist/webex-internal-core.js.map +1 -1
  105. package/package.json +14 -14
  106. package/src/config.js +9 -11
  107. package/src/credentials-config.js +110 -72
  108. package/src/index.js +4 -14
  109. package/src/interceptors/auth.js +36 -37
  110. package/src/interceptors/default-options.js +0 -1
  111. package/src/interceptors/embargo.js +1 -1
  112. package/src/interceptors/payload-transformer.js +1 -2
  113. package/src/interceptors/rate-limit.js +8 -5
  114. package/src/interceptors/redirect.js +14 -8
  115. package/src/interceptors/request-event.js +4 -8
  116. package/src/interceptors/request-logger.js +8 -5
  117. package/src/interceptors/response-logger.js +11 -8
  118. package/src/interceptors/user-agent.js +1 -2
  119. package/src/interceptors/webex-user-agent.js +3 -9
  120. package/src/lib/batcher.js +70 -69
  121. package/src/lib/constants.js +6 -0
  122. package/src/lib/credentials/credentials.js +173 -141
  123. package/src/lib/credentials/grant-errors.js +6 -7
  124. package/src/lib/credentials/index.js +1 -4
  125. package/src/lib/credentials/scope.js +24 -8
  126. package/src/lib/credentials/token-collection.js +1 -1
  127. package/src/lib/credentials/token.js +95 -81
  128. package/src/lib/page.js +10 -11
  129. package/src/lib/services/constants.js +3 -13
  130. package/src/lib/services/index.js +2 -2
  131. package/src/lib/services/interceptors/server-error.js +12 -7
  132. package/src/lib/services/interceptors/service.js +7 -6
  133. package/src/lib/services/metrics.js +1 -1
  134. package/src/lib/services/service-catalog.js +112 -100
  135. package/src/lib/services/service-fed-ramp.js +1 -2
  136. package/src/lib/services/service-host.js +10 -17
  137. package/src/lib/services/service-registry.js +69 -96
  138. package/src/lib/services/service-state.js +4 -6
  139. package/src/lib/services/service-url.js +24 -23
  140. package/src/lib/services/services.js +272 -249
  141. package/src/lib/stateless-webex-plugin.js +4 -2
  142. package/src/lib/storage/decorators.js +68 -66
  143. package/src/lib/storage/index.js +4 -6
  144. package/src/lib/storage/make-webex-plugin-store.js +34 -21
  145. package/src/lib/storage/make-webex-store.js +6 -7
  146. package/src/lib/storage/memory-store-adapter.js +3 -3
  147. package/src/lib/webex-core-plugin-mixin.js +10 -7
  148. package/src/lib/webex-http-error.js +7 -8
  149. package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
  150. package/src/lib/webex-plugin.js +41 -34
  151. package/src/plugins/logger.js +8 -3
  152. package/src/webex-core.js +198 -117
  153. package/src/webex-internal-core.js +15 -9
  154. package/test/integration/spec/credentials/credentials.js +26 -30
  155. package/test/integration/spec/credentials/token.js +36 -33
  156. package/test/integration/spec/services/service-catalog.js +177 -156
  157. package/test/integration/spec/services/services.js +313 -304
  158. package/test/integration/spec/webex-core.js +98 -86
  159. package/test/unit/spec/_setup.js +26 -18
  160. package/test/unit/spec/credentials/credentials.js +352 -162
  161. package/test/unit/spec/credentials/scope.js +80 -0
  162. package/test/unit/spec/credentials/token.js +105 -77
  163. package/test/unit/spec/interceptors/auth.js +294 -243
  164. package/test/unit/spec/interceptors/default-options.js +36 -24
  165. package/test/unit/spec/interceptors/embargo.js +32 -27
  166. package/test/unit/spec/interceptors/network-timing.js +2 -2
  167. package/test/unit/spec/interceptors/payload-transformer.js +61 -52
  168. package/test/unit/spec/interceptors/rate-limit.js +104 -75
  169. package/test/unit/spec/interceptors/redirect.js +22 -20
  170. package/test/unit/spec/interceptors/request-timing.js +18 -22
  171. package/test/unit/spec/interceptors/user-agent.js +28 -16
  172. package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
  173. package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
  174. package/test/unit/spec/lib/batcher.js +36 -32
  175. package/test/unit/spec/lib/page.js +36 -32
  176. package/test/unit/spec/lib/webex-plugin.js +1 -1
  177. package/test/unit/spec/services/interceptors/server-error.js +67 -90
  178. package/test/unit/spec/services/interceptors/service.js +23 -28
  179. package/test/unit/spec/services/service-catalog.js +19 -27
  180. package/test/unit/spec/services/service-host.js +29 -26
  181. package/test/unit/spec/services/service-registry.js +128 -170
  182. package/test/unit/spec/services/service-state.js +13 -22
  183. package/test/unit/spec/services/service-url.js +24 -43
  184. package/test/unit/spec/services/services.js +147 -41
  185. package/test/unit/spec/storage/persist.js +6 -9
  186. package/test/unit/spec/storage/wait-for-value.js +22 -21
  187. package/test/unit/spec/webex-core.js +90 -57
  188. package/test/unit/spec/webex-internal-core.js +56 -31
@@ -11,57 +11,48 @@ describe('webex-core', () => {
11
11
 
12
12
  describe('#constructor()', () => {
13
13
  it('should create a collection of catalog states', () => {
14
- assert.isTrue(serviceConstants.SERVICE_CATALOGS.every(
15
- (catalog) => !!(serviceState[catalog])
16
- ));
14
+ assert.isTrue(
15
+ serviceConstants.SERVICE_CATALOGS.every((catalog) => !!serviceState[catalog])
16
+ );
17
17
  });
18
18
 
19
19
  it('should initialize states with false collecting values', () => {
20
- assert.isTrue(serviceConstants.SERVICE_CATALOGS.every(
21
- (catalog) => (serviceState[catalog].collecting === false)
22
- ));
20
+ assert.isTrue(
21
+ serviceConstants.SERVICE_CATALOGS.every(
22
+ (catalog) => serviceState[catalog].collecting === false
23
+ )
24
+ );
23
25
  });
24
26
  });
25
27
 
26
28
  describe('#setCollecting()', () => {
27
29
  it('should set the collecting value of a catalog state to true', () => {
28
30
  serviceState.setCollecting(serviceConstants.SERVICE_CATALOGS[0], true);
29
- assert.isTrue(
30
- serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting
31
- );
31
+ assert.isTrue(serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting);
32
32
  });
33
33
 
34
34
  it('should set the collecting value of a catalog state to false', () => {
35
35
  serviceState.setCollecting(serviceConstants.SERVICE_CATALOGS[0], false);
36
- assert.isFalse(
37
- serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting
38
- );
36
+ assert.isFalse(serviceState[serviceConstants.SERVICE_CATALOGS[0]].collecting);
39
37
  });
40
38
  });
41
39
 
42
40
  describe('#setReady()', () => {
43
41
  it('should set the collecting value of a catalog state to true', () => {
44
42
  serviceState.setReady(serviceConstants.SERVICE_CATALOGS[0], true);
45
- assert.isTrue(
46
- serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready
47
- );
43
+ assert.isTrue(serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready);
48
44
  });
49
45
 
50
46
  it('should set the collecting value of a catalog state to false', () => {
51
47
  serviceState.setReady(serviceConstants.SERVICE_CATALOGS[0], false);
52
- assert.isFalse(
53
- serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready
54
- );
48
+ assert.isFalse(serviceState[serviceConstants.SERVICE_CATALOGS[0]].ready);
55
49
  });
56
50
  });
57
51
 
58
52
  describe('static methods', () => {
59
53
  describe('#generateCatalogState()', () => {
60
54
  it('returns an object with the correct keys', () => {
61
- assert.containsAllKeys(
62
- ServiceState.generateCatalogState(),
63
- ['collecting', 'ready']
64
- );
55
+ assert.containsAllKeys(ServiceState.generateCatalogState(), ['collecting', 'ready']);
65
56
  });
66
57
  });
67
58
  });
@@ -26,38 +26,38 @@ describe('webex-core', () => {
26
26
  priority: 1,
27
27
  ttl: -1,
28
28
  id: '1',
29
- homeCluster: false
29
+ homeCluster: false,
30
30
  },
31
31
  {
32
32
  host: 'example-host-p2.com',
33
33
  priority: 2,
34
34
  ttl: -1,
35
35
  id: '2',
36
- homeCluster: false
36
+ homeCluster: false,
37
37
  },
38
38
  {
39
39
  host: 'example-host-p3.com',
40
40
  priority: 3,
41
41
  ttl: -1,
42
42
  id: '3',
43
- homeCluster: true
43
+ homeCluster: true,
44
44
  },
45
45
  {
46
46
  host: 'example-host-p4.com',
47
47
  priority: 4,
48
48
  ttl: -1,
49
49
  id: '4',
50
- homeCluster: true
50
+ homeCluster: true,
51
51
  },
52
52
  {
53
53
  host: 'example-host-p5.com',
54
54
  priority: 5,
55
55
  ttl: -1,
56
56
  id: '5',
57
- homeCluster: true
58
- }
57
+ homeCluster: true,
58
+ },
59
59
  ],
60
- name: 'example'
60
+ name: 'example',
61
61
  };
62
62
  serviceUrl = new ServiceUrl({...template});
63
63
  });
@@ -103,8 +103,7 @@ describe('webex-core', () => {
103
103
 
104
104
  it('replaces the host of a pass in url', () => {
105
105
  serviceUrl.hosts.forEach(({host}) => {
106
- assert.include(serviceUrl._generateHostUrl(host),
107
- `https://${host}/api/v1`);
106
+ assert.include(serviceUrl._generateHostUrl(host), `https://${host}/api/v1`);
108
107
  });
109
108
  });
110
109
  });
@@ -120,8 +119,7 @@ describe('webex-core', () => {
120
119
  const hostUrls = serviceUrl._getHostUrls();
121
120
 
122
121
  hostUrls.forEach((hu, i) => {
123
- assert.equal(hu.url,
124
- serviceUrl._generateHostUrl(serviceUrl.hosts[i].host));
122
+ assert.equal(hu.url, serviceUrl._generateHostUrl(serviceUrl.hosts[i].host));
125
123
  assert.equal(hu.priority, serviceUrl.hosts[i].priority);
126
124
  });
127
125
  });
@@ -132,9 +130,8 @@ describe('webex-core', () => {
132
130
 
133
131
  beforeEach('get a high priority host manually', () => {
134
132
  highPriorityHost = serviceUrl._generateHostUrl(
135
- serviceUrl.hosts.reduce((o, c) => (
136
- o.priority > c.priority || !o.homeCluster ? c : o
137
- )).host
133
+ serviceUrl.hosts.reduce((o, c) => (o.priority > c.priority || !o.homeCluster ? c : o))
134
+ .host
138
135
  );
139
136
  });
140
137
 
@@ -143,22 +140,16 @@ describe('webex-core', () => {
143
140
  });
144
141
 
145
142
  it('should reset the hosts when all have failed', () => {
146
- serviceUrl.hosts.forEach(
147
- (host) => {
148
- /* eslint-disable-next-line no-param-reassign */
149
- host.failed = true;
150
- }
151
- );
143
+ serviceUrl.hosts.forEach((host) => {
144
+ /* eslint-disable-next-line no-param-reassign */
145
+ host.failed = true;
146
+ });
152
147
 
153
148
  serviceUrl._getPriorityHostUrl();
154
149
 
155
- const homeClusterUrls = serviceUrl.hosts.filter(
156
- (host) => host.homeCluster
157
- );
150
+ const homeClusterUrls = serviceUrl.hosts.filter((host) => host.homeCluster);
158
151
 
159
- assert.isTrue(homeClusterUrls.every(
160
- (host) => !host.failed
161
- ));
152
+ assert.isTrue(homeClusterUrls.every((host) => !host.failed));
162
153
  });
163
154
  });
164
155
 
@@ -175,9 +166,7 @@ describe('webex-core', () => {
175
166
  it('marks a host as failed', () => {
176
167
  serviceUrl.failHost(hostUrl);
177
168
 
178
- const removedHost = serviceUrl.hosts.find(
179
- (currentHost) => currentHost.host === host
180
- );
169
+ const removedHost = serviceUrl.hosts.find((currentHost) => currentHost.host === host);
181
170
 
182
171
  assert.isTrue(removedHost.failed);
183
172
  });
@@ -202,9 +191,7 @@ describe('webex-core', () => {
202
191
  });
203
192
 
204
193
  it('returns false if hostUrl was not found', () => {
205
- const removedHostResult = serviceUrl.failHost(
206
- 'https://someurl.com/api/vq'
207
- );
194
+ const removedHostResult = serviceUrl.failHost('https://someurl.com/api/vq');
208
195
 
209
196
  assert.isFalse(removedHostResult);
210
197
  });
@@ -225,9 +212,7 @@ describe('webex-core', () => {
225
212
  const hpUrl = serviceUrl.get(true);
226
213
 
227
214
  assert.equal(hpUrl, serviceUrl._getPriorityHostUrl());
228
- assert.isDefined(serviceUrl.hosts.find(
229
- (hostObj) => hpUrl.includes(hostObj.host)
230
- ));
215
+ assert.isDefined(serviceUrl.hosts.find((hostObj) => hpUrl.includes(hostObj.host)));
231
216
  });
232
217
 
233
218
  describe('when a clusterId is provided', () => {
@@ -239,10 +224,8 @@ describe('webex-core', () => {
239
224
  beforeEach(() => {
240
225
  hosts = serviceUrl.hosts.filter((host) => host.homeCluster);
241
226
 
242
- highPriorityHost = hosts.reduce(
243
- (current, next) => (current.priority <= next.priority ?
244
- current :
245
- next)
227
+ highPriorityHost = hosts.reduce((current, next) =>
228
+ current.priority <= next.priority ? current : next
246
229
  ).host;
247
230
 
248
231
  url = serviceUrl.get(true, hosts[0].id);
@@ -257,10 +240,8 @@ describe('webex-core', () => {
257
240
  beforeEach(() => {
258
241
  hosts = serviceUrl.hosts.filter((host) => !host.homeCluster);
259
242
 
260
- highPriorityHost = hosts.reduce(
261
- (current, next) => (current.priority <= next.priority ?
262
- current :
263
- next)
243
+ highPriorityHost = hosts.reduce((current, next) =>
244
+ current.priority <= next.priority ? current : next
264
245
  ).host;
265
246
 
266
247
  url = serviceUrl.get(true, hosts[0].id);
@@ -6,6 +6,7 @@ import {assert} from '@webex/test-helper-chai';
6
6
  import MockWebex from '@webex/test-helper-mock-webex';
7
7
  import sinon from 'sinon';
8
8
  import {Services, ServiceRegistry, ServiceState} from '@webex/webex-core';
9
+ import {NewMetrics} from '@webex/internal-plugin-metrics';
9
10
 
10
11
  /* eslint-disable no-underscore-dangle */
11
12
  describe('webex-core', () => {
@@ -17,8 +18,9 @@ describe('webex-core', () => {
17
18
  before('initialize webex', () => {
18
19
  webex = new MockWebex({
19
20
  children: {
20
- services: Services
21
- }
21
+ services: Services,
22
+ newMetrics: NewMetrics,
23
+ },
22
24
  });
23
25
  services = webex.internal.services;
24
26
  catalog = services._getCatalog();
@@ -93,10 +95,9 @@ describe('webex-core', () => {
93
95
  it('successfully resolves with undefined if fetch request failed', () => {
94
96
  webex.request = sinon.stub().returns(Promise.reject());
95
97
 
96
- return assert.isFulfilled(services.fetchClientRegionInfo())
97
- .then((r) => {
98
- assert.isUndefined(r);
99
- });
98
+ return assert.isFulfilled(services.fetchClientRegionInfo()).then((r) => {
99
+ assert.isUndefined(r);
100
+ });
100
101
  });
101
102
  });
102
103
 
@@ -111,7 +112,7 @@ describe('webex-core', () => {
111
112
  assert.calledWith(webex.request, {
112
113
  method: 'GET',
113
114
  service: 'hydra',
114
- resource: 'meetingPreferences'
115
+ resource: 'meetingPreferences',
115
116
  });
116
117
  assert.isDefined(res);
117
118
  assert.equal(res, userPreferences);
@@ -125,12 +126,66 @@ describe('webex-core', () => {
125
126
  assert.calledWith(webex.request, {
126
127
  method: 'GET',
127
128
  service: 'hydra',
128
- resource: 'meetingPreferences'
129
+ resource: 'meetingPreferences',
129
130
  });
130
131
  assert.isUndefined(res);
131
132
  });
132
133
  });
133
134
 
135
+ describe('#_fetchNewServiceHostmap()', () => {
136
+
137
+ beforeEach(() => {
138
+ sinon.spy(webex.internal.newMetrics.callDiagnosticLatencies, 'measureLatency');
139
+ });
140
+
141
+ afterEach(() => {
142
+ sinon.restore();
143
+ });
144
+
145
+ it('checks service request resolves', async () => {
146
+ const mapResponse = 'map response';
147
+
148
+ sinon.stub(services, '_formatReceivedHostmap').resolves(mapResponse);
149
+ sinon.stub(services, 'request').resolves({});
150
+
151
+ const mapResult = await services._fetchNewServiceHostmap({from: 'limited'});
152
+
153
+ assert.deepEqual(mapResult, mapResponse);
154
+
155
+ assert.calledOnceWithExactly(services.request, {
156
+ method: 'GET',
157
+ service: 'u2c',
158
+ resource: '/limited/catalog',
159
+ qs: {format: 'hostmap'}
160
+ }
161
+ );
162
+ assert.calledOnceWithExactly(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency, sinon.match.func, 'internal.get.u2c.time');
163
+ });
164
+
165
+ it('checks service request rejects', async () => {
166
+ const error = new Error('some error');
167
+
168
+ sinon.spy(services, '_formatReceivedHostmap');
169
+ sinon.stub(services, 'request').rejects(error);
170
+
171
+ const promise = services._fetchNewServiceHostmap({from: 'limited'});
172
+ const rejectedValue = await assert.isRejected(promise);
173
+
174
+ assert.deepEqual(rejectedValue, error);
175
+
176
+ assert.notCalled(services._formatReceivedHostmap);
177
+
178
+ assert.calledOnceWithExactly(services.request, {
179
+ method: 'GET',
180
+ service: 'u2c',
181
+ resource: '/limited/catalog',
182
+ qs: {format: 'hostmap'}
183
+ }
184
+ );
185
+ assert.calledOnceWithExactly(webex.internal.newMetrics.callDiagnosticLatencies.measureLatency, sinon.match.func, 'internal.get.u2c.time');
186
+ });
187
+ });
188
+
134
189
  describe('#_formatReceivedHostmap()', () => {
135
190
  let serviceHostmap;
136
191
  let formattedHM;
@@ -141,78 +196,117 @@ describe('webex-core', () => {
141
196
  'example-a': 'https://example-a.com/api/v1',
142
197
  'example-b': 'https://example-b.com/api/v1',
143
198
  'example-c': 'https://example-c.com/api/v1',
144
- 'example-d': 'https://example-d.com/api/v1'
199
+ 'example-d': 'https://example-d.com/api/v1',
145
200
  },
146
201
  hostCatalog: {
147
202
  'example-a.com': [
148
203
  {
149
- host: 'example-a-1.com', ttl: -1, priority: 5, id: '0:0:0:example-a'
204
+ host: 'example-a-1.com',
205
+ ttl: -1,
206
+ priority: 5,
207
+ id: '0:0:0:example-a',
150
208
  },
151
209
  {
152
- host: 'example-a-2.com', ttl: -1, priority: 3, id: '0:0:0:example-a'
210
+ host: 'example-a-2.com',
211
+ ttl: -1,
212
+ priority: 3,
213
+ id: '0:0:0:example-a',
153
214
  },
154
215
  {
155
- host: 'example-a-3.com', ttl: -1, priority: 1, id: '0:0:0:example-a-x'
156
- }
216
+ host: 'example-a-3.com',
217
+ ttl: -1,
218
+ priority: 1,
219
+ id: '0:0:0:example-a-x',
220
+ },
157
221
  ],
158
222
  'example-b.com': [
159
223
  {
160
- host: 'example-b-1.com', ttl: -1, priority: 5, id: '0:0:0:example-b'
224
+ host: 'example-b-1.com',
225
+ ttl: -1,
226
+ priority: 5,
227
+ id: '0:0:0:example-b',
161
228
  },
162
229
  {
163
- host: 'example-b-2.com', ttl: -1, priority: 3, id: '0:0:0:example-b'
230
+ host: 'example-b-2.com',
231
+ ttl: -1,
232
+ priority: 3,
233
+ id: '0:0:0:example-b',
164
234
  },
165
235
  {
166
- host: 'example-b-3.com', ttl: -1, priority: 1, id: '0:0:0:example-b-x'
167
- }
236
+ host: 'example-b-3.com',
237
+ ttl: -1,
238
+ priority: 1,
239
+ id: '0:0:0:example-b-x',
240
+ },
168
241
  ],
169
242
  'example-c.com': [
170
243
  {
171
- host: 'example-c-1.com', ttl: -1, priority: 5, id: '0:0:0:example-c'
244
+ host: 'example-c-1.com',
245
+ ttl: -1,
246
+ priority: 5,
247
+ id: '0:0:0:example-c',
172
248
  },
173
249
  {
174
- host: 'example-c-2.com', ttl: -1, priority: 3, id: '0:0:0:example-c'
250
+ host: 'example-c-2.com',
251
+ ttl: -1,
252
+ priority: 3,
253
+ id: '0:0:0:example-c',
175
254
  },
176
255
  {
177
- host: 'example-c-3.com', ttl: -1, priority: 1, id: '0:0:0:example-c-x'
178
- }
256
+ host: 'example-c-3.com',
257
+ ttl: -1,
258
+ priority: 1,
259
+ id: '0:0:0:example-c-x',
260
+ },
179
261
  ],
180
262
  'example-d.com': [
181
263
  {
182
- host: 'example-c-1.com', ttl: -1, priority: 5, id: '0:0:0:example-d'
264
+ host: 'example-c-1.com',
265
+ ttl: -1,
266
+ priority: 5,
267
+ id: '0:0:0:example-d',
183
268
  },
184
269
  {
185
- host: 'example-c-2.com', ttl: -1, priority: 3, id: '0:0:0:example-d'
270
+ host: 'example-c-2.com',
271
+ ttl: -1,
272
+ priority: 3,
273
+ id: '0:0:0:example-d',
186
274
  },
187
275
  {
188
- host: 'example-c-3.com', ttl: -1, priority: 1, id: '0:0:0:example-d-x'
189
- }
190
- ]
276
+ host: 'example-c-3.com',
277
+ ttl: -1,
278
+ priority: 1,
279
+ id: '0:0:0:example-d-x',
280
+ },
281
+ ],
191
282
  },
192
- format: 'hostmap'
283
+ format: 'hostmap',
193
284
  };
194
285
  });
195
286
 
196
287
  it('creates a formmatted host map that contains the same amount of entries as the original received hostmap', () => {
197
288
  formattedHM = services._formatReceivedHostmap(serviceHostmap);
198
289
 
199
- assert(Object.keys(serviceHostmap.serviceLinks).length >=
200
- formattedHM.length, 'length is not equal or less than');
290
+ assert(
291
+ Object.keys(serviceHostmap.serviceLinks).length >= formattedHM.length,
292
+ 'length is not equal or less than'
293
+ );
201
294
  });
202
295
 
203
296
  it.skip('creates an array of equal or less length of hostMap', () => {
204
297
  formattedHM = services._formatReceivedHostmap(serviceHostmap);
205
298
 
206
- assert(Object.keys(serviceHostmap.hostCatalog).length >=
207
- formattedHM.length, 'length is not equal or less than');
299
+ assert(
300
+ Object.keys(serviceHostmap.hostCatalog).length >= formattedHM.length,
301
+ 'length is not equal or less than'
302
+ );
208
303
  });
209
304
 
210
305
  it('creates an array with matching url data', () => {
211
306
  formattedHM = services._formatReceivedHostmap(serviceHostmap);
212
307
 
213
308
  formattedHM.forEach((entry) => {
214
- assert.equal(serviceHostmap.serviceLinks[entry.name],
215
- entry.defaultUrl);
309
+ assert.equal(serviceHostmap.serviceLinks[entry.name], entry.defaultUrl);
216
310
  });
217
311
  });
218
312
 
@@ -221,8 +315,11 @@ describe('webex-core', () => {
221
315
 
222
316
  formattedHM.forEach((service) => {
223
317
  service.hosts.forEach((host) => {
224
- assert.hasAllKeys(host,
225
- ['homeCluster', 'host', 'id', 'priority', 'ttl'], `${service.name} has an invalid host shape`);
318
+ assert.hasAllKeys(
319
+ host,
320
+ ['homeCluster', 'host', 'id', 'priority', 'ttl'],
321
+ `${service.name} has an invalid host shape`
322
+ );
226
323
  });
227
324
  });
228
325
  });
@@ -231,8 +328,9 @@ describe('webex-core', () => {
231
328
  formattedHM = services._formatReceivedHostmap(serviceHostmap);
232
329
 
233
330
  formattedHM.forEach((service) => {
234
- const foundServiceKey = Object.keys(serviceHostmap.serviceLinks)
235
- .find((key) => service.name === key);
331
+ const foundServiceKey = Object.keys(serviceHostmap.serviceLinks).find(
332
+ (key) => service.name === key
333
+ );
236
334
 
237
335
  assert.isDefined(foundServiceKey);
238
336
  });
@@ -251,8 +349,16 @@ describe('webex-core', () => {
251
349
  it('creates an array with matching names', () => {
252
350
  formattedHM = services._formatReceivedHostmap(serviceHostmap);
253
351
 
254
- assert.hasAllKeys(serviceHostmap.serviceLinks,
255
- formattedHM.map((item) => item.name));
352
+ assert.hasAllKeys(
353
+ serviceHostmap.serviceLinks,
354
+ formattedHM.map((item) => item.name)
355
+ );
356
+ });
357
+
358
+ it('has hostCatalog updated', () => {
359
+ services._formatReceivedHostmap(serviceHostmap);
360
+
361
+ assert.deepStrictEqual(services._hostCatalog, serviceHostmap.hostCatalog);
256
362
  });
257
363
  });
258
364
 
@@ -260,13 +366,13 @@ describe('webex-core', () => {
260
366
  // updateCredentialsConfig must remove `/` if exist. so expected serviceList must be.
261
367
  const expectedServiceList = {
262
368
  idbroker: 'https://idbroker.webex.com',
263
- identity: 'https://identity.webex.com'
369
+ identity: 'https://identity.webex.com',
264
370
  };
265
371
 
266
372
  beforeEach('get services list', async () => {
267
373
  const servicesList = {
268
374
  idbroker: 'https://idbroker.webex.com',
269
- identity: 'https://identity.webex.com/'
375
+ identity: 'https://identity.webex.com/',
270
376
  };
271
377
 
272
378
  catalog.list = sinon.stub().returns(servicesList);
@@ -6,10 +6,7 @@
6
6
 
7
7
  import {assert} from '@webex/test-helper-chai';
8
8
  import MockWebex from '@webex/test-helper-mock-webex';
9
- import {
10
- persist,
11
- WebexPlugin
12
- } from '@webex/webex-core';
9
+ import {persist, WebexPlugin} from '@webex/webex-core';
13
10
 
14
11
  describe('webex-core', () => {
15
12
  describe('@persist', () => {
@@ -18,8 +15,8 @@ describe('webex-core', () => {
18
15
  props: {
19
16
  test: {
20
17
  default: false,
21
- type: 'boolean'
22
- }
18
+ type: 'boolean',
19
+ },
23
20
  },
24
21
 
25
22
  namespace: 'MockChild',
@@ -27,13 +24,13 @@ describe('webex-core', () => {
27
24
  @persist('@')
28
25
  initialize(...args) {
29
26
  return Reflect.apply(WebexPlugin.prototype.initialize, this, args);
30
- }
27
+ },
31
28
  });
32
29
 
33
30
  const webex = new MockWebex({
34
31
  children: {
35
- mockChild: MockChild
36
- }
32
+ mockChild: MockChild,
33
+ },
37
34
  });
38
35
 
39
36
  webex.internal.mockChild.test = true;
@@ -7,11 +7,7 @@
7
7
  import {assert} from '@webex/test-helper-chai';
8
8
  import sinon from 'sinon';
9
9
  import MockWebex from '@webex/test-helper-mock-webex';
10
- import {
11
- persist,
12
- WebexPlugin,
13
- waitForValue
14
- } from '@webex/webex-core';
10
+ import {persist, WebexPlugin, waitForValue} from '@webex/webex-core';
15
11
 
16
12
  describe('webex-core', () => {
17
13
  describe('@waitForValue', () => {
@@ -20,8 +16,8 @@ describe('webex-core', () => {
20
16
  props: {
21
17
  test: {
22
18
  default: false,
23
- type: 'boolean'
24
- }
19
+ type: 'boolean',
20
+ },
25
21
  },
26
22
 
27
23
  namespace: 'MockChild',
@@ -33,29 +29,34 @@ describe('webex-core', () => {
33
29
 
34
30
  @waitForValue('@')
35
31
  testMethod() {
36
- return this.webex.request()
37
- .then(() => {
38
- this.test = true;
39
- });
40
- }
32
+ return this.webex.request().then(() => {
33
+ this.test = true;
34
+ });
35
+ },
41
36
  });
42
37
 
43
38
  const webex = new MockWebex({
44
39
  children: {
45
- mockChild: MockChild
46
- }
40
+ mockChild: MockChild,
41
+ },
47
42
  });
48
43
 
49
44
  let resolve;
50
45
 
51
- sinon.stub(webex.boundedStorage, 'get').returns(new Promise((r) => { resolve = r; }));
46
+ sinon.stub(webex.boundedStorage, 'get').returns(
47
+ new Promise((r) => {
48
+ resolve = r;
49
+ })
50
+ );
52
51
 
53
- webex.request.returns(Promise.resolve({
54
- body: {
55
- access_token: 'fake token @waitForValue',
56
- token_type: 'Bearer'
57
- }
58
- }));
52
+ webex.request.returns(
53
+ Promise.resolve({
54
+ body: {
55
+ access_token: 'fake token @waitForValue',
56
+ token_type: 'Bearer',
57
+ },
58
+ })
59
+ );
59
60
 
60
61
  const promise = webex.internal.mockChild.testMethod();
61
62