@webex/plugin-meetings 3.0.0-beta.146 → 3.0.0-beta.148

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.
Files changed (60) hide show
  1. package/dist/annotation/index.js +0 -2
  2. package/dist/annotation/index.js.map +1 -1
  3. package/dist/breakouts/breakout.js +1 -1
  4. package/dist/breakouts/index.js +1 -1
  5. package/dist/common/errors/webex-errors.js +3 -2
  6. package/dist/common/errors/webex-errors.js.map +1 -1
  7. package/dist/config.js +1 -7
  8. package/dist/config.js.map +1 -1
  9. package/dist/constants.js +7 -15
  10. package/dist/constants.js.map +1 -1
  11. package/dist/index.js +6 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/media/index.js +5 -56
  14. package/dist/media/index.js.map +1 -1
  15. package/dist/media/properties.js +15 -93
  16. package/dist/media/properties.js.map +1 -1
  17. package/dist/meeting/index.js +1112 -1873
  18. package/dist/meeting/index.js.map +1 -1
  19. package/dist/meeting/muteState.js +88 -184
  20. package/dist/meeting/muteState.js.map +1 -1
  21. package/dist/meeting/util.js +1 -23
  22. package/dist/meeting/util.js.map +1 -1
  23. package/dist/meetings/index.js +1 -2
  24. package/dist/meetings/index.js.map +1 -1
  25. package/dist/reconnection-manager/index.js +153 -134
  26. package/dist/reconnection-manager/index.js.map +1 -1
  27. package/dist/roap/index.js +8 -7
  28. package/dist/roap/index.js.map +1 -1
  29. package/dist/types/common/errors/webex-errors.d.ts +1 -1
  30. package/dist/types/config.d.ts +0 -6
  31. package/dist/types/constants.d.ts +1 -18
  32. package/dist/types/index.d.ts +1 -1
  33. package/dist/types/media/properties.d.ts +16 -38
  34. package/dist/types/meeting/index.d.ts +97 -353
  35. package/dist/types/meeting/muteState.d.ts +36 -38
  36. package/dist/types/meeting/util.d.ts +2 -4
  37. package/package.json +19 -19
  38. package/src/annotation/index.ts +0 -2
  39. package/src/common/errors/webex-errors.ts +6 -2
  40. package/src/config.ts +0 -6
  41. package/src/constants.ts +1 -14
  42. package/src/index.ts +1 -0
  43. package/src/media/index.ts +10 -53
  44. package/src/media/properties.ts +32 -92
  45. package/src/meeting/index.ts +544 -1567
  46. package/src/meeting/muteState.ts +87 -178
  47. package/src/meeting/util.ts +3 -24
  48. package/src/meetings/index.ts +0 -1
  49. package/src/reconnection-manager/index.ts +4 -9
  50. package/src/roap/index.ts +13 -14
  51. package/test/integration/spec/converged-space-meetings.js +59 -3
  52. package/test/integration/spec/journey.js +330 -256
  53. package/test/integration/spec/space-meeting.js +75 -3
  54. package/test/unit/spec/annotation/index.ts +4 -4
  55. package/test/unit/spec/meeting/index.js +811 -1367
  56. package/test/unit/spec/meeting/muteState.js +238 -394
  57. package/test/unit/spec/meeting/utils.js +2 -9
  58. package/test/unit/spec/multistream/receiveSlot.ts +1 -1
  59. package/test/unit/spec/roap/index.ts +2 -2
  60. package/test/utils/integrationTestUtils.js +5 -23
