@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.
@@ -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":"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"}
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","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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"}
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":"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"}
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.41.0"
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;
@@ -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":"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"}
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":";;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAGA,IAAAG,eAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAD,sBAAA,CAAAJ,OAAA;AAAoD,IAAAM,IAAA,EAAAC,KAAA,EAAAC,IAAA;AAEpD,IAAMC,MAAM,GAAGC,sBAAW,CAACC,MAAM,EAAAL,IAAA,GAoB9B,IAAAM,iBAAS,EAAC;EAACC,UAAU,EAAE,SAAAA,WAACC,IAAI;IAAA,OAAKA,IAAI;EAAA;AAAA,CAAC,CAAC,EAAAP,KAAA,GAqBvC,IAAAK,iBAAS,EAAC;EAACC,UAAU,EAAE,SAAAA,WAACC,IAAI,EAAEC,OAAO;IAAA,OAAKD,IAAI,GAAGE,MAAM,CAACD,OAAO,IAAIA,OAAO,CAACE,IAAI,CAAC;EAAA;AAAA,CAAC,CAAC,GAAAT,IAAA,GAzCnD;EAChCU,SAAS,EAAE,QAAQ;EAEnBC,QAAQ,EAAE;IACRC,OAAO,EAAEC;EACX,CAAC;EAEDC,OAAO,EAAE;IACPC,KAAK,EAAE;MACLC,OAAO,WAAAC,SAAA,EAAG;QACR,OAAO,IAAIC,uBAAc,EAAE;MAC7B,CAAC;MACDC,IAAI,EAAE;IACR,CAAC;IACDC,gBAAgB,EAAE;MAChBJ,OAAO,EAAE,IAAI;MACbG,IAAI,EAAE;IACR;EACF,CAAC;EAGDE,uBAAuB,WAAAA,wBAACf,IAAI,EAAEC,OAAO,EAAE;IAAA,IAAAe,KAAA;IACrC;IACA,OAAOC,QAAA,CAAAP,OAAA,CAAQQ,GAAG,CAChB,IAAI,CAACC,MAAM,CAACC,KAAK,CAACC,GAAG,CAAC,UAAClB,IAAI;MAAA,OACzBa,KAAI,CAACV,OAAO,CACTgB,OAAO,CAAC;QAACtB,IAAI,EAAJA,IAAI;QAAEG,IAAI,EAAJA;MAAI,CAAC,CAAC,CACrBoB,IAAI,CAAC,UAACC,IAAI;QAAA,OAAKR,KAAI,CAACP,KAAK,CAACgB,GAAG,CAAC,IAAAC,UAAA,CAAAhB,OAAA,EAAS;UAACiB,YAAY,EAAE1B,OAAO,CAAC0B;QAAY,CAAC,EAAEH,IAAI,CAAC,CAAC;MAAA,EAAC;IAAA,EACxF,CACF;EACH,CAAC;EAYDI,eAAe,WAAAA,gBAAC5B,IAAI,EAAEC,OAAO,EAAE;IAAA,IAAA4B,MAAA;IAC7B,OAAO,IAAI,CAACpB,KAAK,CAACqB,GAAG,CAAC;MAAC9B,IAAI,EAAJA,IAAI;MAAEG,IAAI,EAAEF,OAAO,CAACE;IAAI,CAAC,CAAC,CAAC4B,KAAK,CAAC;MAAA,OACtDd,QAAA,CAAAP,OAAA,CAAQQ,GAAG,CAAC,CACVW,MAAI,CAACd,uBAAuB,CAACf,IAAI,EAAEC,OAAO,CAAC;MAC3C;MACA4B,MAAI,CAACvB,OAAO,CAACgB,OAAO,CAAC;QAACtB,IAAI,EAAJA,IAAI;QAAEG,IAAI,EAAEF,OAAO,CAACE;MAAI,CAAC,CAAC,CACjD;MACC;MAAA,CACCoB,IAAI,CAAC,UAAAS,IAAA;QAAA,IAAAC,KAAA,OAAAC,eAAA,CAAAxB,OAAA,EAAAsB,IAAA;UAAEG,MAAM,GAAAF,KAAA;UAAET,IAAI,GAAAS,KAAA;QAAA,OAClBJ,MAAI,CAACpB,KAAK,CAACgB,GAAG,CAAC,IAAAC,UAAA,CAAAhB,OAAA,EAAS;UAACiB,YAAY,EAAE1B,OAAO,CAAC0B;QAAY,CAAC,EAAEH,IAAI,CAAC,CAAC;MAAA,EACrE;IAAA,EACJ;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEY,iBAAiB,WAAAA,kBAACC,IAAI,EAAEpC,OAAO,EAAE;IAAA,IAAAqC,MAAA;IAC/B,IAAI,CAACD,IAAI,EAAE;MACT,OAAOpB,QAAA,CAAAP,OAAA,CAAQ6B,MAAM,CAAC,IAAIC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpE;IAEAvC,OAAO,GAAG,IAAAyB,UAAA,CAAAhB,OAAA,EAAST,OAAO,EAAE;MAC1B0B,YAAY,EAAE,IAAI,CAACR,MAAM,CAACQ,YAAY;MACtCxB,IAAI,EAAE,IAAI,CAACgB,MAAM,CAACsB;IACpB,CAAC,CAAC;IAEF,OAAO,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACN,IAAI,CAC5BO,MAAM,CAACP,IAAI,CAAC,CACZd,IAAI,CAAC,UAACvB,IAAI;MAAA,OAAKsC,MAAI,CAACV,eAAe,CAAC5B,IAAI,EAAEC,OAAO,CAAC;IAAA,EAAC,CACnDsB,IAAI,CAAC,UAACC,IAAI,EAAK;MACd,IAAIvB,OAAO,CAAC4C,iBAAiB,EAAE;QAC7B,OAAOrB,IAAI,CAACsB,gBAAgB,GAAG,IAAI,GAAGtB,IAAI,CAACuB,GAAG;MAChD;MAEA,OAAOvB,IAAI,CAACuB,GAAG;IACjB,CAAC,CAAC;EACN,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,SAAS,WAAAA,UAACC,IAAI,EAAE;IAAA,IAAAC,MAAA;IACd,OAAO,IAAAC,2BAAc,EAACF,IAAI,EAAE,IAAI,CAACG,MAAM,CAAC,CACrC7B,IAAI,CAAC,UAACV,IAAI;MAAA,OACT,IAAAwC,yBAAY,EAAC;QACXJ,IAAI,EAAJA,IAAI;QACJpC,IAAI,EAAJA,IAAI;QACJyC,iBAAiB,EAAEJ,MAAI,CAAC/B,MAAM,CAACmC,iBAAiB;QAChDC,kBAAkB,EAAEL,MAAI,CAAC/B,MAAM,CAACoC,kBAAkB;QAClDzC,gBAAgB,EAAEoC,MAAI,CAACpC,gBAAgB;QACvCsC,MAAM,EAAEF,MAAI,CAACE,MAAM;QACnBI,QAAQ,EAAE;MACZ,CAAC,CAAC;IAAA,EACH,CACAjC,IAAI,CAAC,UAACkC,cAAc;MAAA,OACnBP,MAAI,CAACQ,MAAM,CAAC;QACVC,GAAG,EAAE,QAAQ;QACbC,QAAQ,aAAAC,MAAA,CAAaX,MAAI,CAACR,KAAK,CAACC,QAAQ,CAACmB,MAAM,CAACC,MAAM,aAAU;QAChEd,IAAI,EAAEQ,cAAc,CAAC,CAAC,CAAC;QACvBO,MAAM,EAAE;UACNN,MAAM,EAAE;YACNO,IAAI,EAAE,SAAAA,KAACzD,OAAO;cAAA,OAAKA,OAAO,CAACuC,GAAG;YAAA;UAChC,CAAC;UACDmB,QAAQ,EAAE;YACRC,MAAM,EAAE,KAAK;YACbR,GAAG,EAAE,QAAQ;YACbS,SAAS,EAAE,SAAAA,UAAC5D,OAAO;cAAA,OACjB;gBAAA,WAAAqD,MAAA,CACWX,MAAI,CAACR,KAAK,CAACC,QAAQ,CAACmB,MAAM,CAACC,MAAM,eAAAF,MAAA,CAAYrD,OAAO,CAAC6D,EAAE;cAAA;YAAA;UACtE;QACF;MACF,CAAC,CAAC;IAAA,EACH,CACA9C,IAAI,CAAC,UAAC+C,GAAG,EAAK;MACb;MACApB,MAAI,CAACzC,KAAK,CAAC8D,MAAM,CAAC;QAACvE,IAAI,EAAEkD,MAAI,CAACR,KAAK,CAACC,QAAQ,CAACmB,MAAM,CAACC;MAAM,CAAC,CAAC;MAE5D,OAAOO,GAAG,CAACvB,GAAG;IAChB,CAAC,CAAC;EACN,CAAC;EAAAyB,OAAA;AACH,CAAC,OAAAC,0BAAA,CAAA/D,OAAA,EAAAhB,IAAA,8BAAAF,IAAA,OAAAkF,yBAAA,CAAAhE,OAAA,EAAAhB,IAAA,8BAAAA,IAAA,OAAA+E,0BAAA,CAAA/D,OAAA,EAAAhB,IAAA,sBAAAD,KAAA,OAAAiF,yBAAA,CAAAhE,OAAA,EAAAhB,IAAA,sBAAAA,IAAA,IAAAA,IAAA,GAAC;AAAC,IAAAiF,SAAA,GAEYhF,MAAM;AAAAiF,OAAA,CAAAlE,OAAA,GAAAiE,SAAA"}
@@ -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,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"}
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":";;;;;;;;;;;;;AAIA;AACA;AAEA;AAEA;AACA;AAVA;AACA;AACA;;AAUA,IAAAA,iCAAsB,EAAC,QAAQ,EAAEC,eAAM,EAAE;EACvCC,MAAM,EAANA;AACF,CAAC,CAAC"}
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.41.0",
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.41.0",
25
- "@webex/test-helper-file": "2.41.0",
26
- "@webex/test-helper-mock-webex": "2.41.0",
27
- "@webex/test-helper-test-users": "2.41.0",
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.41.0",
32
- "@webex/common-timers": "2.41.0",
33
- "@webex/helper-image": "2.41.0",
34
- "@webex/internal-plugin-avatar": "2.41.0",
35
- "@webex/internal-plugin-device": "2.41.0",
36
- "@webex/internal-plugin-user": "2.41.0",
37
- "@webex/webex-core": "2.41.0",
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
  }
@@ -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
- webex.request = sinon.stub().returns(
108
- Promise.reject(
109
- new WebexHttpError.InternalServerError({
110
- body: '',
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 assert.isRejected(avatar.retrieveAvatarUrl('88888888-4444-4444-4444-aaaaaaaaaaa0'));
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
- webex.request = sinon.stub().returns(
543
- Promise.reject(
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([assert.isRejected(a1), assert.isRejected(a0)]).then(() => {
574
- assert.callCount(webex.request, 1);
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
- Promise.resolve({
581
- body: {
582
- '88888888-4444-4444-4444-aaaaaaaaaaa0': {
583
- 40: {
584
- size: 40,
585
- url: 'https://example.com/88888888-4444-4444-4444-aaaaaaaaaaa0~40',
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([