@webex/internal-plugin-conversation 3.0.0-beta.31 → 3.0.0-beta.310

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.
@@ -75,9 +75,14 @@ var transforms = (0, _toArray.default)('outbound', {
75
75
  });
76
76
  },
77
77
  encryptActivity: function encryptActivity(ctx, key, activity) {
78
- var _activity$object;
78
+ var _activity$target, _activity$object, _activity$object2;
79
+ // Meeting Container policy update requests do not need to be encrypted.
80
+ if ((activity === null || activity === void 0 ? void 0 : (_activity$target = activity.target) === null || _activity$target === void 0 ? void 0 : _activity$target.objectType) === 'meetingContainer' && (activity === null || activity === void 0 ? void 0 : (_activity$object = activity.object) === null || _activity$object === void 0 ? void 0 : _activity$object.objectType) === 'policies') {
81
+ return _promise.default.resolve();
82
+ }
83
+
79
84
  // Activity is already encrypted
80
- if (activity.encryptionKeyUrl || ((_activity$object = activity.object) === null || _activity$object === void 0 ? void 0 : _activity$object.created) === 'True') {
85
+ if (activity.encryptionKeyUrl || ((_activity$object2 = activity.object) === null || _activity$object2 === void 0 ? void 0 : _activity$object2.created) === 'True') {
81
86
  return _promise.default.resolve();
82
87
  }
83
88
  return ctx.transform("encrypt".concat((0, _capitalize2.default)(activity.verb), "Activity"), key, activity).then(function () {
@@ -1 +1 @@
1
- {"version":3,"names":["KEY","encryptTextProp","name","ctx","key","object","transform","encryptJsonProp","transforms","toArray","encryptObject","undefined","resolve","objectType","encryptReaction2","reaction2","encryptConversation","conversation","webex","internal","encryption","kms","createUnboundKeys","count","then","keys","k","kmsMessage","keyUris","includes","uri","push","all","activities","items","reduce","p","activity","encryptionKeyUrl","defaultActivityEncryptionKeyUrl","encryptActivity","created","verb","encryptVerbActivity","maybeEncryptTarget","target","conversationUrl","url","reject","Error","get","updateKey","updateKeyActivity","resource","kmsResourceObjectUrl","logger","warn","prepareActivityKmsMessage","kro","forEach","replace","keyUrl","encryptVerbActivityWithKey","direction","fn","encryptAddActivity","encryptAssignActivity","alias","encryptCreateActivity","encryptPostActivity","encryptShareActivity","encryptCardactionActivity","encryptUpdateActivity","encryptUpdateKeyActivity","encryptComment","comment","encryptContent","content","promises","files","map","item","encryptFile","file","image","scr","encryptSubmit","submit","encryptImageURI","imageURI","encryptPropContent","encryptPropDisplayName","encryptPropInputs","encryptPropLocation","encryptPropScr","encryptScr","encryptText","ciphertext"],"sources":["encryption-transforms.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {capitalize, curry, get, has, isArray} from 'lodash';\n\nimport toArray from './to-array';\n\nconst KEY = Symbol('KEY');\n\nconst encryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('encryptTextProp', name, key, object)\n);\n\nconst encryptJsonProp = curry((name, ctx, key, object) =>\n ctx.transform('encryptJsonProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('outbound', {\n encryptObject(ctx, key, object) {\n if (!object) {\n object = key;\n key = undefined;\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (key === false) {\n return Promise.resolve();\n }\n\n return ctx.transform(`encrypt${capitalize(object.objectType)}`, key, object);\n },\n\n encryptReaction2(ctx, key, reaction2) {\n return ctx.transform('encryptPropDisplayName', key, reaction2);\n },\n\n encryptConversation(ctx, key, conversation) {\n if (key === false) {\n return Promise.resolve();\n }\n\n return Promise.resolve(\n key || ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1})\n ).then((keys) => {\n const k = isArray(keys) ? keys[0] : keys;\n\n if (\n has(conversation, 'kmsMessage.keyUris') &&\n !conversation.kmsMessage.keyUris.includes(k.uri)\n ) {\n conversation.kmsMessage.keyUris.push(k.uri);\n }\n\n return Promise.all([\n // too many implicit returns on the same line is difficult to interpret\n // eslint-disable-next-line arrow-body-style\n has(conversation, 'activities.items') &&\n conversation.activities.items.reduce((p, activity) => {\n // eslint-disable-next-line max-nested-callbacks\n return p.then(() => ctx.transform('encryptObject', k, activity));\n }, Promise.resolve()),\n ctx.transform('encryptPropDisplayName', k, conversation),\n ]).then(() => {\n conversation.encryptionKeyUrl = k.uri || k;\n // we only want to set the defaultActivityEncryptionKeyUrl if we've\n // bound a new key\n if (!key) {\n conversation.defaultActivityEncryptionKeyUrl =\n conversation.defaultActivityEncryptionKeyUrl || k.uri || k;\n }\n });\n });\n },\n\n encryptActivity(ctx, key, activity) {\n // Activity is already encrypted\n if (activity.encryptionKeyUrl || activity.object?.created === 'True') {\n return Promise.resolve();\n }\n\n return ctx.transform(`encrypt${capitalize(activity.verb)}Activity`, key, activity).then(() => {\n key = key || activity[KEY];\n\n return ctx.transform('prepareActivityKmsMessage', key, activity);\n });\n },\n\n encryptVerbActivity(ctx, key, activity) {\n return ctx\n .transform('maybeEncryptTarget', key, activity)\n .then(() => {\n key = key || activity[KEY];\n })\n .then(() => ctx.transform('encryptObject', key, activity.object));\n },\n\n maybeEncryptTarget(ctx, key, activity) {\n // This isn't quite right; if we just go by key, we have no guarantee that\n // we have a proper KRO available for add activities\n if (key) {\n return Promise.resolve();\n }\n\n if (\n has(activity, 'target.defaultActivityEncryptionKeyUrl') &&\n activity.target.defaultActivityEncryptionKeyUrl &&\n has(activity, 'target.kmsResourceObjectUrl')\n ) {\n activity[KEY] = key || activity.target.defaultActivityEncryptionKeyUrl;\n\n return Promise.resolve();\n }\n\n const conversationUrl = activity.target && activity.target.url;\n\n if (!conversationUrl) {\n return Promise.reject(\n new Error(\n \"Cannot determine encryption key for activity's conversation; no key url or conversation url provided\"\n )\n );\n }\n\n return ctx.webex.internal.conversation.get({url: conversationUrl}).then((conversation) => {\n if (!conversation.defaultActivityEncryptionKeyUrl) {\n return ctx.webex.internal.conversation.updateKey(conversation).then((updateKeyActivity) => {\n if (updateKeyActivity.kmsMessage.resource) {\n activity.target.kmsResourceObjectUrl = updateKeyActivity.kmsMessage.resource.uri;\n }\n activity[KEY] = activity.target.defaultActivityEncryptionKeyUrl =\n updateKeyActivity.object.defaultActivityEncryptionKeyUrl;\n });\n }\n\n if (!activity.target.defaultActivityEncryptionKeyUrl) {\n ctx.webex.logger.warn(\n 'plugin-conversation: downloaded conversation to determine its defaultActivityEncryptionKeyUrl; make sure to pass all encryption related properties when calling Webex.conversation methods.'\n );\n }\n\n if (!activity.target.kmsResourceObjectUrl) {\n ctx.webex.logger.warn(\n 'plugin-conversation: downloaded conversation to determine its kmsResourceObjectUrl; make sure to pass all encryption related properties when calling Webex.conversation methods.'\n );\n }\n\n activity[KEY] = activity.target.defaultActivityEncryptionKeyUrl =\n conversation.defaultActivityEncryptionKeyUrl;\n activity.target.kmsResourceObjectUrl = conversation.kmsResourceObjectUrl;\n\n return Promise.resolve();\n });\n },\n\n prepareActivityKmsMessage(ctx, key, activity) {\n if (activity.kmsMessage) {\n if (!key && activity.verb === 'delete') {\n key = get(activity, 'target.defaultActivityEncryptionKeyUrl');\n }\n\n if (\n !key &&\n activity.verb === 'updateKey' &&\n has(activity, 'object.defaultActivityEncryptionKeyUrl')\n ) {\n key = get(activity, 'object.defaultActivityEncryptionKeyUrl');\n }\n\n if (\n !key &&\n activity.verb === 'leave' &&\n has(activity, 'target.defaultActivityEncryptionKeyUrl')\n ) {\n key = get(activity, 'target.defaultActivityEncryptionKeyUrl');\n }\n\n if (key) {\n const kro = activity.target.kmsResourceObjectUrl;\n\n ['uri', 'resourceUri'].forEach((k) => {\n if (activity.kmsMessage[k] && !kro && activity.kmsMessage[k].includes('<KRO>')) {\n throw new Error('encrypter: cannot determine kro');\n }\n\n if (activity.kmsMessage[k]) {\n activity.kmsMessage[k] = activity.kmsMessage[k].replace('<KRO>', kro);\n // key may be a key or a key url\n activity.kmsMessage[k] = activity.kmsMessage[k].replace('<KEYURL>', key.keyUrl || key);\n }\n });\n }\n // If we made it this far and still don't have an encryption key, assume\n // this is a conversation that is not encrypted and we're performing an\n // action that should not encrypt it (e.g. `leave`)\n else {\n Reflect.deleteProperty(activity, 'kmsMessage');\n }\n }\n },\n\n encryptVerbActivityWithKey: {\n direction: 'outbound',\n fn(ctx, key, activity) {\n return ctx.transform('encryptVerbActivity', key, activity).then(() => {\n key = key || activity[KEY];\n activity.encryptionKeyUrl = key.uri || key;\n });\n },\n },\n\n encryptAddActivity: {\n direction: 'outbound',\n fn(ctx, key, activity) {\n if (has(activity, 'object.objectType') && activity.object.objectType === 'reaction2') {\n return ctx.transform('encryptVerbActivityWithKey', key, activity);\n }\n\n return ctx.transform('encryptVerbActivity', key, activity);\n },\n },\n\n encryptAssignActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptCreateActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivity',\n },\n\n encryptPostActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptShareActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptCardactionActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptUpdateActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptUpdateKeyActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivity',\n },\n\n encryptComment(ctx, key, comment) {\n return Promise.all([\n ctx.transform('encryptPropDisplayName', key, comment),\n ctx.transform('encryptPropContent', key, comment),\n ]);\n },\n\n encryptContent(ctx, key, content) {\n const promises = content.files.items.map((item) => ctx.transform('encryptObject', key, item));\n\n promises.push(ctx.transform('encryptPropContent', key, content));\n promises.push(ctx.transform('encryptPropDisplayName', key, content));\n\n return Promise.all(promises);\n },\n\n encryptFile(ctx, key, file) {\n if (file.image && !file.image.scr) {\n return Promise.reject(new Error('`file.image` must have an `scr`'));\n }\n\n return Promise.all([\n ctx.transform('encryptPropScr', key, file),\n ctx.transform('encryptPropDisplayName', key, file),\n ctx.transform('encryptPropContent', key, file),\n file.image && ctx.transform('encryptPropScr', key, file.image),\n ]);\n },\n\n encryptSubmit(ctx, key, submit) {\n return ctx.transform('encryptPropInputs', key, submit);\n },\n\n // TODO is this used for anything other than the now-removed stickies service?\n encryptImageURI(ctx, key, imageURI) {\n return ctx.transform('encryptPropLocation', key, imageURI);\n },\n\n encryptPropContent: encryptTextProp('content'),\n\n encryptPropDisplayName: encryptTextProp('displayName'),\n\n encryptPropInputs: encryptJsonProp('inputs'),\n\n encryptPropLocation: encryptTextProp('location'),\n\n encryptPropScr(ctx, key, object) {\n if (!object.scr) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption.encryptScr(key, object.scr).then((scr) => {\n object.scr = scr;\n });\n },\n\n encryptJsonProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .encryptText(key.uri || key, JSON.stringify(object[name]))\n .then((ciphertext) => {\n object[name] = ciphertext;\n });\n },\n\n encryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .encryptText(key.uri || key, object[name])\n .then((ciphertext) => {\n object[name] = ciphertext;\n });\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["KEY","encryptTextProp","name","ctx","key","object","transform","encryptJsonProp","transforms","toArray","encryptObject","undefined","resolve","objectType","encryptReaction2","reaction2","encryptConversation","conversation","webex","internal","encryption","kms","createUnboundKeys","count","then","keys","k","kmsMessage","keyUris","includes","uri","push","all","activities","items","reduce","p","activity","encryptionKeyUrl","defaultActivityEncryptionKeyUrl","encryptActivity","target","created","verb","encryptVerbActivity","maybeEncryptTarget","conversationUrl","url","reject","Error","get","updateKey","updateKeyActivity","resource","kmsResourceObjectUrl","logger","warn","prepareActivityKmsMessage","kro","forEach","replace","keyUrl","encryptVerbActivityWithKey","direction","fn","encryptAddActivity","encryptAssignActivity","alias","encryptCreateActivity","encryptPostActivity","encryptShareActivity","encryptCardactionActivity","encryptUpdateActivity","encryptUpdateKeyActivity","encryptComment","comment","encryptContent","content","promises","files","map","item","encryptFile","file","image","scr","encryptSubmit","submit","encryptImageURI","imageURI","encryptPropContent","encryptPropDisplayName","encryptPropInputs","encryptPropLocation","encryptPropScr","encryptScr","encryptText","ciphertext"],"sources":["encryption-transforms.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {capitalize, curry, get, has, isArray} from 'lodash';\n\nimport toArray from './to-array';\n\nconst KEY = Symbol('KEY');\n\nconst encryptTextProp = curry((name, ctx, key, object) =>\n ctx.transform('encryptTextProp', name, key, object)\n);\n\nconst encryptJsonProp = curry((name, ctx, key, object) =>\n ctx.transform('encryptJsonProp', name, key, object)\n);\n\n// eslint-disable-next-line import/prefer-default-export\nexport const transforms = toArray('outbound', {\n encryptObject(ctx, key, object) {\n if (!object) {\n object = key;\n key = undefined;\n }\n\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n if (key === false) {\n return Promise.resolve();\n }\n\n return ctx.transform(`encrypt${capitalize(object.objectType)}`, key, object);\n },\n\n encryptReaction2(ctx, key, reaction2) {\n return ctx.transform('encryptPropDisplayName', key, reaction2);\n },\n\n encryptConversation(ctx, key, conversation) {\n if (key === false) {\n return Promise.resolve();\n }\n\n return Promise.resolve(\n key || ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1})\n ).then((keys) => {\n const k = isArray(keys) ? keys[0] : keys;\n\n if (\n has(conversation, 'kmsMessage.keyUris') &&\n !conversation.kmsMessage.keyUris.includes(k.uri)\n ) {\n conversation.kmsMessage.keyUris.push(k.uri);\n }\n\n return Promise.all([\n // too many implicit returns on the same line is difficult to interpret\n // eslint-disable-next-line arrow-body-style\n has(conversation, 'activities.items') &&\n conversation.activities.items.reduce((p, activity) => {\n // eslint-disable-next-line max-nested-callbacks\n return p.then(() => ctx.transform('encryptObject', k, activity));\n }, Promise.resolve()),\n ctx.transform('encryptPropDisplayName', k, conversation),\n ]).then(() => {\n conversation.encryptionKeyUrl = k.uri || k;\n // we only want to set the defaultActivityEncryptionKeyUrl if we've\n // bound a new key\n if (!key) {\n conversation.defaultActivityEncryptionKeyUrl =\n conversation.defaultActivityEncryptionKeyUrl || k.uri || k;\n }\n });\n });\n },\n\n encryptActivity(ctx, key, activity) {\n // Meeting Container policy update requests do not need to be encrypted.\n if (\n activity?.target?.objectType === 'meetingContainer' &&\n activity?.object?.objectType === 'policies'\n ) {\n return Promise.resolve();\n }\n\n // Activity is already encrypted\n if (activity.encryptionKeyUrl || activity.object?.created === 'True') {\n return Promise.resolve();\n }\n\n return ctx.transform(`encrypt${capitalize(activity.verb)}Activity`, key, activity).then(() => {\n key = key || activity[KEY];\n\n return ctx.transform('prepareActivityKmsMessage', key, activity);\n });\n },\n\n encryptVerbActivity(ctx, key, activity) {\n return ctx\n .transform('maybeEncryptTarget', key, activity)\n .then(() => {\n key = key || activity[KEY];\n })\n .then(() => ctx.transform('encryptObject', key, activity.object));\n },\n\n maybeEncryptTarget(ctx, key, activity) {\n // This isn't quite right; if we just go by key, we have no guarantee that\n // we have a proper KRO available for add activities\n if (key) {\n return Promise.resolve();\n }\n\n if (\n has(activity, 'target.defaultActivityEncryptionKeyUrl') &&\n activity.target.defaultActivityEncryptionKeyUrl &&\n has(activity, 'target.kmsResourceObjectUrl')\n ) {\n activity[KEY] = key || activity.target.defaultActivityEncryptionKeyUrl;\n\n return Promise.resolve();\n }\n\n const conversationUrl = activity.target && activity.target.url;\n\n if (!conversationUrl) {\n return Promise.reject(\n new Error(\n \"Cannot determine encryption key for activity's conversation; no key url or conversation url provided\"\n )\n );\n }\n\n return ctx.webex.internal.conversation.get({url: conversationUrl}).then((conversation) => {\n if (!conversation.defaultActivityEncryptionKeyUrl) {\n return ctx.webex.internal.conversation.updateKey(conversation).then((updateKeyActivity) => {\n if (updateKeyActivity.kmsMessage.resource) {\n activity.target.kmsResourceObjectUrl = updateKeyActivity.kmsMessage.resource.uri;\n }\n activity[KEY] = activity.target.defaultActivityEncryptionKeyUrl =\n updateKeyActivity.object.defaultActivityEncryptionKeyUrl;\n });\n }\n\n if (!activity.target.defaultActivityEncryptionKeyUrl) {\n ctx.webex.logger.warn(\n 'plugin-conversation: downloaded conversation to determine its defaultActivityEncryptionKeyUrl; make sure to pass all encryption related properties when calling Webex.conversation methods.'\n );\n }\n\n if (!activity.target.kmsResourceObjectUrl) {\n ctx.webex.logger.warn(\n 'plugin-conversation: downloaded conversation to determine its kmsResourceObjectUrl; make sure to pass all encryption related properties when calling Webex.conversation methods.'\n );\n }\n\n activity[KEY] = activity.target.defaultActivityEncryptionKeyUrl =\n conversation.defaultActivityEncryptionKeyUrl;\n activity.target.kmsResourceObjectUrl = conversation.kmsResourceObjectUrl;\n\n return Promise.resolve();\n });\n },\n\n prepareActivityKmsMessage(ctx, key, activity) {\n if (activity.kmsMessage) {\n if (!key && activity.verb === 'delete') {\n key = get(activity, 'target.defaultActivityEncryptionKeyUrl');\n }\n\n if (\n !key &&\n activity.verb === 'updateKey' &&\n has(activity, 'object.defaultActivityEncryptionKeyUrl')\n ) {\n key = get(activity, 'object.defaultActivityEncryptionKeyUrl');\n }\n\n if (\n !key &&\n activity.verb === 'leave' &&\n has(activity, 'target.defaultActivityEncryptionKeyUrl')\n ) {\n key = get(activity, 'target.defaultActivityEncryptionKeyUrl');\n }\n\n if (key) {\n const kro = activity.target.kmsResourceObjectUrl;\n\n ['uri', 'resourceUri'].forEach((k) => {\n if (activity.kmsMessage[k] && !kro && activity.kmsMessage[k].includes('<KRO>')) {\n throw new Error('encrypter: cannot determine kro');\n }\n\n if (activity.kmsMessage[k]) {\n activity.kmsMessage[k] = activity.kmsMessage[k].replace('<KRO>', kro);\n // key may be a key or a key url\n activity.kmsMessage[k] = activity.kmsMessage[k].replace('<KEYURL>', key.keyUrl || key);\n }\n });\n }\n // If we made it this far and still don't have an encryption key, assume\n // this is a conversation that is not encrypted and we're performing an\n // action that should not encrypt it (e.g. `leave`)\n else {\n Reflect.deleteProperty(activity, 'kmsMessage');\n }\n }\n },\n\n encryptVerbActivityWithKey: {\n direction: 'outbound',\n fn(ctx, key, activity) {\n return ctx.transform('encryptVerbActivity', key, activity).then(() => {\n key = key || activity[KEY];\n activity.encryptionKeyUrl = key.uri || key;\n });\n },\n },\n\n encryptAddActivity: {\n direction: 'outbound',\n fn(ctx, key, activity) {\n if (has(activity, 'object.objectType') && activity.object.objectType === 'reaction2') {\n return ctx.transform('encryptVerbActivityWithKey', key, activity);\n }\n\n return ctx.transform('encryptVerbActivity', key, activity);\n },\n },\n\n encryptAssignActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptCreateActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivity',\n },\n\n encryptPostActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptShareActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptCardactionActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptUpdateActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivityWithKey',\n },\n\n encryptUpdateKeyActivity: {\n direction: 'outbound',\n alias: 'encryptVerbActivity',\n },\n\n encryptComment(ctx, key, comment) {\n return Promise.all([\n ctx.transform('encryptPropDisplayName', key, comment),\n ctx.transform('encryptPropContent', key, comment),\n ]);\n },\n\n encryptContent(ctx, key, content) {\n const promises = content.files.items.map((item) => ctx.transform('encryptObject', key, item));\n\n promises.push(ctx.transform('encryptPropContent', key, content));\n promises.push(ctx.transform('encryptPropDisplayName', key, content));\n\n return Promise.all(promises);\n },\n\n encryptFile(ctx, key, file) {\n if (file.image && !file.image.scr) {\n return Promise.reject(new Error('`file.image` must have an `scr`'));\n }\n\n return Promise.all([\n ctx.transform('encryptPropScr', key, file),\n ctx.transform('encryptPropDisplayName', key, file),\n ctx.transform('encryptPropContent', key, file),\n file.image && ctx.transform('encryptPropScr', key, file.image),\n ]);\n },\n\n encryptSubmit(ctx, key, submit) {\n return ctx.transform('encryptPropInputs', key, submit);\n },\n\n // TODO is this used for anything other than the now-removed stickies service?\n encryptImageURI(ctx, key, imageURI) {\n return ctx.transform('encryptPropLocation', key, imageURI);\n },\n\n encryptPropContent: encryptTextProp('content'),\n\n encryptPropDisplayName: encryptTextProp('displayName'),\n\n encryptPropInputs: encryptJsonProp('inputs'),\n\n encryptPropLocation: encryptTextProp('location'),\n\n encryptPropScr(ctx, key, object) {\n if (!object.scr) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption.encryptScr(key, object.scr).then((scr) => {\n object.scr = scr;\n });\n },\n\n encryptJsonProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .encryptText(key.uri || key, JSON.stringify(object[name]))\n .then((ciphertext) => {\n object[name] = ciphertext;\n });\n },\n\n encryptTextProp(ctx, name, key, object) {\n if (!object[name]) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption\n .encryptText(key.uri || key, object[name])\n .then((ciphertext) => {\n object[name] = ciphertext;\n });\n },\n});\n"],"mappings":"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"}
@@ -157,7 +157,7 @@ var ShareActivity = _webexCore.WebexPlugin.extend({
157
157
  var _objectSpread3,
158
158
  _this = this;
159
159
  options = options || {};
160
- options.claimedFileType = file.displayName.substring(file.displayName.lastIndexOf('.'));
160
+ options.claimedFileType = file.name.substring(file.name.lastIndexOf('.'));
161
161
  var upload = this.uploads.get(file);
162
162
  if (upload) {
163
163
  return upload[PROMISE_SYMBOL];
@@ -395,7 +395,7 @@ var ShareActivity = _webexCore.WebexPlugin.extend({
395
395
  return res.body.spaceUrl;
396
396
  });
397
397
  },
398
- version: "3.0.0-beta.31"
398
+ version: "3.0.0-beta.310"
399
399
  });
400
400
 
401
401
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["EMITTER_SYMBOL","FILE_SYMBOL","PROMISE_SYMBOL","ShareActivity","WebexPlugin","extend","getSymbols","file","emitter","namespace","derived","target","deps","fn","conversation","session","claimedFileType","required","type","content","clientTempId","displayName","enableThumbnails","default","hiddenSpaceUrl","mentions","spaceUrl","uploads","initialize","attrs","options","prototype","resolve","_spaceUrl","_retrieveSpaceUrl","url","then","_hiddenSpaceUrl","addGif","gif","gifToAdd","get","name","fileSize","size","byteLength","length","mimeType","objectType","height","width","image","set","SCR","create","scr","loc","thumbnailScr","add","substring","lastIndexOf","upload","EventEmitter","promise","detectFileType","logger","processImage","thumbnailMaxWidth","config","thumbnailMaxHeight","imageData","main","webex","internal","encryption","encryptBinary","cdata","all","uploadPromise","_upload","transferEvents","metadata","downloadUrl","thumb","thumbnail","fileDimensions","thumbnailDimensions","proxyEvents","getFiles","files","key","push","uri","uploadOptions","fileHash","sha256","toString","role","initializeBody","qs","transcode","phases","body","$url","uploadUrl","finalize","$uri","finishUploadUrl","remove","delete","prepare","Error","activity","verb","object","undefined","items","promises","forEach","item","contentCategory","_determineContentCategory","_itemContainsActionWithMimeType","map","actions","mimeTypes","split","shift","request","method","res","share","parent"],"sources":["share-activity.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport SCR from 'node-scr';\nimport {proxyEvents, transferEvents} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {filter, map, pick, some} from 'lodash';\nimport {detectFileType, processImage} from '@webex/helper-image';\nimport sha256 from 'crypto-js/sha256';\n\nexport const EMITTER_SYMBOL = Symbol('EMITTER_SYMBOL');\nexport const FILE_SYMBOL = Symbol('FILE_SYMBOL');\nconst PROMISE_SYMBOL = Symbol('PROMISE_SYMBOL');\n\n/**\n * @class\n */\nconst ShareActivity = WebexPlugin.extend({\n getSymbols() {\n return {\n file: FILE_SYMBOL,\n emitter: EMITTER_SYMBOL,\n };\n },\n\n namespace: 'Conversation',\n\n derived: {\n target: {\n deps: ['conversation'],\n fn() {\n return this.conversation;\n },\n },\n },\n\n session: {\n claimedFileType: 'string',\n conversation: {\n required: true,\n type: 'object',\n },\n\n content: 'string',\n\n clientTempId: 'string',\n\n displayName: 'string',\n\n enableThumbnails: {\n default: true,\n type: 'boolean',\n },\n\n hiddenSpaceUrl: 'object',\n\n mentions: 'object',\n\n spaceUrl: 'object',\n\n uploads: {\n type: 'object',\n default() {\n return new Map();\n },\n },\n },\n\n initialize(attrs, options) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n if (attrs && attrs.conversation) {\n this.spaceUrl = Promise.resolve(\n attrs.conversation._spaceUrl ||\n this._retrieveSpaceUrl(`${attrs.conversation.url}/space`).then((url) => {\n attrs.conversation._spaceUrl = url;\n\n return url;\n })\n );\n this.hiddenSpaceUrl = Promise.resolve(\n attrs.conversation._hiddenSpaceUrl ||\n this._retrieveSpaceUrl(`${attrs.conversation.url}/space/hidden`).then((url) => {\n attrs.conversation._hiddenSpaceUrl = url;\n\n return url;\n })\n );\n }\n },\n\n /**\n * Adds an additional GIF to the share activity\n * Different from regular add to skip uploading to webex files service\n * @param {File} gif\n * @param {File} gif.image // thumbnail\n * @param {Object} options\n * @param {Object} options.actions\n * @returns {Promise}\n */\n addGif(gif, options) {\n let gifToAdd = this.uploads.get(gif);\n\n // If the gif already exists, then don't do anything\n if (gifToAdd) {\n return Promise.resolve();\n }\n\n gifToAdd = {\n displayName: gif.name,\n fileSize: gif.size || gif.byteLength || gif.length,\n mimeType: gif.type,\n url: 'https://giphy.com',\n objectType: 'file',\n height: gif.height,\n width: gif.width,\n image: {\n height: gif.image.height,\n width: gif.image.width,\n url: 'https://giphy.com',\n },\n [FILE_SYMBOL]: gif,\n ...pick(options, 'actions'),\n };\n\n this.uploads.set(gif, gifToAdd);\n\n /* Instead of encryptBinary, which produces a encrypted version of\n * the file for upload and a SCR (contains info needed to encrypt the\n * SCR itself and the displayName), we directly create an SCR.\n * Because we are skipping uploading, the encrypted file is not needed.\n */\n return SCR.create()\n .then((scr) => {\n scr.loc = gif.url;\n gifToAdd.scr = scr;\n\n return SCR.create();\n })\n .then((thumbnailScr) => {\n thumbnailScr.loc = gif.image.url;\n gifToAdd.image.scr = thumbnailScr;\n });\n },\n\n /**\n * Adds an additional file to the share and begins submitting it to webex\n * files\n * @param {File} file\n * @param {Object} options\n * @param {Object} options.actions\n * @returns {EventEmittingPromise}\n */\n add(file, options) {\n options = options || {};\n options.claimedFileType = file.displayName.substring(file.displayName.lastIndexOf('.'));\n let upload = this.uploads.get(file);\n\n if (upload) {\n return upload[PROMISE_SYMBOL];\n }\n const emitter = new EventEmitter();\n\n upload = {\n displayName: file.name,\n fileSize: file.size || file.byteLength || file.length,\n mimeType: file.type,\n objectType: 'file',\n [EMITTER_SYMBOL]: emitter,\n [FILE_SYMBOL]: file,\n ...pick(options, 'actions'),\n };\n\n this.uploads.set(file, upload);\n const promise = detectFileType(file, this.logger)\n .then((type) => {\n upload.mimeType = type;\n\n return processImage({\n file,\n type,\n thumbnailMaxWidth: this.config.thumbnailMaxWidth,\n thumbnailMaxHeight: this.config.thumbnailMaxHeight,\n enableThumbnails: this.enableThumbnails,\n logger: this.logger,\n });\n })\n .then((imageData) => {\n const main = this.webex.internal.encryption\n .encryptBinary(file)\n .then(({scr, cdata}) => {\n upload.scr = scr;\n\n return Promise.all([cdata, this.spaceUrl]);\n })\n .then(([cdata, spaceUrl]) => {\n const uploadPromise = this._upload(cdata, `${spaceUrl}/upload_sessions`, options);\n\n transferEvents('progress', uploadPromise, emitter);\n\n return uploadPromise;\n })\n .then((metadata) => {\n upload.url = upload.scr.loc = metadata.downloadUrl;\n });\n\n let thumb;\n\n if (imageData) {\n const [thumbnail, fileDimensions, thumbnailDimensions] = imageData;\n\n Object.assign(upload, fileDimensions);\n\n if (thumbnail && thumbnailDimensions) {\n upload.image = thumbnailDimensions;\n thumb = this.webex.internal.encryption\n .encryptBinary(thumbnail)\n .then(({scr, cdata}) => {\n upload.image.scr = scr;\n\n return Promise.all([cdata, this.hiddenSpaceUrl]);\n })\n .then(([cdata, spaceUrl]) => this._upload(cdata, `${spaceUrl}/upload_sessions`))\n .then((metadata) => {\n upload.image.url = upload.image.scr.loc = metadata.downloadUrl;\n });\n }\n }\n\n return Promise.all([main, thumb]);\n });\n\n upload[PROMISE_SYMBOL] = promise;\n\n proxyEvents(emitter, promise);\n\n return promise;\n },\n\n /**\n * Fetches the files from the share\n * @returns {Array}\n */\n getFiles() {\n const files = [];\n\n for (const [key] of this.uploads) {\n files.push(this.uploads.get(key)[FILE_SYMBOL]);\n }\n\n return files;\n },\n\n /**\n * @param {File} file\n * @param {string} uri\n * @param {Object} uploadOptions - Optional object adding additional params to request body\n * @private\n * @returns {Promise}\n */\n _upload(file, uri, uploadOptions) {\n const fileSize = file.length || file.size || file.byteLength;\n const fileHash = sha256(file).toString();\n const {role, claimedFileType} = uploadOptions ?? {};\n const initializeBody = {fileSize, claimedFileType, ...(role && {role})};\n\n return this.webex.upload({\n uri,\n file,\n qs: {\n transcode: true,\n },\n phases: {\n initialize: {\n body: initializeBody,\n },\n upload: {\n $url(session) {\n return session.uploadUrl;\n },\n },\n finalize: {\n $uri(session) {\n return session.finishUploadUrl;\n },\n body: {fileSize, fileHash},\n },\n },\n });\n },\n\n /**\n * Removes the specified file from the share (Does not currently delete the\n * uploaded file)\n * @param {File} file\n * @returns {Promise}\n */\n remove(file) {\n this.uploads.delete(file);\n\n // Returns a promise for future-proofiness.\n return Promise.resolve();\n },\n\n /**\n * @private\n * @returns {Promise<Object>}\n */\n prepare() {\n if (!this.uploads.size) {\n throw new Error('Cannot submit a share activity without at least one file');\n }\n\n const activity = {\n verb: 'share',\n object: {\n objectType: 'content',\n displayName: this.object && this.object.displayName ? this.object.displayName : undefined,\n content: this.object && this.object.content ? this.object.content : undefined,\n mentions: this.object && this.object.mentions ? this.object.mentions : undefined,\n files: {\n items: [],\n },\n },\n clientTempId: this.clientTempId,\n };\n\n const promises = [];\n\n this.uploads.forEach((item) => {\n activity.object.files.items.push(item);\n promises.push(item[PROMISE_SYMBOL]);\n });\n\n activity.object.contentCategory = this._determineContentCategory(activity.object.files.items);\n\n return Promise.all(promises).then(() => activity);\n },\n\n /**\n * @param {Array} items\n * @param {string} mimeType\n * @private\n * @returns {boolean}\n */\n _itemContainsActionWithMimeType(items, mimeType) {\n return some(items.map((item) => some(item.actions, {mimeType})));\n },\n\n /**\n * @param {Array} items\n * @private\n * @returns {string}\n */\n _determineContentCategory(items) {\n // determine if the items contain an image\n if (this._itemContainsActionWithMimeType(items, 'application/x-cisco-webex-whiteboard')) {\n return 'documents';\n }\n\n const mimeTypes = filter(map(items, 'mimeType'));\n\n if (mimeTypes.length !== items.length) {\n return 'documents';\n }\n\n const contentCategory = mimeTypes[0].split('/').shift();\n\n if (contentCategory !== 'video' && contentCategory !== 'image') {\n return 'documents';\n }\n\n for (const mimeType of mimeTypes) {\n if (mimeType.split('/').shift() !== contentCategory) {\n return 'documents';\n }\n }\n\n return `${contentCategory}s`;\n },\n\n /**\n * @param {string} uri\n * @returns {Promise}\n */\n _retrieveSpaceUrl(uri) {\n return this.webex\n .request({\n method: 'PUT',\n uri,\n })\n .then((res) => res.body.spaceUrl);\n },\n});\n\n/**\n * Instantiates a ShareActivity\n * @param {Object} conversation\n * @param {ShareActivity|Object|array} object\n * @param {ProxyWebex} webex\n * @returns {ShareActivity}\n */\nShareActivity.create = function create(conversation, object, webex) {\n if (object instanceof ShareActivity) {\n return object;\n }\n\n let files;\n\n if (object?.object?.files) {\n files = object.object.files;\n Reflect.deleteProperty(object.object, 'files');\n }\n\n const share = new ShareActivity(\n {\n conversation,\n ...object,\n },\n {\n parent: webex,\n }\n );\n\n files = files?.items ?? files;\n if (files) {\n files.forEach((file) => share.add(file));\n }\n\n return share;\n};\n\nexport default ShareActivity;\n"],"mappings":"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"}
1
+ {"version":3,"names":["EMITTER_SYMBOL","FILE_SYMBOL","PROMISE_SYMBOL","ShareActivity","WebexPlugin","extend","getSymbols","file","emitter","namespace","derived","target","deps","fn","conversation","session","claimedFileType","required","type","content","clientTempId","displayName","enableThumbnails","default","hiddenSpaceUrl","mentions","spaceUrl","uploads","initialize","attrs","options","prototype","resolve","_spaceUrl","_retrieveSpaceUrl","url","then","_hiddenSpaceUrl","addGif","gif","gifToAdd","get","name","fileSize","size","byteLength","length","mimeType","objectType","height","width","image","set","SCR","create","scr","loc","thumbnailScr","add","substring","lastIndexOf","upload","EventEmitter","promise","detectFileType","logger","processImage","thumbnailMaxWidth","config","thumbnailMaxHeight","imageData","main","webex","internal","encryption","encryptBinary","cdata","all","uploadPromise","_upload","transferEvents","metadata","downloadUrl","thumb","thumbnail","fileDimensions","thumbnailDimensions","proxyEvents","getFiles","files","key","push","uri","uploadOptions","fileHash","sha256","toString","role","initializeBody","qs","transcode","phases","body","$url","uploadUrl","finalize","$uri","finishUploadUrl","remove","delete","prepare","Error","activity","verb","object","undefined","items","promises","forEach","item","contentCategory","_determineContentCategory","_itemContainsActionWithMimeType","map","actions","mimeTypes","split","shift","request","method","res","share","parent"],"sources":["share-activity.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport SCR from 'node-scr';\nimport {proxyEvents, transferEvents} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\nimport {filter, map, pick, some} from 'lodash';\nimport {detectFileType, processImage} from '@webex/helper-image';\nimport sha256 from 'crypto-js/sha256';\n\nexport const EMITTER_SYMBOL = Symbol('EMITTER_SYMBOL');\nexport const FILE_SYMBOL = Symbol('FILE_SYMBOL');\nconst PROMISE_SYMBOL = Symbol('PROMISE_SYMBOL');\n\n/**\n * @class\n */\nconst ShareActivity = WebexPlugin.extend({\n getSymbols() {\n return {\n file: FILE_SYMBOL,\n emitter: EMITTER_SYMBOL,\n };\n },\n\n namespace: 'Conversation',\n\n derived: {\n target: {\n deps: ['conversation'],\n fn() {\n return this.conversation;\n },\n },\n },\n\n session: {\n claimedFileType: 'string',\n conversation: {\n required: true,\n type: 'object',\n },\n\n content: 'string',\n\n clientTempId: 'string',\n\n displayName: 'string',\n\n enableThumbnails: {\n default: true,\n type: 'boolean',\n },\n\n hiddenSpaceUrl: 'object',\n\n mentions: 'object',\n\n spaceUrl: 'object',\n\n uploads: {\n type: 'object',\n default() {\n return new Map();\n },\n },\n },\n\n initialize(attrs, options) {\n Reflect.apply(WebexPlugin.prototype.initialize, this, [attrs, options]);\n\n if (attrs && attrs.conversation) {\n this.spaceUrl = Promise.resolve(\n attrs.conversation._spaceUrl ||\n this._retrieveSpaceUrl(`${attrs.conversation.url}/space`).then((url) => {\n attrs.conversation._spaceUrl = url;\n\n return url;\n })\n );\n this.hiddenSpaceUrl = Promise.resolve(\n attrs.conversation._hiddenSpaceUrl ||\n this._retrieveSpaceUrl(`${attrs.conversation.url}/space/hidden`).then((url) => {\n attrs.conversation._hiddenSpaceUrl = url;\n\n return url;\n })\n );\n }\n },\n\n /**\n * Adds an additional GIF to the share activity\n * Different from regular add to skip uploading to webex files service\n * @param {File} gif\n * @param {File} gif.image // thumbnail\n * @param {Object} options\n * @param {Object} options.actions\n * @returns {Promise}\n */\n addGif(gif, options) {\n let gifToAdd = this.uploads.get(gif);\n\n // If the gif already exists, then don't do anything\n if (gifToAdd) {\n return Promise.resolve();\n }\n\n gifToAdd = {\n displayName: gif.name,\n fileSize: gif.size || gif.byteLength || gif.length,\n mimeType: gif.type,\n url: 'https://giphy.com',\n objectType: 'file',\n height: gif.height,\n width: gif.width,\n image: {\n height: gif.image.height,\n width: gif.image.width,\n url: 'https://giphy.com',\n },\n [FILE_SYMBOL]: gif,\n ...pick(options, 'actions'),\n };\n\n this.uploads.set(gif, gifToAdd);\n\n /* Instead of encryptBinary, which produces a encrypted version of\n * the file for upload and a SCR (contains info needed to encrypt the\n * SCR itself and the displayName), we directly create an SCR.\n * Because we are skipping uploading, the encrypted file is not needed.\n */\n return SCR.create()\n .then((scr) => {\n scr.loc = gif.url;\n gifToAdd.scr = scr;\n\n return SCR.create();\n })\n .then((thumbnailScr) => {\n thumbnailScr.loc = gif.image.url;\n gifToAdd.image.scr = thumbnailScr;\n });\n },\n\n /**\n * Adds an additional file to the share and begins submitting it to webex\n * files\n * @param {File} file\n * @param {Object} options\n * @param {Object} options.actions\n * @returns {EventEmittingPromise}\n */\n add(file, options) {\n options = options || {};\n options.claimedFileType = file.name.substring(file.name.lastIndexOf('.'));\n let upload = this.uploads.get(file);\n\n if (upload) {\n return upload[PROMISE_SYMBOL];\n }\n const emitter = new EventEmitter();\n\n upload = {\n displayName: file.name,\n fileSize: file.size || file.byteLength || file.length,\n mimeType: file.type,\n objectType: 'file',\n [EMITTER_SYMBOL]: emitter,\n [FILE_SYMBOL]: file,\n ...pick(options, 'actions'),\n };\n\n this.uploads.set(file, upload);\n const promise = detectFileType(file, this.logger)\n .then((type) => {\n upload.mimeType = type;\n\n return processImage({\n file,\n type,\n thumbnailMaxWidth: this.config.thumbnailMaxWidth,\n thumbnailMaxHeight: this.config.thumbnailMaxHeight,\n enableThumbnails: this.enableThumbnails,\n logger: this.logger,\n });\n })\n .then((imageData) => {\n const main = this.webex.internal.encryption\n .encryptBinary(file)\n .then(({scr, cdata}) => {\n upload.scr = scr;\n\n return Promise.all([cdata, this.spaceUrl]);\n })\n .then(([cdata, spaceUrl]) => {\n const uploadPromise = this._upload(cdata, `${spaceUrl}/upload_sessions`, options);\n\n transferEvents('progress', uploadPromise, emitter);\n\n return uploadPromise;\n })\n .then((metadata) => {\n upload.url = upload.scr.loc = metadata.downloadUrl;\n });\n\n let thumb;\n\n if (imageData) {\n const [thumbnail, fileDimensions, thumbnailDimensions] = imageData;\n\n Object.assign(upload, fileDimensions);\n\n if (thumbnail && thumbnailDimensions) {\n upload.image = thumbnailDimensions;\n thumb = this.webex.internal.encryption\n .encryptBinary(thumbnail)\n .then(({scr, cdata}) => {\n upload.image.scr = scr;\n\n return Promise.all([cdata, this.hiddenSpaceUrl]);\n })\n .then(([cdata, spaceUrl]) => this._upload(cdata, `${spaceUrl}/upload_sessions`))\n .then((metadata) => {\n upload.image.url = upload.image.scr.loc = metadata.downloadUrl;\n });\n }\n }\n\n return Promise.all([main, thumb]);\n });\n\n upload[PROMISE_SYMBOL] = promise;\n\n proxyEvents(emitter, promise);\n\n return promise;\n },\n\n /**\n * Fetches the files from the share\n * @returns {Array}\n */\n getFiles() {\n const files = [];\n\n for (const [key] of this.uploads) {\n files.push(this.uploads.get(key)[FILE_SYMBOL]);\n }\n\n return files;\n },\n\n /**\n * @param {File} file\n * @param {string} uri\n * @param {Object} uploadOptions - Optional object adding additional params to request body\n * @private\n * @returns {Promise}\n */\n _upload(file, uri, uploadOptions) {\n const fileSize = file.length || file.size || file.byteLength;\n const fileHash = sha256(file).toString();\n const {role, claimedFileType} = uploadOptions ?? {};\n const initializeBody = {fileSize, claimedFileType, ...(role && {role})};\n\n return this.webex.upload({\n uri,\n file,\n qs: {\n transcode: true,\n },\n phases: {\n initialize: {\n body: initializeBody,\n },\n upload: {\n $url(session) {\n return session.uploadUrl;\n },\n },\n finalize: {\n $uri(session) {\n return session.finishUploadUrl;\n },\n body: {fileSize, fileHash},\n },\n },\n });\n },\n\n /**\n * Removes the specified file from the share (Does not currently delete the\n * uploaded file)\n * @param {File} file\n * @returns {Promise}\n */\n remove(file) {\n this.uploads.delete(file);\n\n // Returns a promise for future-proofiness.\n return Promise.resolve();\n },\n\n /**\n * @private\n * @returns {Promise<Object>}\n */\n prepare() {\n if (!this.uploads.size) {\n throw new Error('Cannot submit a share activity without at least one file');\n }\n\n const activity = {\n verb: 'share',\n object: {\n objectType: 'content',\n displayName: this.object && this.object.displayName ? this.object.displayName : undefined,\n content: this.object && this.object.content ? this.object.content : undefined,\n mentions: this.object && this.object.mentions ? this.object.mentions : undefined,\n files: {\n items: [],\n },\n },\n clientTempId: this.clientTempId,\n };\n\n const promises = [];\n\n this.uploads.forEach((item) => {\n activity.object.files.items.push(item);\n promises.push(item[PROMISE_SYMBOL]);\n });\n\n activity.object.contentCategory = this._determineContentCategory(activity.object.files.items);\n\n return Promise.all(promises).then(() => activity);\n },\n\n /**\n * @param {Array} items\n * @param {string} mimeType\n * @private\n * @returns {boolean}\n */\n _itemContainsActionWithMimeType(items, mimeType) {\n return some(items.map((item) => some(item.actions, {mimeType})));\n },\n\n /**\n * @param {Array} items\n * @private\n * @returns {string}\n */\n _determineContentCategory(items) {\n // determine if the items contain an image\n if (this._itemContainsActionWithMimeType(items, 'application/x-cisco-webex-whiteboard')) {\n return 'documents';\n }\n\n const mimeTypes = filter(map(items, 'mimeType'));\n\n if (mimeTypes.length !== items.length) {\n return 'documents';\n }\n\n const contentCategory = mimeTypes[0].split('/').shift();\n\n if (contentCategory !== 'video' && contentCategory !== 'image') {\n return 'documents';\n }\n\n for (const mimeType of mimeTypes) {\n if (mimeType.split('/').shift() !== contentCategory) {\n return 'documents';\n }\n }\n\n return `${contentCategory}s`;\n },\n\n /**\n * @param {string} uri\n * @returns {Promise}\n */\n _retrieveSpaceUrl(uri) {\n return this.webex\n .request({\n method: 'PUT',\n uri,\n })\n .then((res) => res.body.spaceUrl);\n },\n});\n\n/**\n * Instantiates a ShareActivity\n * @param {Object} conversation\n * @param {ShareActivity|Object|array} object\n * @param {ProxyWebex} webex\n * @returns {ShareActivity}\n */\nShareActivity.create = function create(conversation, object, webex) {\n if (object instanceof ShareActivity) {\n return object;\n }\n\n let files;\n\n if (object?.object?.files) {\n files = object.object.files;\n Reflect.deleteProperty(object.object, 'files');\n }\n\n const share = new ShareActivity(\n {\n conversation,\n ...object,\n },\n {\n parent: webex,\n }\n );\n\n files = files?.items ?? files;\n if (files) {\n files.forEach((file) => share.add(file));\n }\n\n return share;\n};\n\nexport default ShareActivity;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-conversation",
3
- "version": "3.0.0-beta.31",
3
+ "version": "3.0.0-beta.310",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -20,26 +20,26 @@
20
20
  ]
21
21
  },
22
22
  "dependencies": {
23
- "@webex/common": "3.0.0-beta.31",
24
- "@webex/helper-html": "3.0.0-beta.31",
25
- "@webex/helper-image": "3.0.0-beta.31",
26
- "@webex/internal-plugin-conversation": "3.0.0-beta.31",
27
- "@webex/internal-plugin-encryption": "3.0.0-beta.31",
28
- "@webex/internal-plugin-user": "3.0.0-beta.31",
29
- "@webex/webex-core": "3.0.0-beta.31",
23
+ "@webex/common": "3.0.0-beta.310",
24
+ "@webex/helper-html": "3.0.0-beta.310",
25
+ "@webex/helper-image": "3.0.0-beta.310",
26
+ "@webex/internal-plugin-conversation": "3.0.0-beta.310",
27
+ "@webex/internal-plugin-encryption": "3.0.0-beta.310",
28
+ "@webex/internal-plugin-user": "3.0.0-beta.310",
29
+ "@webex/webex-core": "3.0.0-beta.310",
30
30
  "crypto-js": "^4.1.1",
31
31
  "lodash": "^4.17.21",
32
32
  "node-scr": "^0.3.0",
33
33
  "uuid": "^3.3.2"
34
34
  },
35
35
  "devDependencies": {
36
- "@webex/test-helper-chai": "3.0.0-beta.31",
37
- "@webex/test-helper-file": "3.0.0-beta.31",
38
- "@webex/test-helper-make-local-url": "3.0.0-beta.31",
39
- "@webex/test-helper-mocha": "3.0.0-beta.31",
40
- "@webex/test-helper-mock-webex": "3.0.0-beta.31",
41
- "@webex/test-helper-retry": "3.0.0-beta.31",
42
- "@webex/test-helper-test-users": "3.0.0-beta.31",
36
+ "@webex/test-helper-chai": "3.0.0-beta.310",
37
+ "@webex/test-helper-file": "3.0.0-beta.310",
38
+ "@webex/test-helper-make-local-url": "3.0.0-beta.310",
39
+ "@webex/test-helper-mocha": "3.0.0-beta.310",
40
+ "@webex/test-helper-mock-webex": "3.0.0-beta.310",
41
+ "@webex/test-helper-retry": "3.0.0-beta.310",
42
+ "@webex/test-helper-test-users": "3.0.0-beta.310",
43
43
  "sinon": "^9.2.4"
44
44
  }
45
45
  }
@@ -309,10 +309,11 @@ const Conversation = WebexPlugin.extend({
309
309
  /**
310
310
  * delete a reaction
311
311
  * @param {Object} conversation
312
- * @param {Object} reactionId
312
+ * @param {Object} reactionId,
313
+ * @param {String} recipientId,
313
314
  * @returns {Promise<Activity>}
314
315
  */
315
- deleteReaction(conversation, reactionId) {
316
+ deleteReaction(conversation, reactionId, recipientId) {
316
317
  const deleteReactionPayload = {
317
318
  actor: {objectType: 'person', id: this.webex.internal.device.userId},
318
319
  object: {
@@ -327,6 +328,11 @@ const Conversation = WebexPlugin.extend({
327
328
  verb: 'delete',
328
329
  };
329
330
 
331
+ // Is not required for the request to be accepted, but follows specification.
332
+ if (recipientId) {
333
+ deleteReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};
334
+ }
335
+
330
336
  return this.sendReaction(conversation, deleteReactionPayload);
331
337
  },
332
338
 
@@ -335,9 +341,10 @@ const Conversation = WebexPlugin.extend({
335
341
  * @param {Object} conversation
336
342
  * @param {Object} displayName must be 'celebrate', 'heart', 'thumbsup', 'smiley', 'haha', 'confused', 'sad'
337
343
  * @param {Object} activity activity object from convo we are reacting to
344
+ * @param {String} recipientId,
338
345
  * @returns {Promise<Activity>}
339
346
  */
340
- addReaction(conversation, displayName, activity) {
347
+ addReaction(conversation, displayName, activity, recipientId) {
341
348
  return this.createReactionHmac(displayName, activity).then((hmac) => {
342
349
  const addReactionPayload = {
343
350
  actor: {objectType: 'person', id: this.webex.internal.device.userId},
@@ -358,6 +365,10 @@ const Conversation = WebexPlugin.extend({
358
365
  },
359
366
  };
360
367
 
368
+ if (recipientId) {
369
+ addReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};
370
+ }
371
+
361
372
  return this.sendReaction(conversation, addReactionPayload);
362
373
  });
363
374
  },
@@ -414,9 +425,7 @@ const Conversation = WebexPlugin.extend({
414
425
  let promise;
415
426
 
416
427
  if (isEncrypted) {
417
- promise = this.webex.internal.encryption.download(item.scr, item.options);
418
- } else if (item.scr && item.scr.loc) {
419
- promise = this._downloadUnencryptedFile(item.scr.loc, options);
428
+ promise = this.webex.internal.encryption.download(item.url, item.scr, item.options);
420
429
  } else {
421
430
  promise = this._downloadUnencryptedFile(item.url, options);
422
431
  }
@@ -1053,6 +1062,10 @@ const Conversation = WebexPlugin.extend({
1053
1062
  };
1054
1063
  }
1055
1064
 
1065
+ if (activity.recipients) {
1066
+ act.recipients = activity.recipients;
1067
+ }
1068
+
1056
1069
  if (isString(act.actor)) {
1057
1070
  act.actor = {
1058
1071
  objectType: 'person',
@@ -82,6 +82,14 @@ export const transforms = toArray('outbound', {
82
82
  },
83
83
 
84
84
  encryptActivity(ctx, key, activity) {
85
+ // Meeting Container policy update requests do not need to be encrypted.
86
+ if (
87
+ activity?.target?.objectType === 'meetingContainer' &&
88
+ activity?.object?.objectType === 'policies'
89
+ ) {
90
+ return Promise.resolve();
91
+ }
92
+
85
93
  // Activity is already encrypted
86
94
  if (activity.encryptionKeyUrl || activity.object?.created === 'True') {
87
95
  return Promise.resolve();
@@ -156,7 +156,7 @@ const ShareActivity = WebexPlugin.extend({
156
156
  */
157
157
  add(file, options) {
158
158
  options = options || {};
159
- options.claimedFileType = file.displayName.substring(file.displayName.lastIndexOf('.'));
159
+ options.claimedFileType = file.name.substring(file.name.lastIndexOf('.'));
160
160
  let upload = this.uploads.get(file);
161
161
 
162
162
  if (upload) {
@@ -43,7 +43,6 @@ describe('plugin-conversation', function () {
43
43
  },
44
44
  });
45
45
 
46
- // eslint-disable-next-line no-unused-expressions
47
46
  await webex.internal.mercury.connect();
48
47
  await mccoy.webex.internal.mercury.connect();
49
48
 
@@ -51,9 +50,9 @@ describe('plugin-conversation', function () {
51
50
  });
52
51
 
53
52
  after(async () => {
54
- // eslint-disable-next-line no-unused-expressions
53
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
55
54
  webex && (await webex.internal.mercury.disconnect());
56
- // eslint-disable-next-line no-unused-expressions
55
+ // eslint-disable-next-line chai-friendly/no-unused-expressions
57
56
  mccoy && (await mccoy.webex.internal.mercury.disconnect());
58
57
  });
59
58
 
@@ -204,7 +204,6 @@ describe('plugin-conversation', () => {
204
204
  )
205
205
  .then((ci) => {
206
206
  assert.property(c, 'defaultActivityEncryptionKeyUrl');
207
- /* eslint-disable no-unused-expressions */
208
207
  expect(ci.activities.items[0].object.inputs).to.not.be.null;
209
208
  });
210
209
  }));
@@ -154,6 +154,7 @@ describe('plugin-conversation', function () {
154
154
  scr: {
155
155
  loc: makeLocalUrl('/sample-image-small-one.png'),
156
156
  },
157
+ url: makeLocalUrl('/sample-image-small-one.png')
157
158
  })
158
159
  .then((f) =>
159
160
  fh.isMatchingFile(f, sampleImageSmallOnePng).then((result) => assert.isTrue(result))
@@ -467,7 +468,8 @@ describe('plugin-conversation', function () {
467
468
  }));
468
469
  });
469
470
 
470
- describe('with conversation from remote clusters', () => {
471
+ // SPARK-413317
472
+ describe.skip('with conversation from remote clusters', () => {
471
473
  let conversation3, conversation4;
472
474
 
473
475
  before('create conversations in EU cluster', () =>
@@ -959,7 +961,7 @@ describe('plugin-conversation', function () {
959
961
  .then(({edit}) => {
960
962
  assert.include(edit, parent.id);
961
963
  }));
962
-
964
+
963
965
  it('retrieves parent IDs for reactions', () =>
964
966
  webex.internal.conversation
965
967
  .addReaction(conversation, 'heart', parent)
@@ -35,6 +35,47 @@ describe('plugin-conversation', () => {
35
35
  webex.internal.services.getServiceFromClusterId = sinon.stub().returns({url: convoUrl});
36
36
  });
37
37
 
38
+ describe('addReaction()', () => {
39
+ it('should add recipients to the payload if provided', () => {
40
+ const {conversation} = webex.internal;
41
+ const recipientId = 'example-recipient-id';
42
+ const expected = {items: [{id: recipientId, objectType: 'person'}]}
43
+ conversation.sendReaction = sinon.stub().returns(Promise.resolve())
44
+ conversation.createReactionHmac = sinon.stub().returns(Promise.resolve('hmac'))
45
+
46
+ return conversation.addReaction({}, 'example-display-name', {}, recipientId)
47
+ .then(() => {
48
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
49
+ });
50
+ });
51
+ });
52
+
53
+ describe('deleteReaction()', () => {
54
+ it('should add recipients to the payload if provided', () => {
55
+ const {conversation} = webex.internal;
56
+ const recipientId = 'example-recipient-id';
57
+ const expected = {items: [{id: recipientId, objectType: 'person'}]}
58
+ conversation.sendReaction = sinon.stub().returns(Promise.resolve())
59
+
60
+ return conversation.deleteReaction({}, 'example-reaction-id', recipientId)
61
+ .then(() => {
62
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
63
+ });
64
+ });
65
+ });
66
+
67
+ describe('prepare()', () => {
68
+ it('should ammend activity recipients to the returned object', () => {
69
+ const {conversation} = webex.internal;
70
+ const activity = { recipients: 'example-recipients' };
71
+
72
+ return conversation.prepare(activity)
73
+ .then((results) => {
74
+ assert.deepEqual(results.recipients, activity.recipients);
75
+ });
76
+ });
77
+ });
78
+
38
79
  describe('processInmeetingchatEvent()', () => {
39
80
  beforeEach(() => {
40
81
  webex.transform = sinon.stub().callsFake((obj) => Promise.resolve(obj));
@@ -36,6 +36,29 @@ describe('plugin-conversation', () => {
36
36
  });
37
37
  });
38
38
 
39
+ it('does not transform when object type is "policies" for a "meetingContainer" activity', async () => {
40
+ const transform = transforms.find((t) => t.name === 'encryptActivity');
41
+ const transformStub = sinon.stub().resolves();
42
+
43
+ const ctx = {
44
+ transform: transformStub,
45
+ };
46
+ const key = null;
47
+ const activity = {
48
+ object: {
49
+ objectType: 'policies',
50
+ },
51
+ objectType: 'activity',
52
+ target: {
53
+ objectType: 'meetingContainer',
54
+ },
55
+ verb: 'update',
56
+ };
57
+
58
+ const results = await transform.fn(ctx, key, activity);
59
+ assert.equal(results, undefined);
60
+ });
61
+
39
62
  it('does transfom when created is not True', async () => {
40
63
  const transform = transforms.find((t) => t.name === 'encryptActivity');
41
64
  const transformStub = sinon.stub().resolves();