@webex/internal-plugin-board 1.149.0 → 1.150.1

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/board.js CHANGED
@@ -700,7 +700,97 @@ var Board = _webexCore.WebexPlugin.extend({
700
700
  });
701
701
  });
702
702
  },
703
- version: "1.149.0"
703
+
704
+ /** Authorize transcoder (for sharing whiteboard to mobile)
705
+ *
706
+ * @param {Board~Channel} board
707
+ * @memberof Board.BoardService
708
+ * @returns {String} authorization
709
+ */
710
+ authorizeMediaInjector: function authorizeMediaInjector(board) {
711
+ var _this15 = this;
712
+
713
+ if (!board) {
714
+ _promise.default.reject(new Error('#authorizeMediaInjector --> cannot authorize transcoder without board'));
715
+ }
716
+
717
+ return this.webex.internal.encryption.kms.prepareRequest({
718
+ method: 'create',
719
+ uri: '/authorizations',
720
+ resourceUri: board.kmsResourceUrl,
721
+ anonymous: 1
722
+ }).then(function (request) {
723
+ return _this15.webex.request({
724
+ uri: "".concat(board.channelUrl, "/sharePolicies/transcoder"),
725
+ method: 'PUT',
726
+ body: {
727
+ kmsMessage: request.wrapped
728
+ }
729
+ });
730
+ }).then(function (res) {
731
+ return _this15.webex.internal.encryption.kms.decryptKmsMessage(res.body.kmsResponse);
732
+ }).then(function (decryptedKmsMessage) {
733
+ if ((decryptedKmsMessage === null || decryptedKmsMessage === void 0 ? void 0 : decryptedKmsMessage.authorizations.length) > 0) {
734
+ return decryptedKmsMessage.authorizations[0].bearer;
735
+ }
736
+
737
+ return undefined;
738
+ }).catch(function (err) {
739
+ return (
740
+ /* We want to resolve any errors so that whiteboard share will still work
741
+ * except mobile being able to receive the share
742
+ */
743
+ _promise.default.resolve(err)
744
+ );
745
+ });
746
+ },
747
+
748
+ /** Unauthorize transcoder (for stopping whiteboard share to mobile)
749
+ *
750
+ * @param {Board~Channel} board
751
+ * @memberof Board.BoardService
752
+ * @returns {Array} list of authIds removed
753
+ */
754
+ unauthorizeMediaInjector: function unauthorizeMediaInjector(board) {
755
+ var _this16 = this;
756
+
757
+ if (!board) {
758
+ _promise.default.reject(new Error('#unauthorizeMediaInjector --> cannot unauthorize transcoder without board'));
759
+ }
760
+
761
+ return this.webex.internal.encryption.kms.listAuthorizations({
762
+ kroUri: board.kmsResourceUrl
763
+ }).then(function (authorizations) {
764
+ /* Attempt to remove the authorization made from starting whiteboard share
765
+ * Also removing any previous authorizations that were not cleared
766
+ */
767
+ var promises = authorizations.map(function (auth) {
768
+ var authId = auth.authId;
769
+ return _this16.webex.internal.encryption.kms.removeAuthorization({
770
+ authId: authId,
771
+ kroUri: board.kmsResourceUrl
772
+ }).then(function () {
773
+ return _promise.default.resolve(authId);
774
+ }).catch(function (err) {
775
+ return (
776
+ /* We don't want this to error out, otherwise the
777
+ * Promise.all will not process the rest of the request
778
+ */
779
+ _promise.default.resolve(err)
780
+ );
781
+ });
782
+ });
783
+
784
+ if (promises.length > 0) {
785
+ return _promise.default.all(promises).then(function (responses) {
786
+ return responses;
787
+ });
788
+ }
789
+
790
+ return _promise.default.resolve([]);
791
+ });
792
+ },
793
+ version: "1.150.1"
704
794
  });
705
795
 
706
796
  var _default = Board;
