@webex/internal-plugin-conversation 3.6.0 → 3.7.0-ipv6-multi-turn-urls.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -39,8 +39,6 @@ var _webexCore = require("@webex/webex-core");
39
39
  var _lodash = require("lodash");
40
40
  var _conversation = _interopRequireDefault(require("./conversation"));
41
41
  var _config = _interopRequireDefault(require("./config"));
42
- var _encryptionTransforms = require("./encryption-transforms");
43
- var _decryptionTransforms = require("./decryption-transforms");
44
42
  var _shareActivity = _interopRequireDefault(require("./share-activity"));
45
43
  var _convoError = require("./convo-error");
46
44
  /*!
@@ -285,7 +283,7 @@ var _convoError = require("./convo-error");
285
283
  return person;
286
284
  });
287
285
  }
288
- }].concat(_decryptionTransforms.transforms).concat(_encryptionTransforms.transforms)
286
+ }]
289
287
  },
290
288
  config: _config.default
291
289
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["require","_common","_helperHtml","_webexCore","_lodash","_conversation","_interopRequireDefault","_config","_encryptionTransforms","_decryptionTransforms","_shareActivity","_convoError","registerInternalPlugin","Conversation","payloadTransformer","predicates","name","test","ctx","optionsOrResponse","_promise","default","resolve","has","extract","body","direction","event","activity","response","multistatus","map","item","data","options","get","items","transforms","fn","array","all","transform","then","decrypt","_deleteProperty","object","objectType","concat","capitalize","content","_ctx$webex$config$con","webex","config","conversation","inboundProcessFunc","allowedInboundTags","allowedInboundStyles","htmlFilter","c","_ctx$webex$config$con2","outboundProcessFunc","allowedOutboundTags","allowedOutboundStyles","htmlFilterEscape","activities","participants","actor","target","threadActivity","childActivities","person","email","entryEmail","emailAddress","id","entryUUID","patterns","toLowerCase","roomProperties","isModerator","Boolean","uuid","reject","Error","internal","user","asUUID","decryptionTransforms","encryptionTransforms"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-user';\n\nimport {patterns} from '@webex/common';\nimport {filter as htmlFilter, filterEscape as htmlFilterEscape} from '@webex/helper-html';\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {capitalize, get, has} from 'lodash';\n\nimport Conversation from './conversation';\nimport config from './config';\nimport {transforms as encryptionTransforms} from './encryption-transforms';\nimport {transforms as decryptionTransforms} from './decryption-transforms';\n\nregisterInternalPlugin('conversation', Conversation, {\n payloadTransformer: {\n predicates: [\n {\n name: 'transformObject',\n test(ctx, optionsOrResponse) {\n return Promise.resolve(has(optionsOrResponse, 'body.objectType'));\n },\n extract(optionsOrResponse) {\n return Promise.resolve(optionsOrResponse.body);\n },\n },\n {\n name: 'transformObject',\n direction: 'inbound',\n test(ctx, event) {\n return Promise.resolve(has(event, 'activity'));\n },\n extract(event) {\n return Promise.resolve(event.activity);\n },\n },\n {\n name: 'transformObjectArray',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.multistatus'));\n },\n extract(response) {\n return Promise.resolve(\n response.body.multistatus.map((item) => item && item.data && item.data.activity)\n );\n },\n },\n {\n name: 'normalizeConversationListAndBindDecrypters',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].objectType')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(true);\n }\n\n return Promise.resolve(false);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n {\n name: 'transformObjectArray',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].objectType')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n {\n name: 'transformThreadArray',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].childType') || !has(options, 'body.items[0].actorId')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n ],\n transforms: [\n {\n name: 'normalizeConversationListAndBindDecrypters',\n fn(ctx, array) {\n return Promise.all(\n array.map((item) =>\n ctx.transform('normalizeObject', item).then(() => {\n item.decrypt = function decrypt() {\n Reflect.deleteProperty(item, 'decrypt');\n\n return ctx.transform('decryptObject', item);\n };\n\n return item;\n })\n )\n );\n },\n },\n {\n name: 'transformObjectArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformObject', item)));\n },\n },\n {\n name: 'transformThreadArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformThread', item)));\n },\n },\n {\n name: 'transformObject',\n direction: 'outbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('normalizeObject', object)\n .then(() => ctx.transform('encryptObject', object))\n .then(() => ctx.transform('encryptKmsMessage', object));\n },\n },\n {\n name: 'transformObject',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('decryptObject', object)\n .then(() => ctx.transform('normalizeObject', object));\n },\n },\n {\n name: 'normalizeObject',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return Promise.all([\n ctx.transform(`normalize${capitalize(object.objectType)}`, object),\n ctx.transform('normalizePropContent', object),\n ]);\n },\n },\n {\n name: 'transformThread',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('decryptThread', object)\n .then(() => ctx.transform('normalizeThread', object));\n },\n },\n {\n name: 'normalizePropContent',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object.content) {\n return Promise.resolve();\n }\n const {inboundProcessFunc, allowedInboundTags, allowedInboundStyles} =\n ctx.webex.config.conversation;\n\n return htmlFilter(\n inboundProcessFunc,\n allowedInboundTags || {},\n allowedInboundStyles,\n object.content\n ).then((c) => {\n object.content = c;\n });\n },\n },\n {\n name: 'normalizePropContent',\n direction: 'outbound',\n fn(ctx, object) {\n if (!object.content) {\n return Promise.resolve();\n }\n\n const {outboundProcessFunc, allowedOutboundTags, allowedOutboundStyles} =\n ctx.webex.config.conversation;\n\n return htmlFilterEscape(\n outboundProcessFunc,\n allowedOutboundTags || {},\n allowedOutboundStyles,\n object.content\n ).then((c) => {\n object.content = c;\n });\n },\n },\n {\n name: 'normalizeConversation',\n fn(ctx, conversation) {\n conversation.activities = conversation.activities || {};\n conversation.activities.items = conversation.activities.items || [];\n conversation.participants = conversation.participants || {};\n conversation.participants.items = conversation.participants.items || [];\n\n return Promise.all([\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('normalizeObject', item))\n ),\n Promise.all(\n conversation.participants.items.map((item) => ctx.transform('normalizeObject', item))\n ),\n ]);\n },\n },\n {\n name: 'normalizeActivity',\n fn(ctx, activity) {\n return Promise.all([\n ctx.transform('normalizeObject', activity.actor),\n ctx.transform('normalizeObject', activity.object),\n ctx.transform('normalizeObject', activity.target),\n ]);\n },\n },\n {\n name: 'normalizeThread',\n fn(ctx, threadActivity) {\n // childActivities are of type Activity\n return Promise.all(\n threadActivity.childActivities.map((item) => ctx.transform('normalizeObject', item))\n );\n },\n },\n {\n name: 'normalizePerson',\n // eslint-disable-next-line complexity\n fn(ctx, person) {\n const email = person.entryEmail || person.emailAddress || person.id;\n const id = person.entryUUID || person.id;\n\n if (patterns.email.test(email)) {\n person.entryEmail = person.emailAddress = email.toLowerCase();\n } else {\n Reflect.deleteProperty(person, 'entryEmail');\n Reflect.deleteProperty(person, 'emailAddress');\n }\n\n if (person.roomProperties) {\n person.roomProperties.isModerator = Boolean(person.roomProperties.isModerator);\n }\n\n if (patterns.uuid.test(id)) {\n person.entryUUID = person.id = id.toLowerCase();\n\n return Promise.resolve(person);\n }\n\n if (!email) {\n return Promise.reject(\n new Error('cannot determine id without an `emailAddress` or `entryUUID` property')\n );\n }\n\n return ctx.webex.internal.user.asUUID(email).then((uuid) => {\n person.entryUUID = person.id = uuid;\n\n return person;\n });\n },\n },\n ]\n .concat(decryptionTransforms)\n .concat(encryptionTransforms),\n },\n config,\n});\n\nexport {default} from './conversation';\nexport {default as ShareActivity} from './share-activity';\nexport {ConversationError, InvalidUserCreation} from './convo-error';\n"],"mappings":"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"}
1
+ {"version":3,"names":["require","_common","_helperHtml","_webexCore","_lodash","_conversation","_interopRequireDefault","_config","_shareActivity","_convoError","registerInternalPlugin","Conversation","payloadTransformer","predicates","name","test","ctx","optionsOrResponse","_promise","default","resolve","has","extract","body","direction","event","activity","response","multistatus","map","item","data","options","get","items","transforms","fn","array","all","transform","then","decrypt","_deleteProperty","object","objectType","concat","capitalize","content","_ctx$webex$config$con","webex","config","conversation","inboundProcessFunc","allowedInboundTags","allowedInboundStyles","htmlFilter","c","_ctx$webex$config$con2","outboundProcessFunc","allowedOutboundTags","allowedOutboundStyles","htmlFilterEscape","activities","participants","actor","target","threadActivity","childActivities","person","email","entryEmail","emailAddress","id","entryUUID","patterns","toLowerCase","roomProperties","isModerator","Boolean","uuid","reject","Error","internal","user","asUUID"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-user';\n\nimport {patterns} from '@webex/common';\nimport {filter as htmlFilter, filterEscape as htmlFilterEscape} from '@webex/helper-html';\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {capitalize, get, has} from 'lodash';\n\nimport Conversation from './conversation';\nimport config from './config';\n\nregisterInternalPlugin('conversation', Conversation, {\n payloadTransformer: {\n predicates: [\n {\n name: 'transformObject',\n test(ctx, optionsOrResponse) {\n return Promise.resolve(has(optionsOrResponse, 'body.objectType'));\n },\n extract(optionsOrResponse) {\n return Promise.resolve(optionsOrResponse.body);\n },\n },\n {\n name: 'transformObject',\n direction: 'inbound',\n test(ctx, event) {\n return Promise.resolve(has(event, 'activity'));\n },\n extract(event) {\n return Promise.resolve(event.activity);\n },\n },\n {\n name: 'transformObjectArray',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.multistatus'));\n },\n extract(response) {\n return Promise.resolve(\n response.body.multistatus.map((item) => item && item.data && item.data.activity)\n );\n },\n },\n {\n name: 'normalizeConversationListAndBindDecrypters',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].objectType')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(true);\n }\n\n return Promise.resolve(false);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n {\n name: 'transformObjectArray',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].objectType')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n {\n name: 'transformThreadArray',\n direction: 'inbound',\n test(ctx, options) {\n if (!has(options, 'body.items[0].childType') || !has(options, 'body.items[0].actorId')) {\n return Promise.resolve(false);\n }\n\n if (get(options, 'options.deferDecrypt')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body.items);\n },\n },\n ],\n transforms: [\n {\n name: 'normalizeConversationListAndBindDecrypters',\n fn(ctx, array) {\n return Promise.all(\n array.map((item) =>\n ctx.transform('normalizeObject', item).then(() => {\n item.decrypt = function decrypt() {\n Reflect.deleteProperty(item, 'decrypt');\n\n return ctx.transform('decryptObject', item);\n };\n\n return item;\n })\n )\n );\n },\n },\n {\n name: 'transformObjectArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformObject', item)));\n },\n },\n {\n name: 'transformThreadArray',\n fn(ctx, array) {\n return Promise.all(array.map((item) => ctx.transform('transformThread', item)));\n },\n },\n {\n name: 'transformObject',\n direction: 'outbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('normalizeObject', object)\n .then(() => ctx.transform('encryptObject', object))\n .then(() => ctx.transform('encryptKmsMessage', object));\n },\n },\n {\n name: 'transformObject',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('decryptObject', object)\n .then(() => ctx.transform('normalizeObject', object));\n },\n },\n {\n name: 'normalizeObject',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.objectType) {\n return Promise.resolve();\n }\n\n return Promise.all([\n ctx.transform(`normalize${capitalize(object.objectType)}`, object),\n ctx.transform('normalizePropContent', object),\n ]);\n },\n },\n {\n name: 'transformThread',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n return ctx\n .transform('decryptThread', object)\n .then(() => ctx.transform('normalizeThread', object));\n },\n },\n {\n name: 'normalizePropContent',\n direction: 'inbound',\n fn(ctx, object) {\n if (!object.content) {\n return Promise.resolve();\n }\n const {inboundProcessFunc, allowedInboundTags, allowedInboundStyles} =\n ctx.webex.config.conversation;\n\n return htmlFilter(\n inboundProcessFunc,\n allowedInboundTags || {},\n allowedInboundStyles,\n object.content\n ).then((c) => {\n object.content = c;\n });\n },\n },\n {\n name: 'normalizePropContent',\n direction: 'outbound',\n fn(ctx, object) {\n if (!object.content) {\n return Promise.resolve();\n }\n\n const {outboundProcessFunc, allowedOutboundTags, allowedOutboundStyles} =\n ctx.webex.config.conversation;\n\n return htmlFilterEscape(\n outboundProcessFunc,\n allowedOutboundTags || {},\n allowedOutboundStyles,\n object.content\n ).then((c) => {\n object.content = c;\n });\n },\n },\n {\n name: 'normalizeConversation',\n fn(ctx, conversation) {\n conversation.activities = conversation.activities || {};\n conversation.activities.items = conversation.activities.items || [];\n conversation.participants = conversation.participants || {};\n conversation.participants.items = conversation.participants.items || [];\n\n return Promise.all([\n Promise.all(\n conversation.activities.items.map((item) => ctx.transform('normalizeObject', item))\n ),\n Promise.all(\n conversation.participants.items.map((item) => ctx.transform('normalizeObject', item))\n ),\n ]);\n },\n },\n {\n name: 'normalizeActivity',\n fn(ctx, activity) {\n return Promise.all([\n ctx.transform('normalizeObject', activity.actor),\n ctx.transform('normalizeObject', activity.object),\n ctx.transform('normalizeObject', activity.target),\n ]);\n },\n },\n {\n name: 'normalizeThread',\n fn(ctx, threadActivity) {\n // childActivities are of type Activity\n return Promise.all(\n threadActivity.childActivities.map((item) => ctx.transform('normalizeObject', item))\n );\n },\n },\n {\n name: 'normalizePerson',\n // eslint-disable-next-line complexity\n fn(ctx, person) {\n const email = person.entryEmail || person.emailAddress || person.id;\n const id = person.entryUUID || person.id;\n\n if (patterns.email.test(email)) {\n person.entryEmail = person.emailAddress = email.toLowerCase();\n } else {\n Reflect.deleteProperty(person, 'entryEmail');\n Reflect.deleteProperty(person, 'emailAddress');\n }\n\n if (person.roomProperties) {\n person.roomProperties.isModerator = Boolean(person.roomProperties.isModerator);\n }\n\n if (patterns.uuid.test(id)) {\n person.entryUUID = person.id = id.toLowerCase();\n\n return Promise.resolve(person);\n }\n\n if (!email) {\n return Promise.reject(\n new Error('cannot determine id without an `emailAddress` or `entryUUID` property')\n );\n }\n\n return ctx.webex.internal.user.asUUID(email).then((uuid) => {\n person.entryUUID = person.id = uuid;\n\n return person;\n });\n },\n },\n ],\n },\n config,\n});\n\nexport {default} from './conversation';\nexport {default as ShareActivity} from './share-activity';\nexport {ConversationError, InvalidUserCreation} from './convo-error';\n"],"mappings":"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"}
@@ -391,7 +391,7 @@ var ShareActivity = _webexCore.WebexPlugin.extend({
391
391
  return res.body.spaceUrl;
392
392
  });
393
393
  },
394
- version: "3.6.0"
394
+ version: "3.7.0-ipv6-multi-turn-urls.2"
395
395
  });
396
396
 
397
397
  /**
package/package.json CHANGED
@@ -19,12 +19,12 @@
19
19
  ]
20
20
  },
21
21
  "dependencies": {
22
- "@webex/common": "3.6.0",
23
- "@webex/helper-html": "3.6.0",
24
- "@webex/helper-image": "3.6.0",
25
- "@webex/internal-plugin-encryption": "3.6.0",
26
- "@webex/internal-plugin-user": "3.6.0",
27
- "@webex/webex-core": "3.6.0",
22
+ "@webex/common": "3.7.0-ipv6-multi-turn-urls.2",
23
+ "@webex/helper-html": "3.7.0-ipv6-multi-turn-urls.2",
24
+ "@webex/helper-image": "3.7.0-ipv6-multi-turn-urls.2",
25
+ "@webex/internal-plugin-encryption": "3.7.0-ipv6-multi-turn-urls.2",
26
+ "@webex/internal-plugin-user": "3.7.0-ipv6-multi-turn-urls.2",
27
+ "@webex/webex-core": "3.7.0-ipv6-multi-turn-urls.2",
28
28
  "crypto-js": "^4.1.1",
29
29
  "lodash": "^4.17.21",
30
30
  "node-scr": "^0.3.0",
@@ -36,13 +36,13 @@
36
36
  "@webex/eslint-config-legacy": "0.0.0",
37
37
  "@webex/jest-config-legacy": "0.0.0",
38
38
  "@webex/legacy-tools": "0.0.0",
39
- "@webex/test-helper-chai": "3.6.0",
40
- "@webex/test-helper-file": "3.6.0",
41
- "@webex/test-helper-make-local-url": "3.6.0",
42
- "@webex/test-helper-mocha": "3.6.0",
43
- "@webex/test-helper-mock-webex": "3.6.0",
44
- "@webex/test-helper-retry": "3.6.0",
45
- "@webex/test-helper-test-users": "3.6.0",
39
+ "@webex/test-helper-chai": "3.7.0-ipv6-multi-turn-urls.2",
40
+ "@webex/test-helper-file": "3.7.0-ipv6-multi-turn-urls.2",
41
+ "@webex/test-helper-make-local-url": "3.7.0-ipv6-multi-turn-urls.2",
42
+ "@webex/test-helper-mocha": "3.7.0-ipv6-multi-turn-urls.2",
43
+ "@webex/test-helper-mock-webex": "3.7.0-ipv6-multi-turn-urls.2",
44
+ "@webex/test-helper-retry": "3.7.0-ipv6-multi-turn-urls.2",
45
+ "@webex/test-helper-test-users": "3.7.0-ipv6-multi-turn-urls.2",
46
46
  "eslint": "^8.24.0",
47
47
  "prettier": "^2.7.1",
48
48
  "sinon": "^9.2.4"
@@ -56,5 +56,5 @@
56
56
  "test:style": "eslint ./src/**/*.*",
