@webex/plugin-meetings 2.59.8 → 2.60.0-next.10

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 (517) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.d.ts +31 -0
  6. package/dist/annotation/constants.js +41 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.d.ts +117 -0
  9. package/dist/annotation/index.js +357 -0
  10. package/dist/annotation/index.js.map +1 -0
  11. package/dist/breakouts/breakout.d.ts +8 -0
  12. package/dist/breakouts/breakout.js +215 -0
  13. package/dist/breakouts/breakout.js.map +1 -0
  14. package/dist/breakouts/collection.d.ts +5 -0
  15. package/dist/breakouts/collection.js +22 -0
  16. package/dist/breakouts/collection.js.map +1 -0
  17. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  18. package/dist/breakouts/edit-lock-error.js +51 -0
  19. package/dist/breakouts/edit-lock-error.js.map +1 -0
  20. package/dist/breakouts/events.d.ts +8 -0
  21. package/dist/breakouts/events.js +44 -0
  22. package/dist/breakouts/events.js.map +1 -0
  23. package/dist/breakouts/index.d.ts +5 -0
  24. package/dist/breakouts/index.js +1047 -0
  25. package/dist/breakouts/index.js.map +1 -0
  26. package/dist/breakouts/request.d.ts +22 -0
  27. package/dist/breakouts/request.js +77 -0
  28. package/dist/breakouts/request.js.map +1 -0
  29. package/dist/breakouts/utils.d.ts +15 -0
  30. package/dist/breakouts/utils.js +64 -0
  31. package/dist/breakouts/utils.js.map +1 -0
  32. package/dist/common/browser-detection.js +2 -3
  33. package/dist/common/browser-detection.js.map +1 -1
  34. package/dist/common/collection.js +3 -4
  35. package/dist/common/collection.js.map +1 -1
  36. package/dist/common/config.js +1 -2
  37. package/dist/common/config.js.map +1 -1
  38. package/dist/common/errors/captcha-error.js +1 -2
  39. package/dist/common/errors/captcha-error.js.map +1 -1
  40. package/dist/common/errors/intent-to-join.js +1 -2
  41. package/dist/common/errors/intent-to-join.js.map +1 -1
  42. package/dist/common/errors/join-meeting.js +1 -2
  43. package/dist/common/errors/join-meeting.js.map +1 -1
  44. package/dist/common/errors/media.js +1 -2
  45. package/dist/common/errors/media.js.map +1 -1
  46. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  47. package/dist/common/errors/no-meeting-info.js +50 -0
  48. package/dist/common/errors/no-meeting-info.js.map +1 -0
  49. package/dist/common/errors/parameter.js +3 -4
  50. package/dist/common/errors/parameter.js.map +1 -1
  51. package/dist/common/errors/password-error.js +1 -2
  52. package/dist/common/errors/password-error.js.map +1 -1
  53. package/dist/common/errors/permission.js +1 -2
  54. package/dist/common/errors/permission.js.map +1 -1
  55. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  56. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  57. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  58. package/dist/common/errors/reconnection-in-progress.js +1 -2
  59. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  60. package/dist/common/errors/reconnection.js +1 -2
  61. package/dist/common/errors/reconnection.js.map +1 -1
  62. package/dist/common/errors/stats.js +1 -2
  63. package/dist/common/errors/stats.js.map +1 -1
  64. package/dist/common/errors/webex-errors.d.ts +20 -8
  65. package/dist/common/errors/webex-errors.js +48 -28
  66. package/dist/common/errors/webex-errors.js.map +1 -1
  67. package/dist/common/errors/webex-meetings-error.js +1 -2
  68. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  69. package/dist/common/events/events-scope.js +1 -2
  70. package/dist/common/events/events-scope.js.map +1 -1
  71. package/dist/common/events/events.js +1 -2
  72. package/dist/common/events/events.js.map +1 -1
  73. package/dist/common/events/trigger-proxy.js +1 -2
  74. package/dist/common/events/trigger-proxy.js.map +1 -1
  75. package/dist/common/events/util.js +1 -2
  76. package/dist/common/events/util.js.map +1 -1
  77. package/dist/common/logs/logger-config.js +1 -2
  78. package/dist/common/logs/logger-config.js.map +1 -1
  79. package/dist/common/logs/logger-proxy.js +2 -3
  80. package/dist/common/logs/logger-proxy.js.map +1 -1
  81. package/dist/common/logs/request.d.ts +3 -1
  82. package/dist/common/logs/request.js +8 -5
  83. package/dist/common/logs/request.js.map +1 -1
  84. package/dist/common/queue.d.ts +9 -7
  85. package/dist/common/queue.js +22 -9
  86. package/dist/common/queue.js.map +1 -1
  87. package/dist/config.d.ts +5 -7
  88. package/dist/config.js +8 -11
  89. package/dist/config.js.map +1 -1
  90. package/dist/constants.d.ts +243 -97
  91. package/dist/constants.js +437 -435
  92. package/dist/constants.js.map +1 -1
  93. package/dist/controls-options-manager/constants.js +3 -6
  94. package/dist/controls-options-manager/constants.js.map +1 -1
  95. package/dist/controls-options-manager/enums.d.ts +11 -1
  96. package/dist/controls-options-manager/enums.js +15 -6
  97. package/dist/controls-options-manager/enums.js.map +1 -1
  98. package/dist/controls-options-manager/index.d.ts +17 -1
  99. package/dist/controls-options-manager/index.js +127 -38
  100. package/dist/controls-options-manager/index.js.map +1 -1
  101. package/dist/controls-options-manager/types.d.ts +43 -0
  102. package/dist/controls-options-manager/types.js +7 -0
  103. package/dist/controls-options-manager/types.js.map +1 -0
  104. package/dist/controls-options-manager/util.d.ts +1 -7
  105. package/dist/controls-options-manager/util.js +309 -19
  106. package/dist/controls-options-manager/util.js.map +1 -1
  107. package/dist/index.d.ts +6 -3
  108. package/dist/index.js +116 -4
  109. package/dist/index.js.map +1 -1
  110. package/dist/interpretation/collection.d.ts +5 -0
  111. package/dist/interpretation/collection.js +22 -0
  112. package/dist/interpretation/collection.js.map +1 -0
  113. package/dist/interpretation/index.d.ts +5 -0
  114. package/dist/interpretation/index.js +365 -0
  115. package/dist/interpretation/index.js.map +1 -0
  116. package/dist/interpretation/siLanguage.d.ts +5 -0
  117. package/dist/interpretation/siLanguage.js +24 -0
  118. package/dist/interpretation/siLanguage.js.map +1 -0
  119. package/dist/locus-info/controlsUtils.js +100 -11
  120. package/dist/locus-info/controlsUtils.js.map +1 -1
  121. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  122. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  123. package/dist/locus-info/fullState.js +1 -2
  124. package/dist/locus-info/fullState.js.map +1 -1
  125. package/dist/locus-info/hostUtils.js +1 -2
  126. package/dist/locus-info/hostUtils.js.map +1 -1
  127. package/dist/locus-info/index.d.ts +57 -4
  128. package/dist/locus-info/index.js +425 -84
  129. package/dist/locus-info/index.js.map +1 -1
  130. package/dist/locus-info/infoUtils.js +13 -5
  131. package/dist/locus-info/infoUtils.js.map +1 -1
  132. package/dist/locus-info/mediaSharesUtils.js +58 -3
  133. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  134. package/dist/locus-info/parser.d.ts +66 -6
  135. package/dist/locus-info/parser.js +253 -80
  136. package/dist/locus-info/parser.js.map +1 -1
  137. package/dist/locus-info/selfUtils.js +97 -13
  138. package/dist/locus-info/selfUtils.js.map +1 -1
  139. package/dist/media/index.d.ts +2 -0
  140. package/dist/media/index.js +107 -319
  141. package/dist/media/index.js.map +1 -1
  142. package/dist/media/properties.d.ts +38 -53
  143. package/dist/media/properties.js +96 -153
  144. package/dist/media/properties.js.map +1 -1
  145. package/dist/media/util.js +1 -22
  146. package/dist/media/util.js.map +1 -1
  147. package/dist/mediaQualityMetrics/config.d.ts +234 -230
  148. package/dist/mediaQualityMetrics/config.js +302 -498
  149. package/dist/mediaQualityMetrics/config.js.map +1 -1
  150. package/dist/meeting/in-meeting-actions.d.ts +88 -0
  151. package/dist/meeting/in-meeting-actions.js +94 -3
  152. package/dist/meeting/in-meeting-actions.js.map +1 -1
  153. package/dist/meeting/index.d.ts +591 -494
  154. package/dist/meeting/index.js +4728 -2990
  155. package/dist/meeting/index.js.map +1 -1
  156. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  157. package/dist/meeting/locusMediaRequest.js +291 -0
  158. package/dist/meeting/locusMediaRequest.js.map +1 -0
  159. package/dist/meeting/muteState.d.ts +93 -25
  160. package/dist/meeting/muteState.js +224 -133
  161. package/dist/meeting/muteState.js.map +1 -1
  162. package/dist/meeting/request.d.ts +82 -47
  163. package/dist/meeting/request.js +297 -199
  164. package/dist/meeting/request.js.map +1 -1
  165. package/dist/meeting/request.type.d.ts +11 -0
  166. package/dist/meeting/request.type.js +7 -0
  167. package/dist/meeting/request.type.js.map +1 -0
  168. package/dist/meeting/state.js +1 -2
  169. package/dist/meeting/state.js.map +1 -1
  170. package/dist/meeting/util.d.ts +102 -1
  171. package/dist/meeting/util.js +605 -435
  172. package/dist/meeting/util.js.map +1 -1
  173. package/dist/meeting-info/collection.js +3 -4
  174. package/dist/meeting-info/collection.js.map +1 -1
  175. package/dist/meeting-info/index.d.ts +13 -1
  176. package/dist/meeting-info/index.js +74 -7
  177. package/dist/meeting-info/index.js.map +1 -1
  178. package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
  179. package/dist/meeting-info/meeting-info-v2.js +200 -63
  180. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  181. package/dist/meeting-info/request.js +1 -2
  182. package/dist/meeting-info/request.js.map +1 -1
  183. package/dist/meeting-info/util.js +2 -3
  184. package/dist/meeting-info/util.js.map +1 -1
  185. package/dist/meeting-info/utilv2.js +39 -41
  186. package/dist/meeting-info/utilv2.js.map +1 -1
  187. package/dist/meetings/collection.d.ts +17 -0
  188. package/dist/meetings/collection.js +42 -4
  189. package/dist/meetings/collection.js.map +1 -1
  190. package/dist/meetings/index.d.ts +103 -21
  191. package/dist/meetings/index.js +486 -124
  192. package/dist/meetings/index.js.map +1 -1
  193. package/dist/meetings/meetings.types.d.ts +4 -0
  194. package/dist/meetings/meetings.types.js +7 -0
  195. package/dist/meetings/meetings.types.js.map +1 -0
  196. package/dist/meetings/request.js +4 -3
  197. package/dist/meetings/request.js.map +1 -1
  198. package/dist/meetings/util.js +107 -6
  199. package/dist/meetings/util.js.map +1 -1
  200. package/dist/member/index.d.ts +14 -1
  201. package/dist/member/index.js +54 -2
  202. package/dist/member/index.js.map +1 -1
  203. package/dist/member/member.types.js +3 -4
  204. package/dist/member/member.types.js.map +1 -1
  205. package/dist/member/types.d.ts +32 -0
  206. package/dist/member/types.js +23 -0
  207. package/dist/member/types.js.map +1 -0
  208. package/dist/member/util.js +131 -29
  209. package/dist/member/util.js.map +1 -1
  210. package/dist/members/collection.d.ts +5 -0
  211. package/dist/members/collection.js +11 -2
  212. package/dist/members/collection.js.map +1 -1
  213. package/dist/members/index.d.ts +57 -2
  214. package/dist/members/index.js +174 -10
  215. package/dist/members/index.js.map +1 -1
  216. package/dist/members/request.d.ts +73 -9
  217. package/dist/members/request.js +108 -41
  218. package/dist/members/request.js.map +1 -1
  219. package/dist/members/types.d.ts +25 -0
  220. package/dist/members/types.js +14 -0
  221. package/dist/members/types.js.map +1 -0
  222. package/dist/members/util.d.ts +214 -1
  223. package/dist/members/util.js +327 -234
  224. package/dist/members/util.js.map +1 -1
  225. package/dist/metrics/constants.d.ts +15 -6
  226. package/dist/metrics/constants.js +17 -9
  227. package/dist/metrics/constants.js.map +1 -1
  228. package/dist/metrics/index.d.ts +4 -111
  229. package/dist/metrics/index.js +4 -452
  230. package/dist/metrics/index.js.map +1 -1
  231. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  232. package/dist/multistream/mediaRequestManager.js +344 -0
  233. package/dist/multistream/mediaRequestManager.js.map +1 -0
  234. package/dist/multistream/receiveSlot.d.ts +68 -0
  235. package/dist/multistream/receiveSlot.js +200 -0
  236. package/dist/multistream/receiveSlot.js.map +1 -0
  237. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  238. package/dist/multistream/receiveSlotManager.js +174 -0
  239. package/dist/multistream/receiveSlotManager.js.map +1 -0
  240. package/dist/multistream/remoteMedia.d.ts +72 -0
  241. package/dist/multistream/remoteMedia.js +268 -0
  242. package/dist/multistream/remoteMedia.js.map +1 -0
  243. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  244. package/dist/multistream/remoteMediaGroup.js +267 -0
  245. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  246. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  247. package/dist/multistream/remoteMediaManager.js +1211 -0
  248. package/dist/multistream/remoteMediaManager.js.map +1 -0
  249. package/dist/multistream/sendSlotManager.d.ts +61 -0
  250. package/dist/multistream/sendSlotManager.js +236 -0
  251. package/dist/multistream/sendSlotManager.js.map +1 -0
  252. package/dist/networkQualityMonitor/index.js +5 -4
  253. package/dist/networkQualityMonitor/index.js.map +1 -1
  254. package/dist/personal-meeting-room/index.js +2 -3
  255. package/dist/personal-meeting-room/index.js.map +1 -1
  256. package/dist/personal-meeting-room/request.js +2 -3
  257. package/dist/personal-meeting-room/request.js.map +1 -1
  258. package/dist/personal-meeting-room/util.js +1 -2
  259. package/dist/personal-meeting-room/util.js.map +1 -1
  260. package/dist/reachability/index.d.ts +62 -7
  261. package/dist/reachability/index.js +265 -72
  262. package/dist/reachability/index.js.map +1 -1
  263. package/dist/reachability/request.d.ts +7 -3
  264. package/dist/reachability/request.js +18 -10
  265. package/dist/reachability/request.js.map +1 -1
  266. package/dist/reactions/constants.d.ts +3 -0
  267. package/dist/reactions/constants.js +12 -0
  268. package/dist/reactions/constants.js.map +1 -0
  269. package/dist/reactions/reactions.d.ts +2 -2
  270. package/dist/reactions/reactions.js +4 -6
  271. package/dist/reactions/reactions.js.map +1 -1
  272. package/dist/reactions/reactions.type.d.ts +23 -3
  273. package/dist/reactions/reactions.type.js +21 -23
  274. package/dist/reactions/reactions.type.js.map +1 -1
  275. package/dist/reconnection-manager/index.d.ts +32 -8
  276. package/dist/reconnection-manager/index.js +282 -231
  277. package/dist/reconnection-manager/index.js.map +1 -1
  278. package/dist/recording-controller/enums.js +4 -5
  279. package/dist/recording-controller/enums.js.map +1 -1
  280. package/dist/recording-controller/index.d.ts +15 -1
  281. package/dist/recording-controller/index.js +57 -46
  282. package/dist/recording-controller/index.js.map +1 -1
  283. package/dist/recording-controller/util.d.ts +5 -4
  284. package/dist/recording-controller/util.js +10 -10
  285. package/dist/recording-controller/util.js.map +1 -1
  286. package/dist/roap/index.d.ts +9 -47
  287. package/dist/roap/index.js +101 -235
  288. package/dist/roap/index.js.map +1 -1
  289. package/dist/roap/request.d.ts +18 -12
  290. package/dist/roap/request.js +126 -180
  291. package/dist/roap/request.js.map +1 -1
  292. package/dist/roap/turnDiscovery.d.ts +27 -16
  293. package/dist/roap/turnDiscovery.js +115 -105
  294. package/dist/roap/turnDiscovery.js.map +1 -1
  295. package/dist/rtcMetrics/constants.d.ts +4 -0
  296. package/dist/rtcMetrics/constants.js +11 -0
  297. package/dist/rtcMetrics/constants.js.map +1 -0
  298. package/dist/rtcMetrics/index.d.ts +54 -0
  299. package/dist/rtcMetrics/index.js +140 -0
  300. package/dist/rtcMetrics/index.js.map +1 -0
  301. package/dist/statsAnalyzer/global.d.ts +1 -83
  302. package/dist/statsAnalyzer/global.js +2 -85
  303. package/dist/statsAnalyzer/global.js.map +1 -1
  304. package/dist/statsAnalyzer/index.d.ts +28 -30
  305. package/dist/statsAnalyzer/index.js +374 -509
  306. package/dist/statsAnalyzer/index.js.map +1 -1
  307. package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
  308. package/dist/statsAnalyzer/mqaUtil.js +116 -83
  309. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  310. package/dist/transcription/index.js +1 -2
  311. package/dist/transcription/index.js.map +1 -1
  312. package/dist/webinar/collection.d.ts +16 -0
  313. package/dist/webinar/collection.js +43 -0
  314. package/dist/webinar/collection.js.map +1 -0
  315. package/dist/webinar/index.d.ts +5 -0
  316. package/dist/webinar/index.js +68 -0
  317. package/dist/webinar/index.js.map +1 -0
  318. package/package.json +35 -26
  319. package/src/annotation/annotation.types.ts +50 -0
  320. package/src/annotation/constants.ts +36 -0
  321. package/src/annotation/index.ts +328 -0
  322. package/src/breakouts/README.md +220 -0
  323. package/src/breakouts/breakout.ts +188 -0
  324. package/src/breakouts/collection.ts +19 -0
  325. package/src/breakouts/edit-lock-error.ts +25 -0
  326. package/src/breakouts/events.ts +56 -0
  327. package/src/breakouts/index.ts +925 -0
  328. package/src/breakouts/request.ts +55 -0
  329. package/src/breakouts/utils.ts +57 -0
  330. package/src/common/errors/no-meeting-info.ts +24 -0
  331. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  332. package/src/common/errors/webex-errors.ts +36 -12
  333. package/src/common/logs/logger-proxy.ts +1 -1
  334. package/src/common/logs/request.ts +5 -1
  335. package/src/common/queue.ts +22 -8
  336. package/src/config.ts +5 -7
  337. package/src/constants.ts +271 -93
  338. package/src/controls-options-manager/enums.ts +12 -0
  339. package/src/controls-options-manager/index.ts +116 -21
  340. package/src/controls-options-manager/types.ts +59 -0
  341. package/src/controls-options-manager/util.ts +294 -14
  342. package/src/index.ts +40 -0
  343. package/src/interpretation/README.md +60 -0
  344. package/src/interpretation/collection.ts +19 -0
  345. package/src/interpretation/index.ts +332 -0
  346. package/src/interpretation/siLanguage.ts +18 -0
  347. package/src/locus-info/controlsUtils.ts +110 -0
  348. package/src/locus-info/index.ts +449 -61
  349. package/src/locus-info/infoUtils.ts +14 -2
  350. package/src/locus-info/mediaSharesUtils.ts +64 -0
  351. package/src/locus-info/parser.ts +258 -47
  352. package/src/locus-info/selfUtils.ts +85 -2
  353. package/src/media/index.ts +153 -370
  354. package/src/media/properties.ts +106 -136
  355. package/src/media/util.ts +0 -21
  356. package/src/mediaQualityMetrics/config.ts +244 -377
  357. package/src/meeting/in-meeting-actions.ts +176 -0
  358. package/src/meeting/index.ts +3895 -2448
  359. package/src/meeting/locusMediaRequest.ts +313 -0
  360. package/src/meeting/muteState.ts +224 -138
  361. package/src/meeting/request.ts +207 -127
  362. package/src/meeting/request.type.ts +13 -0
  363. package/src/meeting/util.ts +590 -423
  364. package/src/meeting-info/index.ts +81 -8
  365. package/src/meeting-info/meeting-info-v2.ts +163 -13
  366. package/src/meeting-info/util.ts +1 -1
  367. package/src/meeting-info/utilv2.ts +28 -28
  368. package/src/meetings/collection.ts +33 -0
  369. package/src/meetings/index.ts +486 -126
  370. package/src/meetings/meetings.types.ts +12 -0
  371. package/src/meetings/request.ts +2 -0
  372. package/src/meetings/util.ts +116 -5
  373. package/src/member/index.ts +52 -1
  374. package/src/member/types.ts +38 -0
  375. package/src/member/util.ts +139 -28
  376. package/src/members/collection.ts +8 -0
  377. package/src/members/index.ts +196 -7
  378. package/src/members/request.ts +97 -17
  379. package/src/members/types.ts +29 -0
  380. package/src/members/util.ts +333 -240
  381. package/src/metrics/constants.ts +15 -6
  382. package/src/metrics/index.ts +1 -471
  383. package/src/multistream/mediaRequestManager.ts +440 -0
  384. package/src/multistream/receiveSlot.ts +184 -0
  385. package/src/multistream/receiveSlotManager.ts +166 -0
  386. package/src/multistream/remoteMedia.ts +254 -0
  387. package/src/multistream/remoteMediaGroup.ts +284 -0
  388. package/src/multistream/remoteMediaManager.ts +1145 -0
  389. package/src/multistream/sendSlotManager.ts +170 -0
  390. package/src/networkQualityMonitor/index.ts +6 -6
  391. package/src/reachability/index.ts +238 -45
  392. package/src/reachability/request.ts +17 -8
  393. package/src/reactions/constants.ts +4 -0
  394. package/src/reactions/reactions.ts +4 -4
  395. package/src/reactions/reactions.type.ts +30 -4
  396. package/src/reconnection-manager/index.ts +168 -156
  397. package/src/recording-controller/index.ts +20 -3
  398. package/src/recording-controller/util.ts +26 -9
  399. package/src/roap/index.ts +98 -241
  400. package/src/roap/request.ts +74 -148
  401. package/src/roap/turnDiscovery.ts +62 -56
  402. package/src/rtcMetrics/constants.ts +3 -0
  403. package/src/rtcMetrics/index.ts +124 -0
  404. package/src/statsAnalyzer/global.ts +1 -84
  405. package/src/statsAnalyzer/index.ts +413 -642
  406. package/src/statsAnalyzer/mqaUtil.ts +111 -114
  407. package/src/webinar/collection.ts +31 -0
  408. package/src/webinar/index.ts +62 -0
  409. package/test/integration/spec/converged-space-meetings.js +233 -0
  410. package/test/integration/spec/journey.js +320 -264
  411. package/test/integration/spec/space-meeting.js +77 -4
  412. package/test/unit/spec/annotation/index.ts +418 -0
  413. package/test/unit/spec/breakouts/breakout.ts +237 -0
  414. package/test/unit/spec/breakouts/collection.ts +15 -0
  415. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  416. package/test/unit/spec/breakouts/events.ts +89 -0
  417. package/test/unit/spec/breakouts/index.ts +1790 -0
  418. package/test/unit/spec/breakouts/request.ts +104 -0
  419. package/test/unit/spec/breakouts/utils.js +72 -0
  420. package/test/unit/spec/common/queue.js +31 -2
  421. package/test/unit/spec/controls-options-manager/index.js +163 -0
  422. package/test/unit/spec/controls-options-manager/util.js +576 -60
  423. package/test/unit/spec/fixture/locus.js +1 -0
  424. package/test/unit/spec/interpretation/collection.ts +15 -0
  425. package/test/unit/spec/interpretation/index.ts +589 -0
  426. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  427. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  428. package/test/unit/spec/locus-info/index.js +1390 -16
  429. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  430. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  431. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  432. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  433. package/test/unit/spec/locus-info/parser.js +116 -35
  434. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  435. package/test/unit/spec/media/index.ts +290 -0
  436. package/test/unit/spec/media/properties.ts +75 -84
  437. package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
  438. package/test/unit/spec/meeting/index.js +8181 -2770
  439. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  440. package/test/unit/spec/meeting/muteState.js +409 -213
  441. package/test/unit/spec/meeting/request.js +512 -42
  442. package/test/unit/spec/meeting/utils.js +741 -24
  443. package/test/unit/spec/meeting-info/index.js +300 -0
  444. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  445. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  446. package/test/unit/spec/meetings/collection.js +26 -0
  447. package/test/unit/spec/meetings/index.js +1284 -217
  448. package/test/unit/spec/meetings/utils.js +202 -2
  449. package/test/unit/spec/member/index.js +38 -8
  450. package/test/unit/spec/member/util.js +499 -29
  451. package/test/unit/spec/members/index.js +597 -3
  452. package/test/unit/spec/members/request.js +206 -27
  453. package/test/unit/spec/members/utils.js +210 -0
  454. package/test/unit/spec/metrics/index.js +1 -50
  455. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  456. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  457. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  458. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  459. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  460. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  461. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  462. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  463. package/test/unit/spec/reachability/index.ts +598 -24
  464. package/test/unit/spec/reachability/request.js +68 -0
  465. package/test/unit/spec/reconnection-manager/index.js +162 -24
  466. package/test/unit/spec/recording-controller/index.js +293 -218
  467. package/test/unit/spec/recording-controller/util.js +223 -96
  468. package/test/unit/spec/roap/index.ts +200 -76
  469. package/test/unit/spec/roap/request.ts +232 -0
  470. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  471. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  472. package/test/unit/spec/stats-analyzer/index.js +188 -174
  473. package/test/unit/spec/webinar/collection.ts +13 -0
  474. package/test/unit/spec/webinar/index.ts +60 -0
  475. package/test/utils/constants.js +9 -0
  476. package/test/utils/integrationTestUtils.js +46 -0
  477. package/test/utils/testUtils.js +0 -45
  478. package/test/utils/webex-config.js +4 -0
  479. package/test/utils/webex-test-users.js +7 -3
  480. package/dist/meeting/effectsState.d.ts +0 -42
  481. package/dist/meeting/effectsState.js +0 -260
  482. package/dist/meeting/effectsState.js.map +0 -1
  483. package/dist/metrics/config.d.ts +0 -169
  484. package/dist/metrics/config.js +0 -289
  485. package/dist/metrics/config.js.map +0 -1
  486. package/dist/peer-connection-manager/index.d.ts +0 -6
  487. package/dist/peer-connection-manager/index.js +0 -671
  488. package/dist/peer-connection-manager/index.js.map +0 -1
  489. package/dist/peer-connection-manager/util.d.ts +0 -6
  490. package/dist/peer-connection-manager/util.js +0 -110
  491. package/dist/peer-connection-manager/util.js.map +0 -1
  492. package/dist/roap/collection.d.ts +0 -10
  493. package/dist/roap/collection.js +0 -63
  494. package/dist/roap/collection.js.map +0 -1
  495. package/dist/roap/handler.d.ts +0 -47
  496. package/dist/roap/handler.js +0 -279
  497. package/dist/roap/handler.js.map +0 -1
  498. package/dist/roap/state.d.ts +0 -9
  499. package/dist/roap/state.js +0 -127
  500. package/dist/roap/state.js.map +0 -1
  501. package/dist/roap/util.d.ts +0 -2
  502. package/dist/roap/util.js +0 -76
  503. package/dist/roap/util.js.map +0 -1
  504. package/src/index.js +0 -15
  505. package/src/meeting/effectsState.ts +0 -209
  506. package/src/metrics/config.ts +0 -485
  507. package/src/peer-connection-manager/index.ts +0 -847
  508. package/src/peer-connection-manager/util.ts +0 -119
  509. package/src/roap/collection.ts +0 -62
  510. package/src/roap/handler.ts +0 -294
  511. package/src/roap/state.ts +0 -156
  512. package/src/roap/util.ts +0 -100
  513. package/test/unit/spec/meeting/effectsState.js +0 -281
  514. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  515. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  516. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  517. package/test/unit/spec/roap/util.js +0 -30
