@webex/plugin-meetings 3.11.0-next.39 → 3.11.0-next.40

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.
@@ -272,6 +272,7 @@ export declare const EVENT_TRIGGERS: {
272
272
  MEETING_CONTROLS_REACTIONS_UPDATED: string;
273
273
  MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED: string;
274
274
  MEETING_CONTROLS_RAISE_HAND_UPDATED: string;
275
+ MEETING_CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED: string;
275
276
  MEETING_CONTROLS_VIDEO_UPDATED: string;
276
277
  MEETING_CONTROLS_STAGE_VIEW_UPDATED: string;
277
278
  MEETING_CONTROLS_WEBCAST_UPDATED: string;
@@ -570,6 +571,7 @@ export declare const LOCUSINFO: {
570
571
  CONTROLS_MEETING_LAYOUT_UPDATED: string;
571
572
  CONTROLS_RECORDING_UPDATED: string;
572
573
  CONTROLS_MEETING_TRANSCRIBE_UPDATED: string;
574
+ CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED: string;
573
575
  CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED: string;
574
576
  CONTROLS_MEETING_MANUAL_CAPTION_UPDATED: string;
575
577
  CONTROLS_MEETING_HESIOD_LLM_ID_UPDATED: string;
@@ -506,7 +506,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
506
506
  }, _callee8);
507
507
  }))();
508
508
  },
509
- version: "3.11.0-next.39"
509
+ version: "3.11.0-next.40"
510
510
  });
511
511
  var _default = exports.default = Webinar;
512
512
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -93,5 +93,5 @@
93
93
  "//": [
94
94
  "TODO: upgrade jwt-decode when moving to node 18"
95
95
  ],
96
- "version": "3.11.0-next.39"
96
+ "version": "3.11.0-next.40"
97
97
  }
package/src/constants.ts CHANGED
@@ -364,6 +364,8 @@ export const EVENT_TRIGGERS = {
364
364
  MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED:
365
365
  'meeting:controls:view-the-participants-list:updated',
366
366
  MEETING_CONTROLS_RAISE_HAND_UPDATED: 'meeting:controls:raise-hand:updated',
367
+ MEETING_CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED:
368
+ 'meeting:controls:ai-summary-notification:updated',
367
369
  MEETING_CONTROLS_VIDEO_UPDATED: 'meeting:controls:video:updated',
368
370
  MEETING_CONTROLS_STAGE_VIEW_UPDATED: 'meeting:controls:stage-view:updated',
369
371
  MEETING_CONTROLS_WEBCAST_UPDATED: 'meeting:controls:webcast:updated',
@@ -704,6 +706,7 @@ export const LOCUSINFO = {
704
706
  CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',
705
707
  CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',
706
708
  CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
709
+ CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED: 'CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED',
707
710
  CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED:
708
711
  'CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED',
709
712
  CONTROLS_MEETING_MANUAL_CAPTION_UPDATED: 'CONTROLS_MEETING_MANUAL_CAPTION_UPDATED',
@@ -42,6 +42,7 @@ ControlsUtils.parse = (controls: any) => {
42
42
  caption: controls.transcribe.caption,
43
43
  spokenLanguage: controls.transcribe.spokenLanguage,
44
44
  hesiodLlmId: controls.transcribe.hesiodLlmId,
45
+ aiSummaryNotification: controls.transcribe.aiSummaryNotification,
45
46
  };
46
47
  }
47
48
 
@@ -208,6 +209,16 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
208
209
  !isEqual(previous?.transcribe?.hesiodLlmId, current?.transcribe?.hesiodLlmId) &&
209
210
  !!(previous?.transcribe?.hesiodLlmId || current?.transcribe?.hesiodLlmId),
210
211
 
212
+ hasAiSummaryNotificationChanged:
213
+ current?.transcribe &&
214
+ !isEqual(
215
+ previous?.transcribe?.aiSummaryNotification,
216
+ current?.transcribe?.aiSummaryNotification
217
+ ) &&
218
+ !!(
219
+ previous?.transcribe?.aiSummaryNotification || current?.transcribe?.aiSummaryNotification
220
+ ),
221
+
211
222
  hasTranscribeSpokenLanguageChanged:
212
223
  current?.transcribe &&
213
224
  !isEqual(previous?.transcribe?.spokenLanguage, current?.transcribe?.spokenLanguage) &&
@@ -1434,6 +1434,7 @@ export default class LocusInfo extends EventsScope {
1434
1434
  hasMeetingContainerChanged,
1435
1435
  hasTranscribeChanged,
1436
1436
  hasHesiodLLMIdChanged,
1437
+ hasAiSummaryNotificationChanged,
1437
1438
  hasTranscribeSpokenLanguageChanged,
1438
1439
  hasManualCaptionChanged,
1439
1440
  hasEntryExitToneChanged,
@@ -1590,6 +1591,19 @@ export default class LocusInfo extends EventsScope {
1590
1591
  );
1591
1592
  }
1592
1593
 
1594
+ if (hasAiSummaryNotificationChanged) {
1595
+ this.emitScoped(
1596
+ {
1597
+ file: 'locus-info',
1598
+ function: 'updateControls',
1599
+ },
1600
+ LOCUSINFO.EVENTS.CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,
1601
+ {
1602
+ aiSummaryNotification: current.transcribe.aiSummaryNotification,
1603
+ }
1604
+ );
1605
+ }
1606
+
1593
1607
  if (hasTranscribeSpokenLanguageChanged) {
1594
1608
  const {spokenLanguage} = current.transcribe;
1595
1609
 
@@ -2972,6 +2972,18 @@ export default class Meeting extends StatelessWebexPlugin {
2972
2972
  );
2973
2973
  });
