@webex/internal-plugin-conversation 3.0.0-beta.42 → 3.0.0-beta.421

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.42"
398
+ version: "3.0.0-beta.421"
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.42",
3
+ "version": "3.0.0-beta.421",
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.42",
24
- "@webex/helper-html": "3.0.0-beta.42",
25
- "@webex/helper-image": "3.0.0-beta.42",
26
- "@webex/internal-plugin-conversation": "3.0.0-beta.42",
27
- "@webex/internal-plugin-encryption": "3.0.0-beta.42",
28
- "@webex/internal-plugin-user": "3.0.0-beta.42",
29
- "@webex/webex-core": "3.0.0-beta.42",
23
+ "@webex/common": "3.0.0-beta.421",
24
+ "@webex/helper-html": "3.0.0-beta.421",
25
+ "@webex/helper-image": "3.0.0-beta.421",
26
+ "@webex/internal-plugin-conversation": "3.0.0-beta.421",
27
+ "@webex/internal-plugin-encryption": "3.0.0-beta.421",
28
+ "@webex/internal-plugin-user": "3.0.0-beta.421",
29
+ "@webex/webex-core": "3.0.0-beta.421",
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.42",
37
- "@webex/test-helper-file": "3.0.0-beta.42",
38
- "@webex/test-helper-make-local-url": "3.0.0-beta.42",
39
- "@webex/test-helper-mocha": "3.0.0-beta.42",
40
- "@webex/test-helper-mock-webex": "3.0.0-beta.42",
41
- "@webex/test-helper-retry": "3.0.0-beta.42",
42
- "@webex/test-helper-test-users": "3.0.0-beta.42",
36
+ "@webex/test-helper-chai": "3.0.0-beta.421",
37
+ "@webex/test-helper-file": "3.0.0-beta.421",
38
+ "@webex/test-helper-make-local-url": "3.0.0-beta.421",
39
+ "@webex/test-helper-mocha": "3.0.0-beta.421",
40
+ "@webex/test-helper-mock-webex": "3.0.0-beta.421",
41
+ "@webex/test-helper-retry": "3.0.0-beta.421",
42
+ "@webex/test-helper-test-users": "3.0.0-beta.421",
43
43
  "sinon": "^9.2.4"
44
44
  }
45
45
  }
package/src/constants.js CHANGED
@@ -1,8 +1,3 @@
1
1
  export const KEY_ROTATION_REQUIRED = 1400087;
2
2
  export const KEY_ALREADY_ROTATED = 1409004;
3
3
  export const ENCRYPTION_KEY_URL_MISMATCH = 1400049;
4
-
5
- // The default cluster when one is not provided (usually as 'US' from hydra)
6
- export const DEFAULT_CLUSTER = 'urn:TEAM:us-east-2_a';
7
- // The default service name for convo (currently identityLookup due to some weird CSB issue)
8
- export const DEFAULT_CLUSTER_SERVICE = 'identityLookup';
@@ -58,17 +58,7 @@ import {
58
58
  sortActivitiesByPublishedDate,
59
59
  sanitizeActivity,
60
60
  } from './activities';
61
- import {
62
- DEFAULT_CLUSTER,
63
- DEFAULT_CLUSTER_SERVICE,
64
- ENCRYPTION_KEY_URL_MISMATCH,
65
- KEY_ALREADY_ROTATED,
66
- KEY_ROTATION_REQUIRED,
67
- } from './constants';
68
-
69
- const CLUSTER_SERVICE = process.env.WEBEX_CONVERSATION_CLUSTER_SERVICE || DEFAULT_CLUSTER_SERVICE;
70
- const DEFAULT_CLUSTER_IDENTIFIER =
71
- process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER || `${DEFAULT_CLUSTER}:${CLUSTER_SERVICE}`;
61
+ import {ENCRYPTION_KEY_URL_MISMATCH, KEY_ALREADY_ROTATED, KEY_ROTATION_REQUIRED} from './constants';
72
62
 
73
63
  const idToUrl = new Map();
74
64
 
