@webex/plugin-meetings 3.7.0-next.10 → 3.7.0-next.12

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.
@@ -286,6 +286,12 @@ export declare const EVENT_TYPES: {
286
286
  REMOTE_SHARE_AUDIO: string;
287
287
  ERROR: string;
288
288
  };
289
+ export declare const HEADERS: {
290
+ CONTENT_TYPE: string;
291
+ CONTENT_TYPE_VALUE: {
292
+ APPLICATION_JSON: string;
293
+ };
294
+ };
289
295
  export declare const MEETING_REMOVED_REASON: {
290
296
  SELF_REMOVED: string;
291
297
  FULLSTATE_REMOVED: string;
@@ -6,7 +6,11 @@ _Object$defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.default = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
9
12
  var _webexCore = require("@webex/webex-core");
13
+ var _uuid = _interopRequireDefault(require("uuid"));
10
14
  var _lodash = require("lodash");
11
15
  var _constants = require("../constants");
12
16
  var _collection = _interopRequireDefault(require("./collection"));
@@ -107,7 +111,323 @@ var Webinar = _webexCore.WebexPlugin.extend({
107
111
  updatePracticeSessionStatus: function updatePracticeSessionStatus(payload) {
108
112
  this.set('practiceSessionEnabled', payload.enabled);
109
113
  },
110
- version: "3.7.0-next.10"
114
+ /**
115
+ * start webcast mode for webinar
116
+ * @param {object} meeting
117
+ * @param {object} layout
118
+ * @returns {Promise}
119
+ */
120
+ startWebcast: function startWebcast(meeting, layout) {
121
+ var _this = this;
122
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
123
+ return _regenerator.default.wrap(function _callee$(_context) {
124
+ while (1) switch (_context.prev = _context.next) {
125
+ case 0:
126
+ if (meeting) {
127
+ _context.next = 3;
128
+ break;
129
+ }
130
+ _loggerProxy.default.logger.error("Meeting:webinar#startWebcast failed --> meeting parameter : ".concat(meeting));
131
+ throw new Error('Meeting parameter does not meet expectations');
132
+ case 3:
133
+ _context.t0 = _this;
134
+ _context.t1 = _constants.HTTP_VERBS.PUT;
135
+ _context.t2 = "".concat(_this.webcastInstanceUrl, "/streaming");
136
+ _context.t3 = _defineProperty2.default;
137
+ _context.next = 9;
138
+ return _this.webex.credentials.getUserToken();
139
+ case 9:
140
+ _context.t4 = _context.sent;
141
+ _context.t5 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
142
+ _context.t6 = {
143
+ authorization: _context.t4,
144
+ trackingId: _context.t5
145
+ };
146
+ _context.t7 = _constants.HEADERS.CONTENT_TYPE;
147
+ _context.t8 = _constants.HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON;
148
+ _context.t9 = (0, _context.t3)(_context.t6, _context.t7, _context.t8);
149
+ _context.t10 = {
150
+ action: 'start',
151
+ meetingInfo: {
152
+ locusId: meeting.locusId,
153
+ correlationId: meeting.correlationId
154
+ },
155
+ layout: layout
156
+ };
157
+ _context.t11 = {
158
+ method: _context.t1,
159
+ uri: _context.t2,
160
+ headers: _context.t9,
161
+ body: _context.t10
162
+ };
163
+ return _context.abrupt("return", _context.t0.request.call(_context.t0, _context.t11).catch(function (error) {
164
+ _loggerProxy.default.logger.error('Meeting:webinar#startWebcast failed', error);
165
+ throw error;
166
+ }));
167
+ case 18:
168
+ case "end":
169
+ return _context.stop();
170
+ }
171
+ }, _callee);
172
+ }))();
173
+ },
174
+ /**
175
+ * stop webcast mode for webinar
176
+ * @returns {Promise}
177
+ */
178
+ stopWebcast: function stopWebcast() {
179
+ var _this2 = this;
180
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
181
+ return _regenerator.default.wrap(function _callee2$(_context2) {
182
+ while (1) switch (_context2.prev = _context2.next) {
183
+ case 0:
184
+ _context2.t0 = _this2;
185
+ _context2.t1 = _constants.HTTP_VERBS.PUT;
186
+ _context2.t2 = "".concat(_this2.webcastInstanceUrl, "/streaming");
187
+ _context2.t3 = _defineProperty2.default;
188
+ _context2.next = 6;
189
+ return _this2.webex.credentials.getUserToken();
190
+ case 6:
191
+ _context2.t4 = _context2.sent;
192
+ _context2.t5 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
193
+ _context2.t6 = {
194
+ authorization: _context2.t4,
195
+ trackingId: _context2.t5
196
+ };
197
+ _context2.t7 = _constants.HEADERS.CONTENT_TYPE;
198
+ _context2.t8 = _constants.HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON;
199
+ _context2.t9 = (0, _context2.t3)(_context2.t6, _context2.t7, _context2.t8);
200
+ _context2.t10 = {
201
+ action: 'stop'
202
+ };
203
+ _context2.t11 = {
204
+ method: _context2.t1,
205
+ uri: _context2.t2,
206
+ headers: _context2.t9,
207
+ body: _context2.t10
208
+ };
209
+ return _context2.abrupt("return", _context2.t0.request.call(_context2.t0, _context2.t11).catch(function (error) {
210
+ _loggerProxy.default.logger.error('Meeting:webinar#stopWebcast failed', error);
211
+ throw error;
212
+ }));
213
+ case 15:
214
+ case "end":
215
+ return _context2.stop();
216
+ }
217
+ }, _callee2);
218
+ }))();
219
+ },
220
+ /**
221
+ * query webcast layout for webinar
222
+ * @returns {Promise}
223
+ */
224
+ queryWebcastLayout: function queryWebcastLayout() {
225
+ var _this3 = this;
226
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
227
+ return _regenerator.default.wrap(function _callee3$(_context3) {
228
+ while (1) switch (_context3.prev = _context3.next) {
229
+ case 0:
230
+ _context3.t0 = _this3;
231
+ _context3.t1 = _constants.HTTP_VERBS.GET;
232
+ _context3.t2 = "".concat(_this3.webcastInstanceUrl, "/layout");
233
+ _context3.next = 5;
234
+ return _this3.webex.credentials.getUserToken();
235
+ case 5:
236
+ _context3.t3 = _context3.sent;
237
+ _context3.t4 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
238
+ _context3.t5 = {
239
+ authorization: _context3.t3,
240
+ trackingId: _context3.t4
241
+ };
242
+ _context3.t6 = {
243
+ method: _context3.t1,
244
+ uri: _context3.t2,
245
+ headers: _context3.t5
246
+ };
247
+ return _context3.abrupt("return", _context3.t0.request.call(_context3.t0, _context3.t6).catch(function (error) {
248
+ _loggerProxy.default.logger.error('Meeting:webinar#queryWebcastLayout failed', error);
249
+ throw error;
250
+ }));
251
+ case 10:
252
+ case "end":
253
+ return _context3.stop();
254
+ }
255
+ }, _callee3);
256
+ }))();
257
+ },
258
+ /**
259
+ * update webcast layout for webinar
260
+ * @param {object} layout
261
+ * @returns {Promise}
262
+ */
263
+ updateWebcastLayout: function updateWebcastLayout(layout) {
264
+ var _this4 = this;
265
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
266
+ return _regenerator.default.wrap(function _callee4$(_context4) {
267
+ while (1) switch (_context4.prev = _context4.next) {
268
+ case 0:
269
+ _context4.t0 = _this4;
270
+ _context4.t1 = _constants.HTTP_VERBS.PUT;
271
+ _context4.t2 = "".concat(_this4.webcastInstanceUrl, "/layout");
272
+ _context4.t3 = _defineProperty2.default;
273
+ _context4.next = 6;
274
+ return _this4.webex.credentials.getUserToken();
275
+ case 6:
276
+ _context4.t4 = _context4.sent;
277
+ _context4.t5 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
278
+ _context4.t6 = {
279
+ authorization: _context4.t4,
280
+ trackingId: _context4.t5
281
+ };
282
+ _context4.t7 = _constants.HEADERS.CONTENT_TYPE;
283
+ _context4.t8 = _constants.HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON;
284
+ _context4.t9 = (0, _context4.t3)(_context4.t6, _context4.t7, _context4.t8);
285
+ _context4.t10 = {
286
+ layout: {
287
+ videoLayout: layout.videoLayout,
288
+ contentLayout: layout.contentLayout,
289
+ syncStageLayout: layout.syncStageLayout,
290
+ syncStageInMeeting: layout.syncStageInMeeting
291
+ }
292
+ };
293
+ _context4.t11 = {
294
+ method: _context4.t1,
295
+ uri: _context4.t2,
296
+ headers: _context4.t9,
297
+ body: _context4.t10
298
+ };
299
+ return _context4.abrupt("return", _context4.t0.request.call(_context4.t0, _context4.t11).catch(function (error) {
300
+ _loggerProxy.default.logger.error('Meeting:webinar#updateWebcastLayout failed', error);
301
+ throw error;
302
+ }));
303
+ case 15:
304
+ case "end":
305
+ return _context4.stop();
306
+ }
307
+ }, _callee4);
308
+ }))();
309
+ },
310
+ /**
311
+ * view all webcast attendees
312
+ * @param {string} queryString
313
+ * @returns {Promise}
314
+ */
315
+ viewAllWebcastAttendees: function viewAllWebcastAttendees() {
316
+ var _this5 = this;
317
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
318
+ return _regenerator.default.wrap(function _callee5$(_context5) {
319
+ while (1) switch (_context5.prev = _context5.next) {
320
+ case 0:
321
+ _context5.t0 = _this5;
322
+ _context5.t1 = _constants.HTTP_VERBS.GET;
323
+ _context5.t2 = "".concat(_this5.webcastInstanceUrl, "/attendees");
324
+ _context5.next = 5;
325
+ return _this5.webex.credentials.getUserToken();
326
+ case 5:
327
+ _context5.t3 = _context5.sent;
328
+ _context5.t4 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
329
+ _context5.t5 = {
330
+ authorization: _context5.t3,
331
+ trackingId: _context5.t4
332
+ };
333
+ _context5.t6 = {
334
+ method: _context5.t1,
335
+ uri: _context5.t2,
336
+ headers: _context5.t5
337
+ };
338
+ return _context5.abrupt("return", _context5.t0.request.call(_context5.t0, _context5.t6).catch(function (error) {
339
+ _loggerProxy.default.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);
340
+ throw error;
341
+ }));
342
+ case 10:
343
+ case "end":
344
+ return _context5.stop();
345
+ }
346
+ }, _callee5);
347
+ }))();
348
+ },
349
+ /**
350
+ * search webcast attendees by query string
351
+ * @param {string} queryString
352
+ * @returns {Promise}
353
+ */
354
+ searchWebcastAttendees: function searchWebcastAttendees() {
355
+ var _arguments = arguments,
356
+ _this6 = this;
357
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
358
+ var queryString;
359
+ return _regenerator.default.wrap(function _callee6$(_context6) {
360
+ while (1) switch (_context6.prev = _context6.next) {
361
+ case 0:
362
+ queryString = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : '';
363
+ _context6.t0 = _this6;
364
+ _context6.t1 = _constants.HTTP_VERBS.GET;
365
+ _context6.t2 = "".concat(_this6.webcastInstanceUrl, "/attendees?keyword=").concat(encodeURIComponent(queryString));
366
+ _context6.next = 6;
367
+ return _this6.webex.credentials.getUserToken();
368
+ case 6:
369
+ _context6.t3 = _context6.sent;
370
+ _context6.t4 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
371
+ _context6.t5 = {
372
+ authorization: _context6.t3,
373
+ trackingId: _context6.t4
374
+ };
375
+ _context6.t6 = {
376
+ method: _context6.t1,
377
+ uri: _context6.t2,
378
+ headers: _context6.t5
379
+ };
380
+ return _context6.abrupt("return", _context6.t0.request.call(_context6.t0, _context6.t6).catch(function (error) {
381
+ _loggerProxy.default.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);
382
+ throw error;
383
+ }));
384
+ case 11:
385
+ case "end":
386
+ return _context6.stop();
387
+ }
388
+ }, _callee6);
389
+ }))();
390
+ },
391
+ /**
392
+ * expel webcast attendee by participantId
393
+ * @param {string} participantId
394
+ * @returns {Promise}
395
+ */
396
+ expelWebcastAttendee: function expelWebcastAttendee(participantId) {
397
+ var _this7 = this;
398
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
399
+ return _regenerator.default.wrap(function _callee7$(_context7) {
400
+ while (1) switch (_context7.prev = _context7.next) {
401
+ case 0:
402
+ _context7.t0 = _this7;
403
+ _context7.t1 = _constants.HTTP_VERBS.DELETE;
404
+ _context7.t2 = "".concat(_this7.webcastInstanceUrl, "/attendees/").concat(participantId);
405
+ _context7.next = 5;
406
+ return _this7.webex.credentials.getUserToken();
407
+ case 5:
408
+ _context7.t3 = _context7.sent;
409
+ _context7.t4 = "".concat(_webexCore.config.trackingIdPrefix, "_").concat(_uuid.default.v4().toString());
410
+ _context7.t5 = {
411
+ authorization: _context7.t3,
412
+ trackingId: _context7.t4
413
+ };
414
+ _context7.t6 = {
415
+ method: _context7.t1,
416
+ uri: _context7.t2,
417
+ headers: _context7.t5
418
+ };
419
+ return _context7.abrupt("return", _context7.t0.request.call(_context7.t0, _context7.t6).catch(function (error) {
420
+ _loggerProxy.default.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);
421
+ throw error;
422
+ }));
423
+ case 10:
424
+ case "end":
425
+ return _context7.stop();
426
+ }
427
+ }, _callee7);
428
+ }))();
429
+ },
430
+ version: "3.7.0-next.12"
111
431
  });
