@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.
- package/.eslintrc.js +6 -6
- package/README.md +79 -79
- package/babel.config.js +3 -3
- package/dist/config.js +24 -24
- package/dist/config.js.map +1 -1
- package/dist/credentials-config.js +56 -56
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js +28 -28
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js +24 -24
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js +9 -9
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/network-timing.js +19 -19
- package/dist/interceptors/network-timing.js.map +1 -1
- package/dist/interceptors/payload-transformer.js +19 -19
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js +40 -40
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js +13 -13
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js +23 -23
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js +13 -13
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/request-timing.js +23 -23
- package/dist/interceptors/request-timing.js.map +1 -1
- package/dist/interceptors/response-logger.js +19 -19
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js +29 -29
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-tracking-id.js +15 -15
- package/dist/interceptors/webex-tracking-id.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js +13 -13
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +83 -83
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +103 -103
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js +17 -17
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js +2 -2
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js +11 -11
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js +2 -2
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +145 -145
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +49 -49
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js +2 -2
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js +9 -9
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +24 -24
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js +104 -104
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js +134 -134
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js +175 -175
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js +38 -38
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js +31 -31
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +245 -245
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js +28 -28
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js +27 -27
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/errors.js +4 -4
- package/dist/lib/storage/errors.js.map +1 -1
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js +44 -44
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js +40 -40
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js +9 -9
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js +13 -13
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js +9 -9
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js +13 -13
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js +36 -36
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +9 -9
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +104 -104
- package/dist/webex-core.js.map +1 -1
- package/dist/webex-internal-core.js +12 -12
- package/dist/webex-internal-core.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +19 -20
- package/process +1 -1
- package/src/config.js +90 -90
- package/src/credentials-config.js +212 -212
- package/src/index.js +62 -62
- package/src/interceptors/auth.js +186 -186
- package/src/interceptors/default-options.js +55 -55
- package/src/interceptors/embargo.js +43 -43
- package/src/interceptors/network-timing.js +54 -54
- package/src/interceptors/payload-transformer.js +55 -55
- package/src/interceptors/rate-limit.js +169 -169
- package/src/interceptors/redirect.js +106 -106
- package/src/interceptors/request-event.js +93 -93
- package/src/interceptors/request-logger.js +78 -78
- package/src/interceptors/request-timing.js +65 -65
- package/src/interceptors/response-logger.js +98 -98
- package/src/interceptors/user-agent.js +77 -77
- package/src/interceptors/webex-tracking-id.js +73 -73
- package/src/interceptors/webex-user-agent.js +79 -79
- package/src/lib/batcher.js +307 -307
- package/src/lib/credentials/credentials.js +552 -552
- package/src/lib/credentials/grant-errors.js +92 -92
- package/src/lib/credentials/index.js +16 -16
- package/src/lib/credentials/scope.js +34 -34
- package/src/lib/credentials/token-collection.js +17 -17
- package/src/lib/credentials/token.js +559 -559
- package/src/lib/page.js +159 -159
- package/src/lib/services/constants.js +9 -9
- package/src/lib/services/index.js +26 -26
- package/src/lib/services/interceptors/server-error.js +48 -48
- package/src/lib/services/interceptors/service.js +101 -101
- package/src/lib/services/metrics.js +4 -4
- package/src/lib/services/service-catalog.js +435 -435
- package/src/lib/services/service-fed-ramp.js +4 -4
- package/src/lib/services/service-host.js +267 -267
- package/src/lib/services/service-registry.js +465 -465
- package/src/lib/services/service-state.js +78 -78
- package/src/lib/services/service-url.js +124 -124
- package/src/lib/services/services.js +1018 -1018
- package/src/lib/stateless-webex-plugin.js +98 -98
- package/src/lib/storage/decorators.js +220 -220
- package/src/lib/storage/errors.js +15 -15
- package/src/lib/storage/index.js +10 -10
- package/src/lib/storage/make-webex-plugin-store.js +211 -211
- package/src/lib/storage/make-webex-store.js +140 -140
- package/src/lib/storage/memory-store-adapter.js +79 -79
- package/src/lib/webex-core-plugin-mixin.js +114 -114
- package/src/lib/webex-http-error.js +61 -61
- package/src/lib/webex-internal-core-plugin-mixin.js +107 -107
- package/src/lib/webex-plugin.js +222 -222
- package/src/plugins/logger.js +60 -60
- package/src/webex-core.js +745 -745
- package/src/webex-internal-core.js +46 -46
- package/test/integration/spec/credentials/credentials.js +139 -139
- package/test/integration/spec/credentials/token.js +102 -102
- package/test/integration/spec/services/service-catalog.js +838 -838
- package/test/integration/spec/services/services.js +1221 -1221
- package/test/integration/spec/webex-core.js +178 -178
- package/test/unit/spec/_setup.js +44 -44
- package/test/unit/spec/credentials/credentials.js +1017 -1017
- package/test/unit/spec/credentials/token.js +441 -441
- package/test/unit/spec/interceptors/auth.js +521 -521
- package/test/unit/spec/interceptors/default-options.js +84 -84
- package/test/unit/spec/interceptors/embargo.js +144 -144
- package/test/unit/spec/interceptors/network-timing.js +49 -49
- package/test/unit/spec/interceptors/payload-transformer.js +155 -155
- package/test/unit/spec/interceptors/rate-limit.js +302 -302
- package/test/unit/spec/interceptors/redirect.js +102 -102
- package/test/unit/spec/interceptors/request-timing.js +92 -92
- package/test/unit/spec/interceptors/user-agent.js +76 -76
- package/test/unit/spec/interceptors/webex-tracking-id.js +76 -76
- package/test/unit/spec/interceptors/webex-user-agent.js +159 -159
- package/test/unit/spec/lib/batcher.js +330 -330
- package/test/unit/spec/lib/page.js +148 -148
- package/test/unit/spec/lib/webex-plugin.js +48 -48
- package/test/unit/spec/services/interceptors/server-error.js +204 -204
- package/test/unit/spec/services/interceptors/service.js +188 -188
- package/test/unit/spec/services/service-catalog.js +194 -194
- package/test/unit/spec/services/service-host.js +260 -260
- package/test/unit/spec/services/service-registry.js +747 -747
- package/test/unit/spec/services/service-state.js +60 -60
- package/test/unit/spec/services/service-url.js +258 -258
- package/test/unit/spec/services/services.js +348 -348
- package/test/unit/spec/storage/persist.js +50 -50
- package/test/unit/spec/storage/storage-adapter.js +12 -12
- package/test/unit/spec/storage/wait-for-value.js +81 -81
- package/test/unit/spec/webex-core.js +253 -253
- package/test/unit/spec/webex-internal-core.js +91 -91
|
@@ -1,140 +1,140 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import Events from 'ampersand-events';
|
|
6
|
-
import {oneFlight} from '@webex/common';
|
|
7
|
-
|
|
8
|
-
const bindings = new WeakMap();
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Makes a WebexStore for the specified type bound to the specified webex instance
|
|
12
|
-
* @param {string} type
|
|
13
|
-
* @param {ProxyWebex} webex
|
|
14
|
-
* @private
|
|
15
|
-
* @returns {WebexStore}
|
|
16
|
-
*/
|
|
17
|
-
export default function makeWebexStore(type, webex) {
|
|
18
|
-
/**
|
|
19
|
-
* Lazy Key-Value Store Interface
|
|
20
|
-
*/
|
|
21
|
-
class WebexStore {
|
|
22
|
-
/**
|
|
23
|
-
* @param {Object} attrs
|
|
24
|
-
* @param {Object} options
|
|
25
|
-
* @returns {Store}
|
|
26
|
-
*/
|
|
27
|
-
constructor() {
|
|
28
|
-
webex.logger.debug(`webex-store: constructing ${type}Storage`);
|
|
29
|
-
bindings.set(this, new Map());
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Provides easy access to the storage adapter identified in config.
|
|
34
|
-
* @returns {Object}
|
|
35
|
-
*/
|
|
36
|
-
get adapter() {
|
|
37
|
-
return webex.config.storage[`${type}Adapter`];
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* @returns {WeakMap}
|
|
42
|
-
*/
|
|
43
|
-
get bindings() {
|
|
44
|
-
return bindings.get(this);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Clears the store
|
|
49
|
-
* @returns {Promise}
|
|
50
|
-
*/
|
|
51
|
-
clear() {
|
|
52
|
-
const promises = [];
|
|
53
|
-
|
|
54
|
-
this.bindings.forEach((binding) => {
|
|
55
|
-
promises.push(binding.clear());
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
return Promise.all(promises);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Deletes the specified key from the store
|
|
63
|
-
* @param {string} namespace
|
|
64
|
-
* @param {string} key
|
|
65
|
-
* @returns {[type]}
|
|
66
|
-
*/
|
|
67
|
-
del(namespace, key) {
|
|
68
|
-
webex.logger.debug(`webex-store: removing ${namespace}:${key}`);
|
|
69
|
-
|
|
70
|
-
return this._getBinding(namespace).then((binding) => binding.del(key));
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Retrieves the value specified by key from the store. Rejects with
|
|
75
|
-
* NotFoundError if no value can be found
|
|
76
|
-
* @param {string} namespace
|
|
77
|
-
* @param {string} key
|
|
78
|
-
* @returns {Promise}
|
|
79
|
-
*/
|
|
80
|
-
get(namespace, key) {
|
|
81
|
-
webex.logger.debug(`webex-store: retrieving ${namespace}:${key}`);
|
|
82
|
-
|
|
83
|
-
return this._getBinding(namespace).then((binding) => binding.get(key));
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Writes a value to the store. Deletes the specified key from the store
|
|
88
|
-
* if passed `undefined`
|
|
89
|
-
* @param {string} namespace
|
|
90
|
-
* @param {string} key
|
|
91
|
-
* @param {any} value
|
|
92
|
-
* @returns {Promise} Resolves with value (to simplify write-through caching)
|
|
93
|
-
*/
|
|
94
|
-
put(namespace, key, value) {
|
|
95
|
-
if (typeof value === 'undefined') {
|
|
96
|
-
return this.del(namespace, key);
|
|
97
|
-
}
|
|
98
|
-
webex.logger.debug(`webex-store: setting ${namespace}:${key}`);
|
|
99
|
-
|
|
100
|
-
return this._getBinding(namespace)
|
|
101
|
-
.then((binding) => binding.put(key, value.serialize ? value.serialize() : value))
|
|
102
|
-
.then(() => value);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
@oneFlight({keyFactory: (namespace) => namespace})
|
|
106
|
-
/**
|
|
107
|
-
* Creates an interface bound to the specified namespace
|
|
108
|
-
* @param {string} namespace
|
|
109
|
-
* @private
|
|
110
|
-
* @returns {Promise}
|
|
111
|
-
*/
|
|
112
|
-
// suppress doc warning because decorators confuse eslint
|
|
113
|
-
// eslint-disable-next-line require-jsdoc
|
|
114
|
-
_getBinding(namespace) {
|
|
115
|
-
return new Promise((resolve) => {
|
|
116
|
-
webex.logger.debug(`storage: getting binding for \`${namespace}\``);
|
|
117
|
-
const binding = this.bindings.get(namespace);
|
|
118
|
-
|
|
119
|
-
if (binding) {
|
|
120
|
-
webex.logger.debug(`storage: found binding for \`${namespace}\``);
|
|
121
|
-
|
|
122
|
-
return resolve(binding);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return resolve(
|
|
126
|
-
this.adapter.bind(namespace, {logger: webex.logger}).then((_binding) => {
|
|
127
|
-
webex.logger.debug(`storage: made binding for \`${namespace}\``);
|
|
128
|
-
this.bindings.set(namespace, _binding);
|
|
129
|
-
|
|
130
|
-
return _binding;
|
|
131
|
-
})
|
|
132
|
-
);
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
Object.assign(WebexStore.prototype, Events);
|
|
138
|
-
|
|
139
|
-
return new WebexStore();
|
|
140
|
-
}
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import Events from 'ampersand-events';
|
|
6
|
+
import {oneFlight} from '@webex/common';
|
|
7
|
+
|
|
8
|
+
const bindings = new WeakMap();
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Makes a WebexStore for the specified type bound to the specified webex instance
|
|
12
|
+
* @param {string} type
|
|
13
|
+
* @param {ProxyWebex} webex
|
|
14
|
+
* @private
|
|
15
|
+
* @returns {WebexStore}
|
|
16
|
+
*/
|
|
17
|
+
export default function makeWebexStore(type, webex) {
|
|
18
|
+
/**
|
|
19
|
+
* Lazy Key-Value Store Interface
|
|
20
|
+
*/
|
|
21
|
+
class WebexStore {
|
|
22
|
+
/**
|
|
23
|
+
* @param {Object} attrs
|
|
24
|
+
* @param {Object} options
|
|
25
|
+
* @returns {Store}
|
|
26
|
+
*/
|
|
27
|
+
constructor() {
|
|
28
|
+
webex.logger.debug(`webex-store: constructing ${type}Storage`);
|
|
29
|
+
bindings.set(this, new Map());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Provides easy access to the storage adapter identified in config.
|
|
34
|
+
* @returns {Object}
|
|
35
|
+
*/
|
|
36
|
+
get adapter() {
|
|
37
|
+
return webex.config.storage[`${type}Adapter`];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @returns {WeakMap}
|
|
42
|
+
*/
|
|
43
|
+
get bindings() {
|
|
44
|
+
return bindings.get(this);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Clears the store
|
|
49
|
+
* @returns {Promise}
|
|
50
|
+
*/
|
|
51
|
+
clear() {
|
|
52
|
+
const promises = [];
|
|
53
|
+
|
|
54
|
+
this.bindings.forEach((binding) => {
|
|
55
|
+
promises.push(binding.clear());
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return Promise.all(promises);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Deletes the specified key from the store
|
|
63
|
+
* @param {string} namespace
|
|
64
|
+
* @param {string} key
|
|
65
|
+
* @returns {[type]}
|
|
66
|
+
*/
|
|
67
|
+
del(namespace, key) {
|
|
68
|
+
webex.logger.debug(`webex-store: removing ${namespace}:${key}`);
|
|
69
|
+
|
|
70
|
+
return this._getBinding(namespace).then((binding) => binding.del(key));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Retrieves the value specified by key from the store. Rejects with
|
|
75
|
+
* NotFoundError if no value can be found
|
|
76
|
+
* @param {string} namespace
|
|
77
|
+
* @param {string} key
|
|
78
|
+
* @returns {Promise}
|
|
79
|
+
*/
|
|
80
|
+
get(namespace, key) {
|
|
81
|
+
webex.logger.debug(`webex-store: retrieving ${namespace}:${key}`);
|
|
82
|
+
|
|
83
|
+
return this._getBinding(namespace).then((binding) => binding.get(key));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Writes a value to the store. Deletes the specified key from the store
|
|
88
|
+
* if passed `undefined`
|
|
89
|
+
* @param {string} namespace
|
|
90
|
+
* @param {string} key
|
|
91
|
+
* @param {any} value
|
|
92
|
+
* @returns {Promise} Resolves with value (to simplify write-through caching)
|
|
93
|
+
*/
|
|
94
|
+
put(namespace, key, value) {
|
|
95
|
+
if (typeof value === 'undefined') {
|
|
96
|
+
return this.del(namespace, key);
|
|
97
|
+
}
|
|
98
|
+
webex.logger.debug(`webex-store: setting ${namespace}:${key}`);
|
|
99
|
+
|
|
100
|
+
return this._getBinding(namespace)
|
|
101
|
+
.then((binding) => binding.put(key, value.serialize ? value.serialize() : value))
|
|
102
|
+
.then(() => value);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
@oneFlight({keyFactory: (namespace) => namespace})
|
|
106
|
+
/**
|
|
107
|
+
* Creates an interface bound to the specified namespace
|
|
108
|
+
* @param {string} namespace
|
|
109
|
+
* @private
|
|
110
|
+
* @returns {Promise}
|
|
111
|
+
*/
|
|
112
|
+
// suppress doc warning because decorators confuse eslint
|
|
113
|
+
// eslint-disable-next-line require-jsdoc
|
|
114
|
+
_getBinding(namespace) {
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
webex.logger.debug(`storage: getting binding for \`${namespace}\``);
|
|
117
|
+
const binding = this.bindings.get(namespace);
|
|
118
|
+
|
|
119
|
+
if (binding) {
|
|
120
|
+
webex.logger.debug(`storage: found binding for \`${namespace}\``);
|
|
121
|
+
|
|
122
|
+
return resolve(binding);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return resolve(
|
|
126
|
+
this.adapter.bind(namespace, {logger: webex.logger}).then((_binding) => {
|
|
127
|
+
webex.logger.debug(`storage: made binding for \`${namespace}\``);
|
|
128
|
+
this.bindings.set(namespace, _binding);
|
|
129
|
+
|
|
130
|
+
return _binding;
|
|
131
|
+
})
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
Object.assign(WebexStore.prototype, Events);
|
|
138
|
+
|
|
139
|
+
return new WebexStore();
|
|
140
|
+
}
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {NotFoundError} from './errors';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Binds a namespace
|
|
9
|
-
* @param {string} namespace
|
|
10
|
-
* @param {Object} options
|
|
11
|
-
* @param {Object} options.data
|
|
12
|
-
* @private
|
|
13
|
-
* @returns {Promise<Object>}
|
|
14
|
-
*/
|
|
15
|
-
function _bind(namespace, options = {}) {
|
|
16
|
-
options = options || {};
|
|
17
|
-
if (!namespace) {
|
|
18
|
-
return Promise.reject(new Error('`namespace` is required'));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (!options.logger) {
|
|
22
|
-
return Promise.reject(new Error('`options.logger` is required'));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const {logger} = options;
|
|
26
|
-
|
|
27
|
-
const map = new Map([['@', {}]]);
|
|
28
|
-
|
|
29
|
-
if (options.data) {
|
|
30
|
-
Object.keys(options.data).forEach((key) => {
|
|
31
|
-
map.set(key, options.data[key]);
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
logger.debug('memory-store-adapter: returning binding');
|
|
36
|
-
|
|
37
|
-
return Promise.resolve({
|
|
38
|
-
clear() {
|
|
39
|
-
logger.debug('memory-store-adapter: clearing the binding');
|
|
40
|
-
|
|
41
|
-
return Promise.resolve(map.clear());
|
|
42
|
-
},
|
|
43
|
-
del(key) {
|
|
44
|
-
logger.debug(`memory-store-adapter: deleting \`${key}\``);
|
|
45
|
-
|
|
46
|
-
return Promise.resolve(map.delete(key));
|
|
47
|
-
},
|
|
48
|
-
get(key) {
|
|
49
|
-
logger.debug(`memory-store-adapter: reading \`${key}\``);
|
|
50
|
-
const res = map.get(key);
|
|
51
|
-
|
|
52
|
-
if (typeof res === 'undefined') {
|
|
53
|
-
return Promise.reject(new NotFoundError());
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return Promise.resolve(res);
|
|
57
|
-
},
|
|
58
|
-
put(key, value) {
|
|
59
|
-
logger.debug(`memory-store-adapter: writing \`${key}\``);
|
|
60
|
-
|
|
61
|
-
return Promise.resolve(map.set(key, value));
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export default {
|
|
67
|
-
bind: _bind,
|
|
68
|
-
preload(data) {
|
|
69
|
-
return {
|
|
70
|
-
bind(namespace, options = {}) {
|
|
71
|
-
if (data[namespace]) {
|
|
72
|
-
options.data = data[namespace];
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
return _bind(namespace, options);
|
|
76
|
-
},
|
|
77
|
-
};
|
|
78
|
-
},
|
|
79
|
-
};
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {NotFoundError} from './errors';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Binds a namespace
|
|
9
|
+
* @param {string} namespace
|
|
10
|
+
* @param {Object} options
|
|
11
|
+
* @param {Object} options.data
|
|
12
|
+
* @private
|
|
13
|
+
* @returns {Promise<Object>}
|
|
14
|
+
*/
|
|
15
|
+
function _bind(namespace, options = {}) {
|
|
16
|
+
options = options || {};
|
|
17
|
+
if (!namespace) {
|
|
18
|
+
return Promise.reject(new Error('`namespace` is required'));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (!options.logger) {
|
|
22
|
+
return Promise.reject(new Error('`options.logger` is required'));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const {logger} = options;
|
|
26
|
+
|
|
27
|
+
const map = new Map([['@', {}]]);
|
|
28
|
+
|
|
29
|
+
if (options.data) {
|
|
30
|
+
Object.keys(options.data).forEach((key) => {
|
|
31
|
+
map.set(key, options.data[key]);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
logger.debug('memory-store-adapter: returning binding');
|
|
36
|
+
|
|
37
|
+
return Promise.resolve({
|
|
38
|
+
clear() {
|
|
39
|
+
logger.debug('memory-store-adapter: clearing the binding');
|
|
40
|
+
|
|
41
|
+
return Promise.resolve(map.clear());
|
|
42
|
+
},
|
|
43
|
+
del(key) {
|
|
44
|
+
logger.debug(`memory-store-adapter: deleting \`${key}\``);
|
|
45
|
+
|
|
46
|
+
return Promise.resolve(map.delete(key));
|
|
47
|
+
},
|
|
48
|
+
get(key) {
|
|
49
|
+
logger.debug(`memory-store-adapter: reading \`${key}\``);
|
|
50
|
+
const res = map.get(key);
|
|
51
|
+
|
|
52
|
+
if (typeof res === 'undefined') {
|
|
53
|
+
return Promise.reject(new NotFoundError());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return Promise.resolve(res);
|
|
57
|
+
},
|
|
58
|
+
put(key, value) {
|
|
59
|
+
logger.debug(`memory-store-adapter: writing \`${key}\``);
|
|
60
|
+
|
|
61
|
+
return Promise.resolve(map.set(key, value));
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export default {
|
|
67
|
+
bind: _bind,
|
|
68
|
+
preload(data) {
|
|
69
|
+
return {
|
|
70
|
+
bind(namespace, options = {}) {
|
|
71
|
+
if (data[namespace]) {
|
|
72
|
+
options.data = data[namespace];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return _bind(namespace, options);
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
};
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import {get, has, isArray, isFunction, merge, union} from 'lodash';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Mixes a plugin system into an AmpState object (specifically, into WebexCore)
|
|
9
|
-
* @param {AmpState} State
|
|
10
|
-
* @param {Object} config
|
|
11
|
-
* @param {Object} interceptors
|
|
12
|
-
* @returns {AmpState}
|
|
13
|
-
*/
|
|
14
|
-
export default function mixinWebexCorePlugins(State, config, interceptors) {
|
|
15
|
-
// eslint-disable-next-line complexity
|
|
16
|
-
State.registerPlugin = function registerPlugin(name, constructor, options = {}) {
|
|
17
|
-
if (State.prototype._children[name] && !options.replace) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
State.prototype._children[name] = constructor;
|
|
22
|
-
|
|
23
|
-
if (options.proxies) {
|
|
24
|
-
options.proxies.forEach((key) => {
|
|
25
|
-
createDerivedProperty(State.prototype, key, {
|
|
26
|
-
deps: [`${name}.${key}`],
|
|
27
|
-
fn() {
|
|
28
|
-
return this[name][key];
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (options.interceptors) {
|
|
35
|
-
Object.keys(options.interceptors).forEach((key) => {
|
|
36
|
-
interceptors[key] = options.interceptors[key];
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (options.config) {
|
|
41
|
-
merge(config, options.config);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (has(options, 'payloadTransformer.predicates')) {
|
|
45
|
-
config.payloadTransformer.predicates = config.payloadTransformer.predicates.concat(
|
|
46
|
-
get(options, 'payloadTransformer.predicates')
|
|
47
|
-
);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (has(options, 'payloadTransformer.transforms')) {
|
|
51
|
-
config.payloadTransformer.transforms = config.payloadTransformer.transforms.concat(
|
|
52
|
-
get(options, 'payloadTransformer.transforms')
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (options.onBeforeLogout) {
|
|
57
|
-
config.onBeforeLogout = config.onBeforeLogout || [];
|
|
58
|
-
const onBeforeLogout = isArray(options.onBeforeLogout)
|
|
59
|
-
? options.onBeforeLogout
|
|
60
|
-
: [options.onBeforeLogout];
|
|
61
|
-
|
|
62
|
-
onBeforeLogout.forEach((fn) =>
|
|
63
|
-
config.onBeforeLogout.push({
|
|
64
|
-
plugin: name,
|
|
65
|
-
fn,
|
|
66
|
-
})
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Only mess with the plugin's derived properties if it's an amp-state plugin
|
|
71
|
-
if (constructor.prototype._definition && constructor.prototype._definition.ready) {
|
|
72
|
-
const {fn, depList} = State.prototype._derived.ready;
|
|
73
|
-
const def = {
|
|
74
|
-
deps: depList.concat(`${name}.ready`),
|
|
75
|
-
fn,
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
createDerivedProperty(State.prototype, 'ready', def);
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
return State;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Extracted from ampersand-state
|
|
87
|
-
* @param {Object} modelProto
|
|
88
|
-
* @param {string} name
|
|
89
|
-
* @param {Object} definition
|
|
90
|
-
* @private
|
|
91
|
-
* @returns {undefined}
|
|
92
|
-
*/
|
|
93
|
-
function createDerivedProperty(modelProto, name, definition) {
|
|
94
|
-
const def = (modelProto._derived[name] = {
|
|
95
|
-
fn: isFunction(definition) ? definition : definition.fn,
|
|
96
|
-
cache: definition.cache !== false,
|
|
97
|
-
depList: definition.deps || [],
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
// add to our shared dependency list
|
|
101
|
-
def.depList.forEach((dep) => {
|
|
102
|
-
modelProto._deps[dep] = union(modelProto._deps[dep] || [], [name]);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// defined a top-level getter for derived names
|
|
106
|
-
Reflect.defineProperty(modelProto, name, {
|
|
107
|
-
get() {
|
|
108
|
-
return this._getDerivedProperty(name);
|
|
109
|
-
},
|
|
110
|
-
set() {
|
|
111
|
-
throw new TypeError(`\`${name}\` is a derived property, it can't be set directly.`);
|
|
112
|
-
},
|
|
113
|
-
});
|
|
114
|
-
}
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {get, has, isArray, isFunction, merge, union} from 'lodash';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Mixes a plugin system into an AmpState object (specifically, into WebexCore)
|
|
9
|
+
* @param {AmpState} State
|
|
10
|
+
* @param {Object} config
|
|
11
|
+
* @param {Object} interceptors
|
|
12
|
+
* @returns {AmpState}
|
|
13
|
+
*/
|
|
14
|
+
export default function mixinWebexCorePlugins(State, config, interceptors) {
|
|
15
|
+
// eslint-disable-next-line complexity
|
|
16
|
+
State.registerPlugin = function registerPlugin(name, constructor, options = {}) {
|
|
17
|
+
if (State.prototype._children[name] && !options.replace) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
State.prototype._children[name] = constructor;
|
|
22
|
+
|
|
23
|
+
if (options.proxies) {
|
|
24
|
+
options.proxies.forEach((key) => {
|
|
25
|
+
createDerivedProperty(State.prototype, key, {
|
|
26
|
+
deps: [`${name}.${key}`],
|
|
27
|
+
fn() {
|
|
28
|
+
return this[name][key];
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (options.interceptors) {
|
|
35
|
+
Object.keys(options.interceptors).forEach((key) => {
|
|
36
|
+
interceptors[key] = options.interceptors[key];
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (options.config) {
|
|
41
|
+
merge(config, options.config);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (has(options, 'payloadTransformer.predicates')) {
|
|
45
|
+
config.payloadTransformer.predicates = config.payloadTransformer.predicates.concat(
|
|
46
|
+
get(options, 'payloadTransformer.predicates')
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (has(options, 'payloadTransformer.transforms')) {
|
|
51
|
+
config.payloadTransformer.transforms = config.payloadTransformer.transforms.concat(
|
|
52
|
+
get(options, 'payloadTransformer.transforms')
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (options.onBeforeLogout) {
|
|
57
|
+
config.onBeforeLogout = config.onBeforeLogout || [];
|
|
58
|
+
const onBeforeLogout = isArray(options.onBeforeLogout)
|
|
59
|
+
? options.onBeforeLogout
|
|
60
|
+
: [options.onBeforeLogout];
|
|
61
|
+
|
|
62
|
+
onBeforeLogout.forEach((fn) =>
|
|
63
|
+
config.onBeforeLogout.push({
|
|
64
|
+
plugin: name,
|
|
65
|
+
fn,
|
|
66
|
+
})
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Only mess with the plugin's derived properties if it's an amp-state plugin
|
|
71
|
+
if (constructor.prototype._definition && constructor.prototype._definition.ready) {
|
|
72
|
+
const {fn, depList} = State.prototype._derived.ready;
|
|
73
|
+
const def = {
|
|
74
|
+
deps: depList.concat(`${name}.ready`),
|
|
75
|
+
fn,
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
createDerivedProperty(State.prototype, 'ready', def);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
return State;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Extracted from ampersand-state
|
|
87
|
+
* @param {Object} modelProto
|
|
88
|
+
* @param {string} name
|
|
89
|
+
* @param {Object} definition
|
|
90
|
+
* @private
|
|
91
|
+
* @returns {undefined}
|
|
92
|
+
*/
|
|
93
|
+
function createDerivedProperty(modelProto, name, definition) {
|
|
94
|
+
const def = (modelProto._derived[name] = {
|
|
95
|
+
fn: isFunction(definition) ? definition : definition.fn,
|
|
96
|
+
cache: definition.cache !== false,
|
|
97
|
+
depList: definition.deps || [],
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// add to our shared dependency list
|
|
101
|
+
def.depList.forEach((dep) => {
|
|
102
|
+
modelProto._deps[dep] = union(modelProto._deps[dep] || [], [name]);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
// defined a top-level getter for derived names
|
|
106
|
+
Reflect.defineProperty(modelProto, name, {
|
|
107
|
+
get() {
|
|
108
|
+
return this._getDerivedProperty(name);
|
|
109
|
+
},
|
|
110
|
+
set() {
|
|
111
|
+
throw new TypeError(`\`${name}\` is a derived property, it can't be set directly.`);
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|