@webex/plugin-meetings 3.0.0-bnr.5 → 3.0.0-stream-classes.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 (303) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +70 -32
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +422 -217
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +12 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/webex-errors.js +3 -2
  17. package/dist/common/errors/webex-errors.js.map +1 -1
  18. package/dist/common/logs/logger-proxy.js +1 -1
  19. package/dist/common/logs/logger-proxy.js.map +1 -1
  20. package/dist/common/logs/request.d.ts +1 -1
  21. package/dist/common/queue.js +24 -9
  22. package/dist/common/queue.js.map +1 -1
  23. package/dist/config.js +1 -7
  24. package/dist/config.js.map +1 -1
  25. package/dist/constants.js +118 -24
  26. package/dist/constants.js.map +1 -1
  27. package/dist/controls-options-manager/enums.js +2 -0
  28. package/dist/controls-options-manager/enums.js.map +1 -1
  29. package/dist/controls-options-manager/index.js +19 -14
  30. package/dist/controls-options-manager/index.js.map +1 -1
  31. package/dist/controls-options-manager/types.js.map +1 -1
  32. package/dist/controls-options-manager/util.js +80 -11
  33. package/dist/controls-options-manager/util.js.map +1 -1
  34. package/dist/index.js +62 -20
  35. package/dist/index.js.map +1 -1
  36. package/dist/interpretation/collection.js +23 -0
  37. package/dist/interpretation/collection.js.map +1 -0
  38. package/dist/interpretation/index.js +366 -0
  39. package/dist/interpretation/index.js.map +1 -0
  40. package/dist/interpretation/siLanguage.js +25 -0
  41. package/dist/interpretation/siLanguage.js.map +1 -0
  42. package/dist/locus-info/controlsUtils.js +71 -1
  43. package/dist/locus-info/controlsUtils.js.map +1 -1
  44. package/dist/locus-info/index.js +305 -57
  45. package/dist/locus-info/index.js.map +1 -1
  46. package/dist/locus-info/infoUtils.js +7 -1
  47. package/dist/locus-info/infoUtils.js.map +1 -1
  48. package/dist/locus-info/mediaSharesUtils.js +43 -1
  49. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  50. package/dist/locus-info/parser.js +219 -63
  51. package/dist/locus-info/parser.js.map +1 -1
  52. package/dist/locus-info/selfUtils.js +44 -22
  53. package/dist/locus-info/selfUtils.js.map +1 -1
  54. package/dist/media/index.js +57 -104
  55. package/dist/media/index.js.map +1 -1
  56. package/dist/media/properties.js +60 -121
  57. package/dist/media/properties.js.map +1 -1
  58. package/dist/meeting/in-meeting-actions.js +61 -3
  59. package/dist/meeting/in-meeting-actions.js.map +1 -1
  60. package/dist/meeting/index.js +2530 -2534
  61. package/dist/meeting/index.js.map +1 -1
  62. package/dist/meeting/locusMediaRequest.js +292 -0
  63. package/dist/meeting/locusMediaRequest.js.map +1 -0
  64. package/dist/meeting/muteState.js +125 -205
  65. package/dist/meeting/muteState.js.map +1 -1
  66. package/dist/meeting/request.js +150 -150
  67. package/dist/meeting/request.js.map +1 -1
  68. package/dist/meeting/util.js +568 -438
  69. package/dist/meeting/util.js.map +1 -1
  70. package/dist/meeting-info/index.js +48 -7
  71. package/dist/meeting-info/index.js.map +1 -1
  72. package/dist/meeting-info/meeting-info-v2.js +94 -38
  73. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  74. package/dist/meeting-info/utilv2.js +4 -2
  75. package/dist/meeting-info/utilv2.js.map +1 -1
  76. package/dist/meetings/index.d.ts +0 -2
  77. package/dist/meetings/index.js +260 -85
  78. package/dist/meetings/index.js.map +1 -1
  79. package/dist/meetings/meetings.types.js +7 -0
  80. package/dist/meetings/meetings.types.js.map +1 -0
  81. package/dist/meetings/util.js +42 -7
  82. package/dist/meetings/util.js.map +1 -1
  83. package/dist/member/index.d.ts +2 -0
  84. package/dist/member/index.js +26 -0
  85. package/dist/member/index.js.map +1 -1
  86. package/dist/member/member.types.d.ts +11 -0
  87. package/dist/member/member.types.js +18 -0
  88. package/dist/member/member.types.js.map +1 -0
  89. package/dist/member/types.js +11 -1
  90. package/dist/member/types.js.map +1 -1
  91. package/dist/member/util.js +60 -23
  92. package/dist/member/util.js.map +1 -1
  93. package/dist/members/index.js +4 -1
  94. package/dist/members/index.js.map +1 -1
  95. package/dist/members/request.js +75 -45
  96. package/dist/members/request.js.map +1 -1
  97. package/dist/members/util.js +308 -317
  98. package/dist/members/util.js.map +1 -1
  99. package/dist/metrics/config.js +1 -3
  100. package/dist/metrics/config.js.map +1 -1
  101. package/dist/metrics/constants.js +1 -0
  102. package/dist/metrics/constants.js.map +1 -1
  103. package/dist/metrics/index.d.ts +1 -1
  104. package/dist/metrics/index.js +1 -451
  105. package/dist/metrics/index.js.map +1 -1
  106. package/dist/multistream/mediaRequestManager.js +136 -40
  107. package/dist/multistream/mediaRequestManager.js.map +1 -1
  108. package/dist/multistream/receiveSlot.js.map +1 -1
  109. package/dist/multistream/receiveSlotManager.js +4 -4
  110. package/dist/multistream/receiveSlotManager.js.map +1 -1
  111. package/dist/multistream/remoteMedia.js.map +1 -1
  112. package/dist/multistream/remoteMediaGroup.js +60 -3
  113. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  114. package/dist/multistream/remoteMediaManager.js +36 -0
  115. package/dist/multistream/remoteMediaManager.js.map +1 -1
  116. package/dist/multistream/sendSlotManager.js +233 -0
  117. package/dist/multistream/sendSlotManager.js.map +1 -0
  118. package/dist/reachability/index.js +18 -3
  119. package/dist/reachability/index.js.map +1 -1
  120. package/dist/reachability/request.js +5 -3
  121. package/dist/reachability/request.js.map +1 -1
  122. package/dist/reconnection-manager/index.js +181 -153
  123. package/dist/reconnection-manager/index.js.map +1 -1
  124. package/dist/recording-controller/index.js +21 -2
  125. package/dist/recording-controller/index.js.map +1 -1
  126. package/dist/recording-controller/util.js +9 -8
  127. package/dist/recording-controller/util.js.map +1 -1
  128. package/dist/roap/index.js +25 -32
  129. package/dist/roap/index.js.map +1 -1
  130. package/dist/roap/request.js +42 -51
  131. package/dist/roap/request.js.map +1 -1
  132. package/dist/roap/turnDiscovery.js +97 -38
  133. package/dist/roap/turnDiscovery.js.map +1 -1
  134. package/dist/rtcMetrics/constants.js +12 -0
  135. package/dist/rtcMetrics/constants.js.map +1 -0
  136. package/dist/rtcMetrics/index.js +117 -0
  137. package/dist/rtcMetrics/index.js.map +1 -0
  138. package/dist/statsAnalyzer/index.js +0 -1
  139. package/dist/statsAnalyzer/index.js.map +1 -1
  140. package/dist/types/annotation/annotation.types.d.ts +43 -0
  141. package/dist/types/annotation/constants.d.ts +31 -0
  142. package/dist/types/annotation/index.d.ts +124 -0
  143. package/dist/types/breakouts/events.d.ts +2 -0
  144. package/dist/types/breakouts/utils.d.ts +7 -0
  145. package/dist/types/common/errors/webex-errors.d.ts +1 -1
  146. package/dist/types/config.d.ts +0 -6
  147. package/dist/types/constants.d.ts +51 -21
  148. package/dist/types/controls-options-manager/enums.d.ts +2 -0
  149. package/dist/types/controls-options-manager/index.d.ts +1 -1
  150. package/dist/types/controls-options-manager/types.d.ts +7 -1
  151. package/dist/types/index.d.ts +1 -1
  152. package/dist/types/interpretation/collection.d.ts +5 -0
  153. package/dist/types/interpretation/index.d.ts +5 -0
  154. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  155. package/dist/types/locus-info/index.d.ts +39 -1
  156. package/dist/types/media/index.d.ts +2 -0
  157. package/dist/types/media/properties.d.ts +16 -38
  158. package/dist/types/meeting/in-meeting-actions.d.ts +46 -2
  159. package/dist/types/meeting/index.d.ts +179 -379
  160. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  161. package/dist/types/meeting/muteState.d.ts +39 -40
  162. package/dist/types/meeting/request.d.ts +25 -26
  163. package/dist/types/meeting/util.d.ts +74 -1
  164. package/dist/types/meeting-info/meeting-info-v2.d.ts +14 -3
  165. package/dist/types/meetings/index.d.ts +49 -1
  166. package/dist/types/meetings/meetings.types.d.ts +4 -0
  167. package/dist/types/member/index.d.ts +2 -0
  168. package/dist/types/members/request.d.ts +56 -11
  169. package/dist/types/members/util.d.ts +209 -1
  170. package/dist/types/metrics/config.d.ts +26 -2
  171. package/dist/types/metrics/constants.d.ts +1 -0
  172. package/dist/types/metrics/index.d.ts +17 -0
  173. package/dist/types/multistream/mediaRequestManager.d.ts +27 -10
  174. package/dist/types/multistream/receiveSlot.d.ts +3 -3
  175. package/dist/types/multistream/remoteMedia.d.ts +2 -2
  176. package/dist/types/multistream/remoteMediaManager.d.ts +14 -0
  177. package/dist/types/roap/request.d.ts +6 -8
  178. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  179. package/package.json +21 -20
  180. package/src/annotation/annotation.types.ts +50 -0
  181. package/src/annotation/constants.ts +36 -0
  182. package/src/annotation/index.ts +328 -0
  183. package/src/breakouts/README.md +3 -2
  184. package/src/breakouts/breakout.ts +62 -27
  185. package/src/breakouts/events.ts +56 -0
  186. package/src/breakouts/index.ts +244 -64
  187. package/src/breakouts/utils.ts +13 -0
  188. package/src/common/errors/webex-errors.ts +6 -2
  189. package/src/common/logs/logger-proxy.ts +1 -1
  190. package/src/common/queue.ts +22 -8
  191. package/src/config.ts +0 -6
  192. package/src/constants.ts +111 -19
  193. package/src/controls-options-manager/enums.ts +2 -0
  194. package/src/controls-options-manager/index.ts +13 -10
  195. package/src/controls-options-manager/types.ts +10 -0
  196. package/src/controls-options-manager/util.ts +82 -11
  197. package/src/index.ts +18 -11
  198. package/src/interpretation/README.md +60 -0
  199. package/src/interpretation/collection.ts +19 -0
  200. package/src/interpretation/index.ts +332 -0
  201. package/src/interpretation/siLanguage.ts +18 -0
  202. package/src/locus-info/controlsUtils.ts +81 -0
  203. package/src/locus-info/index.ts +318 -57
  204. package/src/locus-info/infoUtils.ts +10 -2
  205. package/src/locus-info/mediaSharesUtils.ts +48 -0
  206. package/src/locus-info/parser.ts +224 -39
  207. package/src/locus-info/selfUtils.ts +32 -20
  208. package/src/media/index.ts +94 -108
  209. package/src/media/properties.ts +69 -109
  210. package/src/meeting/in-meeting-actions.ts +120 -4
  211. package/src/meeting/index.ts +1967 -2120
  212. package/src/meeting/locusMediaRequest.ts +314 -0
  213. package/src/meeting/muteState.ts +119 -194
  214. package/src/meeting/request.ts +122 -115
  215. package/src/meeting/util.ts +549 -413
  216. package/src/meeting-info/index.ts +54 -8
  217. package/src/meeting-info/meeting-info-v2.ts +89 -24
  218. package/src/meeting-info/utilv2.ts +6 -2
  219. package/src/meetings/index.ts +247 -87
  220. package/src/meetings/meetings.types.ts +12 -0
  221. package/src/meetings/util.ts +47 -12
  222. package/src/member/index.ts +28 -1
  223. package/src/member/types.ts +14 -0
  224. package/src/member/util.ts +75 -26
  225. package/src/members/index.ts +7 -1
  226. package/src/members/request.ts +61 -21
  227. package/src/members/util.ts +316 -326
  228. package/src/metrics/constants.ts +1 -0
  229. package/src/metrics/index.ts +1 -474
  230. package/src/multistream/mediaRequestManager.ts +183 -67
  231. package/src/multistream/receiveSlot.ts +4 -4
  232. package/src/multistream/receiveSlotManager.ts +4 -4
  233. package/src/multistream/remoteMedia.ts +2 -2
  234. package/src/multistream/remoteMediaGroup.ts +59 -0
  235. package/src/multistream/remoteMediaManager.ts +33 -0
  236. package/src/multistream/sendSlotManager.ts +170 -0
  237. package/src/reachability/index.ts +15 -4
  238. package/src/reachability/request.ts +7 -3
  239. package/src/reconnection-manager/index.ts +36 -29
  240. package/src/recording-controller/index.ts +20 -3
  241. package/src/recording-controller/util.ts +26 -9
  242. package/src/roap/index.ts +25 -30
  243. package/src/roap/request.ts +44 -51
  244. package/src/roap/turnDiscovery.ts +51 -25
  245. package/src/rtcMetrics/constants.ts +3 -0
  246. package/src/rtcMetrics/index.ts +100 -0
  247. package/src/statsAnalyzer/index.ts +0 -1
  248. package/test/integration/spec/converged-space-meetings.js +60 -3
  249. package/test/integration/spec/journey.js +336 -259
  250. package/test/integration/spec/space-meeting.js +76 -3
  251. package/test/unit/spec/annotation/index.ts +418 -0
  252. package/test/unit/spec/breakouts/breakout.ts +85 -26
  253. package/test/unit/spec/breakouts/events.ts +89 -0
  254. package/test/unit/spec/breakouts/index.ts +636 -98
  255. package/test/unit/spec/breakouts/utils.js +19 -1
  256. package/test/unit/spec/common/queue.js +31 -2
  257. package/test/unit/spec/controls-options-manager/index.js +8 -1
  258. package/test/unit/spec/controls-options-manager/util.js +576 -397
  259. package/test/unit/spec/fixture/locus.js +1 -0
  260. package/test/unit/spec/interpretation/collection.ts +15 -0
  261. package/test/unit/spec/interpretation/index.ts +589 -0
  262. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  263. package/test/unit/spec/locus-info/controlsUtils.js +195 -1
  264. package/test/unit/spec/locus-info/index.js +950 -45
  265. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  266. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  267. package/test/unit/spec/locus-info/parser.js +62 -22
  268. package/test/unit/spec/locus-info/selfConstant.js +19 -0
  269. package/test/unit/spec/locus-info/selfUtils.js +131 -26
  270. package/test/unit/spec/media/index.ts +82 -79
  271. package/test/unit/spec/meeting/in-meeting-actions.ts +60 -2
  272. package/test/unit/spec/meeting/index.js +3208 -1734
  273. package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
  274. package/test/unit/spec/meeting/muteState.js +328 -417
  275. package/test/unit/spec/meeting/request.js +393 -48
  276. package/test/unit/spec/meeting/utils.js +552 -76
  277. package/test/unit/spec/meeting-info/index.js +181 -0
  278. package/test/unit/spec/meeting-info/meetinginfov2.js +258 -20
  279. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  280. package/test/unit/spec/meetings/index.js +631 -145
  281. package/test/unit/spec/meetings/utils.js +164 -9
  282. package/test/unit/spec/member/index.js +44 -14
  283. package/test/unit/spec/member/util.js +296 -155
  284. package/test/unit/spec/members/index.js +23 -3
  285. package/test/unit/spec/members/request.js +167 -35
  286. package/test/unit/spec/metrics/index.js +1 -50
  287. package/test/unit/spec/multistream/mediaRequestManager.ts +366 -8
  288. package/test/unit/spec/multistream/receiveSlot.ts +1 -1
  289. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  290. package/test/unit/spec/multistream/remoteMediaManager.ts +123 -0
  291. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  292. package/test/unit/spec/reachability/index.ts +66 -5
  293. package/test/unit/spec/reachability/request.js +3 -1
  294. package/test/unit/spec/reconnection-manager/index.js +55 -5
  295. package/test/unit/spec/recording-controller/index.js +294 -218
  296. package/test/unit/spec/recording-controller/util.js +223 -96
  297. package/test/unit/spec/roap/index.ts +21 -48
  298. package/test/unit/spec/roap/request.ts +74 -60
  299. package/test/unit/spec/roap/turnDiscovery.ts +30 -6
  300. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  301. package/test/utils/integrationTestUtils.js +46 -0
  302. package/test/utils/testUtils.js +0 -60
  303. package/src/metrics/config.ts +0 -487