2974
2974
 
2975
+ this.locusInfo.on(
2976
+ LOCUSINFO.EVENTS.CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,
2977
+ ({aiSummaryNotification}) => {
2978
+ Trigger.trigger(
2979
+ this,
2980
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
2981
+ EVENT_TRIGGERS.MEETING_CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,
2982
+ {aiSummaryNotification}
2983
+ );
2984
+ }
2985
+ );
2986
+
2975
2987
  this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, ({state}) => {
2976
2988
  Trigger.trigger(
2977
2989
  this,
@@ -489,6 +489,35 @@ describe('plugin-meetings', () => {
489
489
  assert.equal(updates.hasHesiodLLMIdChanged, true);
490
490
  });
491
491
 
492
+ describe('hasAiSummaryNotificationChanged', () => {
493
+ it('returns false when aiSummaryNotification has not changed', () => {
494
+ const previous = {transcribe: {aiSummaryNotification: false}};
495
+ const current = {transcribe: {aiSummaryNotification: false}};
496
+ const {updates} = ControlsUtils.getControls(previous, current);
497
+ assert.equal(updates.hasAiSummaryNotificationChanged, false);
498
+ });
499
+
500
+ it('returns true when aiSummaryNotification changes from false to true', () => {
501
+ const previous = {transcribe: {aiSummaryNotification: false}};
502
+ const current = {transcribe: {aiSummaryNotification: true}};
503
+ const {updates} = ControlsUtils.getControls(previous, current);
504
+ assert.equal(updates.hasAiSummaryNotificationChanged, true);
505
+ });
506
+
507
+ it('returns true when aiSummaryNotification changes from undefined to true', () => {
508
+ const previous = {transcribe: undefined};
509
+ const current = {transcribe: {aiSummaryNotification: true}};
510
+ const {updates} = ControlsUtils.getControls(previous, current);
511
+ assert.equal(updates.hasAiSummaryNotificationChanged, true);
512
+ });
513
+
514
+ it('parses aiSummaryNotification into the transcribe block', () => {
515
+ const controls = {transcribe: {transcribing: false, caption: false, aiSummaryNotification: true}};
516
+ const parsed = ControlsUtils.parse(controls);
517
+ assert.equal(parsed.transcribe.aiSummaryNotification, true);
518
+ });
519
+ });
520
+
492
521
  describe('videoEnabled', () => {
493
522
  const testVideoEnabled = (oldControls, newControls, updatedProperty) => {
494
523
  const result = ControlsUtils.getControls(oldControls, newControls);
@@ -1459,6 +1459,34 @@ describe('plugin-meetings', () => {
1459
1459
  );
1460
1460
  });
1461
1461
 
1462
+ it('should emit CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED when aiSummaryNotification changes', () => {
1463
+ locusInfo.emitScoped = sinon.stub();
1464
+ locusInfo.controls = {
1465
+ transcribe: {
1466
+ transcribing: false,
1467
+ caption: false,
1468
+ aiSummaryNotification: false,
1469
+ },
1470
+ };
1471
+ newControls.transcribe.transcribing = false;
1472
+ newControls.transcribe.caption = false;
1473
+ newControls.transcribe.aiSummaryNotification = true;
1474
+
1475
+ locusInfo.updateControls(newControls);
1476
+
1477
+ assert.calledWith(
1478
+ locusInfo.emitScoped,
1479
+ {
1480
+ file: 'locus-info',
1481
+ function: 'updateControls',
1482
+ },
1483
+ LOCUSINFO.EVENTS.CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,
1484
+ {
1485
+ aiSummaryNotification: true,
1486
+ }
1487
+ );
1488
+ });
1489
+
1462
1490
  it('should update the transcribe spoken language', () => {
1463
1491
  locusInfo.emitScoped = sinon.stub();
1464
1492
  locusInfo.controls = {
@@ -10770,6 +10770,24 @@ describe('plugin-meetings', () => {
10770
10770
  );
10771
10771
  });
10772
10772
 
10773
+ it('listens to MEETING_CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED', async () => {
10774
+ const aiSummaryNotification = {example: 'value'};
10775
+
10776
+ await meeting.locusInfo.emitScoped(
10777
+ {function: 'test', file: 'test'},
10778
+ LOCUSINFO.EVENTS.CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,
10779
+ {aiSummaryNotification}
10780
+ );
10781
+
10782
+ assert.calledWith(
10783
+ TriggerProxy.trigger,
10784
+ meeting,
10785
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
10786
+ EVENT_TRIGGERS.MEETING_CONTROLS_AI_SUMMARY_NOTIFICATION_UPDATED,
10787
+ {aiSummaryNotification}
10788
+ );
10789
+ });
10790
+
10773
10791
  it('listens to MEETING_CONTROLS_MEETING_FULL_UPDATED', async () => {
10774
10792
  const state = {example: 'value'};
10775
10793