@@ -13,19 +13,19 @@ _Object$defineProperty(exports, "__esModule", {
13
13
  exports.default = void 0;
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
15
15
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
- var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
16
+ var _internalMediaCore = require("@webex/internal-media-core");
17
17
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
18
18
  var _constants = require("../constants");
19
19
  var _config = _interopRequireDefault(require("../config"));
20
- var _peerConnectionManager = _interopRequireDefault(require("../peer-connection-manager"));
21
- var _reconnection = _interopRequireDefault(require("../common/errors/reconnection"));
22
- var _media = _interopRequireDefault(require("../common/errors/media"));
20
+ var _config2 = _interopRequireDefault(require("../common/config"));
23
21
  var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
24
- function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
25
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
22
+ var _rtcMetrics = _interopRequireDefault(require("../rtcMetrics"));
23
+ function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
25
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
26
+ */ /* globals navigator */
26
27
  var _BrowserDetection = (0, _browserDetection.default)(),
27
28
  isBrowser = _BrowserDetection.isBrowser;
28
-
29
29
  /**
30
30
  * MediaDirection
31
31
  * @typedef {Object} MediaDirection
@@ -56,63 +56,6 @@ var _BrowserDetection = (0, _browserDetection.default)(),
56
56
  */
57
57
  var Media = {};
58
58
 
59
- /**
60
- * @param {boolean} enabled
61
- * @param {MediaStreamTrack} track
62
- * @returns {Boolean}
63
- * @public
64
- */
65
- Media.setLocalTrack = function (enabled, track) {
66
- if (track) {
67
- track.enabled = enabled;
68
- return true;
69
- }
70
- return false;
71
- };
72
-
73
- /**
74
- * @param {RTCPeerConnection} peerConnection
75
- * @param {Object} meetingProperties
76
- * @param {string} meetingProperties.meetingId
77
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
78
- * @returns {Promise}
79
- */
80
- Media.reconnectMedia = function (peerConnection, _ref) {
81
- var meetingId = _ref.meetingId,
82
- remoteQualityLevel = _ref.remoteQualityLevel,
83
- enableRtx = _ref.enableRtx,
84
- enableExtmap = _ref.enableExtmap;
85
- if (peerConnection.connectionState === _constants.PEER_CONNECTION_STATE.CLOSED || peerConnection.connectionState === _constants.PEER_CONNECTION_STATE.FAILED) {
86
- return _promise.default.reject(new _reconnection.default('Reinitiate peerconnection'));
87
- }
88
- return _peerConnectionManager.default.createOffer(peerConnection, {
89
- meetingId: meetingId,
90
- remoteQualityLevel: remoteQualityLevel,
91
- enableRtx: enableRtx,
92
- enableExtmap: enableExtmap
93
- });
94
- };
95
-
96
- /**
97
- * format the media array for send
98
- * @param {String} mediaId
99
- * @param {Boolean} audioMuted
100
- * @param {Boolean} videoMuted
101
- * @returns {Array} medias
102
- */
103
- Media.generateLocalMedias = function (mediaId, audioMuted, videoMuted) {
104
- if (mediaId) {
105
- return [{
106
- localSdp: (0, _stringify.default)({
107
- audioMuted: audioMuted,
108
- videoMuted: videoMuted
109
- }),
110
- mediaId: mediaId
111
- }];
112
- }
113
- return [];
114
- };
115
-
116
59
  /**
117
60
  * make a browser call to get the media
118
61
  * @param {SendOptions} options
@@ -137,184 +80,111 @@ Media.getLocalMedia = function (options, config) {
137
80
  }
138
81
  return _promise.default.resolve(undefined);
139
82
  };
140
- /**
141
- * Returns the direction and tracks
142
- * @param {string} trackType type of track (audio/video)
143
- * @param {object} track tracks passed
144
- * @param {boolean} receiveTracks do you want to receive tracks from the remote side
145
- * @returns {Object} returns direction tracks to be added in transceiver
146
- */
147
- Media.checkTracks = function (trackType, track, receiveTracks) {
148
- // eslint-disable-next-line @typescript-eslint/no-shadow
149
- var getDirection = function getDirection(sendTracks, receiveTracks) {
150
- if (sendTracks && receiveTracks) {
151
- return 'sendrecv';
152
- }
153
- if (sendTracks && !receiveTracks) {
154
- return 'sendonly';
155
- }
156
- if (!sendTracks && receiveTracks) {
157
- return 'recvonly';
158
- }
83
+ Media.getDirection = function (forceSendRecv, receive, send) {
84
+ if (!receive && !send) {
159
85
  return 'inactive';
160
- };
161
- if (track) {
162
- return {
163
- track: track,
164
- direction: getDirection(!!track, receiveTracks)
165
- };
166
86
  }
167
- return {
168
- track: trackType,
169
- direction: getDirection(!!track, receiveTracks)
170
- };
171
- };
172
- /**
173
- * creates peerconnection and attaches streams
174
- * @param {MediaDirection} mediaProperties
175
- * @param {Object} meetingProperties
176
- * @param {string} meetingProperties.meetingId
177
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
178
- * @returns {Array} [peerConnection, ]
179
- */
180
- Media.attachMedia = function (mediaProperties, _ref2) {
181
- var meetingId = _ref2.meetingId,
182
- remoteQualityLevel = _ref2.remoteQualityLevel,
183
- enableRtx = _ref2.enableRtx,
184
- enableExtmap = _ref2.enableExtmap;
185
- var mediaDirection = mediaProperties.mediaDirection,
186
- audioTrack = mediaProperties.audioTrack,
187
- videoTrack = mediaProperties.videoTrack,
188
- shareTrack = mediaProperties.shareTrack,
189
- peerConnection = mediaProperties.peerConnection;
190
- var result = null;
191
-
192
- // Add Transceiver for audio
193
- result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);
194
- peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {
195
- direction: result.direction
196
- });
197
-
198
- // Add Transceiver for video
199
- result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);
200
- peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {
201
- direction: result.direction
202
- });
203
-
204
- // Add Transceiver for share
205
- result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);
206
- peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {
207
- direction: result.direction
208
- });
209
- peerConnection.onnegotiationneeded = function (event) {
210
- _loggerProxy.default.logger.info("Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ".concat(event));
211
- };
212
- return _peerConnectionManager.default.createOffer(peerConnection, {
213
- meetingId: meetingId,
214
- remoteQualityLevel: remoteQualityLevel,
215
- enableRtx: enableRtx,
216
- enableExtmap: enableExtmap
217
- });
218
- };
219
-
220
- /**
221
- * updates all the media streams and creates a new media offer
222
- * @param {MediaDirection} mediaProperties
223
- * @param {Object} meetingProperties
224
- * @param {string} meetingProperties.meetingId
225
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
226
- * @returns {Promise}
227
- */
228
- Media.updateMedia = function (mediaProperties, _ref3) {
229
- var meetingId = _ref3.meetingId,
230
- remoteQualityLevel = _ref3.remoteQualityLevel,
231
- enableRtx = _ref3.enableRtx,
232
- enableExtmap = _ref3.enableExtmap;
233
- var mediaDirection = mediaProperties.mediaDirection,
234
- audioTrack = mediaProperties.audioTrack,
235
- videoTrack = mediaProperties.videoTrack,
236
- shareTrack = mediaProperties.shareTrack,
237
- peerConnection = mediaProperties.peerConnection;
238
-
239
- // update audio transceiver
240
- Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {
241
- type: 'audio',
242
- track: audioTrack,
243
- sendTrack: mediaDirection.sendAudio && audioTrack,
244
- receiveTrack: mediaDirection.receiveAudio
245
- });
246
-
247
- // update video transceiver
248
- Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {
249
- type: 'video',
250
- track: videoTrack,
251
- sendTrack: mediaDirection.sendVideo && videoTrack,
252
- receiveTrack: mediaDirection.receiveVideo
253
- });
254
-
255
- // update content transceiver
256
- Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {
257
- type: 'video',
258
- track: shareTrack,
259
- sendTrack: mediaDirection.sendShare && shareTrack,
260
- receiveTrack: mediaDirection.receiveShare
261
- });
262
- peerConnection.onnegotiationneeded = function (event) {
263
- _loggerProxy.default.logger.info("Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ".concat(event));
264
- };
265
- return _peerConnectionManager.default.createOffer(peerConnection, {
266
- meetingId: meetingId,
267
- remoteQualityLevel: remoteQualityLevel,
268
- enableRtx: enableRtx,
269
- enableExtmap: enableExtmap
270
- });
87
+ if (forceSendRecv || receive && send) {
88
+ return 'sendrecv';
89
+ }
90
+ if (receive) {
91
+ return 'recvonly';
92
+ }
93
+ return 'sendonly';
271
94
  };
