@webex/webex-core 2.59.3-next.1 → 2.59.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/.eslintrc.js +6 -6
  2. package/README.md +79 -79
  3. package/babel.config.js +3 -3
  4. package/dist/config.js +24 -24
  5. package/dist/config.js.map +1 -1
  6. package/dist/credentials-config.js +56 -56
  7. package/dist/credentials-config.js.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/interceptors/auth.js +28 -28
  10. package/dist/interceptors/auth.js.map +1 -1
  11. package/dist/interceptors/default-options.js +24 -24
  12. package/dist/interceptors/default-options.js.map +1 -1
  13. package/dist/interceptors/embargo.js +9 -9
  14. package/dist/interceptors/embargo.js.map +1 -1
  15. package/dist/interceptors/network-timing.js +19 -19
  16. package/dist/interceptors/network-timing.js.map +1 -1
  17. package/dist/interceptors/payload-transformer.js +19 -19
  18. package/dist/interceptors/payload-transformer.js.map +1 -1
  19. package/dist/interceptors/rate-limit.js +40 -40
  20. package/dist/interceptors/rate-limit.js.map +1 -1
  21. package/dist/interceptors/redirect.js +13 -13
  22. package/dist/interceptors/redirect.js.map +1 -1
  23. package/dist/interceptors/request-event.js +23 -23
  24. package/dist/interceptors/request-event.js.map +1 -1
  25. package/dist/interceptors/request-logger.js +13 -13
  26. package/dist/interceptors/request-logger.js.map +1 -1
  27. package/dist/interceptors/request-timing.js +23 -23
  28. package/dist/interceptors/request-timing.js.map +1 -1
  29. package/dist/interceptors/response-logger.js +19 -19
  30. package/dist/interceptors/response-logger.js.map +1 -1
  31. package/dist/interceptors/user-agent.js +29 -29
  32. package/dist/interceptors/user-agent.js.map +1 -1
  33. package/dist/interceptors/webex-tracking-id.js +15 -15
  34. package/dist/interceptors/webex-tracking-id.js.map +1 -1
  35. package/dist/interceptors/webex-user-agent.js +13 -13
  36. package/dist/interceptors/webex-user-agent.js.map +1 -1
  37. package/dist/lib/batcher.js +83 -83
  38. package/dist/lib/batcher.js.map +1 -1
  39. package/dist/lib/credentials/credentials.js +103 -103
  40. package/dist/lib/credentials/credentials.js.map +1 -1
  41. package/dist/lib/credentials/grant-errors.js +17 -17
  42. package/dist/lib/credentials/grant-errors.js.map +1 -1
  43. package/dist/lib/credentials/index.js +2 -2
  44. package/dist/lib/credentials/index.js.map +1 -1
  45. package/dist/lib/credentials/scope.js +11 -11
  46. package/dist/lib/credentials/scope.js.map +1 -1
  47. package/dist/lib/credentials/token-collection.js +2 -2
  48. package/dist/lib/credentials/token-collection.js.map +1 -1
  49. package/dist/lib/credentials/token.js +145 -145
  50. package/dist/lib/credentials/token.js.map +1 -1
  51. package/dist/lib/page.js +49 -49
  52. package/dist/lib/page.js.map +1 -1
  53. package/dist/lib/services/constants.js.map +1 -1
  54. package/dist/lib/services/index.js +2 -2
  55. package/dist/lib/services/index.js.map +1 -1
  56. package/dist/lib/services/interceptors/server-error.js +9 -9
  57. package/dist/lib/services/interceptors/server-error.js.map +1 -1
  58. package/dist/lib/services/interceptors/service.js +24 -24
  59. package/dist/lib/services/interceptors/service.js.map +1 -1
  60. package/dist/lib/services/metrics.js.map +1 -1
  61. package/dist/lib/services/service-catalog.js +104 -104
  62. package/dist/lib/services/service-catalog.js.map +1 -1
  63. package/dist/lib/services/service-fed-ramp.js.map +1 -1
  64. package/dist/lib/services/service-host.js +134 -134
  65. package/dist/lib/services/service-host.js.map +1 -1
  66. package/dist/lib/services/service-registry.js +175 -175
  67. package/dist/lib/services/service-registry.js.map +1 -1
  68. package/dist/lib/services/service-state.js +38 -38
  69. package/dist/lib/services/service-state.js.map +1 -1
  70. package/dist/lib/services/service-url.js +31 -31
  71. package/dist/lib/services/service-url.js.map +1 -1
  72. package/dist/lib/services/services.js +245 -245
  73. package/dist/lib/services/services.js.map +1 -1
  74. package/dist/lib/stateless-webex-plugin.js +28 -28
  75. package/dist/lib/stateless-webex-plugin.js.map +1 -1
  76. package/dist/lib/storage/decorators.js +27 -27
  77. package/dist/lib/storage/decorators.js.map +1 -1
  78. package/dist/lib/storage/errors.js +4 -4
  79. package/dist/lib/storage/errors.js.map +1 -1
  80. package/dist/lib/storage/index.js.map +1 -1
  81. package/dist/lib/storage/make-webex-plugin-store.js +44 -44
  82. package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
  83. package/dist/lib/storage/make-webex-store.js +40 -40
  84. package/dist/lib/storage/make-webex-store.js.map +1 -1
  85. package/dist/lib/storage/memory-store-adapter.js +9 -9
  86. package/dist/lib/storage/memory-store-adapter.js.map +1 -1
  87. package/dist/lib/webex-core-plugin-mixin.js +13 -13
  88. package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
  89. package/dist/lib/webex-http-error.js +9 -9
  90. package/dist/lib/webex-http-error.js.map +1 -1
  91. package/dist/lib/webex-internal-core-plugin-mixin.js +13 -13
  92. package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
  93. package/dist/lib/webex-plugin.js +36 -36
  94. package/dist/lib/webex-plugin.js.map +1 -1
  95. package/dist/plugins/logger.js +9 -9
  96. package/dist/plugins/logger.js.map +1 -1
  97. package/dist/webex-core.js +104 -104
  98. package/dist/webex-core.js.map +1 -1
  99. package/dist/webex-internal-core.js +12 -12
  100. package/dist/webex-internal-core.js.map +1 -1
  101. package/jest.config.js +3 -3
  102. package/package.json +19 -20
  103. package/process +1 -1
  104. package/src/config.js +90 -90
  105. package/src/credentials-config.js +212 -212
  106. package/src/index.js +62 -62
  107. package/src/interceptors/auth.js +186 -186
  108. package/src/interceptors/default-options.js +55 -55
  109. package/src/interceptors/embargo.js +43 -43
  110. package/src/interceptors/network-timing.js +54 -54
  111. package/src/interceptors/payload-transformer.js +55 -55
  112. package/src/interceptors/rate-limit.js +169 -169
  113. package/src/interceptors/redirect.js +106 -106
  114. package/src/interceptors/request-event.js +93 -93
  115. package/src/interceptors/request-logger.js +78 -78
  116. package/src/interceptors/request-timing.js +65 -65
  117. package/src/interceptors/response-logger.js +98 -98
  118. package/src/interceptors/user-agent.js +77 -77
  119. package/src/interceptors/webex-tracking-id.js +73 -73
  120. package/src/interceptors/webex-user-agent.js +79 -79
  121. package/src/lib/batcher.js +307 -307
  122. package/src/lib/credentials/credentials.js +552 -552
  123. package/src/lib/credentials/grant-errors.js +92 -92
  124. package/src/lib/credentials/index.js +16 -16
  125. package/src/lib/credentials/scope.js +34 -34
  126. package/src/lib/credentials/token-collection.js +17 -17
  127. package/src/lib/credentials/token.js +559 -559
  128. package/src/lib/page.js +159 -159
  129. package/src/lib/services/constants.js +9 -9
  130. package/src/lib/services/index.js +26 -26
  131. package/src/lib/services/interceptors/server-error.js +48 -48
  132. package/src/lib/services/interceptors/service.js +101 -101
  133. package/src/lib/services/metrics.js +4 -4
  134. package/src/lib/services/service-catalog.js +435 -435
  135. package/src/lib/services/service-fed-ramp.js +4 -4
  136. package/src/lib/services/service-host.js +267 -267
  137. package/src/lib/services/service-registry.js +465 -465
  138. package/src/lib/services/service-state.js +78 -78
  139. package/src/lib/services/service-url.js +124 -124
  140. package/src/lib/services/services.js +1018 -1018
  141. package/src/lib/stateless-webex-plugin.js +98 -98
  142. package/src/lib/storage/decorators.js +220 -220
  143. package/src/lib/storage/errors.js +15 -15
  144. package/src/lib/storage/index.js +10 -10
  145. package/src/lib/storage/make-webex-plugin-store.js +211 -211
  146. package/src/lib/storage/make-webex-store.js +140 -140
  147. package/src/lib/storage/memory-store-adapter.js +79 -79
  148. package/src/lib/webex-core-plugin-mixin.js +114 -114
  149. package/src/lib/webex-http-error.js +61 -61
  150. package/src/lib/webex-internal-core-plugin-mixin.js +107 -107
  151. package/src/lib/webex-plugin.js +222 -222
  152. package/src/plugins/logger.js +60 -60
  153. package/src/webex-core.js +745 -745
  154. package/src/webex-internal-core.js +46 -46
  155. package/test/integration/spec/credentials/credentials.js +139 -139
  156. package/test/integration/spec/credentials/token.js +102 -102
  157. package/test/integration/spec/services/service-catalog.js +838 -838
  158. package/test/integration/spec/services/services.js +1221 -1221
  159. package/test/integration/spec/webex-core.js +178 -178
  160. package/test/unit/spec/_setup.js +44 -44
  161. package/test/unit/spec/credentials/credentials.js +1017 -1017
  162. package/test/unit/spec/credentials/token.js +441 -441
  163. package/test/unit/spec/interceptors/auth.js +521 -521
  164. package/test/unit/spec/interceptors/default-options.js +84 -84
  165. package/test/unit/spec/interceptors/embargo.js +144 -144
  166. package/test/unit/spec/interceptors/network-timing.js +49 -49
  167. package/test/unit/spec/interceptors/payload-transformer.js +155 -155
  168. package/test/unit/spec/interceptors/rate-limit.js +302 -302
  169. package/test/unit/spec/interceptors/redirect.js +102 -102
  170. package/test/unit/spec/interceptors/request-timing.js +92 -92
  171. package/test/unit/spec/interceptors/user-agent.js +76 -76
  172. package/test/unit/spec/interceptors/webex-tracking-id.js +76 -76
  173. package/test/unit/spec/interceptors/webex-user-agent.js +159 -159
  174. package/test/unit/spec/lib/batcher.js +330 -330
  175. package/test/unit/spec/lib/page.js +148 -148
  176. package/test/unit/spec/lib/webex-plugin.js +48 -48
  177. package/test/unit/spec/services/interceptors/server-error.js +204 -204
  178. package/test/unit/spec/services/interceptors/service.js +188 -188
  179. package/test/unit/spec/services/service-catalog.js +194 -194
  180. package/test/unit/spec/services/service-host.js +260 -260
  181. package/test/unit/spec/services/service-registry.js +747 -747
  182. package/test/unit/spec/services/service-state.js +60 -60
  183. package/test/unit/spec/services/service-url.js +258 -258
  184. package/test/unit/spec/services/services.js +348 -348
  185. package/test/unit/spec/storage/persist.js +50 -50
  186. package/test/unit/spec/storage/storage-adapter.js +12 -12
  187. package/test/unit/spec/storage/wait-for-value.js +81 -81
  188. package/test/unit/spec/webex-core.js +253 -253
  189. package/test/unit/spec/webex-internal-core.js +91 -91
