@webex/internal-plugin-ediscovery 3.0.0-beta.9 → 3.0.0-beta.91

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"names":["Transforms","ctx","object","body","resolve","reportRequest","webex","internal","encryption","kms","createUnboundKeys","count","then","keys","length","encryptionKeyUrl","uri","createResource","userIds","userId","promises","name","push","encryptText","encryptedName","description","encryptedDescription","spaceNames","all","map","spaceName","encryptedSpaceNames","keywords","keyword","encryptedKeywords","emails","unencryptedEmails","email","encryptedEmails","catch","reason","logger","error","reject","reportNamePromise","decryptText","decryptedName","id","reportDescriptionPromise","decryptedDescription","spaceNamePromises","decryptedSpaceNames","keywordPromises","decryptedKeywords","emailPromises","decryptedEmails","concat","reportId","activity","ediscovery","getContentContainerByContainerId","targetId","res","container","activityId","warning","spaceWarning","containerWarning","containerName","isOneOnOne","displayNames","participants","formerParticipants","p","displayName","join","includes","verb","meeting","recording","extension","extensionType","spaceInfo","info","onBehalfOfUser","objectDisplayName","requestWithRetries","onBehalfOf","decryptedMessage","previousName","previousEncryptionKeyUrl","objectType","contentUrl","decryptedContentUrl","decryptedDisplayName","webUrl","decryptedWebUrl","previous","decryptedPreviousContentUrl","decryptedPreviousDisplayName","title","topic","shares","Array","prototype","apply","files","whiteboards","links","i","share","warn","mimeType","fileSize","url","microsoftSharedLinkInfo","driveId","decryptedDriveId","itemId","decryptedItemId","scr","sslr","decryptScr","decryptedSCR","loc","containerType","containerId","descriptionEncryptionKeyUrl","decryptedContainerDescription","decryptedContainerName"],"sources":["transforms.js"],"sourcesContent":["import {requestWithRetries} from './retry';\n\n/**\n * This class is used to encrypt/decrypt various properties on ReportRequests, Activities and Spaces as they are sent/returned to/from the eDiscovery Service\n */\nclass Transforms {\n /**\n * This function is used to encrypt sensitive properties on the ReportRequest before it is sent to the eDiscovery Service createReport API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to encrypt some property on based on the type\n * @returns {Promise} - Returns a transform promise\n */\n static encryptReportRequest(ctx, object) {\n if (!object || !object.body) {\n return Promise.resolve(object);\n }\n const reportRequest = object.body;\n\n return ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1})\n .then((keys) => {\n if (keys && keys.length > 0 && keys[0]) {\n reportRequest.encryptionKeyUrl = keys[0].uri;\n\n return ctx.webex.internal.encryption.kms.createResource({userIds: [keys[0].userId], keys})\n .then(() => {\n const promises = [];\n\n if (reportRequest.name) {\n promises.push(\n ctx.webex.internal.encryption.encryptText(keys[0], reportRequest.name)\n .then((encryptedName) => {\n reportRequest.name = encryptedName;\n })\n );\n }\n\n if (reportRequest.description) {\n promises.push(\n ctx.webex.internal.encryption.encryptText(keys[0], reportRequest.description)\n .then((encryptedDescription) => {\n reportRequest.description = encryptedDescription;\n })\n );\n }\n\n if (reportRequest.spaceNames) {\n promises.push(\n Promise.all(reportRequest.spaceNames.map((spaceName) => ctx.webex.internal.encryption.encryptText(keys[0], spaceName)))\n .then((encryptedSpaceNames) => {\n reportRequest.spaceNames = encryptedSpaceNames;\n })\n );\n }\n\n if (reportRequest.keywords) {\n promises.push(\n Promise.all(reportRequest.keywords.map((keyword) => ctx.webex.internal.encryption.encryptText(keys[0], keyword)))\n .then((encryptedKeywords) => {\n reportRequest.keywords = encryptedKeywords;\n })\n );\n }\n\n if (reportRequest.emails) {\n // store unencrypted emails for ediscovery service to convert to user ids\n reportRequest.unencryptedEmails = reportRequest.emails;\n promises.push(\n Promise.all(reportRequest.emails.map((email) => ctx.webex.internal.encryption.encryptText(keys[0], email)))\n .then((encryptedEmails) => {\n reportRequest.emails = encryptedEmails;\n })\n );\n }\n\n return Promise.all(promises);\n });\n }\n\n return Promise.resolve(object);\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error while encrypting report request: ${reportRequest} : ${reason}`);\n\n return Promise.reject(reason);\n });\n }\n\n /**\n * This function is used to decrypt encrypted properties on the ReportRequest that is returned from the eDiscovery Service getReport(s) API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} - Returns a transform promise\n */\n static decryptReportRequest(ctx, object) {\n if (!object || !object.body || !object.body.reportRequest || !object.body.reportRequest.encryptionKeyUrl) {\n return Promise.resolve(object);\n }\n const {reportRequest} = object.body;\n\n let reportNamePromise;\n\n if (reportRequest.name) {\n reportNamePromise = ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, reportRequest.name)\n .then((decryptedName) => {\n reportRequest.name = decryptedName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error decrypting report name for report ${object.body.id}: ${reason}`);\n });\n }\n\n let reportDescriptionPromise;\n\n if (reportRequest.description) {\n reportDescriptionPromise = ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, reportRequest.description)\n .then((decryptedDescription) => {\n reportRequest.description = decryptedDescription;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error decrypting description for report ${object.body.id}: ${reason}`);\n });\n }\n\n let spaceNamePromises = [];\n\n if (reportRequest.spaceNames) {\n spaceNamePromises = Promise.all(reportRequest.spaceNames.map((spaceName) => ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, spaceName)))\n .then((decryptedSpaceNames) => {\n reportRequest.spaceNames = decryptedSpaceNames;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error decrypting space name for report ${object.body.id}: ${reason}`);\n });\n }\n\n let keywordPromises = [];\n\n if (reportRequest.keywords) {\n keywordPromises = Promise.all(reportRequest.keywords.map((keyword) => ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, keyword)))\n .then((decryptedKeywords) => {\n reportRequest.keywords = decryptedKeywords;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error decrypting keywords for report ${object.body.id}: ${reason}`);\n });\n }\n\n let emailPromises = [];\n\n if (reportRequest.emails) {\n emailPromises = Promise.all(reportRequest.emails.map((email) => ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, email)))\n .then((decryptedEmails) => {\n reportRequest.emails = decryptedEmails;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error decrypting emails for report ${object.body.id}: ${reason}`);\n });\n }\n\n return Promise.all([reportNamePromise, reportDescriptionPromise].concat(spaceNamePromises, keywordPromises, emailPromises));\n }\n\n /**\n * This function is used to decrypt encrypted properties on the activities that are returned from the eDiscovery Service getContent API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to decrypt some property on based on the type\n * @param {String} reportId - Id of the report for which content is being retrieved\n * @returns {Promise} - Returns a transform promise\n */\n static decryptReportContent(ctx, object, reportId) {\n if (!object || !object.body || !reportId) {\n return Promise.resolve();\n }\n const activity = object.body;\n\n const promises = [];\n\n return ctx.webex.internal.ediscovery.getContentContainerByContainerId(reportId, activity.targetId)\n .then((res) => {\n const container = res.body;\n\n if (!container) {\n const reason = `Container ${activity.targetId} not found - unable to decrypt activity ${activity.activityId}`;\n\n activity.error = reason;\n ctx.webex.logger.error(reason);\n\n return Promise.resolve(object);\n }\n\n // add warning properties to the activity - these will be recorded in the downloader\n if (container.warning) {\n activity.spaceWarning = container.warning; // Remove this property once all clients are using the content container model\n activity.containerWarning = container.warning;\n }\n\n // set space name and participants on activity\n if (container.containerName) {\n activity.spaceName = container.containerName; // Remove this property once all clients are using the content container model\n activity.containerName = container.containerName;\n }\n else if (container.isOneOnOne) {\n const displayNames = (container.participants || []).concat(container.formerParticipants || []).map((p) => p.displayName).join(' & ');\n\n // One to One spaces have no space name, use participant names as 'Subject' instead\n activity.spaceName = displayNames; // Remove this property once all clients are using the content container model\n activity.containerName = displayNames;\n }\n else {\n activity.spaceName = ''; // Remove this property once all clients are using the content container model\n activity.containerName = '';\n }\n\n // post and share activities have content which needs to be decrypted\n // as do meeting, recording activities, customApp extensions, and space information updates\n if (!['post', 'share'].includes(activity.verb) && !activity.meeting && !activity.recording && !(activity.extension && activity.extension.extensionType === 'customApp') &&\n !activity.spaceInfo?.name && !activity.spaceInfo?.description) {\n return Promise.resolve(object);\n }\n\n if (!activity.encryptionKeyUrl) {\n // If the encryptionKeyUrl is empty we assume the activity is unencrypted\n ctx.webex.logger.info(`Activity ${activity.activityId} cannot be decrypted due to a missing encryption key url`);\n\n return Promise.resolve(object);\n }\n\n if (!container.onBehalfOfUser) {\n const reason = `No user available with which to decrypt activity ${activity.activityId} in container ${activity.targetId}`;\n\n ctx.webex.logger.error(reason);\n activity.error = reason;\n\n return Promise.resolve(object);\n }\n\n // Decrypt activity message if present\n if (activity.objectDisplayName) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.objectDisplayName, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedMessage) => {\n activity.objectDisplayName = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt message error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n\n // If the activity is a space information update, decrypt the name and description if present\n if (activity.spaceInfo?.name) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.spaceInfo.name, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedMessage) => {\n activity.spaceInfo.name = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.spaceInfo.name error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n if (activity.spaceInfo?.description) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.spaceInfo.description, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedMessage) => {\n activity.spaceInfo.description = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.spaceInfo.description error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n if (activity.spaceInfo?.previousName && activity.spaceInfo.previousEncryptionKeyUrl) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.spaceInfo.previousEncryptionKeyUrl, activity.spaceInfo.previousName, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedMessage) => {\n activity.spaceInfo.previousName = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.spaceInfo.previousName error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n\n // Decrypt content url and display name if extension is present\n if (activity.extension && activity.extension.objectType === 'extension' && activity.extension.extensionType === 'customApp') {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.extension.contentUrl, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedContentUrl) => {\n activity.extension.contentUrl = decryptedContentUrl;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.extension.contentUrl error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.extension.displayName, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedDisplayName) => {\n activity.extension.displayName = decryptedDisplayName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.extension.displayName error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n\n // Decrypt webUrl.\n if (activity.extension.webUrl) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.extension.webUrl, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedWebUrl) => {\n activity.extension.webUrl = decryptedWebUrl;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.extension.webUrl error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n if (activity.verb === 'update' && activity.extension.previous) {\n if (activity.extension.previous.contentUrl) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.extension.previous.contentUrl, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedPreviousContentUrl) => {\n activity.extension.previous.contentUrl = decryptedPreviousContentUrl;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.extension.previous.contentUrl error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n if (activity.extension.previous.displayName) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.extension.previous.displayName, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedPreviousDisplayName) => {\n activity.extension.previous.displayName = decryptedPreviousDisplayName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.extension.previous.displayName error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n }\n }\n\n // Decrypt meeting title if present\n if (activity?.meeting?.title) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.meeting.title, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedMessage) => {\n activity.meeting.title = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.meeting.title error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n\n // Decrypt meeting recording topic if present\n if (activity?.recording?.topic) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, activity.recording.topic, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedMessage) => {\n activity.recording.topic = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt activity.recording.topic error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n\n // Decrypt shares (files, whiteboards, shared links)\n // Array.prototype.concat.apply ignores undefined\n let shares = Array.prototype.concat.apply([], activity.files);\n\n shares = Array.prototype.concat.apply(shares, activity.whiteboards);\n shares = Array.prototype.concat.apply(shares, activity.links);\n for (let i = 0; i < shares.length; i += 1) {\n const share = shares[i];\n\n // Decrypt the share's display name\n // Ignore display names for whiteboards which are unencrypted\n if (share.displayName && (!activity.whiteboards || !activity.whiteboards.includes(share))) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, share.displayName, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedDisplayName) => {\n share.displayName = decryptedDisplayName;\n })\n .catch((reason) => {\n ctx.webex.logger.warn(`Decrypt DisplayName error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`);\n // add warning property to activity - this will present an indication that there was data loss on the downloader\n activity.warning = reason;\n }));\n }\n\n // Shared Links can have additional decryption fields\n if (share.microsoftSharedLinkInfo) {\n if (share.microsoftSharedLinkInfo.driveId) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, share.microsoftSharedLinkInfo.driveId, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedDriveId) => {\n share.microsoftSharedLinkInfo.driveId = decryptedDriveId;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt share.microsoftSharedLinkInfo.driveId error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`);\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n\n if (share.microsoftSharedLinkInfo.itemId) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, share.microsoftSharedLinkInfo.itemId, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedItemId) => {\n share.microsoftSharedLinkInfo.itemId = decryptedItemId;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt share.microsoftSharedLinkInfo.itemId error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`);\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n }\n\n // Decrypt the scr (Secure Content Reference) or sslr (Secure Shared Link Reference)\n // Unlike a scr the sslr contains only a loc. But decryptScr(...) is flexible and\n // leaves the tag, auth, IV, etc fields on the SCR object as undefined.\n if (share.scr || share.sslr) {\n promises.push(requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptScr,\n // A share will have an encryptionKeyUrl when it's activity uses a different encryptionKeyUrl. This can happen when old activities are edited\n // and key rotation is turn on.\n [share.encryptionKeyUrl || activity.encryptionKeyUrl, share.scr || share.sslr, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedSCR) => {\n if (share.scr) {\n share.scr = decryptedSCR;\n }\n else {\n share.sslr = decryptedSCR.loc;\n }\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt file scr or sslr error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`);\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n }));\n }\n }\n\n return Promise.all(promises);\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error retrieving content container for: ${activity.activityId} in container ${activity.targetId}: ${reason}`);\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n });\n }\n\n /**\n * This function is used to decrypt encrypted properties on the containers that are returned from the eDiscovery Service getContentContainer API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} - Returns a transform promise\n */\n static decryptReportContentContainer(ctx, object) {\n if (!object || !object.body) {\n return Promise.resolve();\n }\n const container = object.body;\n\n if (!container.containerName) {\n return Promise.resolve(object);\n }\n\n if (!container.encryptionKeyUrl) {\n // If the encryptionKeyUrl is empty we assume the container name is unencrypted\n ctx.webex.logger.info(`${container.containerType} container ${container.containerId} cannot be decrypted due to a missing encryption key url`);\n\n return Promise.resolve(object);\n }\n\n if (!container.onBehalfOfUser) {\n const reason = `No user available with which to decrypt ${container.containerType} container ${container.containerId}`;\n\n ctx.webex.logger.error(reason);\n container.error = reason;\n\n return Promise.resolve(object);\n }\n\n // decrypt description if present with a descriptionEncryptionKeyUrl\n if (container.description && container.descriptionEncryptionKeyUrl) {\n requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [container.descriptionEncryptionKeyUrl, container.description, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedContainerDescription) => {\n container.description = decryptedContainerDescription;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt container description error for ${container.containerType} container ${container.containerId}: ${reason}`);\n // add warn property to container info - this warning will be recorded in the downloader\n container.warning = reason;\n // don't return, attempt to decrypt the name first\n });\n }\n\n return requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText,\n [container.encryptionKeyUrl, container.containerName, {onBehalfOf: container.onBehalfOfUser}])\n .then((decryptedContainerName) => {\n container.containerName = decryptedContainerName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Decrypt container name error for ${container.containerType} container ${container.containerId}: ${reason}`);\n // add warn property to container info - this warning will be recorded in the downloader\n container.warning = reason;\n\n return Promise.resolve(object);\n });\n }\n}\n\nexport default Transforms;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Transforms","ctx","object","body","resolve","reportRequest","webex","internal","encryption","kms","createUnboundKeys","count","then","keys","length","encryptionKeyUrl","uri","createResource","userIds","userId","promises","name","push","encryptText","encryptedName","description","encryptedDescription","spaceNames","all","map","spaceName","encryptedSpaceNames","keywords","keyword","encryptedKeywords","emails","unencryptedEmails","email","encryptedEmails","catch","reason","logger","error","reject","reportNamePromise","decryptText","decryptedName","id","reportDescriptionPromise","decryptedDescription","spaceNamePromises","decryptedSpaceNames","keywordPromises","decryptedKeywords","emailPromises","decryptedEmails","concat","reportId","activity","ediscovery","getContentContainerByContainerId","targetId","res","container","activityId","warning","spaceWarning","containerWarning","containerName","isOneOnOne","displayNames","participants","formerParticipants","p","displayName","join","includes","verb","meeting","recording","extension","extensionType","spaceInfo","encryptedTextKeyValues","info","undefined","onBehalfOfUser","objectDisplayName","requestWithRetries","onBehalfOf","decryptedMessage","previousName","previousEncryptionKeyUrl","objectType","contentUrl","decryptedContentUrl","decryptedDisplayName","webUrl","decryptedWebUrl","previous","decryptedPreviousContentUrl","decryptedPreviousDisplayName","key","value","title","topic","shares","Array","prototype","apply","files","whiteboards","links","share","i","warn","mimeType","fileSize","url","microsoftSharedLinkInfo","driveId","decryptedDriveId","itemId","decryptedItemId","scr","sslr","decryptScr","decryptedSCR","loc","containerType","containerId","descriptionEncryptionKeyUrl","decryptedContainerDescription","decryptedContainerName"],"sources":["transforms.js"],"sourcesContent":["import {requestWithRetries} from './retry';\n\n/**\n * This class is used to encrypt/decrypt various properties on ReportRequests, Activities and Spaces as they are sent/returned to/from the eDiscovery Service\n */\nclass Transforms {\n /**\n * This function is used to encrypt sensitive properties on the ReportRequest before it is sent to the eDiscovery Service createReport API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to encrypt some property on based on the type\n * @returns {Promise} - Returns a transform promise\n */\n static encryptReportRequest(ctx, object) {\n if (!object || !object.body) {\n return Promise.resolve(object);\n }\n const reportRequest = object.body;\n\n return ctx.webex.internal.encryption.kms\n .createUnboundKeys({count: 1})\n .then((keys) => {\n if (keys && keys.length > 0 && keys[0]) {\n reportRequest.encryptionKeyUrl = keys[0].uri;\n\n return ctx.webex.internal.encryption.kms\n .createResource({userIds: [keys[0].userId], keys})\n .then(() => {\n const promises = [];\n\n if (reportRequest.name) {\n promises.push(\n ctx.webex.internal.encryption\n .encryptText(keys[0], reportRequest.name)\n .then((encryptedName) => {\n reportRequest.name = encryptedName;\n })\n );\n }\n\n if (reportRequest.description) {\n promises.push(\n ctx.webex.internal.encryption\n .encryptText(keys[0], reportRequest.description)\n .then((encryptedDescription) => {\n reportRequest.description = encryptedDescription;\n })\n );\n }\n\n if (reportRequest.spaceNames) {\n promises.push(\n Promise.all(\n reportRequest.spaceNames.map((spaceName) =>\n ctx.webex.internal.encryption.encryptText(keys[0], spaceName)\n )\n ).then((encryptedSpaceNames) => {\n reportRequest.spaceNames = encryptedSpaceNames;\n })\n );\n }\n\n if (reportRequest.keywords) {\n promises.push(\n Promise.all(\n reportRequest.keywords.map((keyword) =>\n ctx.webex.internal.encryption.encryptText(keys[0], keyword)\n )\n ).then((encryptedKeywords) => {\n reportRequest.keywords = encryptedKeywords;\n })\n );\n }\n\n if (reportRequest.emails) {\n // store unencrypted emails for ediscovery service to convert to user ids\n reportRequest.unencryptedEmails = reportRequest.emails;\n promises.push(\n Promise.all(\n reportRequest.emails.map((email) =>\n ctx.webex.internal.encryption.encryptText(keys[0], email)\n )\n ).then((encryptedEmails) => {\n reportRequest.emails = encryptedEmails;\n })\n );\n }\n\n return Promise.all(promises);\n });\n }\n\n return Promise.resolve(object);\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Error while encrypting report request: ${reportRequest} : ${reason}`\n );\n\n return Promise.reject(reason);\n });\n }\n\n /**\n * This function is used to decrypt encrypted properties on the ReportRequest that is returned from the eDiscovery Service getReport(s) API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} - Returns a transform promise\n */\n static decryptReportRequest(ctx, object) {\n if (\n !object ||\n !object.body ||\n !object.body.reportRequest ||\n !object.body.reportRequest.encryptionKeyUrl\n ) {\n return Promise.resolve(object);\n }\n const {reportRequest} = object.body;\n\n let reportNamePromise;\n\n if (reportRequest.name) {\n reportNamePromise = ctx.webex.internal.encryption\n .decryptText(reportRequest.encryptionKeyUrl, reportRequest.name)\n .then((decryptedName) => {\n reportRequest.name = decryptedName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Error decrypting report name for report ${object.body.id}: ${reason}`\n );\n });\n }\n\n let reportDescriptionPromise;\n\n if (reportRequest.description) {\n reportDescriptionPromise = ctx.webex.internal.encryption\n .decryptText(reportRequest.encryptionKeyUrl, reportRequest.description)\n .then((decryptedDescription) => {\n reportRequest.description = decryptedDescription;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Error decrypting description for report ${object.body.id}: ${reason}`\n );\n });\n }\n\n let spaceNamePromises = [];\n\n if (reportRequest.spaceNames) {\n spaceNamePromises = Promise.all(\n reportRequest.spaceNames.map((spaceName) =>\n ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, spaceName)\n )\n )\n .then((decryptedSpaceNames) => {\n reportRequest.spaceNames = decryptedSpaceNames;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Error decrypting space name for report ${object.body.id}: ${reason}`\n );\n });\n }\n\n let keywordPromises = [];\n\n if (reportRequest.keywords) {\n keywordPromises = Promise.all(\n reportRequest.keywords.map((keyword) =>\n ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, keyword)\n )\n )\n .then((decryptedKeywords) => {\n reportRequest.keywords = decryptedKeywords;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Error decrypting keywords for report ${object.body.id}: ${reason}`\n );\n });\n }\n\n let emailPromises = [];\n\n if (reportRequest.emails) {\n emailPromises = Promise.all(\n reportRequest.emails.map((email) =>\n ctx.webex.internal.encryption.decryptText(reportRequest.encryptionKeyUrl, email)\n )\n )\n .then((decryptedEmails) => {\n reportRequest.emails = decryptedEmails;\n })\n .catch((reason) => {\n ctx.webex.logger.error(`Error decrypting emails for report ${object.body.id}: ${reason}`);\n });\n }\n\n return Promise.all(\n [reportNamePromise, reportDescriptionPromise].concat(\n spaceNamePromises,\n keywordPromises,\n emailPromises\n )\n );\n }\n\n /**\n * This function is used to decrypt encrypted properties on the activities that are returned from the eDiscovery Service getContent API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to decrypt some property on based on the type\n * @param {String} reportId - Id of the report for which content is being retrieved\n * @returns {Promise} - Returns a transform promise\n */\n static decryptReportContent(ctx, object, reportId) {\n if (!object || !object.body || !reportId) {\n return Promise.resolve();\n }\n const activity = object.body;\n\n const promises = [];\n\n return ctx.webex.internal.ediscovery\n .getContentContainerByContainerId(reportId, activity.targetId)\n .then((res) => {\n const container = res.body;\n\n if (!container) {\n const reason = `Container ${activity.targetId} not found - unable to decrypt activity ${activity.activityId}`;\n\n activity.error = reason;\n ctx.webex.logger.error(reason);\n\n return Promise.resolve(object);\n }\n\n // add warning properties to the activity - these will be recorded in the downloader\n if (container.warning) {\n activity.spaceWarning = container.warning; // Remove this property once all clients are using the content container model\n activity.containerWarning = container.warning;\n }\n\n // set space name and participants on activity\n if (container.containerName) {\n activity.spaceName = container.containerName; // Remove this property once all clients are using the content container model\n activity.containerName = container.containerName;\n } else if (container.isOneOnOne) {\n const displayNames = (container.participants || [])\n .concat(container.formerParticipants || [])\n .map((p) => p.displayName)\n .join(' & ');\n\n // One to One spaces have no space name, use participant names as 'Subject' instead\n activity.spaceName = displayNames; // Remove this property once all clients are using the content container model\n activity.containerName = displayNames;\n } else {\n activity.spaceName = ''; // Remove this property once all clients are using the content container model\n activity.containerName = '';\n }\n\n // post and share activities have content which needs to be decrypted\n // as do meeting, recording activities, customApp extensions, and space information updates\n if (\n !['post', 'share'].includes(activity.verb) &&\n !activity.meeting &&\n !activity.recording &&\n !(activity.extension && activity.extension.extensionType === 'customApp') &&\n !activity.spaceInfo?.name &&\n !activity.spaceInfo?.description &&\n !activity.encryptedTextKeyValues\n ) {\n return Promise.resolve(object);\n }\n\n if (!activity.encryptionKeyUrl) {\n // If the encryptionKeyUrl is empty we assume the activity is unencrypted\n ctx.webex.logger.info(\n `Activity ${activity.activityId} cannot be decrypted due to a missing encryption key url`\n );\n\n return Promise.resolve(object);\n }\n\n // CDR Compliance uses org key and does depend on an onBehalfOfUser\n if (activity.encryptedTextKeyValues === undefined && !container.onBehalfOfUser) {\n const reason = `No user available with which to decrypt activity ${activity.activityId} in container ${activity.targetId}`;\n\n ctx.webex.logger.error(reason);\n activity.error = reason;\n\n return Promise.resolve(object);\n }\n\n // Decrypt activity message if present\n if (activity.objectDisplayName) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.objectDisplayName,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedMessage) => {\n activity.objectDisplayName = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt message error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n\n // If the activity is a space information update, decrypt the name and description if present\n if (activity.spaceInfo?.name) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.spaceInfo.name,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedMessage) => {\n activity.spaceInfo.name = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.spaceInfo.name error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n if (activity.spaceInfo?.description) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.spaceInfo.description,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedMessage) => {\n activity.spaceInfo.description = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.spaceInfo.description error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n if (activity.spaceInfo?.previousName && activity.spaceInfo.previousEncryptionKeyUrl) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.spaceInfo.previousEncryptionKeyUrl,\n activity.spaceInfo.previousName,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedMessage) => {\n activity.spaceInfo.previousName = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.spaceInfo.previousName error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n\n // Decrypt content url and display name if extension is present\n if (\n activity.extension &&\n activity.extension.objectType === 'extension' &&\n activity.extension.extensionType === 'customApp'\n ) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.extension.contentUrl,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedContentUrl) => {\n activity.extension.contentUrl = decryptedContentUrl;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.extension.contentUrl error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.extension.displayName,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedDisplayName) => {\n activity.extension.displayName = decryptedDisplayName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.extension.displayName error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n\n // Decrypt webUrl.\n if (activity.extension.webUrl) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.extension.webUrl,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedWebUrl) => {\n activity.extension.webUrl = decryptedWebUrl;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.extension.webUrl error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n if (activity.verb === 'update' && activity.extension.previous) {\n if (activity.extension.previous.contentUrl) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.extension.previous.contentUrl,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedPreviousContentUrl) => {\n activity.extension.previous.contentUrl = decryptedPreviousContentUrl;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.extension.previous.contentUrl error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n if (activity.extension.previous.displayName) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.extension.previous.displayName,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedPreviousDisplayName) => {\n activity.extension.previous.displayName = decryptedPreviousDisplayName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.extension.previous.displayName error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n }\n }\n\n // Decrypt encrypted text map if present\n if (activity.encryptedTextKeyValues !== undefined) {\n for (const [key, value] of Object.entries(activity.encryptedTextKeyValues)) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [activity.encryptionKeyUrl, value]\n )\n .then((decryptedMessage) => {\n activity.encryptedTextKeyValues[key] = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.encryptedTextKeyValues error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n }\n\n // Decrypt meeting title if present\n if (activity?.meeting?.title) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.meeting.title,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedMessage) => {\n activity.meeting.title = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.meeting.title error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n\n // Decrypt meeting recording topic if present\n if (activity?.recording?.topic) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n activity.recording.topic,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedMessage) => {\n activity.recording.topic = decryptedMessage;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt activity.recording.topic error for activity ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n\n // Decrypt shares (files, whiteboards, shared links)\n // Array.prototype.concat.apply ignores undefined\n let shares = Array.prototype.concat.apply([], activity.files);\n\n shares = Array.prototype.concat.apply(shares, activity.whiteboards);\n shares = Array.prototype.concat.apply(shares, activity.links);\n for (let i = 0; i < shares.length; i += 1) {\n const share = shares[i];\n\n // Decrypt the share's display name\n // Ignore display names for whiteboards which are unencrypted\n if (\n share.displayName &&\n (!activity.whiteboards || !activity.whiteboards.includes(share))\n ) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n share.displayName,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedDisplayName) => {\n share.displayName = decryptedDisplayName;\n })\n .catch((reason) => {\n ctx.webex.logger.warn(\n `Decrypt DisplayName error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`\n );\n // add warning property to activity - this will present an indication that there was data loss on the downloader\n activity.warning = reason;\n })\n );\n }\n\n // Shared Links can have additional decryption fields\n if (share.microsoftSharedLinkInfo) {\n if (share.microsoftSharedLinkInfo.driveId) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n share.microsoftSharedLinkInfo.driveId,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedDriveId) => {\n share.microsoftSharedLinkInfo.driveId = decryptedDriveId;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt share.microsoftSharedLinkInfo.driveId error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`\n );\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n\n if (share.microsoftSharedLinkInfo.itemId) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [\n activity.encryptionKeyUrl,\n share.microsoftSharedLinkInfo.itemId,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedItemId) => {\n share.microsoftSharedLinkInfo.itemId = decryptedItemId;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt share.microsoftSharedLinkInfo.itemId error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`\n );\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n }\n\n // Decrypt the scr (Secure Content Reference) or sslr (Secure Shared Link Reference)\n // Unlike a scr the sslr contains only a loc. But decryptScr(...) is flexible and\n // leaves the tag, auth, IV, etc fields on the SCR object as undefined.\n if (share.scr || share.sslr) {\n promises.push(\n requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptScr,\n // A share will have an encryptionKeyUrl when it's activity uses a different encryptionKeyUrl. This can happen when old activities are edited\n // and key rotation is turn on.\n [\n share.encryptionKeyUrl || activity.encryptionKeyUrl,\n share.scr || share.sslr,\n {onBehalfOf: container.onBehalfOfUser},\n ]\n )\n .then((decryptedSCR) => {\n if (share.scr) {\n share.scr = decryptedSCR;\n } else {\n share.sslr = decryptedSCR.loc;\n }\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt file scr or sslr error for activity ${activity.activityId} in container ${activity.targetId} for share type: ${share.mimeType}, size: ${share.fileSize}, and url: ${share.url} due to error: ${reason}`\n );\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n })\n );\n }\n }\n\n return Promise.all(promises);\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Error retrieving content container for: ${activity.activityId} in container ${activity.targetId}: ${reason}`\n );\n // add error property to activity - this error will be recorded in the downloader and the activity omitted from the report\n activity.error = reason;\n\n return Promise.resolve(object);\n });\n }\n\n /**\n * This function is used to decrypt encrypted properties on the containers that are returned from the eDiscovery Service getContentContainer API\n * @param {Object} ctx - An object containing a webex instance and a transform\n * @param {Object} object - Generic object that you want to decrypt some property on based on the type\n * @returns {Promise} - Returns a transform promise\n */\n static decryptReportContentContainer(ctx, object) {\n if (!object || !object.body) {\n return Promise.resolve();\n }\n const container = object.body;\n\n if (!container.containerName) {\n return Promise.resolve(object);\n }\n\n if (!container.encryptionKeyUrl) {\n // If the encryptionKeyUrl is empty we assume the container name is unencrypted\n ctx.webex.logger.info(\n `${container.containerType} container ${container.containerId} cannot be decrypted due to a missing encryption key url`\n );\n\n return Promise.resolve(object);\n }\n\n if (!container.onBehalfOfUser) {\n const reason = `No user available with which to decrypt ${container.containerType} container ${container.containerId}`;\n\n ctx.webex.logger.error(reason);\n container.error = reason;\n\n return Promise.resolve(object);\n }\n\n // decrypt description if present with a descriptionEncryptionKeyUrl\n if (container.description && container.descriptionEncryptionKeyUrl) {\n requestWithRetries(ctx.webex.internal.encryption, ctx.webex.internal.encryption.decryptText, [\n container.descriptionEncryptionKeyUrl,\n container.description,\n {onBehalfOf: container.onBehalfOfUser},\n ])\n .then((decryptedContainerDescription) => {\n container.description = decryptedContainerDescription;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt container description error for ${container.containerType} container ${container.containerId}: ${reason}`\n );\n // add warn property to container info - this warning will be recorded in the downloader\n container.warning = reason;\n // don't return, attempt to decrypt the name first\n });\n }\n\n return requestWithRetries(\n ctx.webex.internal.encryption,\n ctx.webex.internal.encryption.decryptText,\n [container.encryptionKeyUrl, container.containerName, {onBehalfOf: container.onBehalfOfUser}]\n )\n .then((decryptedContainerName) => {\n container.containerName = decryptedContainerName;\n })\n .catch((reason) => {\n ctx.webex.logger.error(\n `Decrypt container name error for ${container.containerType} container ${container.containerId}: ${reason}`\n );\n // add warn property to container info - this warning will be recorded in the downloader\n container.warning = reason;\n\n return Promise.resolve(object);\n });\n }\n}\n\nexport default Transforms;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-ediscovery",
3
- "version": "3.0.0-beta.9",
3
+ "version": "3.0.0-beta.91",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "contributors": [
@@ -25,18 +25,18 @@
25
25
  ]
26
26
  },