272
95
 
273
96
  /**
274
- * @param {RTCRtpTransceiver} transceiver
97
+ * creates a webrtc media connection with provided tracks and mediaDirection configuration
98
+ *
99
+ * @param {boolean} isMultistream
100
+ * @param {string} debugId string useful for debugging (will appear in media connection logs)
101
+ * @param {object} webex main `webex` object.
102
+ * @param {string} meetingId id for the meeting using this connection
103
+ * @param {string} correlationId id used in requests to correlate to this session
275
104
  * @param {Object} options
276
- * @param {MediaStreamTrack} options.track
277
- * @returns {undefined}
105
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
106
+ * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
107
+ * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
108
+ * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
109
+ * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
110
+ * @param {Object} [options.turnServerInfo]
111
+ * @param {BundlePolicy} [options.bundlePolicy]
112
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
278
113
  */
279
- Media.setTrackOnTransceiver = function (transceiver, options) {
280
- var type = options.type,
281
- track = options.track,
282
- sendTrack = options.sendTrack,
283
- receiveTrack = options.receiveTrack;
284
- try {
285
- var result = Media.checkTracks(type, sendTrack && track, receiveTrack);
286
- transceiver.direction = result.direction;
287
- if (options.track) {
288
- transceiver.sender.replaceTrack(track);
114
+ Media.createMediaConnection = function (isMultistream, debugId, webex, meetingId, correlationId, options) {
115
+ var _audioStream$outputSt, _videoStream$outputSt, _shareVideoStream$out, _shareAudioStream$out;
116
+ var mediaProperties = options.mediaProperties,
117
+ remoteQualityLevel = options.remoteQualityLevel,
118
+ enableRtx = options.enableRtx,
119
+ enableExtmap = options.enableExtmap,
120
+ turnServerInfo = options.turnServerInfo,
121
+ bundlePolicy = options.bundlePolicy;
122
+ var iceServers = [];
123
+ if (turnServerInfo) {
124
+ iceServers.push({
125
+ urls: turnServerInfo.url,
126
+ username: turnServerInfo.username || '',
127
+ credential: turnServerInfo.password || ''
128
+ });
129
+ }
130
+ if (isMultistream) {
131
+ var config = {
132
+ iceServers: iceServers
133
+ };
134
+ if (bundlePolicy) {
135
+ config.bundlePolicy = bundlePolicy;
289
136
  }
290
- } catch (e) {
291
- _loggerProxy.default.logger.error("Media:index#setTrackOnTransceiver --> ".concat(e));
292
- throw e;
137
+ var rtcMetrics = new _rtcMetrics.default(webex, meetingId, correlationId);
138
+ return new _internalMediaCore.MultistreamRoapMediaConnection(config, meetingId, /* the rtc metrics objects callbacks */
139
+ function (data) {
140
+ return rtcMetrics.addMetrics(data);
141
+ }, function () {
142
+ return rtcMetrics.closeMetrics();
143
+ }, function () {
144
+ return rtcMetrics.sendMetricsInQueue();
145
+ });
293
146
  }
294
- };
147
+ if (!mediaProperties) {
148
+ throw new Error('mediaProperties have to be provided for non-multistream media connections');
149
+ }
150
+ var mediaDirection = mediaProperties.mediaDirection,
151
+ audioStream = mediaProperties.audioStream,
152
+ videoStream = mediaProperties.videoStream,
153
+ shareVideoStream = mediaProperties.shareVideoStream,
154
+ shareAudioStream = mediaProperties.shareAudioStream;
155
+ return new _internalMediaCore.RoapMediaConnection({
156
+ iceServers: iceServers,
157
+ skipInactiveTransceivers: false,
158
+ requireH264: true,
159
+ sdpMunging: {
160
+ convertPort9to0: false,
161
+ addContentSlides: true,
162
+ bandwidthLimits: {
163
+ audio: _config2.default.meetings.bandwidth.audio,
164
+ video: _config2.default.meetings.bandwidth.video
165
+ },
166
+ startBitrate: _config2.default.meetings.bandwidth.startBitrate,
167
+ periodicKeyframes: 20,
168
+ // it's always been hardcoded in SDK so for now keeping it that way
169
+ disableExtmap: !enableExtmap,
170
+ disableRtx: !enableRtx // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
171
+ }
172
+ }, {
173
+ // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530
174
+ localTracks: {
175
+ audio: audioStream === null || audioStream === void 0 ? void 0 : (_audioStream$outputSt = audioStream.outputStream) === null || _audioStream$outputSt === void 0 ? void 0 : _audioStream$outputSt.getTracks()[0],
176
+ video: videoStream === null || videoStream === void 0 ? void 0 : (_videoStream$outputSt = videoStream.outputStream) === null || _videoStream$outputSt === void 0 ? void 0 : _videoStream$outputSt.getTracks()[0],
177
+ screenShareVideo: shareVideoStream === null || shareVideoStream === void 0 ? void 0 : (_shareVideoStream$out = shareVideoStream.outputStream) === null || _shareVideoStream$out === void 0 ? void 0 : _shareVideoStream$out.getTracks()[0],
178
+ screenShareAudio: shareAudioStream === null || shareAudioStream === void 0 ? void 0 : (_shareAudioStream$out = shareAudioStream.outputStream) === null || _shareAudioStream$out === void 0 ? void 0 : _shareAudioStream$out.getTracks()[0] // TODO: add type for screenShareAudio in internal-media-core SPARK-446923
179
+ },
295
180
 
296
- /**
297
- * creates a new offer
298
- * @param {Object} meetingProperties
299
- * @param {string} meetingProperties.meetingId
300
- * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
301
- * @param {RTCPeerConnection} peerConnection
302
- * @param {RTCRtpTransceiver} transceiver
303
- * @param {Object} options see #Media.setTrackOnTransceiver
304
- * @returns {Promise}
305
- */
306
- Media.updateTransceiver = function (_ref4, peerConnection, transceiver, options) {
307
- var meetingId = _ref4.meetingId,
308
- remoteQualityLevel = _ref4.remoteQualityLevel,
309
- enableRtx = _ref4.enableRtx,
310
- enableExtmap = _ref4.enableExtmap;
311
- Media.setTrackOnTransceiver(transceiver, options);
312
- return _peerConnectionManager.default.createOffer(peerConnection, {
313
- meetingId: meetingId,
314
- remoteQualityLevel: remoteQualityLevel,
315
- enableRtx: enableRtx,
316
- enableExtmap: enableExtmap
317
- });
181
+ direction: {
182
+ audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
183
+ video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
184
+ screenShareVideo: Media.getDirection(false, mediaDirection.receiveShare, mediaDirection.sendShare)
185
+ },
186
+ remoteQualityLevel: remoteQualityLevel
187
+ }, debugId);
318
188
  };
319
189
 
320
190
  /**
@@ -445,56 +315,6 @@ Media.getMedia = function (audio, video, config) {
445
315
  });
446
316
  };
447
317
 
448
- /**
449
- * Checks if the machine has at least one audio or video device (Dont use this for screen share)
450
- * @param {object} [options]
451
- * {
452
- * sendAudio: true/false,
453
- * sendVideo: true/false
454
- * }
455
- * @returns {Object} {
456
- * sendAudio: true/false,
457
- * sendVideo: true/false
458
- *}
459
- */
460
- Media.getSupportedDevice = function (_ref5) {
461
- var sendAudio = _ref5.sendAudio,
462
- sendVideo = _ref5.sendVideo;
463
- return _promise.default.resolve().then(function () {
464
- if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
465
- return {
466
- sendAudio: false,
467
- sendVideo: false
468
- };
469
- }
470
- return navigator.mediaDevices.enumerateDevices().then(function (devices) {
471
- var supported = {
472
- audio: devices.filter(function (device) {
473
- return device.kind === _constants.AUDIO_INPUT;
474
- }).length > 0,
475
- video: devices.filter(function (device) {
476
- return device.kind === _constants.VIDEO_INPUT;
477
- }).length > 0
478
- };
479
- return {
480
- sendAudio: supported.audio && sendAudio,
481
- sendVideo: supported.video && sendVideo
482
- };
483
- });
484
- });
485
- };
486
-
487
- /**
488
- * proxy to browser navigator.mediaDevices.enumerateDevices()
489
- * @returns {Promise}
490
- */
491
- Media.getDevices = function () {
492
- if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
493
- return navigator.mediaDevices.enumerateDevices();
494
- }
495
- return _promise.default.reject(new _media.default('enumerateDevices not supported.'));
496
- };
497
-
498
318
  /**
499
319
  *
500
320
  * Toggle a specific stream
@@ -505,49 +325,18 @@ Media.toggleStream = function () {};
505
325
 
506
326
  /**
507
327
  * Stop input stream
508
- * @param {MediaTrack} track A media stream
509
- * @returns {null}
510
- */
511
- Media.stopTracks = function (track) {
512
- if (!track) {
513
- return _promise.default.resolve();
514
- }
515
- return _promise.default.resolve().then(function () {
516
- if (track && track.stop) {
517
- try {
518
- track.stop();
519
- } catch (e) {
520
- _loggerProxy.default.logger.error("Media:index#stopTracks --> Unable to stop the track with state ".concat(track.readyState, ", error: ").concat(e));
521
- }
522
- }
523
- });
524
- };
525
-
526
- /**
527
- *
528
- * Stop input stream
529
- * @param {Stream} stream A media stream
328
+ * @param {LocalStream} stream A local stream
530
329
  * @returns {null}
531
- * @deprecated after v1.89.3
532
330
  */
533
331
  Media.stopStream = function (stream) {
534
- _loggerProxy.default.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
535
332
  if (!stream) {
536
333
  return _promise.default.resolve();
537
334
  }
538
-
539
- /*
540
- * To release local media
541
- * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
542
- * 2) Firefox requires the stream to be stopped
543
- */
544
335
  return _promise.default.resolve().then(function () {
545
- if (stream.getTracks) {
546
- stream.getTracks().forEach(function (track) {
547
- track.stop();
548
- });
549
- } else if (stream.stop) {
336
+ try {
550
337
  stream.stop();
338
+ } catch (e) {
339
+ _loggerProxy.default.logger.error("Media:index#stopStream --> Unable to stop the stream with ready state => ".concat(stream.readyState, ", error: ").concat(e));
551
340
  }
552
341
  });
553
342
  };
@@ -582,6 +371,5 @@ Media.getUserMedia = function (mediaSetting, audioVideo, sharePreferences, confi
582
371
  });
583
372
  });
