@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
@@ -1,78 +1,78 @@
1
- import {SERVICE_CATALOGS} from './constants';
2
-
3
- /**
4
- * The state of a specific catalog to be used by {@link ServiceState}.
5
- *
6
- * @typedef {Record<string, boolean>} CatalogState
7
- * @property {boolean} CatalogState.collecting - If the catalog is collecting.
8
- * @property {boolean} CatalogState.ready - If the catalog is ready.
9
- */
10
-
11
- /**
12
- * @class
13
- * @classdesc - Manages the state of the service catalogs for a webex instance.
14
- */
15
- export default class ServiceState {
16
- /**
17
- * Generate a new {@link ServiceState}.
18
- *
19
- * @public
20
- * @constructor
21
- * @memberof ServiceState
22
- */
23
- constructor() {
24
- // Iterate over the possible catalog names and generate their states.
25
- SERVICE_CATALOGS.forEach((catalog) => {
26
- this[catalog] = ServiceState.generateCatalogState();
27
- });
28
- }
29
-
30
- /**
31
- * Set a catalog to be collecting or not.
32
- *
33
- * @public
34
- * @memberof ServiceState
35
- * @param {string} catalog - Catalog to target.
36
- * @param {boolean} collecting - If the target is collecting or not.
37
- * @returns {undefined}
38
- */
39
- setCollecting(catalog, collecting) {
40
- // Validate that the catalog state exists.
41
- if (this[catalog]) {
42
- // Set the 'collecting' status of the catalog state.
43
- this[catalog].collecting = collecting;
44
- }
45
- }
46
-
47
- /**
48
- * Set a catalog to be ready or not.
49
- *
50
- * @public
51
- * @memberof ServiceState
52
- * @param {string} catalog - Catalog to target.
53
- * @param {boolean} ready - If the target is ready or not.
54
- * @returns {undefined}
55
- */
56
- setReady(catalog, ready) {
57
- // Validate that the catalog state exists.
58
- if (this[catalog]) {
59
- // Set the 'ready' status of the catalog state.
60
- this[catalog].ready = ready;
61
- }
62
- }
63
-
64
- /**
65
- * Generate a {@link CatalogState}.
66
- *
67
- * @public
68
- * @static
69
- * @memberof ServiceState
70
- * @returns {CatalogState} - The generated {@link CatalogState}.
71
- */
72
- static generateCatalogState() {
73
- return {
74
- collecting: false,
75
- ready: false,
76
- };
77
- }
78
- }
1
+ import {SERVICE_CATALOGS} from './constants';
2
+
3
+ /**
4
+ * The state of a specific catalog to be used by {@link ServiceState}.
5
+ *
6
+ * @typedef {Record<string, boolean>} CatalogState
7
+ * @property {boolean} CatalogState.collecting - If the catalog is collecting.
8
+ * @property {boolean} CatalogState.ready - If the catalog is ready.
9
+ */
10
+
11
+ /**
12
+ * @class
13
+ * @classdesc - Manages the state of the service catalogs for a webex instance.
14
+ */
15
+ export default class ServiceState {
16
+ /**
17
+ * Generate a new {@link ServiceState}.
18
+ *
19
+ * @public
20
+ * @constructor
21
+ * @memberof ServiceState
22
+ */
23
+ constructor() {
24
+ // Iterate over the possible catalog names and generate their states.
25
+ SERVICE_CATALOGS.forEach((catalog) => {
26
+ this[catalog] = ServiceState.generateCatalogState();
27
+ });
28
+ }
29
+
30
+ /**
31
+ * Set a catalog to be collecting or not.
32
+ *
33
+ * @public
34
+ * @memberof ServiceState
35
+ * @param {string} catalog - Catalog to target.
36
+ * @param {boolean} collecting - If the target is collecting or not.
37
+ * @returns {undefined}
38
+ */
39
+ setCollecting(catalog, collecting) {
40
+ // Validate that the catalog state exists.
41
+ if (this[catalog]) {
42
+ // Set the 'collecting' status of the catalog state.
43
+ this[catalog].collecting = collecting;
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Set a catalog to be ready or not.
49
+ *
50
+ * @public
51
+ * @memberof ServiceState
52
+ * @param {string} catalog - Catalog to target.
53
+ * @param {boolean} ready - If the target is ready or not.
54
+ * @returns {undefined}
55
+ */
56
+ setReady(catalog, ready) {
57
+ // Validate that the catalog state exists.
58
+ if (this[catalog]) {
59
+ // Set the 'ready' status of the catalog state.
60
+ this[catalog].ready = ready;
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Generate a {@link CatalogState}.
66
+ *
67
+ * @public
68
+ * @static
69
+ * @memberof ServiceState
70
+ * @returns {CatalogState} - The generated {@link CatalogState}.
71
+ */
72
+ static generateCatalogState() {
73
+ return {
74
+ collecting: false,
75
+ ready: false,
76
+ };
77
+ }
78
+ }
@@ -1,124 +1,124 @@
1
- import Url from 'url';
2
-
3
- import AmpState from 'ampersand-state';
4
-
5
- /* eslint-disable no-underscore-dangle */
6
- /**
7
- * @class
8
- */
9
- const ServiceUrl = AmpState.extend({
10
- namespace: 'ServiceUrl',
11
-
12
- props: {
13
- defaultUrl: ['string', true, undefined],
14
- hosts: ['array', false, () => []],
15
- name: ['string', true, undefined],
16
- },
17
-
18
- /**
19
- * Generate a host url based on the host
20
- * uri provided.
21
- * @param {string} hostUri
22
- * @returns {string}
23
- */
24
- _generateHostUrl(hostUri) {
25
- const url = Url.parse(this.defaultUrl);
26
-
27
- // setting url.hostname will not apply during Url.format(), set host via
28
- // a string literal instead.
29
- url.host = `${hostUri}${url.port ? `:${url.port}` : ''}`;
30
-
31
- return Url.format(url);
32
- },
33
-
34
- /**
35
- * Generate a list of urls based on this
36
- * `ServiceUrl`'s known hosts.
37
- * @returns {string[]}
38
- */
39
- _getHostUrls() {
40
- return this.hosts.map((host) => ({
41
- url: this._generateHostUrl(host.host),
42
- priority: host.priority,
43
- }));
44
- },
45
-
46
- /**
47
- * Get the current host url with the highest priority. If a clusterId is not
48
- * provided, this will only return a URL with a filtered host that has the
49
- * `homeCluster` value set to `true`.
50
- *
51
- * @param {string} [clusterId] - The clusterId to filter for a priority host.
52
- * @returns {string} - The priority host url.
53
- */
54
- _getPriorityHostUrl(clusterId) {
55
- if (this.hosts.length === 0) {
56
- return this.defaultUrl;
57
- }
58
-
59
- let filteredHosts = clusterId
60
- ? this.hosts.filter((host) => host.id === clusterId)
61
- : this.hosts.filter((host) => host.homeCluster);
62
-
63
- const aliveHosts = filteredHosts.filter((host) => !host.failed);
64
-
65
- filteredHosts =
66
- aliveHosts.length === 0
67
- ? filteredHosts.map((host) => {
68
- /* eslint-disable-next-line no-param-reassign */
69
- host.failed = false;
70
-
71
- return host;
72
- })
73
- : aliveHosts;
74
-
75
- return this._generateHostUrl(
76
- filteredHosts.reduce(
77
- (previous, current) =>
78
- previous.priority > current.priority || !previous.homeCluster ? current : previous,
79
- {}
80
- ).host
81
- );
82
- },
83
-
84
- /**
85
- * Attempt to mark a host from this `ServiceUrl` as failed and return true
86
- * if the provided url has a host that could be successfully marked as failed.
87
- *
88
- * @param {string} url
89
- * @returns {boolean}
90
- */
91
- failHost(url) {
92
- if (url === this.defaultUrl) {
93
- return true;
94
- }
95
-
96
- const {hostname} = Url.parse(url);
97
- const foundHost = this.hosts.find((hostObj) => hostObj.host === hostname);
98
-
99
- if (foundHost) {
100
- foundHost.failed = true;
101
- }
102
-
103
- return foundHost !== undefined;
104
- },
105
-
106
- /**
107
- * Get the current `defaultUrl` or generate a url using the host with the
108
- * highest priority via host rendering.
109
- *
110
- * @param {boolean} [priorityHost] - Retrieve the priority host.
111
- * @param {string} [clusterId] - Cluster to match a host against.
112
- * @returns {string} - The full service url.
113
- */
114
- get(priorityHost, clusterId) {
115
- if (!priorityHost) {
116
- return this.defaultUrl;
117
- }
118
-
119
- return this._getPriorityHostUrl(clusterId);
120
- },
121
- });
122
- /* eslint-enable no-underscore-dangle */
123
-
124
- export default ServiceUrl;
1
+ import Url from 'url';
2
+
3
+ import AmpState from 'ampersand-state';
4
+
5
+ /* eslint-disable no-underscore-dangle */
6
+ /**
7
+ * @class
8
+ */
9
+ const ServiceUrl = AmpState.extend({
10
+ namespace: 'ServiceUrl',
11
+
12
+ props: {
13
+ defaultUrl: ['string', true, undefined],
14
+ hosts: ['array', false, () => []],
15
+ name: ['string', true, undefined],
16
+ },
17
+
18
+ /**
19
+ * Generate a host url based on the host
20
+ * uri provided.
21
+ * @param {string} hostUri
22
+ * @returns {string}
23
+ */
24
+ _generateHostUrl(hostUri) {
25
+ const url = Url.parse(this.defaultUrl);
26
+
27
+ // setting url.hostname will not apply during Url.format(), set host via
28
+ // a string literal instead.
29
+ url.host = `${hostUri}${url.port ? `:${url.port}` : ''}`;
30
+
31
+ return Url.format(url);
32
+ },
33
+
34
+ /**
35
+ * Generate a list of urls based on this
36
+ * `ServiceUrl`'s known hosts.
37
+ * @returns {string[]}
38
+ */
39
+ _getHostUrls() {
40
+ return this.hosts.map((host) => ({
41
+ url: this._generateHostUrl(host.host),
42
+ priority: host.priority,
43
+ }));
44
+ },
45
+
46
+ /**
47
+ * Get the current host url with the highest priority. If a clusterId is not
48
+ * provided, this will only return a URL with a filtered host that has the
49
+ * `homeCluster` value set to `true`.
50
+ *
51
+ * @param {string} [clusterId] - The clusterId to filter for a priority host.
52
+ * @returns {string} - The priority host url.
53
+ */
54
+ _getPriorityHostUrl(clusterId) {
55
+ if (this.hosts.length === 0) {
56
+ return this.defaultUrl;
57
+ }
58
+
59
+ let filteredHosts = clusterId
60
+ ? this.hosts.filter((host) => host.id === clusterId)
61
+ : this.hosts.filter((host) => host.homeCluster);
62
+
63
+ const aliveHosts = filteredHosts.filter((host) => !host.failed);
64
+
65
+ filteredHosts =
66
+ aliveHosts.length === 0
67
+ ? filteredHosts.map((host) => {
68
+ /* eslint-disable-next-line no-param-reassign */
69
+ host.failed = false;
70
+
71
+ return host;
72
+ })
73
+ : aliveHosts;
74
+
75
+ return this._generateHostUrl(
76
+ filteredHosts.reduce(
77
+ (previous, current) =>
78
+ previous.priority > current.priority || !previous.homeCluster ? current : previous,
79
+ {}
80
+ ).host
81
+ );
82
+ },
83
+
84
+ /**
85
+ * Attempt to mark a host from this `ServiceUrl` as failed and return true
86
+ * if the provided url has a host that could be successfully marked as failed.
87
+ *
88
+ * @param {string} url
89
+ * @returns {boolean}
90
+ */
91
+ failHost(url) {
92
+ if (url === this.defaultUrl) {
93
+ return true;
94
+ }
95
+
96
+ const {hostname} = Url.parse(url);
97
+ const foundHost = this.hosts.find((hostObj) => hostObj.host === hostname);
98
+
99
+ if (foundHost) {
100
+ foundHost.failed = true;
101
+ }
102
+
103
+ return foundHost !== undefined;
104
+ },
105
+
106
+ /**
107
+ * Get the current `defaultUrl` or generate a url using the host with the
108
+ * highest priority via host rendering.
109
+ *
110
+ * @param {boolean} [priorityHost] - Retrieve the priority host.
111
+ * @param {string} [clusterId] - Cluster to match a host against.
112
+ * @returns {string} - The full service url.
113
+ */
114
+ get(priorityHost, clusterId) {
115
+ if (!priorityHost) {
116
+ return this.defaultUrl;
117
+ }
118
+
119
+ return this._getPriorityHostUrl(clusterId);
120
+ },
121
+ });
122
+ /* eslint-enable no-underscore-dangle */
123
+
124
+ export default ServiceUrl;