@webex/plugin-meetings 3.1.0 → 3.2.0

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 (205) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/common/errors/reconnection-not-started.js +46 -0
  4. package/dist/common/errors/reconnection-not-started.js.map +1 -0
  5. package/dist/constants.js +16 -5
  6. package/dist/constants.js.map +1 -1
  7. package/dist/index.js +80 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/interpretation/index.js +1 -1
  10. package/dist/interpretation/siLanguage.js +1 -1
  11. package/dist/locus-info/controlsUtils.js +7 -1
  12. package/dist/locus-info/controlsUtils.js.map +1 -1
  13. package/dist/locus-info/index.js +10 -0
  14. package/dist/locus-info/index.js.map +1 -1
  15. package/dist/media/properties.js +102 -57
  16. package/dist/media/properties.js.map +1 -1
  17. package/dist/mediaQualityMetrics/config.js +10 -10
  18. package/dist/mediaQualityMetrics/config.js.map +1 -1
  19. package/dist/meeting/in-meeting-actions.js +6 -0
  20. package/dist/meeting/in-meeting-actions.js.map +1 -1
  21. package/dist/meeting/index.js +564 -475
  22. package/dist/meeting/index.js.map +1 -1
  23. package/dist/meeting/locusMediaRequest.js +27 -0
  24. package/dist/meeting/locusMediaRequest.js.map +1 -1
  25. package/dist/meeting/util.js +9 -16
  26. package/dist/meeting/util.js.map +1 -1
  27. package/dist/meeting/voicea-meeting.js +37 -49
  28. package/dist/meeting/voicea-meeting.js.map +1 -1
  29. package/dist/meeting-info/util.js +304 -267
  30. package/dist/meeting-info/util.js.map +1 -1
  31. package/dist/meeting-info/utilv2.js +334 -298
  32. package/dist/meeting-info/utilv2.js.map +1 -1
  33. package/dist/meetings/index.js +12 -28
  34. package/dist/meetings/index.js.map +1 -1
  35. package/dist/reachability/index.js +88 -9
  36. package/dist/reachability/index.js.map +1 -1
  37. package/dist/reconnection-manager/index.js +138 -109
  38. package/dist/reconnection-manager/index.js.map +1 -1
  39. package/dist/roap/request.js +3 -27
  40. package/dist/roap/request.js.map +1 -1
  41. package/dist/statsAnalyzer/index.js +8 -2
  42. package/dist/statsAnalyzer/index.js.map +1 -1
  43. package/dist/statsAnalyzer/mqaUtil.js +17 -0
  44. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  45. package/dist/types/annotation/annotation.types.d.ts +42 -0
  46. package/dist/types/annotation/constants.d.ts +31 -0
  47. package/dist/types/annotation/index.d.ts +117 -0
  48. package/dist/types/breakouts/breakout.d.ts +8 -0
  49. package/dist/types/breakouts/collection.d.ts +5 -0
  50. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  51. package/dist/types/breakouts/events.d.ts +8 -0
  52. package/dist/types/breakouts/index.d.ts +5 -0
  53. package/dist/types/breakouts/request.d.ts +22 -0
  54. package/dist/types/breakouts/utils.d.ts +15 -0
  55. package/dist/types/common/browser-detection.d.ts +9 -0
  56. package/dist/types/common/collection.d.ts +48 -0
  57. package/dist/types/common/config.d.ts +2 -0
  58. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  59. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  60. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  61. package/dist/types/common/errors/media.d.ts +15 -0
  62. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  63. package/dist/types/common/errors/parameter.d.ts +15 -0
  64. package/dist/types/common/errors/password-error.d.ts +15 -0
  65. package/dist/types/common/errors/permission.d.ts +14 -0
  66. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  67. package/dist/types/common/errors/reconnection-not-started.d.ts +13 -0
  68. package/dist/types/common/errors/reconnection.d.ts +15 -0
  69. package/dist/types/common/errors/stats.d.ts +15 -0
  70. package/dist/types/common/errors/webex-errors.d.ts +93 -0
  71. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  72. package/dist/types/common/events/events-scope.d.ts +17 -0
  73. package/dist/types/common/events/events.d.ts +12 -0
  74. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  75. package/dist/types/common/events/util.d.ts +2 -0
  76. package/dist/types/common/logs/logger-config.d.ts +2 -0
  77. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  78. package/dist/types/common/logs/request.d.ts +36 -0
  79. package/dist/types/common/queue.d.ts +34 -0
  80. package/dist/types/config.d.ts +73 -0
  81. package/dist/types/constants.d.ts +1098 -0
  82. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  83. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  84. package/dist/types/controls-options-manager/index.d.ts +136 -0
  85. package/dist/types/controls-options-manager/types.d.ts +43 -0
  86. package/dist/types/controls-options-manager/util.d.ts +1 -0
  87. package/dist/types/index.d.ts +19 -0
  88. package/dist/types/interceptors/index.d.ts +2 -0
  89. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  90. package/dist/types/interpretation/collection.d.ts +5 -0
  91. package/dist/types/interpretation/index.d.ts +5 -0
  92. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  93. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  94. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  95. package/dist/types/locus-info/fullState.d.ts +2 -0
  96. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  97. package/dist/types/locus-info/index.d.ts +322 -0
  98. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  99. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  100. package/dist/types/locus-info/parser.d.ts +272 -0
  101. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  102. package/dist/types/media/MediaConnectionAwaiter.d.ts +61 -0
  103. package/dist/types/media/index.d.ts +34 -0
  104. package/dist/types/media/properties.d.ts +117 -0
  105. package/dist/types/media/util.d.ts +2 -0
  106. package/dist/types/mediaQualityMetrics/config.d.ts +247 -0
  107. package/dist/types/meeting/in-meeting-actions.d.ts +173 -0
  108. package/dist/types/meeting/index.d.ts +1832 -0
  109. package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
  110. package/dist/types/meeting/muteState.d.ts +178 -0
  111. package/dist/types/meeting/request.d.ts +295 -0
  112. package/dist/types/meeting/request.type.d.ts +11 -0
  113. package/dist/types/meeting/state.d.ts +9 -0
  114. package/dist/types/meeting/util.d.ts +122 -0
  115. package/dist/types/meeting/voicea-meeting.d.ts +17 -0
  116. package/dist/types/meeting-info/collection.d.ts +20 -0
  117. package/dist/types/meeting-info/index.d.ts +69 -0
  118. package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
  119. package/dist/types/meeting-info/request.d.ts +22 -0
  120. package/dist/types/meeting-info/util.d.ts +49 -0
  121. package/dist/types/meeting-info/utilv2.d.ts +65 -0
  122. package/dist/types/meetings/collection.d.ts +40 -0
  123. package/dist/types/meetings/index.d.ts +383 -0
  124. package/dist/types/meetings/meetings.types.d.ts +4 -0
  125. package/dist/types/meetings/request.d.ts +27 -0
  126. package/dist/types/meetings/util.d.ts +18 -0
  127. package/dist/types/member/index.d.ts +160 -0
  128. package/dist/types/member/types.d.ts +32 -0
  129. package/dist/types/member/util.d.ts +2 -0
  130. package/dist/types/members/collection.d.ts +29 -0
  131. package/dist/types/members/index.d.ts +353 -0
  132. package/dist/types/members/request.d.ts +114 -0
  133. package/dist/types/members/types.d.ts +25 -0
  134. package/dist/types/members/util.d.ts +215 -0
  135. package/dist/types/metrics/constants.d.ts +70 -0
  136. package/dist/types/metrics/index.d.ts +45 -0
  137. package/dist/types/multistream/mediaRequestManager.d.ts +119 -0
  138. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  139. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  140. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  141. package/dist/types/multistream/remoteMediaGroup.d.ts +49 -0
  142. package/dist/types/multistream/remoteMediaManager.d.ts +300 -0
  143. package/dist/types/multistream/sendSlotManager.d.ts +69 -0
  144. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  145. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  146. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  147. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  148. package/dist/types/reachability/clusterReachability.d.ts +110 -0
  149. package/dist/types/reachability/index.d.ts +120 -0
  150. package/dist/types/reachability/request.d.ts +39 -0
  151. package/dist/types/reachability/util.d.ts +15 -0
  152. package/dist/types/reactions/constants.d.ts +3 -0
  153. package/dist/types/reactions/reactions.d.ts +4 -0
  154. package/dist/types/reactions/reactions.type.d.ts +52 -0
  155. package/dist/types/reconnection-manager/index.d.ts +126 -0
  156. package/dist/types/recording-controller/enums.d.ts +7 -0
  157. package/dist/types/recording-controller/index.d.ts +207 -0
  158. package/dist/types/recording-controller/util.d.ts +14 -0
  159. package/dist/types/roap/index.d.ts +86 -0
  160. package/dist/types/roap/request.d.ts +39 -0
  161. package/dist/types/roap/turnDiscovery.d.ts +155 -0
  162. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  163. package/dist/types/rtcMetrics/index.d.ts +61 -0
  164. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  165. package/dist/types/statsAnalyzer/index.d.ts +217 -0
  166. package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
  167. package/dist/types/transcription/index.d.ts +64 -0
  168. package/dist/types/webinar/collection.d.ts +16 -0
  169. package/dist/types/webinar/index.d.ts +5 -0
  170. package/dist/webinar/index.js +1 -1
  171. package/package.json +22 -22
  172. package/src/common/errors/reconnection-not-started.ts +25 -0
  173. package/src/constants.ts +14 -5
  174. package/src/index.ts +30 -0
  175. package/src/locus-info/controlsUtils.ts +11 -0
  176. package/src/locus-info/index.ts +16 -0
  177. package/src/media/properties.ts +67 -15
  178. package/src/mediaQualityMetrics/config.ts +13 -7
  179. package/src/meeting/in-meeting-actions.ts +12 -0
  180. package/src/meeting/index.ts +144 -107
  181. package/src/meeting/locusMediaRequest.ts +31 -0
  182. package/src/meeting/util.ts +9 -16
  183. package/src/meeting/voicea-meeting.ts +44 -46
  184. package/src/meeting-info/util.ts +241 -233
  185. package/src/meeting-info/utilv2.ts +250 -244
  186. package/src/meetings/index.ts +15 -27
  187. package/src/reachability/index.ts +60 -0
  188. package/src/reconnection-manager/index.ts +128 -105
  189. package/src/roap/request.ts +1 -24
  190. package/src/statsAnalyzer/index.ts +10 -3
  191. package/src/statsAnalyzer/mqaUtil.ts +23 -0
  192. package/test/unit/spec/locus-info/controlsUtils.js +20 -0
  193. package/test/unit/spec/locus-info/index.js +21 -0
  194. package/test/unit/spec/media/properties.ts +145 -140
  195. package/test/unit/spec/meeting/in-meeting-actions.ts +6 -0
  196. package/test/unit/spec/meeting/index.js +271 -105
  197. package/test/unit/spec/meeting/locusMediaRequest.ts +49 -0
  198. package/test/unit/spec/meeting/utils.js +3 -10
  199. package/test/unit/spec/meeting/voicea-meeting.ts +5 -14
  200. package/test/unit/spec/meetings/index.js +59 -17
  201. package/test/unit/spec/reachability/index.ts +266 -0
  202. package/test/unit/spec/reconnection-manager/index.js +127 -39
  203. package/test/unit/spec/roap/request.ts +0 -37
  204. package/test/unit/spec/stats-analyzer/index.js +100 -8
  205. package/src/common/errors/reconnection-in-progress.ts +0 -8