584
373
  };
585
- var _default = Media;
586
- exports.default = _default;
374
+ var _default = exports.default = Media;
587
375
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_config","_peerConnectionManager","_reconnection","_media","_browserDetection","ownKeys","object","enumerableOnly","keys","_Object$keys","_Object$getOwnPropertySymbols","symbols","filter","sym","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","Object","forEach","key","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","_ref","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","_promise","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","_stringify","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","_ref2","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","concat","updateMedia","_ref3","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","_ref4","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","_ref5","enumerateDevices","devices","supported","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT,\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (\n peerConnection: RTCPeerConnection,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n if (\n peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED\n ) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted,\n }),\n mediaId,\n },\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n/**\n * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n }\n if (sendTracks && !receiveTracks) {\n return 'sendonly';\n }\n if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks(\n 'audio',\n mediaDirection.sendAudio && audioTrack,\n mediaDirection.receiveAudio\n );\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for video\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendVideo && videoTrack,\n mediaDirection.receiveVideo\n );\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for share\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendShare && shareTrack,\n mediaDirection.receiveShare\n );\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio,\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo,\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare,\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (\n transceiver: RTCRtpTransceiver,\n options: {\n track: MediaStreamTrack;\n type: any;\n sendTrack: any;\n receiveTrack: any;\n }\n) => {\n const {type, track, sendTrack, receiveTrack} = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n } catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = (\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n },\n peerConnection: RTCPeerConnection,\n transceiver: RTCRtpTransceiver,\n options: object\n) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false,\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo,\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`\n );\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn(\n 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'\n );\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n } else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_internalMediaCore","require","_loggerProxy","_interopRequireDefault","_constants","_config","_config2","_browserDetection","_rtcMetrics","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","_promise","resolve","undefined","getDirection","forceSendRecv","receive","send","createMediaConnection","isMultistream","debugId","webex","meetingId","correlationId","_audioStream$outputSt","_videoStream$outputSt","_shareVideoStream$out","_shareAudioStream$out","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","bundlePolicy","iceServers","urls","url","username","credential","password","rtcMetrics","RtcMetrics","MultistreamRoapMediaConnection","data","addMetrics","closeMetrics","sendMetricsInQueue","Error","mediaDirection","audioStream","videoStream","shareVideoStream","shareAudioStream","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","localTracks","outputStream","getTracks","screenShareVideo","screenShareAudio","direction","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","concat","constraint","toggleStream","stopStream","stop","readyState","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {\n RoapMediaConnection,\n MultistreamRoapMediaConnection,\n type MultistreamConnectionConfig,\n} from '@webex/internal-media-core';\nimport {\n LocalStream,\n LocalCameraStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalMicrophoneStream,\n} from '@webex/media-helpers';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\nimport RtcMetrics from '../rtcMetrics';\n\nconst {isBrowser} = BrowserDetection();\n\nexport type BundlePolicy = MultistreamConnectionConfig['bundlePolicy'];\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\nMedia.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {\n if (!receive && !send) {\n return 'inactive';\n }\n\n if (forceSendRecv || (receive && send)) {\n return 'sendrecv';\n }\n\n if (receive) {\n return 'recvonly';\n }\n\n return 'sendonly';\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {object} webex main `webex` object.\n * @param {string} meetingId id for the meeting using this connection\n * @param {string} correlationId id used in requests to correlate to this session\n * @param {Object} options\n * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:\n * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @param {BundlePolicy} [options.bundlePolicy]\n * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n webex: object,\n meetingId: string,\n correlationId: string,\n options: {\n mediaProperties: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n };\n audioStream?: LocalMicrophoneStream;\n videoStream?: LocalCameraStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\n };\n remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';\n enableRtx?: boolean;\n enableExtmap?: boolean;\n turnServerInfo?: {\n url: string;\n username: string;\n password: string;\n };\n bundlePolicy?: BundlePolicy;\n }\n) => {\n const {\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo,\n bundlePolicy,\n } = options;\n\n const iceServers = [];\n\n if (turnServerInfo) {\n iceServers.push({\n urls: turnServerInfo.url,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || '',\n });\n }\n\n if (isMultistream) {\n const config: MultistreamConnectionConfig = {\n iceServers,\n };\n\n if (bundlePolicy) {\n config.bundlePolicy = bundlePolicy;\n }\n\n const rtcMetrics = new RtcMetrics(webex, meetingId, correlationId);\n\n return new MultistreamRoapMediaConnection(\n config,\n meetingId,\n /* the rtc metrics objects callbacks */\n (data) => rtcMetrics.addMetrics(data),\n () => rtcMetrics.closeMetrics(),\n () => rtcMetrics.sendMetricsInQueue()\n );\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {mediaDirection, audioStream, videoStream, shareVideoStream, shareAudioStream} =\n mediaProperties;\n\n return new RoapMediaConnection(\n {\n iceServers,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n },\n },\n {\n // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530\n localTracks: {\n audio: audioStream?.outputStream?.getTracks()[0],\n video: videoStream?.outputStream?.getTracks()[0],\n screenShareVideo: shareVideoStream?.outputStream?.getTracks()[0],\n screenShareAudio: shareAudioStream?.outputStream?.getTracks()[0], // TODO: add type for screenShareAudio in internal-media-core SPARK-446923\n } as unknown,\n direction: {\n audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),\n video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),\n screenShareVideo: Media.getDirection(\n false,\n mediaDirection.receiveShare,\n mediaDirection.sendShare\n ),\n },\n remoteQualityLevel,\n },\n debugId\n );\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {LocalStream} stream A local stream\n * @returns {null}\n */\nMedia.stopStream = (stream: LocalStream) => {\n if (!stream) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n try {\n stream.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopStream --> Unable to stop the stream with ready state => ${stream.readyState}, error: ${e}`\n );\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":"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"}