@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.20

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +1 -17
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +1 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -3,19 +3,14 @@
3
3
  */
4
4
  /* globals navigator */
5
5
 
6
+ import {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';
6
7
  import LoggerProxy from '../common/logs/logger-proxy';
7
- import {
8
- AUDIO_INPUT,
9
- VIDEO_INPUT,
10
- MEDIA_TRACK_CONSTRAINT,
11
- } from '../constants';
8
+ import {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
12
9
  import Config from '../config';
13
10
  import StaticConfig from '../common/config';
14
11
  import MediaError from '../common/errors/media';
15
12
  import BrowserDetection from '../common/browser-detection';
16
13
 
17
- import {RoapMediaConnection, MultistreamRoapMediaConnection} from './internal-media-core-wrapper';
18
-
19
14
  const {isBrowser} = BrowserDetection();
20
15
 
21
16
  /**
@@ -46,7 +41,7 @@ const {isBrowser} = BrowserDetection();
46
41
  * Handles the quirks of each browser.
47
42
  * Extends and enhances adapter.js, i.e., the "media" file from the web client.
48
43
  */
49
- const Media = {};
44
+ const Media: any = {};
50
45
 
51
46
  /**
52
47
  * @param {boolean} enabled
@@ -54,7 +49,7 @@ const Media = {};
54
49
  * @returns {Boolean}
55
50
  * @public
56
51
  */
57
- Media.setLocalTrack = (enabled, track) => {
52
+ Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
58
53
  if (track) {
59
54
  track.enabled = enabled;
60
55
 
@@ -71,16 +66,16 @@ Media.setLocalTrack = (enabled, track) => {
71
66
  * @param {Boolean} videoMuted
72
67
  * @returns {Array} medias
73
68
  */
74
- Media.generateLocalMedias = (mediaId, audioMuted, videoMuted) => {
69
+ Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {
75
70
  if (mediaId) {
76
71
  return [
77
72
  {
78
73
  localSdp: JSON.stringify({
79
74
  audioMuted,
80
- videoMuted
75
+ videoMuted,
81
76
  }),
82
- mediaId
83
- }
77
+ mediaId,
78
+ },
84
79
  ];
85
80
  }
86
81
 
@@ -93,10 +88,8 @@ Media.generateLocalMedias = (mediaId, audioMuted, videoMuted) => {
93
88
  * @param {Object} config SDK Configuration for meetings plugin
94
89
  * @returns {Promise}
95
90
  */
96
- Media.getLocalMedia = (options, config) => {
97
- const {
98
- sendAudio, sendVideo, sendShare, sharePreferences, isSharing
99
- } = options;
91
+ Media.getLocalMedia = (options: any, config: object) => {
92
+ const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;
100
93
 
101
94
  if (sendAudio || sendVideo) {
102
95
  return Media.getMedia(sendAudio, sendVideo, config);
@@ -107,7 +100,7 @@ Media.getLocalMedia = (options, config) => {
107
100
  {
108
101
  sendAudio: false,
109
102
  sendShare: true,
110
- sharePreferences
103
+ sharePreferences,
111
104
  },
112
105
  config
113
106
  );
@@ -118,29 +111,43 @@ Media.getLocalMedia = (options, config) => {
118
111
 
119
112
  /**
120
113
  * creates a webrtc media connection with provided tracks and mediaDirection configuration
121
- * @param {Object} mediaProperties only applicable to non-multistream connections, contains mediaDirection and local tracks:
122
- * audioTrack, videoTrack and shareTrack
114
+ *
115
+ * @param {boolean} isMultistream
116
+ * @param {string} debugId string useful for debugging (will appear in media connection logs)
123
117
  * @param {Object} options
124
- * @param {boolean} options.isMultistream
118
+ * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
119
+ * audioTrack, videoTrack and shareTrack
125
120
  * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
126
121
  * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
127
122
  * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
128
123
  * @param {Object} [options.turnServerInfo]
129
124
  * @returns {RoapMediaConnection}
130
125
  */
131
- Media.createMediaConnection = (mediaProperties, {
132
- isMultistream,
133
- remoteQualityLevel,
134
- enableRtx,
135
- enableExtmap,
136
- turnServerInfo
137
- }) => {
138
- const {
139
- mediaDirection,
140
- audioTrack,
141
- videoTrack,
142
- shareTrack
143
- } = mediaProperties;
126
+ Media.createMediaConnection = (
127
+ isMultistream: boolean,
128
+ debugId: string,
129
+ options: {
130
+ mediaProperties?: {
131
+ mediaDirection?: {
132
+ receiveAudio: boolean;
133
+ receiveVideo: boolean;
134
+ receiveShare: boolean;
135
+ };
136
+ audioTrack?: MediaStreamTrack;
137
+ videoTrack?: MediaStreamTrack;
138
+ shareTrack?: MediaStreamTrack;
139
+ };
140
+ remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
141
+ enableRtx?: boolean;
142
+ enableExtmap?: boolean;
143
+ turnServerInfo?: {
144
+ url: string;
145
+ username: string;
146
+ password: string;
147
+ };
148
+ }
149
+ ) => {
150
+ const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = options;
144
151
 
145
152
  const iceServers = [];
146
153
 
@@ -148,45 +155,58 @@ Media.createMediaConnection = (mediaProperties, {
148
155
  iceServers.push({
149
156
  urls: turnServerInfo.url,
150
157
  username: turnServerInfo.username || '',
151
- credential: turnServerInfo.password || ''
158
+ credential: turnServerInfo.password || '',
152
159
  });
153
160
  }
154
161
 
155
162
  if (isMultistream) {
156
- return new MultistreamRoapMediaConnection({
157
- iceServers,
158
- }, 'mc');
163
+ return new MultistreamRoapMediaConnection(
164
+ {
165
+ iceServers,
166
+ },
167
+ debugId
168
+ );
159
169
  }
160
170
 
161
- return new RoapMediaConnection({
162
- iceServers,
163
- skipInactiveTransceivers: false,
164
- requireH264: true,
165
- sdpMunging: {
166
- convertPort9to0: false,
167
- addContentSlides: true,
168
- bandwidthLimits: {
169
- audio: StaticConfig.meetings.bandwidth.audio,
170
- video: StaticConfig.meetings.bandwidth.video,
171
+ if (!mediaProperties) {
172
+ throw new Error('mediaProperties have to be provided for non-multistream media connections');
173
+ }
174
+
175
+ const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;
176
+
177
+ return new RoapMediaConnection(
178
+ {
179
+ iceServers,
180
+ skipInactiveTransceivers: false,
181
+ requireH264: true,
182
+ sdpMunging: {
183
+ convertPort9to0: false,
184
+ addContentSlides: true,
185
+ bandwidthLimits: {
186
+ audio: StaticConfig.meetings.bandwidth.audio,
187
+ video: StaticConfig.meetings.bandwidth.video,
188
+ },
189
+ startBitrate: StaticConfig.meetings.bandwidth.startBitrate,
190
+ periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way
191
+ disableExtmap: !enableExtmap,
192
+ disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
171
193
  },
172
- startBitrate: StaticConfig.meetings.bandwidth.startBitrate,
173
- periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way
174
- disableExtmap: !enableExtmap,
175
- disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
176
- }
177
- }, {
178
- send: {
179
- audio: audioTrack,
180
- video: videoTrack,
181
- screenShareVideo: shareTrack
182
194
  },
183
- receive: {
184
- audio: mediaDirection.receiveAudio,
185
- video: mediaDirection.receiveVideo,
186
- screenShareVideo: mediaDirection.receiveShare,
187
- remoteQualityLevel
188
- }
189
- }, 'mc');
195
+ {
196
+ send: {
197
+ audio: audioTrack,
198
+ video: videoTrack,
199
+ screenShareVideo: shareTrack,
200
+ },
201
+ receive: {
202
+ audio: mediaDirection.receiveAudio,
203
+ video: mediaDirection.receiveVideo,
204
+ screenShareVideo: mediaDirection.receiveShare,
205
+ remoteQualityLevel,
206
+ },
207
+ },
208
+ debugId
209
+ );
190
210
  };
191
211
 
192
212
  /**
@@ -201,7 +221,17 @@ Media.createMediaConnection = (mediaProperties, {
201
221
  * @param {Object} config SDK Configuration for meetings plugin
202
222
  * @returns {Promise.<MediaStream>}
203
223
  */
204
- Media.getDisplayMedia = (options, config = {}) => {
224
+ Media.getDisplayMedia = (
225
+ options: {
226
+ sendAudio: boolean;
227
+ sendShare: boolean;
228
+ sharePreferences: {
229
+ shareConstraints: MediaTrackConstraints;
230
+ highFrameRate: any;
231
+ };
232
+ },
233
+ config: any = {}
234
+ ) => {
205
235
  // SDK screen share resolution settings from Webex.init
206
236
  const customResolution = config.screenResolution || {};
207
237
  // user defined screen share frame rate
@@ -210,38 +240,31 @@ Media.getDisplayMedia = (options, config = {}) => {
210
240
  const hasSharePreferences = options.sharePreferences;
211
241
  const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;
212
242
  const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;
213
- const {
214
- screenResolution,
215
- resolution,
216
- videoShareFrameRate,
217
- screenFrameRate,
218
- aspectRatio
219
- } = Config.meetings;
220
-
221
- let shareConstraints = {
243
+ const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =
244
+ Config.meetings;
245
+
246
+ let shareConstraints: any = {
222
247
  cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,
223
- aspectRatio
248
+ aspectRatio,
224
249
  };
225
250
 
226
251
  if (hasCustomConstraints) {
227
252
  shareConstraints = hasSharePreferences.shareConstraints;
228
- }
229
- else if (hasHighFrameRate) {
253
+ } else if (hasHighFrameRate) {
230
254
  shareConstraints = {
231
255
  ...shareConstraints,
232
256
  frameRate: videoShareFrameRate,
233
257
  height: resolution.idealHeight,
234
258
  width: resolution.idealWidth,
235
- ...config.resolution
259
+ ...config.resolution,
236
260
  };
237
- }
238
- else {
261
+ } else {
239
262
  shareConstraints = {
240
263
  ...shareConstraints,
241
264
  frameRate: customShareFrameRate || screenFrameRate,
242
265
  height: customResolution.idealHeight || screenResolution.idealHeight,
243
266
  width: customResolution.idealWidth || screenResolution.idealWidth,
244
- ...config.screenResolution
267
+ ...config.screenResolution,
245
268
  };
246
269
  }
247
270
 
@@ -252,15 +275,14 @@ Media.getDisplayMedia = (options, config = {}) => {
252
275
  // to have higher quality, and for developers to control the values
253
276
  // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox
254
277
 
255
-
256
278
  if (isBrowser('firefox')) {
257
- const mediaConfig = {
279
+ const mediaConfig: any = {
258
280
  audio: options.sendAudio,
259
- video: options.sendShare
281
+ video: options.sendShare,
260
282
  };
261
283
 
262
-
263
- return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})
284
+ return navigator.mediaDevices
285
+ .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})
264
286
  .then((stream) => {
265
287
  if (options.sendShare && stream.getVideoTracks().length > 0) {
266
288
  // Firefox has a bug with the spec where changing in the height and width only happens
@@ -269,12 +291,11 @@ Media.getDisplayMedia = (options, config = {}) => {
269
291
  stream.getVideoTracks()[0].applyConstraints(shareConstraints);
270
292
  }
271
293
 
272
-
273
294
  return stream;
274
295
  });
275
296
  }
276
297
 
277
- const getDisplayMediaParams = {video: options.sendShare ? shareConstraints : false};
298
+ const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};
278
299
 
279
300
  // safari doesn't support sending screen share audio
280
301
  // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia
@@ -292,37 +313,39 @@ Media.getDisplayMedia = (options, config = {}) => {
292
313
  * @param {Object} config SDK Configuration for meetings plugin
293
314
  * @returns {Object} {streams}
294
315
  */
295
- Media.getMedia = (audio, video, config) => {
316
+ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
296
317
  const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};
297
318
  const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};
298
319
  const mediaConfig = {
299
320
  audio,
300
321
  // TODO: Remove temporary workaround once Firefox fixes low constraint issues
301
322
  // eslint-disable-next-line no-nested-ternary
302
- video: video ?
303
- isBrowser('firefox') && video.width && video.width.max === 320 ?
304
- {
305
- deviceId: video.deviceId ? video.deviceId : undefined,
306
- width: 320,
307
- height: 180
308
- } :
309
- {
310
- deviceId: video.deviceId ? video.deviceId : undefined,
311
- width: video.width ? video.width : defaultWidth,
312
- height: video.height ? video.height : defaultHeight
313
- } :
314
- false,
315
- fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing
323
+ video: video
324
+ ? isBrowser('firefox') && video.width && video.width.max === 320
325
+ ? {
326
+ deviceId: video.deviceId ? video.deviceId : undefined,
327
+ width: 320,
328
+ height: 180,
329
+ frameRate: video.frameRate ? video.frameRate : undefined,
330
+ facingMode: video.facingMode ? video.facingMode : undefined,
331
+ }
332
+ : {
333
+ deviceId: video.deviceId ? video.deviceId : undefined,
334
+ width: video.width ? video.width : defaultWidth,
335
+ height: video.height ? video.height : defaultHeight,
336
+ frameRate: video.frameRate ? video.frameRate : undefined,
337
+ facingMode: video.facingMode ? video.facingMode : undefined,
338
+ }
339
+ : false,
340
+ fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing
316
341
  };
317
342
 
318
- return navigator.mediaDevices
319
- .getUserMedia(mediaConfig)
320
- .catch((err) => {
321
- const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
343
+ return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {
344
+ const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
322
345
 
323
- LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);
324
- throw err;
325
- });
346
+ LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);
347
+ throw err;
348
+ });
326
349
  };
327
350
 
328
351
  /**
@@ -337,24 +360,24 @@ Media.getMedia = (audio, video, config) => {
337
360
  * sendVideo: true/false
338
361
  *}
339
362
  */
340
- Media.getSupportedDevice = ({sendAudio, sendVideo}) =>
363
+ Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
341
364
  Promise.resolve().then(() => {
342
365
  if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
343
366
  return {
344
367
  sendAudio: false,
345
- sendVideo: false
368
+ sendVideo: false,
346
369
  };
347
370
  }
348
371
 
349
372
  return navigator.mediaDevices.enumerateDevices().then((devices) => {
350
373
  const supported = {
351
374
  audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
352
- video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0
375
+ video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
353
376
  };
354
377
 
355
378
  return {
356
379
  sendAudio: supported.audio && sendAudio,
357
- sendVideo: supported.video && sendVideo
380
+ sendVideo: supported.video && sendVideo,
358
381
  };
359
382
  });
360
383
  });
@@ -384,7 +407,7 @@ Media.toggleStream = () => {};
384
407
  * @param {MediaTrack} track A media stream
385
408
  * @returns {null}
386
409
  */
387
- Media.stopTracks = (track) => {
410
+ Media.stopTracks = (track: any) => {
388
411
  if (!track) {
389
412
  return Promise.resolve();
390
413
  }
@@ -393,9 +416,10 @@ Media.stopTracks = (track) => {
393
416
  if (track && track.stop) {
394
417
  try {
395
418
  track.stop();
396
- }
397
- catch (e) {
398
- LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);
419
+ } catch (e) {
420
+ LoggerProxy.logger.error(
421
+ `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`
422
+ );
399
423
  }
400
424
  }
401
425
  });
@@ -408,8 +432,10 @@ Media.stopTracks = (track) => {
408
432
  * @returns {null}
409
433
  * @deprecated after v1.89.3
410
434
  */
411
- Media.stopStream = (stream) => {
412
- LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
435
+ Media.stopStream = (stream: any) => {
436
+ LoggerProxy.logger.warn(
437
+ 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'
438
+ );
413
439
  if (!stream) {
414
440
  return Promise.resolve();
415
441
  }
@@ -424,8 +450,7 @@ Media.stopStream = (stream) => {
424
450
  stream.getTracks().forEach((track) => {
425
451
  track.stop();
426
452
  });
427
- }
428
- else if (stream.stop) {
453
+ } else if (stream.stop) {
429
454
  stream.stop();
430
455
  }
431
456
  });
@@ -447,13 +472,38 @@ Media.stopStream = (stream) => {
447
472
  * @param {Object} config SDK Config
448
473
  * @returns {Array} [localStream, shareStream]
449
474
  */
450
- Media.getUserMedia = (mediaSetting, audioVideo, sharePreferences, config) => Media.getLocalMedia({
451
- sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,
452
- sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false
453
- }, config).then((localStream) => Media.getLocalMedia({
454
- sendShare: mediaSetting.sendShare,
455
- isSharing: mediaSetting.isSharing,
456
- sharePreferences
457
- }, config).then((shareStream) => [localStream, shareStream]));
475
+ Media.getUserMedia = (
476
+ mediaSetting: {
477
+ sendAudio: object;
478
+ sendVideo: object;
479
+ sendShare: object;
480
+ isSharing: object;
481
+ },
482
+ audioVideo: {
483
+ audio: object;
484
+ video: object;
485
+ },
486
+ sharePreferences: {
487
+ shareConstraints: object;
488
+ highFrameRate: boolean;
489
+ },
490
+ config: object
491
+ ) =>
492
+ Media.getLocalMedia(
493
+ {
494
+ sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,
495
+ sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,
496
+ },
497
+ config
498
+ ).then((localStream) =>
499
+ Media.getLocalMedia(
500
+ {
501
+ sendShare: mediaSetting.sendShare,
502
+ isSharing: mediaSetting.isSharing,
503
+ sharePreferences,
504
+ },
505
+ config
506
+ ).then((shareStream) => [localStream, shareStream])
507
+ );
458
508
 
459
509
  export default Media;