@@ -0,0 +1,1832 @@
1
+ /// <reference types="node" />
2
+ import { StatelessWebexPlugin } from '@webex/webex-core';
3
+ import { ClientEvent, ClientEventLeaveReason } from '@webex/internal-plugin-metrics';
4
+ import { ClientEvent as RawClientEvent } from '@webex/event-dictionary-ts';
5
+ import { MediaType } from '@webex/internal-media-core';
6
+ import { LocalStream, LocalCameraStream, LocalDisplayStream, LocalSystemAudioStream, LocalMicrophoneStream } from '@webex/media-helpers';
7
+ import { StatsAnalyzer } from '../statsAnalyzer';
8
+ import NetworkQualityMonitor from '../networkQualityMonitor';
9
+ import Roap, { type TurnServerInfo, type TurnDiscoverySkipReason } from '../roap/index';
10
+ import { type BundlePolicy } from '../media';
11
+ import MediaProperties from '../media/properties';
12
+ import ReconnectionManager from '../reconnection-manager';
13
+ import MeetingRequest from './request';
14
+ import Members from '../members/index';
15
+ import { NETWORK_STATUS } from '../constants';
16
+ import { ReceiveSlotManager } from '../multistream/receiveSlotManager';
17
+ import { MediaRequestManager } from '../multistream/mediaRequestManager';
18
+ import { Configuration as RemoteMediaManagerConfiguration, RemoteMediaManager } from '../multistream/remoteMediaManager';
19
+ import { ReactionServerType, SkinToneType } from '../reactions/reactions.type';
20
+ import InMeetingActions from './in-meeting-actions';
21
+ import RecordingController from '../recording-controller';
22
+ import ControlsOptionsManager from '../controls-options-manager';
23
+ import { LocusMediaRequest } from './locusMediaRequest';
24
+ export type CaptionData = {
25
+ id: string;
26
+ isFinal: boolean;
27
+ translations: Array<string>;
28
+ text: string;
29
+ currentCaptionLanguage: string;
30
+ timestamp: string;
31
+ speaker: string;
32
+ };
33
+ export type Transcription = {
34
+ languageOptions: {
35
+ captionLanguages?: string;
36
+ maxLanguages?: number;
37
+ spokenLanguages?: Array<string>;
38
+ currentCaptionLanguage?: string;
39
+ requestedCaptionLanguage?: string;
40
+ currentSpokenLanguage?: string;
41
+ };
42
+ status: string;
43
+ isListening: boolean;
44
+ commandText: string;
45
+ captions: Array<CaptionData>;
46
+ showCaptionBox: boolean;
47
+ transcribingRequestStatus: string;
48
+ isCaptioning: boolean;
49
+ speakerProxy: Map<string, any>;
50
+ interimCaptions: Map<string, CaptionData>;
51
+ };
52
+ export type LocalStreams = {
53
+ microphone?: LocalMicrophoneStream;
54
+ camera?: LocalCameraStream;
55
+ screenShare?: {
56
+ audio?: LocalSystemAudioStream;
57
+ video?: LocalDisplayStream;
58
+ };
59
+ };
60
+ export type AddMediaOptions = {
61
+ localStreams?: LocalStreams;
62
+ audioEnabled?: boolean;
63
+ videoEnabled?: boolean;
64
+ shareAudioEnabled?: boolean;
65
+ shareVideoEnabled?: boolean;
66
+ remoteMediaManagerConfig?: RemoteMediaManagerConfiguration;
67
+ bundlePolicy?: BundlePolicy;
68
+ allowMediaInLobby?: boolean;
69
+ };
70
+ export type CallStateForMetrics = {
71
+ correlationId?: string;
72
+ joinTrigger?: string;
73
+ loginType?: string;
74
+ };
75
+ export declare const MEDIA_UPDATE_TYPE: {
76
+ TRANSCODED_MEDIA_CONNECTION: string;
77
+ SHARE_FLOOR_REQUEST: string;
78
+ UPDATE_MEDIA: string;
79
+ };
80
+ export declare enum ScreenShareFloorStatus {
81
+ PENDING = "floor_request_pending",
82
+ GRANTED = "floor_request_granted",
83
+ RELEASED = "floor_released"
84
+ }
85
+ type FetchMeetingInfoParams = {
86
+ password?: string;
87
+ captchaCode?: string;
88
+ extraParams?: Record<string, any>;
89
+ sendCAevents?: boolean;
90
+ };
91
+ /**
92
+ * MediaDirection
93
+ * @typedef {Object} MediaDirection
94
+ * @property {boolean} sendAudio
95
+ * @property {boolean} receiveAudio
96
+ * @property {boolean} sendVideo
97
+ * @property {boolean} receiveVideo
98
+ * @property {boolean} sendShare
99
+ * @property {boolean} receiveShare
100
+ * @property {boolean} isSharing
101
+ */
102
+ /**
103
+ * SharePreferences
104
+ * @typedef {Object} SharePreferences
105
+ * @property {Object} [shareConstraints]
106
+ * @property {Boolean} [highFrameRate]
107
+ */
108
+ /**
109
+ * JoinOptions
110
+ * @typedef {Object} JoinOptions
111
+ * @property {String} [resourceId]
112
+ * @property {String} [pin]
113
+ * @property {Boolean} [moderator]
114
+ * @property {String|Object} [meetingQuality]
115
+ * @property {String} [meetingQuality.remote]
116
+ * @property {Boolean} [rejoin]
117
+ * @property {Boolean} [enableMultistream]
118
+ */
119
+ /**
120
+ * Recording
121
+ * @typedef {Object} Recording
122
+ * @property {Object} state
123
+ * @property {String} modifiedBy
124
+ */
125
+ /**
126
+ * Meeting State Change Event
127
+ * Emitted when ever there is a meeting state change
128
+ * @event meeting:stateChange
129
+ * @instance
130
+ * @type {Object}
131
+ * @property {String} currentState current state of the meeting
132
+ * @property {String} previousState previous state of the meeting
133
+ * @memberof Meeting
134
+ */
135
+ /**
136
+ * Media Ready Event
137
+ * Emitted when a stream is ready to be rendered
138
+ * @event media:ready
139
+ * @instance
140
+ * @type {Object}
141
+ * @property {MediaStream} stream the media stream
142
+ * @property {String} type what type of stream, remote, local
143
+ * @memberof Meeting
144
+ */
145
+ /**
146
+ * Media Stopped Event
147
+ * Emitted when a stream has stopped sending
148
+ * @event media:stopped
149
+ * @instance
150
+ * @type {Object}
151
+ * @property {String} type what type of stream, remote, local
152
+ * @memberof Meeting
153
+ */
154
+ /**
155
+ * Meeting Ringing Event
156
+ * Emitted when this client should play a ringing sound, because this member is getting an incoming meeting
157
+ * or sending out an incoming meeting
158
+ * @event meeting:ringing
159
+ * @instance
160
+ * @type {Object}
161
+ * @property {String} type // INCOMING or JOIN
162
+ * @property {String} id
163
+ * @memberof Meeting
164
+ */
165
+ /**
166
+ * Meeting Ringing Stop Event
167
+ * Emitted when this client should stop playing a ringing sound
168
+ * @event meeting:ringingStop
169
+ * @instance
170
+ * @type {Object}
171
+ * @property {Object} type
172
+ * @property {Boolean} type.remoteAnswered
173
+ * @property {Boolean} type.remoteDeclined
174
+ * @property {String} id
175
+ * @memberof Meeting
176
+ */
177
+ /**
178
+ * Meeting Started Sharing Local Event
179
+ * Emitted when this member starts sharing
180
+ * @event meeting:startedSharingLocal
181
+ * @instance
182
+ * @type {Object}
183
+ * @memberof Meeting
184
+ */
185
+ /**
186
+ * Meeting Stopped Sharing Local Event
187
+ * Emitted when this member stops sharing
188
+ * @event meeting:stoppedSharingLocal
189
+ * @instance
190
+ * @type {Object}
191
+ * @memberof Meeting
192
+ */
193
+ /**
194
+ * Meeting Started Sharing Remote Event
195
+ * Emitted when remote sharing starts
196
+ * @event meeting:startedSharingRemote
197
+ * @instance
198
+ * @type {Object}
199
+ * @property {Boolean} memberId id of the meeting member that started screen share
200
+ * @property {String} url of this content share
201
+ * @property {String} shareInstanceId of this content share
202
+ * @property {Object} annotation Info of this content share
203
+ * @memberof Meeting
204
+ *
205
+ */
206
+ /**
207
+ * Meeting Stopped Sharing Remote Event
208
+ * Emitted when remote screen sharing ends
209
+ * @event meeting:stoppedSharingRemote
210
+ * @instance
211
+ * @type {Object}
212
+ * @memberof Meeting
213
+ */
214
+ /**
215
+ * Meeting Locked Event
216
+ * Emitted when a meeting is locked
217
+ * @event meeting:locked
218
+ * @instance
219
+ * @type {Object}
220
+ * @property {Object} info
221
+ * @memberof Meeting
222
+ */
223
+ /**
224
+ * Meeting Unlocked Event
225
+ * Emitted when a meeting is unlocked
226
+ * @event meeting:unlocked
227
+ * @instance
228
+ * @type {Object}
229
+ * @property {Object} info
230
+ * @memberof Meeting
231
+ */
232
+ /**
233
+ * Meeting Actions Update Event
234
+ * Emitted when a user can take actions on a meeting such as lock, unlock, assign host
235
+ * @event meeting:actionsUpdate
236
+ * @instance
237
+ * @type {Object}
238
+ * @property {Boolean} canLock
239
+ * @property {Boolean} canUnlock
240
+ * @property {Boolean} canAssignHost
241
+ * @memberof Meeting
242
+ */
243
+ /**
244
+ * Meeting Unmuted By Others Event
245
+ * Emitted when a member is unmuted by another member
246
+ * @event meeting:self:unmutedByOthers
247
+ * @instance
248
+ * @type {Object}
249
+ * @property {Object} payload
250
+ * @memberof Meeting
251
+ */
252
+ /**
253
+ * Meeting Muted By Others Event
254
+ * Emitted when a member is muted by another member
255
+ * @event meeting:self:mutedByOthers
256
+ * @instance
257
+ * @type {Object}
258
+ * @property {Object} payload
259
+ * @property {Boolean} payload.unmuteAllowed - whether the user is allowed to unmute self
260
+ * @memberof Meeting
261
+ */
262
+ /**
263
+ * Meeting Muted By Others Event
264
+ * Emitted when the host(moderator)/co-host requests a user to unmute
265
+ * @event meeting:self:requestedToUnmute
266
+ * @instance
267
+ * @type {Object}
268
+ * @property {Object} payload
269
+ * @memberof Meeting
270
+ */
271
+ /**
272
+ * Meeting Self Guest Admitted Event
273
+ * Emitted when a joined user get admitted to the meeting by another member or host
274
+ * @event meeting:self:guestAdmitted
275
+ * @instance
276
+ * @type {Object}
277
+ * @property {Object} payload
278
+ * @memberof Meeting
279
+ */
280
+ /**
281
+ * Meeting Self Lobby Waiting Event
282
+ * Emitted when joined user enters the lobby and is waiting for the webex meeting to begin
283
+ * @event meeting:self:lobbyWaiting
284
+ * @instance
285
+ * @type {Object}
286
+ * @property {Object} reason Reason why user left the meeting
287
+ * @memberof Meeting
288
+ */
289
+ /**
290
+ * Meeting Self Left State
291
+ * Emitted when user is inactive for more then 40 seconds, User can rejoin the meeting again
292
+ * @event meeting:self:left
293
+ * @instance
294
+ * @type {Object}
295
+ * @property {Object} payload
296
+ * @memberof Meeting
297
+ */
298
+ /**
299
+ * Reconnection Starting Event
300
+ * Emitted when reconnection of media to the active meeting was successful
301
+ * @event meeting:reconnectionStarting
302
+ * @instance
303
+ * @memberof Meeting
304
+ */
305
+ /**
306
+ * Reconnection Success Event
307
+ * Emitted when reconnection of media to the active meeting was successful
308
+ * @event meeting:reconnectionSuccess
309
+ * @instance
310
+ * @type {Object}
311
+ * @property {Object} reconnect
312
+ * @memberof Meeting
313
+ */
314
+ /**
315
+ * Reconnection Failure Event
316
+ * Emitted when reconnection of media to the active meeting was successful
317
+ * @event meeting:reconnectionFailure
318
+ * @instance
319
+ * @type {Object}
320
+ * @property {Error} error
321
+ * @memberof Meeting
322
+ */
323
+ /**
324
+ * Meeting network quality event
325
+ * Emitted on each interval of retrieving stats Analyzer data
326
+ * @event network:quality
327
+ * @type {Object}
328
+ * @property {string} mediaType {video|audio}
329
+ * @property {number} networkQualityScore - {1|0} 1 indicates acceptable uplink 0 indicates unacceptable uplink based on threshold
330
+ * @memberof Meeting
331
+ */
332
+ /**
333
+ * @description Meeting is the crux of the plugin
334
+ * @export
335
+ * @class Meeting
336
+ */
337
+ export default class Meeting extends StatelessWebexPlugin {
338
+ attrs: any;
339
+ audio: any;
340
+ breakouts: any;
341
+ simultaneousInterpretation: any;
342
+ annotation: any;
343
+ webinar: any;
344
+ conversationUrl: string;
345
+ callStateForMetrics: CallStateForMetrics;
346
+ destination: string;
347
+ destinationType: string;
348
+ deviceUrl: string;
349
+ hostId: string;
350
+ id: string;
351
+ isMultistream: boolean;
352
+ locusUrl: string;
353
+ mediaConnections: any[];
354
+ mediaId?: string;
355
+ meetingFiniteStateMachine: any;
356
+ meetingInfo: any;
357
+ meetingRequest: MeetingRequest;
358
+ members: Members;
359
+ options: object;
360
+ orgId: string;
361
+ owner: string;
362
+ partner: any;
363
+ policy: string;
364
+ reconnectionManager: ReconnectionManager;
365
+ resource: string;
366
+ roap: Roap;
367
+ roapSeq: number;
368
+ selfUrl?: string;
369
+ sipUri: string;
370
+ type: string;
371
+ userId: string;
372
+ video: any;
373
+ callEvents: any[];
374
+ datachannelUrl: string;
375
+ deferJoin: Promise<any>;
376
+ dialInDeviceStatus: string;
377
+ dialInUrl: string;
378
+ dialOutDeviceStatus: string;
379
+ dialOutUrl: string;
380
+ fetchMeetingInfoTimeoutId: NodeJS.Timeout;
381
+ floorGrantPending: boolean;
382
+ hasJoinedOnce: boolean;
383
+ hasWebsocketConnected: boolean;
384
+ inMeetingActions: InMeetingActions;
385
+ isLocalShareLive: boolean;
386
+ isRoapInProgress: boolean;
387
+ keepAliveTimerId: NodeJS.Timeout;
388
+ lastVideoLayoutInfo: any;
389
+ locusInfo: any;
390
+ locusMediaRequest?: LocusMediaRequest;
391
+ mediaProperties: MediaProperties;
392
+ mediaRequestManagers: {
393
+ audio: MediaRequestManager;
394
+ video: MediaRequestManager;
395
+ screenShareAudio: MediaRequestManager;
396
+ screenShareVideo: MediaRequestManager;
397
+ };
398
+ meetingInfoFailureReason: string;
399
+ meetingInfoFailureCode?: number;
400
+ meetingInfoExtraParams?: Record<string, any>;
401
+ networkQualityMonitor: NetworkQualityMonitor;
402
+ networkStatus?: NETWORK_STATUS;
403
+ passwordStatus: string;
404
+ queuedMediaUpdates: any[];
405
+ recording: any;
406
+ remoteMediaManager: RemoteMediaManager | null;
407
+ recordingController: RecordingController;
408
+ controlsOptionsManager: ControlsOptionsManager;
409
+ requiredCaptcha: any;
410
+ receiveSlotManager: ReceiveSlotManager;
411
+ selfUserPolicies: any;
412
+ enforceVBGImagesURL: string;
413
+ shareStatus: string;
414
+ screenShareFloorState: ScreenShareFloorStatus;
415
+ statsAnalyzer: StatsAnalyzer;
416
+ transcription: Transcription;
417
+ updateMediaConnections: (mediaConnections: any[]) => void;
418
+ userDisplayHints: any;
419
+ endCallInitJoinReq: any;
420
+ endJoinReqResp: any;
421
+ endLocalSDPGenRemoteSDPRecvDelay: any;
422
+ joinedWith: any;
423
+ locusId: any;
424
+ startCallInitJoinReq: any;
425
+ startJoinReqResp: any;
426
+ startLocalSDPGenRemoteSDPRecvDelay: any;
427
+ wirelessShare: any;
428
+ guest: any;
429
+ meetingJoinUrl: any;
430
+ meetingNumber: any;
431
+ meetingState: any;
432
+ permissionToken: string;
433
+ permissionTokenPayload: any;
434
+ permissionTokenReceivedLocalTime: number;
435
+ resourceId: any;
436
+ resourceUrl: string;
437
+ selfId: string;
438
+ state: any;
439
+ localAudioStreamMuteStateHandler: () => void;
440
+ localVideoStreamMuteStateHandler: () => void;
441
+ localOutputTrackChangeHandler: () => void;
442
+ roles: any[];
443
+ environment: string;
444
+ namespace: string;
445
+ allowMediaInLobby: boolean;
446
+ localShareInstanceId: string;
447
+ remoteShareInstanceId: string;
448
+ turnDiscoverySkippedReason: TurnDiscoverySkipReason;
449
+ turnServerUsed: boolean;
450
+ areVoiceaEventsSetup: boolean;
451
+ isMoveToInProgress: boolean;
452
+ voiceaListenerCallbacks: object;
453
+ private retriedWithTurnServer;
454
+ private sendSlotManager;
455
+ private deferSDPAnswer?;
456
+ private sdpResponseTimer?;
457
+ private hasMediaConnectionConnectedAtLeastOnce;
458
+ private joinWithMediaRetryInfo?;
459
+ /**
460
+ * @param {Object} attrs
461
+ * @param {Object} options
462
+ * @constructor
463
+ * @memberof Meeting
464
+ */
465
+ constructor(attrs: any, options: object);
466
+ /**
467
+ * returns meeting is joined
468
+ * @private
469
+ * @memberof Meeting
470
+ * @returns {Boolean}
471
+ */
472
+ private isJoined;
473
+ /**
474
+ * Returns whether this meeting is a Locus CALL
475
+ * @returns {Boolean}
476
+ */
477
+ isLocusCall(): boolean;
478
+ /**
479
+ * Getter - Returns callStateForMetrics.correlationId
480
+ * @returns {string}
481
+ */
482
+ get correlationId(): string;
483
+ /**
484
+ * Setter - sets callStateForMetrics.correlationId
485
+ * @param {string} correlationId
486
+ */
487
+ set correlationId(correlationId: string);
488
+ /**
489
+ * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
490
+ * @param {any} info
491
+ * @param {string} [meetingLookupUrl] Lookup url, defined when the meeting info fetched
492
+ * @returns {void}
493
+ */
494
+ private setMeetingInfo;
495
+ /**
496
+ * Add pre-fetched meeting info
497
+ *
498
+ * The passed meeting info should be be complete, e.g.: fetched after password or captcha provided
499
+ *
500
+ * @param {Object} meetingInfo - Complete meeting info
501
+ * @param {FetchMeetingInfoParams} fetchParams - Fetch parameters for validation
502
+ * @param {String|undefined} meetingLookupUrl - Lookup url, defined when the meeting info fetched
503
+ * @returns {Promise<void>}
504
+ */
505
+ injectMeetingInfo(meetingInfo: any, fetchParams: FetchMeetingInfoParams, meetingLookupUrl: string | undefined): Promise<void>;
506
+ /**
507
+ * Validate fetch parameters and clear the fetchMeetingInfoTimeout timeout
508
+ *
509
+ * @param {FetchMeetingInfoParams} fetchParams - fetch parameters for validation
510
+ * @param {String} caller - Name of the caller for logging
511
+ *
512
+ * @returns {Promise<void>}
513
+ * @private
514
+ */
515
+ private prepForFetchMeetingInfo;
516
+ /**
517
+ * Internal method for fetching meeting info
518
+ *
519
+ * @returns {Promise}
520
+ */
521
+ private fetchMeetingInfoInternal;
522
+ /**
523
+ * Refreshes the meeting info permission token (it's required for joining meetings)
524
+ *
525
+ * @param {string} [reason] used for metrics and logging purposes (optional)
526
+ * @returns {Promise}
527
+ */
528
+ refreshPermissionToken(reason?: string): Promise<void>;
529
+ /**
530
+ * Fetches meeting information.
531
+ * @param {Object} options
532
+ * @param {String} [options.password] optional
533
+ * @param {String} [options.captchaCode] optional
534
+ * @param {Boolean} [options.sendCAevents] optional - Whether to submit Call Analyzer events or not. Default: false.
535
+ * @public
536
+ * @memberof Meeting
537
+ * @returns {Promise}
538
+ */
539
+ fetchMeetingInfo(options: FetchMeetingInfoParams): Promise<void>;
540
+ /**
541
+ * Checks if the supplied password/host key is correct. It returns a promise with information whether the
542
+ * password and captcha code were correct or not.
543
+ * @param {String} password - this can be either a password or a host key, can be undefined if only captcha was required
544
+ * @param {String} captchaCode - can be undefined if captcha was not required by the server
545
+ * @param {Boolean} sendCAevents - whether Call Analyzer events should be sent when fetching meeting information
546
+ * @public
547
+ * @memberof Meeting
548
+ * @returns {Promise<{isPasswordValid: boolean, requiredCaptcha: boolean, failureReason: MEETING_INFO_FAILURE_REASON}>}
549
+ */
550
+ verifyPassword(password: string, captchaCode: string, sendCAevents?: boolean): Promise<{
551
+ isPasswordValid: boolean;
552
+ requiredCaptcha: any;
553
+ failureReason: string;
554
+ } | {
555
+ isPasswordValid: boolean;
556
+ requiredCaptcha: any;
557
+ failureReason: string;
558
+ }>;
559
+ /**
560
+ * Refreshes the captcha. As a result the meeting will have new captcha id, image and audio.
561
+ * If the refresh operation fails, meeting remains with the old captcha properties.
562
+ * @public
563
+ * @memberof Meeting
564
+ * @returns {Promise}
565
+ */
566
+ refreshCaptcha(): any;
567
+ /**
568
+ * Posts metrics event for this meeting. Allows the app to send Call Analyzer events.
569
+ * @param {String} eventName - Call Analyzer event
570
+ * @public
571
+ * @memberof Meeting
572
+ * @returns {Promise}
573
+ */
574
+ postMetrics(eventName: ClientEvent['name']): void;
575
+ /**
576
+ * Proxy function for all the listener set ups
577
+ * @returns {undefined}
578
+ * @private
579
+ * @memberof Meeting
580
+ */
581
+ private setUpLocusInfoListeners;
582
+ /**
583
+ * Set up the listeners for breakouts
584
+ * @returns {undefined}
585
+ * @private
586
+ * @memberof Meeting
587
+ */
588
+ setUpBreakoutsListener(): void;
589
+ /**
590
+ * Set up the listeners for interpretation
591
+ * @returns {undefined}
592
+ * @private
593
+ * @memberof Meeting
594
+ */
595
+ private setUpInterpretationListener;
596
+ /**
597
+ * Set up the listeners for captions
598
+ * @returns {undefined}
599
+ * @private
600
+ * @memberof Meeting
601
+ */
602
+ private setUpVoiceaListeners;
603
+ /**
604
+ * Set up the locus info listener for meetings disconnected due to inactivity
605
+ * @returns {undefined}
606
+ * @private
607
+ * @memberof Meeting
608
+ */
609
+ private setUpLocusInfoMediaInactiveListener;
610
+ /**
611
+ * Set up the locus info listener for assign host permissions on a meeting
612
+ * @returns {undefined}
613
+ * @private
614
+ * @memberof Meeting
615
+ */
616
+ private setUpLocusInfoAssignHostListener;
617
+ /**
618
+ * Set up the internal locus info full state object listener
619
+ * @returns {undefined}
620
+ * @private
621
+ * @memberof Meeting
622
+ */
623
+ private setUpLocusFullStateListener;
624
+ /**
625
+ * sets the network status on meeting object
626
+ * @param {NETWORK_STATUS} networkStatus
627
+ * @private
628
+ * @returns {undefined}
629
+ * @memberof Meeting
630
+ */
631
+ private setNetworkStatus;
632
+ /**
633
+ * Set up the locus info self listener
634
+ * update self value for members and updates the member
635
+ * notifies consumer with members:self:update {activeSelfId endedSelfId}
636
+ * @returns {undefined}
637
+ * @private
638
+ * @memberof Meeting
639
+ */
640
+ private setUpLocusSelfListener;
641
+ /**
642
+ * Notify any changes on the pstn devices
643
+ * @param {Object} payload
644
+ * @returns {undefined}
645
+ * @private
646
+ * @memberof Meeting
647
+ */
648
+ private pstnUpdate;
649
+ /**
650
+ * Set up the locus info host listener
651
+ * update host value for members and updates the member
652
+ * notifies consumer with members:host:update: {activeHostId, endedHostId}
653
+ * @returns {undefined}
654
+ * @private
655
+ * @memberof Meeting
656
+ */
657
+ private setUpLocusHostListener;
658
+ /**
659
+ * Set up the locus info participants update listener
660
+ * update members collection value for members
661
+ * notifies consumer with members:update
662
+ * @returns {undefined}
663
+ * @private
664
+ * @memberof Meeting
665
+ */
666
+ private setUpLocusParticipantsListener;
667
+ /**
668
+ * Set up the locus info recording update listener
669
+ * update recording value for the meeting
670
+ * notifies consumer with:
671
+ * meeting:recording:started
672
+ * meeting:recording:stopped
673
+ * meeting:recording:paused
674
+ * meeting:recording:resumed
675
+ *
676
+ * Set up the locus info meeeting container listener
677
+ * update meetingContainerUrl value for the meeting
678
+ * notifies consumer with:
679
+ * meeting:meetingContainer:update
680
+ *
681
+ * @returns {undefined}
682
+ * @private
683
+ * @memberof Meeting
684
+ */
685
+ private setupLocusControlsListener;
686
+ /**
687
+ * Trigger annotation info update event
688
+ @returns {undefined}
689
+ @param {object} contentShare
690
+ @param {object} previousContentShare
691
+ */
692
+ private triggerAnnotationInfoEvent;
693
+ /**
694
+ * Set up the locus info media shares listener
695
+ * update content and whiteboard sharing id value for members, and updates the member
696
+ * notifies consumer with members:content:update {activeContentSharingId, endedContentSharingId}
697
+ * @returns {undefined}
698
+ * @private
699
+ * @memberof Meeting
700
+ */
701
+ private setUpLocusMediaSharesListener;
702
+ /**
703
+ * Set up the locus info url listener
704
+ * update locus_url value for members
705
+ * @returns {undefined}
706
+ * @private
707
+ * @memberof Meeting
708
+ */
709
+ private setUpLocusUrlListener;
710
+ /**
711
+ * Set up the locus info service link listener
712
+ * update the locusInfo for recording controller
713
+ * does not currently re-emit the event as it's internal only
714
+ * payload is unused
715
+ * @returns {undefined}
716
+ * @private
717
+ * @memberof Meeting
718
+ */
719
+ private setUpLocusServicesListener;
720
+ /**
721
+ * Set up the locus info meeting info listener
722
+ * @returns {undefined}
723
+ * @private
724
+ * @memberof meeting
725
+ */
726
+ private setUpLocusInfoMeetingInfoListener;
727
+ /**
728
+ * Handles a data channel URL change
729
+ * @param {String} datachannelUrl
730
+ * @returns {void}
731
+ */
732
+ handleDataChannelUrlChange(datachannelUrl: any): void;
733
+ /**
734
+ * Set up the locus info embedded apps listener
735
+ * @returns {undefined}
736
+ * @private
737
+ * @memberof meeting
738
+ */
739
+ private setUpLocusEmbeddedAppsListener;
740
+ /**
741
+ * Internal function to listen to the self object changes
742
+ * @returns {undefined}
743
+ * @private
744
+ * @memberof Meeting
745
+ */
746
+ private setUpLocusInfoSelfListener;
747
+ /**
748
+ * Add LocusInfo nested object listeners (from child to parent)
749
+ * @returns {undefined}
750
+ * @private
751
+ * @memberof Meeting
752
+ */
753
+ private setUpLocusInfoMeetingListener;
754
+ /**
755
+ * Set meeting values rather than events
756
+ * @param {Object} object
757
+ * @returns {undefined}
758
+ * @private
759
+ * @memberof Meeting
760
+ * // TODO: is this function necessary?
761
+ */
762
+ private updateMeetingObject;
763
+ /**
764
+ * Invite a guest to the call that isn't normally part of this call
765
+ * @param {Object} invitee
766
+ * @param {String} invitee.emailAddress
767
+ * @param {String} invitee.email
768
+ * @param {String} invitee.phoneNumber
769
+ * @param {Boolean} [alertIfActive]
770
+ * @returns {Promise} see #members.addMember
771
+ * @public
772
+ * @memberof Meeting
773
+ */
774
+ invite(invitee: {
775
+ emailAddress: string;
776
+ email: string;
777
+ phoneNumber: string;
778
+ }, alertIfActive?: boolean): any;
779
+ /**
780
+ * Cancel an outgoing phone call invitation made during a meeting
781
+ * @param {Object} invitee
782
+ * @param {String} invitee.phoneNumber
783
+ * @returns {Promise} see #members.cancelPhoneInvite
784
+ * @public
785
+ * @memberof Meeting
786
+ */
787
+ cancelPhoneInvite(invitee: {
788
+ phoneNumber: string;
789
+ }): any;
790
+ /**
791
+ * Admit the guest(s) to the call once they are waiting.
792
+ * If the host/cohost is in a breakout session, the locus url
793
+ * of the session must be provided as the authorizingLocusUrl.
794
+ * Regardless of host/cohost location, the locus Id (lid) in
795
+ * the path should be the locus Id of the main, which means the
796
+ * locus url of the api call must be from the main session.
797
+ * If these loucs urls are not provided, the function will do the check.
798
+ * @param {Array} memberIds
799
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
800
+ * @returns {Promise} see #members.admitMembers
801
+ * @public
802
+ * @memberof Meeting
803
+ */
804
+ admit(memberIds: Array<any>, sessionLocusUrls?: {
805
+ authorizingLocusUrl: string;
806
+ mainLocusUrl: string;
807
+ }): any;
808
+ /**
809
+ * Remove the member from the meeting, boot them
810
+ * @param {String} memberId
811
+ * @returns {Promise} see #members.removeMember
812
+ * @public
813
+ * @memberof Meeting
814
+ */
815
+ remove(memberId: string): any;
816
+ /**
817
+ * Mute another member from the meeting
818
+ * @param {String} memberId
819
+ * @param {Boolean} mute
820
+ * @returns {Promise} see #members.muteMember
821
+ * @public
822
+ * @memberof Meeting
823
+ */
824
+ mute(memberId: string, mute?: boolean): any;
825
+ /**
826
+ * Transfer the moderator role to another eligible member
827
+ * @param {String} memberId
828
+ * @param {Boolean} moderator
829
+ * @returns {Promise} see #members.transferHostToMember
830
+ * @public
831
+ * @memberof Meeting
832
+ */
833
+ transfer(memberId: string, moderator?: boolean): any;
834
+ /**
835
+ * Reference to the Members object
836
+ * @returns {Members}
837
+ * @public
838
+ * @memberof Meeting
839
+ */
840
+ getMembers(): Members;
841
+ /**
842
+ * Sets the meeting info on the class instance
843
+ * @param {Object} meetingInfo
844
+ * @param {String} meetingInfo.conversationUrl
845
+ * @param {String} meetingInfo.locusUrl
846
+ * @param {String} meetingInfo.sipUri
847
+ * @param {String} [meetingInfo.sipUrl]
848
+ * @param {String} [meetingInfo.sipMeetingUri]
849
+ * @param {String} [meetingInfo.meetingNumber]
850
+ * @param {String} [meetingInfo.meetingJoinUrl]
851
+ * @param {String} [meetingInfo.hostId]
852
+ * @param {String} [meetingInfo.permissionToken]
853
+ * @param {String} [meetingInfo.channel]
854
+ * @param {Object} meetingInfo.owner
855
+ * @param {Object | String} destination locus object with meeting data or destination string (sip url, meeting link, etc)
856
+ * @param {Object | String} errors Meeting info request error
857
+ * @returns {undefined}
858
+ * @private
859
+ * @memberof Meeting
860
+ */
861
+ parseMeetingInfo(meetingInfo: {
862
+ conversationUrl: string;
863
+ locusUrl: string;
864
+ sipUri: string;
865
+ owner: object;
866
+ sipUrl?: string;
867
+ sipMeetingUri?: string;
868
+ meetingNumber?: string;
869
+ meetingJoinUrl?: string;
870
+ hostId?: string;
871
+ permissionToken?: string;
872
+ channel?: string;
873
+ }, destination?: object | string | null, errors?: any): void;
874
+ /**
875
+ * Indicates whether policy can be applied
876
+ * @returns {boolean}
877
+ */
878
+ private arePolicyRestrictionsSupported;
879
+ /**
880
+ * Updates the meeting actions (display hints), depends on locus display hints, user policy and app api info
881
+ * @returns {undefined}
882
+ * @private
883
+ * @memberof Meeting
884
+ */
885
+ private updateMeetingActions;
886
+ /**
887
+ * Sets the self user policies based on the contents of the permission token
888
+ * @returns {void}
889
+ */
890
+ setSelfUserPolicies(): void;
891
+ /**
892
+ * Sets the permission token payload on the class instance
893
+ *
894
+ * @param {String} permissionToken
895
+ * @returns {void}
896
+ */
897
+ setPermissionTokenPayload(permissionToken: string): void;
898
+ /**
899
+ * Sets the sip uri on the class instance
900
+ * uses meeting info as precedence
901
+ * @param {String} sipUri
902
+ * @returns {undefined}
903
+ * @private
904
+ * @memberof Meeting
905
+ */
906
+ setSipUri(sipUri: string): void;
907
+ /**
908
+ * Set the locus info the class instance
909
+ * @param {Object} locus
910
+ * @param {Array} locus.mediaConnections
911
+ * @param {String} locus.locusUrl
912
+ * @param {String} locus.locusId
913
+ * @param {String} locus.mediaId
914
+ * @param {Object} locus.host
915
+ * @todo change name to genertic parser
916
+ * @returns {undefined}
917
+ * @private
918
+ * @memberof Meeting
919
+ */
920
+ setLocus(locus: {
921
+ mediaConnections: Array<any>;
922
+ locusUrl: string;
923
+ locusId: string;
924
+ mediaId: string;
925
+ host: object;
926
+ } | any): void;
927
+ /**
928
+ * Upload logs for the current meeting
929
+ * @param {object} options file name and function name
930
+ * @returns {undefined}
931
+ * @public
932
+ * @memberof Meeting
933
+ */
934
+ uploadLogs(options?: object): void;
935
+ /**
936
+ * Removes remote audio, video and share streams from class instance's mediaProperties
937
+ * @returns {undefined}
938
+ */
939
+ unsetRemoteStreams(): void;
940
+ /**
941
+ * Removes the remote stream on the class instance and triggers an event
942
+ * to developers
943
+ * @returns {undefined}
944
+ * @public
945
+ * @memberof Meeting
946
+ * @deprecated after v1.89.3
947
+ */
948
+ closeRemoteStream(): void;
949
+ /**
950
+ * Removes the remote streams on the class instance and triggers an event
951
+ * to developers
952
+ * @returns {undefined}
953
+ * @memberof Meeting
954
+ */
955
+ closeRemoteStreams(): Promise<[any, any, any]>;
956
+ /**
957
+ * Stores the reference to a new microphone stream, sets up the required event listeners
958
+ * on it, cleans up previous stream, etc.
959
+ *
960
+ * @param {LocalMicrophoneStream | null} localStream local microphone stream
961
+ * @returns {Promise<void>}
962
+ */
963
+ private setLocalAudioStream;
964
+ /**
965
+ * Stores the reference to a new camera stream, sets up the required event listeners
966
+ * on it, cleans up previous stream, etc.
967
+ *
968
+ * @param {LocalCameraStream | null} localStream local camera stream
969
+ * @returns {Promise<void>}
970
+ */
971
+ private setLocalVideoStream;
972
+ /**
973
+ * Stores the reference to a new screen share stream, sets up the required event listeners
974
+ * on it, cleans up previous stream, etc.
975
+ * It also sends the floor grant/release request.
976
+ *
977
+ * @param {LocalDisplayStream | undefined} localDisplayStream local display stream
978
+ * @returns {Promise<void>}
979
+ */
980
+ private setLocalShareVideoStream;
981
+ /**
982
+ * Stores the reference to a new screen share audio stream, sets up the required event listeners
983
+ * on it, cleans up previous stream, etc.
984
+ *
985
+ * @param {LocalSystemAudioStream | undefined} localSystemAudioStream local system audio stream
986
+ * @returns {Promise<void>}
987
+ */
988
+ private setLocalShareAudioStream;
989
+ /**
990
+ * sets up listner for mercury event
991
+ * @returns {undefined}
992
+ * @public
993
+ * @memberof Meeting
994
+ */
995
+ setMercuryListener(): void;
996
+ /**
997
+ * Close the peer connections and remove them from the class.
998
+ * Cleanup any media connection related things.
999
+ *
1000
+ * @returns {Promise}
1001
+ * @public
1002
+ * @memberof Meeting
1003
+ */
1004
+ closePeerConnections(): Promise<void>;
1005
+ /**
1006
+ * Unsets the peer connections on the class
1007
+ * warning DO NOT CALL WITHOUT CLOSING PEER CONNECTIONS FIRST
1008
+ * @returns {undefined}
1009
+ * @public
1010
+ * @memberof Meeting
1011
+ */
1012
+ unsetPeerConnections(): void;
1013
+ /**
1014
+ * Convenience method to set the correlation id for the callStateForMetrics
1015
+ * @param {String} id correlation id to set on the callStateForMetrics
1016
+ * @returns {undefined}
1017
+ * @public
1018
+ * @memberof Meeting
1019
+ */
1020
+ setCorrelationId(id: string): void;
1021
+ /**
1022
+ * Update the callStateForMetrics
1023
+ * @param {CallStateForMetrics} callStateForMetrics updated values for callStateForMetrics
1024
+ * @returns {undefined}
1025
+ * @public
1026
+ * @memberof Meeting
1027
+ */
1028
+ updateCallStateForMetrics(callStateForMetrics: CallStateForMetrics): void;
1029
+ /**
1030
+ * Enqueue request for screenshare floor and set the status to pending
1031
+ * @returns {Promise}
1032
+ * @private
1033
+ * @memberof Meeting
1034
+ */
1035
+ private enqueueScreenShareFloorRequest;
1036
+ /**
1037
+ * Mute the audio for a meeting
1038
+ * @returns {Promise} resolves the data from muting audio {mute, self} or rejects if there is no audio set
1039
+ * @public
1040
+ * @memberof Meeting
1041
+ */
1042
+ muteAudio(): any;
1043
+ /**
1044
+ * Unmute meeting audio
1045
+ * @returns {Promise} resolves data from muting audio {mute, self} or rejects if there is no audio set
1046
+ * @public
1047
+ * @memberof Meeting
1048
+ */
1049
+ unmuteAudio(): any;
1050
+ /**
1051
+ * Mute the video for a meeting
1052
+ * @returns {Promise} resolves data from muting video {mute, self} or rejects if there is no video set
1053
+ * @public
1054
+ * @memberof Meeting
1055
+ */
1056
+ muteVideo(): any;
1057
+ /**
1058
+ * Unmute meeting video
1059
+ * @returns {Promise} resolves data from muting video {mute, self} or rejects if there is no video set
1060
+ * @public
1061
+ * @memberof Meeting
1062
+ */
1063
+ unmuteVideo(): any;
1064
+ /**
1065
+ * Shorthand function to join AND set up media
1066
+ * @param {Object} options - options to join with media
1067
+ * @param {JoinOptions} [options.joinOptions] - see #join()
1068
+ * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()
1069
+ * @returns {Promise} -- {join: see join(), media: see addMedia()}
1070
+ * @public
1071
+ * @memberof Meeting
1072
+ * @example
1073
+ * joinWithMedia({
1074
+ * joinOptions: {resourceId: 'resourceId' },
1075
+ * mediaOptions: {
1076
+ * localStreams: { microphone: microphoneStream, camera: cameraStream }
1077
+ * }
1078
+ * })
1079
+ */
1080
+ joinWithMedia(options?: {
1081
+ joinOptions?: any;
1082
+ mediaOptions?: AddMediaOptions;
1083
+ }): any;
1084
+ /**
1085
+ * Initiates the reconnection of the media in the meeting
1086
+ *
1087
+ * @param {object} options
1088
+ * @returns {Promise} resolves with {reconnect} or errors with {error}
1089
+ * @public
1090
+ * @memberof Meeting
1091
+ */
1092
+ reconnect(options?: object): Promise<void>;
1093
+ /**
1094
+ * Check if the meeting supports the Webex Assistant feature
1095
+ * @returns {boolean}
1096
+ * @throws TranscriptionNotSupportedError
1097
+ */
1098
+ isTranscriptionSupported(): boolean;
1099
+ /**
1100
+ * Check if the meeting supports the Reactions
1101
+ * @returns {boolean}
1102
+ */
1103
+ isReactionsSupported(): boolean;
1104
+ /**
1105
+ * sets Caption language for the meeting
1106
+ * @param {string} language
1107
+ * @returns {Promise}
1108
+ */
1109
+ setCaptionLanguage(language: string): Promise<unknown>;
1110
+ /**
1111
+ * sets Spoken language for the meeting
1112
+ * @param {string} language
1113
+ * @returns {Promise}
1114
+ */
1115
+ setSpokenLanguage(language: string): Promise<unknown>;
1116
+ /**
1117
+ * This method will enable the transcription for the current meeting if the meeting has enabled/supports Webex Assistant
1118
+ * @param {Object} options object with spokenlanguage setting
1119
+ * @public
1120
+ * @returns {Promise<void>} a promise to open the WebSocket connection
1121
+ */
1122
+ startTranscription(options?: {
1123
+ spokenLanguage?: string;
1124
+ }): Promise<void>;
1125
+ /**
1126
+ * Callback called when a relay event is received from meeting LLM Connection
1127
+ * @param {RelayEvent} e Event object coming from LLM Connection
1128
+ * @private
1129
+ * @returns {void}
1130
+ */
1131
+ private processRelayEvent;
1132
+ /**
1133
+ * This method stops receiving transcription for the current meeting
1134
+ * @returns {void}
1135
+ */
1136
+ stopTranscription(): void;
1137
+ /**
1138
+ * triggers an event to notify that the user
1139
+ * will not receive any more transcription
1140
+ * @private
1141
+ * @returns{void}
1142
+ */
1143
+ private triggerStopReceivingTranscriptionEvent;
1144
+ /**
1145
+ * This is a callback for the LLM event that is triggered when it comes online
1146
+ * This method in turn will trigger an event to the developers that the LLM is connected
1147
+ * @private
1148
+ * @memberof Meeting
1149
+ * @returns {null}
1150
+ */
1151
+ private handleLLMOnline;
1152
+ /**
1153
+ * Specify joining via audio (option: pstn), video, screenshare
1154
+ * @param {JoinOptions} options A configurable options object for joining a meeting
1155
+ * @returns {Promise} the join response
1156
+ * @public
1157
+ * @memberof Meeting
1158
+ * Scenario A: Joining own claimed personal meeting room
1159
+ * Scenario B: Joining other's claimed personal meeting room, do pass pin (if desired to join as host, or nullify), do pass moderator
1160
+ * Scenario C: Joining an unclaimed personal meeting room, -do not- pass pin or moderator on first try, -do- pass pin and moderator
1161
+ * if joining as host on second loop, pass pin and pass moderator if joining as guest on second loop
1162
+ * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
1163
+ */
1164
+ join(options?: any): Promise<any>;
1165
+ /**
1166
+ * Connects to low latency mercury and reconnects if the address has changed
1167
+ * It will also disconnect if called when the meeting has ended
1168
+ * @param {String} datachannelUrl
1169
+ * @returns {Promise}
1170
+ */
1171
+ updateLLMConnection(): Promise<any>;
1172
+ /**
1173
+ * Use phone for meeting audio
1174
+ * @param {String} phoneNumber If provided, it will dial-out using this number. If not provided, dial-in will be used
1175
+ * @returns {Promise} Resolves once the dial-in or dial-out request has completed, or rejects if it failed
1176
+ * @public
1177
+ * @memberof Meeting
1178
+ */
1179
+ usePhoneAudio(phoneNumber: string): Promise<any>;
1180
+ /**
1181
+ * Determines if the given pstnStatus is in a state which implies the phone is provisioned
1182
+ * @param {String} pstnStatus
1183
+ * @returns {Boolean}
1184
+ * @private
1185
+ * @memberof Meeting
1186
+ */
1187
+ private isPhoneProvisioned;
1188
+ /**
1189
+ * Enable dial-in for audio
1190
+ * @returns {Promise} Resolves once the dial-in request has completed, or rejects if it failed
1191
+ * @private
1192
+ * @memberof Meeting
1193
+ */
1194
+ private dialInPstn;
1195
+ /**
1196
+ * Enable dial-out for audio
1197
+ * @param {String} phoneNumber Phone number to dial out to
1198
+ * @returns {Promise} Resolves once the dial-out request has completed (it doesn't wait for the user to answer the phone), or rejects if it failed
1199
+ * @private
1200
+ * @memberof Meeting
1201
+ */
1202
+ private dialOutPstn;
1203
+ /**
1204
+ * Disconnect meeting audio via phone.
1205
+ * @returns {Promise} Resolves once the phone audio disconnection has completed
1206
+ * @public
1207
+ * @memberof Meeting
1208
+ * @returns {Promise}
1209
+ */
1210
+ disconnectPhoneAudio(): Promise<[any, any]>;
1211
+ /**
1212
+ * Moves the call to the specified resourceId
1213
+ * @param {String} resourceId
1214
+ * @returns {Promise} once the move has been completed
1215
+ * @public
1216
+ * @memberof Meeting
1217
+ */
1218
+ moveTo(resourceId: string): any;
1219
+ /**
1220
+ * Moves the call from the specified resourceId, back to computer
1221
+ * @param {String} resourceId
1222
+ * @returns {Promise} once the move has been completed
1223
+ * @public
1224
+ * @memberof Meeting
1225
+ */
1226
+ moveFrom(resourceId: string): any;
1227
+ /**
1228
+ * Handles ROAP_FAILURE event from the webrtc media connection
1229
+ *
1230
+ * @param {Error} error
1231
+ * @returns {void}
1232
+ */
1233
+ handleRoapFailure: (error: any) => void;
1234
+ /**
1235
+ * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
1236
+ *
1237
+ * @returns {undefined}
1238
+ */
1239
+ setupSdpListeners: () => void;
1240
+ setupMediaConnectionListeners: () => void;
1241
+ /**
1242
+ * Registers for all required StatsAnalyzer events
1243
+ * @private
1244
+ * @returns {void}
1245
+ * @memberof Meetings
1246
+ */
1247
+ setupStatsAnalyzerEventHandlers: () => void;
1248
+ getMediaConnectionDebugId(): string;
1249
+ /**
1250
+ * Creates a webrtc media connection and publishes streams to it
1251
+ *
1252
+ * @param {Object} turnServerInfo TURN server information
1253
+ * @param {BundlePolicy} [bundlePolicy] Bundle policy settings
1254
+ * @param {AddMediaOptions} [options] Options for enabling/disabling audio/video
1255
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
1256
+ */
1257
+ private createMediaConnection;
1258
+ /**
1259
+ * Listens for an event emitted by eventEmitter and emits it from the meeting object
1260
+ *
1261
+ * @private
1262
+ * @param {*} eventEmitter object from which to forward the event
1263
+ * @param {*} eventTypeToForward which event type to listen on and to forward
1264
+ * @param {string} meetingEventType event type to be used in the event emitted from the meeting object
1265
+ * @returns {void}
1266
+ */
1267
+ forwardEvent(eventEmitter: any, eventTypeToForward: any, meetingEventType: any): void;
1268
+ /**
1269
+ * Sets up all the references to local streams in this.mediaProperties before creating media connection
1270
+ * and before TURN discovery, so that the correct mute state is sent with TURN discovery roap messages.
1271
+ *
1272
+ * @private
1273
+ * @param {LocalStreams} localStreams
1274
+ * @returns {Promise<void>}
1275
+ */
1276
+ private setUpLocalStreamReferences;
1277
+ /**
1278
+ * Calls mediaProperties.waitForMediaConnectionConnected() and sends CA client.ice.end metric on failure
1279
+ *
1280
+ * @private
1281
+ * @returns {Promise<void>}
1282
+ */
1283
+ private waitForMediaConnectionConnected;
1284
+ /**
1285
+ * Enables statsAnalyser if config allows it
1286
+ *
1287
+ * @private
1288
+ * @returns {void}
1289
+ */
1290
+ private createStatsAnalyzer;
1291
+ /**
1292
+ * Handles device logging
1293
+ *
1294
+ * @private
1295
+ * @static
1296
+ * @returns {Promise<void>}
1297
+ */
1298
+ private static handleDeviceLogging;
1299
+ /**
1300
+ * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved
1301
+ * once the remote sdp answer has been received.
1302
+ *
1303
+ * @private
1304
+ * @returns {Promise<void>}
1305
+ */
1306
+ private waitForRemoteSDPAnswer;
1307
+ /**
1308
+ * Calls establishMediaConnection with isForced = true to force turn discovery to happen
1309
+ *
1310
+ * @private
1311
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1312
+ * @param {BundlePolicy} [bundlePolicy]
1313
+ * @returns {Promise<void>}
1314
+ */
1315
+ private retryEstablishMediaConnectionWithForcedTurnDiscovery;
1316
+ /**
1317
+ * Does relevant clean up before retrying to establish media connection
1318
+ * and performs the retry with forced turn discovery
1319
+ *
1320
+ * @private
1321
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1322
+ * @param {BundlePolicy} [bundlePolicy]
1323
+ * @returns {Promise<void>}
1324
+ */
1325
+ private retryWithForcedTurnDiscovery;
1326
+ /**
1327
+ * If waitForMediaConnectionConnected() fails when we haven't done turn discovery then we
1328
+ * attempt to establish a media connection again, but this time using turn discovery. If we
1329
+ * used turn discovery on the first pass we do not attempt connection again.
1330
+ *
1331
+ * @private
1332
+ * @param {Error} error
1333
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1334
+ * @param {BundlePolicy} [bundlePolicy]
1335
+ * @returns {Promise<void>}
1336
+ */
1337
+ private handleWaitForMediaConnectionConnectedError;
1338
+ /**
1339
+ * Performs TURN discovery as a separate call to the Locus /media API
1340
+ *
1341
+ * @param {boolean} isReconnecting
1342
+ * @param {boolean} isForced
1343
+ * @returns {Promise}
1344
+ */
1345
+ private doTurnDiscovery;
1346
+ /**
1347
+ * Does TURN discovery, SDP offer/answer exhange, establishes ICE connection and DTLS handshake.
1348
+ *
1349
+ * @private
1350
+ * @param {RemoteMediaManagerConfiguration} [remoteMediaManagerConfig]
1351
+ * @param {BundlePolicy} [bundlePolicy]
1352
+ * @param {boolean} [isForced] - let isForced be true to do turn discovery regardless of reachability results
1353
+ * @param {TurnServerInfo} [turnServerInfo]
1354
+ * @returns {Promise<void>}
1355
+ */
1356
+ private establishMediaConnection;
1357
+ /**
1358
+ * Cleans up stats analyzer, peer connection, and turns off listeners
1359
+ *
1360
+ * @private
1361
+ * @returns {Promise<void>}
1362
+ */
1363
+ private cleanUpOnAddMediaFailure;
1364
+ /**
1365
+ * Sends stats report, closes peer connection and cleans up any media connection
1366
+ * related things before trying to establish media connection again with turn server
1367
+ *
1368
+ * @private
1369
+ * @returns {Promise<void>}
1370
+ */
1371
+ private cleanUpBeforeRetryWithTurnServer;
1372
+ /**
1373
+ * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
1374
+ *
1375
+ * @param {AddMediaOptions} options
1376
+ * @param {TurnServerInfo} turnServerInfo - TURN server information (used only internally by the SDK)
1377
+ * @returns {Promise<void>}
1378
+ * @public
1379
+ * @memberof Meeting
1380
+ */
1381
+ addMedia(options?: AddMediaOptions, turnServerInfo?: TurnServerInfo): Promise<void>;
1382
+ /**
1383
+ * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
1384
+ * @returns {Boolean}
1385
+ */
1386
+ canUpdateMedia(): boolean;
1387
+ /**
1388
+ * media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report
1389
+ * send a webrtc telemetry dump to the configured server using the internal media core check metrics configured callback
1390
+ * @param {String} callFrom - the function calling this function, optional.
1391
+ * @returns {Promise<void>}
1392
+ */
1393
+ private forceSendStatsReport;
1394
+ /**
1395
+ * Enqueues a media update operation.
1396
+ * @param {String} mediaUpdateType one of MEDIA_UPDATE_TYPE values
1397
+ * @param {Object} options
1398
+ * @returns {Promise}
1399
+ * @private
1400
+ * @memberof Meeting
1401
+ */
1402
+ private enqueueMediaUpdate;
1403
+ /**
1404
+ * emits event when the negotation is completed
1405
+ * @returns {void}
1406
+ * @private
1407
+ * @memberof Meeting
1408
+ */
1409
+ mediaNegotiatedEvent: () => void;
1410
+ /**
1411
+ * Checks if there are any queued media updates and runs the first one from
1412
+ * the queue if we are in a state that allows doing that.
1413
+ * @returns {undefined}
1414
+ * @public
1415
+ * @memberof Meeting
1416
+ */
1417
+ processNextQueuedMediaUpdate: () => void;
1418
+ /**
1419
+ * Updates the media connection - it allows to enable/disable all audio/video/share in the meeting.
1420
+ * This does not affect the published tracks, so for example if a microphone track is published and
1421
+ * updateMedia({audioEnabled: false}) is called, the audio will not be sent or received anymore,
1422
+ * but the track's "published" state is not changed and when updateMedia({audioEnabled: true}) is called,
1423
+ * the sending of the audio from the same track will resume.
1424
+ *
1425
+ * @param {Object} options
1426
+ * @param {boolean} options.audioEnabled [optional] enables/disables receiving and sending of main audio in the meeting
1427
+ * @param {boolean} options.videoEnabled [optional] enables/disables receiving and sending of main video in the meeting
1428
+ * @param {boolean} options.shareEnabled [optional] enables/disables receiving and sending of screen share in the meeting
1429
+ * @returns {Promise}
1430
+ * @public
1431
+ * @memberof Meeting
1432
+ */
1433
+ updateMedia(options: {
1434
+ audioEnabled?: boolean;
1435
+ videoEnabled?: boolean;
1436
+ shareAudioEnabled?: boolean;
1437
+ shareVideoEnabled?: boolean;
1438
+ }): Promise<void>;
1439
+ /**
1440
+ * Acknowledge the meeting, outgoing or incoming
1441
+ * @param {String} type
1442
+ * @returns {Promise} resolve {message, ringing, response}
1443
+ * @public
1444
+ * @memberof Meeting
1445
+ */
1446
+ acknowledge(type: string): Promise<{
1447
+ response: any;
1448
+ }> | Promise<{
1449
+ message: string;
1450
+ }>;
1451
+ /**
1452
+ * Decline this meeting
1453
+ * @param {String} reason
1454
+ * @returns {undefined}
1455
+ * @public
1456
+ * @memberof Meeting
1457
+ */
1458
+ decline(reason: string): any;
1459
+ /**
1460
+ * Returns a promise that will resolve to fetch options for leaving a meeting.
1461
+ *
1462
+ * This is to support quickly submitting a leave request when the browser/tab is closing.
1463
+ * Calling meeting.leave will not work because there are some async steps that will
1464
+ * not complete before the browser is closed. Instead, we pre-gather all the
1465
+ * information/options needed for the request(s), and then simply and quickly
1466
+ * fire the fetch(es) when pagehide is triggered.
1467
+ *
1468
+ * We must use fetch instead of request because fetch has a keepalive option that
1469
+ * allows the request it to outlive the page.
1470
+ *
1471
+ * Note: the $timings values will be wrong, but setRequestTimingsAndFetch() will
1472
+ * properly adjust them before submitting.
1473
+ *
1474
+ * @public
1475
+ * @param {Object} options leave options
1476
+ * @param {String} options.resourceId the device with which to leave from, empty if just the computer
1477
+ * @param {any} options.reason the reason for leaving
1478
+ * @returns {Promise} resolves to options to be used with fetch
1479
+ */
1480
+ buildLeaveFetchRequestOptions(options?: {
1481
+ resourceId?: string;
1482
+ reason?: any;
1483
+ }): any;
1484
+ /**
1485
+ * Leave the current meeting
1486
+ * @param {Object} options - leave options
1487
+ * @param {String} [options.resourceId] - the device with which to leave from, empty if just the computer
1488
+ * @param {String} [options.clientEventLeaveReason] - the leaveReason to include in the Call Analyzer event.
1489
+ * Must be one of: 'paired-leave' | 'one-to-one' | 'ended-by-locus' (defaults to no reason)
1490
+ * https://sqbu-github.cisco.com/WebExSquared/event-dictionary/blob/main/diagnostic-events.raml#L796
1491
+ * @param {String} [options.reason] - only used for logging
1492
+ * @returns {Promise}
1493
+ * @public
1494
+ * @memberof Meeting
1495
+ */
1496
+ leave(options?: {
1497
+ resourceId?: string;
1498
+ clientEventLeaveReason?: ClientEventLeaveReason;
1499
+ reason?: any;
1500
+ }): any;
1501
+ /**
1502
+ * Start sharing whiteboard given channelUrl
1503
+ * @param {string} channelUrl whiteboard url
1504
+ * @param {String} resourceToken token created by authorize media injector
1505
+ * @returns {Promise}
1506
+ * @public
1507
+ * @memberof Meeting
1508
+ */
1509
+ startWhiteboardShare(channelUrl: string, resourceToken: string): any;
1510
+ /**
1511
+ * Stop sharing whiteboard given channelUrl
1512
+ * @param {string} channelUrl whiteboard url
1513
+ * @returns {Promise}
1514
+ * @public
1515
+ * @memberof Meeting
1516
+ */
1517
+ stopWhiteboardShare(channelUrl: string): any;
1518
+ /**
1519
+ * Sends a request to Locus to obtain the screen share floor
1520
+ * @returns {Promise} see #meetingRequest.changeMeetingFloor
1521
+ * @private
1522
+ * @memberof Meeting
1523
+ */
1524
+ private requestScreenShareFloor;
1525
+ /**
1526
+ * Requests screen share floor if such request is pending.
1527
+ * It should be called whenever meeting state changes to JOINED
1528
+ *
1529
+ * @returns {void}
1530
+ */
1531
+ private requestScreenShareFloorIfPending;
1532
+ /**
1533
+ * Sends a request to Locus to release the screen share floor.
1534
+ * @returns {Promise} see #meetingRequest.changeMeetingFloor
1535
+ * @private
1536
+ * @memberof Meeting
1537
+ */
1538
+ private releaseScreenShareFloor;
1539
+ /**
1540
+ * Intiate a recording of this meeting
1541
+ * @returns {Promise}
1542
+ * @public
1543
+ * @memberof Meeting
1544
+ */
1545
+ startRecording(): Promise<any>;
1546
+ /**
1547
+ * set the mute on entry flag for participants if you're the host
1548
+ * @returns {Promise}
1549
+ * @param {boolean} enabled
1550
+ * @public
1551
+ * @memberof Meeting
1552
+ */
1553
+ setMuteOnEntry(enabled: boolean): Promise<any>;
1554
+ /**
1555
+ * set the disallow unmute flag for participants if you're the host
1556
+ * @returns {Promise}
1557
+ * @param {boolean} enabled
1558
+ * @public
1559
+ * @memberof Meeting
1560
+ */
1561
+ setDisallowUnmute(enabled: boolean): Promise<any>;
1562
+ /**
1563
+ * set the mute all flag for participants if you're the host
1564
+ * @returns {Promise}
1565
+ * @param {boolean} mutedEnabled
1566
+ * @param {boolean} disallowUnmuteEnabled
1567
+ * @param {boolean} muteOnEntryEnabled
1568
+ * @public
1569
+ * @memberof Meeting
1570
+ */
1571
+ setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
1572
+ /**
1573
+ * End the recording of this meeting
1574
+ * @returns {Promise}
1575
+ * @public
1576
+ * @memberof Meeting
1577
+ */
1578
+ stopRecording(): Promise<any>;
1579
+ /**
1580
+ * Pauses the recording of this meeting
1581
+ * @returns {Promise}
1582
+ * @public
1583
+ * @memberof Meeting
1584
+ */
1585
+ pauseRecording(): Promise<any>;
1586
+ /**
1587
+ * Resumes the recording of this meeting
1588
+ * @returns {Promise}
1589
+ * @public
1590
+ * @memberof Meeting
1591
+ */
1592
+ resumeRecording(): Promise<any>;
1593
+ /**
1594
+ * Locks the current meeting if possible
1595
+ * @returns {Promise}
1596
+ * @public
1597
+ * @memberof Meeting
1598
+ */
1599
+ lockMeeting(): any;
1600
+ /**
1601
+ * Unlocks the current meeting if possible
1602
+ * @returns {Promise}
1603
+ * @public
1604
+ * @memberof Meeting
1605
+ */
1606
+ unlockMeeting(): any;
1607
+ /**
1608
+ * Logs an error message and returns a rejected promise with same message
1609
+ * @param {String} message
1610
+ * @returns {Promise}
1611
+ * @private
1612
+ * @memberof Meeting
1613
+ */
1614
+ private rejectWithErrorLog;
1615
+ /**
1616
+ * Sends DTMF tones to the current meeting
1617
+ * @param {String} tones a string of one or more DTMF tones to send
1618
+ * @returns {Promise}
1619
+ * @public
1620
+ * @memberof Meeting
1621
+ */
1622
+ sendDTMF(tones: string): Promise<any>;
1623
+ /**
1624
+ * Sends request to change layout type for the current meeting for the specific participant/device only
1625
+ * @param {String} [layoutType] a layout type that should be available in meeting constants {@link #layout_types}
1626
+ * @param {Object} renderInfo preferred dimensions for the remote main and content streams (server can ignore it)
1627
+ * @param {Object} renderInfo.main preferred dimensions for the remote main video stream
1628
+ * @param {Number} renderInfo.main.width preferred width of main video stream
1629
+ * @param {Number} renderInfo.main.height preferred height of main video stream
1630
+ * @param {Object} renderInfo.content preferred dimensions for the remote content share stream
1631
+ * @param {Number} renderInfo.content.width preferred width of content share stream
1632
+ * @param {Number} renderInfo.content.height preferred height of content share stream
1633
+ * @returns {Promise}
1634
+ * @public
1635
+ * @memberof Meeting
1636
+ */
1637
+ changeVideoLayout(layoutType?: string, renderInfo?: {
1638
+ main: {
1639
+ width: number;
1640
+ height: number;
1641
+ };
1642
+ content: {
1643
+ width: number;
1644
+ height: number;
1645
+ };
1646
+ }): any;
1647
+ /**
1648
+ * Sets the quality level of the remote incoming media
1649
+ * @param {String} level {LOW|MEDIUM|HIGH}
1650
+ * @returns {Promise}
1651
+ */
1652
+ setRemoteQualityLevel(level: string): Promise<void>;
1653
+ /**
1654
+ * Functionality for when a share audio is ended.
1655
+ * @private
1656
+ * @memberof Meeting
1657
+ * @returns {undefined}
1658
+ */
1659
+ private handleShareAudioStreamEnded;
1660
+ /**
1661
+ * Functionality for when a share video is muted or unmuted.
1662
+ * @private
1663
+ * @memberof Meeting
1664
+ * @param {boolean} muted
1665
+ * @returns {undefined}
1666
+ */
1667
+ private handleShareVideoStreamMuteStateChange;
1668
+ /**
1669
+ * Functionality for when a share video is ended.
1670
+ * @private
1671
+ * @memberof Meeting
1672
+ * @returns {undefined}
1673
+ */
1674
+ private handleShareVideoStreamEnded;
1675
+ /**
1676
+ * Emits meeting:stoppedSharingLocal
1677
+ * @private
1678
+ * @returns {undefined}
1679
+ * @memberof Meeting
1680
+ */
1681
+ private triggerStoppedSharing;
1682
+ /**
1683
+ * Emits the 'network:quality' event
1684
+ * 1 indicates an acceptable uplink network.
1685
+ * 0 indicates an unacceptable uplink network based on a predefined threshold
1686
+ * @returns {undefined}
1687
+ * @param {Object} res - payload of emitNetworkQuality
1688
+ * @property {string} mediaType {video|audio}
1689
+ * @property {number} networkQualityScore - {1|0}
1690
+ * @private
1691
+ * @memberof Meeting
1692
+ */
1693
+ private sendNetworkQualityEvent;
1694
+ /**
1695
+ * Handle logging the media
1696
+ * @param {Object} mediaProperties
1697
+ * @private
1698
+ * @returns {undefined}
1699
+ */
1700
+ private handleMediaLogging;
1701
+ /**
1702
+ *
1703
+ * @returns {string} one of 'panelist', 'attendee', 'host', 'cohost', returns the user type of the current user
1704
+ */
1705
+ getCurUserType(): RawClientEvent['userType'] | null;
1706
+ /**
1707
+ * End the current meeting for all
1708
+ * @returns {Promise}
1709
+ * @public
1710
+ * @memberof Meeting
1711
+ */
1712
+ endMeetingForAll(): any;
1713
+ /**
1714
+ * clear the meeting data
1715
+ * @returns {undefined}
1716
+ * @public
1717
+ * @memberof Meeting
1718
+ */
1719
+ clearMeetingData: () => void;
1720
+ /**
1721
+ * starts keepAlives being sent
1722
+ * @returns {void}
1723
+ * @private
1724
+ * @memberof Meeting
1725
+ */
1726
+ startKeepAlive: () => void;
1727
+ /**
1728
+ * stops keepAlives being sent
1729
+ * @returns {void}
1730
+ * @private
1731
+ * @memberof Meeting
1732
+ */
1733
+ stopKeepAlive: () => void;
1734
+ /**
1735
+ * Send a reaction inside the meeting.
1736
+ *
1737
+ * @param {ReactionServerType} reactionType - type of reaction to be sent. Example: "thumbs_up"
1738
+ * @param {SkinToneType} skinToneType - skin tone for the reaction. Example: "medium_dark"
1739
+ * @returns {Promise}
1740
+ * @public
1741
+ * @memberof Meeting
1742
+ */
1743
+ sendReaction(reactionType: ReactionServerType, skinToneType?: SkinToneType): any;
1744
+ /**
1745
+ * Method to enable or disable reactions inside the meeting.
1746
+ *
1747
+ * @param {boolean} enable - enable or disable reactions
1748
+ * @returns {Promise}
1749
+ * @public
1750
+ * @memberof Meeting
1751
+ */
1752
+ toggleReactions(enable: boolean): Promise<any>;
1753
+ /**
1754
+ * Throws if we don't have a media connection created
1755
+ *
1756
+ * @returns {void}
1757
+ */
1758
+ private checkMediaConnection;
1759
+ /**
1760
+ * Method to enable or disable the 'Music mode' effect on audio stream
1761
+ *
1762
+ * @param {boolean} shouldEnableMusicMode
1763
+ * @returns {Promise}
1764
+ */
1765
+ enableMusicMode(shouldEnableMusicMode: boolean): Promise<void>;
1766
+ /** Updates the tracks being sent on the transcoded media connection
1767
+ *
1768
+ * @returns {Promise<void>}
1769
+ */
1770
+ private updateTranscodedMediaConnection;
1771
+ /**
1772
+ * set sending named media group which the audio should send to
1773
+ * @param {MediaType} mediaType of the stream
1774
+ * @param {number} languageCode of the stream
1775
+ * @returns {void}
1776
+ */
1777
+ setSendNamedMediaGroup(mediaType: MediaType, languageCode?: number): void;
1778
+ /**
1779
+ * Publishes a stream.
1780
+ *
1781
+ * @param {MediaType} mediaType of the stream
1782
+ * @param {LocalStream} stream to publish
1783
+ * @returns {Promise}
1784
+ */
1785
+ private publishStream;
1786
+ /**
1787
+ * Un-publishes a stream.
1788
+ *
1789
+ * @param {MediaType} mediaType of the stream
1790
+ * @param {LocalStream} stream to unpublish
1791
+ * @returns {Promise}
1792
+ */
1793
+ private unpublishStream;
1794
+ /**
1795
+ * Publishes specified local streams in the meeting
1796
+ *
1797
+ * @param {Object} streams
1798
+ * @returns {Promise}
1799
+ */
1800
+ publishStreams(streams: LocalStreams): Promise<void>;
1801
+ /**
1802
+ * Un-publishes specified local streams in the meeting
1803
+ *
1804
+ * @param {Array<LocalStream>} streams
1805
+ * @returns {Promise}
1806
+ */
1807
+ unpublishStreams(streams: LocalStream[]): Promise<void>;
1808
+ /**
1809
+ * Gets permission token expiry information including timeLeft, expiryTime, currentTime
1810
+ * (from the time the function has been fired)
1811
+ *
1812
+ * @returns {object} permissionTokenExpiryInfo
1813
+ * @returns {number} permissionTokenExpiryInfo.timeLeft The time left for token to expire
1814
+ * @returns {number} permissionTokenExpiryInfo.expiryTime The expiry time of permission token from the server
1815
+ * @returns {number} permissionTokenExpiryInfo.currentTime The current time of the local machine
1816
+ */
1817
+ getPermissionTokenExpiryInfo(): {
1818
+ timeLeft: number;
1819
+ expiryTime: number;
1820
+ currentTime: number;
1821
+ };
1822
+ /**
1823
+ * Check if there is enough time left till the permission token expires
1824
+ * If not - refresh the permission token
1825
+ *
1826
+ * @param {number} threshold - time in seconds
1827
+ * @param {string} reason - reason for refreshing the permission token
1828
+ * @returns {Promise<void>}
1829
+ */
1830
+ checkAndRefreshPermissionToken(threshold: number, reason: string): Promise<void>;
1831
+ }
1832
+ export {};