27
27
  "devDependencies": {
28
- "@webex/test-helper-chai": "3.0.0-beta.9",
29
- "@webex/test-helper-mock-webex": "3.0.0-beta.9",
30
- "@webex/test-helper-test-users": "3.0.0-beta.9",
28
+ "@webex/test-helper-chai": "3.0.0-beta.91",
29
+ "@webex/test-helper-mock-webex": "3.0.0-beta.91",
30
+ "@webex/test-helper-test-users": "3.0.0-beta.91",
31
31
  "sinon": "^9.2.4"
32
32
  },
33
33
  "dependencies": {
34
- "@webex/common": "3.0.0-beta.9",
35
- "@webex/internal-plugin-conversation": "3.0.0-beta.9",
36
- "@webex/internal-plugin-ediscovery": "3.0.0-beta.9",
37
- "@webex/internal-plugin-encryption": "3.0.0-beta.9",
38
- "@webex/internal-plugin-mercury": "3.0.0-beta.9",
39
- "@webex/webex-core": "3.0.0-beta.9",
34
+ "@webex/common": "3.0.0-beta.91",
35
+ "@webex/internal-plugin-conversation": "3.0.0-beta.91",
36
+ "@webex/internal-plugin-ediscovery": "3.0.0-beta.91",
37
+ "@webex/internal-plugin-encryption": "3.0.0-beta.91",
38
+ "@webex/internal-plugin-mercury": "3.0.0-beta.91",
39
+ "@webex/webex-core": "3.0.0-beta.91",
40
40
  "lodash": "^4.17.21",
41
41
  "uuid": "^3.3.2"
42
42
  }
