@webex/internal-plugin-board 3.0.0-beta.13 → 3.0.0-beta.15

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/README.md CHANGED
@@ -21,14 +21,12 @@ npm install --save @webex/internal-plugin-board
21
21
  ## Usage
22
22
 
23
23
  ```js
24
-
25
24
  import '@webex/internal-plugin-board';
26
25
 
27
26
  import WebexCore from '@webex/webex-core';
28
27
 
29
28
  const webex = new WebexCore();
30
- webex.internal.board.WHATEVER
31
-
29
+ webex.internal.board.WHATEVER;
32
30
  ```
33
31
 
34
32
  ## Maintainers
package/dist/board.js CHANGED
@@ -1,5 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
4
+
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
+
7
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
8
+
9
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
10
+
11
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
12
+
3
13
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
14
 
5
15
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
@@ -10,8 +20,6 @@ _Object$defineProperty(exports, "__esModule", {
10
20
 
11
21
  exports.default = void 0;
12
22
 
13
- var _assign2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
14
-
15
23
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
24
 
17
25
  var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
@@ -20,13 +28,15 @@ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/
20
28
 
21
29
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
22
30
 
31
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
32
+
23
33
  var _pick2 = _interopRequireDefault(require("lodash/pick"));
24
34
 
25
35
  var _chunk2 = _interopRequireDefault(require("lodash/chunk"));
26
36
 
27
37
  var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
28
38
 
29
- var _assign3 = _interopRequireDefault(require("lodash/assign"));
39
+ var _assign2 = _interopRequireDefault(require("lodash/assign"));
30
40
 
31
41
  var _querystring = _interopRequireDefault(require("querystring"));
32
42
 
@@ -36,9 +46,10 @@ var _es6PromiseSeries = _interopRequireDefault(require("es6-promise-series"));
36
46
 
37
47
  var _realtime = _interopRequireDefault(require("./realtime"));
38
48
 
39
- /*!
40
- * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.
41
- */
49
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
50
+
51
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
52
+
42
53
  var Board = _webexCore.WebexPlugin.extend({
43
54
  namespace: 'Board',
44
55
  children: {
@@ -153,7 +164,7 @@ var Board = _webexCore.WebexPlugin.extend({
153
164
  });
154
165
  },
155
166
  _prepareChannel: function _prepareChannel(conversation, channel) {
156
- return (0, _assign2.default)({
167
+ return _objectSpread({
157
168
  aclUrlLink: conversation.aclUrl,
158
169
  kmsMessage: {
159
170
  method: 'create',
@@ -378,7 +389,7 @@ var Board = _webexCore.WebexPlugin.extend({
378
389
  }
379
390
 
380
391
  return encryptionPromise.then(function (res) {
381
- return (0, _assign3.default)({
392
+ return (0, _assign2.default)({
382
393
  device: _this7.webex.internal.device.deviceType,
383
394
  type: contentType,
384
395
  encryptionKeyUrl: encryptionKeyUrl
@@ -417,7 +428,7 @@ var Board = _webexCore.WebexPlugin.extend({
417
428
  content.file.scr = encryptedScr;
418
429
 
419
430
  if (content.displayName) {
420
- content.metadata = (0, _assign3.default)(content.metadata, {
431
+ content.metadata = (0, _assign2.default)(content.metadata, {
421
432
  displayName: content.displayName
422
433
  });
423
434
  }
@@ -456,7 +467,7 @@ var Board = _webexCore.WebexPlugin.extend({
456
467
  contentsLimit: this.config.numberContentsPerPageForGet
457
468
  }
458
469
  };
459
- (0, _assign3.default)(params.qs, (0, _pick2.default)(options, 'contentsLimit'));
470
+ (0, _assign2.default)(params.qs, (0, _pick2.default)(options, 'contentsLimit'));
460
471
  return this.request(params).then(function (res) {
461
472
  return new _webexCore.Page(res, _this9.webex);
462
473
  });
@@ -502,7 +513,7 @@ var Board = _webexCore.WebexPlugin.extend({
502
513
  aclUrlLink: conversation.aclUrl
503
514
  }
504
515
  };
505
- (0, _assign3.default)(params.qs, (0, _pick2.default)(options, 'channelsLimit', 'type'));
516
+ (0, _assign2.default)(params.qs, (0, _pick2.default)(options, 'channelsLimit', 'type'));
506
517
  return this.request(params).then(function (res) {
507
518
  return new _webexCore.Page(res, _this10.webex);
508
519
  });
@@ -649,7 +660,7 @@ var Board = _webexCore.WebexPlugin.extend({
649
660
  scr = _ref3[0],
650
661
  res = _ref3[1];
651
662
 
652
- return (0, _assign3.default)(scr, {
663
+ return (0, _assign2.default)(scr, {
653
664
  loc: res.downloadUrl
654
665
  });
655
666
  });
@@ -774,8 +785,8 @@ var Board = _webexCore.WebexPlugin.extend({
774
785
  }).catch(function (err) {
775
786
  return (
776
787
  /* We don't want this to error out, otherwise the
777
- * Promise.all will not process the rest of the request
778
- */
788
+ * Promise.all will not process the rest of the request
789
+ */
779
790
  _promise.default.resolve(err)
780
791
  );
781
792
  });
@@ -790,7 +801,7 @@ var Board = _webexCore.WebexPlugin.extend({
790
801
  return _promise.default.resolve([]);
791
802
  });
792
803
  },
793
- version: "3.0.0-beta.13"
804
+ version: "3.0.0-beta.15"
794
805
  });
795
806
 
796
807
  var _default = Board;
package/dist/board.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["Board","WebexPlugin","extend","namespace","children","realtime","Realtime","addContent","channel","contents","chunks","config","numberContentsPerPageForAdd","promiseSeries","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"],"sources":["board.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AAEA;;AACA;;AAGA;;AAVA;AACA;AACA;AAUA,IAAMA,KAAK,GAAGC,sBAAA,CAAYC,MAAZ,CAAmB;EAC/BC,SAAS,EAAE,OADoB;EAG/BC,QAAQ,EAAE;IACRC,QAAQ,EAAEC;EADF,CAHqB;;EAO/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,UAjB+B,sBAiBpBC,OAjBoB,EAiBXC,QAjBW,EAiBD;IAAA;;IAC5B,IAAIC,MAAM,GAAG,EAAb;IAEAA,MAAM,GAAG,qBAAMD,QAAN,EAAgB,KAAKE,MAAL,CAAYC,2BAA5B,CAAT,CAH4B,CAK5B;IACA;;IACA,OAAO,IAAAC,yBAAA,EAAcH,MAAM,CAACI,GAAP,CAAW,UAACC,IAAD;MAAA,OAAU,KAAI,CAACC,gBAAL,CAAsBC,IAAtB,CAA2B,KAA3B,EAAiCT,OAAjC,EAA0CO,IAA1C,CAAV;IAAA,CAAX,CAAd,CAAP;EACD,CAzB8B;;EA2B/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,QArC+B,oBAqCtBV,OArCsB,EAqCbW,KArCa,EAqCNC,QArCM,EAqCI;IAAA;;IACjC,OAAO,KAAKC,KAAL,CAAWC,QAAX,CAAoBC,KAApB,CAA0BC,YAA1B,CAAuChB,OAAvC,EAAgDW,KAAhD,EACJM,IADI,CACC,UAACC,GAAD;MAAA,OAAS,MAAI,CAACL,KAAL,CAAWC,QAAX,CAAoBC,KAApB,CAA0BhB,UAA1B,CAAqCC,OAArC,EAA8C,CAAC;QAC5DmB,IAAI,EAAE,MADsD;QAE5DP,QAAQ,EAARA,QAF4D;QAG5DQ,IAAI,EAAE;UACJC,QAAQ,EAAEV,KAAK,CAACQ,IADZ;UAEJD,GAAG,EAAHA,GAFI;UAGJI,IAAI,EAAEX,KAAK,CAACW,IAHR;UAIJC,GAAG,EAAEL,GAAG,CAACM;QAJL;MAHsD,CAAD,CAA9C,CAAT;IAAA,CADD,CAAP;EAWD,CAjD8B;;EAmD/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,gBA1D+B,4BA0DdzB,OA1Dc,EA0DLW,KA1DK,EA0DE;IAAA;;IAC/B,IAAIe,QAAJ;IAEA,OAAO,KAAKb,KAAL,CAAWC,QAAX,CAAoBC,KAApB,CAA0BC,YAA1B,CAAuChB,OAAvC,EAAgDW,KAAhD,EAAuD;MAACgB,WAAW,EAAE;IAAd,CAAvD,EACJV,IADI,CACC,UAACC,GAAD,EAAS;MACbQ,QAAQ,GAAGR,GAAX;MAEA,OAAO,MAAI,CAACL,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BC,UAA/B,CAA0C7B,OAAO,CAAC8B,uBAAlD,EAA2EJ,QAA3E,CAAP;IACD,CALI,EAMJT,IANI,CAMC,UAACc,YAAD,EAAkB;MACtBL,QAAQ,CAACK,YAAT,GAAwBA,YAAxB;MAEA,OAAOA,YAAP;IACD,CAVI,EAWJd,IAXI,CAWC,YAAM;MACV,IAAMe,SAAS,GAAG;QAChBrB,KAAK,EAAE;UACLY,GAAG,EAAEG,QAAQ,CAACF,GADT;UAELS,MAAM,EAAEtB,KAAK,CAACsB,MAAN,IAAgB,GAFnB;UAGLC,KAAK,EAAEvB,KAAK,CAACuB,KAAN,IAAe,IAHjB;UAILb,QAAQ,EAAEV,KAAK,CAACQ,IAAN,IAAc,WAJnB;UAKLD,GAAG,EAAEQ,QAAQ,CAACK,YALT;UAMLI,gBAAgB,EAAEnC,OAAO,CAAC8B,uBANrB;UAOLM,QAAQ,EAAEzB,KAAK,CAACW;QAPX;MADS,CAAlB;MAYA,OAAO,MAAI,CAACT,KAAL,CAAWwB,OAAX,CAAmB;QACxBC,MAAM,EAAE,OADgB;QAExBC,GAAG,EAAEvC,OAAO,CAACwC,UAFW;QAGxBC,IAAI,EAAET;MAHkB,CAAnB,CAAP;IAKD,CA7BI,EA8BJf,IA9BI,CA8BC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CA9BD,CAAP;EA+BD,CA5F8B;;EA8F/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEE,aArG+B,yBAqGjBC,YArGiB,EAqGH5C,OArGG,EAqGM;IACnC,OAAO,KAAKa,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,MADgB;MAExBO,GAAG,EAAE,OAFmB;MAGxBC,QAAQ,EAAE,WAHc;MAIxBL,IAAI,EAAE,KAAKM,eAAL,CAAqBH,YAArB,EAAmC5C,OAAnC;IAJkB,CAAnB,EAMJiB,IANI,CAMC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAND,CAAP;EAOD,CA7G8B;EA+G/BM,eA/G+B,2BA+GfH,YA/Ge,EA+GD5C,OA/GC,EA+GQ;IACrC,OAAO,sBAAc;MACnBgD,UAAU,EAAEJ,YAAY,CAACK,MADN;MAEnBC,UAAU,EAAE;QACVZ,MAAM,EAAE,QADE;QAEVC,GAAG,EAAE,YAFK;QAGVY,OAAO,EAAE,CAACP,YAAY,CAACQ,oBAAd,CAHC;QAIVC,OAAO,EAAE;MAJC;IAFO,CAAd,EAQJrD,OARI,CAAP;EASD,CAzH8B;;EA2H/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEsD,aApI+B,yBAoIjBV,YApIiB,EAoIH5C,OApIG,EAoIoB;IAAA;;IAAA,IAAduD,OAAc,uEAAJ,EAAI;IACjD;IACA;IACA,IAAMd,IAAI,GAAG;MACXe,WAAW,EAAE,UADF;MAEXC,SAAS,EAAEb,YAAY,CAACK,MAFb;MAGXC,UAAU,EAAE;QACVZ,MAAM,EAAE,QADE;QAEVC,GAAG,YAAKvC,OAAO,CAAC0D,cAAb,6BAA8CC,oBAAA,CAAYC,SAAZ,CAAsB;UAACC,MAAM,EAAEjB,YAAY,CAACQ;QAAtB,CAAtB,CAA9C;MAFO,CAHD;MAOXU,gBAAgB,EAAE;IAPP,CAAb;;IAUA,IAAIC,OAAO,GAAG,iBAAQC,OAAR,EAAd;;IAEA,IAAIT,OAAO,CAACU,0BAAZ,EAAwC;MACtCF,OAAO,GAAG,KAAKG,sBAAL,CAA4BlE,OAA5B,CAAV;IACD;;IAED,OAAO+D,OAAO,CACX9C,IADI,CACC;MAAA,OAAM,MAAI,CAACJ,KAAL,CAAWwB,OAAX,CAAmB;QAC7BC,MAAM,EAAE,KADqB;QAE7BC,GAAG,YAAKvC,OAAO,CAACiD,MAAb,WAF0B;QAG7BR,IAAI,EAAJA;MAH6B,CAAnB,CAAN;IAAA,CADD,EAMJxB,IANI,CAMC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAND,CAAP;EAOD,CA9J8B;;EAgK/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEyB,sBAvK+B,kCAuKRlE,OAvKQ,EAuKC;IAC9B,OAAO,KAAKa,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,MADgB;MAExBC,GAAG,YAAKvC,OAAO,CAACwC,UAAb,UAFqB;MAGxB2B,EAAE,EAAE;QACFC,MAAM,EAAE;MADN;IAHoB,CAAnB,EAOJnD,IAPI,CAOC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAPD,CAAP;EAQD,CAhL8B;;EAkL/B;AACF;AACA;AACA;AACA;EACE4B,UAvL+B,sBAuLpBrE,OAvLoB,EAuLX;IAClB,OAAO,KAAKa,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,MADgB;MAExBC,GAAG,YAAKvC,OAAO,CAACwC,UAAb;IAFqB,CAAnB,CAAP;EAID,CA5L8B;;EA8L/B;AACF;AACA;AACA;AACA;AACA;AACA;EACE8B,eArM+B,2BAqMfrE,QArMe,EAqML;IAAA;;IACxB,OAAO,iBAAQsE,GAAR,CAAYtE,QAAQ,CAACuE,KAAT,CAAelE,GAAf,CAAmB,UAACmE,OAAD,EAAa;MACjD,IAAIC,cAAJ;;MAEA,IAAID,OAAO,CAACtD,IAAR,KAAiB,MAArB,EAA6B;QAC3BuD,cAAc,GAAG,MAAI,CAACC,wBAAL,CAA8BF,OAAO,CAACtC,gBAAtC,EAAwDsC,OAAxD,CAAjB;MACD,CAFD,MAGK;QACHC,cAAc,GAAG,MAAI,CAACE,oBAAL,CAA0BH,OAAO,CAACtC,gBAAlC,EAAoDsC,OAAO,CAACI,OAA5D,CAAjB;MACD;;MAED,OAAOH,cAAc,CAClBzD,IADI,CACC,UAACyB,GAAD,EAAS;QACb,6BAAuB+B,OAAvB,EAAgC,SAAhC;QACA,6BAAuBA,OAAvB,EAAgC,kBAAhC;QAEA,OAAO,wBAAS/B,GAAT,EAAc+B,OAAd,CAAP;MACD,CANI,CAAP;IAOD,CAjBkB,CAAZ,CAAP;EAkBD,CAxN8B;;EA0N/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,oBAjO+B,gCAiOVzC,gBAjOU,EAiOQ2C,aAjOR,EAiOuB;IACpD,OAAO,KAAKjE,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BmD,WAA/B,CAA2C5C,gBAA3C,EAA6D2C,aAA7D,EACJ7D,IADI,CACC,UAACyB,GAAD;MAAA,OAASsC,IAAI,CAACC,KAAL,CAAWvC,GAAX,CAAT;IAAA,CADD,CAAP;EAED,CApO8B;;EAsO/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEiC,wBA7O+B,oCA6ONxC,gBA7OM,EA6OY+C,gBA7OZ,EA6O8B;IAAA;;IAC3D,IAAItE,QAAJ;;IAEA,IAAIsE,gBAAgB,CAACL,OAArB,EAA8B;MAC5BjE,QAAQ,GAAGsE,gBAAgB,CAACL,OAA5B;IACD;;IAED,OAAO,KAAKhE,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BuD,UAA/B,CAA0ChD,gBAA1C,EAA4D+C,gBAAgB,CAAC9D,IAAjB,CAAsBF,GAAlF,EACJD,IADI,CACC,UAACC,GAAD,EAAS;MACbgE,gBAAgB,CAAC9D,IAAjB,CAAsBF,GAAtB,GAA4BA,GAA5B;;MACA,IAAIN,QAAJ,EAAc;QACZ,OAAO,MAAI,CAACC,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BmD,WAA/B,CAA2C5C,gBAA3C,EAA6DvB,QAA7D,CAAP;MACD;;MAED,OAAO,EAAP;IACD,CARI,EASJK,IATI,CASC,UAACmE,iBAAD,EAAuB;MAC3B,IAAI;QACFF,gBAAgB,CAACtE,QAAjB,GAA4BoE,IAAI,CAACC,KAAL,CAAWG,iBAAX,CAA5B;;QACA,IAAIF,gBAAgB,CAACtE,QAAjB,CAA0ByE,WAA9B,EAA2C;UACzCH,gBAAgB,CAACG,WAAjB,GAA+BH,gBAAgB,CAACtE,QAAjB,CAA0ByE,WAAzD;QACD;MACF,CALD,CAMA,OAAOC,KAAP,EAAc;QACZJ,gBAAgB,CAACtE,QAAjB,GAA4B,EAA5B;MACD;;MAED,OAAOsE,gBAAP;IACD,CArBI,CAAP;EAsBD,CA1Q8B;;EA4Q/B;AACF;AACA;AACA;AACA;AACA;EACEK,gBAlR+B,4BAkRdvF,OAlRc,EAkRL;IACxB,OAAO,KAAKa,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,QADgB;MAExBC,GAAG,YAAKvC,OAAO,CAACwC,UAAb;IAFqB,CAAnB,EAIJvB,IAJI,CAIC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAJD,CAAP;EAKD,CAxR8B;;EA0R/B;AACF;AACA;AACA;AACA;AACA;AACA;EACE+C,oBAjS+B,gCAiSVxF,OAjSU,EAiSDyF,cAjSC,EAiSe;IAC5C,IAAMhD,IAAI,GAAGgD,cAAc,CAACnF,GAAf,CAAmB,UAACmE,OAAD;MAAA,OAAa,oBAAKA,OAAL,EAAc,WAAd,CAAb;IAAA,CAAnB,CAAb;IAEA,OAAO,KAAK5D,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,MADgB;MAExBC,GAAG,YAAKvC,OAAO,CAACwC,UAAb,cAFqB;MAGxBC,IAAI,EAAJA,IAHwB;MAIxB0B,EAAE,EAAE;QACFuB,UAAU,EAAE;MADV;IAJoB,CAAnB,EAQJzE,IARI,CAQC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CARD,CAAP;EASD,CA7S8B;;EA+S/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEkD,eAtT+B,2BAsTfxD,gBAtTe,EAsTGlC,QAtTH,EAsTa;IAAA;;IAC1C,OAAO,iBAAQsE,GAAR,CAAYtE,QAAQ,CAACK,GAAT,CAAa,UAACmE,OAAD,EAAa;MAC3C,IAAImB,iBAAJ;MACA,IAAIC,WAAW,GAAG,QAAlB,CAF2C,CAI3C;;MACA,IAAIpB,OAAO,CAACrD,IAAZ,EAAkB;QAChByE,WAAW,GAAG,MAAd;QACAD,iBAAiB,GAAG,MAAI,CAACE,wBAAL,CAA8B3D,gBAA9B,EAAgDsC,OAAhD,CAApB;MACD,CAHD,MAIK;QACHmB,iBAAiB,GAAG,MAAI,CAACG,oBAAL,CAA0B5D,gBAA1B,EAA4CsC,OAA5C,CAApB;MACD;;MAED,OAAOmB,iBAAiB,CACrB3E,IADI,CACC,UAACyB,GAAD;QAAA,OAAS,sBAAO;UACpBsD,MAAM,EAAE,MAAI,CAACnF,KAAL,CAAWC,QAAX,CAAoBkF,MAApB,CAA2BC,UADf;UAEpB9E,IAAI,EAAE0E,WAFc;UAGpB1D,gBAAgB,EAAhBA;QAHoB,CAAP,EAKf,oBAAKO,GAAL,EAAU,MAAV,EAAkB,SAAlB,CALe,CAAT;MAAA,CADD,CAAP;IAOD,CApBkB,CAAZ,CAAP;EAqBD,CA5U8B;;EA8U/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEqD,oBArV+B,gCAqVV5D,gBArVU,EAqVQsC,OArVR,EAqViB;IAC9C,OAAO,KAAK5D,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BsE,WAA/B,CAA2C/D,gBAA3C,EAA6D,wBAAesC,OAAf,CAA7D,EACJxD,IADI,CACC,UAACyB,GAAD;MAAA,OAAU;QACdmC,OAAO,EAAEnC,GADK;QAEdP,gBAAgB,EAAhBA;MAFc,CAAV;IAAA,CADD,CAAP;EAKD,CA3V8B;;EA6V/B;AACF;AACA;AACA;AACA;AACA;AACA;EACE2D,wBApW+B,oCAoWN3D,gBApWM,EAoWYsC,OApWZ,EAoWqB;IAAA;;IAClD,OAAO,KAAK5D,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BC,UAA/B,CAA0CM,gBAA1C,EAA4DsC,OAAO,CAACrD,IAAR,CAAaF,GAAzE,EACJD,IADI,CACC,UAACc,YAAD,EAAkB;MACtB0C,OAAO,CAACrD,IAAR,CAAaF,GAAb,GAAmBa,YAAnB;;MACA,IAAI0C,OAAO,CAACY,WAAZ,EAAyB;QACvBZ,OAAO,CAAC7D,QAAR,GAAmB,sBAAO6D,OAAO,CAAC7D,QAAf,EAAyB;UAACyE,WAAW,EAAEZ,OAAO,CAACY;QAAtB,CAAzB,CAAnB;MACD;;MACD,IAAIZ,OAAO,CAAC7D,QAAZ,EAAsB;QACpB,OAAO,MAAI,CAACC,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BsE,WAA/B,CAA2C/D,gBAA3C,EAA6D,wBAAesC,OAAO,CAAC7D,QAAvB,CAA7D,EACJK,IADI,CACC,UAACkF,iBAAD,EAAuB;UAC3B1B,OAAO,CAAC7D,QAAR,GAAmBuF,iBAAnB;QACD,CAHI,CAAP;MAID;;MAED,OAAO1B,OAAP;IACD,CAdI,EAeJxD,IAfI,CAeC;MAAA,OAAO;QACXG,IAAI,EAAEqD,OAAO,CAACrD,IADH;QAEXyD,OAAO,EAAEJ,OAAO,CAAC7D,QAFN;QAGXuB,gBAAgB,EAAhBA;MAHW,CAAP;IAAA,CAfD,CAAP;EAoBD,CAzX8B;;EA2X/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEiE,WAnY+B,uBAmYnBpG,OAnYmB,EAmYVuD,OAnYU,EAmYD;IAAA;;IAC5BA,OAAO,GAAGA,OAAO,IAAI,EAArB;IAEA,IAAM8C,MAAM,GAAG;MACb9D,GAAG,YAAKvC,OAAO,CAACwC,UAAb,cADU;MAEb2B,EAAE,EAAE;QACFmC,aAAa,EAAE,KAAKnG,MAAL,CAAYoG;MADzB;IAFS,CAAf;IAOA,sBAAOF,MAAM,CAAClC,EAAd,EAAkB,oBAAKZ,OAAL,EAAc,eAAd,CAAlB;IAEA,OAAO,KAAKlB,OAAL,CAAagE,MAAb,EACJpF,IADI,CACC,UAACyB,GAAD;MAAA,OAAS,IAAI8D,eAAJ,CAAS9D,GAAT,EAAc,MAAI,CAAC7B,KAAnB,CAAT;IAAA,CADD,CAAP;EAED,CAjZ8B;;EAmZ/B;AACF;AACA;AACA;AACA;AACA;EACE4F,UAzZ+B,sBAyZpBzG,OAzZoB,EAyZX;IAClB,OAAO,KAAKa,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,KADgB;MAExBC,GAAG,EAAEvC,OAAO,CAACwC;IAFW,CAAnB,EAIJvB,IAJI,CAIC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAJD,CAAP;EAKD,CA/Z8B;;EAia/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEiE,WA1a+B,uBA0anB9D,YA1amB,EA0aLW,OA1aK,EA0aI;IAAA;;IACjCA,OAAO,GAAGA,OAAO,IAAI,EAArB;;IAEA,IAAI,CAACX,YAAL,EAAmB;MACjB,OAAO,iBAAQ+D,MAAR,CAAe,IAAIC,KAAJ,CAAU,4BAAV,CAAf,CAAP;IACD;;IAED,IAAMP,MAAM,GAAG;MACbxD,GAAG,EAAE,OADQ;MAEbC,QAAQ,EAAE,WAFG;MAGbqB,EAAE,EAAE;QACFnB,UAAU,EAAEJ,YAAY,CAACK;MADvB;IAHS,CAAf;IAQA,sBAAOoD,MAAM,CAAClC,EAAd,EAAkB,oBAAKZ,OAAL,EAAc,eAAd,EAA+B,MAA/B,CAAlB;IAEA,OAAO,KAAKlB,OAAL,CAAagE,MAAb,EACJpF,IADI,CACC,UAACyB,GAAD;MAAA,OAAS,IAAI8D,eAAJ,CAAS9D,GAAT,EAAc,OAAI,CAAC7B,KAAnB,CAAT;IAAA,CADD,CAAP;EAED,CA7b8B;;EA+b/B;AACF;AACA;AACA;AACA;EACEgG,IApc+B,kBAocxB;IACL,OAAO,KAAKhG,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,KADgB;MAExBO,GAAG,EAAE,OAFmB;MAGxBC,QAAQ,EAAE;IAHc,CAAnB,EAKJ7B,IALI,CAKC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CALD,CAAP;EAMD,CA3c8B;EA6c/BqE,oBA7c+B,gCA6cVC,OA7cU,EA6cD;IAC5B,IAAIC,iBAAJ;;IAEA,IAAID,OAAO,CAAClB,WAAR,KAAwB,MAA5B,EAAoC;MAClCmB,iBAAiB,GAAG,KAAKrC,wBAAL,CAA8BoC,OAAO,CAACE,QAAR,CAAiB9E,gBAA/C,EAAiE4E,OAAO,CAAClC,OAAzE,CAApB;IACD,CAFD,MAGK;MACHmC,iBAAiB,GAAG,KAAKpC,oBAAL,CAA0BmC,OAAO,CAACE,QAAR,CAAiB9E,gBAA3C,EAA6D4E,OAAO,CAAClC,OAArE,CAApB;IACD;;IAED,OAAOmC,iBAAiB,CACrB/F,IADI,CACC,UAACiG,aAAD,EAAmB;MACvB;MACAH,OAAO,CAAClC,OAAR,GAAkBqC,aAAlB;MAEA,OAAOH,OAAP;IACD,CANI,CAAP;EAOD,CA9d8B;;EAge/B;AACF;AACA;AACA;AACA;AACA;EACEI,QAte+B,oBAsetBC,IAtesB,EAsehB;IACb,OAAO,KAAKvG,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,MADgB;MAExBO,GAAG,EAAE,OAFmB;MAGxBC,QAAQ,EAAE,gBAHc;MAIxBL,IAAI,EAAE2E;IAJkB,CAAnB,EAMJnG,IANI,CAMC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAND,CAAP;EAOD,CA9e8B;;EAgf/B;AACF;AACA;AACA;AACA;AACA;EACE4E,sBAtf+B,kCAsfRrH,OAtfQ,EAsfC;IAAA;;IAC9B,OAAO,KAAKa,KAAL,CAAWC,QAAX,CAAoBwG,OAApB,CAA4BC,UAA5B,CAAuC,WAAvC,EAAoD,oBAApD,EACJtG,IADI,CACC,UAACuG,8BAAD,EAAoC;MACxC,IAAI,CAAC,OAAI,CAAC3G,KAAL,CAAWC,QAAX,CAAoB2G,OAApB,CAA4BC,uBAAjC,EAA0D;QACxD,OAAO,iBAAQf,MAAR,CAAe,IAAIC,KAAJ,CAAU,0EAAV,CAAf,CAAP;MACD;;MACD,IAAI,CAACY,8BAAL,EAAqC;QACnC,OAAO,iBAAQb,MAAR,CAAe,IAAIC,KAAJ,CAAU,qCAAV,CAAf,CAAP;MACD;;MAED,IAAOe,YAAP,GAAuB,OAAI,CAAC9G,KAAL,CAAWC,QAAX,CAAoBkF,MAA3C,CAAO2B,YAAP;MACA,IAAOC,kCAAP,GAA6C,OAAI,CAAC/G,KAAL,CAAWC,QAAX,CAAoB2G,OAApB,CAA4BC,uBAAzE,CAAOE,kCAAP;MAEA,IAAMR,IAAI,GAAG;QACXQ,kCAAkC,EAAlCA,kCADW;QAEXD,YAAY,EAAZA,YAFW;QAGXE,MAAM,EAAE;MAHG,CAAb;MAMA,OAAO,OAAI,CAAChH,KAAL,CAAWwB,OAAX,CAAmB;QACxBC,MAAM,EAAE,MADgB;QAExBC,GAAG,YAAKvC,OAAO,CAACwC,UAAb,cAFqB;QAGxBC,IAAI,EAAE2E;MAHkB,CAAnB,CAAP;IAKD,CAvBI,EAwBJnG,IAxBI,CAwBC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAxBD,CAAP;EAyBD,CAhhB8B;;EAkhB/B;AACF;AACA;AACA;AACA;AACA;AACA;EACEqF,2BAzhB+B,uCAyhBH9H,OAzhBG,EAyhBM+H,OAzhBN,EAyhBe;IAC5C,IAAOJ,YAAP,GAAuB,KAAK9G,KAAL,CAAWC,QAAX,CAAoBkF,MAA3C,CAAO2B,YAAP;IACA,IAAMP,IAAI,GAAG;MACXW,OAAO,EAAPA,OADW;MAEXJ,YAAY,EAAZA,YAFW;MAGXE,MAAM,EAAE;IAHG,CAAb;IAMA,OAAO,KAAKhH,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,MADgB;MAExBC,GAAG,YAAKvC,OAAO,CAACwC,UAAb,cAFqB;MAGxBC,IAAI,EAAE2E;IAHkB,CAAnB,EAKJnG,IALI,CAKC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CALD,CAAP;EAMD,CAviB8B;EAyiB/BjC,gBAziB+B,4BAyiBdR,OAziBc,EAyiBLgI,YAziBK,EAyiBS;IAAA;;IACtC,OAAO,KAAKnH,KAAL,CAAWC,QAAX,CAAoBC,KAApB,CAA0B4E,eAA1B,CAA0C3F,OAAO,CAAC8B,uBAAlD,EAA2EkG,YAA3E,EACJ/G,IADI,CACC,UAACyB,GAAD;MAAA,OAAS,OAAI,CAAC7B,KAAL,CAAWwB,OAAX,CAAmB;QAChCC,MAAM,EAAE,MADwB;QAEhCC,GAAG,YAAKvC,OAAO,CAACwC,UAAb,cAF6B;QAGhCC,IAAI,EAAEC;MAH0B,CAAnB,CAAT;IAAA,CADD,EAMJzB,IANI,CAMC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAb;IAAA,CAND,CAAP;EAOD,CAjjB8B;;EAmjB/B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEzB,YA7jB+B,wBA6jBlBhB,OA7jBkB,EA6jBToB,IA7jBS,EA6jBHmC,OA7jBG,EA6jBM;IAAA;;IACnCA,OAAO,GAAGA,OAAO,IAAI,EAArB;IAEA,OAAO,KAAK1C,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+BqG,aAA/B,CAA6C7G,IAA7C,EACJH,IADI,CACC;MAAA,IAAEC,GAAF,QAAEA,GAAF;MAAA,IAAOgH,KAAP,QAAOA,KAAP;MAAA,OAAkB,iBAAQ3D,GAAR,CAAY,CAACrD,GAAD,EAAM,OAAI,CAACiH,wBAAL,CAA8BnI,OAA9B,EAAuCkI,KAAvC,EAA8C3E,OAAO,CAAC5B,WAAtD,CAAN,CAAZ,CAAlB;IAAA,CADD,EAEJV,IAFI,CAEC;MAAA;MAAA,IAAEC,GAAF;MAAA,IAAOwB,GAAP;;MAAA,OAAgB,sBAAOxB,GAAP,EAAY;QAACM,GAAG,EAAEkB,GAAG,CAAC0F;MAAV,CAAZ,CAAhB;IAAA,CAFD,CAAP;EAGD,CAnkB8B;EAqkB/BC,YArkB+B,wBAqkBlBrI,OArkBkB,EAqkBT2B,WArkBS,EAqkBI;IACjC,IAAI2G,UAAU,aAAMtI,OAAO,CAACwC,UAAd,iBAAd;;IAEA,IAAIb,WAAJ,EAAiB;MACf2G,UAAU,aAAMtI,OAAO,CAACwC,UAAd,mBAAV;IACD;;IAED,OAAO,KAAK3B,KAAL,CAAWwB,OAAX,CAAmB;MACxBC,MAAM,EAAE,KADgB;MAExBC,GAAG,EAAE+F;IAFmB,CAAnB,EAIJrH,IAJI,CAIC,UAACyB,GAAD;MAAA,OAASA,GAAG,CAACD,IAAJ,CAAS8F,QAAlB;IAAA,CAJD,CAAP;EAKD,CAjlB8B;EAmlB/BJ,wBAnlB+B,oCAmlBNnI,OAnlBM,EAmlBGoB,IAnlBH,EAmlBSO,WAnlBT,EAmlBsB;IAAA;;IACnD,IAAMS,QAAQ,GAAGhB,IAAI,CAACoH,MAAL,IAAepH,IAAI,CAACE,IAApB,IAA4BF,IAAI,CAACqH,UAAlD;IAEA,OAAO,KAAKJ,YAAL,CAAkBrI,OAAlB,EAA2B2B,WAA3B,EACJV,IADI,CACC,UAACsH,QAAD;MAAA,OAAc,OAAI,CAAC1H,KAAL,CAAW6H,MAAX,CAAkB;QACpCnG,GAAG,YAAKgG,QAAL,qBADiC;QAEpCnH,IAAI,EAAJA,IAFoC;QAGpC+C,EAAE,EAAE;UACFwE,SAAS,EAAE;QADT,CAHgC;QAMpCC,MAAM,EAAE;UACNC,UAAU,EAAE;YAACzG,QAAQ,EAARA;UAAD,CADN;UAENsG,MAAM,EAAE;YACNI,IADM,gBACDC,OADC,EACQ;cACZ,OAAOA,OAAO,CAACC,SAAf;YACD;UAHK,CAFF;UAONC,QAAQ,EAAE;YACRC,IADQ,gBACHH,OADG,EACM;cACZ,OAAOA,OAAO,CAACI,eAAf;YACD,CAHO;YAIR1G,IAAI,EAAE;cAACL,QAAQ,EAARA;YAAD;UAJE;QAPJ;MAN4B,CAAlB,CAAd;IAAA,CADD,CAAP;EAsBD,CA5mB8B;;EA8mB/B;AACF;AACA;AACA;AACA;AACA;EACEgH,sBApnB+B,kCAonBRrI,KApnBQ,EAonBD;IAAA;;IAC5B,IAAI,CAACA,KAAL,EAAY;MACV,iBAAQ4F,MAAR,CAAe,IAAIC,KAAJ,CAAU,uEAAV,CAAf;IACD;;IAED,OAAO,KAAK/F,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+ByH,GAA/B,CAAmCC,cAAnC,CAAkD;MACvDhH,MAAM,EAAE,QAD+C;MAEvDC,GAAG,EAAE,iBAFkD;MAGvDgH,WAAW,EAAExI,KAAK,CAAC2C,cAHoC;MAIvD8F,SAAS,EAAE;IAJ4C,CAAlD,EAMJvI,IANI,CAMC,UAACoB,OAAD;MAAA,OAAa,OAAI,CAACxB,KAAL,CAAWwB,OAAX,CAAmB;QACpCE,GAAG,YAAKxB,KAAK,CAACyB,UAAX,8BADiC;QAEpCF,MAAM,EAAE,KAF4B;QAGpCG,IAAI,EAAE;UAACS,UAAU,EAAEb,OAAO,CAACoH;QAArB;MAH8B,CAAnB,CAAb;IAAA,CAND,EAWJxI,IAXI,CAWC,UAACyB,GAAD;MAAA,OACJ,OAAI,CAAC7B,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+ByH,GAA/B,CAAmCK,iBAAnC,CAAqDhH,GAAG,CAACD,IAAJ,CAASkH,WAA9D,CADI;IAAA,CAXD,EAaJ1I,IAbI,CAaC,UAAC2I,mBAAD,EAAyB;MAC7B,IAAI,CAAAA,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,YAAAA,mBAAmB,CAAEC,cAArB,CAAoCrB,MAApC,IAA6C,CAAjD,EAAoD;QAClD,OAAOoB,mBAAmB,CAACC,cAApB,CAAmC,CAAnC,EAAsCC,MAA7C;MACD;;MAED,OAAOC,SAAP;IACD,CAnBI,EAoBJC,KApBI,CAoBE,UAACC,GAAD;MAAA;QACP;AACN;AACA;QACQ,iBAAQjG,OAAR,CAAgBiG,GAAhB;MAJK;IAAA,CApBF,CAAP;EAyBD,CAlpB8B;;EAopB/B;AACF;AACA;AACA;AACA;AACA;EACEC,wBA1pB+B,oCA0pBNnJ,KA1pBM,EA0pBC;IAAA;;IAC9B,IAAI,CAACA,KAAL,EAAY;MACV,iBAAQ4F,MAAR,CAAe,IAAIC,KAAJ,CAAU,2EAAV,CAAf;IACD;;IAED,OAAO,KAAK/F,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+ByH,GAA/B,CAAmCc,kBAAnC,CAAsD;MAC3DC,MAAM,EAAErJ,KAAK,CAAC2C;IAD6C,CAAtD,EAEJzC,IAFI,CAEC,UAAC4I,cAAD,EAAoB;MAC1B;AACN;AACA;MACM,IAAMQ,QAAQ,GAAGR,cAAc,CAACvJ,GAAf,CAAmB,UAACgK,IAAD,EAAU;QAC5C,IAAOzG,MAAP,GAAiByG,IAAjB,CAAOzG,MAAP;QAEA,OAAO,OAAI,CAAChD,KAAL,CAAWC,QAAX,CAAoBc,UAApB,CAA+ByH,GAA/B,CAAmCkB,mBAAnC,CAAuD;UAC5D1G,MAAM,EAANA,MAD4D;UAE5DuG,MAAM,EAAErJ,KAAK,CAAC2C;QAF8C,CAAvD,EAIJzC,IAJI,CAIC;UAAA,OAAM,iBAAQ+C,OAAR,CAAgBH,MAAhB,CAAN;QAAA,CAJD,EAKJmG,KALI,CAKE,UAACC,GAAD;UAAA;YACP;AACV;AACA;YACY,iBAAQjG,OAAR,CAAgBiG,GAAhB;UAJK;QAAA,CALF,CAAP;MAUD,CAbgB,CAAjB;;MAeA,IAAII,QAAQ,CAAC7B,MAAT,GAAkB,CAAtB,EAAyB;QACvB,OAAO,iBAAQjE,GAAR,CAAY8F,QAAZ,EAAsBpJ,IAAtB,CAA2B,UAACuJ,SAAD;UAAA,OAAeA,SAAf;QAAA,CAA3B,CAAP;MACD;;MAED,OAAO,iBAAQxG,OAAR,CAAgB,EAAhB,CAAP;IACD,CA1BM,CAAP;EA2BD,CA1rB8B;EAAA;AAAA,CAAnB,CAAd;;eA6rBexE,K"}
1
+ {"version":3,"names":["Board","WebexPlugin","extend","namespace","children","realtime","Realtime","addContent","channel","contents","chunks","config","numberContentsPerPageForAdd","promiseSeries","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"],"sources":["board.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2022 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).then((scr) =>\n this.webex.internal.board.addContent(channel, [\n {\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\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\n ._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\n .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 {\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 /**\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({\n authId: conversation.kmsResourceObjectUrl,\n })}`,\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(() =>\n this.webex.request({\n method: 'PUT',\n uri: `${channel.aclUrl}/links`,\n body,\n })\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\n .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(\n contents.items.map((content) => {\n let decryptPromise;\n\n if (content.type === 'FILE') {\n decryptPromise = this.decryptSingleFileContent(content.encryptionKeyUrl, content);\n } else {\n decryptPromise = this.decryptSingleContent(content.encryptionKeyUrl, content.payload);\n }\n\n return decryptPromise.then((res) => {\n Reflect.deleteProperty(content, 'payload');\n Reflect.deleteProperty(content, 'encryptionKeyUrl');\n\n return defaults(res, content);\n });\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\n .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\n .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 } 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\n .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\n .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(\n 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 } else {\n encryptionPromise = this.encryptSingleContent(encryptionKeyUrl, content);\n }\n\n return encryptionPromise.then((res) =>\n assign(\n {\n device: this.webex.internal.device.deviceType,\n type: contentType,\n encryptionKeyUrl,\n },\n pick(res, 'file', 'payload')\n )\n );\n })\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\n .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\n .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\n .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).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\n .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).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\n .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(\n message.envelope.encryptionKeyUrl,\n message.payload\n );\n } else {\n decryptionPromise = this.decryptSingleContent(\n message.envelope.encryptionKeyUrl,\n message.payload\n );\n }\n\n return decryptionPromise.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\n .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\n .getFeature('developer', 'web-shared-mercury')\n .then((isSharingMercuryFeatureEnabled) => {\n if (!this.webex.internal.mercury.localClusterServiceUrls) {\n return Promise.reject(\n new Error('`localClusterServiceUrls` is not defined, make sure mercury is connected')\n );\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} =\n 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\n .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\n .encryptContents(channel.defaultEncryptionKeyUrl, contentChunk)\n .then((res) =>\n this.webex.request({\n method: 'POST',\n uri: `${channel.channelUrl}/contents`,\n body: res,\n })\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\n .encryptBinary(file)\n .then(({scr, cdata}) =>\n Promise.all([scr, this._uploadImageToWebexFiles(channel, cdata, options.hiddenSpace)])\n )\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\n .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).then((spaceUrl) =>\n 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\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(\n new Error('#authorizeMediaInjector --> cannot authorize transcoder without board')\n );\n }\n\n return this.webex.internal.encryption.kms\n .prepareRequest({\n method: 'create',\n uri: '/authorizations',\n resourceUri: board.kmsResourceUrl,\n anonymous: 1,\n })\n .then((request) =>\n this.webex.request({\n uri: `${board.channelUrl}/sharePolicies/transcoder`,\n method: 'PUT',\n body: {kmsMessage: request.wrapped},\n })\n )\n .then((res) => 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\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(\n new Error('#unauthorizeMediaInjector --> cannot unauthorize transcoder without board')\n );\n }\n\n return this.webex.internal.encryption.kms\n .listAuthorizations({\n kroUri: board.kmsResourceUrl,\n })\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\n .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\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["board","numberContentsPerPageForAdd","numberContentsPerPageForGet","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","mercuryBindingPrefix"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n board: {\n /**\n * Number of contents per batch when adding contents to a channel\n * @type {number}\n */\n numberContentsPerPageForAdd: 150,\n\n /**\n * Number of contents per batch when getting contents from a channel\n * @type {number}\n */\n numberContentsPerPageForGet: 1000,\n\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n\n /**\n * The prefix for board binding when open a new socket connection\n * @type {string}\n */\n mercuryBindingPrefix: 'board.'\n }\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,KAAK,EAAE;IACL;AACJ;AACA;AACA;IACIC,2BAA2B,EAAE,GALxB;;IAOL;AACJ;AACA;AACA;IACIC,2BAA2B,EAAE,IAXxB;;IAaL;AACJ;AACA;AACA;IACIC,YAAY,EAAEC,OAAO,CAACC,GAAR,CAAYC,qBAAZ,IAAqC,KAjB9C;;IAmBL;AACJ;AACA;AACA;IACIC,WAAW,EAAEH,OAAO,CAACC,GAAR,CAAYG,oBAAZ,IAAoC,KAvB5C;;IAyBL;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAEL,OAAO,CAACC,GAAR,CAAYK,yBAAZ,IAAyC,IA9BrD;;IAgCL;AACJ;AACA;AACA;IACIC,oBAAoB,EAAE;EApCjB;AADM,C"}
1
+ {"version":3,"names":["board","numberContentsPerPageForAdd","numberContentsPerPageForGet","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","mercuryBindingPrefix"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n board: {\n /**\n * Number of contents per batch when adding contents to a channel\n * @type {number}\n */\n numberContentsPerPageForAdd: 150,\n\n /**\n * Number of contents per batch when getting contents from a channel\n * @type {number}\n */\n numberContentsPerPageForGet: 1000,\n\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n\n /**\n * The prefix for board binding when open a new socket connection\n * @type {string}\n */\n mercuryBindingPrefix: 'board.',\n },\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,KAAK,EAAE;IACL;AACJ;AACA;AACA;IACIC,2BAA2B,EAAE,GALxB;;IAOL;AACJ;AACA;AACA;IACIC,2BAA2B,EAAE,IAXxB;;IAaL;AACJ;AACA;AACA;IACIC,YAAY,EAAEC,OAAO,CAACC,GAAR,CAAYC,qBAAZ,IAAqC,KAjB9C;;IAmBL;AACJ;AACA;AACA;IACIC,WAAW,EAAEH,OAAO,CAACC,GAAR,CAAYG,oBAAZ,IAAoC,KAvB5C;;IAyBL;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAEL,OAAO,CAACC,GAAR,CAAYK,yBAAZ,IAAyC,IA9BrD;;IAgCL;AACJ;AACA;AACA;IACIC,oBAAoB,EAAE;EApCjB;AADM,C"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerInternalPlugin","Board","config","payloadTransformer","predicates","name","direction","test","ctx","options","body","items","length","resolve","extract","service","webex","internal","services","getServiceFromUrl","uri","transforms","fn","object","board","decryptContents","then","decryptedContents","direciton","encryption","kms","createUnboundKeys","count","keys","key","defaultEncryptionKeyUrl","kmsMessage","keyUris","push","transform"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-feature';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has, get} from 'lodash';\n\nimport Board from './board';\nimport RealtimeChannel from './realtime-channel';\nimport config from './config';\n\nregisterInternalPlugin('board', Board, {\n config,\n payloadTransformer: {\n predicates: [\n {\n name: 'decryptContents',\n direction: 'inbound',\n\n test(ctx, options) {\n // we must have items\n if (!has(options, 'body.items') || options.body.items.length === 0) {\n return Promise.resolve(false);\n }\n\n // we must have a contentId\n if (!get(options, 'body.items[0].contentId')) {\n return Promise.resolve(false);\n }\n\n // we must have a encryptionKeyUrl\n /* istanbul ignore if */\n if (!get(options, 'body.items[0].encryptionKeyUrl')) {\n return Promise.resolve(false);\n }\n\n // we must have a payload or file\n /* istanbul ignore if */\n if (!get(options, 'body.items[0].payload') && !get(options, 'body.items[0].file')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n\n extract(options) {\n return Promise.resolve(options.body);\n }\n },\n {\n name: 'encryptChannel',\n direction: 'outbound',\n\n test(ctx, options) {\n const service = ctx.webex.internal.services.getServiceFromUrl(options.uri);\n\n if (service && service.name === 'board' && has(options, 'body.aclUrlLink')) {\n return Promise.resolve(true);\n }\n\n return Promise.resolve(false);\n },\n\n extract(options) {\n return Promise.resolve(options.body);\n }\n }\n ],\n transforms: [\n {\n name: 'decryptContents',\n direction: 'inbound',\n\n fn(ctx, object) {\n return ctx.webex.internal.board.decryptContents(object)\n .then((decryptedContents) => {\n object.items = decryptedContents;\n });\n }\n },\n {\n name: 'encryptChannel',\n direciton: 'outbound',\n fn(ctx, object) {\n return ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1})\n .then((keys) => {\n const key = keys[0];\n\n object.defaultEncryptionKeyUrl = key.uri;\n object.kmsMessage.keyUris.push(key.uri);\n\n return ctx.transform('encryptKmsMessage', object);\n });\n }\n }\n ]\n }\n});\n\nexport {default} from './board';\nexport {config};\nexport {RealtimeChannel};\n"],"mappings":"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"}
1
+ {"version":3,"names":["registerInternalPlugin","Board","config","payloadTransformer","predicates","name","direction","test","ctx","options","body","items","length","resolve","extract","service","webex","internal","services","getServiceFromUrl","uri","transforms","fn","object","board","decryptContents","then","decryptedContents","direciton","encryption","kms","createUnboundKeys","count","keys","key","defaultEncryptionKeyUrl","kmsMessage","keyUris","push","transform"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-mercury';\nimport '@webex/internal-plugin-encryption';\nimport '@webex/internal-plugin-conversation';\nimport '@webex/internal-plugin-feature';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has, get} from 'lodash';\n\nimport Board from './board';\nimport RealtimeChannel from './realtime-channel';\nimport config from './config';\n\nregisterInternalPlugin('board', Board, {\n config,\n payloadTransformer: {\n predicates: [\n {\n name: 'decryptContents',\n direction: 'inbound',\n\n test(ctx, options) {\n // we must have items\n if (!has(options, 'body.items') || options.body.items.length === 0) {\n return Promise.resolve(false);\n }\n\n // we must have a contentId\n if (!get(options, 'body.items[0].contentId')) {\n return Promise.resolve(false);\n }\n\n // we must have a encryptionKeyUrl\n /* istanbul ignore if */\n if (!get(options, 'body.items[0].encryptionKeyUrl')) {\n return Promise.resolve(false);\n }\n\n // we must have a payload or file\n /* istanbul ignore if */\n if (!get(options, 'body.items[0].payload') && !get(options, 'body.items[0].file')) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n\n extract(options) {\n return Promise.resolve(options.body);\n },\n },\n {\n name: 'encryptChannel',\n direction: 'outbound',\n\n test(ctx, options) {\n const service = ctx.webex.internal.services.getServiceFromUrl(options.uri);\n\n if (service && service.name === 'board' && has(options, 'body.aclUrlLink')) {\n return Promise.resolve(true);\n }\n\n return Promise.resolve(false);\n },\n\n extract(options) {\n return Promise.resolve(options.body);\n },\n },\n ],\n transforms: [\n {\n name: 'decryptContents',\n direction: 'inbound',\n\n fn(ctx, object) {\n return ctx.webex.internal.board.decryptContents(object).then((decryptedContents) => {\n object.items = decryptedContents;\n });\n },\n },\n {\n name: 'encryptChannel',\n direciton: 'outbound',\n fn(ctx, object) {\n return ctx.webex.internal.encryption.kms.createUnboundKeys({count: 1}).then((keys) => {\n const key = keys[0];\n\n object.defaultEncryptionKeyUrl = key.uri;\n object.kmsMessage.keyUris.push(key.uri);\n\n return ctx.transform('encryptKmsMessage', object);\n });\n },\n },\n ],\n },\n});\n\nexport {default} from './board';\nexport {config};\nexport {RealtimeChannel};\n"],"mappings":"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"}
@@ -12,7 +12,7 @@ exports.default = void 0;
12
12
 
13
13
  var _ampersandCollection = _interopRequireDefault(require("ampersand-collection"));
14
14
 
15
- var _realtimeChannel = _interopRequireDefault(require("./realtime-channel.js"));
15
+ var _realtimeChannel = _interopRequireDefault(require("./realtime-channel"));
16
16
 
17
17
  /** !
18
18
  *
@@ -1 +1 @@
1
- {"version":3,"names":["RealtimeChannelCollection","AmpCollection","extend","mainIndex","model","RealtimeChannel","namespace"],"sources":["realtime-channel-collection.js"],"sourcesContent":["/** !\n *\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n * @private\n */\n\nimport AmpCollection from 'ampersand-collection';\n\nimport RealtimeChannel from './realtime-channel.js';\n\nconst RealtimeChannelCollection = AmpCollection.extend({\n mainIndex: 'channelId',\n model: RealtimeChannel,\n\n namespace: 'Board'\n});\n\nexport default RealtimeChannelCollection;\n"],"mappings":";;;;;;;;;;;;AAMA;;AAEA;;AARA;AACA;AACA;AACA;AACA;AAMA,IAAMA,yBAAyB,GAAGC,4BAAA,CAAcC,MAAd,CAAqB;EACrDC,SAAS,EAAE,WAD0C;EAErDC,KAAK,EAAEC,wBAF8C;EAIrDC,SAAS,EAAE;AAJ0C,CAArB,CAAlC;;eAOeN,yB"}
1
+ {"version":3,"names":["RealtimeChannelCollection","AmpCollection","extend","mainIndex","model","RealtimeChannel","namespace"],"sources":["realtime-channel-collection.js"],"sourcesContent":["/** !\n *\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n * @private\n */\n\nimport AmpCollection from 'ampersand-collection';\n\nimport RealtimeChannel from './realtime-channel';\n\nconst RealtimeChannelCollection = AmpCollection.extend({\n mainIndex: 'channelId',\n model: RealtimeChannel,\n\n namespace: 'Board',\n});\n\nexport default RealtimeChannelCollection;\n"],"mappings":";;;;;;;;;;;;AAMA;;AAEA;;AARA;AACA;AACA;AACA;AACA;AAMA,IAAMA,yBAAyB,GAAGC,4BAAA,CAAcC,MAAd,CAAqB;EACrDC,SAAS,EAAE,WAD0C;EAErDC,KAAK,EAAEC,wBAF8C;EAIrDC,SAAS,EAAE;AAJ0C,CAArB,CAAlC;;eAOeN,yB"}
@@ -1 +1 @@
1
- {"version":3,"names":["RealtimeChannel","Mercury","extend","namespace","props","channelId","type","required","socketUrl","binding","session","isSharingMercury","default","socket","send","data"],"sources":["realtime-channel.js"],"sourcesContent":["/** !\n *\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n * @private\n */\n\nimport {Mercury} from '@webex/internal-plugin-mercury';\n\nconst RealtimeChannel = Mercury.extend({\n namespace: 'Board',\n\n props: {\n channelId: {\n type: 'string',\n required: true\n },\n socketUrl: {\n type: 'string'\n },\n binding: {\n type: 'string'\n }\n },\n\n session: {\n isSharingMercury: {\n type: 'boolean',\n default: false\n },\n socket: {\n type: 'object'\n }\n },\n\n send(data) {\n return this.socket.send(data);\n }\n});\n\nexport default RealtimeChannel;\n\n"],"mappings":";;;;;;;;;;AAMA;;AANA;AACA;AACA;AACA;AACA;AAIA,IAAMA,eAAe,GAAGC,8BAAA,CAAQC,MAAR,CAAe;EACrCC,SAAS,EAAE,OAD0B;EAGrCC,KAAK,EAAE;IACLC,SAAS,EAAE;MACTC,IAAI,EAAE,QADG;MAETC,QAAQ,EAAE;IAFD,CADN;IAKLC,SAAS,EAAE;MACTF,IAAI,EAAE;IADG,CALN;IAQLG,OAAO,EAAE;MACPH,IAAI,EAAE;IADC;EARJ,CAH8B;EAgBrCI,OAAO,EAAE;IACPC,gBAAgB,EAAE;MAChBL,IAAI,EAAE,SADU;MAEhBM,OAAO,EAAE;IAFO,CADX;IAKPC,MAAM,EAAE;MACNP,IAAI,EAAE;IADA;EALD,CAhB4B;EA0BrCQ,IA1BqC,gBA0BhCC,IA1BgC,EA0B1B;IACT,OAAO,KAAKF,MAAL,CAAYC,IAAZ,CAAiBC,IAAjB,CAAP;EACD;AA5BoC,CAAf,CAAxB;;eA+Bef,e"}
1
+ {"version":3,"names":["RealtimeChannel","Mercury","extend","namespace","props","channelId","type","required","socketUrl","binding","session","isSharingMercury","default","socket","send","data"],"sources":["realtime-channel.js"],"sourcesContent":["/** !\n *\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n * @private\n */\n\nimport {Mercury} from '@webex/internal-plugin-mercury';\n\nconst RealtimeChannel = Mercury.extend({\n namespace: 'Board',\n\n props: {\n channelId: {\n type: 'string',\n required: true,\n },\n socketUrl: {\n type: 'string',\n },\n binding: {\n type: 'string',\n },\n },\n\n session: {\n isSharingMercury: {\n type: 'boolean',\n default: false,\n },\n socket: {\n type: 'object',\n },\n },\n\n send(data) {\n return this.socket.send(data);\n },\n});\n\nexport default RealtimeChannel;\n"],"mappings":";;;;;;;;;;AAMA;;AANA;AACA;AACA;AACA;AACA;AAIA,IAAMA,eAAe,GAAGC,8BAAA,CAAQC,MAAR,CAAe;EACrCC,SAAS,EAAE,OAD0B;EAGrCC,KAAK,EAAE;IACLC,SAAS,EAAE;MACTC,IAAI,EAAE,QADG;MAETC,QAAQ,EAAE;IAFD,CADN;IAKLC,SAAS,EAAE;MACTF,IAAI,EAAE;IADG,CALN;IAQLG,OAAO,EAAE;MACPH,IAAI,EAAE;IADC;EARJ,CAH8B;EAgBrCI,OAAO,EAAE;IACPC,gBAAgB,EAAE;MAChBL,IAAI,EAAE,SADU;MAEhBM,OAAO,EAAE;IAFO,CADX;IAKPC,MAAM,EAAE;MACNP,IAAI,EAAE;IADA;EALD,CAhB4B;EA0BrCQ,IA1BqC,gBA0BhCC,IA1BgC,EA0B1B;IACT,OAAO,KAAKF,MAAL,CAAYC,IAAZ,CAAiBC,IAAjB,CAAP;EACD;AA5BoC,CAAf,CAAxB;;eA+Bef,e"}
package/dist/realtime.js CHANGED
@@ -18,7 +18,7 @@ var _common = require("@webex/common");
18
18
 
19
19
  var _webexCore = require("@webex/webex-core");
20
20
 
21
- var _realtimeChannelCollection = _interopRequireDefault(require("./realtime-channel-collection.js"));
21
+ var _realtimeChannelCollection = _interopRequireDefault(require("./realtime-channel-collection"));
22
22
 
23
23
  /*!
24
24
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
@@ -36,12 +36,12 @@ var RealtimeService = _webexCore.WebexPlugin.extend({
36
36
  },
37
37
 
38
38
  /**
39
- * Sends the message via the socket. Assumes that the message is already properly formatted
40
- * @memberof Board.RealtimeService
41
- * @param {Board~Channel} channel
42
- * @param {string} message Contains the un-encrypted message to send.
43
- * @returns {Promise<Board~Content>}
44
- */
39
+ * Sends the message via the socket. Assumes that the message is already properly formatted
40
+ * @memberof Board.RealtimeService
41
+ * @param {Board~Channel} channel
42
+ * @param {string} message Contains the un-encrypted message to send.
43
+ * @returns {Promise<Board~Content>}
44
+ */
45
45
  publish: function publish(channel, message) {
46
46
  var _this = this;
47
47
 
@@ -61,15 +61,15 @@ var RealtimeService = _webexCore.WebexPlugin.extend({
61
61
  },
62
62
 
63
63
  /**
64
- * Sends the message via the socket. The message should already have been
65
- * encrypted
66
- * @memberof Board.RealtimeService
67
- * @param {Board~Channel} channel
68
- * @param {object} encryptedPayloadAndKeyUrl
69
- * @param {string} contentType - provides hint for decryption. Defaults to
70
- * `STRING`, and could also be `FILE`
71
- * @returns {Promise<Board~Content>}
72
- */
64
+ * Sends the message via the socket. The message should already have been
65
+ * encrypted
66
+ * @memberof Board.RealtimeService
67
+ * @param {Board~Channel} channel
68
+ * @param {object} encryptedPayloadAndKeyUrl
69
+ * @param {string} contentType - provides hint for decryption. Defaults to
70
+ * `STRING`, and could also be `FILE`
71
+ * @returns {Promise<Board~Content>}
72
+ */
73
73
  publishEncrypted: function publishEncrypted(channel, encryptedPayloadAndKeyUrl, contentType) {
74
74
  var realtimeChannel = this.realtimeChannels.get(channel.channelId);
75
75
 
@@ -127,11 +127,11 @@ var RealtimeService = _webexCore.WebexPlugin.extend({
127
127
  },
128
128
 
129
129
  /**
130
- * Open new mercury connection
131
- * @memberof Board.RealtimeService
132
- * @param {Board~Channel} channel
133
- * @returns {Promise}
134
- */
130
+ * Open new mercury connection
131
+ * @memberof Board.RealtimeService
132
+ * @param {Board~Channel} channel
133
+ * @returns {Promise}
134
+ */
135
135
  connectByOpenNewMercuryConnection: function connectByOpenNewMercuryConnection(channel) {
136
136
  var _this3 = this;
137
137
 
@@ -156,11 +156,11 @@ var RealtimeService = _webexCore.WebexPlugin.extend({
156
156
  },
157
157
 
158
158
  /**
159
- * Disconnect connection
160
- * @memberof Board.RealtimeService
161
- * @param {Board~Channel} channel
162
- * @returns {Promise}
163
- */
159
+ * Disconnect connection
160
+ * @memberof Board.RealtimeService
161
+ * @param {Board~Channel} channel
162
+ * @returns {Promise}
163
+ */
164
164
  disconnectMercuryConnection: function disconnectMercuryConnection(channel) {
165
165
  var _this4 = this;
166
166
 
@@ -264,7 +264,7 @@ var RealtimeService = _webexCore.WebexPlugin.extend({
264
264
  return _this7.realtimeChannels.remove(channel.channelId);
265
265
  }));
266
266
  },
267
- version: "3.0.0-beta.13"
267
+ version: "3.0.0-beta.15"
268
268
  });
269
269
 
270
270
  var _default = RealtimeService;
@@ -1 +1 @@
1
- {"version":3,"names":["RealtimeService","WebexPlugin","extend","namespace","collections","realtimeChannels","RealtimeChannelCollection","publish","channel","message","encryptionPromise","contentType","payload","file","webex","internal","board","encryptSingleFileContent","defaultEncryptionKeyUrl","encryptSingleContent","then","encryptedPayloadAndKeyUrl","publishEncrypted","realtimeChannel","get","channelId","reject","Error","data","id","uuid","v4","type","recipients","alertType","route","binding","headers","eventType","envelope","encryptionKeyUrl","send","createRealtimeChannel","requestBindings","_boardChannelIdToMercuryBinding","bindingObj","bindings","register","webSocketUrl","add","socketUrl","connectByOpenNewMercuryConnection","promise","resolve","logger","info","rc","connect","disconnectMercuryConnection","disconnect","tap","remove","config","mercuryBindingPrefix","replace","connectToSharedMercury","registerToShareMercury","res","sharedWebSocket","isSharingMercury","socket","mercury","off","refreshMercurySocketReference","on","handleBoardActivityMessages","event","_emit","forEach","disconnectFromSharedMercury","connected","unregisterFromSharedMercury"],"sources":["realtime.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport uuid from 'uuid';\nimport {tap} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport RealtimeChannelCollection from './realtime-channel-collection.js';\n\n/**\n * @class\n * @extends {Mercury}\n * @memberof Board\n */\nconst RealtimeService = WebexPlugin.extend({\n namespace: 'Board',\n\n collections: {\n realtimeChannels: RealtimeChannelCollection\n },\n\n /**\n * Sends the message via the socket. Assumes that the message is already properly formatted\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @param {string} message Contains the un-encrypted message to send.\n * @returns {Promise<Board~Content>}\n */\n publish(channel, message) {\n let encryptionPromise;\n let contentType = 'STRING';\n\n if (message.payload.file) {\n contentType = 'FILE';\n encryptionPromise = this.webex.internal.board.encryptSingleFileContent(channel.defaultEncryptionKeyUrl, message.payload);\n }\n else {\n encryptionPromise = this.webex.internal.board.encryptSingleContent(channel.defaultEncryptionKeyUrl, message.payload);\n }\n\n return encryptionPromise\n .then((encryptedPayloadAndKeyUrl) => this.publishEncrypted(channel, encryptedPayloadAndKeyUrl, contentType));\n },\n\n /**\n * Sends the message via the socket. The message should already have been\n * encrypted\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @param {object} encryptedPayloadAndKeyUrl\n * @param {string} contentType - provides hint for decryption. Defaults to\n * `STRING`, and could also be `FILE`\n * @returns {Promise<Board~Content>}\n */\n publishEncrypted(channel, encryptedPayloadAndKeyUrl, contentType) {\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel) {\n return Promise.reject(new Error('Realtime Channel not found'));\n }\n\n const data = {\n id: uuid.v4(),\n type: 'publishRequest',\n recipients: [{\n alertType: 'none',\n route: realtimeChannel.binding,\n headers: {}\n }],\n data: {\n eventType: 'board.activity',\n contentType,\n payload: encryptedPayloadAndKeyUrl.payload,\n envelope: {\n encryptionKeyUrl: encryptedPayloadAndKeyUrl.encryptionKeyUrl,\n channelId: channel.channelId\n }\n }\n };\n\n // provide a hint for decryption\n if (contentType === 'FILE') {\n data.data.payload = {\n file: encryptedPayloadAndKeyUrl.file,\n payload: encryptedPayloadAndKeyUrl.payload\n };\n }\n\n return realtimeChannel.send(data);\n },\n\n createRealtimeChannel(channel) {\n const requestBindings = [this._boardChannelIdToMercuryBinding(channel.channelId)];\n const bindingObj = {bindings: requestBindings};\n\n return this.webex.internal.board.register(bindingObj)\n .then(({webSocketUrl, bindings}) => {\n this.realtimeChannels.add({\n channelId: channel.channelId,\n socketUrl: webSocketUrl,\n binding: bindings[0]\n });\n\n return this.realtimeChannels.get(channel.channelId);\n });\n },\n\n /**\n * Open new mercury connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n connectByOpenNewMercuryConnection(channel) {\n let promise = Promise.resolve();\n let realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel) {\n this.logger.info('board realtime: realtime channel not found, creating new channel');\n promise = this.createRealtimeChannel(channel)\n .then((rc) => {\n realtimeChannel = rc;\n this.logger.info('board realtime: realtime channel created');\n\n return realtimeChannel;\n });\n }\n\n return promise\n .then(() => realtimeChannel.connect(realtimeChannel.socketUrl));\n },\n\n /**\n * Disconnect connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n disconnectMercuryConnection(channel) {\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel) {\n return Promise.reject(new Error('Realtime Channel not found!'));\n }\n\n return realtimeChannel.disconnect()\n // even if we can't remove the channels from the collection, we can still\n // continue on execution\n .then(tap(() => this.realtimeChannels.remove(channel.channelId)));\n },\n\n /**\n * Ensure board channelId is compatible with mercury bindings by replacing\n * '-' with '.' and '_' with '#'\n * @memberof Board.BoardService\n * @param {String} channelId channel.channelId\n * @returns {String} mercury-binding compatible string\n */\n _boardChannelIdToMercuryBinding(channelId) {\n // make channelId mercury compatible replace `-` with `.` and `_` with `#`\n return this.config.mercuryBindingPrefix + channelId.replace(/-/g, '.').replace(/_/g, '#');\n },\n\n /**\n * Connect and use an exisiting mercury connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Registration>}\n */\n connectToSharedMercury(channel) {\n return this.webex.internal.board.registerToShareMercury(channel)\n .then((res) => {\n this.realtimeChannels.add({\n channelId: channel.channelId,\n binding: res.binding,\n socketUrl: res.webSocketUrl\n });\n\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!res.sharedWebSocket) {\n return realtimeChannel.connect(realtimeChannel.socketUrl)\n .then(() => res);\n }\n\n realtimeChannel.isSharingMercury = true;\n realtimeChannel.socket = this.webex.internal.mercury.socket;\n // refresh socket reference when mercury is reconnected\n this.webex.internal.mercury.off('online', this.refreshMercurySocketReference, this);\n this.webex.internal.mercury.on('online', this.refreshMercurySocketReference, this);\n\n // make sure there's only one handler\n this.webex.internal.mercury.off('event:board.activity', this.handleBoardActivityMessages, this);\n this.webex.internal.mercury.on('event:board.activity', this.handleBoardActivityMessages, this);\n\n return res;\n });\n },\n\n handleBoardActivityMessages(event) {\n const realtimeChannel = this.realtimeChannels.get(event.data.envelope.channelId);\n\n if (realtimeChannel) {\n realtimeChannel._emit('event:board.activity', event);\n }\n },\n\n refreshMercurySocketReference() {\n this.realtimeChannels.forEach((realtimeChannel) => {\n realtimeChannel.socket = this.webex.internal.mercury.socket;\n });\n },\n\n /**\n * Remove board binding from existing mercury connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Registration>}\n */\n disconnectFromSharedMercury(channel) {\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel.isSharingMercury && realtimeChannel.socket && realtimeChannel.connected) {\n return this.disconnectMercuryConnection(channel);\n }\n\n return this.webex.internal.board.unregisterFromSharedMercury(channel, realtimeChannel.binding)\n // tap suppress errors but we can still go on if the channel can't be\n // removed from the collection\n .then(tap(() => this.realtimeChannels.remove(channel.channelId)));\n }\n\n});\n\nexport default RealtimeService;\n"],"mappings":"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"}
1
+ {"version":3,"names":["RealtimeService","WebexPlugin","extend","namespace","collections","realtimeChannels","RealtimeChannelCollection","publish","channel","message","encryptionPromise","contentType","payload","file","webex","internal","board","encryptSingleFileContent","defaultEncryptionKeyUrl","encryptSingleContent","then","encryptedPayloadAndKeyUrl","publishEncrypted","realtimeChannel","get","channelId","reject","Error","data","id","uuid","v4","type","recipients","alertType","route","binding","headers","eventType","envelope","encryptionKeyUrl","send","createRealtimeChannel","requestBindings","_boardChannelIdToMercuryBinding","bindingObj","bindings","register","webSocketUrl","add","socketUrl","connectByOpenNewMercuryConnection","promise","resolve","logger","info","rc","connect","disconnectMercuryConnection","disconnect","tap","remove","config","mercuryBindingPrefix","replace","connectToSharedMercury","registerToShareMercury","res","sharedWebSocket","isSharingMercury","socket","mercury","off","refreshMercurySocketReference","on","handleBoardActivityMessages","event","_emit","forEach","disconnectFromSharedMercury","connected","unregisterFromSharedMercury"],"sources":["realtime.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport uuid from 'uuid';\nimport {tap} from '@webex/common';\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport RealtimeChannelCollection from './realtime-channel-collection';\n\n/**\n * @class\n * @extends {Mercury}\n * @memberof Board\n */\nconst RealtimeService = WebexPlugin.extend({\n namespace: 'Board',\n\n collections: {\n realtimeChannels: RealtimeChannelCollection,\n },\n\n /**\n * Sends the message via the socket. Assumes that the message is already properly formatted\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @param {string} message Contains the un-encrypted message to send.\n * @returns {Promise<Board~Content>}\n */\n publish(channel, message) {\n let encryptionPromise;\n let contentType = 'STRING';\n\n if (message.payload.file) {\n contentType = 'FILE';\n encryptionPromise = this.webex.internal.board.encryptSingleFileContent(\n channel.defaultEncryptionKeyUrl,\n message.payload\n );\n } else {\n encryptionPromise = this.webex.internal.board.encryptSingleContent(\n channel.defaultEncryptionKeyUrl,\n message.payload\n );\n }\n\n return encryptionPromise.then((encryptedPayloadAndKeyUrl) =>\n this.publishEncrypted(channel, encryptedPayloadAndKeyUrl, contentType)\n );\n },\n\n /**\n * Sends the message via the socket. The message should already have been\n * encrypted\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @param {object} encryptedPayloadAndKeyUrl\n * @param {string} contentType - provides hint for decryption. Defaults to\n * `STRING`, and could also be `FILE`\n * @returns {Promise<Board~Content>}\n */\n publishEncrypted(channel, encryptedPayloadAndKeyUrl, contentType) {\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel) {\n return Promise.reject(new Error('Realtime Channel not found'));\n }\n\n const data = {\n id: uuid.v4(),\n type: 'publishRequest',\n recipients: [\n {\n alertType: 'none',\n route: realtimeChannel.binding,\n headers: {},\n },\n ],\n data: {\n eventType: 'board.activity',\n contentType,\n payload: encryptedPayloadAndKeyUrl.payload,\n envelope: {\n encryptionKeyUrl: encryptedPayloadAndKeyUrl.encryptionKeyUrl,\n channelId: channel.channelId,\n },\n },\n };\n\n // provide a hint for decryption\n if (contentType === 'FILE') {\n data.data.payload = {\n file: encryptedPayloadAndKeyUrl.file,\n payload: encryptedPayloadAndKeyUrl.payload,\n };\n }\n\n return realtimeChannel.send(data);\n },\n\n createRealtimeChannel(channel) {\n const requestBindings = [this._boardChannelIdToMercuryBinding(channel.channelId)];\n const bindingObj = {bindings: requestBindings};\n\n return this.webex.internal.board.register(bindingObj).then(({webSocketUrl, bindings}) => {\n this.realtimeChannels.add({\n channelId: channel.channelId,\n socketUrl: webSocketUrl,\n binding: bindings[0],\n });\n\n return this.realtimeChannels.get(channel.channelId);\n });\n },\n\n /**\n * Open new mercury connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n connectByOpenNewMercuryConnection(channel) {\n let promise = Promise.resolve();\n let realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel) {\n this.logger.info('board realtime: realtime channel not found, creating new channel');\n promise = this.createRealtimeChannel(channel).then((rc) => {\n realtimeChannel = rc;\n this.logger.info('board realtime: realtime channel created');\n\n return realtimeChannel;\n });\n }\n\n return promise.then(() => realtimeChannel.connect(realtimeChannel.socketUrl));\n },\n\n /**\n * Disconnect connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise}\n */\n disconnectMercuryConnection(channel) {\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel) {\n return Promise.reject(new Error('Realtime Channel not found!'));\n }\n\n return (\n realtimeChannel\n .disconnect()\n // even if we can't remove the channels from the collection, we can still\n // continue on execution\n .then(tap(() => this.realtimeChannels.remove(channel.channelId)))\n );\n },\n\n /**\n * Ensure board channelId is compatible with mercury bindings by replacing\n * '-' with '.' and '_' with '#'\n * @memberof Board.BoardService\n * @param {String} channelId channel.channelId\n * @returns {String} mercury-binding compatible string\n */\n _boardChannelIdToMercuryBinding(channelId) {\n // make channelId mercury compatible replace `-` with `.` and `_` with `#`\n return this.config.mercuryBindingPrefix + channelId.replace(/-/g, '.').replace(/_/g, '#');\n },\n\n /**\n * Connect and use an exisiting mercury connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Registration>}\n */\n connectToSharedMercury(channel) {\n return this.webex.internal.board.registerToShareMercury(channel).then((res) => {\n this.realtimeChannels.add({\n channelId: channel.channelId,\n binding: res.binding,\n socketUrl: res.webSocketUrl,\n });\n\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!res.sharedWebSocket) {\n return realtimeChannel.connect(realtimeChannel.socketUrl).then(() => res);\n }\n\n realtimeChannel.isSharingMercury = true;\n realtimeChannel.socket = this.webex.internal.mercury.socket;\n // refresh socket reference when mercury is reconnected\n this.webex.internal.mercury.off('online', this.refreshMercurySocketReference, this);\n this.webex.internal.mercury.on('online', this.refreshMercurySocketReference, this);\n\n // make sure there's only one handler\n this.webex.internal.mercury.off(\n 'event:board.activity',\n this.handleBoardActivityMessages,\n this\n );\n this.webex.internal.mercury.on(\n 'event:board.activity',\n this.handleBoardActivityMessages,\n this\n );\n\n return res;\n });\n },\n\n handleBoardActivityMessages(event) {\n const realtimeChannel = this.realtimeChannels.get(event.data.envelope.channelId);\n\n if (realtimeChannel) {\n realtimeChannel._emit('event:board.activity', event);\n }\n },\n\n refreshMercurySocketReference() {\n this.realtimeChannels.forEach((realtimeChannel) => {\n realtimeChannel.socket = this.webex.internal.mercury.socket;\n });\n },\n\n /**\n * Remove board binding from existing mercury connection\n * @memberof Board.RealtimeService\n * @param {Board~Channel} channel\n * @returns {Promise<Board~Registration>}\n */\n disconnectFromSharedMercury(channel) {\n const realtimeChannel = this.realtimeChannels.get(channel.channelId);\n\n if (!realtimeChannel.isSharingMercury && realtimeChannel.socket && realtimeChannel.connected) {\n return this.disconnectMercuryConnection(channel);\n }\n\n return (\n this.webex.internal.board\n .unregisterFromSharedMercury(channel, realtimeChannel.binding)\n // tap suppress errors but we can still go on if the channel can't be\n // removed from the collection\n .then(tap(() => this.realtimeChannels.remove(channel.channelId)))\n );\n },\n});\n\nexport default RealtimeService;\n"],"mappings":"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"}