package/dist/board.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["board.js"],"names":["Board","WebexPlugin","extend","namespace","children","realtime","Realtime","addContent","channel","contents","chunks","config","numberContentsPerPageForAdd","map","part","_addContentChunk","bind","addImage","image","metadata","webex","internal","board","_uploadImage","then","scr","type","file","mimeType","size","url","loc","setSnapshotImage","imageScr","hiddenSpace","encryption","encryptScr","defaultEncryptionKeyUrl","encryptedScr","imageBody","height","width","encryptionKeyUrl","fileSize","request","method","uri","channelUrl","body","res","createChannel","conversation","api","resource","_prepareChannel","aclUrlLink","aclUrl","kmsMessage","userIds","kmsResourceObjectUrl","keyUris","deleteChannel","options","aclLinkType","linkedAcl","kmsResourceUrl","querystring","stringify","authId","aclLinkOperation","promise","resolve","preventDeleteActiveChannel","lockChannelForDeletion","qs","intent","keepActive","decryptContents","all","items","content","decryptPromise","decryptSingleFileContent","decryptSingleContent","payload","encryptedData","decryptText","JSON","parse","encryptedContent","decryptScr","decryptedMetadata","displayName","error","deleteAllContent","deletePartialContent","contentsToKeep","clearBoard","encryptContents","encryptionPromise","contentType","encryptSingleFileContent","encryptSingleContent","device","deviceType","encryptText","encryptedMetadata","getContents","params","contentsLimit","numberContentsPerPageForGet","Page","getChannel","getChannels","reject","Error","ping","processActivityEvent","message","decryptionPromise","envelope","decryptedData","register","data","registerToShareMercury","feature","getFeature","isSharingMercuryFeatureEnabled","mercury","localClusterServiceUrls","webSocketUrl","mercuryConnectionServiceClusterUrl","action","unregisterFromSharedMercury","binding","contentChunk","encryptBinary","cdata","_uploadImageToWebexFiles","downloadUrl","_getSpaceUrl","requestUri","spaceUrl","length","byteLength","upload","transcode","phases","initialize","$url","session","uploadUrl","finalize","$uri","finishUploadUrl"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\n\nimport {WebexPlugin, Page} from '@webex/webex-core';\nimport promiseSeries from 'es6-promise-series';\nimport {assign, defaults, chunk, pick} from 'lodash';\n\nimport Realtime from './realtime';\n\nconst Board = WebexPlugin.extend({\n namespace: 'Board',\n\n children: {\n realtime: Realtime\n },\n\n /**\n * Adds Content to a Channel\n * If contents length is greater than config.board.numberContentsPerPageForAdd, this method\n * will break contents into chunks and make multiple GET request to the\n * board service\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {Array} contents - Array of {@link Board~Content} objects\n * @returns {Promise<Board~Content>}\n */\n addContent(channel, contents) {\n let chunks = [];\n\n chunks = chunk(contents, this.config.numberContentsPerPageForAdd);\n\n // we want the first promise to resolve before continuing with the next\n // chunk or else we'll have race conditions among patches\n return promiseSeries(chunks.map((part) => this._addContentChunk.bind(this, channel, part)));\n },\n\n /**\n * Adds Image to a Channel\n * Uploads image to webex files and adds SCR + downloadUrl to the persistence\n * service\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {File} image - image to be uploaded\n * @param {Object} metadata - metadata such as displayName\n * @returns {Promise<Board~Content>}\n */\n addImage(channel, image, metadata) {\n return this.webex.internal.board._uploadImage(channel, image)\n .then((scr) => this.webex.internal.board.addContent(channel, [{\n type: 'FILE',\n metadata,\n file: {\n mimeType: image.type,\n scr,\n size: image.size,\n url: scr.loc\n }\n }]));\n },\n\n /**\n * Set a snapshot image for a board\n *\n * @param {Board~Channel} channel\n * @param {File} image\n * @returns {Promise<Board~Channel>}\n */\n setSnapshotImage(channel, image) {\n let imageScr;\n\n return this.webex.internal.board._uploadImage(channel, image, {hiddenSpace: true})\n .then((scr) => {\n imageScr = scr;\n\n return this.webex.internal.encryption.encryptScr(channel.defaultEncryptionKeyUrl, imageScr);\n })\n .then((encryptedScr) => {\n imageScr.encryptedScr = encryptedScr;\n\n return encryptedScr;\n })\n .then(() => {\n const imageBody = {\n image: {\n url: imageScr.loc,\n height: image.height || 900,\n width: image.width || 1600,\n mimeType: image.type || 'image/png',\n scr: imageScr.encryptedScr,\n encryptionKeyUrl: channel.defaultEncryptionKeyUrl,\n fileSize: image.size\n }\n };\n\n return this.webex.request({\n method: 'PATCH',\n uri: channel.channelUrl,\n body: imageBody\n });\n })\n .then((res) => res.body);\n },\n\n /**\n * Creates a Channel\n * @memberof Board.BoardService\n * @param {Conversation~ConversationObject} conversation\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Channel>}\n */\n createChannel(conversation, channel) {\n return this.webex.request({\n method: 'POST',\n api: 'board',\n resource: '/channels',\n body: this._prepareChannel(conversation, channel)\n })\n .then((res) => res.body);\n },\n\n _prepareChannel(conversation, channel) {\n return Object.assign({\n aclUrlLink: conversation.aclUrl,\n kmsMessage: {\n method: 'create',\n uri: '/resources',\n userIds: [conversation.kmsResourceObjectUrl],\n keyUris: []\n }\n }, channel);\n },\n\n /**\n * Deletes a Channel from a Conversation\n * @memberof Board.BoardService\n * @param {Conversation~ConversationObject} conversation\n * @param {Board~Channel} channel\n * @param {Object} options\n * @param {Object} options.preventDeleteActiveChannel Returns error if channel is in use\n * @returns {Promise}\n */\n deleteChannel(conversation, channel, options = {}) {\n // remove the ACL link between conversation and board\n // remove conversation auth from board KRO in kms message\n const body = {\n aclLinkType: 'INCOMING',\n linkedAcl: conversation.aclUrl,\n kmsMessage: {\n method: 'delete',\n uri: `${channel.kmsResourceUrl}/authorizations?${querystring.stringify({authId: conversation.kmsResourceObjectUrl})}`\n },\n aclLinkOperation: 'DELETE'\n };\n\n let promise = Promise.resolve();\n\n if (options.preventDeleteActiveChannel) {\n promise = this.lockChannelForDeletion(channel);\n }\n\n return promise\n .then(() => this.webex.request({\n method: 'PUT',\n uri: `${channel.aclUrl}/links`,\n body\n }))\n .then((res) => res.body);\n },\n\n /**\n * Locks and marks a channel for deletion\n * If a channel is being used, it will return 409 - Conflict\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n lockChannelForDeletion(channel) {\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/lock`,\n qs: {\n intent: 'delete'\n }\n })\n .then((res) => res.body);\n },\n\n /**\n * Keeps a channel as 'active' to prevent other people from deleting it\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n keepActive(channel) {\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/keepAlive`\n });\n },\n\n /**\n * Decrypts a collection of content objects\n *\n * @memberof Board.BoardService\n * @param {Array} contents curves, text, and images\n * @returns {Promise<Array>} Resolves with an array of {@link Board~Content} objects.\n */\n decryptContents(contents) {\n return Promise.all(contents.items.map((content) => {\n let decryptPromise;\n\n if (content.type === 'FILE') {\n decryptPromise = this.decryptSingleFileContent(content.encryptionKeyUrl, content);\n }\n else {\n decryptPromise = this.decryptSingleContent(content.encryptionKeyUrl, content.payload);\n }\n\n return decryptPromise\n .then((res) => {\n Reflect.deleteProperty(content, 'payload');\n Reflect.deleteProperty(content, 'encryptionKeyUrl');\n\n return defaults(res, content);\n });\n }));\n },\n\n /**\n * Decryts a single STRING content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {string} encryptedData\n * @returns {Promise<Board~Content>}\n */\n decryptSingleContent(encryptionKeyUrl, encryptedData) {\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, encryptedData)\n .then((res) => JSON.parse(res));\n },\n\n /**\n * Decryts a single FILE content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {object} encryptedContent {file, payload}\n * @returns {Promise<Board~Content>}\n */\n decryptSingleFileContent(encryptionKeyUrl, encryptedContent) {\n let metadata;\n\n if (encryptedContent.payload) {\n metadata = encryptedContent.payload;\n }\n\n return this.webex.internal.encryption.decryptScr(encryptionKeyUrl, encryptedContent.file.scr)\n .then((scr) => {\n encryptedContent.file.scr = scr;\n if (metadata) {\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, metadata);\n }\n\n return '';\n })\n .then((decryptedMetadata) => {\n try {\n encryptedContent.metadata = JSON.parse(decryptedMetadata);\n if (encryptedContent.metadata.displayName) {\n encryptedContent.displayName = encryptedContent.metadata.displayName;\n }\n }\n catch (error) {\n encryptedContent.metadata = {};\n }\n\n return encryptedContent;\n });\n },\n\n /**\n * Deletes all Content from a Channel\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise} Resolves with an content response\n */\n deleteAllContent(channel) {\n return this.webex.request({\n method: 'DELETE',\n uri: `${channel.channelUrl}/contents`\n })\n .then((res) => res.body);\n },\n\n /**\n * Deletes Contents from a Channel except the ones listed in contentsToKeep\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {Array<Board~Content>} contentsToKeep Array of board objects (curves, text, and images) with valid contentId (received from server)\n * @returns {Promise} Resolves with an content response\n */\n deletePartialContent(channel, contentsToKeep) {\n const body = contentsToKeep.map((content) => pick(content, 'contentId'));\n\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/contents`,\n body,\n qs: {\n clearBoard: true\n }\n })\n .then((res) => res.body);\n },\n\n /**\n * Encrypts a collection of content\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl channel.defaultEncryptionKeyUrl\n * @param {Array} contents Array of {@link Board~Content} objects. (curves, text, and images)\n * @returns {Promise<Array>} Resolves with an array of encrypted {@link Board~Content} objects.\n */\n encryptContents(encryptionKeyUrl, contents) {\n return Promise.all(contents.map((content) => {\n let encryptionPromise;\n let contentType = 'STRING';\n\n // the existence of an scr will determine if the content is a FILE.\n if (content.file) {\n contentType = 'FILE';\n encryptionPromise = this.encryptSingleFileContent(encryptionKeyUrl, content);\n }\n else {\n encryptionPromise = this.encryptSingleContent(encryptionKeyUrl, content);\n }\n\n return encryptionPromise\n .then((res) => assign({\n device: this.webex.internal.device.deviceType,\n type: contentType,\n encryptionKeyUrl\n },\n pick(res, 'file', 'payload')));\n }));\n },\n\n /**\n * Encrypts a single STRING content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {Board~Content} content\n * @returns {Promise<Board~Content>}\n */\n encryptSingleContent(encryptionKeyUrl, content) {\n return this.webex.internal.encryption.encryptText(encryptionKeyUrl, JSON.stringify(content))\n .then((res) => ({\n payload: res,\n encryptionKeyUrl\n }));\n },\n\n /**\n * Encrypts a single FILE content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {Board~Content} content\n * @returns {Promise<Board~Content>}\n */\n encryptSingleFileContent(encryptionKeyUrl, content) {\n return this.webex.internal.encryption.encryptScr(encryptionKeyUrl, content.file.scr)\n .then((encryptedScr) => {\n content.file.scr = encryptedScr;\n if (content.displayName) {\n content.metadata = assign(content.metadata, {displayName: content.displayName});\n }\n if (content.metadata) {\n return this.webex.internal.encryption.encryptText(encryptionKeyUrl, JSON.stringify(content.metadata))\n .then((encryptedMetadata) => {\n content.metadata = encryptedMetadata;\n });\n }\n\n return content;\n })\n .then(() => ({\n file: content.file,\n payload: content.metadata,\n encryptionKeyUrl\n }));\n },\n\n /**\n * Retrieves contents from a specified channel\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {Object} options\n * @param {Object} options.qs\n * @returns {Promise<Page<Board~Channel>>} Resolves with an array of Content items\n */\n getContents(channel, options) {\n options = options || {};\n\n const params = {\n uri: `${channel.channelUrl}/contents`,\n qs: {\n contentsLimit: this.config.numberContentsPerPageForGet\n }\n };\n\n assign(params.qs, pick(options, 'contentsLimit'));\n\n return this.request(params)\n .then((res) => new Page(res, this.webex));\n },\n\n /**\n * Gets a Channel\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Channel>}\n */\n getChannel(channel) {\n return this.webex.request({\n method: 'GET',\n uri: channel.channelUrl\n })\n .then((res) => res.body);\n },\n\n /**\n * Gets Channels\n * @memberof Board.BoardService\n * @param {Conversation~ConversationObject} conversation\n * @param {Object} options\n * @param {number} options.channelsLimit number of boards to return per page\n * @param {number} options.type type of whiteboard: whiteboard or annotated\n * @returns {Promise<Page<Board~Channel>>} Resolves with an array of Channel items\n */\n getChannels(conversation, options) {\n options = options || {};\n\n if (!conversation) {\n return Promise.reject(new Error('`conversation` is required'));\n }\n\n const params = {\n api: 'board',\n resource: '/channels',\n qs: {\n aclUrlLink: conversation.aclUrl\n }\n };\n\n assign(params.qs, pick(options, 'channelsLimit', 'type'));\n\n return this.request(params)\n .then((res) => new Page(res, this.webex));\n },\n\n /**\n * Pings persistence\n * @memberof Board.BoardService\n * @returns {Promise<Object>} ping response body\n */\n ping() {\n return this.webex.request({\n method: 'GET',\n api: 'board',\n resource: '/ping'\n })\n .then((res) => res.body);\n },\n\n processActivityEvent(message) {\n let decryptionPromise;\n\n if (message.contentType === 'FILE') {\n decryptionPromise = this.decryptSingleFileContent(message.envelope.encryptionKeyUrl, message.payload);\n }\n else {\n decryptionPromise = this.decryptSingleContent(message.envelope.encryptionKeyUrl, message.payload);\n }\n\n return decryptionPromise\n .then((decryptedData) => {\n // call the event handlers\n message.payload = decryptedData;\n\n return message;\n });\n },\n\n /**\n * Registers with Mercury\n * @memberof Board.BoardService\n * @param {Object} data - Mercury bindings\n * @returns {Promise<Board~Registration>}\n */\n register(data) {\n return this.webex.request({\n method: 'POST',\n api: 'board',\n resource: '/registrations',\n body: data\n })\n .then((res) => res.body);\n },\n\n /**\n * Registers with Mercury for sharing web socket\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Registration>}\n */\n registerToShareMercury(channel) {\n return this.webex.internal.feature.getFeature('developer', 'web-shared-mercury')\n .then((isSharingMercuryFeatureEnabled) => {\n if (!this.webex.internal.mercury.localClusterServiceUrls) {\n return Promise.reject(new Error('`localClusterServiceUrls` is not defined, make sure mercury is connected'));\n }\n if (!isSharingMercuryFeatureEnabled) {\n return Promise.reject(new Error('`web-shared-mercury` is not enabled'));\n }\n\n const {webSocketUrl} = this.webex.internal.device;\n const {mercuryConnectionServiceClusterUrl} = this.webex.internal.mercury.localClusterServiceUrls;\n\n const data = {\n mercuryConnectionServiceClusterUrl,\n webSocketUrl,\n action: 'ADD'\n };\n\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/register`,\n body: data\n });\n })\n .then((res) => res.body);\n },\n\n /**\n * Remove board binding from existing mercury connection\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {String} binding - the binding as provided in board registration\n * @returns {Promise<Board~Registration>}\n */\n unregisterFromSharedMercury(channel, binding) {\n const {webSocketUrl} = this.webex.internal.device;\n const data = {\n binding,\n webSocketUrl,\n action: 'REMOVE'\n };\n\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/register`,\n body: data\n })\n .then((res) => res.body);\n },\n\n _addContentChunk(channel, contentChunk) {\n return this.webex.internal.board.encryptContents(channel.defaultEncryptionKeyUrl, contentChunk)\n .then((res) => this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/contents`,\n body: res\n }))\n .then((res) => res.body);\n },\n\n /**\n * Encrypts and uploads image to WebexFiles\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {File} file - File to be uploaded\n * @param {Object} options\n * @param {Object} options.hiddenSpace - true for hidden, false for open space\n * @private\n * @returns {Object} Encrypted Scr and KeyUrl\n */\n _uploadImage(channel, file, options) {\n options = options || {};\n\n return this.webex.internal.encryption.encryptBinary(file)\n .then(({scr, cdata}) => Promise.all([scr, this._uploadImageToWebexFiles(channel, cdata, options.hiddenSpace)]))\n .then(([scr, res]) => assign(scr, {loc: res.downloadUrl}));\n },\n\n _getSpaceUrl(channel, hiddenSpace) {\n let requestUri = `${channel.channelUrl}/spaces/open`;\n\n if (hiddenSpace) {\n requestUri = `${channel.channelUrl}/spaces/hidden`;\n }\n\n return this.webex.request({\n method: 'PUT',\n uri: requestUri\n })\n .then((res) => res.body.spaceUrl);\n },\n\n _uploadImageToWebexFiles(channel, file, hiddenSpace) {\n const fileSize = file.length || file.size || file.byteLength;\n\n return this._getSpaceUrl(channel, hiddenSpace)\n .then((spaceUrl) => this.webex.upload({\n uri: `${spaceUrl}/upload_sessions`,\n file,\n qs: {\n transcode: true\n },\n phases: {\n initialize: {fileSize},\n upload: {\n $url(session) {\n return session.uploadUrl;\n }\n },\n finalize: {\n $uri(session) {\n return session.finishUploadUrl;\n },\n body: {fileSize}\n }\n }\n }));\n }\n});\n\nexport default Board;\n"]}
1
+ {"version":3,"sources":["board.js"],"names":["Board","WebexPlugin","extend","namespace","children","realtime","Realtime","addContent","channel","contents","chunks","config","numberContentsPerPageForAdd","map","part","_addContentChunk","bind","addImage","image","metadata","webex","internal","board","_uploadImage","then","scr","type","file","mimeType","size","url","loc","setSnapshotImage","imageScr","hiddenSpace","encryption","encryptScr","defaultEncryptionKeyUrl","encryptedScr","imageBody","height","width","encryptionKeyUrl","fileSize","request","method","uri","channelUrl","body","res","createChannel","conversation","api","resource","_prepareChannel","aclUrlLink","aclUrl","kmsMessage","userIds","kmsResourceObjectUrl","keyUris","deleteChannel","options","aclLinkType","linkedAcl","kmsResourceUrl","querystring","stringify","authId","aclLinkOperation","promise","resolve","preventDeleteActiveChannel","lockChannelForDeletion","qs","intent","keepActive","decryptContents","all","items","content","decryptPromise","decryptSingleFileContent","decryptSingleContent","payload","encryptedData","decryptText","JSON","parse","encryptedContent","decryptScr","decryptedMetadata","displayName","error","deleteAllContent","deletePartialContent","contentsToKeep","clearBoard","encryptContents","encryptionPromise","contentType","encryptSingleFileContent","encryptSingleContent","device","deviceType","encryptText","encryptedMetadata","getContents","params","contentsLimit","numberContentsPerPageForGet","Page","getChannel","getChannels","reject","Error","ping","processActivityEvent","message","decryptionPromise","envelope","decryptedData","register","data","registerToShareMercury","feature","getFeature","isSharingMercuryFeatureEnabled","mercury","localClusterServiceUrls","webSocketUrl","mercuryConnectionServiceClusterUrl","action","unregisterFromSharedMercury","binding","contentChunk","encryptBinary","cdata","_uploadImageToWebexFiles","downloadUrl","_getSpaceUrl","requestUri","spaceUrl","length","byteLength","upload","transcode","phases","initialize","$url","session","uploadUrl","finalize","$uri","finishUploadUrl","authorizeMediaInjector","kms","prepareRequest","resourceUri","anonymous","wrapped","decryptKmsMessage","kmsResponse","decryptedKmsMessage","authorizations","bearer","undefined","catch","err","unauthorizeMediaInjector","listAuthorizations","kroUri","promises","auth","removeAuthorization","responses"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport querystring from 'querystring';\n\nimport {WebexPlugin, Page} from '@webex/webex-core';\nimport promiseSeries from 'es6-promise-series';\nimport {assign, defaults, chunk, pick} from 'lodash';\n\nimport Realtime from './realtime';\n\nconst Board = WebexPlugin.extend({\n namespace: 'Board',\n\n children: {\n realtime: Realtime\n },\n\n /**\n * Adds Content to a Channel\n * If contents length is greater than config.board.numberContentsPerPageForAdd, this method\n * will break contents into chunks and make multiple GET request to the\n * board service\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {Array} contents - Array of {@link Board~Content} objects\n * @returns {Promise<Board~Content>}\n */\n addContent(channel, contents) {\n let chunks = [];\n\n chunks = chunk(contents, this.config.numberContentsPerPageForAdd);\n\n // we want the first promise to resolve before continuing with the next\n // chunk or else we'll have race conditions among patches\n return promiseSeries(chunks.map((part) => this._addContentChunk.bind(this, channel, part)));\n },\n\n /**\n * Adds Image to a Channel\n * Uploads image to webex files and adds SCR + downloadUrl to the persistence\n * service\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {File} image - image to be uploaded\n * @param {Object} metadata - metadata such as displayName\n * @returns {Promise<Board~Content>}\n */\n addImage(channel, image, metadata) {\n return this.webex.internal.board._uploadImage(channel, image)\n .then((scr) => this.webex.internal.board.addContent(channel, [{\n type: 'FILE',\n metadata,\n file: {\n mimeType: image.type,\n scr,\n size: image.size,\n url: scr.loc\n }\n }]));\n },\n\n /**\n * Set a snapshot image for a board\n *\n * @param {Board~Channel} channel\n * @param {File} image\n * @returns {Promise<Board~Channel>}\n */\n setSnapshotImage(channel, image) {\n let imageScr;\n\n return this.webex.internal.board._uploadImage(channel, image, {hiddenSpace: true})\n .then((scr) => {\n imageScr = scr;\n\n return this.webex.internal.encryption.encryptScr(channel.defaultEncryptionKeyUrl, imageScr);\n })\n .then((encryptedScr) => {\n imageScr.encryptedScr = encryptedScr;\n\n return encryptedScr;\n })\n .then(() => {\n const imageBody = {\n image: {\n url: imageScr.loc,\n height: image.height || 900,\n width: image.width || 1600,\n mimeType: image.type || 'image/png',\n scr: imageScr.encryptedScr,\n encryptionKeyUrl: channel.defaultEncryptionKeyUrl,\n fileSize: image.size\n }\n };\n\n return this.webex.request({\n method: 'PATCH',\n uri: channel.channelUrl,\n body: imageBody\n });\n })\n .then((res) => res.body);\n },\n\n /**\n * Creates a Channel\n * @memberof Board.BoardService\n * @param {Conversation~ConversationObject} conversation\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Channel>}\n */\n createChannel(conversation, channel) {\n return this.webex.request({\n method: 'POST',\n api: 'board',\n resource: '/channels',\n body: this._prepareChannel(conversation, channel)\n })\n .then((res) => res.body);\n },\n\n _prepareChannel(conversation, channel) {\n return Object.assign({\n aclUrlLink: conversation.aclUrl,\n kmsMessage: {\n method: 'create',\n uri: '/resources',\n userIds: [conversation.kmsResourceObjectUrl],\n keyUris: []\n }\n }, channel);\n },\n\n /**\n * Deletes a Channel from a Conversation\n * @memberof Board.BoardService\n * @param {Conversation~ConversationObject} conversation\n * @param {Board~Channel} channel\n * @param {Object} options\n * @param {Object} options.preventDeleteActiveChannel Returns error if channel is in use\n * @returns {Promise}\n */\n deleteChannel(conversation, channel, options = {}) {\n // remove the ACL link between conversation and board\n // remove conversation auth from board KRO in kms message\n const body = {\n aclLinkType: 'INCOMING',\n linkedAcl: conversation.aclUrl,\n kmsMessage: {\n method: 'delete',\n uri: `${channel.kmsResourceUrl}/authorizations?${querystring.stringify({authId: conversation.kmsResourceObjectUrl})}`\n },\n aclLinkOperation: 'DELETE'\n };\n\n let promise = Promise.resolve();\n\n if (options.preventDeleteActiveChannel) {\n promise = this.lockChannelForDeletion(channel);\n }\n\n return promise\n .then(() => this.webex.request({\n method: 'PUT',\n uri: `${channel.aclUrl}/links`,\n body\n }))\n .then((res) => res.body);\n },\n\n /**\n * Locks and marks a channel for deletion\n * If a channel is being used, it will return 409 - Conflict\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n lockChannelForDeletion(channel) {\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/lock`,\n qs: {\n intent: 'delete'\n }\n })\n .then((res) => res.body);\n },\n\n /**\n * Keeps a channel as 'active' to prevent other people from deleting it\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n keepActive(channel) {\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/keepAlive`\n });\n },\n\n /**\n * Decrypts a collection of content objects\n *\n * @memberof Board.BoardService\n * @param {Array} contents curves, text, and images\n * @returns {Promise<Array>} Resolves with an array of {@link Board~Content} objects.\n */\n decryptContents(contents) {\n return Promise.all(contents.items.map((content) => {\n let decryptPromise;\n\n if (content.type === 'FILE') {\n decryptPromise = this.decryptSingleFileContent(content.encryptionKeyUrl, content);\n }\n else {\n decryptPromise = this.decryptSingleContent(content.encryptionKeyUrl, content.payload);\n }\n\n return decryptPromise\n .then((res) => {\n Reflect.deleteProperty(content, 'payload');\n Reflect.deleteProperty(content, 'encryptionKeyUrl');\n\n return defaults(res, content);\n });\n }));\n },\n\n /**\n * Decryts a single STRING content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {string} encryptedData\n * @returns {Promise<Board~Content>}\n */\n decryptSingleContent(encryptionKeyUrl, encryptedData) {\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, encryptedData)\n .then((res) => JSON.parse(res));\n },\n\n /**\n * Decryts a single FILE content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {object} encryptedContent {file, payload}\n * @returns {Promise<Board~Content>}\n */\n decryptSingleFileContent(encryptionKeyUrl, encryptedContent) {\n let metadata;\n\n if (encryptedContent.payload) {\n metadata = encryptedContent.payload;\n }\n\n return this.webex.internal.encryption.decryptScr(encryptionKeyUrl, encryptedContent.file.scr)\n .then((scr) => {\n encryptedContent.file.scr = scr;\n if (metadata) {\n return this.webex.internal.encryption.decryptText(encryptionKeyUrl, metadata);\n }\n\n return '';\n })\n .then((decryptedMetadata) => {\n try {\n encryptedContent.metadata = JSON.parse(decryptedMetadata);\n if (encryptedContent.metadata.displayName) {\n encryptedContent.displayName = encryptedContent.metadata.displayName;\n }\n }\n catch (error) {\n encryptedContent.metadata = {};\n }\n\n return encryptedContent;\n });\n },\n\n /**\n * Deletes all Content from a Channel\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise} Resolves with an content response\n */\n deleteAllContent(channel) {\n return this.webex.request({\n method: 'DELETE',\n uri: `${channel.channelUrl}/contents`\n })\n .then((res) => res.body);\n },\n\n /**\n * Deletes Contents from a Channel except the ones listed in contentsToKeep\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {Array<Board~Content>} contentsToKeep Array of board objects (curves, text, and images) with valid contentId (received from server)\n * @returns {Promise} Resolves with an content response\n */\n deletePartialContent(channel, contentsToKeep) {\n const body = contentsToKeep.map((content) => pick(content, 'contentId'));\n\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/contents`,\n body,\n qs: {\n clearBoard: true\n }\n })\n .then((res) => res.body);\n },\n\n /**\n * Encrypts a collection of content\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl channel.defaultEncryptionKeyUrl\n * @param {Array} contents Array of {@link Board~Content} objects. (curves, text, and images)\n * @returns {Promise<Array>} Resolves with an array of encrypted {@link Board~Content} objects.\n */\n encryptContents(encryptionKeyUrl, contents) {\n return Promise.all(contents.map((content) => {\n let encryptionPromise;\n let contentType = 'STRING';\n\n // the existence of an scr will determine if the content is a FILE.\n if (content.file) {\n contentType = 'FILE';\n encryptionPromise = this.encryptSingleFileContent(encryptionKeyUrl, content);\n }\n else {\n encryptionPromise = this.encryptSingleContent(encryptionKeyUrl, content);\n }\n\n return encryptionPromise\n .then((res) => assign({\n device: this.webex.internal.device.deviceType,\n type: contentType,\n encryptionKeyUrl\n },\n pick(res, 'file', 'payload')));\n }));\n },\n\n /**\n * Encrypts a single STRING content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {Board~Content} content\n * @returns {Promise<Board~Content>}\n */\n encryptSingleContent(encryptionKeyUrl, content) {\n return this.webex.internal.encryption.encryptText(encryptionKeyUrl, JSON.stringify(content))\n .then((res) => ({\n payload: res,\n encryptionKeyUrl\n }));\n },\n\n /**\n * Encrypts a single FILE content object\n * @memberof Board.BoardService\n * @param {string} encryptionKeyUrl\n * @param {Board~Content} content\n * @returns {Promise<Board~Content>}\n */\n encryptSingleFileContent(encryptionKeyUrl, content) {\n return this.webex.internal.encryption.encryptScr(encryptionKeyUrl, content.file.scr)\n .then((encryptedScr) => {\n content.file.scr = encryptedScr;\n if (content.displayName) {\n content.metadata = assign(content.metadata, {displayName: content.displayName});\n }\n if (content.metadata) {\n return this.webex.internal.encryption.encryptText(encryptionKeyUrl, JSON.stringify(content.metadata))\n .then((encryptedMetadata) => {\n content.metadata = encryptedMetadata;\n });\n }\n\n return content;\n })\n .then(() => ({\n file: content.file,\n payload: content.metadata,\n encryptionKeyUrl\n }));\n },\n\n /**\n * Retrieves contents from a specified channel\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {Object} options\n * @param {Object} options.qs\n * @returns {Promise<Page<Board~Channel>>} Resolves with an array of Content items\n */\n getContents(channel, options) {\n options = options || {};\n\n const params = {\n uri: `${channel.channelUrl}/contents`,\n qs: {\n contentsLimit: this.config.numberContentsPerPageForGet\n }\n };\n\n assign(params.qs, pick(options, 'contentsLimit'));\n\n return this.request(params)\n .then((res) => new Page(res, this.webex));\n },\n\n /**\n * Gets a Channel\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Channel>}\n */\n getChannel(channel) {\n return this.webex.request({\n method: 'GET',\n uri: channel.channelUrl\n })\n .then((res) => res.body);\n },\n\n /**\n * Gets Channels\n * @memberof Board.BoardService\n * @param {Conversation~ConversationObject} conversation\n * @param {Object} options\n * @param {number} options.channelsLimit number of boards to return per page\n * @param {number} options.type type of whiteboard: whiteboard or annotated\n * @returns {Promise<Page<Board~Channel>>} Resolves with an array of Channel items\n */\n getChannels(conversation, options) {\n options = options || {};\n\n if (!conversation) {\n return Promise.reject(new Error('`conversation` is required'));\n }\n\n const params = {\n api: 'board',\n resource: '/channels',\n qs: {\n aclUrlLink: conversation.aclUrl\n }\n };\n\n assign(params.qs, pick(options, 'channelsLimit', 'type'));\n\n return this.request(params)\n .then((res) => new Page(res, this.webex));\n },\n\n /**\n * Pings persistence\n * @memberof Board.BoardService\n * @returns {Promise<Object>} ping response body\n */\n ping() {\n return this.webex.request({\n method: 'GET',\n api: 'board',\n resource: '/ping'\n })\n .then((res) => res.body);\n },\n\n processActivityEvent(message) {\n let decryptionPromise;\n\n if (message.contentType === 'FILE') {\n decryptionPromise = this.decryptSingleFileContent(message.envelope.encryptionKeyUrl, message.payload);\n }\n else {\n decryptionPromise = this.decryptSingleContent(message.envelope.encryptionKeyUrl, message.payload);\n }\n\n return decryptionPromise\n .then((decryptedData) => {\n // call the event handlers\n message.payload = decryptedData;\n\n return message;\n });\n },\n\n /**\n * Registers with Mercury\n * @memberof Board.BoardService\n * @param {Object} data - Mercury bindings\n * @returns {Promise<Board~Registration>}\n */\n register(data) {\n return this.webex.request({\n method: 'POST',\n api: 'board',\n resource: '/registrations',\n body: data\n })\n .then((res) => res.body);\n },\n\n /**\n * Registers with Mercury for sharing web socket\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Registration>}\n */\n registerToShareMercury(channel) {\n return this.webex.internal.feature.getFeature('developer', 'web-shared-mercury')\n .then((isSharingMercuryFeatureEnabled) => {\n if (!this.webex.internal.mercury.localClusterServiceUrls) {\n return Promise.reject(new Error('`localClusterServiceUrls` is not defined, make sure mercury is connected'));\n }\n if (!isSharingMercuryFeatureEnabled) {\n return Promise.reject(new Error('`web-shared-mercury` is not enabled'));\n }\n\n const {webSocketUrl} = this.webex.internal.device;\n const {mercuryConnectionServiceClusterUrl} = this.webex.internal.mercury.localClusterServiceUrls;\n\n const data = {\n mercuryConnectionServiceClusterUrl,\n webSocketUrl,\n action: 'ADD'\n };\n\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/register`,\n body: data\n });\n })\n .then((res) => res.body);\n },\n\n /**\n * Remove board binding from existing mercury connection\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {String} binding - the binding as provided in board registration\n * @returns {Promise<Board~Registration>}\n */\n unregisterFromSharedMercury(channel, binding) {\n const {webSocketUrl} = this.webex.internal.device;\n const data = {\n binding,\n webSocketUrl,\n action: 'REMOVE'\n };\n\n return this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/register`,\n body: data\n })\n .then((res) => res.body);\n },\n\n _addContentChunk(channel, contentChunk) {\n return this.webex.internal.board.encryptContents(channel.defaultEncryptionKeyUrl, contentChunk)\n .then((res) => this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/contents`,\n body: res\n }))\n .then((res) => res.body);\n },\n\n /**\n * Encrypts and uploads image to WebexFiles\n * @memberof Board.BoardService\n * @param {Board~Channel} channel\n * @param {File} file - File to be uploaded\n * @param {Object} options\n * @param {Object} options.hiddenSpace - true for hidden, false for open space\n * @private\n * @returns {Object} Encrypted Scr and KeyUrl\n */\n _uploadImage(channel, file, options) {\n options = options || {};\n\n return this.webex.internal.encryption.encryptBinary(file)\n .then(({scr, cdata}) => Promise.all([scr, this._uploadImageToWebexFiles(channel, cdata, options.hiddenSpace)]))\n .then(([scr, res]) => assign(scr, {loc: res.downloadUrl}));\n },\n\n _getSpaceUrl(channel, hiddenSpace) {\n let requestUri = `${channel.channelUrl}/spaces/open`;\n\n if (hiddenSpace) {\n requestUri = `${channel.channelUrl}/spaces/hidden`;\n }\n\n return this.webex.request({\n method: 'PUT',\n uri: requestUri\n })\n .then((res) => res.body.spaceUrl);\n },\n\n _uploadImageToWebexFiles(channel, file, hiddenSpace) {\n const fileSize = file.length || file.size || file.byteLength;\n\n return this._getSpaceUrl(channel, hiddenSpace)\n .then((spaceUrl) => this.webex.upload({\n uri: `${spaceUrl}/upload_sessions`,\n file,\n qs: {\n transcode: true\n },\n phases: {\n initialize: {fileSize},\n upload: {\n $url(session) {\n return session.uploadUrl;\n }\n },\n finalize: {\n $uri(session) {\n return session.finishUploadUrl;\n },\n body: {fileSize}\n }\n }\n }));\n },\n\n /** Authorize transcoder (for sharing whiteboard to mobile)\n *\n * @param {Board~Channel} board\n * @memberof Board.BoardService\n * @returns {String} authorization\n */\n authorizeMediaInjector(board) {\n if (!board) {\n Promise.reject(new Error('#authorizeMediaInjector --> cannot authorize transcoder without board'));\n }\n\n return this.webex.internal.encryption.kms.prepareRequest({\n method: 'create',\n uri: '/authorizations',\n resourceUri: board.kmsResourceUrl,\n anonymous: 1\n })\n .then((request) => this.webex.request({\n uri: `${board.channelUrl}/sharePolicies/transcoder`,\n method: 'PUT',\n body: {kmsMessage: request.wrapped}\n }))\n .then((res) =>\n this.webex.internal.encryption.kms.decryptKmsMessage(res.body.kmsResponse))\n .then((decryptedKmsMessage) => {\n if (decryptedKmsMessage?.authorizations.length > 0) {\n return decryptedKmsMessage.authorizations[0].bearer;\n }\n\n return undefined;\n })\n .catch((err) =>\n /* We want to resolve any errors so that whiteboard share will still work\n * except mobile being able to receive the share\n */\n Promise.resolve(err));\n },\n\n /** Unauthorize transcoder (for stopping whiteboard share to mobile)\n *\n * @param {Board~Channel} board\n * @memberof Board.BoardService\n * @returns {Array} list of authIds removed\n */\n unauthorizeMediaInjector(board) {\n if (!board) {\n Promise.reject(new Error('#unauthorizeMediaInjector --> cannot unauthorize transcoder without board'));\n }\n\n return this.webex.internal.encryption.kms.listAuthorizations({\n kroUri: board.kmsResourceUrl\n }).then((authorizations) => {\n /* Attempt to remove the authorization made from starting whiteboard share\n * Also removing any previous authorizations that were not cleared\n */\n const promises = authorizations.map((auth) => {\n const {authId} = auth;\n\n return this.webex.internal.encryption.kms.removeAuthorization({\n authId,\n kroUri: board.kmsResourceUrl\n })\n .then(() => Promise.resolve(authId))\n .catch((err) =>\n /* We don't want this to error out, otherwise the\n * Promise.all will not process the rest of the request\n */\n Promise.resolve(err));\n });\n\n if (promises.length > 0) {\n return Promise.all(promises).then((responses) => responses);\n }\n\n return Promise.resolve([]);\n });\n }\n});\n\nexport default Board;\n"]}
package/dist/realtime.js CHANGED
@@ -264,7 +264,7 @@ var RealtimeService = _webexCore.WebexPlugin.extend({
264
264
  return _this7.realtimeChannels.remove(channel.channelId);
265
265
  }));
266
266
  },
267
- version: "1.149.0"
267
+ version: "1.150.1"
268
268
  });
269
269
 
270
270
  var _default = RealtimeService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-board",
3
- "version": "1.149.0",
3
+ "version": "1.150.1",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "author": "Greg Hewett <ghewett@cisco.com>",
@@ -18,14 +18,14 @@
18
18
  "dependencies": {
19
19
  "@babel/runtime-corejs2": "^7.14.8",
20
20
  "lodash": "^4.17.21",
21
- "@webex/internal-plugin-mercury": "1.149.0",
22
- "@webex/internal-plugin-encryption": "1.149.0",
23
- "@webex/internal-plugin-conversation": "1.149.0",
24
- "@webex/internal-plugin-feature": "1.149.0",
25
- "@webex/webex-core": "1.149.0",
21
+ "@webex/internal-plugin-mercury": "1.150.1",
22
+ "@webex/internal-plugin-encryption": "1.150.1",
23
+ "@webex/internal-plugin-conversation": "1.150.1",
24
+ "@webex/internal-plugin-feature": "1.150.1",
25
+ "@webex/webex-core": "1.150.1",
26
26
  "es6-promise-series": "^0.2.2",
27
27
  "uuid": "^3.3.2",
28
- "@webex/common": "1.149.0",
28
+ "@webex/common": "1.150.1",
29
29
  "ampersand-collection": "^2.0.2",
30
30
  "envify": "^4.1.0"
31
31
  }
package/src/board.js CHANGED
@@ -630,6 +630,84 @@ const Board = WebexPlugin.extend({
630
630
  }
631
631
  }
632
632
  }));
633
+ },
634
+
635
+ /** Authorize transcoder (for sharing whiteboard to mobile)
636
+ *
637
+ * @param {Board~Channel} board
638
+ * @memberof Board.BoardService
639
+ * @returns {String} authorization
640
+ */
641
+ authorizeMediaInjector(board) {
642
+ if (!board) {
643
+ Promise.reject(new Error('#authorizeMediaInjector --> cannot authorize transcoder without board'));
644
+ }
645
+
646
+ return this.webex.internal.encryption.kms.prepareRequest({
647
+ method: 'create',
648
+ uri: '/authorizations',
649
+ resourceUri: board.kmsResourceUrl,
650
+ anonymous: 1
651
+ })
652
+ .then((request) => this.webex.request({
653
+ uri: `${board.channelUrl}/sharePolicies/transcoder`,
654
+ method: 'PUT',
655
+ body: {kmsMessage: request.wrapped}
656
+ }))
657
+ .then((res) =>
658
+ this.webex.internal.encryption.kms.decryptKmsMessage(res.body.kmsResponse))
659
+ .then((decryptedKmsMessage) => {
660
+ if (decryptedKmsMessage?.authorizations.length > 0) {
661
+ return decryptedKmsMessage.authorizations[0].bearer;
662
+ }
663
+
664
+ return undefined;
665
+ })
666
+ .catch((err) =>
667
+ /* We want to resolve any errors so that whiteboard share will still work
668
+ * except mobile being able to receive the share
669
+ */
670
+ Promise.resolve(err));
671
+ },
672
+
673
+ /** Unauthorize transcoder (for stopping whiteboard share to mobile)
674
+ *
675
+ * @param {Board~Channel} board
676
+ * @memberof Board.BoardService
677
+ * @returns {Array} list of authIds removed
678
+ */
679
+ unauthorizeMediaInjector(board) {
680
+ if (!board) {
681
+ Promise.reject(new Error('#unauthorizeMediaInjector --> cannot unauthorize transcoder without board'));
682
+ }
683
+
684
+ return this.webex.internal.encryption.kms.listAuthorizations({
685
+ kroUri: board.kmsResourceUrl
686
+ }).then((authorizations) => {
687
+ /* Attempt to remove the authorization made from starting whiteboard share
688
+ * Also removing any previous authorizations that were not cleared
689
+ */
690
+ const promises = authorizations.map((auth) => {
691
+ const {authId} = auth;
692
+
693
+ return this.webex.internal.encryption.kms.removeAuthorization({
694
+ authId,
695
+ kroUri: board.kmsResourceUrl
696
+ })
697
+ .then(() => Promise.resolve(authId))
698
+ .catch((err) =>
699
+ /* We don't want this to error out, otherwise the
700
+ * Promise.all will not process the rest of the request
701
+ */
702
+ Promise.resolve(err));
703
+ });
704
+
705
+ if (promises.length > 0) {
706
+ return Promise.all(promises).then((responses) => responses);
707
+ }
708
+
709
+ return Promise.resolve([]);
710
+ });
633
711
  }
634
712
  });