112
432
  var _default = exports.default = Webinar;
113
433
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_lodash","_constants","_collection","_interopRequireDefault","_loggerProxy","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","concat","body","practiceSession","catch","error","LoggerProxy","logger","updatePracticeSessionStatus","version","_default","exports","default"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin} from '@webex/webex-core';\nimport {get} from 'lodash';\nimport {HTTP_VERBS, MEETINGS, SELF_ROLES} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE);\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', payload.enabled);\n },\n});\n\nexport default Webinar;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_webexCore","require","_uuid","_interopRequireDefault","_lodash","_constants","_collection","_loggerProxy","Webinar","WebexPlugin","extend","namespace","MEETINGS","collections","webinar","WebinarCollection","props","locusUrl","webcastInstanceUrl","canManageWebcast","selfIsPanelist","selfIsAttendee","practiceSessionEnabled","locusUrlUpdate","set","updateWebcastUrl","payload","get","updateCanManageWebcast","updateRoleChanged","oldRoles","newRoles","isPromoted","includes","SELF_ROLES","ATTENDEE","PANELIST","isDemoted","MODERATOR","setPracticeSessionState","enabled","request","method","HTTP_VERBS","PATCH","uri","concat","body","practiceSession","catch","error","LoggerProxy","logger","updatePracticeSessionStatus","startWebcast","meeting","layout","_this","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","Error","t0","t1","PUT","t2","t3","_defineProperty2","webex","credentials","getUserToken","t4","sent","t5","config","trackingIdPrefix","uuid","v4","toString","t6","authorization","trackingId","t7","HEADERS","CONTENT_TYPE","t8","CONTENT_TYPE_VALUE","APPLICATION_JSON","t9","t10","action","meetingInfo","locusId","correlationId","t11","headers","abrupt","call","stop","stopWebcast","_this2","_callee2","_callee2$","_context2","queryWebcastLayout","_this3","_callee3","_callee3$","_context3","GET","updateWebcastLayout","_this4","_callee4","_callee4$","_context4","videoLayout","contentLayout","syncStageLayout","syncStageInMeeting","viewAllWebcastAttendees","_this5","_callee5","_callee5$","_context5","searchWebcastAttendees","_arguments","arguments","_this6","_callee6","queryString","_callee6$","_context6","length","undefined","encodeURIComponent","expelWebcastAttendee","participantId","_this7","_callee7","_callee7$","_context7","DELETE","version","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.\n */\nimport {WebexPlugin, config} from '@webex/webex-core';\nimport uuid from 'uuid';\nimport {get} from 'lodash';\nimport {HEADERS, HTTP_VERBS, MEETINGS, SELF_ROLES} from '../constants';\n\nimport WebinarCollection from './collection';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * @class Webinar\n */\nconst Webinar = WebexPlugin.extend({\n namespace: MEETINGS,\n collections: {\n webinar: WebinarCollection,\n },\n\n props: {\n locusUrl: 'string', // appears current webinar's locus url\n webcastInstanceUrl: 'string', // current webinar's webcast instance url\n canManageWebcast: 'boolean', // appears the ability to manage webcast\n selfIsPanelist: 'boolean', // self is panelist\n selfIsAttendee: 'boolean', // self is attendee\n practiceSessionEnabled: 'boolean', // practice session enabled\n },\n\n /**\n * Update the current locus url of the webinar\n * @param {string} locusUrl\n * @returns {void}\n */\n locusUrlUpdate(locusUrl) {\n this.set('locusUrl', locusUrl);\n },\n\n /**\n * Update the current webcast instance url of the meeting\n * @param {object} payload\n * @returns {void}\n */\n updateWebcastUrl(payload) {\n this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));\n },\n\n /**\n * Update whether self has capability to manage start/stop webcast (only host can manage it)\n * @param {boolean} canManageWebcast\n * @returns {void}\n */\n updateCanManageWebcast(canManageWebcast) {\n this.set('canManageWebcast', canManageWebcast);\n },\n\n /**\n * Updates user roles and manages associated state transitions\n * @param {object} payload\n * @param {string[]} payload.oldRoles - Previous roles of the user\n * @param {string[]} payload.newRoles - New roles of the user\n * @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states\n */\n updateRoleChanged(payload) {\n const oldRoles = get(payload, 'oldRoles', []);\n const newRoles = get(payload, 'newRoles', []);\n\n const isPromoted =\n oldRoles.includes(SELF_ROLES.ATTENDEE) && newRoles.includes(SELF_ROLES.PANELIST);\n const isDemoted =\n oldRoles.includes(SELF_ROLES.PANELIST) && newRoles.includes(SELF_ROLES.ATTENDEE);\n this.set('selfIsPanelist', newRoles.includes(SELF_ROLES.PANELIST));\n this.set('selfIsAttendee', newRoles.includes(SELF_ROLES.ATTENDEE));\n this.updateCanManageWebcast(newRoles.includes(SELF_ROLES.MODERATOR));\n\n return {isPromoted, isDemoted};\n },\n\n /**\n * start or stop practice session for webinar\n * @param {boolean} enabled\n * @returns {Promise}\n */\n setPracticeSessionState(enabled) {\n return this.request({\n method: HTTP_VERBS.PATCH,\n uri: `${this.locusUrl}/controls`,\n body: {\n practiceSession: {\n enabled,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#setPracticeSessionState failed', error);\n throw error;\n });\n },\n\n /**\n * update practice session status\n * @param {object} payload\n * @returns {void}\n */\n updatePracticeSessionStatus(payload) {\n this.set('practiceSessionEnabled', payload.enabled);\n },\n\n /**\n * start webcast mode for webinar\n * @param {object} meeting\n * @param {object} layout\n * @returns {Promise}\n */\n async startWebcast(meeting, layout) {\n if (!meeting) {\n LoggerProxy.logger.error(\n `Meeting:webinar#startWebcast failed --> meeting parameter : ${meeting}`\n );\n throw new Error('Meeting parameter does not meet expectations');\n }\n\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'start',\n meetingInfo: {\n locusId: meeting.locusId,\n correlationId: meeting.correlationId,\n },\n layout,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#startWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * stop webcast mode for webinar\n * @returns {Promise}\n */\n async stopWebcast() {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/streaming`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n action: 'stop',\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#stopWebcast failed', error);\n throw error;\n });\n },\n\n /**\n * query webcast layout for webinar\n * @returns {Promise}\n */\n async queryWebcastLayout() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#queryWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * update webcast layout for webinar\n * @param {object} layout\n * @returns {Promise}\n */\n async updateWebcastLayout(layout) {\n return this.request({\n method: HTTP_VERBS.PUT,\n uri: `${this.webcastInstanceUrl}/layout`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,\n },\n body: {\n layout: {\n videoLayout: layout.videoLayout,\n contentLayout: layout.contentLayout,\n syncStageLayout: layout.syncStageLayout,\n syncStageInMeeting: layout.syncStageInMeeting,\n },\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#updateWebcastLayout failed', error);\n throw error;\n });\n },\n\n /**\n * view all webcast attendees\n * @param {string} queryString\n * @returns {Promise}\n */\n async viewAllWebcastAttendees() {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * search webcast attendees by query string\n * @param {string} queryString\n * @returns {Promise}\n */\n async searchWebcastAttendees(queryString = '') {\n return this.request({\n method: HTTP_VERBS.GET,\n uri: `${this.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);\n throw error;\n });\n },\n\n /**\n * expel webcast attendee by participantId\n * @param {string} participantId\n * @returns {Promise}\n */\n async expelWebcastAttendee(participantId) {\n return this.request({\n method: HTTP_VERBS.DELETE,\n uri: `${this.webcastInstanceUrl}/attendees/${participantId}`,\n headers: {\n authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,\n },\n }).catch((error) => {\n LoggerProxy.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);\n throw error;\n });\n },\n});\n\nexport default Webinar;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -43,7 +43,7 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.7.0-next.10",
46
+ "@webex/plugin-meetings": "3.7.0-next.12",
47
47
  "@webex/plugin-rooms": "3.7.0-next.4",