57
57
  "test:unit": "webex-legacy-tools test --unit --runner jest"
58
58
  },
59
- "version": "3.6.0"
59
+ "version": "3.7.0-ipv6-multi-turn-urls.2"
60
60
  }
package/src/config.js CHANGED
@@ -33,5 +33,15 @@ export default {
33
33
  */
34
34
  keepEncryptedProperties: false,
35
35
  decryptionFailureMessage: 'This message cannot be decrypted',
36
+
37
+ /**
38
+ * config value to perform decryption on inbound conversations and activities
39
+ */
40
+ includeDecryptionTransforms: true,
41
+
42
+ /**
43
+ * config value to perform decryption on outbound conversations and activities
44
+ */
45
+ includeEncryptionTransforms: true,
36
46
  },
37
47
  };
@@ -25,6 +25,8 @@ import {
25
25
  } from 'lodash';
26
26
  import {readExifData} from '@webex/helper-image';
27
27
  import uuid from 'uuid';
28
+ import {transforms as encryptionTransforms} from './encryption-transforms';
29
+ import {transforms as decryptionTransforms} from './decryption-transforms';
28
30
 
29
31
  import {InvalidUserCreation} from './convo-error';
30
32
  import ShareActivity from './share-activity';
@@ -66,8 +68,9 @@ const getConvoLimit = (options = {}) => {
66
68
  let limit;
67
69
 
68
70
  if (options.conversationsLimit) {
71
+ const value = Math.max(options.conversationsLimit, 0);
69
72
  limit = {
70
- value: options.conversationsLimit,
73
+ value,
71
74
  name: 'conversationsLimit',
72
75
  };
73
76
  }
@@ -77,6 +80,16 @@ const getConvoLimit = (options = {}) => {
77
80
 
78
81
  const Conversation = WebexPlugin.extend({
79
82
  namespace: 'Conversation',
83
+ initialize() {
84
+ this.listenToOnce(this.webex, 'ready', () => {
85
+ if (Array.isArray(this.webex.config.payloadTransformer?.transforms)) {
86
+ this.webex.config.payloadTransformer.transforms =
87
+ this.webex.config.payloadTransformer.transforms
88
+ .concat(this.config.includeDecryptionTransforms ? decryptionTransforms : [])
89
+ .concat(this.config.includeEncryptionTransforms ? encryptionTransforms : []);
90
+ }
91
+ });
92
+ },
80
93
 
81
94
  /**
82
95
  * @param {String} cluster the cluster containing the id
@@ -290,15 +303,16 @@ const Conversation = WebexPlugin.extend({
290
303
  },
291
304
 
292
305
  /**
293
- * delete a reaction
294
- * @param {Object} conversation
295
- * @param {Object} reactionId,
296
- * @param {String} recipientId,
306
+ * create a reaction
307
+ * @param {Object} conversation the conversation in which the reaction will be added
308
+ * @param {Object} reactionId reaction activity to be deleted
309
+ * @param {Object} actorId id of person object who is reacting
310
+ * @param {String} recipientId used when reacting to direct IMC messages
297
311
  * @returns {Promise<Activity>}
298
312
  */
299
- deleteReaction(conversation, reactionId, recipientId) {
313
+ deleteReaction(conversation, reactionId, actorId, recipientId) {
300
314
  const deleteReactionPayload = {
301
- actor: {objectType: 'person', id: this.webex.internal.device.userId},
315
+ actor: {objectType: 'person', id: actorId ?? this.webex.internal.device.userId},
302
316
  object: {
303
317
  id: reactionId,
304
318
  objectType: 'activity',
@@ -321,39 +335,43 @@ const Conversation = WebexPlugin.extend({
321
335
 
322
336
  /**
323
337
  * create a reaction
324
- * @param {Object} conversation
338
+ * @param {Object} conversation the conversation in which the reaction will be added
325
339
  * @param {Object} displayName must be 'celebrate', 'heart', 'thumbsup', 'smiley', 'haha', 'confused', 'sad'
326
- * @param {Object} activity activity object from convo we are reacting to
327
- * @param {String} recipientId,
340
+ * @param {Object} parentActivity activity object from that we are reacting to
341
+ * @param {Object} actorId id of person object who is reacting
342
+ * @param {String} recipientId used when reacting to direct IMC messages
328
343
  * @returns {Promise<Activity>}
329
344
  */
330
- addReaction(conversation, displayName, activity, recipientId) {
331
- return this.createReactionHmac(displayName, activity).then((hmac) => {
332
- const addReactionPayload = {
333
- actor: {objectType: 'person', id: this.webex.internal.device.userId},
334
- target: {
335
- id: conversation.id,
336
- objectType: 'conversation',
337
- },
338
- verb: 'add',
339
- objectType: 'activity',
340
- parent: {
341
- type: 'reaction',
342
- id: activity.id,
343
- },
344
- object: {
345
- objectType: 'reaction2',
346
- displayName,
347
- hmac,
348
- },
349
- };
345
+ async addReaction(conversation, displayName, parentActivity, actorId, recipientId) {
346
+ let hmac;
347
+ if (this.config.includeEncryptionTransforms) {
348
+ hmac = await this.createReactionHmac(displayName, parentActivity);
349
+ }
350
350
 
351
- if (recipientId) {
352
- addReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};
353
- }
351
+ const addReactionPayload = {
352
+ actor: {objectType: 'person', id: actorId ?? this.webex.internal.device.userId},
353
+ target: {
354
+ id: conversation.id,
355
+ objectType: 'conversation',
356
+ },
357
+ verb: 'add',
358
+ objectType: 'activity',
359
+ parent: {
360
+ type: 'reaction',
361
+ id: parentActivity.id,
362
+ },
363
+ object: {
364
+ objectType: 'reaction2',
365
+ displayName,
366
+ hmac,
367
+ },
368
+ };
354
369
 
355
- return this.sendReaction(conversation, addReactionPayload);
356
- });
370
+ if (recipientId) {
371
+ addReactionPayload.recipients = {items: [{id: recipientId, objectType: 'person'}]};
372
+ }
373
+
374
+ return this.sendReaction(conversation, addReactionPayload);
357
375
  },
358
376
 
359
377
  /**
package/src/index.js CHANGED
@@ -12,8 +12,6 @@ import {capitalize, get, has} from 'lodash';
12
12
 
13
13
  import Conversation from './conversation';
14
14
  import config from './config';
15
- import {transforms as encryptionTransforms} from './encryption-transforms';
16
- import {transforms as decryptionTransforms} from './decryption-transforms';
17
15
 
18
16
  registerInternalPlugin('conversation', Conversation, {
19
17
  payloadTransformer: {
@@ -315,9 +313,7 @@ registerInternalPlugin('conversation', Conversation, {
315
313
  });
316
314
  },
317
315
  },
318
- ]
319
- .concat(decryptionTransforms)
320
- .concat(encryptionTransforms),
316
+ ],
321
317
  },
322
318
  config,
323
319
  });
@@ -363,6 +363,15 @@ describe('plugin-conversation', function () {
363
363
  assert.include(map(conversations, 'url'), conversation2.url);
364
364
  }));
365
365
 
366
+ it('retrieves no conversations', () =>
367
+ webex.internal.conversation
368
+ .list({
369
+ conversationsLimit: -100,
370
+ })
371
+ .then((conversations) => {
372
+ assert.lengthOf(conversations, 0);
373
+ }));
374
+
366
375
  it('retrieves a paginated set of conversations', () =>
367
376
  webex.internal.conversation
368
377
  .paginate({
@@ -15,6 +15,8 @@ import {
15
15
  activityManager,
16
16
  } from '../../../src/activity-thread-ordering';
17
17
  import {ACTIVITY_TYPES, getActivityType, OLDER, NEWER} from '../../../src/activities';
18
+ import {transforms as encryptionTransforms} from '../../../src/encryption-transforms';
19
+ import {transforms as decryptionTransforms} from '../../../src/decryption-transforms';
18
20
 
19
21
  describe('plugin-conversation', () => {
20
22
  describe('Conversation', () => {
@@ -35,83 +37,88 @@ describe('plugin-conversation', () => {
35
37
  });
36
38
 
37
39
  describe('addReaction()', () => {
38
- it('should add recipients to the payload if provided', () => {
39
- const {conversation} = webex.internal;
40
- const recipientId = 'example-recipient-id';
41
- const expected = {items: [{id: recipientId, objectType: 'person'}]}
42
- conversation.sendReaction = sinon.stub().returns(Promise.resolve())
43
- conversation.createReactionHmac = sinon.stub().returns(Promise.resolve('hmac'))
44
-
45
- return conversation.addReaction({}, 'example-display-name', {}, recipientId)
46
- .then(() => {
47
- assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
48
- });
40
+ let conversation;
41
+ let recipientId;
42
+ let expectedRecipients;
43
+ let actorId;
44
+
45
+ beforeEach(() => {
46
+ conversation = webex.internal.conversation;
47
+ recipientId = 'example-recipient-id';
48
+ actorId = 'actorId-123';
49
+ expectedRecipients = {items: [{id: recipientId, objectType: 'person'}]};
50
+ conversation.sendReaction = sinon.stub().returns(Promise.resolve());
51
+ conversation.createReactionHmac = sinon.stub().returns(Promise.resolve('hmac'));
49
52
  });
50
- });
53
+ it('should add recipients to the payload if provided', async () => {
54
+ conversation.config.includeEncryptionTransforms = true;
51
55
 
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)
60
- .then(() => {
61
- assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
62
- });
56
+ await conversation.addReaction({}, 'example-display-name', {}, actorId, recipientId);
57
+ assert.called(conversation.createReactionHmac);
58
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expectedRecipients);
63
59
  });
64
- });
65
60
 
66
- describe('prepare()', () => {
67
- it('should ammend activity recipients to the returned object', () => {
68
- const {conversation} = webex.internal;
69
- const activity = { recipients: 'example-recipients' };
61
+ it('will not call createReactionHmac if config prohibits', async () => {
62
+ conversation.config.includeEncryptionTransforms = false;
70
63
 
71
- return conversation.prepare(activity)
72
- .then((results) => {
73
- assert.deepEqual(results.recipients, activity.recipients);
74
- });
64
+ await conversation.addReaction({}, 'example-display-name', {}, actorId, recipientId);
65
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expectedRecipients);
66
+ assert.notCalled(conversation.createReactionHmac);
75
67
  });
76
- });
77
68
 
78
- describe('addReaction()', () => {
79
- it('should add recipients to the payload if provided', () => {
80
- const {conversation} = webex.internal;
81
- const recipientId = 'example-recipient-id';
82
- const expected = {items: [{id: recipientId, objectType: 'person'}]}
83
- conversation.sendReaction = sinon.stub().returns(Promise.resolve())
84
- conversation.createReactionHmac = sinon.stub().returns(Promise.resolve('hmac'))
85
-
86
- return conversation.addReaction({}, 'example-display-name', {}, recipientId)
87
- .then(() => {
88
- assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
89
- });
69
+ it('should use actorId if provided', async () => {
70
+ await conversation.addReaction({}, 'example-display-name', {}, actorId, recipientId);
71
+ assert.equal(conversation.sendReaction.args[0][1].actor.id, actorId);
72
+ });
73
+
74
+ it('should use fallback device.userId if no actorId provided', async () => {
75
+ const defaultUserId = 'fallback-id';
76
+ webex.internal.device.userId = defaultUserId;
77
+ await conversation.addReaction({}, 'example-display-name', {}, undefined, recipientId);
78
+ assert.equal(conversation.sendReaction.args[0][1].actor.id, defaultUserId);
90
79
  });
91
80
  });
92
81
 
93
82
  describe('deleteReaction()', () => {
94
- it('should add recipients to the payload if provided', () => {
95
- const {conversation} = webex.internal;
96
- const recipientId = 'example-recipient-id';
97
- const expected = {items: [{id: recipientId, objectType: 'person'}]}
98
- conversation.sendReaction = sinon.stub().returns(Promise.resolve())
99
-
100
- return conversation.deleteReaction({}, 'example-reaction-id', recipientId)
101
- .then(() => {
102
- assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expected);
103
- });
83
+ let conversation;
84
+ let recipientId;
85
+ let expectedRecipients;
86
+ let actorId;
87
+
88
+ beforeEach(() => {
89
+ conversation = webex.internal.conversation;
90
+ recipientId = 'example-recipient-id';
91
+ actorId = 'actorId-123';
92
+ expectedRecipients = {items: [{id: recipientId, objectType: 'person'}]};
93
+ conversation.sendReaction = sinon.stub().returns(Promise.resolve());
94
+ conversation.createReactionHmac = sinon.stub().returns(Promise.resolve('hmac'));
95
+ });
96
+
97
+ it('should add recipients to the payload if provided', async () => {
98
+ await conversation.deleteReaction({}, 'example-reaction-id', actorId, recipientId);
99
+ assert.deepEqual(conversation.sendReaction.args[0][1].recipients, expectedRecipients);
100
+ });
101
+
102
+ it('should use actorId if provided', async () => {
103
+ await conversation.deleteReaction({}, 'example-reaction-id', actorId, recipientId);
104
+ assert.equal(conversation.sendReaction.args[0][1].actor.id, actorId);
105
+ });
106
+
107
+ it('should use fallback device.userId if no actorId provided', async () => {
108
+ const defaultUserId = 'fallback-id';
109
+ webex.internal.device.userId = defaultUserId;
110
+ await conversation.deleteReaction({}, 'example-reaction-id', undefined, recipientId);
111
+ assert.equal(conversation.sendReaction.args[0][1].actor.id, defaultUserId);
104
112
  });
105
113
  });
106
114
 
107
115
  describe('prepare()', () => {
108
116
  it('should ammend activity recipients to the returned object', () => {
109
117
  const {conversation} = webex.internal;
110
- const activity = { recipients: 'example-recipients' };
118
+ const activity = {recipients: 'example-recipients'};
111
119
 
112
- return conversation.prepare(activity)
113
- .then((results) => {
114
- assert.deepEqual(results.recipients, activity.recipients);
120
+ return conversation.prepare(activity).then((results) => {
121
+ assert.deepEqual(results.recipients, activity.recipients);
115
122
  });
116
123
  });
117
124
  });
@@ -220,13 +227,17 @@ describe('plugin-conversation', () => {
220
227
  it('should convert a "us" cluster to WEBEX_CONVERSATION_DEFAULT_CLUSTER cluster', async () => {
221
228
  await webex.internal.conversation.getUrlFromClusterId({cluster: 'us'});
222
229
 
223
- sinon.assert.calledWith(webex.internal.services.getServiceUrlFromClusterId, {cluster: 'us'});
230
+ sinon.assert.calledWith(webex.internal.services.getServiceUrlFromClusterId, {
231
+ cluster: 'us',
232
+ });
224
233
  });
225
234
 
226
235
  it('should add the cluster service when missing', async () => {
227
236
  await webex.internal.conversation.getUrlFromClusterId({cluster: 'urn:TEAM:us-west-2_r'});
228
237
 
229
- sinon.assert.calledWith(webex.internal.services.getServiceUrlFromClusterId, {cluster: 'urn:TEAM:us-west-2_r'});
238
+ sinon.assert.calledWith(webex.internal.services.getServiceUrlFromClusterId, {
239
+ cluster: 'urn:TEAM:us-west-2_r',
240
+ });
230
241
  });
231
242
  });
232
243
 
@@ -902,4 +913,59 @@ describe('plugin-conversation', () => {
902
913
  });
903
914
  });
904
915
  });
916
+ describe('#payloadTransform encrypt/decrypt', () => {
917
+ let webex;
918
+ let conversation;
919
+
920
+ const setup = (options = {}) => {
921
+ const {includeDecryptionTransforms, includeEncryptionTransforms} = options;
922
+ webex = new MockWebex({
923
+ children: {
924
+ conversation: Conversation,
925
+ },
926
+ });
927
+ webex.config.payloadTransformer = {transforms: []};
928
+ conversation = webex.internal.conversation;
929
+ conversation.config.includeDecryptionTransforms = !!includeDecryptionTransforms;
930
+ conversation.config.includeEncryptionTransforms = !!includeEncryptionTransforms;
931
+ };
932
+
933
+ const checkTransforms = (receivedTransforms, expectedTransforms) =>
934
+ receivedTransforms
935
+ .map((transform) => transform.name)
936
+ .every((name) => expectedTransforms.map((transform) => transform.name).includes(name));
937
+
938
+ it.each([
939
+ {
940
+ includeDecryptionTransforms: false,
941
+ includeEncryptionTransforms: false,
942
+ expectedTransforms: [],
943
+ },
944
+ {
945
+ includeDecryptionTransforms: false,
946
+ includeEncryptionTransforms: true,
947
+ expectedTransforms: encryptionTransforms,
948
+ },
949
+ {
950
+ includeDecryptionTransforms: true,
951
+ includeEncryptionTransforms: false,
952
+ expectedTransforms: decryptionTransforms,
953
+ },
954
+ {
955
+ includeDecryptionTransforms: true,
956
+ includeEncryptionTransforms: true,
957
+ expectedTransforms: encryptionTransforms.concat(decryptionTransforms),
958
+ },
959
+ ])(
960
+ '%s sets initFailed to true when collectPreauthCatalog errors',
961
+ async ({includeDecryptionTransforms, includeEncryptionTransforms, expectedTransforms}) => {
962
+ setup({includeDecryptionTransforms, includeEncryptionTransforms});
963
+ webex.trigger('ready');
964
+ assert.isTrue(
965
+ checkTransforms(webex.config.payloadTransformer.transforms, expectedTransforms),
966
+ 'transforms should match expected configuration'
967
+ );
968
+ }
969
+ );
970
+ });
905
971
  });