@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

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 (548) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +37 -60
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +92 -118
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +386 -527
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +29 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,172 @@
1
+ /* global window */
2
+ // @ts-ignore
3
+ import {StatelessWebexPlugin} from '@webex/webex-core';
4
+
5
+ import LoggerProxy from '../common/logs/logger-proxy';
6
+ import {MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';
7
+ import Metrics from '../metrics';
8
+ import {eventType} from '../metrics/config';
9
+
10
+ /**
11
+ * @class RoapRequest
12
+ */
13
+ export default class RoapRequest extends StatelessWebexPlugin {
14
+ /**
15
+ * Returns reachability data.
16
+ * @param {Object} localSdp
17
+ * @returns {Object}
18
+ */
19
+ async attachReachabilityData(localSdp) {
20
+ let joinCookie;
21
+
22
+ // @ts-ignore
23
+ const reachabilityData = await this.webex.boundedStorage
24
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)
25
+ .catch(() => {});
26
+
27
+ if (reachabilityData) {
28
+ try {
29
+ const reachabilityResult = JSON.parse(reachabilityData);
30
+
31
+ /* istanbul ignore else */
32
+ if (reachabilityResult && Object.keys(reachabilityResult).length) {
33
+ localSdp.reachability = reachabilityResult;
34
+ }
35
+ } catch (e) {
36
+ LoggerProxy.logger.error(
37
+ `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
38
+ );
39
+ }
40
+ }
41
+
42
+ // @ts-ignore
43
+ const joinCookieRaw = await this.webex.boundedStorage
44
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
45
+ .catch(() => {});
46
+
47
+ if (joinCookieRaw) {
48
+ try {
49
+ joinCookie = JSON.parse(joinCookieRaw);
50
+ } catch (e) {
51
+ LoggerProxy.logger.error(
52
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
53
+ );
54
+ }
55
+ }
56
+
57
+ return {localSdp, joinCookie};
58
+ }
59
+
60
+ /**
61
+ * Sends a ROAP message
62
+ * @param {Object} options
63
+ * @param {Object} options.roapMessage
64
+ * @param {String} options.locusSelfUrl
65
+ * @param {String} options.mediaId
66
+ * @param {String} options.correlationId
67
+ * @param {Boolean} options.audioMuted
68
+ * @param {Boolean} options.videoMuted
69
+ * @param {String} options.meetingId
70
+ * @param {Boolean} options.preferTranscoding
71
+ * @returns {Promise} returns the response/failure of the request
72
+ */
73
+ async sendRoap(options: {
74
+ roapMessage: any;
75
+ locusSelfUrl: string;
76
+ mediaId: string;
77
+ correlationId: string;
78
+ audioMuted: boolean;
79
+ videoMuted: boolean;
80
+ meetingId: string;
81
+ preferTranscoding?: boolean;
82
+ }) {
83
+ const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
84
+
85
+ if (!mediaId) {
86
+ LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
87
+ }
88
+
89
+ const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
90
+ roapMessage,
91
+ // eslint-disable-next-line no-warning-comments
92
+ // TODO: check whats the need for video and audiomute
93
+ audioMuted: !!options.audioMuted,
94
+ videoMuted: !!options.videoMuted,
95
+ });
96
+
97
+ const mediaUrl = `${locusSelfUrl}/${MEDIA}`;
98
+ // @ts-ignore
99
+ const deviceUrl = this.webex.internal.device.url;
100
+
101
+ LoggerProxy.logger.info(
102
+ `Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
103
+ );
104
+
105
+ Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
106
+
107
+ // @ts-ignore
108
+ return this.request({
109
+ uri: mediaUrl,
110
+ method: HTTP_VERBS.PUT,
111
+ body: {
112
+ device: {
113
+ url: deviceUrl,
114
+ // @ts-ignore
115
+ deviceType: this.config.meetings.deviceType,
116
+ },
117
+ correlationId,
118
+ localMedias: [
119
+ {
120
+ localSdp: JSON.stringify(localSdpWithReachabilityData),
121
+ mediaId: options.mediaId,
122
+ },
123
+ ],
124
+ clientMediaPreferences: {
125
+ preferTranscoding: options.preferTranscoding ?? true,
126
+ joinCookie,
127
+ },
128
+ },
129
+ })
130
+ .then((res) => {
131
+ Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
132
+
133
+ // always it will be the first mediaConnection Object
134
+ const mediaConnections =
135
+ res.body.mediaConnections &&
136
+ res.body.mediaConnections.length > 0 &&
137
+ res.body.mediaConnections[0];
138
+
139
+ LoggerProxy.logger.debug(
140
+ `Roap:request#sendRoap --> response:${JSON.stringify(
141
+ mediaConnections,
142
+ null,
143
+ 2
144
+ )}'\n StatusCode:'${res.statusCode}`
145
+ );
146
+ const {locus} = res.body;
147
+
148
+ locus.roapSeq = options.roapMessage.seq;
149
+
150
+ return {
151
+ locus,
152
+ ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),
153
+ };
154
+ })
155
+ .catch((err) => {
156
+ Metrics.postEvent({
157
+ event: eventType.MEDIA_RESPONSE,
158
+ meetingId,
159
+ data: {error: Metrics.parseLocusError(err, true)},
160
+ });
161
+ LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
162
+ LoggerProxy.logger.error(
163
+ `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
164
+ roapMessage,
165
+ null,
166
+ 2
167
+ )} + '\\n mediaId:'${options.mediaId}`
168
+ );
169
+ throw err;
170
+ });
171
+ }
172
+ }
@@ -1,3 +1,4 @@
1
+ // @ts-ignore - Types not available for @webex/common
1
2
  import {Defer} from '@webex/common';
2
3
 
3
4
  import Metrics from '../metrics';
@@ -6,9 +7,16 @@ import LoggerProxy from '../common/logs/logger-proxy';
6
7
  import {ROAP} from '../constants';
7
8
 
8
9
  import RoapRequest from './request';
10
+ import Meeting from '../meeting';
9
11
 
10
12
  const TURN_DISCOVERY_TIMEOUT = 10; // in seconds
11
13
 
14
+ // Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0
15
+ // and this is handy for us, because TURN discovery is always done before the first SDP exchange,
16
+ // so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
17
+ // and do the SDP offer with seq=1
18
+ const TURN_DISCOVERY_SEQ = 0;
19
+
12
20
  /**
13
21
  * Handles the process of finding out TURN server information from Linus.
14
22
  * This is achieved by sending a TURN_DISCOVERY_REQUEST.
@@ -40,7 +48,6 @@ export default class TurnDiscovery {
40
48
  };
41
49
  }
42
50
 
43
-
44
51
  /**
45
52
  * waits for TURN_DISCOVERY_RESPONSE message to arrive
46
53
  *
@@ -48,22 +55,30 @@ export default class TurnDiscovery {
48
55
  * @private
49
56
  * @memberof Roap
50
57
  */
51
- waitForTurnDiscoveryResponse() {
58
+ private waitForTurnDiscoveryResponse() {
52
59
  if (!this.defer) {
53
- LoggerProxy.logger.warn('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress');
60
+ LoggerProxy.logger.warn(
61
+ 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'
62
+ );
54
63
 
55
- return Promise.reject(new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()'));
64
+ return Promise.reject(
65
+ new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')
66
+ );
56
67
  }
57
68
 
58
69
  const {defer} = this;
59
70
 
60
71
  this.responseTimer = setTimeout(() => {
61
- LoggerProxy.logger.warn(`Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`);
72
+ LoggerProxy.logger.warn(
73
+ `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`
74
+ );
62
75
 
63
76
  defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));
64
77
  }, TURN_DISCOVERY_TIMEOUT * 1000);
65
78
 
66
- LoggerProxy.logger.info('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...');
79
+ LoggerProxy.logger.info(
80
+ 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'
81
+ );
67
82
 
68
83
  return defer.promise;
69
84
  }
@@ -76,11 +91,14 @@ export default class TurnDiscovery {
76
91
  * @public
77
92
  * @memberof Roap
78
93
  */
79
- handleTurnDiscoveryResponse(roapMessage) {
94
+ public handleTurnDiscoveryResponse(roapMessage: object) {
95
+ // @ts-ignore - Fix missing type
80
96
  const {headers} = roapMessage;
81
97
 
82
98
  if (!this.defer) {
83
- LoggerProxy.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');
99
+ LoggerProxy.logger.warn(
100
+ 'Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response'
101
+ );
84
102
 
85
103
  return;
86
104
  }
@@ -97,7 +115,9 @@ export default class TurnDiscovery {
97
115
  // check if it matches any of our expected headers
98
116
  expectedHeaders.forEach((expectedHeader) => {
99
117
  if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {
100
- this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);
118
+ this.turnInfo[expectedHeader.field] = receivedHeader.substring(
119
+ expectedHeader.headerName.length + 1
120
+ );
101
121
  foundHeaders += 1;
102
122
  }
103
123
  });
@@ -107,11 +127,18 @@ export default class TurnDiscovery {
107
127
  this.responseTimer = undefined;
108
128
 
109
129
  if (foundHeaders !== expectedHeaders.length) {
110
- LoggerProxy.logger.warn(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(headers)}`);
111
- this.defer.reject(new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`));
112
- }
113
- else {
114
- LoggerProxy.logger.info(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`);
130
+ LoggerProxy.logger.warn(
131
+ `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(
132
+ headers
133
+ )}`
134
+ );
135
+ this.defer.reject(
136
+ new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`)
137
+ );
138
+ } else {
139
+ LoggerProxy.logger.info(
140
+ `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`
141
+ );
115
142
  this.defer.resolve();
116
143
  }
117
144
  }
