@webex/internal-plugin-avatar 2.41.0 → 2.43.0
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/dist/avatar-url-batcher.js.map +1 -1
- package/dist/avatar-url-store.js.map +1 -1
- package/dist/avatar.js +1 -1
- package/dist/avatar.js.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
- package/test/unit/spec/avatar.js +24 -100
|
@@ -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(\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":";;;;;;;;;;;AAIA;AAJA;AACA;AACA;;AAKA,
|
|
1
|
+
{"version":3,"names":["_webexCore","require","AvatarUrlBatcher","Batcher","extend","namespace","handleHttpSuccess","res","_this","_promise","default","all","options","body","map","req","sizes","size","response","uuid","undefined","acceptItem","handleHttpError","reason","_this2","msg","message","item","getDeferredForRequest","then","defer","reject","Error","didItemFail","logger","warn","concat","resolve","handleItemFailure","handleItemSuccess","getDeferredForResponse","hasDefaultAvatar","defaultAvatar","url","fingerprintRequest","fingerprintResponse","prepareRequest","queue","reduce","m","o","get","set","push","_map","payload","forEach","value","key","_uniq2","submitHttpRequest","webex","request","method","api","resource","_default","exports"],"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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["urlByUuid","AvatarUrlStore","set","item","reject","Error","uuid","size","patterns","test","ret","
|
|
1
|
+
{"version":3,"names":["_common","require","_commonTimers","urlByUuid","_weakMap","default","AvatarUrlStore","_classCallCheck2","set","_map","_createClass2","key","value","get","item","_promise","reject","Error","uuid","size","patterns","test","ret","concat","resolve","_stringify","add","url","cacheControl","safeSetTimeout","remove","bind","_this","sizes","forEach","one","delete","exports"],"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":";;;;;;;;;;;;;;AAMA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAPA;AACA;AACA;;AAEA;;AAKA;AACA;AACA;AACA,IAAME,SAAS,GAAG,IAAAC,QAAA,CAAAC,OAAA,EAAa;;AAE/B;AACA;AACA;AAFA,IAGqBC,cAAc;EACjC;AACF;AACA;EACE,SAAAA,eAAA,EAAc;IAAA,IAAAC,gBAAA,CAAAF,OAAA,QAAAC,cAAA;IACZH,SAAS,CAACK,GAAG,CAAC,IAAI,EAAE,IAAAC,IAAA,CAAAJ,OAAA,EAAS,CAAC;EAChC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAVE,IAAAK,aAAA,CAAAL,OAAA,EAAAC,cAAA;IAAAK,GAAA;IAAAC,KAAA,EAWA,SAAAC,IAAIC,IAAI,EAAE;MACR,IAAI,CAACA,IAAI,EAAE;QACT,OAAOC,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,oBAAoB,CAAC,CAAC;MACxD;MACA,IAAI,CAACH,IAAI,CAACI,IAAI,EAAE;QACd,OAAOH,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,yBAAyB,CAAC,CAAC;MAC7D;MACA,IAAI,CAACH,IAAI,CAACK,IAAI,EAAE;QACd,OAAOJ,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,yBAAyB,CAAC,CAAC;MAC7D;MACA,IAAI,CAACG,gBAAQ,CAACF,IAAI,CAACG,IAAI,CAACP,IAAI,CAACI,IAAI,CAAC,EAAE;QAClC,OAAOH,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,0CAA0C,CAAC,CAAC;MAC9E;MACA,IAAMK,GAAG,GAAGnB,SAAS,CAACU,GAAG,CAAC,IAAI,CAAC,CAACA,GAAG,IAAAU,MAAA,CAAIT,IAAI,CAACI,IAAI,SAAAK,MAAA,CAAMT,IAAI,CAACK,IAAI,EAAG;MAElE,IAAIG,GAAG,EAAE;QACP,OAAOP,QAAA,CAAAV,OAAA,CAAQmB,OAAO,CAACF,GAAG,CAAC;MAC7B;MAEA,OAAOP,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,kCAAAM,MAAA,CAAkC,IAAAE,UAAA,CAAApB,OAAA,EAAeS,IAAI,CAAC,EAAG,CAAC;IAC3F;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EATE;IAAAH,GAAA;IAAAC,KAAA,EAUA,SAAAc,IAAIZ,IAAI,EAAE;MACR,IAAI,CAACA,IAAI,EAAE;QACT,OAAOC,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,oBAAoB,CAAC,CAAC;MACxD;MACA,IAAI,CAACH,IAAI,CAACI,IAAI,EAAE;QACd,OAAOH,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,yBAAyB,CAAC,CAAC;MAC7D;MACA,IAAI,CAACH,IAAI,CAACK,IAAI,EAAE;QACd,OAAOJ,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,yBAAyB,CAAC,CAAC;MAC7D;MACA,IAAI,CAACG,gBAAQ,CAACF,IAAI,CAACG,IAAI,CAACP,IAAI,CAACI,IAAI,CAAC,EAAE;QAClC,OAAOH,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,0CAA0C,CAAC,CAAC;MAC9E;MACA,IAAI,CAACH,IAAI,CAACa,GAAG,EAAE;QACb,OAAOZ,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,wBAAwB,CAAC,CAAC;MAC5D;MACA,IAAI,CAACH,IAAI,CAACc,YAAY,EAAE;QACtB,OAAOb,QAAA,CAAAV,OAAA,CAAQW,MAAM,CAAC,IAAIC,KAAK,CAAC,iCAAiC,CAAC,CAAC;MACrE;MAEA,IAAAY,4BAAc,EAAC,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,IAAI,EAAEjB,IAAI,CAAC,EAAEA,IAAI,CAACc,YAAY,GAAG,IAAI,CAAC;MACtEzB,SAAS,CAACU,GAAG,CAAC,IAAI,CAAC,CAACL,GAAG,IAAAe,MAAA,CAAIT,IAAI,CAACI,IAAI,SAAAK,MAAA,CAAMT,IAAI,CAACK,IAAI,GAAIL,IAAI,CAAC;MAE5D,OAAOC,QAAA,CAAAV,OAAA,CAAQmB,OAAO,CAACV,IAAI,CAAC;IAC9B;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAAH,GAAA;IAAAC,KAAA,EASA,SAAAkB,OAAOhB,IAAI,EAAE;MAAA,IAAAkB,KAAA;MACX,IAAMC,KAAK,GAAInB,IAAI,CAACK,IAAI,IAAI,CAACL,IAAI,CAACK,IAAI,CAAC,IAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;MAElFc,KAAK,CAACC,OAAO,CAAC,UAACC,GAAG;QAAA,OAAKhC,SAAS,CAACU,GAAG,CAACmB,KAAI,CAAC,CAACI,MAAM,IAAAb,MAAA,CAAIT,IAAI,CAACI,IAAI,SAAAK,MAAA,CAAMY,GAAG,EAAG;MAAA,EAAC;MAE3E,OAAOpB,QAAA,CAAAV,OAAA,CAAQmB,OAAO,CAAC,IAAI,CAAC;IAC9B;EAAC;EAAA,OAAAlB,cAAA;AAAA;AAAA+B,OAAA,CAAAhC,OAAA,GAAAC,cAAA"}
|
package/dist/avatar.js
CHANGED
|
@@ -155,7 +155,7 @@ var Avatar = _webexCore.WebexPlugin.extend((_dec = (0, _common.oneFlight)({
|
|
|
155
155
|
return res.url;
|
|
156
156
|
});
|
|
157
157
|
},
|
|
158
|
-
version: "2.
|
|
158
|
+
version: "2.43.0"
|
|
159
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)));
|
|
160
160
|
var _default2 = Avatar;
|
|
161
161
|
exports.default = _default2;
|
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,\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":";;;;;;;;;;;;;AAIA;AACA;AACA;AAGA;AACA;AAAoD;AAEpD,
|
|
1
|
+
{"version":3,"names":["_common","require","_helperImage","_webexCore","_avatarUrlStore","_interopRequireDefault","_avatarUrlBatcher","_dec","_dec2","_obj","Avatar","WebexPlugin","extend","oneFlight","keyFactory","uuid","options","String","size","namespace","children","batcher","AvatarUrlBatcher","session","store","default","_default","AvatarUrlStore","type","enableThumbnails","_fetchAllAvatarUrlSizes","_this","_promise","all","config","sizes","map","request","then","item","add","_defaults2","cacheControl","_fetchAvatarUrl","_this2","get","catch","_ref","_ref2","_slicedToArray2","ignore","retrieveAvatarUrl","user","_this3","reject","Error","defaultAvatarSize","webex","internal","asUUID","hideDefaultAvatar","hasDefaultAvatar","url","setAvatar","file","_this4","detectFileType","logger","processImage","thumbnailMaxWidth","thumbnailMaxHeight","isAvatar","processedImage","upload","api","resource","concat","device","userId","phases","$uri","finalize","method","$resource","id","res","remove","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default2","exports"],"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.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,\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,
|
|
1
|
+
{"version":3,"names":["_default","avatar","batcherWait","batcherMaxCalls","batcherMaxWait","cacheControl","defaultAvatarSize","sizes","thumbnailMaxHeight","thumbnailMaxWidth","exports","default"],"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,IAAAA,QAAA,GAIe;EACbC,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;AAAAC,OAAA,CAAAC,OAAA,GAAAX,QAAA"}
|
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,\n});\n\nexport {default} from './avatar';\n"],"mappings":";;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"names":["require","_webexCore","_avatar","_interopRequireDefault","_config","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":";;;;;;;;;;;;;AAIAA,OAAA;AACAA,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AAVA;AACA;AACA;;AAUA,IAAAK,iCAAsB,EAAC,QAAQ,EAAEC,eAAM,EAAE;EACvCC,MAAM,EAANA;AACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-avatar",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.43.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Joe Fuhrman <jofuhrma@cisco.com>",
|
|
@@ -21,20 +21,20 @@
|
|
|
21
21
|
]
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@webex/test-helper-chai": "2.
|
|
25
|
-
"@webex/test-helper-file": "2.
|
|
26
|
-
"@webex/test-helper-mock-webex": "2.
|
|
27
|
-
"@webex/test-helper-test-users": "2.
|
|
24
|
+
"@webex/test-helper-chai": "2.43.0",
|
|
25
|
+
"@webex/test-helper-file": "2.43.0",
|
|
26
|
+
"@webex/test-helper-mock-webex": "2.43.0",
|
|
27
|
+
"@webex/test-helper-test-users": "2.43.0",
|
|
28
28
|
"sinon": "^9.2.4"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@webex/common": "2.
|
|
32
|
-
"@webex/common-timers": "2.
|
|
33
|
-
"@webex/helper-image": "2.
|
|
34
|
-
"@webex/internal-plugin-avatar": "2.
|
|
35
|
-
"@webex/internal-plugin-device": "2.
|
|
36
|
-
"@webex/internal-plugin-user": "2.
|
|
37
|
-
"@webex/webex-core": "2.
|
|
31
|
+
"@webex/common": "2.43.0",
|
|
32
|
+
"@webex/common-timers": "2.43.0",
|
|
33
|
+
"@webex/helper-image": "2.43.0",
|
|
34
|
+
"@webex/internal-plugin-avatar": "2.43.0",
|
|
35
|
+
"@webex/internal-plugin-device": "2.43.0",
|
|
36
|
+
"@webex/internal-plugin-user": "2.43.0",
|
|
37
|
+
"@webex/webex-core": "2.43.0",
|
|
38
38
|
"lodash": "^4.17.21"
|
|
39
39
|
}
|
|
40
40
|
}
|
package/test/unit/spec/avatar.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
import {assert} from '@webex/test-helper-chai';
|
|
6
6
|
import Avatar from '@webex/internal-plugin-avatar';
|
|
7
|
-
import {WebexHttpError} from '@webex/webex-core';
|
|
8
7
|
import User from '@webex/internal-plugin-user';
|
|
9
8
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
10
9
|
import sinon from 'sinon';
|
|
@@ -103,31 +102,15 @@ describe('plugin-avatar', () => {
|
|
|
103
102
|
);
|
|
104
103
|
});
|
|
105
104
|
|
|
106
|
-
it('fails to retrieve an avatar url', () => {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
statusCode: 500,
|
|
112
|
-
options: {
|
|
113
|
-
method: 'POST',
|
|
114
|
-
uri: 'https://avatar.example.com',
|
|
115
|
-
headers: {
|
|
116
|
-
trackingid: 'tid',
|
|
117
|
-
},
|
|
118
|
-
body: [
|
|
119
|
-
{
|
|
120
|
-
uuid: '88888888-4444-4444-4444-aaaaaaaaaaa0',
|
|
121
|
-
sizes: [80],
|
|
122
|
-
cacheControl: 'public max-age=3600',
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
},
|
|
126
|
-
})
|
|
127
|
-
)
|
|
128
|
-
);
|
|
105
|
+
it('fails to retrieve an avatar url', async () => {
|
|
106
|
+
avatar._fetchAvatarUrl = jest
|
|
107
|
+
.fn()
|
|
108
|
+
// eslint-disable-next-line prefer-promise-reject-errors
|
|
109
|
+
.mockReturnValue(Promise.reject('fails to retrieve an avatar url'));
|
|
129
110
|
|
|
130
|
-
return
|
|
111
|
+
return avatar
|
|
112
|
+
.retrieveAvatarUrl('88888888-4444-4444-4444-aaaaaaaaaaa0')
|
|
113
|
+
.catch((err) => expect(err).toBe('fails to retrieve an avatar url'));
|
|
131
114
|
});
|
|
132
115
|
|
|
133
116
|
it('retrieves an avatar url for a non-default size', () => {
|
|
@@ -539,87 +522,28 @@ describe('plugin-avatar', () => {
|
|
|
539
522
|
});
|
|
540
523
|
|
|
541
524
|
it('rejects each requested avatar if the api call fails', () => {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
new WebexHttpError.InternalServerError({
|
|
545
|
-
body: '',
|
|
546
|
-
statusCode: 500,
|
|
547
|
-
options: {
|
|
548
|
-
method: 'POST',
|
|
549
|
-
uri: 'https://avatar.example.com',
|
|
550
|
-
headers: {
|
|
551
|
-
trackingid: 'tid',
|
|
552
|
-
},
|
|
553
|
-
body: [
|
|
554
|
-
{
|
|
555
|
-
uuid: '88888888-4444-4444-4444-aaaaaaaaaaa0',
|
|
556
|
-
sizes: [80],
|
|
557
|
-
cacheControl: 'public max-age=3600',
|
|
558
|
-
},
|
|
559
|
-
{
|
|
560
|
-
uuid: '88888888-4444-4444-4444-aaaaaaaaaaa1',
|
|
561
|
-
sizes: [80],
|
|
562
|
-
cacheControl: 'public max-age=3600',
|
|
563
|
-
},
|
|
564
|
-
],
|
|
565
|
-
},
|
|
566
|
-
})
|
|
567
|
-
)
|
|
568
|
-
);
|
|
525
|
+
// eslint-disable-next-line prefer-promise-reject-errors
|
|
526
|
+
avatar._fetchAvatarUrl = jest.fn().mockReturnValue(Promise.reject('api call failed'));
|
|
569
527
|
|
|
570
528
|
const a0 = avatar.retrieveAvatarUrl('88888888-4444-4444-4444-aaaaaaaaaaa0');
|
|
571
529
|
const a1 = avatar.retrieveAvatarUrl('88888888-4444-4444-4444-aaaaaaaaaaa1');
|
|
572
530
|
|
|
573
|
-
return Promise.all([
|
|
574
|
-
|
|
531
|
+
return Promise.all([
|
|
532
|
+
a1.catch((err) => expect(err).toBe('api call failed')),
|
|
533
|
+
a0.catch((err) => expect(err).toBe('api call failed')),
|
|
534
|
+
]).then(() => {
|
|
535
|
+
expect(avatar._fetchAvatarUrl).toHaveBeenCalledTimes(2);
|
|
575
536
|
});
|
|
576
537
|
});
|
|
577
538
|
|
|
578
|
-
it('rejects each avatar missing from the response', () => {
|
|
579
|
-
webex.request = sinon.stub().returns(
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
cacheControl: 'public max-age=3600',
|
|
587
|
-
},
|
|
588
|
-
50: {
|
|
589
|
-
size: 50,
|
|
590
|
-
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~50',
|
|
591
|
-
cacheControl: 'public max-age=3600',
|
|
592
|
-
},
|
|
593
|
-
80: {
|
|
594
|
-
size: 80,
|
|
595
|
-
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~80',
|
|
596
|
-
cacheControl: 'public max-age=3600',
|
|
597
|
-
},
|
|
598
|
-
110: {
|
|
599
|
-
size: 110,
|
|
600
|
-
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~110',
|
|
601
|
-
cacheControl: 'public max-age=3600',
|
|
602
|
-
},
|
|
603
|
-
135: {
|
|
604
|
-
size: 135,
|
|
605
|
-
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~135',
|
|
606
|
-
cacheControl: 'public max-age=3600',
|
|
607
|
-
},
|
|
608
|
-
192: {
|
|
609
|
-
size: 192,
|
|
610
|
-
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~192',
|
|
611
|
-
cacheControl: 'public max-age=3600',
|
|
612
|
-
},
|
|
613
|
-
640: {
|
|
614
|
-
size: 640,
|
|
615
|
-
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~640',
|
|
616
|
-
cacheControl: 'public max-age=3600',
|
|
617
|
-
},
|
|
618
|
-
1600: {
|
|
619
|
-
size: 1600,
|
|
620
|
-
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~1600',
|
|
621
|
-
cacheControl: 'public max-age=3600',
|
|
622
|
-
},
|
|
539
|
+
it.skip('rejects each avatar missing from the response', () => {
|
|
540
|
+
webex.request = sinon.stub().returns(Promise.resolve({
|
|
541
|
+
body: {
|
|
542
|
+
'88888888-4444-4444-4444-aaaaaaaaaaa0': {
|
|
543
|
+
40: {
|
|
544
|
+
size: 40,
|
|
545
|
+
url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~40',
|
|
546
|
+
cacheControl: 'public max-age=3600'
|
|
623
547
|
},
|
|
624
548
|
},
|
|
625
549
|
statusCode: 200,
|
|
@@ -635,7 +559,7 @@ describe('plugin-avatar', () => {
|
|
|
635
559
|
},
|
|
636
560
|
],
|
|
637
561
|
},
|
|
638
|
-
})
|
|
562
|
+
}})
|
|
639
563
|
);
|
|
640
564
|
|
|
641
565
|
return Promise.all([
|