package/src/config.js CHANGED
@@ -1,8 +1,10 @@
1
-
2
1
  export default {
3
2
  ediscovery: {
4
3
  defaultOptions: {
5
- offset: 0, size: 100, timeoutMs: 30000, types: []
6
- }
7
- }
4
+ offset: 0,
5
+ size: 100,
6
+ timeoutMs: 30000,
7
+ types: [],
8
+ },
9
+ },
8
10
  };
package/src/ediscovery.js CHANGED
@@ -1,5 +1,5 @@
1
- /* eslint-disable prefer-template */
2
- /* eslint-disable no-useless-escape */
1
+ /* eslint-disable */
2
+
3
3
  /*!
4
4
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
5
5
  */
package/src/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
+ /* eslint-disable */
4
5
 
5
6
  import '@webex/internal-plugin-encryption';
6
7
  import '@webex/internal-plugin-conversation';
@@ -24,7 +25,7 @@ registerInternalPlugin('ediscovery', EDiscovery, {
24
25
  },
25
26
  extract(object) {
26
27
  return Promise.resolve(object);
27
- }
28
+ },
28
29
  },
29
30
  {
30
31
  name: 'decryptReportRequestArray',
@@ -34,17 +35,21 @@ registerInternalPlugin('ediscovery', EDiscovery, {
34
35
  },
35
36
  extract(object) {
36
37
  return Promise.resolve(object);
37
- }
38
+ },
38
39
  },
