@webex/plugin-meetings 2.29.5 → 2.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,6 +29,7 @@ This is a plugin for the Cisco Webex JS SDK . Please see our [developer portal](
29
29
  - Version `0.109.0` - Participant email has been removed to reduce PII. Please use participant identity (`members.membersCollection.members[id].participant.identity`) to lookup participant details via the [/people](https://developer.webex.com/docs/api/v1/people/get-person-details) endpoint.
30
30
 
31
31
  ## API Docs and Sample App
32
+
32
33
  API Docs: https://webex.github.io/webex-js-sdk/api/
33
34
  Hosted Sample App: https://webex.github.io/webex-js-sdk/samples/browser-plugin-meetings/
34
35
  See https://github.com/webex/webex-js-sdk/tree/master/docs/samples/browser-plugin-meetings for the sample app code vs the readme
@@ -42,7 +43,7 @@ These setup actions are handled with the `register` function.
42
43
  This function registers the device, connects web sockets, and listens for meeting events.
43
44
 
44
45
  ```js
45
- webex.meetings.register()
46
+ webex.meetings.register();
46
47
  ```
47
48
 
48
49
  #### Device Unregistration
@@ -51,7 +52,7 @@ The inverse of the `register()` function is available as well.
51
52
  This function stops listening for meeting events, disconnects from web sockets and unregisters the device.
52
53
 
53
54
  ```js
54
- webex.meetings.unregister()
55
+ webex.meetings.unregister();
55
56
  ```
56
57
 
57
58
  #### Creating a basic meeting
@@ -94,6 +95,7 @@ return webex.meetings.create(locusObj, 'LOCUS_ID').then((meeting) ==> {...});
94
95
  #### Meetings
95
96
 
96
97
  ##### List Active Meetings
98
+
97
99
  We want to sync our meetings collection with the server.
98
100
 
99
101
  ```js
@@ -108,15 +110,16 @@ webex.meetings.syncMeetings().then(() => {
108
110
  ##### Get a Meeting
109
111
 
110
112
  ```js
111
- webex.meetings.getMeetingByType('SIP_URI', sipUri)
113
+ webex.meetings.getMeetingByType('SIP_URI', sipUri);
112
114
  ```
113
115
 
114
116
  ##### Properties
117
+
115
118
  ```js
116
- webex.meetings.personalMeetingRoom // the personal meeting room instance
117
- webex.meetings.reachability // the reachability instance, not initialized until after setReachability is called
118
- webex.meetings.meetingCollection // the collection of meetings instance
119
- webex.meetings.meetingInfo // the meeting info instance
119
+ webex.meetings.personalMeetingRoom; // the personal meeting room instance
120
+ webex.meetings.reachability; // the reachability instance, not initialized until after setReachability is called
121
+ webex.meetings.meetingCollection; // the collection of meetings instance
122
+ webex.meetings.meetingInfo; // the meeting info instance
120
123
  ```
121
124
 
122
125
  ##### Media
@@ -134,16 +137,19 @@ const mediaSettings = {
134
137
  receiveShare: true,
135
138
  sendVideo: true,
136
139
  sendAudio: true,
137
- sendShare: false
140
+ sendShare: false,
138
141
  };
139
142
 
140
- const myStreams = {}
141
- meeting.getMediaStreams(mediaSettings).then(([localStream, localShare]) => {
142
- return {localStream, localShare};
143
- }).then((streams) => {
144
- myStreams.localStream = streams.localStream
145
- myStreams.localShare = streams.localShare
146
- });
143
+ const myStreams = {};
144
+ meeting
145
+ .getMediaStreams(mediaSettings)
146
+ .then(([localStream, localShare]) => {
147
+ return {localStream, localShare};
148
+ })
149
+ .then((streams) => {
150
+ myStreams.localStream = streams.localStream;
151
+ myStreams.localShare = streams.localShare;
152
+ });
147
153
  ```
148
154
 
149
155
  This local stream is now ready to be added to the DOM for a self preview via:
@@ -161,32 +167,34 @@ document.getElementById('localvideo').srcObject = myStreams.localStream;
161
167
  Once you have your local streams and shares, you need to add the media to the meeting with the `addMedia` function.
162
168
 
163
169
  ```js
164
- meeting.addMedia({
165
- localShare,
166
- localStream,
167
- mediaSettings
168
- }).then((mediaResponse) => {
169
- // do something once you know media has been completed
170
- });
170
+ meeting
171
+ .addMedia({
172
+ localShare,
173
+ localStream,
174
+ mediaSettings,
175
+ })
176
+ .then((mediaResponse) => {
177
+ // do something once you know media has been completed
178
+ });
171
179
  ```
172
180
 
173
181
  #### Join a meeting
174
182
 
175
183
  ##### Basic Join
184
+
176
185
  One can join a meeting without adding a media to just be present in the meeting without send/receive
177
186
  Once a meeting object has been created, to start it, simply `join` it.
187
+
178
188
  ```javascript
179
189
  let destination = `obiwan@example.com`; // email example
180
- return webex.meetings
181
- .create(destination)
182
- .then((meeting) => {
183
- activeMeeting = meeting;
184
- // attach listeners or other actions
185
- activeMeeting.join().then(() => {
186
- // now the meeting is joined!
187
- // now you can addMedia
188
- });
190
+ return webex.meetings.create(destination).then((meeting) => {
191
+ activeMeeting = meeting;
192
+ // attach listeners or other actions
193
+ activeMeeting.join().then(() => {
194
+ // now the meeting is joined!
195
+ // now you can addMedia
189
196
  });
197
+ });
190
198
  ```
191
199
 
192
200
  ##### Full Example
@@ -351,7 +359,9 @@ meeting.on('meeting:receiveTranscription:stopped', () => {});
351
359
 
352
360
  await meeting.join({receiveTranscription: true});
353
361
  ```
362
+
354
363
  ##### Microphone, Speaker and Camera
364
+
355
365
  Select a different device than the default:
356
366
 
357
367
  ```js
@@ -418,11 +428,13 @@ meeting.getMediaStreams(media, {audio, video}).then(...)
418
428
  ```
419
429
 
420
430
  ###### Changing remote audio output
431
+
421
432
  ```js
422
433
  // Attach audio output device to video element using device/sink ID.
423
434
  function attachSinkId(element, sinkId) {
424
435
  if (typeof element.sinkId !== 'undefined') {
425
- element.setSinkId(sinkId)
436
+ element
437
+ .setSinkId(sinkId)
426
438
  .then(() => {
427
439
  console.log(`Success, audio output device attached: ${sinkId}`);
428
440
  })
@@ -436,8 +448,7 @@ function attachSinkId(element, sinkId) {
436
448
  // Jump back to first output device in the list as it's the default.
437
449
  audioOutputSelect.selectedIndex = 0;
438
450
  });
439
- }
440
- else {
451
+ } else {
441
452
  console.warn('Browser does not support output device selection.');
442
453
  }
443
454
  }
@@ -448,6 +459,7 @@ audioOutputSelect.onchange = function () {
448
459
  ```
449
460
 
450
461
  ##### Record
462
+
451
463
  ```js
452
464
  // you can only pause if recording
453
465
  // you can only start recording if not recording
@@ -465,71 +477,87 @@ meeting.stopRecording();
465
477
  ```
466
478
 
467
479
  ##### Mute Audio or Video
480
+
468
481
  ```js
469
482
  meeting.muteAudio();
470
483
  meeting.muteVideo();
471
484
  ```
472
485
 
473
486
  ##### Unmute Audio or Video
487
+
474
488
  ```js
475
489
  meeting.unmuteAudio();
476
490
  meeting.unmuteVideo();
477
491
  ```
478
492
 
479
493
  ##### Start Sending a Share
494
+
480
495
  ```js
481
496
  meeting.shareScreen();
482
497
  ```
483
498
 
484
499
  ##### Stop Sending a Share
500
+
485
501
  ```js
486
502
  meeting.stopShare();
487
503
  ```
488
504
 
489
505
  ##### Update Audio/Video Streams
506
+
490
507
  Use this if you want to change the actual streams send and receive for audio or video component separately; `updateAudio` and `updateVideo` is for the developer to add and remove the streams completely.
508
+
491
509
  ```js
492
510
  //video
493
- if (media.sendVideo) {
494
- meeting.getMediaStreams({sendVideo: true}, {video: videoSelect.value ? {deviceId: {exact: videoSelect.value}} : media.sendVideo})
495
- .then(([localStream]) => meeting.updateVideo({
511
+ if (media.sendVideo) {
512
+ meeting
513
+ .getMediaStreams(
514
+ {sendVideo: true},
515
+ {video: videoSelect.value ? {deviceId: {exact: videoSelect.value}} : media.sendVideo}
516
+ )
517
+ .then(([localStream]) =>
518
+ meeting.updateVideo({
496
519
  stream: localStream,
497
520
  sendVideo: media.sendVideo,
498
- receiveVideo: media.receiveVideo
499
- }));
500
- }
501
- else {
502
- meeting.updateVideo({
503
- sendVideo: media.sendVideo,
504
- receiveVideo: media.receiveVideo
505
- });
506
- }
521
+ receiveVideo: media.receiveVideo,
522
+ })
523
+ );
524
+ } else {
525
+ meeting.updateVideo({
526
+ sendVideo: media.sendVideo,
527
+ receiveVideo: media.receiveVideo,
528
+ });
529
+ }
507
530
  //audio
508
- if (media.sendAudio) {
509
- meeting.getMediaStreams(media, {audio: audioInputSelect.value ? {deviceId: {exact: audioInputSelect.value}} : media.sendAudio})
510
- .then(([localStream]) => meeting.updateAudio({
531
+ if (media.sendAudio) {
532
+ meeting
533
+ .getMediaStreams(media, {
534
+ audio: audioInputSelect.value ? {deviceId: {exact: audioInputSelect.value}} : media.sendAudio,
535
+ })
536
+ .then(([localStream]) =>
537
+ meeting.updateAudio({
511
538
  stream: localStream,
512
539
  sendAudio: media.sendAudio,
513
- receiveAudio: media.receiveAudio
514
- }));
515
- }
516
- else {
517
- meeting.updateAudio({
518
- sendAudio: media.sendAudio,
519
- receiveAudio: media.receiveAudio
520
- });
521
- }
540
+ receiveAudio: media.receiveAudio,
541
+ })
542
+ );
543
+ } else {
544
+ meeting.updateAudio({
545
+ sendAudio: media.sendAudio,
546
+ receiveAudio: media.receiveAudio,
547
+ });
548
+ }
522
549
  //all in one
523
- meeting.getMediaStreams(media, {audio, video})
524
- .then(([localStream, localShare]) => meeting.updateMedia({
525
- mediaSettings: media,
526
- localStream,
527
- localShare
528
- }));
550
+ meeting.getMediaStreams(media, {audio, video}).then(([localStream, localShare]) =>
551
+ meeting.updateMedia({
552
+ mediaSettings: media,
553
+ localStream,
554
+ localShare,
555
+ })
556
+ );
529
557
  ```
530
558
 
531
-
532
559
  ##### Accessing media directly (outside of a meeting)
560
+
533
561
  You can also directly access the following media properties that are not on a meeting instance
534
562
 
535
563
  ```
@@ -539,24 +567,29 @@ this.media.getUserMedia(mediaSetting, audioVideo, sharePreferences, config)
539
567
  See the [Media](https://github.com/webex/webex-js-sdk/blob/master/packages/node_modules/%40webex/plugin-meetings/src/media/index.js) util file for method signatures.
540
568
 
541
569
  ##### Leave a Meeting
570
+
542
571
  To leave a meeting, simply call leave
572
+
543
573
  ```js
544
574
  myMeeting.leave();
545
575
  ```
546
576
 
547
577
  ##### Lock/Unlock a Meeting
578
+
548
579
  ```js
549
580
  meeting.lockMeeting();
550
581
  meeting.unlockMeeting();
551
582
  ```
552
583
 
553
584
  ##### Transfer Host
585
+
554
586
  ```js
555
587
  const hostMemberId = ...;
556
588
  meeting.transfer(hostMemberId);
557
589
  ```
558
590
 
559
591
  ##### Check User Actions
592
+
560
593
  ```js
561
594
  meeting.inMeetingActions.get();
562
595
  {
@@ -572,6 +605,7 @@ meeting.inMeetingActions.get();
572
605
  canRaiseHand: boolean,
573
606
  canLowerAllHands: boolean,
574
607
  canLowerSomeoneElsesHand: boolean,
608
+ bothLeaveAndEndMeetingAvailable: boolean,
575
609
  }
576
610
  ```
577
611
 
@@ -604,9 +638,11 @@ webex.meetings.personalMeetingRoom.get().then((pmr) => {
604
638
  ```
605
639
 
606
640
  #### Usage of Webex Devices
641
+
607
642
  For details on how to use the devices see https://github.com/webex/webex-js-sdk/tree/master/packages/node_modules/%40webex/plugin-device-manager
608
643
 
609
644
  ##### Leave a Meeting Using a Device
645
+
610
646
  ```js
611
647
  const resourceId = ...;
612
648
 
@@ -616,6 +652,7 @@ meeting.leave({resourceId}).then((res) => {
616
652
  ```
617
653
 
618
654
  ##### Leave a Meeting While Paired to the Device, Keep Device in Meeting
655
+
619
656
  ```js
620
657
  meeting.leave().then((res) => {
621
658
  console.log(`successful leave, ${res}`);
@@ -623,6 +660,7 @@ meeting.leave().then((res) => {
623
660
  ```
624
661
 
625
662
  ##### Move Meeting To Paired Device
663
+
626
664
  ```js
627
665
  const resourceId = ...
628
666
 
@@ -633,6 +671,7 @@ meeting.moveTo(resourceId).then((res) => {
633
671
  ```
634
672
 
635
673
  ##### Move Meeting from Paired Device
674
+
636
675
  ```js
637
676
  const resourceId = ...
638
677
 
@@ -642,6 +681,7 @@ meeting.moveFrom(resourceId).then((res) => {
642
681
  ```
643
682
 
644
683
  ##### Start Wireless Share
684
+
645
685
  ```js
646
686
  const deviceId = ...
647
687
  // create the meeting
@@ -674,23 +714,27 @@ meeting.getMediaStreams({
674
714
  ```
675
715
 
676
716
  ##### End Wireless Share
717
+
677
718
  ```js
678
719
  meeting.leave();
679
720
  ```
680
721
 
681
722
  ##### Reconnect a Meeting Media
723
+
682
724
  Warning: not necessary to use manually, internally the sdk listens to mercury reconnect events to determine for a reconnection
725
+
683
726
  ```js
684
727
  meeting.reconnect();
685
728
  ```
686
729
 
687
730
  #### Scheduled Meetings
688
- For scheduled meetings see https://github.com/webex/webex-js-sdk/tree/master/packages/node_modules/%40webex/internal-plugin-calendar
689
731
 
732
+ For scheduled meetings see https://github.com/webex/webex-js-sdk/tree/master/packages/node_modules/%40webex/internal-plugin-calendar
690
733
 
691
734
  #### Member
692
735
 
693
736
  ##### Properties
737
+
694
738
  ```javascript
695
739
  member.participant ... // Object server participant object, advanced use only
696
740
  member.id ... // String key for storing
@@ -718,9 +762,11 @@ member.isModeratorAssignmentProhibited ... // Boolean
718
762
  ```
719
763
 
720
764
  #### Members
721
- You can access the members object on each individual meeting instance. It has some key events to listen to, and maintains what happens for members of a meeting with some key properties.
765
+
766
+ You can access the members object on each individual meeting instance. It has some key events to listen to, and maintains what happens for members of a meeting with some key properties.
722
767
 
723
768
  ##### Properties
769
+
724
770
  ```javascript
725
771
  meeting.members.membersCollection.members ... // the members collection, object {id0: member0, ... idN: memberN}
726
772
  meeting.members.locusUrl ... // current locusUrl being used
@@ -730,38 +776,40 @@ meeting.members.mediaShareContentId ... // active content sharer id for the meet
730
776
  ```
731
777
 
732
778
  ##### Functions
779
+
733
780
  ```javascript
734
781
  // You can add a guest to the meeting by inviting them, this is proxied by meeting.invite
735
782
  // use an emailAddress and a boolean value alertIfActive to notify server side (usually true)
736
- meeting.members.addMember(emailAddress, alertIfActive)
783
+ meeting.members.addMember(emailAddress, alertIfActive);
737
784
 
738
785
  // You can admit the guest to the meeting once they are waiting in the lobby, you can do this in bulk, proxied by meeting.admit
739
786
  // use member ids, can be singular, but has to be put into an array
740
- meeting.members.admitMembers([memberIds])
787
+ meeting.members.admitMembers([memberIds]);
741
788
 
742
789
  // You can remove a member from the meeting by booting them, this is proxied by meeting.remove
743
790
  // use a memberId string
744
- meeting.members.removeMember(memberId)
791
+ meeting.members.removeMember(memberId);
745
792
 
746
793
  // You can audio mute a member from the meeting by calling to mute them, this is proxied by meeting.mute
747
794
  // use a memberId string and a boolean to mute or not, default to true
748
795
  // mute them
749
- meeting.members.muteMember(memberId)
796
+ meeting.members.muteMember(memberId);
750
797
 
751
798
  // You can raise or lower the hand of a member from the meeting
752
799
  // use a memberId string and a "raise" boolean to raise or lower, default to true ("raise the hand")
753
- meeting.members.raiseOrLowerHand(memberId)
800
+ meeting.members.raiseOrLowerHand(memberId);
754
801
 
755
802
  // You can lower all hands in a meeting
756
803
  // use a memberId string to indicate who is requesting lowering all hands
757
- meeting.members.lowerAllHands(requestingMemberId)
804
+ meeting.members.lowerAllHands(requestingMemberId);
758
805
 
759
806
  // You can transfer the host role to another member in the meeting, this is proxied by meeting.transfer
760
807
  // use a memberId string and a moderator boolean to transfer or not, default to true
761
- meeting.members.transferHostToMember(memberId)
808
+ meeting.members.transferHostToMember(memberId);
762
809
  ```
763
810
 
764
811
  ##### Events
812
+
765
813
  ```javascript
766
814
  // members collection updated
767
815
  meeting.members.on('members:update', (payload) => {
@@ -791,44 +839,48 @@ meeting.members.on('members:content:update', (payload) => {
791
839
  meeting.members.on('members:host:update', (payload) => {
792
840
  console.log(`who started hosting: ${payload.activeHostId};`);
793
841
  console.log(`who stopped hosting: ${payload.endedHostId};`);
794
- })
842
+ });
795
843
  // self updates, not typically used
796
844
  meeting.members.on('members:self:update', (payload) => {
797
845
  console.log(`active self id: ${payload.activeSelfId};`);
798
846
  console.log(`ended self Id: ${payload.endedSelfId};`);
799
- })
847
+ });
800
848
  ```
801
849
 
802
850
  ## Events
803
851
 
804
852
  ### Meetings Events
853
+
805
854
  ```js
806
855
  webex.meetings.on(...)
807
856
  ```
808
- | Event Name | Description |
809
- |---|---|
810
- | `meetings:ready` | Fired when the plugin has been instantiated and is ready for action! |
811
- | `meeting:added` | Fired when a meeting has been added to the collection, either incoming, or outgoing, can be joined |
812
- | `meeting:removed` | Fired when a meeting has been deleted from the collection, this meeting cannot be rejoined |
813
- |`media:codec:loaded`| Fired when H.264 media codec has been loaded in the browser. Does not have a payload.|
814
- |`media:codec:missing`| Fired when H.264 media codec appears to be missing from the browser. Does not have a payload. |
815
- |---|---|
857
+
858
+ | Event Name | Description |
859
+ | --------------------- | -------------------------------------------------------------------------------------------------- |
860
+ | `meetings:ready` | Fired when the plugin has been instantiated and is ready for action! |
861
+ | `meeting:added` | Fired when a meeting has been added to the collection, either incoming, or outgoing, can be joined |
862
+ | `meeting:removed` | Fired when a meeting has been deleted from the collection, this meeting cannot be rejoined |
863
+ | `media:codec:loaded` | Fired when H.264 media codec has been loaded in the browser. Does not have a payload. |
864
+ | `media:codec:missing` | Fired when H.264 media codec appears to be missing from the browser. Does not have a payload. |
865
+ | --- | --- |
816
866
 
817
867
  `meetings:ready` does not have a payload
818
868
 
819
869
  `meeting:added` has the following payload
870
+
820
871
  ```js
821
872
  {
822
- meetingId // the uuid of the meeting removed
823
- type // string type can be INCOMING, JOIN, or MEETING
873
+ meetingId; // the uuid of the meeting removed
874
+ type; // string type can be INCOMING, JOIN, or MEETING
824
875
  }
825
876
  ```
826
877
 
827
878
  `meeting:removed` has the following payload
879
+
828
880
  ```js
829
881
  {
830
- meetingId // the uuid of the meeting removed
831
- response // a propagated server response
882
+ meetingId; // the uuid of the meeting removed
883
+ response; // a propagated server response
832
884
  }
833
885
  ```
834
886
 
@@ -838,41 +890,41 @@ webex.meetings.on(...)
838
890
  meeting.on(...)
839
891
  ```
840
892
 
841
- | Event Name | Description |
842
- |---|---|
843
- | `meetings:ready` | Fired when the meetings plugin has been successfully initialized |
844
- | `meetings:registered` | Fired when the meetings plugin has registered the device and is listening to websocket events |
845
- | `meetings:unregistered` | Fired when the meetings plugin has been disconnected from websockets and unregistered as a device |
846
- | `media:ready` | Fired when remote or local media has been acquired |
847
- | `media:stopped` | Fired when remote or local media has been torn down |
848
- | `meeting:media:local:start` | Fired when local media has started sending bytes |
849
- | `meeting:media:remote:start` | Fired when local media has started receiving bytes from the remote audio or video streams |
850
- | `meeting:alerted` | Fired when locus was notified that user received meeting |
851
- | `meeting:ringing` | Fired when meeting should have a ringing sound on repeat |
852
- | `meeting:ringingStop` | Fired when meeting should stop a ringing sound |
853
- | `meeting:startedSharingLocal` | Fired when local screen sharing was started |
854
- | `meeting:stoppedSharingLocal` | Fired when local screen sharing ends |
855
- | `meeting:startedSharingRemote` | Fired when remote screen sharing was started |
856
- | `meeting:stoppedSharingRemote` | Fired when remote screen sharing ends |
857
- | `meeting:self:lobbyWaiting` | Fired when user has entered the lobby for a PMR or the like |
858
- | `meeting:self:guestAdmitted` | Fired when user has entered the meeting after waiting to be admitted from join |
859
- | `meeting:self:mutedByOthers` | Fired when user has been audio muted by another in the muting |
860
- | `meeting:reconnectionStarting` | Fired when a reconnect begins |
861
- | `meeting:reconnectionSuccess` | Fired when the media was reconnected successfully |
862
- | `meeting:reconnectionFailure` | Fired when the media failed to reconnect, user will have to rejoin and connect |
863
- | `meeting:unlocked` | Fired when the meeting was unlocked by the host, for webex type meetings only |
864
- | `meeting:locked` | Fired when the meeting was locked by the host, for webex type meetings only |
865
- | `meeting:actionsUpdate` | Fired when the user has new actions they can take, such as lock, unlock, transferHost |
866
- | `meeting:logUpload:success` | Fired when the meeting logs were successfully uploaded |
867
- | `meeting:logUpload:failure` | Fired when the meeting logs failed to upload |
868
- | `meeting:recording:started` | Fired when member starts recording |
869
- | `meeting:recording:stopped` | Fired when member stops recording |
870
- | `meeting:recording:paused` | Fired when member pauses recording |
871
- | `meeting:recording:resumed` | Fired when member resumes recording |
872
- | `meeting:receiveTranscription:started` | Fired when transcription is received |
873
- | `meeting:receiveTranscription:stopped` | Fired when transcription has stopped from being received |
874
- | `meeting:meetingContainer:update` | Fired when the meetingContainerUrl is updated |
875
- |---|---|
893
+ | Event Name | Description |
894
+ | -------------------------------------- | ------------------------------------------------------------------------------------------------- |
895
+ | `meetings:ready` | Fired when the meetings plugin has been successfully initialized |
896
+ | `meetings:registered` | Fired when the meetings plugin has registered the device and is listening to websocket events |
897
+ | `meetings:unregistered` | Fired when the meetings plugin has been disconnected from websockets and unregistered as a device |
898
+ | `media:ready` | Fired when remote or local media has been acquired |
899
+ | `media:stopped` | Fired when remote or local media has been torn down |
900
+ | `meeting:media:local:start` | Fired when local media has started sending bytes |
901
+ | `meeting:media:remote:start` | Fired when local media has started receiving bytes from the remote audio or video streams |
902
+ | `meeting:alerted` | Fired when locus was notified that user received meeting |
903
+ | `meeting:ringing` | Fired when meeting should have a ringing sound on repeat |
904
+ | `meeting:ringingStop` | Fired when meeting should stop a ringing sound |
905
+ | `meeting:startedSharingLocal` | Fired when local screen sharing was started |
906
+ | `meeting:stoppedSharingLocal` | Fired when local screen sharing ends |
907
+ | `meeting:startedSharingRemote` | Fired when remote screen sharing was started |
908
+ | `meeting:stoppedSharingRemote` | Fired when remote screen sharing ends |
909
+ | `meeting:self:lobbyWaiting` | Fired when user has entered the lobby for a PMR or the like |
910
+ | `meeting:self:guestAdmitted` | Fired when user has entered the meeting after waiting to be admitted from join |
911
+ | `meeting:self:mutedByOthers` | Fired when user has been audio muted by another in the muting |
912
+ | `meeting:reconnectionStarting` | Fired when a reconnect begins |
913
+ | `meeting:reconnectionSuccess` | Fired when the media was reconnected successfully |
914
+ | `meeting:reconnectionFailure` | Fired when the media failed to reconnect, user will have to rejoin and connect |
915
+ | `meeting:unlocked` | Fired when the meeting was unlocked by the host, for webex type meetings only |
916
+ | `meeting:locked` | Fired when the meeting was locked by the host, for webex type meetings only |
917
+ | `meeting:actionsUpdate` | Fired when the user has new actions they can take, such as lock, unlock, transferHost |
918
+ | `meeting:logUpload:success` | Fired when the meeting logs were successfully uploaded |
919
+ | `meeting:logUpload:failure` | Fired when the meeting logs failed to upload |
920
+ | `meeting:recording:started` | Fired when member starts recording |
921
+ | `meeting:recording:stopped` | Fired when member stops recording |
922
+ | `meeting:recording:paused` | Fired when member pauses recording |
923
+ | `meeting:recording:resumed` | Fired when member resumes recording |
924
+ | `meeting:receiveTranscription:started` | Fired when transcription is received |
925
+ | `meeting:receiveTranscription:stopped` | Fired when transcription has stopped from being received |
926
+ | `meeting:meetingContainer:update` | Fired when the meetingContainerUrl is updated |
927
+ | --- | --- |
876
928
 
877
929
  `meetings:ready` does not have a payload
878
930
 
@@ -881,10 +933,11 @@ meeting.on(...)
881
933
  `meetings:unregistered` does not have a payload
882
934
 
883
935
  `media:ready` has the following payload
936
+
884
937
  ```javascript
885
938
  {
886
939
  type, // local or remote
887
- stream; // the MediaStream
940
+ stream; // the MediaStream
888
941
  }
889
942
  // usage
890
943
  meeting.on('media:ready', (media) => {
@@ -910,6 +963,7 @@ meeting.on('media:ready', (media) => {
910
963
  ```
911
964
 
912
965
  `media:stopped` has the following payload
966
+
913
967
  ```javascript
914
968
  {
915
969
  type, // local or remote
@@ -937,6 +991,7 @@ meeting.on('media:stopped', (media) => {
937
991
  `meeting:alerted` does not have a payload
938
992
 
939
993
  `meeting:ringing` has the following payload
994
+
940
995
  ```js
941
996
  {
942
997
  type // INCOMING or JOIN
@@ -945,6 +1000,7 @@ meeting.on('media:stopped', (media) => {
945
1000
  ```
946
1001
 
947
1002
  `meeting:ringingStop` has the following payload
1003
+
948
1004
  ```js
949
1005
  {
950
1006
  type // Object {remoteAnswered: boolean, remoteDeclined: boolean}
@@ -957,57 +1013,65 @@ meeting.on('media:stopped', (media) => {
957
1013
  `meeting:stoppedSharingLocal` does not have a payload
958
1014
 
959
1015
  `meeting:self:lobbyWaiting` has the following payload
1016
+
960
1017
  ```js
961
1018
  {
962
- payload // self object
1019
+ payload; // self object
963
1020
  }
964
1021
  ```
965
1022
 
966
1023
  `meeting:self:guestAdmitted` has the following payload
1024
+
967
1025
  ```js
968
1026
  {
969
- payload // self object
1027
+ payload; // self object
970
1028
  }
971
1029
  ```
972
1030
 
973
1031
  `meeting:self:mutedByOthers` has the following payload
1032
+
974
1033
  ```js
975
1034
  {
976
- payload // self object
1035
+ payload; // self object
977
1036
  }
978
1037
  ```
979
1038
 
980
1039
  `meeting:reconnectionStarting` does not have a payload
981
1040
 
982
1041
  `meeting:reconnectionSuccess` has the following payload
1042
+
983
1043
  ```js
984
1044
  {
985
- reconnect // the media promise resolution
1045
+ reconnect; // the media promise resolution
986
1046
  }
987
1047
  ```
988
1048
 
989
1049
  `meeting:reconnectionFailure` has the following payload
1050
+
990
1051
  ```js
991
1052
  {
992
- error // the forwarded error from media
1053
+ error; // the forwarded error from media
993
1054
  }
994
1055
  ```
995
1056
 
996
1057
  `meeting:unlocked` has the following payload
1058
+
997
1059
  ```js
998
1060
  {
999
- info // info object
1061
+ info; // info object
1000
1062
  }
1001
1063
  ```
1002
1064
 
1003
1065
  `meeting:locked` has the following payload
1066
+
1004
1067
  ```js
1005
1068
  {
1006
- info // info object
1069
+ info; // info object
1007
1070
  }
1008
1071
  ```
1009
1072
 
1010
1073
  `meeting:actionsUpdate` has the following payload
1074
+
1011
1075
  ```js
1012
1076
  {
1013
1077
  canInviteNewParticipants, // boolean
@@ -1022,6 +1086,7 @@ meeting.on('media:stopped', (media) => {
1022
1086
  canRaiseHand, //boolean
1023
1087
  canLowerAllHands, //boolean
1024
1088
  canLowerSomeoneElsesHand, //boolean
1089
+ bothLeaveAndEndMeetingAvailable, //boolean
1025
1090
  }
1026
1091
  ```
1027
1092
 
@@ -1029,27 +1094,30 @@ meeting.on('media:stopped', (media) => {
1029
1094
  `meeting:recording:stopped`
1030
1095
  `meeting:recording:paused`
1031
1096
  `meeting:recording:resumed` have the following payload
1097
+
1032
1098
  ```js
1033
1099
  {
1034
- state // could be etiher `recording`, `idle` or `paused`
1035
- modifiedBy // user's decrypted ID who made an action
1036
- lastModified // when the action was made
1100
+ state; // could be etiher `recording`, `idle` or `paused`
1101
+ modifiedBy; // user's decrypted ID who made an action
1102
+ lastModified; // when the action was made
1037
1103
  }
1038
1104
  ```
1039
1105
 
1040
1106
  ### Event Caveats
1107
+
1041
1108
  ##### Remote screen share is not displayed if started before participant joins
1042
1109
 
1043
1110
  If you notice that the remote screen share is not being displayed to a participant when they join
1044
1111
  after a screen has already been shared, double-check that you are following the standard plugin-meeting workflow.
1045
1112
 
1046
1113
  Standard plugin-meeting workflow is as follows:
1114
+
1047
1115
  1. Set event listener for `media:ready`
1048
1116
  2. Call `join()`
1049
1117
  3. Call `addMedia()` with `options.mediaSettings.receiveShare=true`
1050
1118
  4. Wait to receive an event from `media:ready` with payload `type=remoteShare` that contains the remote share media stream
1051
1119
  5. Set `srcObject` of a `video` element in the application to the previously obtained media stream
1052
- (e.g. `document.getElementById('remote-screen').srcObject = media.stream`)
1120
+ (e.g. `document.getElementById('remote-screen').srcObject = media.stream`)
1053
1121
 
1054
1122
  In most cases this will resolve the issue though an extra step could be to
1055
1123
  use `meeting.shareStatus` to control whether to show the video element or not.
@@ -1076,8 +1144,8 @@ There are several events submitted by this package that you can subscribe to.
1076
1144
  | `members:self:update` | Fired when a member in the collection has a changed self value |
1077
1145
  |---|---|
1078
1146
 
1079
-
1080
1147
  `members:update` has the following payload
1148
+
1081
1149
  ```js
1082
1150
  {
1083
1151
  delta: { // the changes to the members list
@@ -1089,26 +1157,29 @@ There are several events submitted by this package that you can subscribe to.
1089
1157
  ```
1090
1158
 
1091
1159
  `members:content:update` has the following payload
1160
+
1092
1161
  ```js
1093
1162
  {
1094
- activeContentSharingId // the member id
1095
- endedContentSharingId // the member id
1163
+ activeContentSharingId; // the member id
1164
+ endedContentSharingId; // the member id
1096
1165
  }
1097
1166
  ```
1098
1167
 
1099
1168
  `members:host:update` has the following payload
1169
+
1100
1170
  ```js
1101
1171
  {
1102
- activeHostId // the member id
1103
- endedHostId // the member id
1172
+ activeHostId; // the member id
1173
+ endedHostId; // the member id
1104
1174
  }
1105
1175
  ```
1106
1176
 
1107
1177
  `members:self:update` has the following payload
1178
+
1108
1179
  ```js
1109
1180
  {
1110
- activeSelfId // the member id
1111
- endedSelfId // the member id
1181
+ activeSelfId; // the member id
1182
+ endedSelfId; // the member id
1112
1183
  }
1113
1184
  ```
1114
1185
 
@@ -1116,7 +1187,6 @@ There are several events submitted by this package that you can subscribe to.
1116
1187
 
1117
1188
  To use `webpack-dev-server` to load this package, run `yarn run samples:serve`.
1118
1189
 
1119
-
1120
1190
  Files placed in the `docs/samples/browser-plugin-meetings` folder will be served statically.
1121
1191
 
1122
1192
  Files in the `src` folder will be compiled, bundled, and served as a static asset at `bundle.js` inside that directory.