48
48
  "@webex/test-helper-chai": "3.7.0-next.2",
49
49
  "@webex/test-helper-mocha": "3.7.0-next.2",
@@ -70,7 +70,7 @@
70
70
  "@webex/internal-plugin-metrics": "3.7.0-next.2",
71
71
  "@webex/internal-plugin-support": "3.7.0-next.5",
72
72
  "@webex/internal-plugin-user": "3.7.0-next.2",
73
- "@webex/internal-plugin-voicea": "3.7.0-next.10",
73
+ "@webex/internal-plugin-voicea": "3.7.0-next.12",
74
74
  "@webex/media-helpers": "3.7.0-next.2",
75
75
  "@webex/plugin-people": "3.7.0-next.2",
76
76
  "@webex/plugin-rooms": "3.7.0-next.4",
@@ -91,5 +91,5 @@
91
91
  "//": [
92
92
  "TODO: upgrade jwt-decode when moving to node 18"
93
93
  ],
94
- "version": "3.7.0-next.10"
94
+ "version": "3.7.0-next.12"
95
95
  }
package/src/config.ts CHANGED
@@ -96,6 +96,6 @@ export default {
96
96
  iceCandidatesGatheringTimeout: undefined,
97
97
  backendIpv6NativeSupport: false,
98
98
  reachabilityGetClusterTimeout: 5000,
99
- logUploadIntervalMultiplicationFactor: 0, // if set to 0 or undefined, logs won't be uploaded periodically
99
+ logUploadIntervalMultiplicationFactor: 0, // if set to 0 or undefined, logs won't be uploaded periodically, if you want periodic logs, recommended value is 1
100
100
  },