39
40
  {
40
41
  name: 'encryptReportRequest',
41
42
  direction: 'outbound',
42
43
  test(ctx, object) {
43
- return Promise.resolve(has(object, 'body.keywords') || has(object, 'body.spaceNames') || has(object, 'body.emails'));
44
+ return Promise.resolve(
45
+ has(object, 'body.keywords') ||
46
+ has(object, 'body.spaceNames') ||
47
+ has(object, 'body.emails')
48
+ );
44
49
  },
45
50
  extract(object) {
46
51
  return Promise.resolve(object);
47
- }
52
+ },
48
53
  },
49
54
  {
50
55
  name: 'decryptReportContent',
@@ -54,7 +59,7 @@ registerInternalPlugin('ediscovery', EDiscovery, {
54
59
  },
55
60
  extract(object) {
56
61
  return Promise.resolve(object);
57
- }
62
+ },
58
63
  },
59
64
  {
60
65
  name: 'decryptReportContentArray',
@@ -64,7 +69,7 @@ registerInternalPlugin('ediscovery', EDiscovery, {
64
69
  },
65
70
  extract(object) {
66
71
  return Promise.resolve(object);
67
- }
72
+ },
68
73
  },
69
74
  {
70
75
  name: 'decryptReportContentContainer',
@@ -74,7 +79,7 @@ registerInternalPlugin('ediscovery', EDiscovery, {
74
79
  },
75
80
  extract(object) {
76
81
  return Promise.resolve(object);
77
- }
82
+ },
78
83
  },