package/src/config.ts CHANGED
@@ -10,13 +10,7 @@ export default {
10
10
  meetings: {
11
11
  deviceType: deviceType.WEB,
12
12
  mediaSettings: {
13
- sendAudio: true,
14
- sendVideo: true,
15
- receiveAudio: true,
16
- receiveVideo: true,
17
13
  pstn: false,
18
- sendShare: false,
19
- receiveShare: false,
20
14
  },
21
15
  reconnection: {
22
16
  enabled: false,
package/src/constants.ts CHANGED
@@ -4,7 +4,6 @@ import {hydraTypes} from '@webex/common';
4
4
  // *********** LOWERCASE / CAMELCASE STRINGS ************
5
5
 
6
6
  export const AUDIO = 'audio';
7
- export const AUDIO_INPUT = 'audioinput';
8
7
  export const AUDIO_STATUS = 'audioStatus';
9
8
  export const ALERT = 'alert';
10
9
  export const ALIAS = 'alias';
@@ -67,7 +66,6 @@ export const SHARE = 'share';
67
66
  export const TYPE = 'type';
68
67
 
69
68
  export const VIDEO = 'video';
70
- export const VIDEO_INPUT = 'videoinput';
71
69
  export const VIDEO_STATUS = 'videoStatus';
72
70
 
73
71
  // *********** UPPERCASE ONLY STRINGS ************
@@ -192,7 +190,7 @@ export const ICE_FAIL_TIMEOUT = 3000;
192
190
 
193
191
  export const RETRY_TIMEOUT = 3000;
194
192
 
195
- export const PC_BAIL_TIMEOUT = 8000;
193
+ export const PC_BAIL_TIMEOUT = 15000;
196
194
 
197
195
  // ******************** REGEX **********************
198
196
  // Please alphabetize
@@ -283,6 +281,7 @@ export const EVENT_TRIGGERS = {
283
281
  MEETING_STOPPED_SHARING_LOCAL: 'meeting:stoppedSharingLocal',
284
282
  MEETING_STARTED_SHARING_REMOTE: 'meeting:startedSharingRemote',
285
283
  MEETING_STOPPED_SHARING_REMOTE: 'meeting:stoppedSharingRemote',
284
+ MEETING_UPDATE_ANNOTATION_INFO: 'meeting:updateAnnotationInfo',
286
285
  MEETING_STARTED_SHARING_WHITEBOARD: 'meeting:startedSharingWhiteboard',
287
286
  MEETING_STOPPED_SHARING_WHITEBOARD: 'meeting:stoppedSharingWhiteboard',
288
287
  MEETING_MEDIA_LOCAL_STARTED: 'meeting:media:local:start',
@@ -308,11 +307,19 @@ export const EVENT_TRIGGERS = {
308
307
  MEETING_SELF_PHONE_AUDIO_UPDATE: 'meeting:self:phoneAudioUpdate',
309
308
  MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST: 'meeting:self:cannotViewParticipantList',
310
309
  MEETING_SELF_IS_SHARING_BLOCKED: 'meeting:self:isSharingBlocked',
310
+ MEETING_SELF_ROLES_CHANGED: 'meeting:self:rolesChanged',
311
311
  MEETING_CONTROLS_LAYOUT_UPDATE: 'meeting:layout:update',
312
312
  MEETING_ENTRY_EXIT_TONE_UPDATE: 'meeting:entryExitTone:update',
313
313
  MEETING_BREAKOUTS_UPDATE: 'meeting:breakouts:update',
314
314
  MEETING_BREAKOUTS_CLOSING: 'meeting:breakouts:closing',
315
315
  MEETING_BREAKOUTS_MESSAGE: 'meeting:breakouts:message',
316
+ MEETING_BREAKOUTS_ASK_RETURN_TO_MAIN: 'meeting:breakouts:askReturnToMain',
317
+ MEETING_BREAKOUTS_LEAVE: 'meeting:breakouts:leave',
318
+ MEETING_BREAKOUTS_ASK_FOR_HELP: 'meeting:breakouts:askForHelp',
319
+ MEETING_BREAKOUTS_PRE_ASSIGNMENTS_UPDATE: 'meeting:breakouts:preAssignmentsUpdate',
320
+ MEETING_INTERPRETATION_UPDATE: 'meeting:interpretation:update',
321
+ MEETING_INTERPRETATION_SUPPORT_LANGUAGES_UPDATE: 'meeting:interpretation:supportLanguagesUpdate',
322
+ MEETING_INTERPRETATION_HANDOFF_REQUESTS_ARRIVED: 'meeting:interpretation:handoffRequestsArrived',
316
323
  MEMBERS_UPDATE: 'members:update',
317
324
  MEMBERS_CLEAR: 'members:clear',
318
325
  MEMBERS_CONTENT_UPDATE: 'members:content:update',
@@ -343,17 +350,28 @@ export const EVENT_TRIGGERS = {
343
350
  REMOTE_MEDIA_AUDIO_CREATED: 'media:remoteAudio:created',
344
351
  REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED: 'media:remoteScreenShareAudio:created',
345
352
  REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED: 'media:remoteVideo:layoutChanged',
353
+ // Controls
354
+ MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED: 'meeting:controls:mute-on-entry:updated',
355
+ MEETING_CONTROLS_SHARE_CONTROL_UPDATED: 'meeting:controls:share-control:updated',
356
+ MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED: 'meeting:controls:disallow-unmute:updated',
357
+ MEETING_CONTROLS_REACTIONS_UPDATED: 'meeting:controls:reactions:updated',
358
+ MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED:
359
+ 'meeting:controls:view-the-participants-list:updated',
360
+ MEETING_CONTROLS_RAISE_HAND_UPDATED: 'meeting:controls:raise-hand:updated',
361
+ MEETING_CONTROLS_VIDEO_UPDATED: 'meeting:controls:video:updated',
362
+ // Locus URL changed
363
+ MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
364
+ MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
346
365
  };
347
366
 
348
367
  export const EVENT_TYPES = {
349
368
  SELF: 'self',
350
369
  OTHER: 'other',
351
- LOCAL: 'local',
352
370
  REMOTE: 'remote',
353
371
  REMOTE_AUDIO: 'remoteAudio',
354
372
  REMOTE_VIDEO: 'remoteVideo',
355
373
  REMOTE_SHARE: 'remoteShare',
356
- LOCAL_SHARE: 'localShare',
374
+ REMOTE_SHARE_AUDIO: 'remoteShareAudio',
357
375
  ERROR: 'error',
358
376
  };
359
377
 
@@ -366,6 +384,7 @@ export const MEETING_REMOVED_REASON = {
366
384
  FULLSTATE_REMOVED: 'FULLSTATE_REMOVED', // meeting got dropped ? not sure
367
385
  MEETING_INACTIVE_TERMINATING: 'MEETING_INACTIVE_TERMINATING', // Meeting got ended or everyone left the meeting
368
386
  CLIENT_LEAVE_REQUEST: 'CLIENT_LEAVE_REQUEST', // You triggered leave meeting
387
+ CLIENT_LEAVE_REQUEST_TAB_CLOSED: 'CLIENT_LEAVE_REQUEST_TAB_CLOSED', // You triggered leave meeting, such as closing the browser tab directly
369
388
  USER_ENDED_SHARE_STREAMS: 'USER_ENDED_SHARE_STREAMS', // user triggered stop share
370
389
  NO_MEETINGS_TO_SYNC: 'NO_MEETINGS_TO_SYNC', // After the syncMeeting no meeting exists
371
390
  MEETING_CONNECTION_FAILED: 'MEETING_CONNECTION_FAILED', // meeting failed to connect due to ice failures or firewall issue
@@ -384,6 +403,7 @@ export const SHARE_STOPPED_REASON = {
384
403
  SELF_STOPPED: 'SELF_STOPPED',
385
404
  MEETING_REJOIN: 'MEETING_REJOIN',
386
405
  MEDIA_RECONNECTION: 'MEDIA_RECONNECTION',
406
+ TRACK_ENDED: 'TRACK_ENDED',
387
407
  };
388
408
 
389
409
  export const EVENTS = {
@@ -531,6 +551,9 @@ export const LOCUS = {
531
551
  SYNCDEBUG: 'sync_debug',
532
552
  };
533
553
 
554
+ export const ANNOTATION = {
555
+ ANNOTATION_ON_SHARE_SUPPORTED: 'ANNOTATION_ON_SHARE_SUPPORTED',
556
+ };
534
557
  export const BREAKOUTS = {
535
558
  STATUS: {
536
559
  CLOSING: 'CLOSING',
@@ -542,6 +565,10 @@ export const BREAKOUTS = {
542
565
  BREAKOUTS_CLOSING: 'BREAKOUTS_CLOSING',
543
566
  MESSAGE: 'MESSAGE',
544
567
  MEMBERS_UPDATE: 'MEMBERS_UPDATE',
568
+ ASK_RETURN_TO_MAIN: 'ASK_RETURN_TO_MAIN',
569
+ LEAVE_BREAKOUT: 'LEAVE_BREAKOUT',
570
+ ASK_FOR_HELP: 'ASK_FOR_HELP',
571
+ PRE_ASSIGNMENTS_UPDATE: 'PRE_ASSIGNMENTS_UPDATE',
545
572
  },
546
573
  SESSION_TYPES: {
547
574
  MAIN: 'MAIN',
@@ -564,7 +591,6 @@ export const BREAKOUTS = {
564
591
  EDIT_LOCK_TOKEN_MISMATCH: 201409024,
565
592
  EDIT_NOT_AUTHORIZED: 201403007,
566
593
  },
567
- DEFAULT_DURATION: 60000,
568
594
  EDIT_LOCK_STATUS: {
569
595
  LOCKED: 'LOCKED',
570
596
  NOT_LOCKED: 'NOT_LOCKED',
@@ -573,6 +599,20 @@ export const BREAKOUTS = {
573
599
  DEFAULT_TTL: 30,
574
600
  };
575
601
 
602
+ export const INTERPRETATION = {
603
+ EVENTS: {
604
+ SUPPORT_LANGUAGES_UPDATE: 'SUPPORT_LANGUAGES_UPDATE',
605
+ HANDOFF_REQUESTS_ARRIVED: 'HANDOFF_REQUESTS_ARRIVED',
606
+ },
607
+ ACTION_TYPE: {
608
+ OFFERED: 'OFFERED',
609
+ ACCEPTED: 'ACCEPTED',
610
+ REQUESTED: 'REQUESTED',
611
+ DECLINED: 'DECLINED',
612
+ },
613
+ RESOURCE_TYPE: 'SiHandover',
614
+ };
615
+
576
616
  export const LOCUSINFO = {
577
617
  EVENTS: {
578
618
  CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',
@@ -580,7 +620,16 @@ export const LOCUSINFO = {
580
620
  CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
581
621
  CONTROLS_MEETING_BREAKOUT_UPDATED: 'CONTROLS_MEETING_BREAKOUT_UPDATED',
582
622
  CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
623
+ CONTROLS_MEETING_INTERPRETATION_UPDATED: 'CONTROLS_MEETING_INTERPRETATION_UPDATED',
583
624
  CONTROLS_ENTRY_EXIT_TONE_UPDATED: 'CONTROLS_ENTRY_EXIT_TONE_UPDATED',
625
+ CONTROLS_JOIN_BREAKOUT_FROM_MAIN: 'CONTROLS_JOIN_BREAKOUT_FROM_MAIN',
626
+ CONTROLS_MUTE_ON_ENTRY_CHANGED: 'CONTROLS_MUTE_ON_ENTRY_CHANGED',
627
+ CONTROLS_SHARE_CONTROL_CHANGED: 'CONTROLS_SHARE_CONTROL_CHANGED',
628
+ CONTROLS_DISALLOW_UNMUTE_CHANGED: 'CONTROLS_DISALLOW_UNMUTE_CHANGED',
629
+ CONTROLS_REACTIONS_CHANGED: 'CONTROLS_REACTIONS_CHANGED',
630
+ CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: 'CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED',
631
+ CONTROLS_RAISE_HAND_CHANGED: 'CONTROLS_RAISE_HAND_CHANGED',
632
+ CONTROLS_VIDEO_CHANGED: 'CONTROLS_VIDEO_CHANGED',
584
633
  SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
585
634
  SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
586
635
  SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
@@ -588,6 +637,7 @@ export const LOCUSINFO = {
588
637
  LOCAL_UNMUTE_REQUESTED: 'LOCAL_UNMUTE_REQUESTED',
589
638
  LOCAL_UNMUTE_REQUIRED: 'LOCAL_UNMUTE_REQUIRED',
590
639
  SELF_MODERATOR_CHANGED: 'SELF_MODERATOR_CHANGED',
640
+ SELF_ROLES_CHANGED: 'SELF_ROLES_CHANGED',
591
641
  MEETING_UPDATE: 'MEETING_UPDATE',
592
642
  MEDIA_STATUS_CHANGE: 'MEDIA_STATUS_CHANGE',
593
643
  FULL_STATE_TYPE_UPDATE: 'FULL_STATE_TYPE_UPDATE',
@@ -602,9 +652,9 @@ export const LOCUSINFO = {
602
652
  SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE: 'SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE',
603
653
  SELF_IS_SHARING_BLOCKED_CHANGE: 'SELF_IS_SHARING_BLOCKED_CHANGE',
604
654
  SELF_MEETING_BREAKOUTS_CHANGED: 'SELF_MEETING_BREAKOUTS_CHANGED',
655
+ SELF_MEETING_INTERPRETATION_CHANGED: 'SELF_MEETING_INTERPRETATION_CHANGED',
605
656
  MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',
606
657
  LINKS_SERVICES: 'LINKS_SERVICES',
607
- SELF_MODERATOR_OR_COHOST_UPGRADE: 'SELF_MODERATOR_OR_COHOST_UPGRADE',
608
658
  },
609
659
  };
610
660
 
@@ -767,6 +817,28 @@ export const MEETING_END_REASON = {
767
817
  MEDIA_RELEASED: 'MEDIA_RELEASED',
768
818
  };
769
819
 
820
+ export enum SELF_POLICY {
821
+ ENFORCE_VIRTUAL_BACKGROUND = 'enforceVirtualBackground',
822
+ SUPPORT_LOCAL_RECORD = 'supportLocalRecord',
823
+ SUPPORT_NETWORK_BASED_RECORD = 'supportNetworkBasedRecord',
824
+ SUPPORT_REALTIME_CLOSE_CAPTION = 'supportRealtimeCloseCaption',
825
+ SUPPORT_CHAT = 'supportChat',
826
+ SUPPORT_DESKTOP_SHARE_REMOTE = 'supportDesktopShareRemote',
827
+ SUPPORT_DESKTOP_SHARE = 'supportDesktopShare',
828
+ SUPPORT_WHITEBOARD = 'supportWhiteboard',
829
+ SUPPORT_FILE_TRANSFER = 'supportFileTransfer',
830
+ SUPPORT_APP_SHARE = 'supportAppShare',
831
+ SUPPORT_CAMERA_SHARE = 'supportCameraShare',
832
+ SUPPORT_FILE_SHARE = 'supportFileShare',
833
+ SUPPORT_ANNOTATION = 'supportAnnotation',
834
+ SUPPORT_BROADCAST_MESSAGE = 'supportBroadcastMessage',
835
+ SUPPORT_VIDEO = 'supportVideo',
836
+ SUPPORT_HQV = 'supportHQV',
837
+ SUPPORT_HDV = 'supportHDV',
838
+ SUPPORT_PARTICIPANT_LIST = 'supportParticipantList',
839
+ SUPPORT_VOIP = 'supportVoIP',
840
+ }
841
+
770
842
  export const DISPLAY_HINTS = {
771
843
  ADD_GUEST: 'ADD_GUEST',
772
844
  ROSTER_WAITING_TO_JOIN: 'ROSTER_WAITING_TO_JOIN',
@@ -812,6 +884,7 @@ export const DISPLAY_HINTS = {
812
884
 
813
885
  // breakout session
814
886
  BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
887
+ BROADCAST_MESSAGE_TO_BREAKOUT: 'BROADCAST_MESSAGE_TO_BREAKOUT',
815
888
  UCF_SUPPRESS_BREAKOUTS_SUPPORT: 'UCF_SUPPRESS_BREAKOUTS_SUPPORT',
816
889
  DISABLE_ASK_FOR_HELP: 'DISABLE_ASK_FOR_HELP',
817
890
  DISABLE_BREAKOUT_PREASSIGNMENTS: 'DISABLE_BREAKOUT_PREASSIGNMENTS',
@@ -820,8 +893,29 @@ export const DISPLAY_HINTS = {
820
893
  // participants list
821
894
  DISABLE_VIEW_THE_PARTICIPANT_LIST: 'DISABLE_VIEW_THE_PARTICIPANT_LIST',
822
895
  ENABLE_VIEW_THE_PARTICIPANT_LIST: 'ENABLE_VIEW_THE_PARTICIPANT_LIST',
896
+
897
+ // raise hand
898
+ DISABLE_RAISE_HAND: 'DISABLE_RAISE_HAND',
899
+ ENABLE_RAISE_HAND: 'ENABLE_RAISE_HAND',
900
+
901
+ // video
902
+ DISABLE_VIDEO: 'DISABLE_VIDEO',
903
+ ENABLE_VIDEO: 'ENABLE_VIDEO',
904
+
905
+ // Sharing
906
+ SHARE_FILE: 'SHARE_FILE',
907
+ SHARE_APPLICATION: 'SHARE_APPLICATION',
908
+ SHARE_CAMERA: 'SHARE_CAMERA',
909
+ SHARE_DESKTOP: 'SHARE_DESKTOP',
910
+ SHARE_CONTENT: 'SHARE_CONTENT',
911
+ SHARE_WHITEBOARD: 'SHARE_WHITEBOARD',
912
+
913
+ // Voip (audio/video)
914
+ VOIP_IS_ENABLED: 'VOIP_IS_ENABLED',
823
915
  };
824
916
 
917
+ export const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];
918
+
825
919
  export const SELF_ROLES = {
826
920
  COHOST: 'COHOST',
827
921
  MODERATOR: 'MODERATOR',
@@ -1092,16 +1186,6 @@ export const AVAILABLE_RESOLUTIONS = {
1092
1186
  },
1093
1187
  };
1094
1188
 
1095
- export const VIDEO_RESOLUTIONS = {
1096
- [QUALITY_LEVELS.LOW]: AVAILABLE_RESOLUTIONS['480p'],
1097
- [QUALITY_LEVELS.MEDIUM]: AVAILABLE_RESOLUTIONS['720p'],
1098
- [QUALITY_LEVELS.HIGH]: AVAILABLE_RESOLUTIONS['1080p'],
1099
- [QUALITY_LEVELS['360p']]: AVAILABLE_RESOLUTIONS['360p'],
1100
- [QUALITY_LEVELS['480p']]: AVAILABLE_RESOLUTIONS['480p'],
1101
- [QUALITY_LEVELS['720p']]: AVAILABLE_RESOLUTIONS['720p'],
1102
- [QUALITY_LEVELS['1080p']]: AVAILABLE_RESOLUTIONS['1080p'],
1103
- };
1104
-
1105
1189
  /*
1106
1190
  * mqa Interval for sending stats metrics
1107
1191
  */
@@ -1114,8 +1198,6 @@ export const MEDIA_DEVICES = {
1114
1198
  CAMERA: 'camera',
1115
1199
  };
1116
1200
 
1117
- export const METRICS_JOIN_TIMES_MAX_DURATION = 1200000;
1118
-
1119
1201
  export const PSTN_STATUS = {
1120
1202
  JOINED: 'JOINED', // we have provisioned a pstn device, which can be used to connect
1121
1203
  CONNECTED: 'CONNECTED', // user is connected to audio with pstn device
@@ -1156,3 +1238,13 @@ export const DEFAULT_MEETING_INFO_REQUEST_BODY = {
1156
1238
  supportHostKey: true,
1157
1239
  supportCountryList: true,
1158
1240
  };
1241
+
1242
+ /** the values for IP_VERSION are fixed and defined in Orpheus API */
1243
+ export const IP_VERSION = {
1244
+ unknown: 0,
1245
+ only_ipv4: 4,
1246
+ only_ipv6: 6,
1247
+ ipv4_and_ipv6: 1,
1248
+ } as const;
1249
+
1250
+ export type IP_VERSION = (typeof IP_VERSION)[keyof typeof IP_VERSION];
@@ -6,8 +6,10 @@ enum Setting {
6
6
 
7
7
  enum Control {
8
8
  audio = 'audio',
9
+ raiseHand = 'raiseHand',
9
10
  reactions = 'reactions',
10
11
  shareControl = 'shareControl',
12
+ video = 'video',
11
13
  viewTheParticipantList = 'viewTheParticipantList',
12
14
  }
13
15
 
@@ -140,8 +140,8 @@ export default class ControlsOptionsManager {
140
140
  * @param {Array<ControlConfig>} controls - Spread Array of ControlConfigs
141
141
  * @returns {Promise<Array<any>>}- Promise resolving if the request was successful.
142
142
  */
143
- protected update(...controls: Array<ControlConfig>) {
144
- const payload = controls.reduce((output, control) => {
143
+ public update(...controls: Array<ControlConfig>) {
144
+ const payloads = controls.map((control) => {
145
145
  if (!Object.keys(Control).includes(control.scope)) {
146
146
  throw new Error(
147
147
  `updating meeting control scope "${control.scope}" is not a supported scope`
@@ -155,17 +155,20 @@ export default class ControlsOptionsManager {
155
155
  }
156
156
 
157
157
  return {
158
- ...output,
159
158
  [control.scope]: control.properties,
160
159
  };
161
- }, {});
162
-
163
- // @ts-ignore
164
- return this.request.request({
165
- uri: `${this.locusUrl}/${CONTROLS}`,
166
- body: payload,
167
- method: HTTP_VERBS.PATCH,
168
160
  });
161
+
162
+ return payloads.reduce((previous, payload) => {
163
+ return previous.then(() =>
164
+ // @ts-ignore
165
+ this.request.request({
166
+ uri: `${this.locusUrl}/${CONTROLS}`,
167
+ body: payload,
168
+ method: HTTP_VERBS.PATCH,
169
+ })
170
+ );
171
+ }, Promise.resolve());
169
172
  }
170
173
 
171
174
  /**
@@ -17,6 +17,10 @@ export interface AudioProperties {
17
17
  muteOnEntry?: boolean;
18
18
  }
19
19
 
20
+ export interface RaiseHandProperties {
21
+ enabled?: boolean;
22
+ }
23
+
20
24
  export interface ReactionsProperties {
21
25
  enabled?: boolean;
22
26
  showDisplayNameWithReactions?: boolean;
@@ -26,14 +30,20 @@ export interface ShareControlProperties {
26
30
  control?: 'ANYONE' | 'MODERATOR_PRESENTER';
27
31
  }
28
32
 
33
+ export interface VideoProperties {
34
+ enabled?: boolean;
35
+ }
36
+
29
37
  export interface ViewTheParticipantListProperties {
30
38
  enabled?: boolean;
31
39
  }
32
40
 
33
41
  export type Properties =
34
42
  | AudioProperties
43
+ | RaiseHandProperties
35
44
  | ReactionsProperties
36
45
  | ShareControlProperties
46
+ | VideoProperties
37
47
  | ViewTheParticipantListProperties;
38
48
 
39
49
  export interface ControlConfig<Props = Properties> {
@@ -3,8 +3,10 @@ import {Control} from './enums';
3
3
  import {
4
4
  ControlConfig,
5
5
  AudioProperties,
6
+ RaiseHandProperties,
6
7
  ReactionsProperties,
7
8
  ViewTheParticipantListProperties,
9
+ VideoProperties,
8
10
  } from './types';
9
11
 
10
12
  /**
@@ -87,6 +89,20 @@ class Utils {
87
89
  return requiredHints.every((hint) => displayHints.includes(hint));
88
90
  }
89
91
 
92
+ /**
93
+ * Validate that the self policy object contains the required policies.
94
+ *
95
+ * @param {Object} config - Configuration Object.
96
+ * @param {Array<string>} config.requiredPolicies - Policies required for validation.
97
+ * @param {Array<string>} config.policies - All available policies.
98
+ * @returns {boolean} - True if all of the actions are allowed.
99
+ */
100
+ public static hasPolicies(config: {requiredPolicies: Array<string>; policies: Array<string>}) {
101
+ const {requiredPolicies, policies = {}} = config;
102
+
103
+ return requiredPolicies.every((hint) => policies[hint]);
104
+ }
105
+
90
106
  /**
91
107
  * Validate if an audio-scoped control is allowed to be sent to the service.
92
108
  *
@@ -122,6 +138,22 @@ class Utils {
122
138
  return Utils.hasHints({requiredHints, displayHints});
123
139
  }
124
140
 
141
+ public static canUpdateRaiseHand(
142
+ control: ControlConfig<RaiseHandProperties>,
143
+ displayHints: Array<string>
144
+ ) {
145
+ const requiredHints = [];
146
+
147
+ if (control.properties.enabled === true) {
148
+ requiredHints.push(DISPLAY_HINTS.ENABLE_RAISE_HAND);
149
+ }
150
+ if (control.properties.enabled === false) {
151
+ requiredHints.push(DISPLAY_HINTS.DISABLE_RAISE_HAND);
152
+ }
153
+
154
+ return Utils.hasHints({requiredHints, displayHints});
155
+ }
156
+
125
157
  /**
126
158
  * Validate if an reactions-scoped control is allowed to be sent to the service.
127
159
  *
@@ -135,17 +167,22 @@ class Utils {
135
167
  ) {
136
168
  const requiredHints = [];
137
169
 
138
- if (control.properties.enabled === true) {
139
- requiredHints.push(DISPLAY_HINTS.ENABLE_REACTIONS);
140
- }
141
- if (control.properties.enabled === false) {
142
- requiredHints.push(DISPLAY_HINTS.DISABLE_REACTIONS);
143
- }
144
- if (control.properties.showDisplayNameWithReactions === true) {
145
- requiredHints.push(DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME);
146
- }
147
- if (control.properties.showDisplayNameWithReactions === false) {
148
- requiredHints.push(DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME);
170
+ // This additional if statement avoids the display hint discrepency due to
171
+ // the service blocking partial requests with this property only.
172
+ if (control.properties.showDisplayNameWithReactions !== undefined) {
173
+ if (control.properties.showDisplayNameWithReactions === true) {
174
+ requiredHints.push(DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME);
175
+ }
176
+ if (control.properties.showDisplayNameWithReactions === false) {
177
+ requiredHints.push(DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME);
178
+ }
179
+ } else {
180
+ if (control.properties.enabled === true) {
181
+ requiredHints.push(DISPLAY_HINTS.ENABLE_REACTIONS);
182
+ }
183
+ if (control.properties.enabled === false) {
184
+ requiredHints.push(DISPLAY_HINTS.DISABLE_REACTIONS);
185
+ }
149
186
  }
150
187
 
151
188
  return Utils.hasHints({requiredHints, displayHints});
@@ -184,6 +221,29 @@ class Utils {
184
221
  return Utils.hasHints({requiredHints, displayHints});
185
222
  }
186
223
 
224
+ /**
225
+ * Validate if a video-scoped control is allowed to be sent to the service.
226
+ *
227
+ * @param {ControlConfig<VideoProperties>} control - Video control config to validate.
228
+ * @param {Array<string>} displayHints - All available hints.
229
+ * @returns {boolean} - True if all of the actions are allowed.
230
+ */
231
+ public static canUpdateVideo(
232
+ control: ControlConfig<VideoProperties>,
233
+ displayHints: Array<string>
234
+ ) {
235
+ const requiredHints = [];
236
+
237
+ if (control.properties.enabled === true) {
238
+ requiredHints.push(DISPLAY_HINTS.ENABLE_VIDEO);
239
+ }
240
+ if (control.properties.enabled === false) {
241
+ requiredHints.push(DISPLAY_HINTS.DISABLE_VIDEO);
242
+ }
243
+
244
+ return Utils.hasHints({requiredHints, displayHints});
245
+ }
246
+
187
247
  /**
188
248
  * Validate that a control can be sent to the service based on the provided
189
249
  * display hints.
@@ -200,6 +260,13 @@ class Utils {
200
260
  determinant = Utils.canUpdateAudio(control as ControlConfig<AudioProperties>, displayHints);
201
261
  break;
202
262
 
263
+ case Control.raiseHand:
264
+ determinant = Utils.canUpdateRaiseHand(
265
+ control as ControlConfig<RaiseHandProperties>,
266
+ displayHints
267
+ );
268
+ break;
269
+
203
270
  case Control.reactions:
204
271
  determinant = Utils.canUpdateReactions(
205
272
  control as ControlConfig<ReactionsProperties>,
@@ -211,6 +278,10 @@ class Utils {
211
278
  determinant = Utils.canUpdateShareControl(displayHints);
212
279
  break;
213
280
 
281
+ case Control.video:
282
+ determinant = Utils.canUpdateVideo(control as ControlConfig<VideoProperties>, displayHints);
283
+ break;
284
+
214
285
  case Control.viewTheParticipantList:
215
286
  determinant = Utils.canUpdateViewTheParticipantsList(
216
287
  control as ControlConfig<ViewTheParticipantListProperties>,
package/src/index.ts CHANGED
@@ -9,18 +9,25 @@ registerPlugin('meetings', Meetings, {
9
9
  });
10
10
 
11
11
  export {
12
- LocalTrack,
13
- LocalDisplayTrack,
14
- LocalTrackEvents,
15
- type TrackMuteEvent,
12
+ getDevices,
13
+ LocalStream,
14
+ LocalDisplayStream,
15
+ LocalSystemAudioStream,
16
+ LocalStreamEventNames,
17
+ StreamEventNames,
16
18
  type ServerMuteReason,
17
- LocalMicrophoneTrackEvents,
18
- LocalCameraTrackEvents,
19
- LocalMicrophoneTrack,
20
- LocalCameraTrack,
21
- createMicrophoneTrack,
22
- createCameraTrack,
23
- createDisplayTrack,
19
+ LocalMicrophoneStreamEventNames,
20
+ LocalCameraStreamEventNames,
21
+ LocalMicrophoneStream,
22
+ LocalCameraStream,
23
+ createMicrophoneStream,
24
+ createCameraStream,
25
+ createDisplayStream,
26
+ createDisplayStreamWithAudio,
27
+ FacingMode,
28
+ DisplaySurface,
29
+ PresetCameraConstraints,
30
+ type VideoContentHint,
24
31
  } from '@webex/media-helpers';
25
32
 
26
33
  export default Meetings;
@@ -0,0 +1,60 @@
1
+ # Simultaneous Interpretation
2
+
3
+ Simultaneous Interpretation (SI) feature provides support for interpretation of in-meeting audio. The host will specify the target languages at schedule time and assign language pairs to the desired interpreters. Each interpreter will use their client to indicate the language spoken at any point in time. For example, Alice might be translating between English and French. When an English speaker is talking in the meeting, Alice will use her client to indicate she is speaking French. When a French speaker is talking, Alice will indicate that she is speaking English. The host’s client will display the status of each interpreter including the current interpretation direction.
4
+
5
+ ### Structure
6
+ SI languages are available in the siLanguages collection. List the languages which current meeting support to do simultaneous interpretation. Can subscribe the language's voice channel which you want to listen from the list.
7
+
8
+ ```javascript
9
+ interpretation.siLanguages;
10
+ ```
11
+ ### Attendee functionality
12
+ ```javascript
13
+ //subscribe this si language's voice channel
14
+ siLanguage.subscribe();
15
+
16
+ //unsubscribe this si language's voice channel
17
+ siLanguage.unsubscribe();
18
+ ```
19
+ ### Host functionality
20
+ The following are methods available to the host of a meeting.
21
+
22
+ ```javascript
23
+ //get the support list of interpretation languages. only host is allowed to call it
24
+ interpretation.getSupportLanguages();
25
+
26
+ //get the interpreters list of the meeting
27
+ interpretation.getInterpreters();
28
+
29
+ //update the interpreters list, input parameter is an array of interpreters
30
+ interpretation.updateInterpreters([{
31
+ sourceLanguage : 'fr-FR',
32
+ targetLanguage : 'zh-ZH',
33
+ usingResource : {
34
+ id : 'a96747e2-1fc6-41d3-9ac7-512dd9478b6e'
35
+ },
36
+ order : 0
37
+ },]);
38
+ ```
39
+
40
+ ### Interpreter functionality
41
+
42
+ The following are methods available to the interpreters of a meeting.
43
+
44
+ ```javascript
45
+ //Change direction of interpretation for an interpreter participant
46
+ interpretation.changeDirection();
47
+
48
+ //Handoff between interpreters, input paramerter participantId is the target to handoff
49
+ interpretation.handoffInterpreter(participantId);
50
+
51
+ //in-active interpreter request to handoff to self
52
+ interpretation.requestHandoff();
53
+
54
+ //accept the request of handoff, input paramter url is from last approval event which generate by server side
55
+ interpretation.acceptRequest(url);
56
+
57
+ //decline the request of handoff, input paramter url is from last approval event which generate by server side
58
+ interpretation.declineRequest(url);
59
+
60
+ ```
@@ -0,0 +1,19 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import AmpCollection from 'ampersand-collection';
6
+
7
+ import {MEETINGS} from '../constants';
8
+
9
+ import SILanguage from './siLanguage';
10
+
11
+ const SILanguageCollection = AmpCollection.extend({
12
+ model: SILanguage,
13
+
14
+ namespace: MEETINGS,
15
+
16
+ mainIndex: 'languageName',
17
+ });
18
+
19
+ export default SILanguageCollection;