@webex/plugin-meetings 3.0.0-test.1 → 3.1.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/.eslintrc.js +6 -0
  2. package/babel.config.js +3 -0
  3. package/dist/annotation/constants.js +12 -20
  4. package/dist/annotation/constants.js.map +1 -1
  5. package/dist/annotation/index.js +25 -10
  6. package/dist/annotation/index.js.map +1 -1
  7. package/dist/breakouts/breakout.js +2 -3
  8. package/dist/breakouts/breakout.js.map +1 -1
  9. package/dist/breakouts/collection.js +1 -2
  10. package/dist/breakouts/collection.js.map +1 -1
  11. package/dist/breakouts/edit-lock-error.js +1 -2
  12. package/dist/breakouts/edit-lock-error.js.map +1 -1
  13. package/dist/breakouts/events.js +1 -2
  14. package/dist/breakouts/events.js.map +1 -1
  15. package/dist/breakouts/index.js +13 -14
  16. package/dist/breakouts/index.js.map +1 -1
  17. package/dist/breakouts/request.js +1 -2
  18. package/dist/breakouts/request.js.map +1 -1
  19. package/dist/breakouts/utils.js +3 -6
  20. package/dist/breakouts/utils.js.map +1 -1
  21. package/dist/common/browser-detection.js +2 -3
  22. package/dist/common/browser-detection.js.map +1 -1
  23. package/dist/common/collection.js +3 -4
  24. package/dist/common/collection.js.map +1 -1
  25. package/dist/common/config.js +1 -2
  26. package/dist/common/config.js.map +1 -1
  27. package/dist/common/errors/captcha-error.js +1 -2
  28. package/dist/common/errors/captcha-error.js.map +1 -1
  29. package/dist/common/errors/intent-to-join.js +1 -2
  30. package/dist/common/errors/intent-to-join.js.map +1 -1
  31. package/dist/common/errors/join-meeting.js +1 -2
  32. package/dist/common/errors/join-meeting.js.map +1 -1
  33. package/dist/common/errors/media.js +1 -2
  34. package/dist/common/errors/media.js.map +1 -1
  35. package/dist/common/errors/no-meeting-info.js +1 -2
  36. package/dist/common/errors/no-meeting-info.js.map +1 -1
  37. package/dist/common/errors/parameter.js +3 -4
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +1 -2
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +1 -2
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reclaim-host-role-errors.js +6 -10
  44. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -1
  45. package/dist/common/errors/reconnection-in-progress.js +1 -2
  46. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  47. package/dist/common/errors/reconnection.js +1 -2
  48. package/dist/common/errors/reconnection.js.map +1 -1
  49. package/dist/common/errors/stats.js +1 -2
  50. package/dist/common/errors/stats.js.map +1 -1
  51. package/dist/common/errors/webex-errors.js +14 -15
  52. package/dist/common/errors/webex-errors.js.map +1 -1
  53. package/dist/common/errors/webex-meetings-error.js +1 -2
  54. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  55. package/dist/common/events/events-scope.js +1 -2
  56. package/dist/common/events/events-scope.js.map +1 -1
  57. package/dist/common/events/events.js +1 -2
  58. package/dist/common/events/events.js.map +1 -1
  59. package/dist/common/events/trigger-proxy.js +1 -2
  60. package/dist/common/events/trigger-proxy.js.map +1 -1
  61. package/dist/common/events/util.js +1 -2
  62. package/dist/common/events/util.js.map +1 -1
  63. package/dist/common/logs/logger-config.js +1 -2
  64. package/dist/common/logs/logger-config.js.map +1 -1
  65. package/dist/common/logs/logger-proxy.js +1 -2
  66. package/dist/common/logs/logger-proxy.js.map +1 -1
  67. package/dist/common/logs/request.js +3 -4
  68. package/dist/common/logs/request.js.map +1 -1
  69. package/dist/common/queue.js +2 -4
  70. package/dist/common/queue.js.map +1 -1
  71. package/dist/config.js +4 -3
  72. package/dist/config.js.map +1 -1
  73. package/dist/constants.js +207 -380
  74. package/dist/constants.js.map +1 -1
  75. package/dist/controls-options-manager/constants.js +3 -6
  76. package/dist/controls-options-manager/constants.js.map +1 -1
  77. package/dist/controls-options-manager/enums.js +7 -10
  78. package/dist/controls-options-manager/enums.js.map +1 -1
  79. package/dist/controls-options-manager/index.js +27 -32
  80. package/dist/controls-options-manager/index.js.map +1 -1
  81. package/dist/controls-options-manager/util.js +1 -2
  82. package/dist/controls-options-manager/util.js.map +1 -1
  83. package/dist/index.js +71 -4
  84. package/dist/index.js.map +1 -1
  85. package/dist/interceptors/index.js.map +1 -1
  86. package/dist/interceptors/locusRetry.js +4 -3
  87. package/dist/interceptors/locusRetry.js.map +1 -1
  88. package/dist/interpretation/collection.js +1 -2
  89. package/dist/interpretation/collection.js.map +1 -1
  90. package/dist/interpretation/index.js +4 -5
  91. package/dist/interpretation/index.js.map +1 -1
  92. package/dist/interpretation/siLanguage.js +2 -3
  93. package/dist/interpretation/siLanguage.js.map +1 -1
  94. package/dist/locus-info/controlsUtils.js +12 -13
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +23 -27
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +3 -4
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +16 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +6 -10
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +12 -6
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/MediaConnectionAwaiter.js +163 -0
  113. package/dist/media/MediaConnectionAwaiter.js.map +1 -0
  114. package/dist/media/index.js +9 -5
  115. package/dist/media/index.js.map +1 -1
  116. package/dist/media/properties.js +7 -28
  117. package/dist/media/properties.js.map +1 -1
  118. package/dist/media/util.js +1 -2
  119. package/dist/media/util.js.map +1 -1
  120. package/dist/mediaQualityMetrics/config.js +9 -18
  121. package/dist/mediaQualityMetrics/config.js.map +1 -1
  122. package/dist/meeting/in-meeting-actions.js +14 -2
  123. package/dist/meeting/in-meeting-actions.js.map +1 -1
  124. package/dist/meeting/index.js +1411 -1036
  125. package/dist/meeting/index.js.map +1 -1
  126. package/dist/meeting/locusMediaRequest.js +4 -5
  127. package/dist/meeting/locusMediaRequest.js.map +1 -1
  128. package/dist/meeting/muteState.js +2 -4
  129. package/dist/meeting/muteState.js.map +1 -1
  130. package/dist/meeting/request.js +45 -36
  131. package/dist/meeting/request.js.map +1 -1
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +13 -10
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting/voicea-meeting.js +169 -0
  137. package/dist/meeting/voicea-meeting.js.map +1 -0
  138. package/dist/meeting-info/collection.js +3 -4
  139. package/dist/meeting-info/collection.js.map +1 -1
  140. package/dist/meeting-info/index.js +5 -4
  141. package/dist/meeting-info/index.js.map +1 -1
  142. package/dist/meeting-info/meeting-info-v2.js +27 -29
  143. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  144. package/dist/meeting-info/request.js +1 -2
  145. package/dist/meeting-info/request.js.map +1 -1
  146. package/dist/meeting-info/util.js +306 -269
  147. package/dist/meeting-info/util.js.map +1 -1
  148. package/dist/meeting-info/utilv2.js +336 -294
  149. package/dist/meeting-info/utilv2.js.map +1 -1
  150. package/dist/meetings/collection.js +5 -6
  151. package/dist/meetings/collection.js.map +1 -1
  152. package/dist/meetings/index.js +44 -17
  153. package/dist/meetings/index.js.map +1 -1
  154. package/dist/meetings/request.js +2 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +1 -4
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +1 -3
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/types.js +6 -8
  161. package/dist/member/types.js.map +1 -1
  162. package/dist/member/util.js +1 -2
  163. package/dist/member/util.js.map +1 -1
  164. package/dist/members/collection.js +1 -2
  165. package/dist/members/collection.js.map +1 -1
  166. package/dist/members/index.js +8 -7
  167. package/dist/members/index.js.map +1 -1
  168. package/dist/members/request.js +2 -3
  169. package/dist/members/request.js.map +1 -1
  170. package/dist/members/types.js +3 -4
  171. package/dist/members/types.js.map +1 -1
  172. package/dist/members/util.js +3 -4
  173. package/dist/members/util.js.map +1 -1
  174. package/dist/metrics/constants.js +1 -2
  175. package/dist/metrics/constants.js.map +1 -1
  176. package/dist/metrics/index.js +3 -2
  177. package/dist/metrics/index.js.map +1 -1
  178. package/dist/multistream/mediaRequestManager.js +9 -11
  179. package/dist/multistream/mediaRequestManager.js.map +1 -1
  180. package/dist/multistream/receiveSlot.js +3 -5
  181. package/dist/multistream/receiveSlot.js.map +1 -1
  182. package/dist/multistream/receiveSlotManager.js +7 -9
  183. package/dist/multistream/receiveSlotManager.js.map +1 -1
  184. package/dist/multistream/remoteMedia.js +3 -5
  185. package/dist/multistream/remoteMedia.js.map +1 -1
  186. package/dist/multistream/remoteMediaGroup.js +7 -6
  187. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  188. package/dist/multistream/remoteMediaManager.js +32 -29
  189. package/dist/multistream/remoteMediaManager.js.map +1 -1
  190. package/dist/multistream/sendSlotManager.js +9 -6
  191. package/dist/multistream/sendSlotManager.js.map +1 -1
  192. package/dist/networkQualityMonitor/index.js +1 -2
  193. package/dist/networkQualityMonitor/index.js.map +1 -1
  194. package/dist/personal-meeting-room/index.js +2 -3
  195. package/dist/personal-meeting-room/index.js.map +1 -1
  196. package/dist/personal-meeting-room/request.js +2 -3
  197. package/dist/personal-meeting-room/request.js.map +1 -1
  198. package/dist/personal-meeting-room/util.js +1 -2
  199. package/dist/personal-meeting-room/util.js.map +1 -1
  200. package/dist/reachability/clusterReachability.js +35 -20
  201. package/dist/reachability/clusterReachability.js.map +1 -1
  202. package/dist/reachability/index.js +41 -12
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +25 -20
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reachability/util.js +19 -0
  207. package/dist/reachability/util.js.map +1 -1
  208. package/dist/reactions/constants.js +1 -2
  209. package/dist/reactions/constants.js.map +1 -1
  210. package/dist/reactions/reactions.js +2 -4
  211. package/dist/reactions/reactions.js.map +1 -1
  212. package/dist/reactions/reactions.type.js +6 -8
  213. package/dist/reactions/reactions.type.js.map +1 -1
  214. package/dist/reconnection-manager/index.js +18 -11
  215. package/dist/reconnection-manager/index.js.map +1 -1
  216. package/dist/recording-controller/enums.js +4 -5
  217. package/dist/recording-controller/enums.js.map +1 -1
  218. package/dist/recording-controller/index.js +43 -51
  219. package/dist/recording-controller/index.js.map +1 -1
  220. package/dist/recording-controller/util.js +1 -2
  221. package/dist/recording-controller/util.js.map +1 -1
  222. package/dist/roap/index.js +17 -3
  223. package/dist/roap/index.js.map +1 -1
  224. package/dist/roap/request.js +10 -10
  225. package/dist/roap/request.js.map +1 -1
  226. package/dist/roap/turnDiscovery.js +316 -134
  227. package/dist/roap/turnDiscovery.js.map +1 -1
  228. package/dist/rtcMetrics/constants.js +1 -2
  229. package/dist/rtcMetrics/constants.js.map +1 -1
  230. package/dist/rtcMetrics/index.js +4 -6
  231. package/dist/rtcMetrics/index.js.map +1 -1
  232. package/dist/statsAnalyzer/global.js +1 -2
  233. package/dist/statsAnalyzer/global.js.map +1 -1
  234. package/dist/statsAnalyzer/index.js +123 -96
  235. package/dist/statsAnalyzer/index.js.map +1 -1
  236. package/dist/statsAnalyzer/mqaUtil.js +24 -31
  237. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  238. package/dist/transcription/index.js +1 -2
  239. package/dist/transcription/index.js.map +1 -1
  240. package/dist/types/common/logs/request.d.ts +1 -1
  241. package/dist/types/config.d.ts +1 -0
  242. package/dist/types/constants.d.ts +10 -5
  243. package/dist/types/index.d.ts +11 -0
  244. package/dist/types/media/MediaConnectionAwaiter.d.ts +61 -0
  245. package/dist/types/meeting/index.d.ts +71 -16
  246. package/dist/types/meeting/request.d.ts +3 -0
  247. package/dist/types/meeting/util.d.ts +1 -0
  248. package/dist/types/meeting/voicea-meeting.d.ts +16 -0
  249. package/dist/types/meeting-info/index.d.ts +1 -1
  250. package/dist/types/meeting-info/meeting-info-v2.d.ts +1 -1
  251. package/dist/types/meeting-info/util.d.ts +49 -2
  252. package/dist/types/meeting-info/utilv2.d.ts +65 -2
  253. package/dist/types/meetings/index.d.ts +11 -2
  254. package/dist/types/members/util.d.ts +1 -1
  255. package/dist/types/multistream/mediaRequestManager.d.ts +1 -2
  256. package/dist/types/multistream/remoteMediaGroup.d.ts +1 -1
  257. package/dist/types/multistream/remoteMediaManager.d.ts +1 -2
  258. package/dist/types/multistream/sendSlotManager.d.ts +1 -2
  259. package/dist/types/reachability/clusterReachability.d.ts +1 -0
  260. package/dist/types/reachability/index.d.ts +4 -0
  261. package/dist/types/reachability/util.d.ts +7 -0
  262. package/dist/types/roap/index.d.ts +10 -2
  263. package/dist/types/roap/turnDiscovery.d.ts +64 -17
  264. package/dist/webinar/collection.js +1 -2
  265. package/dist/webinar/collection.js.map +1 -1
  266. package/dist/webinar/index.js +2 -3
  267. package/dist/webinar/index.js.map +1 -1
  268. package/jest.config.js +3 -0
  269. package/package.json +44 -25
  270. package/process +1 -0
  271. package/src/config.ts +3 -4
  272. package/src/constants.ts +13 -4
  273. package/src/index.ts +27 -0
  274. package/src/interpretation/index.ts +2 -2
  275. package/src/locus-info/mediaSharesUtils.ts +16 -0
  276. package/src/locus-info/selfUtils.ts +5 -0
  277. package/src/media/MediaConnectionAwaiter.ts +174 -0
  278. package/src/media/index.ts +3 -1
  279. package/src/media/properties.ts +6 -31
  280. package/src/meeting/index.ts +526 -227
  281. package/src/meeting/request.ts +18 -2
  282. package/src/meeting/util.ts +6 -1
  283. package/src/meeting/voicea-meeting.ts +122 -0
  284. package/src/meeting-info/meeting-info-v2.ts +5 -11
  285. package/src/meeting-info/util.ts +244 -233
  286. package/src/meeting-info/utilv2.ts +262 -245
  287. package/src/meetings/index.ts +18 -0
  288. package/src/member/index.ts +0 -1
  289. package/src/multistream/mediaRequestManager.ts +1 -1
  290. package/src/multistream/remoteMediaGroup.ts +1 -1
  291. package/src/multistream/remoteMediaManager.ts +1 -2
  292. package/src/multistream/sendSlotManager.ts +1 -2
  293. package/src/reachability/clusterReachability.ts +20 -5
  294. package/src/reachability/index.ts +24 -1
  295. package/src/reachability/request.ts +15 -11
  296. package/src/reachability/util.ts +21 -0
  297. package/src/reconnection-manager/index.ts +1 -1
  298. package/src/roap/index.ts +25 -3
  299. package/src/roap/request.ts +2 -2
  300. package/src/roap/turnDiscovery.ts +244 -78
  301. package/src/statsAnalyzer/index.ts +63 -27
  302. package/test/integration/spec/journey.js +2 -2
  303. package/test/unit/spec/breakouts/breakout.ts +2 -1
  304. package/test/unit/spec/breakouts/index.ts +7 -4
  305. package/test/unit/spec/interpretation/index.ts +4 -1
  306. package/test/unit/spec/locus-info/index.js +27 -18
  307. package/test/unit/spec/locus-info/mediaSharesUtils.ts +9 -0
  308. package/test/unit/spec/locus-info/selfUtils.js +41 -11
  309. package/test/unit/spec/media/MediaConnectionAwaiter.ts +344 -0
  310. package/test/unit/spec/media/index.ts +94 -78
  311. package/test/unit/spec/media/properties.ts +16 -70
  312. package/test/unit/spec/meeting/index.js +757 -141
  313. package/test/unit/spec/meeting/request.js +21 -0
  314. package/test/unit/spec/meeting/utils.js +58 -11
  315. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  316. package/test/unit/spec/meeting-info/meetinginfov2.js +20 -15
  317. package/test/unit/spec/meeting-info/utilv2.js +6 -0
  318. package/test/unit/spec/meetings/index.js +101 -13
  319. package/test/unit/spec/metrics/index.js +1 -2
  320. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  321. package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -1
  322. package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1
  323. package/test/unit/spec/reachability/clusterReachability.ts +86 -22
  324. package/test/unit/spec/reachability/index.ts +197 -60
  325. package/test/unit/spec/reachability/request.js +15 -7
  326. package/test/unit/spec/reachability/util.ts +32 -2
  327. package/test/unit/spec/reconnection-manager/index.js +28 -0
  328. package/test/unit/spec/recording-controller/index.js +0 -1
  329. package/test/unit/spec/roap/index.ts +61 -6
  330. package/test/unit/spec/roap/turnDiscovery.ts +299 -17
  331. package/test/unit/spec/stats-analyzer/index.js +179 -0