@@ -4,6 +4,7 @@ import { LocalTrack, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack,
4
4
  import { StatsAnalyzer } from '../statsAnalyzer';
5
5
  import NetworkQualityMonitor from '../networkQualityMonitor';
6
6
  import Roap from '../roap/index';
7
+ import { type BundlePolicy } from '../media';
7
8
  import MediaProperties from '../media/properties';
8
9
  import ReconnectionManager from '../reconnection-manager';
9
10
  import MeetingRequest from './request';
@@ -11,19 +12,34 @@ import Members from '../members/index';
11
12
  import Transcription from '../transcription';
12
13
  import { ReceiveSlotManager } from '../multistream/receiveSlotManager';
13
14
  import { MediaRequestManager } from '../multistream/mediaRequestManager';
14
- import { RemoteMediaManager } from '../multistream/remoteMediaManager';
15
+ import { Configuration as RemoteMediaManagerConfiguration, RemoteMediaManager } from '../multistream/remoteMediaManager';
15
16
  import { ReactionServerType, SkinToneType } from '../reactions/reactions.type';
16
17
  import InMeetingActions from './in-meeting-actions';
17
18
  import RecordingController from '../recording-controller';
18
19
  import ControlsOptionsManager from '../controls-options-manager';
19
20
  import { LocusMediaRequest } from './locusMediaRequest';
20
21
  import { AnnotationInfo } from '../annotation/annotation.types';
22
+ export type LocalTracks = {
23
+ microphone?: LocalMicrophoneTrack;
24
+ camera?: LocalCameraTrack;
25
+ screenShare?: {
26
+ audio?: LocalTrack;
27
+ video?: LocalDisplayTrack;
28
+ };
29
+ annotationInfo?: AnnotationInfo;
30
+ };
31
+ export type AddMediaOptions = {
32
+ localTracks?: LocalTracks;
33
+ audioEnabled?: boolean;
34
+ videoEnabled?: boolean;
35
+ receiveShare?: boolean;
36
+ remoteMediaManagerConfig?: RemoteMediaManagerConfiguration;
37
+ bundlePolicy?: BundlePolicy;
38
+ };
21
39
  export declare const MEDIA_UPDATE_TYPE: {
22
- ALL: string;
23
- AUDIO: string;
24
- VIDEO: string;
25
- SHARE: string;
40
+ TRANSCODED_MEDIA_CONNECTION: string;
26
41
  LAMBDA: string;
42
+ UPDATE_MEDIA: string;
27
43
  };
28
44
  /**
29
45
  * MediaDirection
@@ -36,15 +52,6 @@ export declare const MEDIA_UPDATE_TYPE: {
36
52
  * @property {boolean} receiveShare
37
53
  * @property {boolean} isSharing
38
54
  */
39
- /**
40
- * AudioVideo
41
- * @typedef {Object} AudioVideo
42
- * @property {Object} audio
43
- * @property {String} audio.deviceId
44
- * @property {Object} video
45
- * @property {String} video.deviceId
46
- * @property {String} video.localVideoQuality // [240p, 360p, 480p, 720p, 1080p]
47
- */
48
55
  /**
49
56
  * SharePreferences
50
57
  * @typedef {Object} SharePreferences
@@ -58,19 +65,11 @@ export declare const MEDIA_UPDATE_TYPE: {
58
65
  * @property {String} [pin]
59
66
  * @property {Boolean} [moderator]
60
67
  * @property {String|Object} [meetingQuality]
61
- * @property {String} [meetingQuality.local]
62
68
  * @property {String} [meetingQuality.remote]
63
69
  * @property {Boolean} [rejoin]
64
70
  * @property {Boolean} [enableMultistream]
65
71
  * @property {String} [correlationId]
66
72
  */
67
- /**
68
- * SendOptions
69
- * @typedef {Object} SendOptions
70
- * @property {Boolean} sendAudio
71
- * @property {Boolean} sendVideo
72
- * @property {Boolean} sendShare
73
- */
74
73
  /**
75
74
  * Recording
76
75
  * @typedef {Object} Recording
@@ -380,6 +379,7 @@ export default class Meeting extends StatelessWebexPlugin {
380
379
  state: any;
381
380
  localAudioTrackMuteStateHandler: (event: TrackMuteEvent) => void;
382
381
  localVideoTrackMuteStateHandler: (event: TrackMuteEvent) => void;
382
+ underlyingLocalTrackChangeHandler: () => void;
383
383
  roles: any[];
384
384
  environment: string;
385
385
  namespace: string;
@@ -582,6 +582,13 @@ export default class Meeting extends StatelessWebexPlugin {
582
582
  * @memberof Meeting
583
583
  */
584
584
  private setupLocusControlsListener;
585
+ /**
586
+ * Trigger annotation info update event
587
+ @returns {undefined}
588
+ @param {object} contentShare
589
+ @param {object} previousContentShare
590
+ */
591
+ private triggerAnnotationInfoEvent;
585
592
  /**
586
593
  * Set up the locus info media shares listener
587
594
  * update content and whiteboard sharing id value for members, and updates the member
@@ -730,48 +737,6 @@ export default class Meeting extends StatelessWebexPlugin {
730
737
  * @memberof Meeting
731
738
  */
732
739
  getMembers(): Members;
733
- /**
734
- * Truthy when a meeting has an audio connection established
735
- * @returns {Boolean} true if meeting audio is connected otherwise false
736
- * @public
737
- * @memberof Meeting
738
- */
739
- isAudioConnected(): boolean;
740
- /**
741
- * Convenience function to tell whether a meeting is muted
742
- * @returns {Boolean} if meeting audio muted or not
743
- * @public
744
- * @memberof Meeting
745
- */
746
- isAudioMuted(): any;
747
- /**
748
- * Convenience function to tell if the end user last changed the audio state
749
- * @returns {Boolean} if audio was manipulated by the end user
750
- * @public
751
- * @memberof Meeting
752
- */
753
- isAudioSelf(): any;
754
- /**
755
- * Truthy when a meeting has a video connection established
756
- * @returns {Boolean} true if meeting video connected otherwise false
757
- * @public
758
- * @memberof Meeting
759
- */
760
- isVideoConnected(): boolean;
761
- /**
762
- * Convenience function to tell whether video is muted
763
- * @returns {Boolean} if meeting video is muted or not
764
- * @public
765
- * @memberof Meeting
766
- */
767
- isVideoMuted(): any;
768
- /**
769
- * Convenience function to tell whether the end user changed the video state
770
- * @returns {Boolean} if meeting video is muted or not
771
- * @public
772
- * @memberof Meeting
773
- */
774
- isVideoSelf(): any;
775
740
  /**
776
741
  * Sets the meeting info on the class instance
777
742
  * @param {Object} meetingInfo
@@ -830,15 +795,6 @@ export default class Meeting extends StatelessWebexPlugin {
830
795
  * @memberof Meeting
831
796
  */
832
797
  uploadLogs(options?: object): void;
833
- /**
834
- * Removes remote audio and video stream on the class instance and triggers an event
835
- * to developers
836
- * @returns {undefined}
837
- * @public
838
- * @memberof Meeting
839
- * @deprecated after v1.89.3
840
- */
841
- unsetRemoteStream(): void;
842
798
  /**
843
799
  * Removes remote audio, video and share tracks from class instance's mediaProperties
844
800
  * @returns {undefined}
@@ -861,76 +817,30 @@ export default class Meeting extends StatelessWebexPlugin {
861
817
  */
862
818
  closeRemoteTracks(): Promise<[any, any, any]>;
863
819
  /**
864
- * Emits the 'media:ready' event with a local stream that consists of 1 local audio and 1 local video track
865
- * @returns {undefined}
866
- * @private
867
- * @memberof Meeting
868
- */
869
- private sendLocalMediaReadyEvent;
870
- /**
871
- * Sets the local audio track on the class and emits an event to the developer
872
- * @param {MediaStreamTrack} rawAudioTrack
873
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
874
- * @returns {undefined}
875
- * @private
876
- * @memberof Meeting
820
+ * Stores the reference to a new microphone track, sets up the required event listeners
821
+ * on it, cleans up previous track, etc.
822
+ *
823
+ * @param {LocalMicrophoneTrack | null} localTrack local microphone track
824
+ * @returns {Promise<void>}
877
825
  */
878
826
  private setLocalAudioTrack;
879
827
  /**
880
- * Sets the local video track on the class and emits an event to the developer
881
- * @param {MediaStreamTrack} rawVideoTrack
882
- * @param {Boolean} emitEvent if true, a media ready event is emitted to the developer
883
- * @returns {undefined}
884
- * @private
885
- * @memberof Meeting
828
+ * Stores the reference to a new camera track, sets up the required event listeners
829
+ * on it, cleans up previous track, etc.
830
+ *
831
+ * @param {LocalCameraTrack | null} localTrack local camera track
832
+ * @returns {Promise<void>}
886
833
  */
887
834
  private setLocalVideoTrack;
888
835
  /**
889
- * Sets the local media stream on the class and emits an event to the developer
890
- * @param {Stream} localStream the local media stream
891
- * @returns {undefined}
892
- * @public
893
- * @memberof Meeting
894
- */
895
- setLocalTracks(localStream: any): void;
896
- /**
897
- * Sets the local media stream on the class and emits an event to the developer
898
- * @param {MediaStreamTrack} rawLocalShareTrack the local share media track
899
- * @returns {undefined}
900
- * @public
901
- * @memberof Meeting
902
- */
903
- setLocalShareTrack(rawLocalShareTrack: MediaStreamTrack | null): void;
904
- /**
905
- * Closes the local stream from the class and emits an event to the developer
906
- * @returns {undefined}
907
- * @event media:stopped
908
- * @public
909
- * @memberof Meeting
910
- */
911
- closeLocalStream(): any;
912
- /**
913
- * Closes the local stream from the class and emits an event to the developer
914
- * @returns {undefined}
915
- * @event media:stopped
916
- * @public
917
- * @memberof Meeting
918
- */
919
- closeLocalShare(): any;
920
- /**
921
- * Removes the local stream from the class and emits an event to the developer
922
- * @returns {undefined}
923
- * @public
924
- * @memberof Meeting
925
- */
926
- unsetLocalVideoTrack(): void;
927
- /**
928
- * Removes the local share from the class and emits an event to the developer
929
- * @returns {undefined}
930
- * @public
931
- * @memberof Meeting
836
+ * Stores the reference to a new screen share track, sets up the required event listeners
837
+ * on it, cleans up previous track, etc.
838
+ * It also sends the floor grant/release request.
839
+ *
840
+ * @param {LocalDisplayTrack | undefined} localDisplayTrack local camera track
841
+ * @returns {Promise<void>}
932
842
  */
933
- unsetLocalShareTrack(): void;
843
+ private setLocalShareTrack;
934
844
  /**
935
845
  * sets up listner for mercury event
936
846
  * @returns {undefined}
@@ -963,63 +873,25 @@ export default class Meeting extends StatelessWebexPlugin {
963
873
  * @memberof Meeting
964
874
  */
965
875
  private setCorrelationId;
966
- /**
967
- * Mute the audio for a meeting
968
- * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set
969
- * @public
970
- * @memberof Meeting
971
- */
972
- muteAudio(): any;
973
- /**
974
- * Unmute meeting audio
975
- * @returns {Promise} resolves data from muting audio {mute, self} or rejects if there is no audio set
976
- * @public
977
- * @memberof Meeting
978
- */
979
- unmuteAudio(): any;
980
- /**
981
- * Mute the video for a meeting
982
- * @returns {Promise} resolves data from muting video {mute, self} or rejects if there is no video set
983
- * @public
984
- * @memberof Meeting
985
- */
986
- muteVideo(): any;
987
- /**
988
- * Unmute meeting video
989
- * @returns {Promise} resolves data from muting video {mute, self} or rejects if there is no video set
990
- * @public
991
- * @memberof Meeting
992
- */
993
- unmuteVideo(): any;
994
876
  /**
995
877
  * Shorthand function to join AND set up media
996
878
  * @param {Object} options - options to join with media
997
879
  * @param {JoinOptions} [options.joinOptions] - see #join()
998
- * @param {MediaDirection} options.mediaSettings - see #addMedia()
999
- * @param {AudioVideo} [options.audioVideoOptions] - see #getMediaStreams()
1000
- * @returns {Promise} -- {join: see join(), media: see addMedia(), local: see getMediaStreams()}
880
+ * @param {MediaDirection} [options.mediaOptions] - see #addMedia()
881
+ * @returns {Promise} -- {join: see join(), media: see addMedia()}
1001
882
  * @public
1002
883
  * @memberof Meeting
1003
884
  * @example
1004
885
  * joinWithMedia({
1005
886
  * joinOptions: {resourceId: 'resourceId' },
1006
- * mediaSettings: {
1007
- * sendAudio: true,
1008
- * sendVideo: true,
1009
- * sendShare: false,
1010
- * receiveVideo:true,
1011
- * receiveAudio: true,
1012
- * receiveShare: true
1013
- * }
1014
- * audioVideoOptions: {
1015
- * audio: 'audioDeviceId',
1016
- * video: 'videoDeviceId'
1017
- * }})
887
+ * mediaOptions: {
888
+ * localTracks: { microphone: microphoneTrack, camera: cameraTrack }
889
+ * }
890
+ * })
1018
891
  */
1019
892
  joinWithMedia(options?: {
1020
893
  joinOptions?: any;
1021
- mediaSettings: any;
1022
- audioVideoOptions?: any;
894
+ mediaOptions?: AddMediaOptions;
1023
895
  }): any;
1024
896
  /**
1025
897
  * Initiates the reconnection of the media in the meeting
@@ -1148,38 +1020,6 @@ export default class Meeting extends StatelessWebexPlugin {
1148
1020
  * @memberof Meeting
1149
1021
  */
1150
1022
  moveFrom(resourceId: string): any;
1151
- /**
1152
- * Get local media streams based on options passed
1153
- *
1154
- * NOTE: this method can only be used with transcoded meetings, not with multistream meetings
1155
- *
1156
- * @param {MediaDirection} mediaDirection A configurable options object for joining a meeting
1157
- * @param {AudioVideo} [audioVideo] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1158
- * @param {SharePreferences} [sharePreferences] audio/video object to set audioinput and videoinput devices, see #Media.getUserMedia
1159
- * @returns {Promise} see #Media.getUserMedia
1160
- * @public
1161
- * @todo should be static, or moved so can be called outside of a meeting
1162
- * @memberof Meeting
1163
- */
1164
- getMediaStreams: (mediaDirection: any, audioVideo?: any, sharePreferences?: any) => any;
1165
- /**
1166
- * Checks if the machine has at least one audio or video device
1167
- * @param {Object} options
1168
- * @param {Boolean} options.sendAudio
1169
- * @param {Boolean} options.sendVideo
1170
- * @returns {Object}
1171
- * @memberof Meetings
1172
- */
1173
- getSupportedDevices: ({ sendAudio, sendVideo, }: {
1174
- sendAudio: boolean;
1175
- sendVideo: boolean;
1176
- }) => any;
1177
- /**
1178
- * Get the devices from the Media module
1179
- * @returns {Promise} resolves to an array of DeviceInfo
1180
- * @memberof Meetings
1181
- */
1182
- getDevices: () => any;
1183
1023
  /**
1184
1024
  * Handles ROAP_FAILURE event from the webrtc media connection
1185
1025
  *
@@ -1197,13 +1037,13 @@ export default class Meeting extends StatelessWebexPlugin {
1197
1037
  setupStatsAnalyzerEventHandlers: () => void;
1198
1038
  getMediaConnectionDebugId(): string;
1199
1039
  /**
1200
- * Creates a webrtc media connection
1040
+ * Creates a webrtc media connection and publishes tracks to it
1201
1041
  *
1202
1042
  * @param {Object} turnServerInfo TURN server information
1203
1043
  * @param {BundlePolicy} [bundlePolicy] Bundle policy settings
1204
1044
  * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
1205
1045
  */
1206
- createMediaConnection(turnServerInfo: any, bundlePolicy: any): any;
1046
+ private createMediaConnection;
1207
1047
  /**
1208
1048
  * Listens for an event emitted by eventEmitter and emits it from the meeting object
1209
1049
  *
@@ -1215,19 +1055,14 @@ export default class Meeting extends StatelessWebexPlugin {
1215
1055
  */
1216
1056
  forwardEvent(eventEmitter: any, eventTypeToForward: any, meetingEventType: any): void;
1217
1057
  /**
1218
- * Specify joining via audio (option: pstn), video, screenshare
1219
- * @param {Object} options A configurable options object for joining a meeting
1220
- * @param {Object} options.resourceId pass the deviceId
1221
- * @param {MediaDirection} options.mediaSettings pass media options
1222
- * @param {MediaStream} options.localStream
1223
- * @param {MediaStream} options.localShare
1224
- * @param {BundlePolicy} options.bundlePolicy bundle policy for multistream meetings
1225
- * @param {RemoteMediaManagerConfig} options.remoteMediaManagerConfig only applies if multistream is enabled
1058
+ * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
1059
+ *
1060
+ * @param {AddMediaOptions} options
1226
1061
  * @returns {Promise}
1227
1062
  * @public
1228
1063
  * @memberof Meeting
1229
1064
  */
1230
- addMedia(options?: any): Promise<any>;
1065
+ addMedia(options?: AddMediaOptions): Promise<any>;
1231
1066
  /**
1232
1067
  * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
1233
1068
  * @returns {Boolean}
@@ -1258,94 +1093,25 @@ export default class Meeting extends StatelessWebexPlugin {
1258
1093
  */
1259
1094
  processNextQueuedMediaUpdate: () => void;
1260
1095
  /**
1261
- * A confluence of updateAudio, updateVideo, and updateShare
1262
- * this function re-establishes all of the media streams with new options
1263
- * @param {Object} options
1264
- * @param {MediaStream} options.localStream
1265
- * @param {MediaStream} options.localShare
1266
- * @param {MediaDirection} options.mediaSettings
1267
- * @returns {Promise}
1268
- * @public
1269
- * @memberof Meeting
1270
- */
1271
- updateMedia(options?: {
1272
- localStream?: MediaStream;
1273
- localShare?: MediaStream;
1274
- mediaSettings?: any;
1275
- }): any;
1276
- /**
1277
- * Update the main audio track with new parameters
1278
- *
1279
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1280
- *
1281
- * @param {Object} options
1282
- * @param {boolean} options.sendAudio
1283
- * @param {boolean} options.receiveAudio
1284
- * @param {MediaStream} options.stream Stream that contains the audio track to update
1285
- * @returns {Promise}
1286
- * @public
1287
- * @memberof Meeting
1288
- */
1289
- updateAudio(options: {
1290
- sendAudio: boolean;
1291
- receiveAudio: boolean;
1292
- stream: MediaStream;
1293
- }): Promise<unknown>;
1294
- /**
1295
- * Update the main video track with new parameters
1296
- *
1297
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1298
- *
1299
- * @param {Object} options
1300
- * @param {boolean} options.sendVideo
1301
- * @param {boolean} options.receiveVideo
1302
- * @param {MediaStream} options.stream Stream that contains the video track to update
1303
- * @returns {Promise}
1304
- * @public
1305
- * @memberof Meeting
1306
- */
1307
- updateVideo(options: {
1308
- sendVideo: boolean;
1309
- receiveVideo: boolean;
1310
- stream: MediaStream;
1311
- }): Promise<unknown>;
1312
- /**
1313
- * Internal function when stopping a share stream, cleanup
1314
- * @param {boolean} sendShare
1315
- * @param {boolean} previousShareStatus
1316
- * @returns {Promise}
1317
- * @private
1318
- * @memberof Meeting
1319
- */
1320
- private checkForStopShare;
1321
- /**
1322
- * Update the share streams, can be used to start sharing
1323
- *
1324
- * NOTE: this method can only be used with transcoded meetings, for multistream meetings use publishTrack()
1096
+ * Updates the media connection - it allows to enable/disable all audio/video/share in the meeting.
1097
+ * This does not affect the published tracks, so for example if a microphone track is published and
1098
+ * updateMedia({audioEnabled: false}) is called, the audio will not be sent or received anymore,
1099
+ * but the track's "published" state is not changed and when updateMedia({audioEnabled: true}) is called,
1100
+ * the sending of the audio from the same track will resume.
1325
1101
  *
1326
1102
  * @param {Object} options
1327
- * @param {boolean} options.sendShare
1328
- * @param {boolean} options.receiveShare
1103
+ * @param {boolean} options.audioEnabled [optional] enables/disables receiving and sending of main audio in the meeting
1104
+ * @param {boolean} options.videoEnabled [optional] enables/disables receiving and sending of main video in the meeting
1105
+ * @param {boolean} options.shareEnabled [optional] enables/disables receiving and sending of screen share in the meeting
1329
1106
  * @returns {Promise}
1330
1107
  * @public
1331
1108
  * @memberof Meeting
1332
1109
  */
1333
- updateShare(options: {
1334
- sendShare?: boolean;
1110
+ updateMedia(options: {
1111
+ audioEnabled?: boolean;
1112
+ videoEnabled?: boolean;
1335
1113
  receiveShare?: boolean;
1336
- stream?: any;
1337
- skipSignalingCheck?: boolean;
1338
- }): Promise<unknown>;
1339
- /**
1340
- * Do all the attach media pre set up before executing the actual attach
1341
- * @param {MediaStream} localStream
1342
- * @param {MediaStream} localShare
1343
- * @param {MediaDirection} mediaSettings
1344
- * @returns {undefined}
1345
- * @private
1346
- * @memberof Meeting
1347
- */
1348
- private preMedia;
1114
+ }): Promise<void>;
1349
1115
  /**
1350
1116
  * Acknowledge the meeting, outgoing or incoming
1351
1117
  * @param {String} type
@@ -1403,12 +1169,12 @@ export default class Meeting extends StatelessWebexPlugin {
1403
1169
  */
1404
1170
  private requestScreenShareFloor;
1405
1171
  /**
1406
- * Stops the screen share
1407
- * @returns {Promise} see #updateShare
1408
- * @public
1409
- * @memberof Meeting
1172
+ * Requests screen share floor if such request is pending.
1173
+ * It should be called whenever meeting state changes to JOINED
1174
+ *
1175
+ * @returns {void}
1410
1176
  */
1411
- stopShare(options?: {}): Promise<unknown>;
1177
+ private requestScreenShareFloorIfPending;
1412
1178
  /**
1413
1179
  * Sends a request to Locus to release the screen share floor.
1414
1180
  * @returns {Promise} see #meetingRequest.changeMeetingFloor
@@ -1524,45 +1290,12 @@ export default class Meeting extends StatelessWebexPlugin {
1524
1290
  height: number;
1525
1291
  };
1526
1292
  }): any;
1527
- /**
1528
- * Sets the quality of the local video stream
1529
- * @param {String} level {LOW|MEDIUM|HIGH}
1530
- * @returns {Promise<MediaStream>} localStream
1531
- */
1532
- setLocalVideoQuality(level: string): any;
1533
1293
  /**
1534
1294
  * Sets the quality level of the remote incoming media
1535
1295
  * @param {String} level {LOW|MEDIUM|HIGH}
1536
1296
  * @returns {Promise}
1537
1297
  */
1538
- setRemoteQualityLevel(level: string): any;
1539
- /**
1540
- * This is deprecated, please use setLocalVideoQuality for setting local and setRemoteQualityLevel for remote
1541
- * @param {String} level {LOW|MEDIUM|HIGH}
1542
- * @returns {Promise}
1543
- * @deprecated After FHD support
1544
- */
1545
- setMeetingQuality(level: string): any;
1546
- /**
1547
- *
1548
- * NOTE: this method can only be used with transcoded meetings, for multistream use publishTrack()
1549
- *
1550
- * @param {Object} options parameter
1551
- * @param {Boolean} options.sendAudio send audio from the display share
1552
- * @param {Boolean} options.sendShare send video from the display share
1553
- * @param {Object} options.sharePreferences
1554
- * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video
1555
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}
1556
- * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
1557
- * @returns {Promise}
1558
- */
1559
- shareScreen(options?: {
1560
- sendAudio: boolean;
1561
- sendShare: boolean;
1562
- sharePreferences: {
1563
- shareConstraints: MediaTrackConstraints;
1564
- };
1565
- }): any;
1298
+ setRemoteQualityLevel(level: string): Promise<void>;
1566
1299
  /**
1567
1300
  * Functionality for when a share is ended.
1568
1301
  * @private
@@ -1740,21 +1473,32 @@ export default class Meeting extends StatelessWebexPlugin {
1740
1473
  * @returns {Promise}
1741
1474
  */
1742
1475
  enableMusicMode(shouldEnableMusicMode: boolean): Promise<void>;
1476
+ /** Updates the tracks being sent on the transcoded media connection
1477
+ *
1478
+ * @returns {Promise<void>}
1479
+ */
1480
+ private updateTranscodedMediaConnection;
1481
+ /**
1482
+ * Publishes a track.
1483
+ *
1484
+ * @param {LocalTrack} track to publish
1485
+ * @returns {Promise}
1486
+ */
1487
+ private publishTrack;
1488
+ /**
1489
+ * Un-publishes a track.
1490
+ *
1491
+ * @param {LocalTrack} track to unpublish
1492
+ * @returns {Promise}
1493
+ */
1494
+ private unpublishTrack;
1743
1495
  /**
1744
1496
  * Publishes specified local tracks in the meeting
1745
1497
  *
1746
1498
  * @param {Object} tracks
1747
1499
  * @returns {Promise}
1748
1500
  */
1749
- publishTracks(tracks: {
1750
- microphone?: LocalMicrophoneTrack;
1751
- camera?: LocalCameraTrack;
1752
- screenShare: {
1753
- audio?: LocalTrack;
1754
- video?: LocalDisplayTrack;
1755
- };
1756
- annotationInfo?: AnnotationInfo;
1757
- }): Promise<void>;
1501
+ publishTracks(tracks: LocalTracks): Promise<void>;
1758
1502
  /**
1759
1503
  * Un-publishes specified local tracks in the meeting
1760
1504
  *