79
84
  {
80
85
  name: 'decryptReportContentContainerArray',
@@ -84,8 +89,8 @@ registerInternalPlugin('ediscovery', EDiscovery, {
84
89
  },
85
90
  extract(object) {
86
91
  return Promise.resolve(object);
87
- }
88
- }
92
+ },
93
+ },
89
94
  ],
90
95
  transforms: [
91
96
  {
@@ -93,7 +98,7 @@ registerInternalPlugin('ediscovery', EDiscovery, {
93
98
  direction: 'inbound',
94
99
  fn(ctx, object) {
95
100
  return Transforms.decryptReportRequest(ctx, object);
96
- }
101
+ },
97
102
  },
98
103
  {
99
104
  name: 'decryptReportRequestArray',
@@ -103,22 +108,24 @@ registerInternalPlugin('ediscovery', EDiscovery, {
103
108
  return Promise.resolve();
104
109
  }
105
110
 
106
- return Promise.all(object.body.map((item) => ctx.transform('decryptReportRequest', {body: item})));
107
- }
111
+ return Promise.all(
112
+ object.body.map((item) => ctx.transform('decryptReportRequest', {body: item}))
113
+ );
114
+ },
108
115
  },
109
116
  {
110
117
  name: 'encryptReportRequest',
111
118
  direction: 'outbound',
112
119
  fn(ctx, object) {
113
120
  return Transforms.encryptReportRequest(ctx, object);
114
- }
121
+ },
115
122
  },