package/src/constants.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  // @ts-ignore
2
2
  import {hydraTypes} from '@webex/common';
3
3
 
4
- type Enum<T extends Record<string, unknown>> = T[keyof T];
4
+ export type Enum<T extends Record<string, unknown>> = T[keyof T];
5
5
 
6
6
  // *********** LOWERCASE / CAMELCASE STRINGS ************
7
7
 
@@ -48,6 +48,8 @@ export const MEETINGINFO = 'meetingInfo';
48
48
  export const MEET = 'meet';
49
49
  export const MEET_M = 'm';
50
50
  export const MEDIA = 'media';
51
+ export const MEET_CO = 'co';
52
+ export const MEET_CISCO = 'cisco';
51
53
 
52
54
  export const OFFLINE = 'offline';
53
55
  export const ONLINE = 'online';
@@ -70,6 +72,8 @@ export const TYPE = 'type';
70
72
  export const VIDEO = 'video';
71
73
  export const VIDEO_STATUS = 'videoStatus';
72
74
 
75
+ export const LANGUAGE_ENGLISH = 'en';
76
+
73
77
  // *********** UPPERCASE ONLY STRINGS ************
74
78
  // Please alphabetize
75
79
  export const _ANSWER_ = 'ANSWER';
@@ -192,7 +196,7 @@ export const ICE_FAIL_TIMEOUT = 3000;
192
196
 
