@webex/internal-plugin-feature 3.0.0-beta.9 → 3.0.0-beta.91

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/README.md CHANGED
@@ -21,14 +21,12 @@ npm install --save @webex/internal-plugin-feature
21
21
  ## Usage
22
22
 
23
23
  ```js
24
-
25
24
  import '@webex/internal-plugin-feature';
26
25
 
27
26
  import WebexCore from '@webex/webex-core';
28
27
 
29
28
  const webex = new WebexCore();
30
- webex.internal.feature.WHATEVER
31
-
29
+ webex.internal.feature.WHATEVER;
32
30
  ```
33
31
 
34
32
  ## Maintainers
package/dist/config.js CHANGED
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.default = void 0;
10
-
11
8
  /*!
12
9
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
13
10
  */
@@ -1 +1 @@
1
- {"version":3,"names":["feature"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n feature: {}\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,OAAO,EAAE;AADI,C"}
1
+ {"version":3,"names":["feature"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n feature: {},\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,eAIe;EACbA,OAAO,EAAE,CAAC;AACZ,CAAC;AAAA"}
package/dist/feature.js CHANGED
@@ -1,31 +1,22 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
14
-
15
10
  var _apply = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/apply"));
16
-
17
11
  var _partition2 = _interopRequireDefault(require("lodash/partition"));
18
-
19
12
  require("@webex/internal-plugin-device");
20
-
21
13
  var _webexCore = require("@webex/webex-core");
22
-
23
14
  /*!
24
15
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
25
16
  */
17
+
26
18
  var Feature = _webexCore.WebexPlugin.extend({
27
19
  namespace: 'Feature',
28
-
29
20
  /**
30
21
  * Returns the value of the requested feature toggle.
31
22
  * @param {string} keyType <developer|user|entitlement>
@@ -38,21 +29,16 @@ var Feature = _webexCore.WebexPlugin.extend({
38
29
  if (keyType !== 'developer' && keyType !== 'user' && keyType !== 'entitlement') {
39
30
  return _promise.default.reject(new Error('Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted.'));
40
31
  }
41
-
42
32
  options = options || {};
43
33
  var feature = this.webex.internal.device.features[keyType].get(key);
44
-
45
34
  if (!feature) {
46
35
  return _promise.default.resolve(null);
47
36
  }
48
-
49
37
  if (options.full) {
50
38
  return _promise.default.resolve(feature.serialize());
51
39
  }
52
-
53
40
  return _promise.default.resolve(feature.value);
54
41
  },
55
-
56
42
  /**
57
43
  * Handles a feature toggle update from the server.
58
44
  * @param {Object} envelope
@@ -62,7 +48,6 @@ var Feature = _webexCore.WebexPlugin.extend({
62
48
  if (envelope && envelope.data) {
63
49
  var feature = envelope.data.featureToggle;
64
50
  var keyType = feature.type.toLowerCase();
65
-
66
51
  if (keyType === 'user' || keyType === 'developer') {
67
52
  this.webex.internal.device.features[keyType].add([feature], {
68
53
  merge: true
@@ -70,7 +55,6 @@ var Feature = _webexCore.WebexPlugin.extend({
70
55
  }
71
56
  }
72
57
  },
73
-
74
58
  /**
75
59
  * Register to listen for incoming feature events
76
60
  * @instance
@@ -79,7 +63,6 @@ var Feature = _webexCore.WebexPlugin.extend({
79
63
  listen: function listen() {
80
64
  this.listenTo(this.webex.internal.mercury, 'event:featureToggle_update', this.handleFeatureUpdate);
81
65
  },
82
-
83
66
  /**
84
67
  * Issues request to server to set a value for a feature toggle.
85
68
  * @param {string} keyType <developer|user>
@@ -89,12 +72,10 @@ var Feature = _webexCore.WebexPlugin.extend({
89
72
  */
90
73
  setFeature: function setFeature(keyType, key, value) {
91
74
  var _this = this;
92
-
93
75
  // Limit only to developer feature toggles for now.
94
76
  if (keyType !== 'developer' && keyType !== 'user') {
95
77
  return _promise.default.reject(new Error('Only `developer` and `user` feature toggles can be set.'));
96
78
  }
97
-
98
79
  return this.request({
99
80
  method: 'POST',
100
81
  api: 'feature',
@@ -110,18 +91,15 @@ var Feature = _webexCore.WebexPlugin.extend({
110
91
  });
111
92
  });
112
93
  },
113
-
114
94
  /**
115
95
  * Issues request to server to set a value for a feature toggle.
116
- * @param {array} featureList
96
+ * @param {array} featureList - in the form of `Array<{ type: 'USER' | 'DEV', key: string, val: any }>`
117
97
  * @returns {Promise} Refreshes the local device and resolves with the features endpoint`s response.
118
98
  */
119
99
  setBundledFeatures: function setBundledFeatures(featureList) {
120
100
  var _this2 = this;
121
-
122
101
  featureList.forEach(function (item) {
123
102
  item.mutable = item.mutable || 'true';
124
-
125
103
  if (item.type !== 'USER' && item.type !== 'DEV') {
126
104
  item.type = 'USER';
127
105
  }
@@ -135,11 +113,9 @@ var Feature = _webexCore.WebexPlugin.extend({
135
113
  var partitionedToggles = (0, _partition2.default)(res.body.featureToggles, {
136
114
  type: 'USER'
137
115
  });
138
-
139
116
  _this2.webex.internal.device.features.user.add(partitionedToggles[0], {
140
117
  merge: true
141
118
  });
142
-
143
119
  _this2.webex.internal.device.features.developer.add(partitionedToggles[1], {
144
120
  merge: true
145
121
  });
@@ -149,15 +125,13 @@ var Feature = _webexCore.WebexPlugin.extend({
149
125
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
150
126
  args[_key] = arguments[_key];
151
127
  }
152
-
153
128
  (0, _apply.default)(_webexCore.WebexPlugin.prototype.initialize, this, args);
154
129
  this.listenToAndRun(this.webex, 'change:internal.device.features.developer', this.trigger.bind(this, 'change:developer'));
155
130
  this.listenToAndRun(this.webex, 'change:internal.device.features.entitlement', this.trigger.bind(this, 'change:entitlement'));
156
131
  this.listenToAndRun(this.webex, 'change:internal.device.features.user', this.trigger.bind(this, 'change:user'));
157
132
  },
158
- version: "3.0.0-beta.9"
133
+ version: "3.0.0-beta.91"
159
134
  });
160
-
161
135
  var _default = Feature;
162
136
  exports.default = _default;
163
137
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Feature","WebexPlugin","extend","namespace","getFeature","keyType","key","options","reject","Error","feature","webex","internal","device","features","get","resolve","full","serialize","value","handleFeatureUpdate","envelope","data","featureToggle","type","toLowerCase","add","merge","listen","listenTo","mercury","setFeature","request","method","api","resource","userId","body","mutable","val","then","res","setBundledFeatures","featureList","forEach","item","partitionedToggles","featureToggles","user","developer","initialize","args","prototype","listenToAndRun","trigger","bind"],"sources":["feature.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport {partition} from 'lodash';\nimport {WebexPlugin} from '@webex/webex-core';\n\nconst Feature = WebexPlugin.extend({\n namespace: 'Feature',\n\n /**\n * Returns the value of the requested feature toggle.\n * @param {string} keyType <developer|user|entitlement>\n * @param {string} key\n * @param {Object} options\n * @param {boolean} options.full to get full feature record including metadata.\n * @returns {string|boolean|number|FeatureModel|null}\n */\n getFeature(keyType, key, options) {\n if (keyType !== 'developer' && keyType !== 'user' && keyType !== 'entitlement') {\n return Promise.reject(new Error('Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted.'));\n }\n\n options = options || {};\n\n const feature = this.webex.internal.device.features[keyType].get(key);\n\n if (!feature) {\n return Promise.resolve(null);\n }\n\n if (options.full) {\n return Promise.resolve(feature.serialize());\n }\n\n return Promise.resolve(feature.value);\n },\n\n /**\n * Handles a feature toggle update from the server.\n * @param {Object} envelope\n * @returns {undefined}\n */\n handleFeatureUpdate(envelope) {\n if (envelope && envelope.data) {\n const feature = envelope.data.featureToggle;\n const keyType = feature.type.toLowerCase();\n\n if (keyType === 'user' || keyType === 'developer') {\n this.webex.internal.device.features[keyType].add([feature], {merge: true});\n }\n }\n },\n\n /**\n * Register to listen for incoming feature events\n * @instance\n * @returns {undefined}\n */\n listen() {\n this.listenTo(this.webex.internal.mercury, 'event:featureToggle_update', this.handleFeatureUpdate);\n },\n\n /**\n * Issues request to server to set a value for a feature toggle.\n * @param {string} keyType <developer|user>\n * @param {string} key\n * @param {string} value\n * @returns {Promise} Refreshes the local device and resolves with the features endpoint's response.\n */\n setFeature(keyType, key, value) {\n // Limit only to developer feature toggles for now.\n if (keyType !== 'developer' && keyType !== 'user') {\n return Promise.reject(new Error('Only `developer` and `user` feature toggles can be set.'));\n }\n\n return this.request({\n method: 'POST',\n api: 'feature',\n resource: `features/users/${this.webex.internal.device.userId}/${keyType}`,\n body: {\n key,\n mutable: true,\n val: value\n }\n })\n .then((res) => this.webex.internal.device.features[keyType].add(res.body, {merge: true}));\n },\n\n /**\n * Issues request to server to set a value for a feature toggle.\n * @param {array} featureList\n * @returns {Promise} Refreshes the local device and resolves with the features endpoint`s response.\n */\n setBundledFeatures(featureList) {\n featureList.forEach((item) => {\n item.mutable = item.mutable || 'true';\n if (item.type !== 'USER' && item.type !== 'DEV') {\n item.type = 'USER';\n }\n });\n\n return this.request({\n method: 'POST',\n api: 'feature',\n resource: `features/users/${this.webex.internal.device.userId}/toggles`,\n body: featureList\n })\n .then((res) => {\n const partitionedToggles = partition(res.body.featureToggles, {type: 'USER'});\n\n this.webex.internal.device.features.user.add(partitionedToggles[0], {merge: true});\n this.webex.internal.device.features.developer.add(partitionedToggles[1], {merge: true});\n });\n },\n\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n\n this.listenToAndRun(this.webex, 'change:internal.device.features.developer', this.trigger.bind(this, 'change:developer'));\n this.listenToAndRun(this.webex, 'change:internal.device.features.entitlement', this.trigger.bind(this, 'change:entitlement'));\n this.listenToAndRun(this.webex, 'change:internal.device.features.user', this.trigger.bind(this, 'change:user'));\n }\n});\n\nexport default Feature;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Feature","WebexPlugin","extend","namespace","getFeature","keyType","key","options","reject","Error","feature","webex","internal","device","features","get","resolve","full","serialize","value","handleFeatureUpdate","envelope","data","featureToggle","type","toLowerCase","add","merge","listen","listenTo","mercury","setFeature","request","method","api","resource","userId","body","mutable","val","then","res","setBundledFeatures","featureList","forEach","item","partitionedToggles","featureToggles","user","developer","initialize","args","prototype","listenToAndRun","trigger","bind"],"sources":["feature.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport {partition} from 'lodash';\nimport {WebexPlugin} from '@webex/webex-core';\n\nconst Feature = WebexPlugin.extend({\n namespace: 'Feature',\n\n /**\n * Returns the value of the requested feature toggle.\n * @param {string} keyType <developer|user|entitlement>\n * @param {string} key\n * @param {Object} options\n * @param {boolean} options.full to get full feature record including metadata.\n * @returns {string|boolean|number|FeatureModel|null}\n */\n getFeature(keyType, key, options) {\n if (keyType !== 'developer' && keyType !== 'user' && keyType !== 'entitlement') {\n return Promise.reject(\n new Error(\n 'Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted.'\n )\n );\n }\n\n options = options || {};\n\n const feature = this.webex.internal.device.features[keyType].get(key);\n\n if (!feature) {\n return Promise.resolve(null);\n }\n\n if (options.full) {\n return Promise.resolve(feature.serialize());\n }\n\n return Promise.resolve(feature.value);\n },\n\n /**\n * Handles a feature toggle update from the server.\n * @param {Object} envelope\n * @returns {undefined}\n */\n handleFeatureUpdate(envelope) {\n if (envelope && envelope.data) {\n const feature = envelope.data.featureToggle;\n const keyType = feature.type.toLowerCase();\n\n if (keyType === 'user' || keyType === 'developer') {\n this.webex.internal.device.features[keyType].add([feature], {merge: true});\n }\n }\n },\n\n /**\n * Register to listen for incoming feature events\n * @instance\n * @returns {undefined}\n */\n listen() {\n this.listenTo(\n this.webex.internal.mercury,\n 'event:featureToggle_update',\n this.handleFeatureUpdate\n );\n },\n\n /**\n * Issues request to server to set a value for a feature toggle.\n * @param {string} keyType <developer|user>\n * @param {string} key\n * @param {string} value\n * @returns {Promise} Refreshes the local device and resolves with the features endpoint's response.\n */\n setFeature(keyType, key, value) {\n // Limit only to developer feature toggles for now.\n if (keyType !== 'developer' && keyType !== 'user') {\n return Promise.reject(new Error('Only `developer` and `user` feature toggles can be set.'));\n }\n\n return this.request({\n method: 'POST',\n api: 'feature',\n resource: `features/users/${this.webex.internal.device.userId}/${keyType}`,\n body: {\n key,\n mutable: true,\n val: value,\n },\n }).then((res) => this.webex.internal.device.features[keyType].add(res.body, {merge: true}));\n },\n\n /**\n * Issues request to server to set a value for a feature toggle.\n * @param {array} featureList - in the form of `Array<{ type: 'USER' | 'DEV', key: string, val: any }>`\n * @returns {Promise} Refreshes the local device and resolves with the features endpoint`s response.\n */\n setBundledFeatures(featureList) {\n featureList.forEach((item) => {\n item.mutable = item.mutable || 'true';\n if (item.type !== 'USER' && item.type !== 'DEV') {\n item.type = 'USER';\n }\n });\n\n return this.request({\n method: 'POST',\n api: 'feature',\n resource: `features/users/${this.webex.internal.device.userId}/toggles`,\n body: featureList,\n }).then((res) => {\n const partitionedToggles = partition(res.body.featureToggles, {type: 'USER'});\n\n this.webex.internal.device.features.user.add(partitionedToggles[0], {merge: true});\n this.webex.internal.device.features.developer.add(partitionedToggles[1], {merge: true});\n });\n },\n\n initialize(...args) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, args);\n\n this.listenToAndRun(\n this.webex,\n 'change:internal.device.features.developer',\n this.trigger.bind(this, 'change:developer')\n );\n this.listenToAndRun(\n this.webex,\n 'change:internal.device.features.entitlement',\n this.trigger.bind(this, 'change:entitlement')\n );\n this.listenToAndRun(\n this.webex,\n 'change:internal.device.features.user',\n this.trigger.bind(this, 'change:user')\n );\n },\n});\n\nexport default Feature;\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,31 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  _Object$defineProperty(exports, "default", {
12
9
  enumerable: true,
13
10
  get: function get() {
14
11
  return _feature.default;
15
12
  }
16
13
  });
17
-
18
14
  require("@webex/internal-plugin-mercury");
19
-
20
15
  var _webexCore = require("@webex/webex-core");
21
-
22
16
  var _feature = _interopRequireDefault(require("./feature"));
23
-
24
17
  var _config = _interopRequireDefault(require("./config"));
25
-
26
18
  /*!
27
19
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
28
20
  */
21
+
29
22
  (0, _webexCore.registerInternalPlugin)('feature', _feature.default, {
30
23
  config: _config.default
31
24
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerInternalPlugin","Feature","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport '@webex/internal-plugin-mercury';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Feature from './feature';\nimport config from './config';\n\nregisterInternalPlugin('feature', Feature, {\n config\n});\n\nexport {default} from './feature';\n"],"mappings":";;;;;;;;;;;;;;;;;AAGA;;AAEA;;AAEA;;AACA;;AARA;AACA;AACA;AAQA,IAAAA,iCAAA,EAAuB,SAAvB,EAAkCC,gBAAlC,EAA2C;EACzCC,MAAM,EAANA;AADyC,CAA3C"}
1
+ {"version":3,"names":["registerInternalPlugin","Feature","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\nimport '@webex/internal-plugin-mercury';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Feature from './feature';\nimport config from './config';\n\nregisterInternalPlugin('feature', Feature, {\n config,\n});\n\nexport {default} from './feature';\n"],"mappings":";;;;;;;;;;;;;AAGA;AAEA;AAEA;AACA;AARA;AACA;AACA;;AAQA,IAAAA,iCAAsB,EAAC,SAAS,EAAEC,gBAAO,EAAE;EACzCC,MAAM,EAANA;AACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-feature",
3
- "version": "3.0.0-beta.9",
3
+ "version": "3.0.0-beta.91",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "author": "Aimee <aimma@cisco.com>",
@@ -21,17 +21,17 @@
21
21
  ]
22
22
  },
23
23
  "devDependencies": {
24
- "@webex/test-helper-chai": "3.0.0-beta.9",
25
- "@webex/test-helper-mocha": "3.0.0-beta.9",
26
- "@webex/test-helper-mock-webex": "3.0.0-beta.9",
27
- "@webex/test-helper-test-users": "3.0.0-beta.9",
24
+ "@webex/test-helper-chai": "3.0.0-beta.91",
25
+ "@webex/test-helper-mocha": "3.0.0-beta.91",
26
+ "@webex/test-helper-mock-webex": "3.0.0-beta.91",
27
+ "@webex/test-helper-test-users": "3.0.0-beta.91",
28
28
  "sinon": "^9.2.4"
29
29
  },
30
30
  "dependencies": {
31
- "@webex/internal-plugin-device": "3.0.0-beta.9",
32
- "@webex/internal-plugin-feature": "3.0.0-beta.9",
33
- "@webex/internal-plugin-mercury": "3.0.0-beta.9",
34
- "@webex/webex-core": "3.0.0-beta.9",
31
+ "@webex/internal-plugin-device": "3.0.0-beta.91",
32
+ "@webex/internal-plugin-feature": "3.0.0-beta.91",
33
+ "@webex/internal-plugin-mercury": "3.0.0-beta.91",
34
+ "@webex/webex-core": "3.0.0-beta.91",
35
35
  "lodash": "^4.17.21"
36
36
  }
37
37
  }
package/src/config.js CHANGED
@@ -3,5 +3,5 @@
3
3
  */
4
4
 
5
5
  export default {
6
- feature: {}
6
+ feature: {},
7
7
  };
package/src/feature.js CHANGED
@@ -19,7 +19,11 @@ const Feature = WebexPlugin.extend({
19
19
  */
20
20
  getFeature(keyType, key, options) {
21
21
  if (keyType !== 'developer' && keyType !== 'user' && keyType !== 'entitlement') {
22
- return Promise.reject(new Error('Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted.'));
22
+ return Promise.reject(
23
+ new Error(
24
+ 'Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted.'
25
+ )
26
+ );
23
27
  }
24
28
 
25
29
  options = options || {};
@@ -59,7 +63,11 @@ const Feature = WebexPlugin.extend({
59
63
  * @returns {undefined}
60
64
  */
61
65
  listen() {
62
- this.listenTo(this.webex.internal.mercury, 'event:featureToggle_update', this.handleFeatureUpdate);
66
+ this.listenTo(
67
+ this.webex.internal.mercury,
68
+ 'event:featureToggle_update',
69
+ this.handleFeatureUpdate
70
+ );
63
71
  },
64
72
 
65
73
  /**
@@ -82,15 +90,14 @@ const Feature = WebexPlugin.extend({
82
90
  body: {
83
91
  key,
84
92
  mutable: true,
85
- val: value
86
- }
87
- })
88
- .then((res) => this.webex.internal.device.features[keyType].add(res.body, {merge: true}));
93
+ val: value,
94
+ },
95
+ }).then((res) => this.webex.internal.device.features[keyType].add(res.body, {merge: true}));
89
96
  },
90
97
 
91
98
  /**
92
99
  * Issues request to server to set a value for a feature toggle.
93
- * @param {array} featureList
100
+ * @param {array} featureList - in the form of `Array<{ type: 'USER' | 'DEV', key: string, val: any }>`
94
101
  * @returns {Promise} Refreshes the local device and resolves with the features endpoint`s response.
95
102
  */
96
103
  setBundledFeatures(featureList) {
@@ -105,23 +112,34 @@ const Feature = WebexPlugin.extend({
105
112
  method: 'POST',
106
113
  api: 'feature',
107
114
  resource: `features/users/${this.webex.internal.device.userId}/toggles`,
108
- body: featureList
109
- })
110
- .then((res) => {
111
- const partitionedToggles = partition(res.body.featureToggles, {type: 'USER'});
112
-
113
- this.webex.internal.device.features.user.add(partitionedToggles[0], {merge: true});
114
- this.webex.internal.device.features.developer.add(partitionedToggles[1], {merge: true});
115
- });
115
+ body: featureList,
116
+ }).then((res) => {
117
+ const partitionedToggles = partition(res.body.featureToggles, {type: 'USER'});
118
+
119
+ this.webex.internal.device.features.user.add(partitionedToggles[0], {merge: true});
120
+ this.webex.internal.device.features.developer.add(partitionedToggles[1], {merge: true});
121
+ });
116
122
  },
117
123
 
118
124
  initialize(...args) {
119
125
  Reflect.apply(WebexPlugin.prototype.initialize, this, args);
120
126
 
121
- this.listenToAndRun(this.webex, 'change:internal.device.features.developer', this.trigger.bind(this, 'change:developer'));
122
- this.listenToAndRun(this.webex, 'change:internal.device.features.entitlement', this.trigger.bind(this, 'change:entitlement'));
123
- this.listenToAndRun(this.webex, 'change:internal.device.features.user', this.trigger.bind(this, 'change:user'));
124
- }
127
+ this.listenToAndRun(
128
+ this.webex,
129
+ 'change:internal.device.features.developer',
130
+ this.trigger.bind(this, 'change:developer')
131
+ );
132
+ this.listenToAndRun(
133
+ this.webex,
134
+ 'change:internal.device.features.entitlement',
135
+ this.trigger.bind(this, 'change:entitlement')
136
+ );
137
+ this.listenToAndRun(
138
+ this.webex,
139
+ 'change:internal.device.features.user',
140
+ this.trigger.bind(this, 'change:user')
141
+ );
142
+ },
125
143
  });
126
144
 
127
145
  export default Feature;
package/src/index.js CHANGED
@@ -9,7 +9,7 @@ import Feature from './feature';
9
9
  import config from './config';
10
10
 
11
11
  registerInternalPlugin('feature', Feature, {
12
- config
12
+ config,
13
13
  });
14
14
 
15
15
  export {default} from './feature';
@@ -15,8 +15,8 @@ describe('plugin-feature', function () {
15
15
  let webex, spock;
16
16
 
17
17
  describe('#setFeature()', () => {
18
- before(() => testUsers.create({count: 1})
19
- .then(async (users) => {
18
+ before(() =>
19
+ testUsers.create({count: 1}).then(async (users) => {
20
20
  spock = users[0];
21
21
 
22
22
  // Pause for 5 seconds for CI
@@ -24,72 +24,83 @@ describe('plugin-feature', function () {
24
24
 
25
25
  webex = new WebexCore({
26
26
  credentials: {
27
- authorization: spock.token
28
- }
27
+ authorization: spock.token,
28
+ },
29
29
  });
30
30
 
31
31
  return webex.internal.device.register();
32
- }));
33
-
34
- [
35
- 'developer',
36
- 'user'
37
- ].forEach((keyType) => {
38
- it(`sets a value for a ${keyType} feature toggle`, () => webex.internal.feature.setFeature(keyType, 'testFeature', false)
39
- .then((res) => {
32
+ })
33
+ );
34
+
35
+ ['developer', 'user'].forEach((keyType) => {
36
+ it(`sets a value for a ${keyType} feature toggle`, () =>
37
+ webex.internal.feature.setFeature(keyType, 'testFeature', false).then((res) => {
40
38
  assert.equal(res.key, 'testFeature');
41
39
  assert.equal(res.val, 'false');
42
40
  assert.equal(res.value, false);
43
41
  assert.equal(res.type, 'boolean');
44
42
 
45
- assert.equal(webex.internal.device.features[keyType].get({key: 'testFeature'}).val, 'false');
43
+ assert.equal(
44
+ webex.internal.device.features[keyType].get({key: 'testFeature'}).val,
45
+ 'false'
46
+ );
46
47
 
47
- return webex.internal.feature.getFeature(keyType, 'testFeature')
48
+ return webex.internal.feature
49
+ .getFeature(keyType, 'testFeature')
48
50
  .then((result) => assert.deepEqual(result, false));
49
51
  }));
50
52
  });
51
53
  });
52
54
 
53
55
  describe('#setBundledFeatures()', () => {
54
- before(() => testUsers.create({count: 1})
55
- .then((users) => {
56
+ before(() =>
57
+ testUsers.create({count: 1}).then((users) => {
56
58
  spock = users[0];
57
59
  webex = new WebexCore({
58
60
  credentials: {
59
- authorization: spock.token
60
- }
61
+ authorization: spock.token,
62
+ },
61
63
  });
62
64
 
63
65
  return webex.internal.device.register();
64
- }));
65
-
66
- const featureUpdateArray = [{
67
- key: 'key1',
68
- val: 'value1',
69
- type: 'USER',
70
- mutable: 'true'
71
- }, {
72
- key: 'key2',
73
- val: 'value2',
74
- mutable: 'false'
75
- }];
66
+ })
67
+ );
68
+
69
+ const featureUpdateArray = [
70
+ {
71
+ key: 'key1',
72
+ val: 'value1',
73
+ type: 'USER',
74
+ mutable: 'true',
75
+ },
76
+ {
77
+ key: 'key2',
78
+ val: 'value2',
79
+ mutable: 'false',
80
+ },
81
+ ];
76
82
 
77
83
  it('sets a value for two user feature toggle', () => {
78
84
  webex.internal.feature.setFeature('user', 'key1', false);
79
85
 
80
- return webex.internal.feature.setBundledFeatures(featureUpdateArray)
81
- .then(() => Promise.all([
82
- webex.internal.feature.getFeature('user', 'key1')
83
- .then((result) => assert.deepEqual(result, 'value1')),
84
- webex.internal.feature.getFeature('user', 'key2')
85
- .then((result) => assert.deepEqual(result, 'value2'))
86
- ]));
86
+ return webex.internal.feature
87
+ .setBundledFeatures(featureUpdateArray)
88
+ .then(() =>
89
+ Promise.all([
90
+ webex.internal.feature
91
+ .getFeature('user', 'key1')
92
+ .then((result) => assert.deepEqual(result, 'value1')),
93
+ webex.internal.feature
94
+ .getFeature('user', 'key2')
95
+ .then((result) => assert.deepEqual(result, 'value2')),
96
+ ])
97
+ );
87
98
  });
88
99
  });
89
100
 
90
101
  describe('when feature toggle update event is received', () => {
91
- before(() => testUsers.create({count: 1})
92
- .then(async (users) => {
102
+ before(() =>
103
+ testUsers.create({count: 1}).then(async (users) => {
93
104
  spock = users[0];
94
105
 
95
106
  // Pause for 5 seconds for CI
@@ -97,29 +108,32 @@ describe('plugin-feature', function () {
97
108
 
98
109
  webex = new WebexCore({
99
110
  credentials: {
100
- authorization: spock.token
101
- }
111
+ authorization: spock.token,
112
+ },
102
113
  });
103
114
 
104
115
  sinon.spy(webex.internal.feature, 'handleFeatureUpdate');
105
116
 
106
- return webex.internal.device.register()
107
- .then(() => webex.internal.mercury.connect());
108
- }));
117
+ return webex.internal.device.register().then(() => webex.internal.mercury.connect());
118
+ })
119
+ );
109
120
 
110
121
  after(() => webex.internal.mercury.disconnect());
111
122
 
112
123
  flaky(it, process.env.SKIP_FLAKY_TESTS)('updates the feature toggle', () => {
113
- const featureUpdateArray = [{
114
- key: 'mention-notifications',
115
- val: false,
116
- type: 'USER',
117
- mutable: true
118
- }];
124
+ const featureUpdateArray = [
125
+ {
126
+ key: 'mention-notifications',
127
+ val: false,
128
+ type: 'USER',
129
+ mutable: true,
130
+ },
131
+ ];
119
132
 
120
133
  webex.internal.feature.listen();
121
134
 
122
- return webex.internal.feature.getFeature('user', 'mention-notifications')
135
+ return webex.internal.feature
136
+ .getFeature('user', 'mention-notifications')
123
137
  .then((result) => assert.deepEqual(result, true))
124
138
  .then(() => webex.internal.feature.setBundledFeatures(featureUpdateArray))
125
139
  .then(() => expectEvent(10000, 'event:featureToggle_update', webex.internal.mercury))
@@ -16,16 +16,17 @@ describe('plugin-feature', () => {
16
16
  webex = new MockWebex({
17
17
  children: {
18
18
  device: Device,
19
- feature: Feature
20
- }
19
+ feature: Feature,
20
+ },
21
21
  });
22
22
  });
23
23
 
24
24
  describe('#getFeature()', () => {
25
- it('requires a valid keyType', () => assert.isRejected(
26
- webex.internal.feature.getFeature('none', 'featureName', {}),
27
- /Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted./
28
- ));
25
+ it('requires a valid keyType', () =>
26
+ assert.isRejected(
27
+ webex.internal.feature.getFeature('none', 'featureName', {}),
28
+ /Invalid feature keyType provided. Only `developer`, `user`, and `entitlement` feature toggles are permitted./
29
+ ));
29
30
 
30
31
  it('returns the full feature object', () => {
31
32
  const key = 'featureName';
@@ -35,12 +36,13 @@ describe('plugin-feature', () => {
35
36
  mutable: true,
36
37
  type: 'boolean',
37
38
  val: 'true',
38
- value: true
39
+ value: true,
39
40
  };
40
41
 
41
42
  webex.internal.device.features[keyType].add(feature);
42
43
 
43
- return webex.internal.feature.getFeature(keyType, key, {full: true})
44
+ return webex.internal.feature
45
+ .getFeature(keyType, key, {full: true})
44
46
  .then((result) => assert.deepEqual(result, feature));
45
47
  });
46
48
 
@@ -52,43 +54,46 @@ describe('plugin-feature', () => {
52
54
  mutable: true,
53
55
  type: 'boolean',
54
56
  val: 'true',
55
- value: true
57
+ value: true,
56
58
  };
57
59
 
58
60
  webex.internal.device.features[keyType].add(feature);
59
61
 
60
- return webex.internal.feature.getFeature(keyType, key)
62
+ return webex.internal.feature
63
+ .getFeature(keyType, key)
61
64
  .then((result) => assert.deepEqual(result, feature.value));
62
65
  });
63
66
  });
64
67
 
65
68
  describe('#setFeature()', () => {
66
69
  beforeEach(() => {
67
- webex.request = sinon.stub().returns(Promise.resolve({
68
- body: {},
69
- statusCode: 200
70
- }));
70
+ webex.request = sinon.stub().returns(
71
+ Promise.resolve({
72
+ body: {},
73
+ statusCode: 200,
74
+ })
75
+ );
71
76
  });
72
77
  afterEach(() => {
73
78
  webex.request.resetHistory();
74
79
  });
75
- it('does not allow entitlement keyType to be set', () => assert.isRejected(
76
- webex.internal.feature.setFeature('entitlement', 'featureName', true),
77
- /Only `developer` and `user` feature toggles can be set./
78
- ));
79
-
80
- [
81
- 'developer',
82
- 'user'
83
- ].forEach((keyType) => {
80
+ it('does not allow entitlement keyType to be set', () =>
81
+ assert.isRejected(
82
+ webex.internal.feature.setFeature('entitlement', 'featureName', true),
83
+ /Only `developer` and `user` feature toggles can be set./
84
+ ));
85
+
86
+ ['developer', 'user'].forEach((keyType) => {
84
87
  it(`sets a value for a ${keyType} feature toggle`, () => {
85
88
  sinon.spy(webex.internal.device.features[keyType], 'add');
86
89
 
87
- return webex.internal.feature.setFeature(keyType, 'featureName', true)
88
- .then(() => {
89
- assert.called(webex.internal.device.features[keyType].add);
90
- assert.equal(webex.request.getCall(0).args[0].resource, `features/users/${webex.internal.device.userId}/${keyType}`);
91
- });
90
+ return webex.internal.feature.setFeature(keyType, 'featureName', true).then(() => {
91
+ assert.called(webex.internal.device.features[keyType].add);
92
+ assert.equal(
93
+ webex.request.getCall(0).args[0].resource,
94
+ `features/users/${webex.internal.device.userId}/${keyType}`
95
+ );
96
+ });
92
97
  });
93
98
  });
94
99
  });
@@ -104,9 +109,9 @@ describe('plugin-feature', () => {
104
109
  mutable: true,
105
110
  type: 'USER',
106
111
  val: 'true',
107
- value: true
108
- }
109
- }
112
+ value: true,
113
+ },
114
+ },
110
115
  };
111
116
 
112
117
  sinon.spy(webex.internal.device.features[keyType], 'add');
@@ -116,11 +121,7 @@ describe('plugin-feature', () => {
116
121
  });
117
122
 
118
123
  describe('when a feature is changed', () => {
119
- [
120
- 'developer',
121
- 'entitlement',
122
- 'user'
123
- ].forEach((keyType) => {
124
+ ['developer', 'entitlement', 'user'].forEach((keyType) => {
124
125
  it(`emits \`change:${keyType}\` on ${keyType} feature change`, () => {
125
126
  const mockEventHandler = sinon.spy();
126
127
 
@@ -131,7 +132,7 @@ describe('plugin-feature', () => {
131
132
  mutable: true,
132
133
  type: 'boolean',
133
134
  val: 'true',
134
- value: true
135
+ value: true,
135
136
  };
136
137
 
137
138
  webex.internal.device.features[keyType].add(feature);