@webex/internal-plugin-avatar 3.0.0-beta.3 → 3.0.0-beta.30
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 +1 -3
- package/dist/avatar-url-batcher.js +5 -17
- package/dist/avatar-url-batcher.js.map +1 -1
- package/dist/avatar-url-store.js +4 -31
- package/dist/avatar-url-store.js.map +1 -1
- package/dist/avatar.js +8 -32
- package/dist/avatar.js.map +1 -1
- package/dist/config.js +0 -7
- package/dist/config.js.map +1 -1
- package/dist/index.js +1 -9
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
- package/src/avatar-url-batcher.js +40 -31
- package/src/avatar-url-store.js +1 -1
- package/src/avatar.js +52 -41
- package/src/config.js +2 -2
- package/src/index.js +1 -1
- package/test/integration/spec/avatar.js +15 -14
- package/test/unit/spec/avatar-url-batcher.js +24 -15
- package/test/unit/spec/avatar-url-store.js +110 -58
- package/test/unit/spec/avatar.js +1453 -1217
package/README.md
CHANGED
|
@@ -21,14 +21,12 @@ npm install --save @webex/internal-plugin-avatar
|
|
|
21
21
|
## Usage
|
|
22
22
|
|
|
23
23
|
```js
|
|
24
|
-
|
|
25
24
|
import '@webex/internal-plugin-avatar';
|
|
26
25
|
|
|
27
26
|
import WebexCore from '@webex/webex-core';
|
|
28
27
|
|
|
29
28
|
const webex = new WebexCore();
|
|
30
|
-
webex.internal.avatar.WHATEVER
|
|
31
|
-
|
|
29
|
+
webex.internal.avatar.WHATEVER;
|
|
32
30
|
```
|
|
33
31
|
|
|
34
32
|
## Maintainers
|
|
@@ -1,31 +1,23 @@
|
|
|
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 _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
16
|
-
|
|
17
11
|
var _uniq2 = _interopRequireDefault(require("lodash/uniq"));
|
|
18
|
-
|
|
19
12
|
var _webexCore = require("@webex/webex-core");
|
|
20
|
-
|
|
21
13
|
/*!
|
|
22
14
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
23
15
|
*/
|
|
16
|
+
|
|
24
17
|
var AvatarUrlBatcher = _webexCore.Batcher.extend({
|
|
25
18
|
namespace: 'Avatar',
|
|
26
19
|
handleHttpSuccess: function handleHttpSuccess(res) {
|
|
27
20
|
var _this = this;
|
|
28
|
-
|
|
29
21
|
// eslint-disable-next-line arrow-body-style
|
|
30
22
|
return _promise.default.all(res.options.body.map(function (req) {
|
|
31
23
|
return _promise.default.all(req.sizes.map(function (size) {
|
|
@@ -40,16 +32,17 @@ var AvatarUrlBatcher = _webexCore.Batcher.extend({
|
|
|
40
32
|
},
|
|
41
33
|
handleHttpError: function handleHttpError(reason) {
|
|
42
34
|
var _this2 = this;
|
|
35
|
+
var msg = reason.message || reason.body || reason;
|
|
43
36
|
|
|
44
|
-
|
|
37
|
+
// avoid multiple => on same line
|
|
45
38
|
// eslint-disable-next-line arrow-body-style
|
|
46
|
-
|
|
47
39
|
return _promise.default.all(reason.options.body.map(function (item) {
|
|
48
40
|
return _promise.default.all(item.sizes.map(function (size) {
|
|
49
41
|
return _this2.getDeferredForRequest({
|
|
50
42
|
uuid: item.uuid,
|
|
51
43
|
size: size
|
|
52
|
-
})
|
|
44
|
+
})
|
|
45
|
+
// I don't see a better way to do this than with an additional nesting
|
|
53
46
|
// eslint-disable-next-line max-nested-callbacks
|
|
54
47
|
.then(function (defer) {
|
|
55
48
|
return defer.reject(msg instanceof Error ? msg : new Error(msg));
|
|
@@ -62,10 +55,8 @@ var AvatarUrlBatcher = _webexCore.Batcher.extend({
|
|
|
62
55
|
if (item.size !== item.response.size) {
|
|
63
56
|
this.logger.warn("Avatar: substituted size \"".concat(item.response.size, "\" for \"").concat(item.size, "\""));
|
|
64
57
|
}
|
|
65
|
-
|
|
66
58
|
return _promise.default.resolve(false);
|
|
67
59
|
}
|
|
68
|
-
|
|
69
60
|
return _promise.default.resolve(true);
|
|
70
61
|
},
|
|
71
62
|
handleItemFailure: function handleItemFailure(item) {
|
|
@@ -92,12 +83,10 @@ var AvatarUrlBatcher = _webexCore.Batcher.extend({
|
|
|
92
83
|
prepareRequest: function prepareRequest(queue) {
|
|
93
84
|
var map = queue.reduce(function (m, item) {
|
|
94
85
|
var o = m.get(item.uuid);
|
|
95
|
-
|
|
96
86
|
if (!o) {
|
|
97
87
|
o = [];
|
|
98
88
|
m.set(item.uuid, o);
|
|
99
89
|
}
|
|
100
|
-
|
|
101
90
|
o.push(item.size);
|
|
102
91
|
return m;
|
|
103
92
|
}, new _map.default());
|
|
@@ -119,7 +108,6 @@ var AvatarUrlBatcher = _webexCore.Batcher.extend({
|
|
|
119
108
|
});
|
|
120
109
|
}
|
|
121
110
|
});
|
|
122
|
-
|
|
123
111
|
var _default = AvatarUrlBatcher;
|
|
124
112
|
exports.default = _default;
|
|
125
113
|
//# sourceMappingURL=avatar-url-batcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AvatarUrlBatcher","Batcher","extend","namespace","handleHttpSuccess","res","all","options","body","map","req","sizes","size","response","uuid","undefined","acceptItem","handleHttpError","reason","msg","message","item","getDeferredForRequest","then","defer","reject","Error","didItemFail","logger","warn","resolve","handleItemFailure","handleItemSuccess","getDeferredForResponse","hasDefaultAvatar","defaultAvatar","url","fingerprintRequest","fingerprintResponse","prepareRequest","queue","reduce","m","o","get","set","push","payload","forEach","value","key","submitHttpRequest","webex","request","method","api","resource"],"sources":["avatar-url-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\nimport {uniq} from 'lodash';\n\nconst AvatarUrlBatcher = Batcher.extend({\n namespace: 'Avatar',\n\n handleHttpSuccess(res) {\n // eslint-disable-next-line arrow-body-style\n return Promise.all(res.options.body.map((req) => {\n
|
|
1
|
+
{"version":3,"names":["AvatarUrlBatcher","Batcher","extend","namespace","handleHttpSuccess","res","all","options","body","map","req","sizes","size","response","uuid","undefined","acceptItem","handleHttpError","reason","msg","message","item","getDeferredForRequest","then","defer","reject","Error","didItemFail","logger","warn","resolve","handleItemFailure","handleItemSuccess","getDeferredForResponse","hasDefaultAvatar","defaultAvatar","url","fingerprintRequest","fingerprintResponse","prepareRequest","queue","reduce","m","o","get","set","push","payload","forEach","value","key","submitHttpRequest","webex","request","method","api","resource"],"sources":["avatar-url-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Batcher} from '@webex/webex-core';\nimport {uniq} from 'lodash';\n\nconst AvatarUrlBatcher = Batcher.extend({\n namespace: 'Avatar',\n\n handleHttpSuccess(res) {\n // eslint-disable-next-line arrow-body-style\n return Promise.all(\n res.options.body.map((req) => {\n return Promise.all(\n req.sizes.map((size) => {\n const response = (res.body[req.uuid] && res.body[req.uuid][size]) || undefined;\n\n return this.acceptItem({\n response,\n uuid: req.uuid,\n size,\n });\n })\n );\n })\n );\n },\n\n handleHttpError(reason) {\n const msg = reason.message || reason.body || reason;\n\n // avoid multiple => on same line\n // eslint-disable-next-line arrow-body-style\n return Promise.all(\n reason.options.body.map((item) => {\n return Promise.all(\n item.sizes.map((size) =>\n this.getDeferredForRequest({\n uuid: item.uuid,\n size,\n })\n // I don't see a better way to do this than with an additional nesting\n // eslint-disable-next-line max-nested-callbacks\n .then((defer) => defer.reject(msg instanceof Error ? msg : new Error(msg)))\n )\n );\n })\n );\n },\n\n didItemFail(item) {\n if (item.response) {\n if (item.size !== item.response.size) {\n this.logger.warn(`Avatar: substituted size \"${item.response.size}\" for \"${item.size}\"`);\n }\n\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n\n handleItemFailure(item) {\n return this.getDeferredForRequest(item).then((defer) => {\n defer.reject(new Error(item.response || 'Failed to retrieve avatar'));\n });\n },\n\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) =>\n defer.resolve({\n hasDefaultAvatar: item.response.defaultAvatar,\n uuid: item.uuid,\n size: item.size,\n url: item.response.url,\n })\n );\n },\n\n fingerprintRequest(item) {\n return Promise.resolve(`${item.uuid}-${item.size}`);\n },\n\n fingerprintResponse(item) {\n return Promise.resolve(`${item.uuid}-${item.size}`);\n },\n\n prepareRequest(queue) {\n const map = queue.reduce((m, item) => {\n let o = m.get(item.uuid);\n\n if (!o) {\n o = [];\n m.set(item.uuid, o);\n }\n o.push(item.size);\n\n return m;\n }, new Map());\n\n const payload = [];\n\n map.forEach((value, key) => {\n payload.push({\n uuid: key,\n sizes: uniq(value),\n });\n });\n\n return Promise.resolve(payload);\n },\n\n submitHttpRequest(payload) {\n return this.webex.request({\n method: 'POST',\n api: 'avatar',\n resource: 'profiles/urls',\n body: payload,\n });\n },\n});\n\nexport default AvatarUrlBatcher;\n"],"mappings":"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"}
|
package/dist/avatar-url-store.js
CHANGED
|
@@ -1,31 +1,19 @@
|
|
|
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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
14
|
-
|
|
15
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
16
|
-
|
|
17
11
|
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
|
|
18
|
-
|
|
19
12
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
|
|
20
|
-
|
|
21
13
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
22
|
-
|
|
23
14
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
24
|
-
|
|
25
15
|
var _common = require("@webex/common");
|
|
26
|
-
|
|
27
16
|
var _commonTimers = require("@webex/common-timers");
|
|
28
|
-
|
|
29
17
|
/*!
|
|
30
18
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
31
19
|
*/
|
|
@@ -36,10 +24,10 @@ var _commonTimers = require("@webex/common-timers");
|
|
|
36
24
|
* <uuid+size, {uuid, size, url}> map
|
|
37
25
|
*/
|
|
38
26
|
var urlByUuid = new _weakMap.default();
|
|
27
|
+
|
|
39
28
|
/**
|
|
40
29
|
* @class AvatarUrlStore
|
|
41
30
|
*/
|
|
42
|
-
|
|
43
31
|
var AvatarUrlStore = /*#__PURE__*/function () {
|
|
44
32
|
/**
|
|
45
33
|
* @constructs {AvatarUrlStore}
|
|
@@ -48,6 +36,7 @@ var AvatarUrlStore = /*#__PURE__*/function () {
|
|
|
48
36
|
(0, _classCallCheck2.default)(this, AvatarUrlStore);
|
|
49
37
|
urlByUuid.set(this, new _map.default());
|
|
50
38
|
}
|
|
39
|
+
|
|
51
40
|
/**
|
|
52
41
|
* Get the URL associated with the given uuid and size.
|
|
53
42
|
*
|
|
@@ -59,35 +48,28 @@ var AvatarUrlStore = /*#__PURE__*/function () {
|
|
|
59
48
|
*
|
|
60
49
|
* @memberOf AvatarUrlStore
|
|
61
50
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
51
|
(0, _createClass2.default)(AvatarUrlStore, [{
|
|
65
52
|
key: "get",
|
|
66
53
|
value: function get(item) {
|
|
67
54
|
if (!item) {
|
|
68
55
|
return _promise.default.reject(new Error('`item` is required'));
|
|
69
56
|
}
|
|
70
|
-
|
|
71
57
|
if (!item.uuid) {
|
|
72
58
|
return _promise.default.reject(new Error('`item.uuid` is required'));
|
|
73
59
|
}
|
|
74
|
-
|
|
75
60
|
if (!item.size) {
|
|
76
61
|
return _promise.default.reject(new Error('`item.size` is required'));
|
|
77
62
|
}
|
|
78
|
-
|
|
79
63
|
if (!_common.patterns.uuid.test(item.uuid)) {
|
|
80
64
|
return _promise.default.reject(new Error('`item.uuid` does not appear to be a uuid'));
|
|
81
65
|
}
|
|
82
|
-
|
|
83
66
|
var ret = urlByUuid.get(this).get("".concat(item.uuid, " - ").concat(item.size));
|
|
84
|
-
|
|
85
67
|
if (ret) {
|
|
86
68
|
return _promise.default.resolve(ret);
|
|
87
69
|
}
|
|
88
|
-
|
|
89
70
|
return _promise.default.reject(new Error("No URL found by specified id: ".concat((0, _stringify.default)(item))));
|
|
90
71
|
}
|
|
72
|
+
|
|
91
73
|
/**
|
|
92
74
|
* Adds the given item to the store
|
|
93
75
|
* @param {Object} item
|
|
@@ -98,38 +80,32 @@ var AvatarUrlStore = /*#__PURE__*/function () {
|
|
|
98
80
|
* @param {string} item.uuid
|
|
99
81
|
* @returns {Promise<object>} Resolves to the added avatar item or rejects on bad params
|
|
100
82
|
*/
|
|
101
|
-
|
|
102
83
|
}, {
|
|
103
84
|
key: "add",
|
|
104
85
|
value: function add(item) {
|
|
105
86
|
if (!item) {
|
|
106
87
|
return _promise.default.reject(new Error('`item` is required'));
|
|
107
88
|
}
|
|
108
|
-
|
|
109
89
|
if (!item.uuid) {
|
|
110
90
|
return _promise.default.reject(new Error('`item.uuid` is required'));
|
|
111
91
|
}
|
|
112
|
-
|
|
113
92
|
if (!item.size) {
|
|
114
93
|
return _promise.default.reject(new Error('`item.size` is required'));
|
|
115
94
|
}
|
|
116
|
-
|
|
117
95
|
if (!_common.patterns.uuid.test(item.uuid)) {
|
|
118
96
|
return _promise.default.reject(new Error('`item.uuid` does not appear to be a uuid'));
|
|
119
97
|
}
|
|
120
|
-
|
|
121
98
|
if (!item.url) {
|
|
122
99
|
return _promise.default.reject(new Error('`item.url` is required'));
|
|
123
100
|
}
|
|
124
|
-
|
|
125
101
|
if (!item.cacheControl) {
|
|
126
102
|
return _promise.default.reject(new Error('`item.cacheControl` is required'));
|
|
127
103
|
}
|
|
128
|
-
|
|
129
104
|
(0, _commonTimers.safeSetTimeout)(this.remove.bind(this, item), item.cacheControl * 1000);
|
|
130
105
|
urlByUuid.get(this).set("".concat(item.uuid, " - ").concat(item.size), item);
|
|
131
106
|
return _promise.default.resolve(item);
|
|
132
107
|
}
|
|
108
|
+
|
|
133
109
|
/**
|
|
134
110
|
* Remove the URL associated with the uuid and size
|
|
135
111
|
* Remove urls of all sizes if size is not given
|
|
@@ -139,12 +115,10 @@ var AvatarUrlStore = /*#__PURE__*/function () {
|
|
|
139
115
|
* @param {integer} item.size The size of the avatar to remove
|
|
140
116
|
* @returns {Promise<true>}
|
|
141
117
|
*/
|
|
142
|
-
|
|
143
118
|
}, {
|
|
144
119
|
key: "remove",
|
|
145
120
|
value: function remove(item) {
|
|
146
121
|
var _this = this;
|
|
147
|
-
|
|
148
122
|
var sizes = item.size && [item.size] || [40, 50, 80, 110, 135, 192, 640, 1600];
|
|
149
123
|
sizes.forEach(function (one) {
|
|
150
124
|
return urlByUuid.get(_this).delete("".concat(item.uuid, " - ").concat(one));
|
|
@@ -154,6 +128,5 @@ var AvatarUrlStore = /*#__PURE__*/function () {
|
|
|
154
128
|
}]);
|
|
155
129
|
return AvatarUrlStore;
|
|
156
130
|
}();
|
|
157
|
-
|
|
158
131
|
exports.default = AvatarUrlStore;
|
|
159
132
|
//# sourceMappingURL=avatar-url-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["urlByUuid","AvatarUrlStore","set","item","reject","Error","uuid","size","patterns","test","ret","get","resolve","url","cacheControl","safeSetTimeout","remove","bind","sizes","forEach","one","delete"],"sources":["avatar-url-store.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable complexity */\n\nimport {patterns} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\n\n/**\n * <uuid+size, {uuid, size, url}> map\n */\nconst urlByUuid = new WeakMap();\n\n/**\n * @class AvatarUrlStore\n */\nexport default class AvatarUrlStore {\n /**\n * @constructs {AvatarUrlStore}\n */\n constructor() {\n urlByUuid.set(this, new Map());\n }\n\n /**\n * Get the URL associated with the given uuid and size.\n *\n * @param {object} item\n * @param {string} item.uuid A user uuid\n * @param {integer}item.size the requested size\n * @returns {Promise<object>} Resolves to the avatar item {uuid, url, size, cacheControl}\n * or Rejects on bad param, not in store\n *\n * @memberOf AvatarUrlStore\n */\n get(item) {\n if (!item) {\n return Promise.reject(new Error('`item` is required'));\n }\n if (!item.uuid) {\n return Promise.reject(new Error('`item.uuid` is required'));\n }\n if (!item.size) {\n return Promise.reject(new Error('`item.size` is required'));\n }\n if (!patterns.uuid.test(item.uuid)) {\n return Promise.reject(new Error('`item.uuid` does not appear to be a uuid'));\n }\n const ret = urlByUuid.get(this).get(`${item.uuid} - ${item.size}`);\n\n if (ret) {\n return Promise.resolve(ret);\n }\n\n return Promise.reject(new Error(`No URL found by specified id: ${JSON.stringify(item)}`));\n }\n\n /**\n * Adds the given item to the store\n * @param {Object} item\n * @param {integer} item.cacheControl\n * @param {integer} item.hasDefaultAvatar\n * @param {integer} item.size\n * @param {string} item.url\n * @param {string} item.uuid\n * @returns {Promise<object>} Resolves to the added avatar item or rejects on bad params\n */\n add(item) {\n if (!item) {\n return Promise.reject(new Error('`item` is required'));\n }\n if (!item.uuid) {\n return Promise.reject(new Error('`item.uuid` is required'));\n }\n if (!item.size) {\n return Promise.reject(new Error('`item.size` is required'));\n }\n if (!patterns.uuid.test(item.uuid)) {\n return Promise.reject(new Error('`item.uuid` does not appear to be a uuid'));\n }\n if (!item.url) {\n return Promise.reject(new Error('`item.url` is required'));\n }\n if (!item.cacheControl) {\n return Promise.reject(new Error('`item.cacheControl` is required'));\n }\n\n safeSetTimeout(this.remove.bind(this, item), item.cacheControl * 1000);\n urlByUuid.get(this).set(`${item.uuid} - ${item.size}`, item);\n\n return Promise.resolve(item);\n }\n\n /**\n * Remove the URL associated with the uuid and size\n * Remove urls of all sizes if size is not given\n *\n * @param {object} item\n * @param {string} item.uuid The user unique id\n * @param {integer} item.size The size of the avatar to remove\n * @returns {Promise<true>}\n */\n remove(item) {\n const sizes = item.size && [item.size] || [40, 50, 80, 110, 135, 192, 640, 1600];\n\n sizes.forEach((one) => urlByUuid.get(this).delete(`${item.uuid} - ${one}`));\n\n return Promise.resolve(true);\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["urlByUuid","AvatarUrlStore","set","item","reject","Error","uuid","size","patterns","test","ret","get","resolve","url","cacheControl","safeSetTimeout","remove","bind","sizes","forEach","one","delete"],"sources":["avatar-url-store.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable complexity */\n\nimport {patterns} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\n\n/**\n * <uuid+size, {uuid, size, url}> map\n */\nconst urlByUuid = new WeakMap();\n\n/**\n * @class AvatarUrlStore\n */\nexport default class AvatarUrlStore {\n /**\n * @constructs {AvatarUrlStore}\n */\n constructor() {\n urlByUuid.set(this, new Map());\n }\n\n /**\n * Get the URL associated with the given uuid and size.\n *\n * @param {object} item\n * @param {string} item.uuid A user uuid\n * @param {integer}item.size the requested size\n * @returns {Promise<object>} Resolves to the avatar item {uuid, url, size, cacheControl}\n * or Rejects on bad param, not in store\n *\n * @memberOf AvatarUrlStore\n */\n get(item) {\n if (!item) {\n return Promise.reject(new Error('`item` is required'));\n }\n if (!item.uuid) {\n return Promise.reject(new Error('`item.uuid` is required'));\n }\n if (!item.size) {\n return Promise.reject(new Error('`item.size` is required'));\n }\n if (!patterns.uuid.test(item.uuid)) {\n return Promise.reject(new Error('`item.uuid` does not appear to be a uuid'));\n }\n const ret = urlByUuid.get(this).get(`${item.uuid} - ${item.size}`);\n\n if (ret) {\n return Promise.resolve(ret);\n }\n\n return Promise.reject(new Error(`No URL found by specified id: ${JSON.stringify(item)}`));\n }\n\n /**\n * Adds the given item to the store\n * @param {Object} item\n * @param {integer} item.cacheControl\n * @param {integer} item.hasDefaultAvatar\n * @param {integer} item.size\n * @param {string} item.url\n * @param {string} item.uuid\n * @returns {Promise<object>} Resolves to the added avatar item or rejects on bad params\n */\n add(item) {\n if (!item) {\n return Promise.reject(new Error('`item` is required'));\n }\n if (!item.uuid) {\n return Promise.reject(new Error('`item.uuid` is required'));\n }\n if (!item.size) {\n return Promise.reject(new Error('`item.size` is required'));\n }\n if (!patterns.uuid.test(item.uuid)) {\n return Promise.reject(new Error('`item.uuid` does not appear to be a uuid'));\n }\n if (!item.url) {\n return Promise.reject(new Error('`item.url` is required'));\n }\n if (!item.cacheControl) {\n return Promise.reject(new Error('`item.cacheControl` is required'));\n }\n\n safeSetTimeout(this.remove.bind(this, item), item.cacheControl * 1000);\n urlByUuid.get(this).set(`${item.uuid} - ${item.size}`, item);\n\n return Promise.resolve(item);\n }\n\n /**\n * Remove the URL associated with the uuid and size\n * Remove urls of all sizes if size is not given\n *\n * @param {object} item\n * @param {string} item.uuid The user unique id\n * @param {integer} item.size The size of the avatar to remove\n * @returns {Promise<true>}\n */\n remove(item) {\n const sizes = (item.size && [item.size]) || [40, 50, 80, 110, 135, 192, 640, 1600];\n\n sizes.forEach((one) => urlByUuid.get(this).delete(`${item.uuid} - ${one}`));\n\n return Promise.resolve(true);\n }\n}\n"],"mappings":"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"}
|
package/dist/avatar.js
CHANGED
|
@@ -1,37 +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 _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor"));
|
|
16
|
-
|
|
17
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
18
|
-
|
|
19
12
|
var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/applyDecoratedDescriptor"));
|
|
20
|
-
|
|
21
13
|
var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
|
|
22
|
-
|
|
23
14
|
var _common = require("@webex/common");
|
|
24
|
-
|
|
25
15
|
var _helperImage = require("@webex/helper-image");
|
|
26
|
-
|
|
27
16
|
var _webexCore = require("@webex/webex-core");
|
|
28
|
-
|
|
29
17
|
var _avatarUrlStore = _interopRequireDefault(require("./avatar-url-store"));
|
|
30
|
-
|
|
31
18
|
var _avatarUrlBatcher = _interopRequireDefault(require("./avatar-url-batcher"));
|
|
32
|
-
|
|
33
19
|
var _dec, _dec2, _obj;
|
|
34
|
-
|
|
35
20
|
var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
36
21
|
keyFactory: function keyFactory(uuid) {
|
|
37
22
|
return uuid;
|
|
@@ -59,7 +44,6 @@ var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
|
59
44
|
},
|
|
60
45
|
_fetchAllAvatarUrlSizes: function _fetchAllAvatarUrlSizes(uuid, options) {
|
|
61
46
|
var _this = this;
|
|
62
|
-
|
|
63
47
|
// fetch all possible sizes of avatar and store in cache
|
|
64
48
|
return _promise.default.all(this.config.sizes.map(function (size) {
|
|
65
49
|
return _this.batcher.request({
|
|
@@ -74,28 +58,27 @@ var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
|
74
58
|
},
|
|
75
59
|
_fetchAvatarUrl: function _fetchAvatarUrl(uuid, options) {
|
|
76
60
|
var _this2 = this;
|
|
77
|
-
|
|
78
61
|
return this.store.get({
|
|
79
62
|
uuid: uuid,
|
|
80
63
|
size: options.size
|
|
81
64
|
}).catch(function () {
|
|
82
|
-
return _promise.default.all([_this2._fetchAllAvatarUrlSizes(uuid, options),
|
|
65
|
+
return _promise.default.all([_this2._fetchAllAvatarUrlSizes(uuid, options),
|
|
66
|
+
// just in case options.size does not fall into the predefined values above
|
|
83
67
|
_this2.batcher.request({
|
|
84
68
|
uuid: uuid,
|
|
85
69
|
size: options.size
|
|
86
|
-
})])
|
|
70
|
+
})])
|
|
71
|
+
// eslint-disable-next-line no-unused-vars
|
|
87
72
|
.then(function (_ref) {
|
|
88
73
|
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
74
|
+
ignore = _ref2[0],
|
|
75
|
+
item = _ref2[1];
|
|
92
76
|
return _this2.store.add((0, _defaults2.default)({
|
|
93
77
|
cacheControl: options.cacheControl
|
|
94
78
|
}, item));
|
|
95
79
|
});
|
|
96
80
|
});
|
|
97
81
|
},
|
|
98
|
-
|
|
99
82
|
/**
|
|
100
83
|
* Retrieves an Avatar from a cache or the api on misses.
|
|
101
84
|
*
|
|
@@ -108,11 +91,9 @@ var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
|
108
91
|
*/
|
|
109
92
|
retrieveAvatarUrl: function retrieveAvatarUrl(user, options) {
|
|
110
93
|
var _this3 = this;
|
|
111
|
-
|
|
112
94
|
if (!user) {
|
|
113
|
-
return _promise.default.reject(new Error('
|
|
95
|
+
return _promise.default.reject(new Error("'user' is a required parameter"));
|
|
114
96
|
}
|
|
115
|
-
|
|
116
97
|
options = (0, _defaults2.default)(options, {
|
|
117
98
|
cacheControl: this.config.cacheControl,
|
|
118
99
|
size: this.config.defaultAvatarSize
|
|
@@ -123,11 +104,9 @@ var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
|
123
104
|
if (options.hideDefaultAvatar) {
|
|
124
105
|
return item.hasDefaultAvatar ? null : item.url;
|
|
125
106
|
}
|
|
126
|
-
|
|
127
107
|
return item.url;
|
|
128
108
|
});
|
|
129
109
|
},
|
|
130
|
-
|
|
131
110
|
/**
|
|
132
111
|
* Upload a new avatar for the current user
|
|
133
112
|
*
|
|
@@ -136,7 +115,6 @@ var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
|
136
115
|
*/
|
|
137
116
|
setAvatar: function setAvatar(file) {
|
|
138
117
|
var _this4 = this;
|
|
139
|
-
|
|
140
118
|
return (0, _helperImage.detectFileType)(file, this.logger).then(function (type) {
|
|
141
119
|
return (0, _helperImage.processImage)({
|
|
142
120
|
file: file,
|
|
@@ -174,13 +152,11 @@ var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
|
174
152
|
_this4.store.remove({
|
|
175
153
|
uuid: _this4.webex.internal.device.userId
|
|
176
154
|
});
|
|
177
|
-
|
|
178
155
|
return res.url;
|
|
179
156
|
});
|
|
180
157
|
},
|
|
181
|
-
version: "3.0.0-beta.
|
|
158
|
+
version: "3.0.0-beta.30"
|
|
182
159
|
}, ((0, _applyDecoratedDescriptor2.default)(_obj, "_fetchAllAvatarUrlSizes", [_dec], (0, _getOwnPropertyDescriptor.default)(_obj, "_fetchAllAvatarUrlSizes"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "_fetchAvatarUrl", [_dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "_fetchAvatarUrl"), _obj)), _obj)));
|
|
183
|
-
|
|
184
160
|
var _default2 = Avatar;
|
|
185
161
|
exports.default = _default2;
|
|
186
162
|
//# sourceMappingURL=avatar.js.map
|
package/dist/avatar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Avatar","WebexPlugin","extend","oneFlight","keyFactory","uuid","options","String","size","namespace","children","batcher","AvatarUrlBatcher","session","store","default","AvatarUrlStore","type","enableThumbnails","_fetchAllAvatarUrlSizes","all","config","sizes","map","request","then","item","add","cacheControl","_fetchAvatarUrl","get","catch","ignore","retrieveAvatarUrl","user","reject","Error","defaultAvatarSize","webex","internal","asUUID","hideDefaultAvatar","hasDefaultAvatar","url","setAvatar","file","detectFileType","logger","processImage","thumbnailMaxWidth","thumbnailMaxHeight","isAvatar","processedImage","upload","api","resource","device","userId","phases","$uri","finalize","method","$resource","id","res","remove"],"sources":["avatar.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {oneFlight} from '@webex/common';\nimport {detectFileType, processImage} from '@webex/helper-image';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {defaults} from 'lodash';\n\nimport AvatarUrlStore from './avatar-url-store';\nimport AvatarUrlBatcher from './avatar-url-batcher';\n\nconst Avatar = WebexPlugin.extend({\n namespace: 'Avatar',\n\n children: {\n batcher: AvatarUrlBatcher
|
|
1
|
+
{"version":3,"names":["Avatar","WebexPlugin","extend","oneFlight","keyFactory","uuid","options","String","size","namespace","children","batcher","AvatarUrlBatcher","session","store","default","AvatarUrlStore","type","enableThumbnails","_fetchAllAvatarUrlSizes","all","config","sizes","map","request","then","item","add","cacheControl","_fetchAvatarUrl","get","catch","ignore","retrieveAvatarUrl","user","reject","Error","defaultAvatarSize","webex","internal","asUUID","hideDefaultAvatar","hasDefaultAvatar","url","setAvatar","file","detectFileType","logger","processImage","thumbnailMaxWidth","thumbnailMaxHeight","isAvatar","processedImage","upload","api","resource","device","userId","phases","$uri","finalize","method","$resource","id","res","remove"],"sources":["avatar.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {oneFlight} from '@webex/common';\nimport {detectFileType, processImage} from '@webex/helper-image';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {defaults} from 'lodash';\n\nimport AvatarUrlStore from './avatar-url-store';\nimport AvatarUrlBatcher from './avatar-url-batcher';\n\nconst Avatar = WebexPlugin.extend({\n namespace: 'Avatar',\n\n children: {\n batcher: AvatarUrlBatcher,\n },\n\n session: {\n store: {\n default() {\n return new AvatarUrlStore();\n },\n type: 'any',\n },\n enableThumbnails: {\n default: true,\n type: 'boolean',\n },\n },\n\n @oneFlight({keyFactory: (uuid) => uuid})\n _fetchAllAvatarUrlSizes(uuid, options) {\n // fetch all possible sizes of avatar and store in cache\n return Promise.all(\n this.config.sizes.map((size) =>\n this.batcher\n .request({uuid, size})\n .then((item) => this.store.add(defaults({cacheControl: options.cacheControl}, item)))\n )\n );\n },\n\n /**\n * @private\n * Requests an avatar URL from the api\n * @param {string} uuid\n * @param {Object} options\n * @param {integer} options.size\n * @param {integer} options.cacheControl\n * @returns {Promise<string>} the avatar URL\n */\n @oneFlight({keyFactory: (uuid, options) => uuid + String(options && options.size)})\n _fetchAvatarUrl(uuid, options) {\n return this.store.get({uuid, size: options.size}).catch(() =>\n Promise.all([\n this._fetchAllAvatarUrlSizes(uuid, options),\n // just in case options.size does not fall into the predefined values above\n this.batcher.request({uuid, size: options.size}),\n ])\n // eslint-disable-next-line no-unused-vars\n .then(([ignore, item]) =>\n this.store.add(defaults({cacheControl: options.cacheControl}, item))\n )\n );\n },\n\n /**\n * Retrieves an Avatar from a cache or the api on misses.\n *\n * @param {UserObject|string} user The user, Webex user uuid, or email\n * @param {Object} [options]\n * @param {integer} [options.size] In {1600, 640, 192, 135, 110, 80, 50, 40}\n * Defaults to 80 if falsy\n * @param {boolean} [options.hideDefaultAvatar] does not return default avatar url if true. Defaults to false\n * @returns {Promise<string>} A promise that resolves to the avatar\n */\n retrieveAvatarUrl(user, options) {\n if (!user) {\n return Promise.reject(new Error(\"'user' is a required parameter\"));\n }\n\n options = defaults(options, {\n cacheControl: this.config.cacheControl,\n size: this.config.defaultAvatarSize,\n });\n\n return this.webex.internal.user\n .asUUID(user)\n .then((uuid) => this._fetchAvatarUrl(uuid, options))\n .then((item) => {\n if (options.hideDefaultAvatar) {\n return item.hasDefaultAvatar ? null : item.url;\n }\n\n return item.url;\n });\n },\n\n /**\n * Upload a new avatar for the current user\n *\n * @param {Blob|File|Buffer} file The new avatar\n * @returns {Promise} Resolves with the URL of the full-sized avatar\n */\n setAvatar(file) {\n return detectFileType(file, this.logger)\n .then((type) =>\n processImage({\n file,\n type,\n thumbnailMaxWidth: this.config.thumbnailMaxWidth,\n thumbnailMaxHeight: this.config.thumbnailMaxHeight,\n enableThumbnails: this.enableThumbnails,\n logger: this.logger,\n isAvatar: true,\n })\n )\n .then((processedImage) =>\n this.upload({\n api: 'avatar',\n resource: `profile/${this.webex.internal.device.userId}/session`,\n file: processedImage[0],\n phases: {\n upload: {\n $uri: (session) => session.url,\n },\n finalize: {\n method: 'PUT',\n api: 'avatar',\n $resource: (session) =>\n // eslint-disable-next-line max-len\n `profile/${this.webex.internal.device.userId}/session/${session.id}`,\n },\n },\n })\n )\n .then((res) => {\n // invalidate user's cached avatar\n this.store.remove({uuid: this.webex.internal.device.userId});\n\n return res.url;\n });\n },\n});\n\nexport default Avatar;\n"],"mappings":"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"}
|
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
|
*/
|
|
@@ -16,26 +13,22 @@ var _default = {
|
|
|
16
13
|
batcherWait: 100,
|
|
17
14
|
batcherMaxCalls: 100,
|
|
18
15
|
batcherMaxWait: 1500,
|
|
19
|
-
|
|
20
16
|
/**
|
|
21
17
|
* @description avatar URL store TTL, allows avatar updates to eventually be propegated
|
|
22
18
|
* @type {number} Number of seconds the avatar should remain in store
|
|
23
19
|
*/
|
|
24
20
|
cacheControl: 60 * 60,
|
|
25
|
-
|
|
26
21
|
/**
|
|
27
22
|
* @description default avatar size to retrieve if no size is specified
|
|
28
23
|
* @type {number}
|
|
29
24
|
*/
|
|
30
25
|
defaultAvatarSize: 80,
|
|
31
26
|
sizes: [40, 50, 80, 110, 135, 192, 640, 1600],
|
|
32
|
-
|
|
33
27
|
/**
|
|
34
28
|
* Max height for thumbnails generated when sharing an image
|
|
35
29
|
* @type {number}
|
|
36
30
|
*/
|
|
37
31
|
thumbnailMaxHeight: 960,
|
|
38
|
-
|
|
39
32
|
/**
|
|
40
33
|
* Max width for thumbnails generated when sharing an image
|
|
41
34
|
* @type {number}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["avatar","batcherWait","batcherMaxCalls","batcherMaxWait","cacheControl","defaultAvatarSize","sizes","thumbnailMaxHeight","thumbnailMaxWidth"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n avatar: {\n batcherWait: 100,\n batcherMaxCalls: 100,\n batcherMaxWait: 1500,\n\n /**\n * @description avatar URL store TTL, allows avatar updates to eventually be propegated\n * @type {number} Number of seconds the avatar should remain in store\n */\n cacheControl: 60 * 60,\n /**\n * @description default avatar size to retrieve if no size is specified\n * @type {number}\n */\n defaultAvatarSize: 80,\n sizes: [40, 50, 80, 110, 135, 192, 640, 1600],\n /**\n * Max height for thumbnails generated when sharing an image\n * @type {number}\n */\n thumbnailMaxHeight: 960,\n /**\n * Max width for thumbnails generated when sharing an image\n * @type {number}\n */\n thumbnailMaxWidth: 640
|
|
1
|
+
{"version":3,"names":["avatar","batcherWait","batcherMaxCalls","batcherMaxWait","cacheControl","defaultAvatarSize","sizes","thumbnailMaxHeight","thumbnailMaxWidth"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n avatar: {\n batcherWait: 100,\n batcherMaxCalls: 100,\n batcherMaxWait: 1500,\n\n /**\n * @description avatar URL store TTL, allows avatar updates to eventually be propegated\n * @type {number} Number of seconds the avatar should remain in store\n */\n cacheControl: 60 * 60,\n /**\n * @description default avatar size to retrieve if no size is specified\n * @type {number}\n */\n defaultAvatarSize: 80,\n sizes: [40, 50, 80, 110, 135, 192, 640, 1600],\n /**\n * Max height for thumbnails generated when sharing an image\n * @type {number}\n */\n thumbnailMaxHeight: 960,\n /**\n * Max width for thumbnails generated when sharing an image\n * @type {number}\n */\n thumbnailMaxWidth: 640,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,eAIe;EACbA,MAAM,EAAE;IACNC,WAAW,EAAE,GAAG;IAChBC,eAAe,EAAE,GAAG;IACpBC,cAAc,EAAE,IAAI;IAEpB;AACJ;AACA;AACA;IACIC,YAAY,EAAE,EAAE,GAAG,EAAE;IACrB;AACJ;AACA;AACA;IACIC,iBAAiB,EAAE,EAAE;IACrBC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;IAC7C;AACJ;AACA;AACA;IACIC,kBAAkB,EAAE,GAAG;IACvB;AACJ;AACA;AACA;IACIC,iBAAiB,EAAE;EACrB;AACF,CAAC;AAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,25 @@
|
|
|
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 _avatar.default;
|
|
15
12
|
}
|
|
16
13
|
});
|
|
17
|
-
|
|
18
14
|
require("@webex/internal-plugin-user");
|
|
19
|
-
|
|
20
15
|
require("@webex/internal-plugin-device");
|
|
21
|
-
|
|
22
16
|
var _webexCore = require("@webex/webex-core");
|
|
23
|
-
|
|
24
17
|
var _avatar = _interopRequireDefault(require("./avatar"));
|
|
25
|
-
|
|
26
18
|
var _config = _interopRequireDefault(require("./config"));
|
|
27
|
-
|
|
28
19
|
/*!
|
|
29
20
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
30
21
|
*/
|
|
22
|
+
|
|
31
23
|
(0, _webexCore.registerInternalPlugin)('avatar', _avatar.default, {
|
|
32
24
|
config: _config.default
|
|
33
25
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["registerInternalPlugin","Avatar","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-user';\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Avatar from './avatar';\nimport config from './config';\n\nregisterInternalPlugin('avatar', Avatar, {\n config
|
|
1
|
+
{"version":3,"names":["registerInternalPlugin","Avatar","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-user';\nimport '@webex/internal-plugin-device';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Avatar from './avatar';\nimport config from './config';\n\nregisterInternalPlugin('avatar', Avatar, {\n config,\n});\n\nexport {default} from './avatar';\n"],"mappings":";;;;;;;;;;;;;AAIA;AACA;AAEA;AAEA;AACA;AAVA;AACA;AACA;;AAUA,IAAAA,iCAAsB,EAAC,QAAQ,EAAEC,eAAM,EAAE;EACvCC,MAAM,EAANA;AACF,CAAC,CAAC"}
|