116
123
  {
117
124
  name: 'decryptReportContent',
118
125
  direction: 'inbound',
119
126
  fn(ctx, object, reportId) {
120
127
  return Transforms.decryptReportContent(ctx, object, reportId);
121
- }
128
+ },
122
129
  },
123
130
  {
124
131
  name: 'decryptReportContentArray',
@@ -129,15 +136,19 @@ registerInternalPlugin('ediscovery', EDiscovery, {
129
136
  }
130
137
 
131
138
  // Always use the report url as this'll resolve correctly for remote reports
132
- return Promise.all(object.body.map((item) => ctx.transform('decryptReportContent', {body: item}, object.options.uri)));
133
- }
139
+ return Promise.all(
140
+ object.body.map((item) =>
141
+ ctx.transform('decryptReportContent', {body: item}, object.options.uri)
142
+ )
143
+ );
144
+ },
134
145
  },
135
146
  {
136
147
  name: 'decryptReportContentContainer',
137
148
  direction: 'inbound',
138
149
  fn(ctx, object) {
139
150
  return Transforms.decryptReportContentContainer(ctx, object);
140
- }
151
+ },
141
152
  },
142
153
  {
143
154
  name: 'decryptReportContentContainerArray',
@@ -147,11 +158,13 @@ registerInternalPlugin('ediscovery', EDiscovery, {
147
158
  return Promise.resolve();
148
159
  }
149
160
 
150
- return Promise.all(object.body.map((item) => ctx.transform('decryptReportContentContainer', {body: item})));
151
- }
152
- }
153
- ]
154
- }
161
+ return Promise.all(
162
+ object.body.map((item) => ctx.transform('decryptReportContentContainer', {body: item}))
163
+ );
164
+ },
165
+ },
166
+ ],
167
+ },
155
168
  });