635
713
 
@@ -273,7 +273,16 @@ describe('plugin-board', () => {
273
273
  assert.lengthOf(channelPage, 2);
274
274
  assert.isFalse(channelPage.hasNext());
275
275
  channelsReceived = channelsReceived.concat(channelPage.items);
276
- assert.sameDeepMembers(channelsCreated, channelsReceived);
276
+
277
+ channelsCreated.sort((a, b) => a.createdTime - b.createdTime);
278
+ channelsReceived.sort((a, b) => a.createdTime - b.createdTime);
279
+
280
+ if (channelsCreated.length === channelsReceived.length) {
281
+ channelsReceived.forEach((channel, i) => {
282
+ delete channel.format;
283
+ assert.deepEqual(channel, channelsCreated[i]);
284
+ });
285
+ }
277
286
  });
278
287
  });
279
288
  });
@@ -432,6 +441,7 @@ describe('plugin-board', () => {
432
441
  .then(() => participants[0].webex.internal.board.getContents(channel))
433
442
  .then((page) => {
434
443
  assert.lengthOf(page, 1);
444
+ delete page.items[0].format;
435
445
  assert.deepEqual(page.items[0], contentsToKeep[0]);
436
446
 
437
447
  return page;
@@ -29,6 +29,15 @@ describe('plugin-board', () => {
29
29
  participant.webex = new WebexCore({
30
30
  credentials: {
31
31
  authorization: participant.token
32
+ },
33
+ // NOTE: temp fix so that realtime tests pass
34
+ // Test user catalogue does not include the URL from utc
35
+ config: {
36
+ services: {
37
+ override: {
38
+ 'mercury-test': 'wss://mercury-connection-llm.intb1.ciscospark.com/'
39
+ }
40
+ }
32
41
  }
33
42
  });
34
43