193
197
  export const RETRY_TIMEOUT = 3000;
194
198
 
195
- export const ICE_AND_DTLS_CONNECTION_TIMEOUT = 10000;
199
+ export const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
196
200
  export const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
197
201
 
198
202
  // ******************** REGEX **********************
@@ -298,8 +302,6 @@ export const EVENT_TRIGGERS = {
298
302
  MEETING_MEDIA_REMOTE_STARTED: 'meeting:media:remote:start',
299
303
  MEETING_STARTED_RECORDING: 'meeting:recording:started',
300
304
  MEETING_STOPPED_RECORDING: 'meeting:recording:stopped',
301
- MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
302
- MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
303
305
  MEETING_RECEIVE_REACTIONS: 'meeting:receiveReactions',
304
306
  MEETING_PAUSED_RECORDING: 'meeting:recording:paused',
305
307
  MEETING_RESUMED_RECORDING: 'meeting:recording:resumed',
@@ -374,6 +376,12 @@ export const EVENT_TRIGGERS = {
374
376
  // Locus URL changed
375
377
  MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
376
378
  MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
379
+
380
+ MEETING_TRANSCRIPTION_CONNECTED: 'meeting:transcription:connected',
381
+ MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
382
+ MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
383
+
384
+ MEETING_CAPTION_RECEIVED: 'meeting:caption-received',
377
385
  };
378
386
 
379
387
  export const EVENT_TYPES = {
@@ -964,6 +972,7 @@ export const SELF_ROLES = {
964
972
  COHOST: 'COHOST',
965
973
  MODERATOR: 'MODERATOR',
966
974
  ATTENDEE: 'ATTENDEE',
975
+ PANELIST: 'PANELIST',
967
976
  };
968
977
 
969
978
  export const MEETING_STATE = {
package/src/index.ts CHANGED
@@ -4,6 +4,17 @@ import {registerPlugin} from '@webex/webex-core';
4
4
  import Meetings from './meetings';
5
5
  import config from './config';
6
6
  import {LocusRetryStatusInterceptor} from './interceptors';
7
+ import CaptchaError from './common/errors/captcha-error';
8
+ import IntentToJoinError from './common/errors/intent-to-join';
9
+ import PasswordError from './common/errors/password-error';
10
+ import PermissionError from './common/errors/permission';
11
+ import {
12
+ ReclaimHostEmptyWrongKeyError,
13
+ ReclaimHostIsHostAlreadyError,
14
+ ReclaimHostNotAllowedError,
15
+ ReclaimHostNotSupportedError,
16
+ } from './common/errors/reclaim-host-role-errors';
17
+ import Meeting from './meeting';
7
18
 
8
19
  registerPlugin('meetings', Meetings, {
9
20
  config,
@@ -39,6 +50,22 @@ export default Meetings;
39
50
 
40
51
  export * as CONSTANTS from './constants';
41
52
  export * as REACTIONS from './reactions/reactions';
53
+ export * as sdkAnnotationTypes from './annotation/annotation.types';
54
+ export * as MeetingInfoUtil from './meeting-info/utilv2';
55
+ export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
56
+ export {type Reaction} from './reactions/reactions.type';
57
+
58
+ export {
59
+ CaptchaError,
60
+ IntentToJoinError,
61
+ PasswordError,
62
+ PermissionError,
63
+ ReclaimHostIsHostAlreadyError,
64
+ ReclaimHostNotAllowedError,
65
+ ReclaimHostNotSupportedError,
66
+ ReclaimHostEmptyWrongKeyError,
67
+ Meeting,
68
+ };
42
69
 
43
70
  export {RemoteMedia} from './multistream/remoteMedia';
44
71
 
@@ -124,14 +124,14 @@ const SimultaneousInterpretation = WebexPlugin.extend({
124
124
  * @returns {bool} is target language changed
125
125
  */
126
126
  updateSelfInterpretation({interpretation, selfParticipantId}) {
127
- this.set('selfIsInterpreter', true);
128
127
  const preTargetLanguage = this.targetLanguage;
129
128
  const {originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage} =
130
129
  interpretation || {};
131
130
  this.set({originalLanguage, sourceLanguage, order, isActive, targetLanguage, receiveLanguage});
132
131
  this.set('selfParticipantId', selfParticipantId);
132
+ this.set('selfIsInterpreter', !!targetLanguage);
133
133
 
134
- return !!(targetLanguage && preTargetLanguage !== targetLanguage);
134
+ return !!(preTargetLanguage !== targetLanguage);
135
135
  },
136
136
 
137
137
  /**
@@ -17,6 +17,7 @@ MediaSharesUtils.parse = (mediaShares: object) => {
17
17
  url: MediaSharesUtils.getContentUrl(mediaShares),
18
18
  shareInstanceId: MediaSharesUtils.getShareInstanceId(mediaShares),
19
19
  deviceUrlSharing: MediaSharesUtils.getContentBeneficiaryDeviceUrl(mediaShares),
20
+ resourceType: MediaSharesUtils.getContentResourceType(mediaShares),
20
21
  },
21
22
  whiteboard: {
22
23
  beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
@@ -159,6 +160,21 @@ MediaSharesUtils.getContentAnnotation = (mediaShares: object) => {
159
160
  return extractContent.annotation;
160
161
  };
161
162
 
163
+ /**
164
+ * get live resourceType is sharing from media shares (content)
165
+ * @param {Object} mediaShares
166
+ * @returns {Object}
167
+ */
168
+ MediaSharesUtils.getContentResourceType = (mediaShares: object) => {
169
+ const extractContent = MediaSharesUtils.extractContent(mediaShares);
170
+
171
+ if (!extractContent || !extractContent.resourceType) {
172
+ return undefined;
173
+ }
174
+
175
+ return extractContent.resourceType;
176
+ };
177
+
162
178
  /**
163
179
  * get url is sharing from media shares (content)
164
180
  * @param {Object} mediaShares
@@ -428,6 +428,11 @@ SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
428
428
  return false;
429
429
  }
430
430
 
431
+ // there is no need to trigger user update if no one muted user
432
+ if (changedSelf.selfIdentity === changedSelf.modifiedBy) {
433
+ return false;
434
+ }
435
+
431
436
  return (
432
437
  changedSelf.remoteMuted !== null &&
433
438
  (oldSelf.remoteMuted !== changedSelf.remoteMuted ||
@@ -0,0 +1,174 @@
1
+ import {Defer} from '@webex/common';
2
+ import {ConnectionState, Event} from '@webex/internal-media-core';
3
+ import LoggerProxy from '../common/logs/logger-proxy';
4
+ import {ICE_AND_DTLS_CONNECTION_TIMEOUT} from '../constants';
5
+
6
+ export interface MediaConnectionAwaiterProps {
7
+ webrtcMediaConnection: any;
8
+ }
9
+
10
+ /**
11
+ * @class MediaConnectionAwaiter
12
+ */
13
+ export default class MediaConnectionAwaiter {
14
+ private webrtcMediaConnection: any;
15
+ private timer: any;
16
+ private defer: Defer;
17
+ private retried: boolean;
18
+ private onTimeoutCallback: () => void;
19
+ private connectionStateCallback: () => void;
20
+ private iceGatheringStateCallback: () => void;
21
+
22
+ /**
23
+ * @param {MediaConnectionAwaiterProps} mediaConnectionAwaiterProps
24
+ */
25
+ constructor({webrtcMediaConnection}: MediaConnectionAwaiterProps) {
26
+ this.webrtcMediaConnection = webrtcMediaConnection;
27
+ this.defer = new Defer();
28
+ this.retried = false;
29
+ this.onTimeoutCallback = this.onTimeout.bind(this);
30
+ this.connectionStateCallback = this.connectionStateListenerCallback.bind(this);
31
+ this.iceGatheringStateCallback = this.iceGatheringStateListenerCallback.bind(this);
32
+ }
33
+
34
+ /**
35
+ * Returns true if the connection is connected, false otherwise.
36
+ *
37
+ * @returns {boolean}
38
+ */
39
+ private isConnected(): boolean {
40
+ return this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;
41
+ }
42
+
43
+ /**
44
+ * Returns true if the ICE Gathering is completed, false otherwise.
45
+ *
46
+ * @returns {boolean}
47
+ */
48
+ private isIceGatheringCompleted(): boolean {
49
+ return this.webrtcMediaConnection.getIceGatheringState() === 'complete';
50
+ }
51
+
52
+ /**
53
+ * Clears the callbacks.
54
+ *
55
+ * @returns {void}
56
+ */
57
+ private clearCallbacks(): void {
58
+ this.webrtcMediaConnection.off(
59
+ Event.ICE_GATHERING_STATE_CHANGED,
60
+ this.iceGatheringStateCallback
61
+ );
62
+ this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, this.connectionStateCallback);
63
+ }
64
+
65
+ /**
66
+ * Listener for connection state change.
67
+ *
68
+ * @returns {void}
69
+ */
70
+ connectionStateListenerCallback(): void {
71
+ LoggerProxy.logger.log(
72
+ `Media:MediaConnectionAwaiter#connectionStateListenerCallback --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`
73
+ );
74
+
75
+ if (!this.isConnected()) {
76
+ return;
77
+ }
78
+
79
+ clearTimeout(this.timer);
80
+
81
+ this.clearCallbacks();
82
+
83
+ this.defer.resolve();
84
+ }
85
+
86
+ /**
87
+ * Listener for ICE gathering state change.
88
+ *
89
+ * @returns {void}
90
+ */
91
+ iceGatheringStateListenerCallback(): void {
92
+ const iceGatheringState = this.webrtcMediaConnection.getIceGatheringState();
93
+
94
+ LoggerProxy.logger.log(
95
+ `Media:MediaConnectionAwaiter#iceGatheringStateListenerCallback --> ICE gathering state change -> ${iceGatheringState}`
96
+ );
97
+
98
+ if (!this.isIceGatheringCompleted()) {
99
+ return;
100
+ }
101
+
102
+ if (this.isConnected()) {
103
+ return;
104
+ }
105
+
106
+ clearTimeout(this.timer);
107
+
108
+ this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);
109
+ }
110
+
111
+ /**
112
+ * Function called when the timeout is reached.
113
+ *
114
+ * @returns {void}
115
+ */
116
+ onTimeout(): void {
117
+ if (this.isConnected()) {
118
+ this.clearCallbacks();
119
+
120
+ this.defer.resolve();
121
+
122
+ return;
123
+ }
124
+
125
+ if (!this.isIceGatheringCompleted()) {
126
+ if (!this.retried) {
127
+ LoggerProxy.logger.warn(
128
+ 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the first time, retrying once'
129
+ );
130
+
131
+ // retry once if ICE gathering is not completed
132
+ this.retried = true;
133
+ clearTimeout(this.timer);
134
+ this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);
135
+
136
+ return;
137
+ }
138
+
139
+ LoggerProxy.logger.warn(
140
+ 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering did not complete within the timeout for the second time, rejecting'
141
+ );
142
+ } else {
143
+ LoggerProxy.logger.warn(
144
+ 'Media:MediaConnectionAwaiter#onTimeout --> ICE gathering completed, but connection state is not connected, rejecting'
145
+ );
146
+ }
147
+
148
+ this.clearCallbacks();
149
+
150
+ this.defer.reject();
151
+ }
152
+
153
+ /**
154
+ * Waits for the webrtc media connection to be connected.
155
+ *
156
+ * @returns {Promise}
157
+ */
158
+ waitForMediaConnectionConnected(): Promise<void> {
159
+ if (this.isConnected()) {
160
+ return Promise.resolve();
161
+ }
162
+
163
+ this.webrtcMediaConnection.on(Event.CONNECTION_STATE_CHANGED, this.connectionStateCallback);
164
+
165
+ this.webrtcMediaConnection.on(
166
+ Event.ICE_GATHERING_STATE_CHANGED,
167
+ this.iceGatheringStateCallback
168
+ );
169
+
170
+ this.timer = setTimeout(this.onTimeoutCallback, ICE_AND_DTLS_CONNECTION_TIMEOUT);
171
+
172
+ return this.defer.promise;
173
+ }
174
+ }
@@ -160,7 +160,9 @@ Media.createMediaConnection = (
160
160
 
161
161
  const iceServers = [];
162
162
 
163
- if (turnServerInfo) {
163
+ // we might not have any TURN server if TURN discovery failed or wasn't done or
164
+ // we might get an empty TURN url if we land on a video mesh node
165
+ if (turnServerInfo?.url) {
164
166
  iceServers.push({
165
167
  urls: turnServerInfo.url,
166
168
  username: turnServerInfo.username || '',
@@ -1,5 +1,3 @@
1
- import {ConnectionState, Event} from '@webex/internal-media-core';
2
-
3
1
  import {
4
2
  LocalCameraStream,
5
3
  LocalMicrophoneStream,
@@ -8,8 +6,9 @@ import {
8
6
  RemoteStream,
9
7
  } from '@webex/media-helpers';
10
8
 
11
- import {MEETINGS, ICE_AND_DTLS_CONNECTION_TIMEOUT, QUALITY_LEVELS} from '../constants';
9
+ import {MEETINGS, QUALITY_LEVELS} from '../constants';
12
10
  import LoggerProxy from '../common/logs/logger-proxy';
11
+ import MediaConnectionAwaiter from './MediaConnectionAwaiter';
13
12
 
14
13
  export type MediaDirection = {
15
14
  sendAudio: boolean;
@@ -175,35 +174,11 @@ export default class MediaProperties {
175
174
  * @returns {Promise<void>}
176
175
  */
177
176
  waitForMediaConnectionConnected(): Promise<void> {
178
- const isConnected = () =>
179
- this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;
180
-
181
- if (isConnected()) {
182
- return Promise.resolve();
183
- }
184
-
185
- return new Promise<void>((resolve, reject) => {
186
- let timer;
187
-
188
- const connectionStateListener = () => {
189
- LoggerProxy.logger.log(
190
- `Media:properties#waitForMediaConnectionConnected --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`
191
- );
192
-
193
- if (isConnected()) {
194
- clearTimeout(timer);
195
- this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
196
- resolve();
197
- }
198
- };
199
-
200
- timer = setTimeout(() => {
201
- this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
202
- reject();
203
- }, ICE_AND_DTLS_CONNECTION_TIMEOUT);
204
-
205
- this.webrtcMediaConnection.on(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
177
+ const mediaConnectionAwaiter = new MediaConnectionAwaiter({
178
+ webrtcMediaConnection: this.webrtcMediaConnection,
206
179
  });
180
+
181
+ return mediaConnectionAwaiter.waitForMediaConnectionConnected();
207
182
  }
208
183
 
209
184
  /**