156
169
 
157
170
  export default EDiscovery;
@@ -10,7 +10,16 @@
10
10
  * @returns {Object} ReportRequest - Contains all search parameters
11
11
  */
12
12
  class ReportRequest {
13
- constructor(name = '', description = '', emails = [], userIds = [], keywords = [], encryptionKeyUrl = '', spaceNames = [], range = {startTime: '2020-01-01T00:00:00', endTime: '2020-01-01T23:59:59'}) {
13
+ constructor(
14
+ name = '',
15
+ description = '',
16
+ emails = [],
17
+ userIds = [],
18
+ keywords = [],
19
+ encryptionKeyUrl = '',
20
+ spaceNames = [],
21
+ range = {startTime: '2020-01-01T00:00:00', endTime: '2020-01-01T23:59:59'}
22
+ ) {
14
23
  this.name = name;
15
24
  this.description = description;
16
25
  this.emails = emails;
package/src/retry.js CHANGED
@@ -1,24 +1,33 @@
1
1
  const retryErrors = [429, 502, 503, 504];
2
2
 
3
- async function requestWithRetries(ctx, func, args, retryCount = 0, retryIntervalInSeconds = 0, maxRetries = 3) {
3
+ async function requestWithRetries(
4
+ ctx,
5
+ func,
6
+ args,
7
+ retryCount = 0,
8
+ retryIntervalInSeconds = 0,
9
+ maxRetries = 3
10
+ ) {
4
11
  await timeout(retryIntervalInSeconds);
5
12
 
6
- return func.apply(ctx, args)
7
- .catch((reason) => {
8
- if (retryErrors.includes(reason.statusCode) && retryCount < maxRetries) {
9
- retryCount += 1;
10
- let retryIntervalInSeconds = (retryCount + 1) ** 2; // 4, 9 and 16 second delays as default
13
+ return func.apply(ctx, args).catch((reason) => {
14
+ if (retryErrors.includes(reason.statusCode) && retryCount < maxRetries) {
15
+ retryCount += 1;
16
+ // eslint-disable-next-line no-shadow
17
+ let retryIntervalInSeconds = (retryCount + 1) ** 2; // 4, 9 and 16 second delays as default
11
18
 
12
- if (reason.headers && reason.headers['retry-after']) {
13
- retryIntervalInSeconds = reason.headers['retry-after'];
14
- }
15
- console.error(`Request #${retryCount} error: ${reason.statusCode}. Attempting retry #${retryCount} in ${retryIntervalInSeconds} seconds`);
16
-
17
- return requestWithRetries(ctx, func, args, retryCount, retryIntervalInSeconds, maxRetries);
19
+ if (reason.headers && reason.headers['retry-after']) {
20
+ retryIntervalInSeconds = reason.headers['retry-after'];
18
21
  }
22
+ console.error(
23
+ `Request #${retryCount} error: ${reason.statusCode}. Attempting retry #${retryCount} in ${retryIntervalInSeconds} seconds`
24
+ );
25
+
26
+ return requestWithRetries(ctx, func, args, retryCount, retryIntervalInSeconds, maxRetries);
27
+ }
19
28
 
20
- return Promise.reject(reason);
21
- });
29
+ return Promise.reject(reason);
30
+ });
22
31
  }
23
32
 
24
33
  function timeout(sec) {