@@ -125,11 +152,11 @@ export default class TurnDiscovery {
125
152
  * @private
126
153
  * @memberof Roap
127
154
  */
128
- sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
129
- const seq = meeting.roapSeq + 1;
130
-
155
+ sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
131
156
  if (this.defer) {
132
- LoggerProxy.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
157
+ LoggerProxy.logger.warn(
158
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'
159
+ );
133
160
 
134
161
  return Promise.resolve();
135
162
  }
@@ -139,24 +166,27 @@ export default class TurnDiscovery {
139
166
  const roapMessage = {
140
167
  messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
141
168
  version: ROAP.ROAP_VERSION,
142
- seq,
169
+ seq: TURN_DISCOVERY_SEQ,
143
170
  };
144
171
 
145
- LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
172
+ LoggerProxy.logger.info(
173
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'
174
+ );
146
175
 
147
176
  return this.roapRequest
148
177
  .sendRoap({
149
178
  roapMessage,
150
179
  correlationId: meeting.correlationId,
180
+ // @ts-ignore - Fix missing type
151
181
  locusSelfUrl: meeting.selfUrl,
182
+ // @ts-ignore - Fix missing type
152
183
  mediaId: isReconnecting ? '' : meeting.mediaId,
153
- audioMuted: meeting.isAudioMuted(),
154
- videoMuted: meeting.isVideoMuted(),
155
- meetingId: meeting.id
184
+ audioMuted: meeting.audio?.isLocallyMuted(),
185
+ videoMuted: meeting.video?.isLocallyMuted(),
186
+ meetingId: meeting.id,
187
+ preferTranscoding: !meeting.isMultistream,
156
188
  })
157
189
  .then(({mediaConnections}) => {
158
- meeting.setRoapSeq(seq);
159
-
160
190
  if (mediaConnections) {
161
191
  meeting.updateMediaConnections(mediaConnections);
162
192
  }
@@ -170,24 +200,69 @@ export default class TurnDiscovery {
170
200
  * @param {Meeting} meeting
171
201
  * @returns {Promise}
172
202
  */
173
- sendRoapOK(meeting) {
203
+ sendRoapOK(meeting: Meeting) {
174
204
  LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');
175
205
 
176
206
  return this.roapRequest.sendRoap({
177
207
  roapMessage: {
178
208
  messageType: ROAP.ROAP_TYPES.OK,
179
209
  version: ROAP.ROAP_VERSION,
180
- seq: meeting.roapSeq
210
+ seq: TURN_DISCOVERY_SEQ,
181
211
  },
212
+ // @ts-ignore - fix type
182
213
  locusSelfUrl: meeting.selfUrl,
214
+ // @ts-ignore - fix type
183
215
  mediaId: meeting.mediaId,
184
216
  correlationId: meeting.correlationId,
185
- audioMuted: meeting.isAudioMuted(),
186
- videoMuted: meeting.isVideoMuted(),
187
- meetingId: meeting.id
217
+ audioMuted: meeting.audio?.isLocallyMuted(),
218
+ videoMuted: meeting.video?.isLocallyMuted(),
219
+ meetingId: meeting.id,
220
+ preferTranscoding: !meeting.isMultistream,
188
221
  });
189
222
  }
190
223
 
224
+ /**
225
+ * Gets the reason why reachability is skipped.
226
+ *
227
+ * @param {Meeting} meeting
228
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
229
+ */
230
+ private async getSkipReason(meeting: Meeting): Promise<string> {
231
+ // @ts-ignore - fix type
232
+ const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
233
+
234
+ if (isAnyClusterReachable) {
235
+ LoggerProxy.logger.info(
236
+ 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
237
+ );
238
+
239
+ return 'reachability';
240
+ }
241
+
242
+ // @ts-ignore - fix type
243
+ if (!meeting.config.experimental.enableTurnDiscovery) {
244
+ LoggerProxy.logger.info(
245
+ 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
246
+ );
247
+
248
+ return 'config';
249
+ }
250
+
251
+ return '';
252
+ }
253
+
254
+ /**
255
+ * Checks if TURN discovery is skipped.
256
+ *
257
+ * @param {Meeting} meeting
258
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
259
+ */
260
+ async isSkipped(meeting) {
261
+ const skipReason = await this.getSkipReason(meeting);
262
+
263
+ return !!skipReason;
264
+ }
265
+
191
266
  /**
192
267
  * Retrieves TURN server information from the backend by doing
193
268
  * a roap message exchange:
@@ -196,23 +271,23 @@ export default class TurnDiscovery {
196
271
  * | <----TURN_DISCOVERY_RESPONSE----- |
197
272
  * | --------------OK----------------> |
198
273
  *
274
+ * This TURN discovery roap exchange is always done with seq=0.
275
+ * The RoapMediaConnection SDP exchange always starts with seq=1,
276
+ * so it works fine no matter if TURN discovery is done or not.
277
+ *
199
278
  * @param {Meeting} meeting
200
279
  * @param {Boolean} isReconnecting should be set to true if this is a new
201
280
  * media connection just after a reconnection
202
281
  * @returns {Promise}
203
282
  */
204
- doTurnDiscovery(meeting, isReconnecting) {
205
- const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
206
-
207
- if (isAnyClusterReachable) {
208
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery');
209
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'reachability'});
210
- }
211
-
212
- if (!meeting.config.experimental.enableTurnDiscovery) {
213
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');
214
-
215
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});
283
+ async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
284
+ const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
285
+
286
+ if (turnDiscoverySkippedReason) {
287
+ return {
288
+ turnServerInfo: undefined,
289
+ turnDiscoverySkippedReason,
290
+ };
216
291
  }
217
292
 
218
293
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
@@ -227,19 +302,18 @@ export default class TurnDiscovery {
227
302
  })
228
303
  .catch((e) => {
229
304
  // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
230
- LoggerProxy.logger.info(`Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`);
231
-
232
- Metrics.sendBehavioralMetric(
233
- BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,
234
- {
235
- correlation_id: meeting.correlationId,
236
- locus_id: meeting.locusUrl.split('/').pop(),
237
- reason: e.message,
238
- stack: e.stack
239
- }
305
+ LoggerProxy.logger.info(
306
+ `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`
240
307
  );
241
308
 
242
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
309
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {
310
+ correlation_id: meeting.correlationId,
311
+ locus_id: meeting.locusUrl.split('/').pop(),
312
+ reason: e.message,
313
+ stack: e.stack,
314
+ });
315
+
316
+ return {turnServerInfo: undefined, turnDiscoverySkippedReason: undefined};
243
317
  });
244
318
  }
245
319
  }
@@ -0,0 +1,37 @@
1
+ const STATS_DEFAULT = {
2
+ encryption: 'sha-256',
3
+ bandwidth: {
4
+ systemBandwidth: 0,
5
+ sentPerSecond: 0,
6
+ encodedPerSecond: 0,
7
+ helper: {
8
+ audioBytesSent: 0,
9
+ videoBytestSent: 0,
10
+ },
11
+ speed: 0,
12
+ },
13
+ results: {},
14
+ connectionType: {
15
+ systemNetworkType: 'unknown',
16
+ systemIpAddress: '0.0.0.0',
17
+ local: {
18
+ candidateType: [],
19
+ transport: [],
20
+ ipAddress: [],
21
+ networkType: [],
22
+ },
23
+ remote: {
24
+ candidateType: [],
25
+ transport: [],
26
+ ipAddress: [],
27
+ networkType: [],
28
+ },
29
+ },
30
+ resolutions: {},
31
+ internal: {
32
+ remote: {},
33
+ candidates: {},
34
+ },
35
+ };
36
+
37
+ export default STATS_DEFAULT;