@@ -95,19 +85,12 @@ const Conversation = WebexPlugin.extend({
95
85
  * @returns {String} url of the conversation
96
86
  */
97
87
  getUrlFromClusterId({cluster = 'us', id} = {}) {
98
- let clusterId = cluster === 'us' ? DEFAULT_CLUSTER_IDENTIFIER : cluster;
99
-
100
- // Determine if cluster has service name (non-US clusters from hydra do not)
101
- if (clusterId.split(':').length < 4) {
102
- // Add Service to cluster identifier
103
- clusterId = `${cluster}:${CLUSTER_SERVICE}`;
104
- }
105
-
106
- const {url} = this.webex.internal.services.getServiceFromClusterId({clusterId}) || {};
107
-
108
- if (!url) {
109
- throw Error(`Could not find service for cluster [${cluster}]`);
110
- }
88
+ const url = this.webex.internal.services.getServiceUrlFromClusterId(
89
+ {
90
+ cluster,
91
+ },
92
+ this.webex
93
+ );
111
94
 
112
95
  return id ? `${url}/conversations/${id}` : url;
113
96
  },
@@ -309,10 +292,11 @@ const Conversation = WebexPlugin.extend({
309
292
  /**
310
293
  * delete a reaction
311
294
  * @param {Object} conversation
312
- * @param {Object} reactionId
295
+ * @param {Object} reactionId,
296
+ * @param {String} recipientId,
313
297
  * @returns {Promise<Activity>}
314
298
  */
315
- deleteReaction(conversation, reactionId) {
299
+ deleteReaction(conversation, reactionId, recipientId) {
316
300
  const deleteReactionPayload = {
317
301
  actor: {objectType: 'person', id: this.webex.internal.device.userId},
318
302
  object: {
@@ -327,6 +311,11 @@ const Conversation = WebexPlugin.extend({
327
311
  verb: 'delete',
328
312
  };
329
313
 
314
+ // Is not required for the request to be accepted, but follows specification.
315
+ if (recipientId) {
316
+ deleteReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};
317
+ }
318
+
330
319
  return this.sendReaction(conversation, deleteReactionPayload);
331
320
  },
332
321
 
@@ -335,9 +324,10 @@ const Conversation = WebexPlugin.extend({
335
324
  * @param {Object} conversation
336
325
  * @param {Object} displayName must be 'celebrate', 'heart', 'thumbsup', 'smiley', 'haha', 'confused', 'sad'
337
326
  * @param {Object} activity activity object from convo we are reacting to
327
+ * @param {String} recipientId,
338
328
  * @returns {Promise<Activity>}
339
329
  */
340
- addReaction(conversation, displayName, activity) {
330
+ addReaction(conversation, displayName, activity, recipientId) {
341
331
  return this.createReactionHmac(displayName, activity).then((hmac) => {
342
332
  const addReactionPayload = {
343
333
  actor: {objectType: 'person', id: this.webex.internal.device.userId},
@@ -358,6 +348,10 @@ const Conversation = WebexPlugin.extend({
358
348
  },
359
349
  };
360
350
 
351
+ if (recipientId) {
352
+ addReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};
353
+ }
354
+
361
355
  return this.sendReaction(conversation, addReactionPayload);
362
356
  });
363
357
  },
@@ -414,9 +408,7 @@ const Conversation = WebexPlugin.extend({
414
408
  let promise;
415
409
 
416
410
  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);
411
+ promise = this.webex.internal.encryption.download(item.url, item.scr, item.options);
420
412
  } else {
421
413
  promise = this._downloadUnencryptedFile(item.url, options);
422
414
  }
@@ -1053,6 +1045,10 @@ const Conversation = WebexPlugin.extend({
1053
1045
  };
1054
1046
  }
1055
1047
 
1048
+ if (activity.recipients) {
1049
+ act.recipients = activity.recipients;
1050
+ }
1051
+
1056
1052
  if (isString(act.actor)) {
1057
1053
  act.actor = {
1058
1054
  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)
@@ -32,7 +32,83 @@ describe('plugin-conversation', () => {
32
32
 
33
33
  webex.internal.services = {};
34
34
  webex.internal.services.get = sinon.stub().returns(Promise.resolve(convoUrl));
35
- webex.internal.services.getServiceFromClusterId = sinon.stub().returns({url: convoUrl});
35
+ webex.internal.services.getServiceUrlFromClusterId = sinon.stub().returns(convoUrl);
36
+ });
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).then(() => {
47
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
48
+ });
49
+ });
50
+ });
51
+
52
+ describe('deleteReaction()', () => {
53
+ it('should add recipients to the payload if provided', () => {
54
+ const {conversation} = webex.internal;
55
+ const recipientId = 'example-recipient-id';
56
+ const expected = {items: [{id: recipientId, objectType: 'person'}]};
57
+ conversation.sendReaction = sinon.stub().returns(Promise.resolve());
58
+
59
+ return conversation.deleteReaction({}, 'example-reaction-id', recipientId).then(() => {
60
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
61
+ });
62
+ });
63
+ });
64
+
65
+ describe('prepare()', () => {
66
+ it('should ammend activity recipients to the returned object', () => {
67
+ const {conversation} = webex.internal;
68
+ const activity = {recipients: 'example-recipients'};
69
+
70
+ return conversation.prepare(activity).then((results) => {
71
+ assert.deepEqual(results.recipients, activity.recipients);
72
+ });
73
+ });
74
+ });
75
+
76
+ describe('addReaction()', () => {
77
+ it('should add recipients to the payload if provided', () => {
78
+ const {conversation} = webex.internal;
79
+ const recipientId = 'example-recipient-id';
80
+ const expected = {items: [{id: recipientId, objectType: 'person'}]};
81
+ conversation.sendReaction = sinon.stub().returns(Promise.resolve());
82
+ conversation.createReactionHmac = sinon.stub().returns(Promise.resolve('hmac'));
83
+
84
+ return conversation.addReaction({}, 'example-display-name', {}, recipientId).then(() => {
85
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
86
+ });
87
+ });
88
+ });
89
+
90
+ describe('deleteReaction()', () => {
91
+ it('should add recipients to the payload if provided', () => {
92
+ const {conversation} = webex.internal;
93
+ const recipientId = 'example-recipient-id';
94
+ const expected = {items: [{id: recipientId, objectType: 'person'}]};
95
+ conversation.sendReaction = sinon.stub().returns(Promise.resolve());
96
+
97
+ return conversation.deleteReaction({}, 'example-reaction-id', recipientId).then(() => {
98
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
99
+ });
100
+ });
101
+ });
102
+
103
+ describe('prepare()', () => {
104
+ it('should ammend activity recipients to the returned object', () => {
105
+ const {conversation} = webex.internal;
106
+ const activity = {recipients: 'example-recipients'};
107
+
108
+ return conversation.prepare(activity).then((results) => {
109
+ assert.deepEqual(results.recipients, activity.recipients);
110
+ });
111
+ });
36
112
  });
37
113
 
38
114
  describe('processInmeetingchatEvent()', () => {
@@ -139,16 +215,16 @@ describe('plugin-conversation', () => {
139
215
  it('should convert a "us" cluster to WEBEX_CONVERSATION_DEFAULT_CLUSTER cluster', async () => {
140
216
  await webex.internal.conversation.getUrlFromClusterId({cluster: 'us'});
141
217
 
142
- sinon.assert.calledWith(webex.internal.services.getServiceFromClusterId, {
143
- clusterId: process.env.WEBEX_CONVERSATION_DEFAULT_CLUSTER,
218
+ sinon.assert.calledWith(webex.internal.services.getServiceUrlFromClusterId, {
219
+ cluster: 'us',
144
220
  });
145
221
  });
146
222
 
147
223
  it('should add the cluster service when missing', async () => {
148
224
  await webex.internal.conversation.getUrlFromClusterId({cluster: 'urn:TEAM:us-west-2_r'});
149
225
 
150
- sinon.assert.calledWith(webex.internal.services.getServiceFromClusterId, {
151
- clusterId: 'urn:TEAM:us-west-2_r:identityLookup',
226
+ sinon.assert.calledWith(webex.internal.services.getServiceUrlFromClusterId, {
227
+ cluster: 'urn:TEAM:us-west-2_r',
152
228
  });
153
229
  });
154
230
  });