package/src/lib/page.js CHANGED
@@ -1,159 +1,159 @@
1
- /* eslint-disable no-constructor-return */
2
-
3
- /*!
4
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
5
- */
6
-
7
- const itemsMap = new WeakMap();
8
- const linksMap = new WeakMap();
9
- const webexsMap = new WeakMap();
10
-
11
- /**
12
- * @class Page
13
- */
14
- export default class Page {
15
- /**
16
- * @type {Array}
17
- */
18
- get items() {
19
- return itemsMap.get(this);
20
- }
21
-
22
- /**
23
- * @type {number}
24
- */
25
- get length() {
26
- return this.items.length;
27
- }
28
-
29
- /**
30
- * @private
31
- * @type {Object}
32
- */
33
- get links() {
34
- return linksMap.get(this);
35
- }
36
-
37
- /**
38
- * @private
39
- * @type {ProxyWebex}
40
- */
41
- get webex() {
42
- return webexsMap.get(this);
43
- }
44
-
45
- /**
46
- * @constructs {Page}
47
- * @param {HttpResponse} res
48
- * @param {ProxyWebex} webex
49
- * @returns {Page}
50
- */
51
- constructor(res, webex) {
52
- itemsMap.set(this, res.body.items);
53
- linksMap.set(this, Page.parseLinkHeaders(res.headers.link));
54
- webexsMap.set(this, webex);
55
-
56
- return this;
57
- }
58
-
59
- /**
60
- * Separate a single link header string into an actionable object
61
- * @param {string} linkHeaders
62
- * @private
63
- * @returns {Object}
64
- */
65
- static parseLinkHeaders(linkHeaders) {
66
- if (!linkHeaders) {
67
- return {};
68
- }
69
-
70
- linkHeaders = Array.isArray(linkHeaders) ? linkHeaders : [linkHeaders];
71
-
72
- return linkHeaders.reduce((links, linkHeader) => {
73
- linkHeader = linkHeader.split(';');
74
- const link = linkHeader[0].replace('<', '').replace('>', '');
75
- const rel = linkHeader[1].split('=')[1].replace(/"/g, '');
76
-
77
- links[rel] = link;
78
-
79
- return links;
80
- }, {});
81
- }
82
-
83
- /**
84
- * Get next page
85
- * @returns {Function}
86
- */
87
- next() {
88
- return this.getLink('next');
89
- }
90
-
91
- /**
92
- * Indicates if there's another page
93
- * @returns {Boolean}
94
- */
95
- hasNext() {
96
- return this.hasLink('next');
97
- }
98
-
99
- /**
100
- * Get previous page
101
- * @returns {Page}
102
- */
103
- previous() {
104
- return this.getLink('previous');
105
- }
106
-
107
- /**
108
- * Indicates if there is a previous Page
109
- * @returns {Boolean}
110
- */
111
- hasPrevious() {
112
- return this.hasLink('previous');
113
- }
114
-
115
- /**
116
- * Retrieves the `Page` at url specified by `link`
117
- * @param {string} link Specifies which link header to return
118
- * @private
119
- * @returns {Promise<Page>}
120
- */
121
- getLink(link) {
122
- return this.webex
123
- .request({
124
- uri: this.links[link],
125
- })
126
- .then((res) => new Page(res, this.webex));
127
- }
128
-
129
- /**
130
- * Indicates if the specified link is in the link header
131
- * @param {string} link
132
- * @private
133
- * @returns {Boolean}
134
- */
135
- hasLink(link) {
136
- return Boolean(this.links[link]);
137
- }
138
-
139
- /**
140
- * Iterator
141
- * @returns {Object}
142
- */
143
- [Symbol.iterator]() {
144
- let i = -1;
145
-
146
- return {
147
- next: () => {
148
- i += 1;
149
- if (i < this.length) {
150
- return {
151
- value: this.items[i],
152
- };
153
- }
154
-
155
- return {done: true};
156
- },
157
- };
158
- }
159
- }
1
+ /* eslint-disable no-constructor-return */
2
+
3
+ /*!
4
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
5
+ */
6
+
7
+ const itemsMap = new WeakMap();
8
+ const linksMap = new WeakMap();
9
+ const webexsMap = new WeakMap();
10
+
11
+ /**
12
+ * @class Page
13
+ */
14
+ export default class Page {
15
+ /**
16
+ * @type {Array}
17
+ */
18
+ get items() {
19
+ return itemsMap.get(this);
20
+ }
21
+
22
+ /**
23
+ * @type {number}
24
+ */
25
+ get length() {
26
+ return this.items.length;
27
+ }
28
+
29
+ /**
30
+ * @private
31
+ * @type {Object}
32
+ */
33
+ get links() {
34
+ return linksMap.get(this);
35
+ }
36
+
37
+ /**
38
+ * @private
39
+ * @type {ProxyWebex}
40
+ */
41
+ get webex() {
42
+ return webexsMap.get(this);
43
+ }
44
+
45
+ /**
46
+ * @constructs {Page}
47
+ * @param {HttpResponse} res
48
+ * @param {ProxyWebex} webex
49
+ * @returns {Page}
50
+ */
51
+ constructor(res, webex) {
52
+ itemsMap.set(this, res.body.items);
53
+ linksMap.set(this, Page.parseLinkHeaders(res.headers.link));
54
+ webexsMap.set(this, webex);
55
+
56
+ return this;
57
+ }
58
+
59
+ /**
60
+ * Separate a single link header string into an actionable object
61
+ * @param {string} linkHeaders
62
+ * @private
63
+ * @returns {Object}
64
+ */
65
+ static parseLinkHeaders(linkHeaders) {
66
+ if (!linkHeaders) {
67
+ return {};
68
+ }
69
+
70
+ linkHeaders = Array.isArray(linkHeaders) ? linkHeaders : [linkHeaders];
71
+
72
+ return linkHeaders.reduce((links, linkHeader) => {
73
+ linkHeader = linkHeader.split(';');
74
+ const link = linkHeader[0].replace('<', '').replace('>', '');
75
+ const rel = linkHeader[1].split('=')[1].replace(/"/g, '');
76
+
77
+ links[rel] = link;
78
+
79
+ return links;
80
+ }, {});
81
+ }
82
+
83
+ /**
84
+ * Get next page
85
+ * @returns {Function}
86
+ */
87
+ next() {
88
+ return this.getLink('next');
89
+ }
90
+
91
+ /**
92
+ * Indicates if there's another page
93
+ * @returns {Boolean}
94
+ */
95
+ hasNext() {
96
+ return this.hasLink('next');
97
+ }
98
+
99
+ /**
100
+ * Get previous page
101
+ * @returns {Page}
102
+ */
103
+ previous() {
104
+ return this.getLink('previous');
105
+ }
106
+
107
+ /**
108
+ * Indicates if there is a previous Page
109
+ * @returns {Boolean}
110
+ */
111
+ hasPrevious() {
112
+ return this.hasLink('previous');
113
+ }
114
+
115
+ /**
116
+ * Retrieves the `Page` at url specified by `link`
117
+ * @param {string} link Specifies which link header to return
118
+ * @private
119
+ * @returns {Promise<Page>}
120
+ */
121
+ getLink(link) {
122
+ return this.webex
123
+ .request({
124
+ uri: this.links[link],
125
+ })
126
+ .then((res) => new Page(res, this.webex));
127
+ }
128
+
129
+ /**
130
+ * Indicates if the specified link is in the link header
131
+ * @param {string} link
132
+ * @private
133
+ * @returns {Boolean}
134
+ */
135
+ hasLink(link) {
136
+ return Boolean(this.links[link]);
137
+ }
138
+
139
+ /**
140
+ * Iterator
141
+ * @returns {Object}
142
+ */
143
+ [Symbol.iterator]() {
144
+ let i = -1;
145
+
146
+ return {
147
+ next: () => {
148
+ i += 1;
149
+ if (i < this.length) {
150
+ return {
151
+ value: this.items[i],
152
+ };
153
+ }
154
+
155
+ return {done: true};
156
+ },
157
+ };
158
+ }
159
+ }
@@ -1,9 +1,9 @@
1
- const NAMESPACE = 'services';
2
- const SERVICE_CATALOGS = ['discovery', 'limited', 'signin', 'postauth', 'custom'];
3
-
4
- const SERVICE_CATALOGS_ENUM_TYPES = {
5
- STRING: 'SERVICE_CATALOGS_ENUM_TYPES_STRING',
6
- NUMBER: 'SERVICE_CATALOGS_ENUM_TYPES_NUMBER',
7
- };
8
-
9
- export {SERVICE_CATALOGS_ENUM_TYPES, NAMESPACE, SERVICE_CATALOGS};
1
+ const NAMESPACE = 'services';
2
+ const SERVICE_CATALOGS = ['discovery', 'limited', 'signin', 'postauth', 'custom'];
3
+
4
+ const SERVICE_CATALOGS_ENUM_TYPES = {
5
+ STRING: 'SERVICE_CATALOGS_ENUM_TYPES_STRING',
6
+ NUMBER: 'SERVICE_CATALOGS_ENUM_TYPES_NUMBER',
7
+ };
8
+
9
+ export {SERVICE_CATALOGS_ENUM_TYPES, NAMESPACE, SERVICE_CATALOGS};
@@ -1,26 +1,26 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
- import {registerInternalPlugin} from '../../webex-core';
5
-
6
- import * as constants from './constants';
7
- import Services from './services';
8
- import ServerErrorInterceptor from './interceptors/server-error';
9
- import ServiceInterceptor from './interceptors/service';
10
-
11
- registerInternalPlugin('services', Services, {
12
- interceptors: {
13
- ServiceInterceptor: ServiceInterceptor.create,
14
- ServerErrorInterceptor: ServerErrorInterceptor.create,
15
- },
16
- });
17
-
18
- export {constants};
19
- export {default as ServiceInterceptor} from './interceptors/service';
20
- export {default as ServerErrorInterceptor} from './interceptors/server-error';
21
- export {default as Services} from './services';
22
- export {default as ServiceCatalog} from './service-catalog';
23
- export {default as ServiceRegistry} from './service-registry';
24
- export {default as ServiceState} from './service-state';
25
- export {default as ServiceHost} from './service-host';
26
- export {default as ServiceUrl} from './service-url';
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ import {registerInternalPlugin} from '../../webex-core';
5
+
6
+ import * as constants from './constants';
7
+ import Services from './services';
8
+ import ServerErrorInterceptor from './interceptors/server-error';
9
+ import ServiceInterceptor from './interceptors/service';
10
+
11
+ registerInternalPlugin('services', Services, {
12
+ interceptors: {
13
+ ServiceInterceptor: ServiceInterceptor.create,
14
+ ServerErrorInterceptor: ServerErrorInterceptor.create,
15
+ },
16
+ });
17
+
18
+ export {constants};
19
+ export {default as ServiceInterceptor} from './interceptors/service';
20
+ export {default as ServerErrorInterceptor} from './interceptors/server-error';
21
+ export {default as Services} from './services';
22
+ export {default as ServiceCatalog} from './service-catalog';
23
+ export {default as ServiceRegistry} from './service-registry';
24
+ export {default as ServiceState} from './service-state';
25
+ export {default as ServiceHost} from './service-host';
26
+ export {default as ServiceUrl} from './service-url';
@@ -1,48 +1,48 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import {Interceptor} from '@webex/http-core';
6
- import WebexHttpError from '../../webex-http-error';
7
- /**
8
- * Changes server url when it fails
9
- */
10
- export default class ServerErrorInterceptor extends Interceptor {
11
- /**
12
- * @returns {HAMessagingInterceptor}
13
- */
14
- static create() {
15
- // eslint-disable-next-line no-invalid-this
16
- return new ServerErrorInterceptor({webex: this});
17
- }
18
-
19
- /**
20
- * @see Interceptor#onResponseError
21
- * @param {Object} options
22
- * @param {Object} reason
23
- * @returns {Object}
24
- */
25
- onResponseError(options, reason) {
26
- if (
27
- (reason instanceof WebexHttpError.InternalServerError ||
28
- reason instanceof WebexHttpError.BadGateway ||
29
- reason instanceof WebexHttpError.ServiceUnavailable) &&
30
- options.uri
31
- ) {
32
- const feature = this.webex.internal.device.features.developer.get('web-high-availability');
33
-
34
- if (feature && feature.value) {
35
- this.webex.internal.metrics.submitClientMetrics('web-ha', {
36
- fields: {success: false},
37
- tags: {action: 'failed', error: reason.message, url: options.uri},
38
- });
39
-
40
- return Promise.resolve(this.webex.internal.services.markFailedUrl(options.uri)).then(() =>
41
- Promise.reject(reason)
42
- );
43
- }
44
- }
45
-
46
- return Promise.reject(reason);
47
- }
48
- }
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {Interceptor} from '@webex/http-core';
6
+ import WebexHttpError from '../../webex-http-error';
7
+ /**
8
+ * Changes server url when it fails
9
+ */
10
+ export default class ServerErrorInterceptor extends Interceptor {
11
+ /**
12
+ * @returns {HAMessagingInterceptor}
13
+ */
14
+ static create() {
15
+ // eslint-disable-next-line no-invalid-this
16
+ return new ServerErrorInterceptor({webex: this});
17
+ }
18
+
19
+ /**
20
+ * @see Interceptor#onResponseError
21
+ * @param {Object} options
22
+ * @param {Object} reason
23
+ * @returns {Object}
24
+ */
25
+ onResponseError(options, reason) {
26
+ if (
27
+ (reason instanceof WebexHttpError.InternalServerError ||
28
+ reason instanceof WebexHttpError.BadGateway ||
29
+ reason instanceof WebexHttpError.ServiceUnavailable) &&
30
+ options.uri
31
+ ) {
32
+ const feature = this.webex.internal.device.features.developer.get('web-high-availability');
33
+
34
+ if (feature && feature.value) {
35
+ this.webex.internal.metrics.submitClientMetrics('web-ha', {
36
+ fields: {success: false},
37
+ tags: {action: 'failed', error: reason.message, url: options.uri},
38
+ });
39
+
40
+ return Promise.resolve(this.webex.internal.services.markFailedUrl(options.uri)).then(() =>
41
+ Promise.reject(reason)
42
+ );
43
+ }
44
+ }
45
+
46
+ return Promise.reject(reason);
47
+ }
48
+ }