@webex/internal-plugin-board 3.0.0-bnr.5 → 3.0.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +6 -0
- package/babel.config.js +3 -0
- package/dist/board.js +33 -21
- package/dist/board.js.map +1 -1
- package/dist/config.js +1 -2
- package/dist/config.js.map +1 -1
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/realtime-channel-collection.js +1 -2
- package/dist/realtime-channel-collection.js.map +1 -1
- package/dist/realtime-channel.js +1 -2
- package/dist/realtime-channel.js.map +1 -1
- package/dist/realtime.js +2 -3
- package/dist/realtime.js.map +1 -1
- package/jest.config.js +3 -0
- package/package.json +31 -16
- package/process +1 -0
- package/src/board.js +17 -3
- package/test/integration/spec/board.js +16 -10
- package/test/integration/spec/realtime.js +2 -1
- package/test/unit/spec/board.js +51 -26
- package/test/unit/spec/encryption.js +9 -13
- package/dist/types/board.d.ts +0 -2
- package/dist/types/config.d.ts +0 -11
- package/dist/types/index.d.ts +0 -4
- package/dist/types/realtime-channel-collection.d.ts +0 -2
- package/dist/types/realtime-channel.d.ts +0 -2
- package/dist/types/realtime.d.ts +0 -7
package/.eslintrc.js
ADDED
package/babel.config.js
ADDED
package/dist/board.js
CHANGED
|
@@ -16,16 +16,15 @@ var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/cor
|
|
|
16
16
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
17
17
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
|
|
18
18
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
19
|
-
var _pick2 = _interopRequireDefault(require("lodash/pick"));
|
|
20
|
-
var _chunk2 = _interopRequireDefault(require("lodash/chunk"));
|
|
21
|
-
var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
|
|
22
|
-
var _assign2 = _interopRequireDefault(require("lodash/assign"));
|
|
23
19
|
var _querystring = _interopRequireDefault(require("querystring"));
|
|
24
20
|
var _webexCore = require("@webex/webex-core");
|
|
25
21
|
var _es6PromiseSeries = _interopRequireDefault(require("es6-promise-series"));
|
|
22
|
+
var _lodash = require("lodash");
|
|
26
23
|
var _realtime = _interopRequireDefault(require("./realtime"));
|
|
27
|
-
function ownKeys(
|
|
28
|
-
function _objectSpread(
|
|
24
|
+
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
25
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
|
|
26
|
+
* Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.
|
|
27
|
+
*/
|
|
29
28
|
var Board = _webexCore.WebexPlugin.extend({
|
|
30
29
|
namespace: 'Board',
|
|
31
30
|
children: {
|
|
@@ -44,7 +43,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
44
43
|
addContent: function addContent(channel, contents) {
|
|
45
44
|
var _this = this;
|
|
46
45
|
var chunks = [];
|
|
47
|
-
chunks = (0,
|
|
46
|
+
chunks = (0, _lodash.chunk)(contents, this.config.numberContentsPerPageForAdd);
|
|
48
47
|
|
|
49
48
|
// we want the first promise to resolve before continuing with the next
|
|
50
49
|
// chunk or else we'll have race conditions among patches
|
|
@@ -133,16 +132,30 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
133
132
|
return res.body;
|
|
134
133
|
});
|
|
135
134
|
},
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
/**
|
|
136
|
+
* Prepare a create request body to the board services based on the provided
|
|
137
|
+
* conversation and channel.
|
|
138
|
+
*
|
|
139
|
+
* @param {Conversation} conversation - Conversation object.
|
|
140
|
+
* @param {Channel} channel - Channel Object
|
|
141
|
+
* @returns {Object} - Create channel request body.
|
|
142
|
+
*/
|
|
143
|
+
_prepareChannel: function _prepareChannel() {
|
|
144
|
+
var conversation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
145
|
+
var channel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
146
|
+
var results = _objectSpread({
|
|
138
147
|
aclUrlLink: conversation.aclUrl,
|
|
139
148
|
kmsMessage: {
|
|
140
149
|
method: 'create',
|
|
141
150
|
uri: '/resources',
|
|
142
|
-
userIds: [
|
|
151
|
+
userIds: [],
|
|
143
152
|
keyUris: []
|
|
144
153
|
}
|
|
145
154
|
}, channel);
|
|
155
|
+
if (conversation.kmsResourceObjectUrl) {
|
|
156
|
+
results.kmsMessage.userIds.push(conversation.kmsResourceObjectUrl);
|
|
157
|
+
}
|
|
158
|
+
return results;
|
|
146
159
|
},
|
|
147
160
|
/**
|
|
148
161
|
* Deletes a Channel from a Conversation
|
|
@@ -231,7 +244,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
231
244
|
return decryptPromise.then(function (res) {
|
|
232
245
|
(0, _deleteProperty.default)(content, 'payload');
|
|
233
246
|
(0, _deleteProperty.default)(content, 'encryptionKeyUrl');
|
|
234
|
-
return (0,
|
|
247
|
+
return (0, _lodash.defaults)(res, content);
|
|
235
248
|
});
|
|
236
249
|
}));
|
|
237
250
|
},
|
|
@@ -303,7 +316,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
303
316
|
*/
|
|
304
317
|
deletePartialContent: function deletePartialContent(channel, contentsToKeep) {
|
|
305
318
|
var body = contentsToKeep.map(function (content) {
|
|
306
|
-
return (0,
|
|
319
|
+
return (0, _lodash.pick)(content, 'contentId');
|
|
307
320
|
});
|
|
308
321
|
return this.webex.request({
|
|
309
322
|
method: 'POST',
|
|
@@ -337,11 +350,11 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
337
350
|
encryptionPromise = _this7.encryptSingleContent(encryptionKeyUrl, content);
|
|
338
351
|
}
|
|
339
352
|
return encryptionPromise.then(function (res) {
|
|
340
|
-
return (0,
|
|
353
|
+
return (0, _lodash.assign)({
|
|
341
354
|
device: _this7.webex.internal.device.deviceType,
|
|
342
355
|
type: contentType,
|
|
343
356
|
encryptionKeyUrl: encryptionKeyUrl
|
|
344
|
-
}, (0,
|
|
357
|
+
}, (0, _lodash.pick)(res, 'file', 'payload'));
|
|
345
358
|
});
|
|
346
359
|
}));
|
|
347
360
|
},
|
|
@@ -372,7 +385,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
372
385
|
return this.webex.internal.encryption.encryptScr(encryptionKeyUrl, content.file.scr).then(function (encryptedScr) {
|
|
373
386
|
content.file.scr = encryptedScr;
|
|
374
387
|
if (content.displayName) {
|
|
375
|
-
content.metadata = (0,
|
|
388
|
+
content.metadata = (0, _lodash.assign)(content.metadata, {
|
|
376
389
|
displayName: content.displayName
|
|
377
390
|
});
|
|
378
391
|
}
|
|
@@ -407,7 +420,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
407
420
|
contentsLimit: this.config.numberContentsPerPageForGet
|
|
408
421
|
}
|
|
409
422
|
};
|
|
410
|
-
(0,
|
|
423
|
+
(0, _lodash.assign)(params.qs, (0, _lodash.pick)(options, 'contentsLimit'));
|
|
411
424
|
return this.request(params).then(function (res) {
|
|
412
425
|
return new _webexCore.Page(res, _this9.webex);
|
|
413
426
|
});
|
|
@@ -448,7 +461,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
448
461
|
aclUrlLink: conversation.aclUrl
|
|
449
462
|
}
|
|
450
463
|
};
|
|
451
|
-
(0,
|
|
464
|
+
(0, _lodash.assign)(params.qs, (0, _lodash.pick)(options, 'channelsLimit', 'type'));
|
|
452
465
|
return this.request(params).then(function (res) {
|
|
453
466
|
return new _webexCore.Page(res, _this10.webex);
|
|
454
467
|
});
|
|
@@ -582,7 +595,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
582
595
|
var _ref3 = (0, _slicedToArray2.default)(_ref2, 2),
|
|
583
596
|
scr = _ref3[0],
|
|
584
597
|
res = _ref3[1];
|
|
585
|
-
return (0,
|
|
598
|
+
return (0, _lodash.assign)(scr, {
|
|
586
599
|
loc: res.downloadUrl
|
|
587
600
|
});
|
|
588
601
|
});
|
|
@@ -711,8 +724,7 @@ var Board = _webexCore.WebexPlugin.extend({
|
|
|
711
724
|
return _promise.default.resolve([]);
|
|
712
725
|
});
|
|
713
726
|
},
|
|
714
|
-
version: "3.0.0-
|
|
727
|
+
version: "3.0.0-next.2"
|
|
715
728
|
});
|
|
716
|
-
var _default = Board;
|
|
717
|
-
exports.default = _default;
|
|
729
|
+
var _default = exports.default = Board;
|
|
718
730
|
//# sourceMappingURL=board.js.map
|
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).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 *\n * THIS API HAS CHANGED!!! SEE SPARK-412694. NEEDS UPDATING.\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
|
+
{"version":3,"names":["_querystring","_interopRequireDefault","require","_webexCore","_es6PromiseSeries","_lodash","_realtime","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","Board","WebexPlugin","extend","namespace","children","realtime","Realtime","addContent","channel","contents","_this","chunks","chunk","config","numberContentsPerPageForAdd","promiseSeries","map","part","_addContentChunk","bind","addImage","image","metadata","_this2","webex","internal","board","_uploadImage","then","scr","type","file","mimeType","size","url","loc","setSnapshotImage","_this3","imageScr","hiddenSpace","encryption","encryptScr","defaultEncryptionKeyUrl","encryptedScr","imageBody","height","width","encryptionKeyUrl","fileSize","request","method","uri","channelUrl","body","res","createChannel","conversation","api","resource","_prepareChannel","undefined","results","aclUrlLink","aclUrl","kmsMessage","userIds","keyUris","kmsResourceObjectUrl","deleteChannel","_this4","options","aclLinkType","linkedAcl","concat","kmsResourceUrl","querystring","stringify","authId","aclLinkOperation","promise","_promise","resolve","preventDeleteActiveChannel","lockChannelForDeletion","qs","intent","keepActive","decryptContents","_this5","all","items","content","decryptPromise","decryptSingleFileContent","decryptSingleContent","payload","_deleteProperty","defaults","encryptedData","decryptText","JSON","parse","encryptedContent","_this6","decryptScr","decryptedMetadata","displayName","error","deleteAllContent","deletePartialContent","contentsToKeep","pick","clearBoard","encryptContents","_this7","encryptionPromise","contentType","encryptSingleFileContent","encryptSingleContent","assign","device","deviceType","encryptText","_stringify","_this8","encryptedMetadata","getContents","_this9","params","contentsLimit","numberContentsPerPageForGet","Page","getChannel","getChannels","_this10","reject","Error","ping","processActivityEvent","message","decryptionPromise","envelope","decryptedData","register","data","registerToShareMercury","_this11","feature","getFeature","isSharingMercuryFeatureEnabled","mercury","localClusterServiceUrls","webSocketUrl","mercuryConnectionServiceClusterUrl","action","unregisterFromSharedMercury","binding","contentChunk","_this12","_this13","encryptBinary","_ref","cdata","_uploadImageToWebexFiles","_ref2","_ref3","_slicedToArray2","downloadUrl","_getSpaceUrl","requestUri","spaceUrl","_this14","byteLength","upload","transcode","phases","initialize","$url","session","uploadUrl","finalize","$uri","finishUploadUrl","authorizeMediaInjector","_this15","kms","prepareRequest","resourceUri","anonymous","wrapped","decryptKmsMessage","kmsResponse","decryptedKmsMessage","authorizations","bearer","catch","err","unauthorizeMediaInjector","_this16","listAuthorizations","kroUri","promises","auth","removeAuthorization","responses","version","_default","exports"],"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 /**\n * Prepare a create request body to the board services based on the provided\n * conversation and channel.\n *\n * @param {Conversation} conversation - Conversation object.\n * @param {Channel} channel - Channel Object\n * @returns {Object} - Create channel request body.\n */\n _prepareChannel(conversation = {}, channel = {}) {\n const results = {\n aclUrlLink: conversation.aclUrl,\n kmsMessage: {\n method: 'create',\n uri: '/resources',\n userIds: [],\n keyUris: [],\n },\n ...channel,\n };\n\n if (conversation.kmsResourceObjectUrl) {\n results.kmsMessage.userIds.push(conversation.kmsResourceObjectUrl);\n }\n\n return results;\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 *\n * THIS API HAS CHANGED!!! SEE SPARK-412694. NEEDS UPDATING.\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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"}
|
package/dist/config.js
CHANGED
|
@@ -8,7 +8,7 @@ exports.default = void 0;
|
|
|
8
8
|
/*!
|
|
9
9
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
10
10
|
*/
|
|
11
|
-
var _default = {
|
|
11
|
+
var _default = exports.default = {
|
|
12
12
|
board: {
|
|
13
13
|
/**
|
|
14
14
|
* Number of contents per batch when adding contents to a channel
|
|
@@ -43,5 +43,4 @@ var _default = {
|
|
|
43
43
|
mercuryBindingPrefix: 'board.'
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
exports.default = _default;
|
|
47
46
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -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;AAFA,
|
|
1
|
+
{"version":3,"names":["_default","exports","default","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;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,KAAK,EAAE;IACL;AACJ;AACA;AACA;IACIC,2BAA2B,EAAE,GAAG;IAEhC;AACJ;AACA;AACA;IACIC,2BAA2B,EAAE,IAAI;IAEjC;AACJ;AACA;AACA;IACIC,YAAY,EAAEC,OAAO,CAACC,GAAG,CAACC,qBAAqB,IAAI,KAAK;IAExD;AACJ;AACA;AACA;IACIC,WAAW,EAAEH,OAAO,CAACC,GAAG,CAACG,oBAAoB,IAAI,KAAK;IAEtD;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAEL,OAAO,CAACC,GAAG,CAACK,yBAAyB,IAAI,IAAI;IAE9D;AACJ;AACA;AACA;IACIC,oBAAoB,EAAE;EACxB;AACF,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -24,13 +24,12 @@ _Object$defineProperty(exports, "default", {
|
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
27
|
-
var _get2 = _interopRequireDefault(require("lodash/get"));
|
|
28
|
-
var _has2 = _interopRequireDefault(require("lodash/has"));
|
|
29
27
|
require("@webex/internal-plugin-mercury");
|
|
30
28
|
require("@webex/internal-plugin-encryption");
|
|
31
29
|
require("@webex/internal-plugin-conversation");
|
|
32
30
|
require("@webex/internal-plugin-feature");
|
|
33
31
|
var _webexCore = require("@webex/webex-core");
|
|
32
|
+
var _lodash = require("lodash");
|
|
34
33
|
var _board = _interopRequireDefault(require("./board"));
|
|
35
34
|
var _realtimeChannel = _interopRequireDefault(require("./realtime-channel"));
|
|
36
35
|
var _config = _interopRequireDefault(require("./config"));
|
|
@@ -46,24 +45,24 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
46
45
|
direction: 'inbound',
|
|
47
46
|
test: function test(ctx, options) {
|
|
48
47
|
// we must have items
|
|
49
|
-
if (!(0,
|
|
48
|
+
if (!(0, _lodash.has)(options, 'body.items') || options.body.items.length === 0) {
|
|
50
49
|
return _promise.default.resolve(false);
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
// we must have a contentId
|
|
54
|
-
if (!(0,
|
|
53
|
+
if (!(0, _lodash.get)(options, 'body.items[0].contentId')) {
|
|
55
54
|
return _promise.default.resolve(false);
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
// we must have a encryptionKeyUrl
|
|
59
58
|
/* istanbul ignore if */
|
|
60
|
-
if (!(0,
|
|
59
|
+
if (!(0, _lodash.get)(options, 'body.items[0].encryptionKeyUrl')) {
|
|
61
60
|
return _promise.default.resolve(false);
|
|
62
61
|
}
|
|
63
62
|
|
|
64
63
|
// we must have a payload or file
|
|
65
64
|
/* istanbul ignore if */
|
|
66
|
-
if (!(0,
|
|
65
|
+
if (!(0, _lodash.get)(options, 'body.items[0].payload') && !(0, _lodash.get)(options, 'body.items[0].file')) {
|
|
67
66
|
return _promise.default.resolve(false);
|
|
68
67
|
}
|
|
69
68
|
return _promise.default.resolve(true);
|
|
@@ -76,7 +75,7 @@ var _config = _interopRequireDefault(require("./config"));
|
|
|
76
75
|
direction: 'outbound',
|
|
77
76
|
test: function test(ctx, options) {
|
|
78
77
|
var service = ctx.webex.internal.services.getServiceFromUrl(options.uri);
|
|
79
|
-
if (service && service.name === 'board' && (0,
|
|
78
|
+
if (service && service.name === 'board' && (0, _lodash.has)(options, 'body.aclUrlLink')) {
|
|
80
79
|
return _promise.default.resolve(true);
|
|
81
80
|
}
|
|
82
81
|
return _promise.default.resolve(false);
|
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).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":"
|
|
1
|
+
{"version":3,"names":["require","_webexCore","_lodash","_board","_interopRequireDefault","_realtimeChannel","_config","registerInternalPlugin","Board","config","payloadTransformer","predicates","name","direction","test","ctx","options","has","body","items","length","_promise","default","resolve","get","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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"}
|
|
@@ -19,6 +19,5 @@ var RealtimeChannelCollection = _ampersandCollection.default.extend({
|
|
|
19
19
|
model: _realtimeChannel.default,
|
|
20
20
|
namespace: 'Board'
|
|
21
21
|
});
|
|
22
|
-
var _default = RealtimeChannelCollection;
|
|
23
|
-
exports.default = _default;
|
|
22
|
+
var _default = exports.default = RealtimeChannelCollection;
|
|
24
23
|
//# sourceMappingURL=realtime-channel-collection.js.map
|
|
@@ -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';\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,
|
|
1
|
+
{"version":3,"names":["_ampersandCollection","_interopRequireDefault","require","_realtimeChannel","RealtimeChannelCollection","AmpCollection","extend","mainIndex","model","RealtimeChannel","namespace","_default","exports","default"],"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,IAAAA,oBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAF,sBAAA,CAAAC,OAAA;AARA;AACA;AACA;AACA;AACA;;AAMA,IAAME,yBAAyB,GAAGC,4BAAa,CAACC,MAAM,CAAC;EACrDC,SAAS,EAAE,WAAW;EACtBC,KAAK,EAAEC,wBAAe;EAEtBC,SAAS,EAAE;AACb,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEYT,yBAAyB"}
|
package/dist/realtime-channel.js
CHANGED
|
@@ -39,6 +39,5 @@ var RealtimeChannel = _internalPluginMercury.Mercury.extend({
|
|
|
39
39
|
return this.socket.send(data);
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
-
var _default = RealtimeChannel;
|
|
43
|
-
exports.default = _default;
|
|
42
|
+
var _default = exports.default = RealtimeChannel;
|
|
44
43
|
//# sourceMappingURL=realtime-channel.js.map
|
|
@@ -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"],"mappings":";;;;;;;AAMA;AANA;AACA;AACA;AACA;AACA;;AAIA,
|
|
1
|
+
{"version":3,"names":["_internalPluginMercury","require","RealtimeChannel","Mercury","extend","namespace","props","channelId","type","required","socketUrl","binding","session","isSharingMercury","default","socket","send","data","_default","exports"],"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,IAAAA,sBAAA,GAAAC,OAAA;AANA;AACA;AACA;AACA;AACA;;AAIA,IAAMC,eAAe,GAAGC,8BAAO,CAACC,MAAM,CAAC;EACrCC,SAAS,EAAE,OAAO;EAElBC,KAAK,EAAE;IACLC,SAAS,EAAE;MACTC,IAAI,EAAE,QAAQ;MACdC,QAAQ,EAAE;IACZ,CAAC;IACDC,SAAS,EAAE;MACTF,IAAI,EAAE;IACR,CAAC;IACDG,OAAO,EAAE;MACPH,IAAI,EAAE;IACR;EACF,CAAC;EAEDI,OAAO,EAAE;IACPC,gBAAgB,EAAE;MAChBL,IAAI,EAAE,SAAS;MACfM,OAAO,EAAE;IACX,CAAC;IACDC,MAAM,EAAE;MACNP,IAAI,EAAE;IACR;EACF,CAAC;EAEDQ,IAAI,WAAAA,KAACC,IAAI,EAAE;IACT,OAAO,IAAI,CAACF,MAAM,CAACC,IAAI,CAACC,IAAI,CAAC;EAC/B;AACF,CAAC,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAL,OAAA,GAEYZ,eAAe"}
|
package/dist/realtime.js
CHANGED
|
@@ -221,8 +221,7 @@ var RealtimeService = _webexCore.WebexPlugin.extend({
|
|
|
221
221
|
return _this7.realtimeChannels.remove(channel.channelId);
|
|
222
222
|
}));
|
|
223
223
|
},
|
|
224
|
-
version: "3.0.0-
|
|
224
|
+
version: "3.0.0-next.2"
|
|
225
225
|
});
|
|
226
|
-
var _default = RealtimeService;
|
|
227
|
-
exports.default = _default;
|
|
226
|
+
var _default = exports.default = RealtimeService;
|
|
228
227
|
//# sourceMappingURL=realtime.js.map
|
package/dist/realtime.js.map
CHANGED
|
@@ -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';\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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"}
|
|
1
|
+
{"version":3,"names":["_uuid","_interopRequireDefault","require","_common","_webexCore","_realtimeChannelCollection","RealtimeService","WebexPlugin","extend","namespace","collections","realtimeChannels","RealtimeChannelCollection","publish","channel","message","_this","encryptionPromise","contentType","payload","file","webex","internal","board","encryptSingleFileContent","defaultEncryptionKeyUrl","encryptSingleContent","then","encryptedPayloadAndKeyUrl","publishEncrypted","realtimeChannel","get","channelId","_promise","default","reject","Error","data","id","uuid","v4","type","recipients","alertType","route","binding","headers","eventType","envelope","encryptionKeyUrl","send","createRealtimeChannel","_this2","requestBindings","_boardChannelIdToMercuryBinding","bindingObj","bindings","register","_ref","webSocketUrl","add","socketUrl","connectByOpenNewMercuryConnection","_this3","promise","resolve","logger","info","rc","connect","disconnectMercuryConnection","_this4","disconnect","tap","remove","config","mercuryBindingPrefix","replace","connectToSharedMercury","_this5","registerToShareMercury","res","sharedWebSocket","isSharingMercury","socket","mercury","off","refreshMercurySocketReference","on","handleBoardActivityMessages","event","_emit","_this6","forEach","disconnectFromSharedMercury","_this7","connected","unregisterFromSharedMercury","version","_default","exports"],"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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"}
|
package/jest.config.js
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-board",
|
|
3
|
-
"version": "3.0.0-bnr.5",
|
|
4
3
|
"description": "",
|
|
5
4
|
"license": "MIT",
|
|
6
5
|
"author": "Greg Hewett <ghewett@cisco.com>",
|
|
@@ -21,25 +20,41 @@
|
|
|
21
20
|
]
|
|
22
21
|
},
|
|
23
22
|
"devDependencies": {
|
|
24
|
-
"@
|
|
25
|
-
"@webex/
|
|
26
|
-
"@webex/
|
|
27
|
-
"@webex/
|
|
28
|
-
"@webex/
|
|
29
|
-
"@webex/test-helper-
|
|
23
|
+
"@babel/core": "^7.17.10",
|
|
24
|
+
"@webex/babel-config-legacy": "0.0.0",
|
|
25
|
+
"@webex/eslint-config-legacy": "0.0.0",
|
|
26
|
+
"@webex/jest-config-legacy": "0.0.0",
|
|
27
|
+
"@webex/legacy-tools": "0.0.0",
|
|
28
|
+
"@webex/test-helper-chai": "3.0.0-next.2",
|
|
29
|
+
"@webex/test-helper-file": "3.0.0-next.2",
|
|
30
|
+
"@webex/test-helper-mocha": "3.0.0-next.2",
|
|
31
|
+
"@webex/test-helper-mock-web-socket": "3.0.0-next.2",
|
|
32
|
+
"@webex/test-helper-mock-webex": "3.0.0-next.2",
|
|
33
|
+
"@webex/test-helper-test-users": "3.0.0-next.2",
|
|
34
|
+
"eslint": "^8.24.0",
|
|
35
|
+
"prettier": "^2.7.1",
|
|
30
36
|
"sinon": "^9.2.4"
|
|
31
37
|
},
|
|
32
38
|
"dependencies": {
|
|
33
|
-
"@webex/common": "3.0.0-
|
|
34
|
-
"@webex/internal-plugin-
|
|
35
|
-
"@webex/internal-plugin-
|
|
36
|
-
"@webex/internal-plugin-
|
|
37
|
-
"@webex/internal-plugin-
|
|
38
|
-
"@webex/
|
|
39
|
-
"@webex/webex-core": "3.0.0-bnr.5",
|
|
39
|
+
"@webex/common": "3.0.0-next.2",
|
|
40
|
+
"@webex/internal-plugin-conversation": "3.0.0-next.2",
|
|
41
|
+
"@webex/internal-plugin-encryption": "3.0.0-next.2",
|
|
42
|
+
"@webex/internal-plugin-feature": "3.0.0-next.2",
|
|
43
|
+
"@webex/internal-plugin-mercury": "3.0.0-next.2",
|
|
44
|
+
"@webex/webex-core": "3.0.0-next.2",
|
|
40
45
|
"ampersand-collection": "^2.0.2",
|
|
41
46
|
"es6-promise-series": "^0.2.2",
|
|
42
47
|
"lodash": "^4.17.21",
|
|
43
48
|
"uuid": "^3.3.2"
|
|
44
|
-
}
|
|
45
|
-
|
|
49
|
+
},
|
|
50
|
+
"scripts": {
|
|
51
|
+
"build": "yarn build:src",
|
|
52
|
+
"build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
|
|
53
|
+
"deploy:npm": "yarn npm publish",
|
|
54
|
+
"test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
|
|
55
|
+
"test:browser": "webex-legacy-tools test --integration --runner karma",
|
|
56
|
+
"test:style": "eslint ./src/**/*.*",
|
|
57
|
+
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
58
|
+
},
|
|
59
|
+
"version": "3.0.0-next.2"
|
|
60
|
+
}
|
package/process
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = {browser: true};
|
package/src/board.js
CHANGED
|
@@ -126,17 +126,31 @@ const Board = WebexPlugin.extend({
|
|
|
126
126
|
.then((res) => res.body);
|
|
127
127
|
},
|
|
128
128
|
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Prepare a create request body to the board services based on the provided
|
|
131
|
+
* conversation and channel.
|
|
132
|
+
*
|
|
133
|
+
* @param {Conversation} conversation - Conversation object.
|
|
134
|
+
* @param {Channel} channel - Channel Object
|
|
135
|
+
* @returns {Object} - Create channel request body.
|
|
136
|
+
*/
|
|
137
|
+
_prepareChannel(conversation = {}, channel = {}) {
|
|
138
|
+
const results = {
|
|
131
139
|
aclUrlLink: conversation.aclUrl,
|
|
132
140
|
kmsMessage: {
|
|
133
141
|
method: 'create',
|
|
134
142
|
uri: '/resources',
|
|
135
|
-
userIds: [
|
|
143
|
+
userIds: [],
|
|
136
144
|
keyUris: [],
|
|
137
145
|
},
|
|
138
146
|
...channel,
|
|
139
147
|
};
|
|
148
|
+
|
|
149
|
+
if (conversation.kmsResourceObjectUrl) {
|
|
150
|
+
results.kmsMessage.userIds.push(conversation.kmsResourceObjectUrl);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return results;
|
|
140
154
|
},
|
|
141
155
|
|
|
142
156
|
/**
|
|
@@ -109,7 +109,9 @@ describe('plugin-board', () => {
|
|
|
109
109
|
it('uploads image to webex files', () =>
|
|
110
110
|
participants[0].webex.internal.board
|
|
111
111
|
._uploadImage(board, fixture)
|
|
112
|
-
.then((scr) =>
|
|
112
|
+
.then((scr) => {
|
|
113
|
+
participants[0].webex.logger.debug('@@@@', scr)
|
|
114
|
+
return participants[1].webex.internal.encryption.download(scr.loc, scr)})
|
|
113
115
|
.then((downloadedFile) =>
|
|
114
116
|
fh
|
|
115
117
|
.isMatchingFile(downloadedFile, fixture)
|
|
@@ -120,10 +122,10 @@ describe('plugin-board', () => {
|
|
|
120
122
|
describe('#setSnapshotImage()', () => {
|
|
121
123
|
after(() => participants[0].webex.internal.board.deleteAllContent(board));
|
|
122
124
|
|
|
123
|
-
it('uploads image to webex files and adds to channel', () => {
|
|
125
|
+
it('uploads image to webex files and adds to channel', (done) => {
|
|
124
126
|
let imageRes;
|
|
125
127
|
|
|
126
|
-
|
|
128
|
+
participants[0].webex.internal.board
|
|
127
129
|
.setSnapshotImage(board, fixture)
|
|
128
130
|
.then((res) => {
|
|
129
131
|
imageRes = res.image;
|
|
@@ -142,10 +144,14 @@ describe('plugin-board', () => {
|
|
|
142
144
|
res.image.scr
|
|
143
145
|
);
|
|
144
146
|
})
|
|
145
|
-
.then((decryptedScr) => participants[2].webex.internal.encryption.download(decryptedScr))
|
|
146
|
-
.then((file) =>
|
|
147
|
-
fh.isMatchingFile(file, fixture).then((result) => assert.deepEqual(result, true))
|
|
148
|
-
|
|
147
|
+
.then((decryptedScr) => participants[2].webex.internal.encryption.download(decryptedScr.loc, decryptedScr))
|
|
148
|
+
.then((file) =>{
|
|
149
|
+
fh.isMatchingFile(file, fixture).then((result) => assert.deepEqual(result, true));
|
|
150
|
+
done();
|
|
151
|
+
}).catch(err => {
|
|
152
|
+
assert(false, err);
|
|
153
|
+
done();
|
|
154
|
+
})
|
|
149
155
|
});
|
|
150
156
|
});
|
|
151
157
|
|
|
@@ -190,7 +196,7 @@ describe('plugin-board', () => {
|
|
|
190
196
|
|
|
191
197
|
it('matches file file downloaded', () =>
|
|
192
198
|
participants[0].webex.internal.encryption
|
|
193
|
-
.download(testScr)
|
|
199
|
+
.download(testScr.loc, testScr)
|
|
194
200
|
.then((downloadedFile) =>
|
|
195
201
|
fh
|
|
196
202
|
.isMatchingFile(downloadedFile, fixture)
|
|
@@ -199,7 +205,7 @@ describe('plugin-board', () => {
|
|
|
199
205
|
|
|
200
206
|
it('allows others to download image', () =>
|
|
201
207
|
participants[2].webex.internal.encryption
|
|
202
|
-
.download(testScr)
|
|
208
|
+
.download(testScr.loc, testScr)
|
|
203
209
|
.then((downloadedFile) =>
|
|
204
210
|
fh
|
|
205
211
|
.isMatchingFile(downloadedFile, fixture)
|
|
@@ -245,7 +251,7 @@ describe('plugin-board', () => {
|
|
|
245
251
|
})
|
|
246
252
|
.then(() =>
|
|
247
253
|
participants[0].webex.internal.encryption
|
|
248
|
-
.download(testScr)
|
|
254
|
+
.download(testScr.loc, testScr)
|
|
249
255
|
.then((downloadedFile) => fh.isMatchingFile(downloadedFile, fixture))
|
|
250
256
|
.then((res) => assert.isTrue(res))
|
|
251
257
|
);
|
|
@@ -12,7 +12,8 @@ import fh from '@webex/test-helper-file';
|
|
|
12
12
|
import {map} from 'lodash';
|
|
13
13
|
import uuid from 'uuid';
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
// SPARK-413317
|
|
16
|
+
describe.skip('plugin-board', () => {
|
|
16
17
|
describe('realtime', () => {
|
|
17
18
|
let board, conversation, fixture, participants;
|
|
18
19
|
let mccoy, spock;
|
package/test/unit/spec/board.js
CHANGED
|
@@ -103,7 +103,7 @@ describe('plugin-board', () => {
|
|
|
103
103
|
data: 'data2',
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
beforeAll(() => {
|
|
107
107
|
webex = new MockWebex({
|
|
108
108
|
children: {
|
|
109
109
|
board: Board,
|
|
@@ -232,14 +232,14 @@ describe('plugin-board', () => {
|
|
|
232
232
|
kmsMessage: channel.kmsMessage,
|
|
233
233
|
};
|
|
234
234
|
|
|
235
|
-
|
|
235
|
+
beforeAll(() => {
|
|
236
236
|
webex.request.resetHistory();
|
|
237
237
|
webex.request.returns(Promise.resolve({statusCode: 200, body: channelRes}));
|
|
238
238
|
|
|
239
|
-
|
|
239
|
+
|
|
240
240
|
});
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
afterAll(() => {
|
|
243
243
|
// reset request to its original behavior
|
|
244
244
|
webex.request.returns(
|
|
245
245
|
Promise.resolve({
|
|
@@ -249,16 +249,41 @@ describe('plugin-board', () => {
|
|
|
249
249
|
);
|
|
250
250
|
});
|
|
251
251
|
|
|
252
|
-
it('
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
252
|
+
it('supports creating ambiguous channels for PMR support', () => {
|
|
253
|
+
return webex.internal.board.createChannel()
|
|
254
|
+
.then(() => {
|
|
255
|
+
assert.calledWith(
|
|
256
|
+
webex.request,
|
|
257
|
+
sinon.match({
|
|
258
|
+
method: 'POST',
|
|
259
|
+
api: 'board',
|
|
260
|
+
resource: '/channels',
|
|
261
|
+
body: {
|
|
262
|
+
kmsMessage: {
|
|
263
|
+
method: 'create',
|
|
264
|
+
uri: '/resources',
|
|
265
|
+
userIds: [],
|
|
266
|
+
keyUris: [],
|
|
267
|
+
},
|
|
268
|
+
}
|
|
269
|
+
})
|
|
270
|
+
)
|
|
260
271
|
})
|
|
261
|
-
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
it('requests POST to channels service', () => {
|
|
275
|
+
return webex.internal.board.createChannel(conversation)
|
|
276
|
+
.then(() => {
|
|
277
|
+
assert.calledWith(
|
|
278
|
+
webex.request,
|
|
279
|
+
sinon.match({
|
|
280
|
+
method: 'POST',
|
|
281
|
+
api: 'board',
|
|
282
|
+
resource: '/channels',
|
|
283
|
+
body: channelRequestBody,
|
|
284
|
+
}),
|
|
285
|
+
);
|
|
286
|
+
});
|
|
262
287
|
});
|
|
263
288
|
});
|
|
264
289
|
|
|
@@ -363,7 +388,7 @@ describe('plugin-board', () => {
|
|
|
363
388
|
});
|
|
364
389
|
|
|
365
390
|
describe('#deleteAllContent()', () => {
|
|
366
|
-
|
|
391
|
+
beforeAll(() => {
|
|
367
392
|
webex.request.resetHistory();
|
|
368
393
|
|
|
369
394
|
return webex.internal.board.deleteAllContent(channel);
|
|
@@ -403,18 +428,18 @@ describe('plugin-board', () => {
|
|
|
403
428
|
});
|
|
404
429
|
|
|
405
430
|
describe('#_uploadImage()', () => {
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
);
|
|
431
|
+
let uploadImageToWebexFiles = null;
|
|
432
|
+
|
|
433
|
+
beforeAll(() => {
|
|
434
|
+
uploadImageToWebexFiles = sinon.stub(webex.internal.board, '_uploadImageToWebexFiles').returns(Promise.resolve({
|
|
435
|
+
downloadUrl: fakeURL
|
|
436
|
+
}));
|
|
412
437
|
|
|
413
438
|
return webex.internal.board._uploadImage(conversation, file);
|
|
414
439
|
});
|
|
415
440
|
|
|
416
|
-
|
|
417
|
-
|
|
441
|
+
afterAll(() => {
|
|
442
|
+
uploadImageToWebexFiles.restore();
|
|
418
443
|
});
|
|
419
444
|
|
|
420
445
|
it('encrypts binary file', () => {
|
|
@@ -427,13 +452,13 @@ describe('plugin-board', () => {
|
|
|
427
452
|
});
|
|
428
453
|
|
|
429
454
|
describe('#_uploadImageToWebexFiles()', () => {
|
|
430
|
-
|
|
455
|
+
beforeAll(() => {
|
|
431
456
|
sinon.stub(webex.internal.board, '_getSpaceUrl').returns(Promise.resolve(fakeURL));
|
|
432
457
|
|
|
433
458
|
return webex.internal.board._uploadImage(conversation, file);
|
|
434
459
|
});
|
|
435
460
|
|
|
436
|
-
|
|
461
|
+
afterAll(() => webex.internal.board._getSpaceUrl.restore());
|
|
437
462
|
|
|
438
463
|
afterEach(() => {
|
|
439
464
|
webex.upload.resetHistory();
|
|
@@ -523,7 +548,7 @@ describe('plugin-board', () => {
|
|
|
523
548
|
});
|
|
524
549
|
|
|
525
550
|
describe('#getChannel()', () => {
|
|
526
|
-
|
|
551
|
+
beforeAll(() => {
|
|
527
552
|
webex.request.resetHistory();
|
|
528
553
|
|
|
529
554
|
return webex.internal.board.getChannel(channel);
|
|
@@ -575,7 +600,7 @@ describe('plugin-board', () => {
|
|
|
575
600
|
});
|
|
576
601
|
|
|
577
602
|
describe('#register()', () => {
|
|
578
|
-
|
|
603
|
+
beforeAll(() => {
|
|
579
604
|
webex.request.resetHistory();
|
|
580
605
|
|
|
581
606
|
return webex.internal.board.register({data: 'data'});
|
|
@@ -15,7 +15,7 @@ describe('plugin-board', () => {
|
|
|
15
15
|
process.env.ENCRYPTION_SERVICE_URL || 'https://encryption-a.wbx2.com'
|
|
16
16
|
}/encryption/api/v1/keys/8a7d3d78-ce75-48aa-a943-2e8acf63fbc9`;
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
beforeAll(() => {
|
|
19
19
|
webex = new MockWebex({
|
|
20
20
|
children: {
|
|
21
21
|
board: Board,
|
|
@@ -45,14 +45,12 @@ describe('plugin-board', () => {
|
|
|
45
45
|
|
|
46
46
|
describe('encryption', () => {
|
|
47
47
|
describe('#decryptContents', () => {
|
|
48
|
-
|
|
49
|
-
sinon
|
|
50
|
-
.stub(webex.internal.board, 'decryptSingleContent')
|
|
51
|
-
.callsFake(sinon.stub().returns(Promise.resolve({})));
|
|
48
|
+
beforeAll(() => {
|
|
49
|
+
sinon.stub(webex.internal.board, 'decryptSingleContent').callsFake(sinon.stub().returns(Promise.resolve({})));
|
|
52
50
|
sinon.spy(webex.internal.board, 'decryptSingleFileContent');
|
|
53
51
|
});
|
|
54
52
|
|
|
55
|
-
|
|
53
|
+
afterAll(() => {
|
|
56
54
|
webex.internal.board.decryptSingleContent.restore();
|
|
57
55
|
webex.internal.board.decryptSingleFileContent.restore();
|
|
58
56
|
});
|
|
@@ -195,13 +193,11 @@ describe('plugin-board', () => {
|
|
|
195
193
|
});
|
|
196
194
|
|
|
197
195
|
describe('#encryptContents', () => {
|
|
198
|
-
|
|
199
|
-
sinon.stub(webex.internal.board, 'encryptSingleContent').returns(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
})
|
|
204
|
-
);
|
|
196
|
+
beforeAll(() => {
|
|
197
|
+
sinon.stub(webex.internal.board, 'encryptSingleContent').returns(Promise.resolve({
|
|
198
|
+
encryptedData,
|
|
199
|
+
encryptionKeyUrl: fakeURL
|
|
200
|
+
}));
|
|
205
201
|
});
|
|
206
202
|
|
|
207
203
|
afterEach(() => {
|
package/dist/types/board.d.ts
DELETED
package/dist/types/config.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
declare namespace _default {
|
|
2
|
-
namespace board {
|
|
3
|
-
const numberContentsPerPageForAdd: number;
|
|
4
|
-
const numberContentsPerPageForGet: number;
|
|
5
|
-
const pingInterval: number;
|
|
6
|
-
const pongTimeout: number;
|
|
7
|
-
const forceCloseDelay: [type];
|
|
8
|
-
const mercuryBindingPrefix: string;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
export default _default;
|
package/dist/types/index.d.ts
DELETED