@webex/webex-core 2.59.1 → 2.59.3-next.1
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 +20 -19
- 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
package/src/lib/webex-plugin.js
CHANGED
|
@@ -1,222 +1,222 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import util from 'util';
|
|
6
|
-
|
|
7
|
-
import AmpState from 'ampersand-state';
|
|
8
|
-
import {cloneDeep, isObject, omit} from 'lodash';
|
|
9
|
-
|
|
10
|
-
import {makeWebexPluginStore} from './storage';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @class
|
|
14
|
-
*/
|
|
15
|
-
const WebexPlugin = AmpState.extend({
|
|
16
|
-
derived: {
|
|
17
|
-
boundedStorage: {
|
|
18
|
-
deps: [],
|
|
19
|
-
fn() {
|
|
20
|
-
return makeWebexPluginStore('bounded', this);
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
unboundedStorage: {
|
|
24
|
-
deps: [],
|
|
25
|
-
fn() {
|
|
26
|
-
return makeWebexPluginStore('unbounded', this);
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
config: {
|
|
30
|
-
// figure out why caching config breaks the refresh integration test
|
|
31
|
-
// but not the refresh automation test.
|
|
32
|
-
cache: false,
|
|
33
|
-
deps: ['webex', 'webex.config'],
|
|
34
|
-
fn() {
|
|
35
|
-
if (this.webex && this.webex.config) {
|
|
36
|
-
const namespace = this.getNamespace();
|
|
37
|
-
|
|
38
|
-
if (namespace) {
|
|
39
|
-
return this.webex.config[namespace.toLowerCase()];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return this.webex.config;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return {};
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
|
|
49
|
-
logger: {
|
|
50
|
-
deps: ['webex', 'webex.logger'],
|
|
51
|
-
fn() {
|
|
52
|
-
return this.webex.logger || console;
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
|
|
56
|
-
webex: {
|
|
57
|
-
deps: ['parent'],
|
|
58
|
-
fn() {
|
|
59
|
-
if (!this.parent && !this.collection) {
|
|
60
|
-
throw new Error(
|
|
61
|
-
'Cannot determine `this.webex` without `this.parent` or `this.collection`. Please initialize `this` via `children` or `collection` or set `this.parent` manually'
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/* eslint consistent-this: [0] */
|
|
66
|
-
let parent = this;
|
|
67
|
-
|
|
68
|
-
while (parent.parent || parent.collection) {
|
|
69
|
-
parent = parent.parent || parent.collection;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return parent;
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
|
|
77
|
-
session: {
|
|
78
|
-
parent: {
|
|
79
|
-
type: 'any',
|
|
80
|
-
},
|
|
81
|
-
/**
|
|
82
|
-
* Indicates this plugin is ready to be used. Defaults to true but can be
|
|
83
|
-
* overridden by plugins as appropriate. Used by {@link WebexCore#read}
|
|
84
|
-
* @instance
|
|
85
|
-
* @memberof WebexPlugin
|
|
86
|
-
* @type {boolean}
|
|
87
|
-
*/
|
|
88
|
-
ready: {
|
|
89
|
-
default: true,
|
|
90
|
-
type: 'boolean',
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Overrides AmpersandState#clear to make sure we never unset `parent` and
|
|
96
|
-
* recursively visits children/collections.
|
|
97
|
-
* @instance
|
|
98
|
-
* @memberof WebexPlugin
|
|
99
|
-
* @param {Object} options
|
|
100
|
-
* @returns {WebexPlugin}
|
|
101
|
-
*/
|
|
102
|
-
clear(options) {
|
|
103
|
-
Object.keys(this.attributes).forEach((key) => {
|
|
104
|
-
if (key !== 'parent') {
|
|
105
|
-
this.unset(key, options);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
Object.keys(this._children).forEach((key) => {
|
|
110
|
-
this[key].clear();
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
Object.keys(this._collections).forEach((key) => {
|
|
114
|
-
this[key].reset();
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
return this;
|
|
118
|
-
},
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Initializer
|
|
122
|
-
* @private
|
|
123
|
-
* @param {Object} attrs
|
|
124
|
-
* @param {Object} options
|
|
125
|
-
* @returns {undefined}
|
|
126
|
-
*/
|
|
127
|
-
initialize(...args) {
|
|
128
|
-
Reflect.apply(AmpState.prototype.initialize, this, args);
|
|
129
|
-
|
|
130
|
-
// HACK to deal with the fact that AmpersandState#dataTypes#set is a pure
|
|
131
|
-
// function.
|
|
132
|
-
this._dataTypes = cloneDeep(this._dataTypes);
|
|
133
|
-
Object.keys(this._dataTypes).forEach((key) => {
|
|
134
|
-
if (this._dataTypes[key].set) {
|
|
135
|
-
this._dataTypes[key].set = this._dataTypes[key].set.bind(this);
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
// END HACK
|
|
139
|
-
|
|
140
|
-
// Propagate change:[attribute] events from children
|
|
141
|
-
this.on('change', (model, options) => {
|
|
142
|
-
if (this.parent) {
|
|
143
|
-
this.parent.trigger(
|
|
144
|
-
`change:${this.getNamespace().toLowerCase()}`,
|
|
145
|
-
this.parent,
|
|
146
|
-
this,
|
|
147
|
-
options
|
|
148
|
-
);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
},
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* @instance
|
|
155
|
-
* @memberof WebexPlugin
|
|
156
|
-
* @param {number} depth
|
|
157
|
-
* @private
|
|
158
|
-
* @returns {Object}
|
|
159
|
-
*/
|
|
160
|
-
inspect(depth) {
|
|
161
|
-
return util.inspect(
|
|
162
|
-
omit(
|
|
163
|
-
this.serialize({
|
|
164
|
-
props: true,
|
|
165
|
-
session: true,
|
|
166
|
-
derived: true,
|
|
167
|
-
}),
|
|
168
|
-
'boundedStorage',
|
|
169
|
-
'unboundedStorage',
|
|
170
|
-
'config',
|
|
171
|
-
'logger',
|
|
172
|
-
'webex',
|
|
173
|
-
'parent'
|
|
174
|
-
),
|
|
175
|
-
{depth}
|
|
176
|
-
);
|
|
177
|
-
},
|
|
178
|
-
|
|
179
|
-
request(...args) {
|
|
180
|
-
return this.webex.request(...args);
|
|
181
|
-
},
|
|
182
|
-
|
|
183
|
-
upload(...args) {
|
|
184
|
-
return this.webex.upload(...args);
|
|
185
|
-
},
|
|
186
|
-
|
|
187
|
-
when(eventName, ...rest) {
|
|
188
|
-
if (rest && rest.length > 0) {
|
|
189
|
-
throw new Error('#when() does not accept a callback, you must attach to its promise');
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
return new Promise((resolve) => {
|
|
193
|
-
this.once(eventName, (...args) => resolve(args));
|
|
194
|
-
});
|
|
195
|
-
},
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Helper function for dealing with both forms of {@link AmpersandState#set()}
|
|
199
|
-
* @param {string} key
|
|
200
|
-
* @param {mixed} value
|
|
201
|
-
* @param {Object} options
|
|
202
|
-
* @private
|
|
203
|
-
* @returns {Array<Object, Object>}
|
|
204
|
-
*/
|
|
205
|
-
_filterSetParameters(key, value, options) {
|
|
206
|
-
let attrs;
|
|
207
|
-
|
|
208
|
-
if (isObject(key) || key === null) {
|
|
209
|
-
attrs = key;
|
|
210
|
-
options = value;
|
|
211
|
-
} else {
|
|
212
|
-
attrs = {};
|
|
213
|
-
attrs[key] = value;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
options = options || {};
|
|
217
|
-
|
|
218
|
-
return [attrs, options];
|
|
219
|
-
},
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
export default WebexPlugin;
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import util from 'util';
|
|
6
|
+
|
|
7
|
+
import AmpState from 'ampersand-state';
|
|
8
|
+
import {cloneDeep, isObject, omit} from 'lodash';
|
|
9
|
+
|
|
10
|
+
import {makeWebexPluginStore} from './storage';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @class
|
|
14
|
+
*/
|
|
15
|
+
const WebexPlugin = AmpState.extend({
|
|
16
|
+
derived: {
|
|
17
|
+
boundedStorage: {
|
|
18
|
+
deps: [],
|
|
19
|
+
fn() {
|
|
20
|
+
return makeWebexPluginStore('bounded', this);
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
unboundedStorage: {
|
|
24
|
+
deps: [],
|
|
25
|
+
fn() {
|
|
26
|
+
return makeWebexPluginStore('unbounded', this);
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
config: {
|
|
30
|
+
// figure out why caching config breaks the refresh integration test
|
|
31
|
+
// but not the refresh automation test.
|
|
32
|
+
cache: false,
|
|
33
|
+
deps: ['webex', 'webex.config'],
|
|
34
|
+
fn() {
|
|
35
|
+
if (this.webex && this.webex.config) {
|
|
36
|
+
const namespace = this.getNamespace();
|
|
37
|
+
|
|
38
|
+
if (namespace) {
|
|
39
|
+
return this.webex.config[namespace.toLowerCase()];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return this.webex.config;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {};
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
logger: {
|
|
50
|
+
deps: ['webex', 'webex.logger'],
|
|
51
|
+
fn() {
|
|
52
|
+
return this.webex.logger || console;
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
webex: {
|
|
57
|
+
deps: ['parent'],
|
|
58
|
+
fn() {
|
|
59
|
+
if (!this.parent && !this.collection) {
|
|
60
|
+
throw new Error(
|
|
61
|
+
'Cannot determine `this.webex` without `this.parent` or `this.collection`. Please initialize `this` via `children` or `collection` or set `this.parent` manually'
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* eslint consistent-this: [0] */
|
|
66
|
+
let parent = this;
|
|
67
|
+
|
|
68
|
+
while (parent.parent || parent.collection) {
|
|
69
|
+
parent = parent.parent || parent.collection;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return parent;
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
session: {
|
|
78
|
+
parent: {
|
|
79
|
+
type: 'any',
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* Indicates this plugin is ready to be used. Defaults to true but can be
|
|
83
|
+
* overridden by plugins as appropriate. Used by {@link WebexCore#read}
|
|
84
|
+
* @instance
|
|
85
|
+
* @memberof WebexPlugin
|
|
86
|
+
* @type {boolean}
|
|
87
|
+
*/
|
|
88
|
+
ready: {
|
|
89
|
+
default: true,
|
|
90
|
+
type: 'boolean',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Overrides AmpersandState#clear to make sure we never unset `parent` and
|
|
96
|
+
* recursively visits children/collections.
|
|
97
|
+
* @instance
|
|
98
|
+
* @memberof WebexPlugin
|
|
99
|
+
* @param {Object} options
|
|
100
|
+
* @returns {WebexPlugin}
|
|
101
|
+
*/
|
|
102
|
+
clear(options) {
|
|
103
|
+
Object.keys(this.attributes).forEach((key) => {
|
|
104
|
+
if (key !== 'parent') {
|
|
105
|
+
this.unset(key, options);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
Object.keys(this._children).forEach((key) => {
|
|
110
|
+
this[key].clear();
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
Object.keys(this._collections).forEach((key) => {
|
|
114
|
+
this[key].reset();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
return this;
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Initializer
|
|
122
|
+
* @private
|
|
123
|
+
* @param {Object} attrs
|
|
124
|
+
* @param {Object} options
|
|
125
|
+
* @returns {undefined}
|
|
126
|
+
*/
|
|
127
|
+
initialize(...args) {
|
|
128
|
+
Reflect.apply(AmpState.prototype.initialize, this, args);
|
|
129
|
+
|
|
130
|
+
// HACK to deal with the fact that AmpersandState#dataTypes#set is a pure
|
|
131
|
+
// function.
|
|
132
|
+
this._dataTypes = cloneDeep(this._dataTypes);
|
|
133
|
+
Object.keys(this._dataTypes).forEach((key) => {
|
|
134
|
+
if (this._dataTypes[key].set) {
|
|
135
|
+
this._dataTypes[key].set = this._dataTypes[key].set.bind(this);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
// END HACK
|
|
139
|
+
|
|
140
|
+
// Propagate change:[attribute] events from children
|
|
141
|
+
this.on('change', (model, options) => {
|
|
142
|
+
if (this.parent) {
|
|
143
|
+
this.parent.trigger(
|
|
144
|
+
`change:${this.getNamespace().toLowerCase()}`,
|
|
145
|
+
this.parent,
|
|
146
|
+
this,
|
|
147
|
+
options
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
},
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @instance
|
|
155
|
+
* @memberof WebexPlugin
|
|
156
|
+
* @param {number} depth
|
|
157
|
+
* @private
|
|
158
|
+
* @returns {Object}
|
|
159
|
+
*/
|
|
160
|
+
inspect(depth) {
|
|
161
|
+
return util.inspect(
|
|
162
|
+
omit(
|
|
163
|
+
this.serialize({
|
|
164
|
+
props: true,
|
|
165
|
+
session: true,
|
|
166
|
+
derived: true,
|
|
167
|
+
}),
|
|
168
|
+
'boundedStorage',
|
|
169
|
+
'unboundedStorage',
|
|
170
|
+
'config',
|
|
171
|
+
'logger',
|
|
172
|
+
'webex',
|
|
173
|
+
'parent'
|
|
174
|
+
),
|
|
175
|
+
{depth}
|
|
176
|
+
);
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
request(...args) {
|
|
180
|
+
return this.webex.request(...args);
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
upload(...args) {
|
|
184
|
+
return this.webex.upload(...args);
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
when(eventName, ...rest) {
|
|
188
|
+
if (rest && rest.length > 0) {
|
|
189
|
+
throw new Error('#when() does not accept a callback, you must attach to its promise');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return new Promise((resolve) => {
|
|
193
|
+
this.once(eventName, (...args) => resolve(args));
|
|
194
|
+
});
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Helper function for dealing with both forms of {@link AmpersandState#set()}
|
|
199
|
+
* @param {string} key
|
|
200
|
+
* @param {mixed} value
|
|
201
|
+
* @param {Object} options
|
|
202
|
+
* @private
|
|
203
|
+
* @returns {Array<Object, Object>}
|
|
204
|
+
*/
|
|
205
|
+
_filterSetParameters(key, value, options) {
|
|
206
|
+
let attrs;
|
|
207
|
+
|
|
208
|
+
if (isObject(key) || key === null) {
|
|
209
|
+
attrs = key;
|
|
210
|
+
options = value;
|
|
211
|
+
} else {
|
|
212
|
+
attrs = {};
|
|
213
|
+
attrs[key] = value;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
options = options || {};
|
|
217
|
+
|
|
218
|
+
return [attrs, options];
|
|
219
|
+
},
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
export default WebexPlugin;
|
package/src/plugins/logger.js
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
import WebexPlugin from '../lib/webex-plugin';
|
|
5
|
-
import {registerPlugin} from '../webex-core';
|
|
6
|
-
|
|
7
|
-
const precedence = {
|
|
8
|
-
error: ['log'],
|
|
9
|
-
warn: ['error', 'log'],
|
|
10
|
-
info: ['log'],
|
|
11
|
-
debug: ['info', 'log'],
|
|
12
|
-
trace: ['debug', 'info', 'log'],
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Assigns the specified console method to Logger; uses `precedence` to fallback
|
|
17
|
-
* to other console methods if the current environment doesn't provide the
|
|
18
|
-
* specified level.
|
|
19
|
-
* @param {string} level
|
|
20
|
-
* @returns {Function}
|
|
21
|
-
*/
|
|
22
|
-
function wrapConsoleMethod(level) {
|
|
23
|
-
/* eslint no-console: [0] */
|
|
24
|
-
let impls = precedence[level];
|
|
25
|
-
|
|
26
|
-
if (impls) {
|
|
27
|
-
impls = impls.slice();
|
|
28
|
-
while (!console[level]) {
|
|
29
|
-
level = impls.pop();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return function wrappedConsoleMethod(...args) {
|
|
34
|
-
/* eslint no-invalid-this: [0] */
|
|
35
|
-
/* istanbul ignore if */
|
|
36
|
-
if (
|
|
37
|
-
process.env.NODE_ENV === 'test' &&
|
|
38
|
-
this.webex &&
|
|
39
|
-
this.webex.internal.device &&
|
|
40
|
-
this.webex.internal.device.url
|
|
41
|
-
) {
|
|
42
|
-
args.unshift(this.webex.internal.device.url.slice(-3));
|
|
43
|
-
}
|
|
44
|
-
console[level](...args);
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const Logger = WebexPlugin.extend({
|
|
49
|
-
namespace: 'Logger',
|
|
50
|
-
error: wrapConsoleMethod('error'),
|
|
51
|
-
warn: wrapConsoleMethod('warn'),
|
|
52
|
-
log: wrapConsoleMethod('log'),
|
|
53
|
-
info: wrapConsoleMethod('info'),
|
|
54
|
-
debug: wrapConsoleMethod('debug'),
|
|
55
|
-
trace: wrapConsoleMethod('trace'),
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
registerPlugin('logger', Logger);
|
|
59
|
-
|
|
60
|
-
export default Logger;
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
import WebexPlugin from '../lib/webex-plugin';
|
|
5
|
+
import {registerPlugin} from '../webex-core';
|
|
6
|
+
|
|
7
|
+
const precedence = {
|
|
8
|
+
error: ['log'],
|
|
9
|
+
warn: ['error', 'log'],
|
|
10
|
+
info: ['log'],
|
|
11
|
+
debug: ['info', 'log'],
|
|
12
|
+
trace: ['debug', 'info', 'log'],
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Assigns the specified console method to Logger; uses `precedence` to fallback
|
|
17
|
+
* to other console methods if the current environment doesn't provide the
|
|
18
|
+
* specified level.
|
|
19
|
+
* @param {string} level
|
|
20
|
+
* @returns {Function}
|
|
21
|
+
*/
|
|
22
|
+
function wrapConsoleMethod(level) {
|
|
23
|
+
/* eslint no-console: [0] */
|
|
24
|
+
let impls = precedence[level];
|
|
25
|
+
|
|
26
|
+
if (impls) {
|
|
27
|
+
impls = impls.slice();
|
|
28
|
+
while (!console[level]) {
|
|
29
|
+
level = impls.pop();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return function wrappedConsoleMethod(...args) {
|
|
34
|
+
/* eslint no-invalid-this: [0] */
|
|
35
|
+
/* istanbul ignore if */
|
|
36
|
+
if (
|
|
37
|
+
process.env.NODE_ENV === 'test' &&
|
|
38
|
+
this.webex &&
|
|
39
|
+
this.webex.internal.device &&
|
|
40
|
+
this.webex.internal.device.url
|
|
41
|
+
) {
|
|
42
|
+
args.unshift(this.webex.internal.device.url.slice(-3));
|
|
43
|
+
}
|
|
44
|
+
console[level](...args);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const Logger = WebexPlugin.extend({
|
|
49
|
+
namespace: 'Logger',
|
|
50
|
+
error: wrapConsoleMethod('error'),
|
|
51
|
+
warn: wrapConsoleMethod('warn'),
|
|
52
|
+
log: wrapConsoleMethod('log'),
|
|
53
|
+
info: wrapConsoleMethod('info'),
|
|
54
|
+
debug: wrapConsoleMethod('debug'),
|
|
55
|
+
trace: wrapConsoleMethod('trace'),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
registerPlugin('logger', Logger);
|
|
59
|
+
|
|
60
|
+
export default Logger;
|