101
101
  };
package/src/constants.ts CHANGED
@@ -383,6 +383,13 @@ export const EVENT_TYPES = {
383
383
  ERROR: 'error',
384
384
  };
385
385
 
386
+ export const HEADERS = {
387
+ CONTENT_TYPE: 'Content-Type',
388
+ CONTENT_TYPE_VALUE: {
389
+ APPLICATION_JSON: 'application/json',
390
+ },
391
+ };
392
+
386
393
  // Handles the reason when meeting gets destroyed
387
394
  // host removed you from the meeting
388
395
  // You are the host and you left the meeting
@@ -4099,10 +4099,11 @@ export default class Meeting extends StatelessWebexPlugin {
4099
4099
  */
4100
4100
  private setLogUploadTimer() {
4101
4101
  // start with short timeouts and increase them later on so in case users have very long multi-hour meetings we don't get too fragmented logs
4102
- const LOG_UPLOAD_INTERVALS = [0.1, 1, 15, 15, 30, 30, 30, 60];
4102
+ const LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4103
4103
 
4104
4104
  const delay =
4105
4105
  1000 *
4106
+ 60 *
4106
4107
  // @ts-ignore - config coming from registerPlugin
4107
4108
  this.config.logUploadIntervalMultiplicationFactor *
4108
4109
  LOG_UPLOAD_INTERVALS[this.logUploadIntervalIndex];
@@ -1,9 +1,10 @@
1
1
  /*!
2
2
  * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
- import {WebexPlugin} from '@webex/webex-core';
4
+ import {WebexPlugin, config} from '@webex/webex-core';
5
+ import uuid from 'uuid';
5
6
  import {get} from 'lodash';
6
- import {HTTP_VERBS, MEETINGS, SELF_ROLES} from '../constants';
7
+ import {HEADERS, HTTP_VERBS, MEETINGS, SELF_ROLES} from '../constants';
7
8
 
8
9
  import WebinarCollection from './collection';
9
10
  import LoggerProxy from '../common/logs/logger-proxy';
@@ -103,6 +104,167 @@ const Webinar = WebexPlugin.extend({
103
104
  updatePracticeSessionStatus(payload) {
104
105
  this.set('practiceSessionEnabled', payload.enabled);
105
106
  },
107
+
108
+ /**
109
+ * start webcast mode for webinar
110
+ * @param {object} meeting
111
+ * @param {object} layout
112
+ * @returns {Promise}
113
+ */
114
+ async startWebcast(meeting, layout) {
115
+ if (!meeting) {
116
+ LoggerProxy.logger.error(
117
+ `Meeting:webinar#startWebcast failed --> meeting parameter : ${meeting}`
118
+ );
119
+ throw new Error('Meeting parameter does not meet expectations');
120
+ }
121
+
122
+ return this.request({
123
+ method: HTTP_VERBS.PUT,
124
+ uri: `${this.webcastInstanceUrl}/streaming`,
125
+ headers: {
126
+ authorization: await this.webex.credentials.getUserToken(),
127
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
128
+ [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,
129
+ },
130
+ body: {
131
+ action: 'start',
132
+ meetingInfo: {
133
+ locusId: meeting.locusId,
134
+ correlationId: meeting.correlationId,
135
+ },
136
+ layout,
137
+ },
138
+ }).catch((error) => {
139
+ LoggerProxy.logger.error('Meeting:webinar#startWebcast failed', error);
140
+ throw error;
141
+ });
142
+ },
143
+
144
+ /**
145
+ * stop webcast mode for webinar
146
+ * @returns {Promise}
147
+ */
148
+ async stopWebcast() {
149
+ return this.request({
150
+ method: HTTP_VERBS.PUT,
151
+ uri: `${this.webcastInstanceUrl}/streaming`,
152
+ headers: {
153
+ authorization: await this.webex.credentials.getUserToken(),
154
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
155
+ [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,
156
+ },
157
+ body: {
158
+ action: 'stop',
159
+ },
160
+ }).catch((error) => {
161
+ LoggerProxy.logger.error('Meeting:webinar#stopWebcast failed', error);
162
+ throw error;
163
+ });
164
+ },
165
+
166
+ /**
167
+ * query webcast layout for webinar
168
+ * @returns {Promise}
169
+ */
170
+ async queryWebcastLayout() {
171
+ return this.request({
172
+ method: HTTP_VERBS.GET,
173
+ uri: `${this.webcastInstanceUrl}/layout`,
174
+ headers: {
175
+ authorization: await this.webex.credentials.getUserToken(),
176
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
177
+ },
178
+ }).catch((error) => {
179
+ LoggerProxy.logger.error('Meeting:webinar#queryWebcastLayout failed', error);
180
+ throw error;
181
+ });
182
+ },
183
+
184
+ /**
185
+ * update webcast layout for webinar
186
+ * @param {object} layout
187
+ * @returns {Promise}
188
+ */
189
+ async updateWebcastLayout(layout) {
190
+ return this.request({
191
+ method: HTTP_VERBS.PUT,
192
+ uri: `${this.webcastInstanceUrl}/layout`,
193
+ headers: {
194
+ authorization: await this.webex.credentials.getUserToken(),
195
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
196
+ [HEADERS.CONTENT_TYPE]: HEADERS.CONTENT_TYPE_VALUE.APPLICATION_JSON,
197
+ },
198
+ body: {
199
+ layout: {
200
+ videoLayout: layout.videoLayout,
201
+ contentLayout: layout.contentLayout,
202
+ syncStageLayout: layout.syncStageLayout,
203
+ syncStageInMeeting: layout.syncStageInMeeting,
204
+ },
205
+ },
206
+ }).catch((error) => {
207
+ LoggerProxy.logger.error('Meeting:webinar#updateWebcastLayout failed', error);
208
+ throw error;
209
+ });
210
+ },
211
+
212
+ /**
213
+ * view all webcast attendees
214
+ * @param {string} queryString
215
+ * @returns {Promise}
216
+ */
217
+ async viewAllWebcastAttendees() {
218
+ return this.request({
219
+ method: HTTP_VERBS.GET,
220
+ uri: `${this.webcastInstanceUrl}/attendees`,
221
+ headers: {
222
+ authorization: await this.webex.credentials.getUserToken(),
223
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
224
+ },
225
+ }).catch((error) => {
226
+ LoggerProxy.logger.error('Meeting:webinar#viewAllWebcastAttendees failed', error);
227
+ throw error;
228
+ });
229
+ },
230
+
231
+ /**
232
+ * search webcast attendees by query string
233
+ * @param {string} queryString
234
+ * @returns {Promise}
235
+ */
236
+ async searchWebcastAttendees(queryString = '') {
237
+ return this.request({
238
+ method: HTTP_VERBS.GET,
239
+ uri: `${this.webcastInstanceUrl}/attendees?keyword=${encodeURIComponent(queryString)}`,
240
+ headers: {
241
+ authorization: await this.webex.credentials.getUserToken(),
242
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
243
+ },
244
+ }).catch((error) => {
245
+ LoggerProxy.logger.error('Meeting:webinar#searchWebcastAttendees failed', error);
246
+ throw error;
247
+ });
248
+ },
249
+
250
+ /**
251
+ * expel webcast attendee by participantId
252
+ * @param {string} participantId
253
+ * @returns {Promise}
254
+ */
255
+ async expelWebcastAttendee(participantId) {
256
+ return this.request({
257
+ method: HTTP_VERBS.DELETE,
258
+ uri: `${this.webcastInstanceUrl}/attendees/${participantId}`,
259
+ headers: {
260
+ authorization: await this.webex.credentials.getUserToken(),
261
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
262
+ },
263
+ }).catch((error) => {
264
+ LoggerProxy.logger.error('Meeting:webinar#expelWebcastAttendee failed', error);
265
+ throw error;
266
+ });
267
+ },
106
268
  });
107
269
 
108
270
  export default Webinar;