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

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 (576) hide show
  1. package/README.md +45 -7
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +49 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +342 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +216 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +45 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +1048 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +10 -24
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +11 -24
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +12 -25
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +10 -24
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +10 -24
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +9 -23
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +10 -24
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +10 -24
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +9 -43
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +5 -25
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +37 -60
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +28 -23
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +8 -13
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +250 -66
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +319 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +108 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/interpretation/collection.js +23 -0
  87. package/dist/interpretation/collection.js.map +1 -0
  88. package/dist/interpretation/index.js +366 -0
  89. package/dist/interpretation/index.js.map +1 -0
  90. package/dist/interpretation/siLanguage.js +25 -0
  91. package/dist/interpretation/siLanguage.js.map +1 -0
  92. package/dist/locus-info/controlsUtils.js +101 -29
  93. package/dist/locus-info/controlsUtils.js.map +1 -1
  94. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  95. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  96. package/dist/locus-info/fullState.js +0 -15
  97. package/dist/locus-info/fullState.js.map +1 -1
  98. package/dist/locus-info/hostUtils.js +4 -12
  99. package/dist/locus-info/hostUtils.js.map +1 -1
  100. package/dist/locus-info/index.js +532 -240
  101. package/dist/locus-info/index.js.map +1 -1
  102. package/dist/locus-info/infoUtils.js +3 -37
  103. package/dist/locus-info/infoUtils.js.map +1 -1
  104. package/dist/locus-info/mediaSharesUtils.js +54 -38
  105. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  106. package/dist/locus-info/parser.js +284 -154
  107. package/dist/locus-info/parser.js.map +1 -1
  108. package/dist/locus-info/selfUtils.js +110 -92
  109. package/dist/locus-info/selfUtils.js.map +1 -1
  110. package/dist/media/index.js +95 -226
  111. package/dist/media/index.js.map +1 -1
  112. package/dist/media/properties.js +99 -194
  113. package/dist/media/properties.js.map +1 -1
  114. package/dist/media/util.js +2 -9
  115. package/dist/media/util.js.map +1 -1
  116. package/dist/mediaQualityMetrics/config.js +505 -495
  117. package/dist/mediaQualityMetrics/config.js.map +1 -1
  118. package/dist/meeting/in-meeting-actions.js +83 -14
  119. package/dist/meeting/in-meeting-actions.js.map +1 -1
  120. package/dist/meeting/index.js +3478 -3563
  121. package/dist/meeting/index.js.map +1 -1
  122. package/dist/meeting/locusMediaRequest.js +291 -0
  123. package/dist/meeting/locusMediaRequest.js.map +1 -0
  124. package/dist/meeting/muteState.js +247 -183
  125. package/dist/meeting/muteState.js.map +1 -1
  126. package/dist/meeting/request.js +344 -344
  127. package/dist/meeting/request.js.map +1 -1
  128. package/dist/meeting/request.type.js +7 -0
  129. package/dist/meeting/request.type.js.map +1 -0
  130. package/dist/meeting/state.js +21 -31
  131. package/dist/meeting/state.js.map +1 -1
  132. package/dist/meeting/util.js +529 -588
  133. package/dist/meeting/util.js.map +1 -1
  134. package/dist/meeting-info/collection.js +6 -25
  135. package/dist/meeting-info/collection.js.map +1 -1
  136. package/dist/meeting-info/index.js +62 -39
  137. package/dist/meeting-info/index.js.map +1 -1
  138. package/dist/meeting-info/meeting-info-v2.js +328 -283
  139. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  140. package/dist/meeting-info/request.js +3 -15
  141. package/dist/meeting-info/request.js.map +1 -1
  142. package/dist/meeting-info/util.js +98 -183
  143. package/dist/meeting-info/util.js.map +1 -1
  144. package/dist/meeting-info/utilv2.js +156 -232
  145. package/dist/meeting-info/utilv2.js.map +1 -1
  146. package/dist/meetings/collection.js +26 -19
  147. package/dist/meetings/collection.js.map +1 -1
  148. package/dist/meetings/index.js +795 -574
  149. package/dist/meetings/index.js.map +1 -1
  150. package/dist/meetings/meetings.types.js +7 -0
  151. package/dist/meetings/meetings.types.js.map +1 -0
  152. package/dist/meetings/request.js +26 -41
  153. package/dist/meetings/request.js.map +1 -1
  154. package/dist/meetings/util.js +186 -155
  155. package/dist/meetings/util.js.map +1 -1
  156. package/dist/member/index.js +126 -85
  157. package/dist/member/index.js.map +1 -1
  158. package/dist/member/types.js +25 -0
  159. package/dist/member/types.js.map +1 -0
  160. package/dist/member/util.js +147 -88
  161. package/dist/member/util.js.map +1 -1
  162. package/dist/members/collection.js +13 -12
  163. package/dist/members/collection.js.map +1 -1
  164. package/dist/members/index.js +178 -204
  165. package/dist/members/index.js.map +1 -1
  166. package/dist/members/request.js +113 -68
  167. package/dist/members/request.js.map +1 -1
  168. package/dist/members/types.js +15 -0
  169. package/dist/members/types.js.map +1 -0
  170. package/dist/members/util.js +314 -260
  171. package/dist/members/util.js.map +1 -1
  172. package/dist/metrics/constants.js +4 -7
  173. package/dist/metrics/constants.js.map +1 -1
  174. package/dist/metrics/index.js +11 -558
  175. package/dist/metrics/index.js.map +1 -1
  176. package/dist/multistream/mediaRequestManager.js +264 -50
  177. package/dist/multistream/mediaRequestManager.js.map +1 -1
  178. package/dist/multistream/receiveSlot.js +58 -65
  179. package/dist/multistream/receiveSlot.js.map +1 -1
  180. package/dist/multistream/receiveSlotManager.js +76 -95
  181. package/dist/multistream/receiveSlotManager.js.map +1 -1
  182. package/dist/multistream/remoteMedia.js +62 -76
  183. package/dist/multistream/remoteMedia.js.map +1 -1
  184. package/dist/multistream/remoteMediaGroup.js +66 -43
  185. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  186. package/dist/multistream/remoteMediaManager.js +502 -442
  187. package/dist/multistream/remoteMediaManager.js.map +1 -1
  188. package/dist/networkQualityMonitor/index.js +40 -59
  189. package/dist/networkQualityMonitor/index.js.map +1 -1
  190. package/dist/personal-meeting-room/index.js +21 -45
  191. package/dist/personal-meeting-room/index.js.map +1 -1
  192. package/dist/personal-meeting-room/request.js +1 -31
  193. package/dist/personal-meeting-room/request.js.map +1 -1
  194. package/dist/personal-meeting-room/util.js +0 -13
  195. package/dist/personal-meeting-room/util.js.map +1 -1
  196. package/dist/reachability/index.js +192 -191
  197. package/dist/reachability/index.js.map +1 -1
  198. package/dist/reachability/request.js +15 -23
  199. package/dist/reachability/request.js.map +1 -1
  200. package/dist/reactions/constants.js +13 -0
  201. package/dist/reactions/constants.js.map +1 -0
  202. package/dist/reactions/reactions.js +109 -0
  203. package/dist/reactions/reactions.js.map +1 -0
  204. package/dist/reactions/reactions.type.js +36 -0
  205. package/dist/reactions/reactions.type.js.map +1 -0
  206. package/dist/reconnection-manager/index.js +384 -476
  207. package/dist/reconnection-manager/index.js.map +1 -1
  208. package/dist/recording-controller/enums.js +17 -0
  209. package/dist/recording-controller/enums.js.map +1 -0
  210. package/dist/recording-controller/index.js +363 -0
  211. package/dist/recording-controller/index.js.map +1 -0
  212. package/dist/recording-controller/util.js +64 -0
  213. package/dist/recording-controller/util.js.map +1 -0
  214. package/dist/roap/index.js +58 -91
  215. package/dist/roap/index.js.map +1 -1
  216. package/dist/roap/request.js +137 -135
  217. package/dist/roap/request.js.map +1 -1
  218. package/dist/roap/turnDiscovery.js +148 -100
  219. package/dist/roap/turnDiscovery.js.map +1 -1
  220. package/dist/rtcMetrics/constants.js +12 -0
  221. package/dist/rtcMetrics/constants.js.map +1 -0
  222. package/dist/rtcMetrics/index.js +115 -0
  223. package/dist/rtcMetrics/index.js.map +1 -0
  224. package/dist/statsAnalyzer/global.js +1 -95
  225. package/dist/statsAnalyzer/global.js.map +1 -1
  226. package/dist/statsAnalyzer/index.js +385 -460
  227. package/dist/statsAnalyzer/index.js.map +1 -1
  228. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  229. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  230. package/dist/transcription/index.js +22 -47
  231. package/dist/transcription/index.js.map +1 -1
  232. package/dist/types/annotation/annotation.types.d.ts +42 -0
  233. package/dist/types/annotation/constants.d.ts +31 -0
  234. package/dist/types/annotation/index.d.ts +117 -0
  235. package/dist/types/breakouts/breakout.d.ts +8 -0
  236. package/dist/types/breakouts/collection.d.ts +5 -0
  237. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  238. package/dist/types/breakouts/events.d.ts +8 -0
  239. package/dist/types/breakouts/index.d.ts +5 -0
  240. package/dist/types/breakouts/request.d.ts +22 -0
  241. package/dist/types/breakouts/utils.d.ts +15 -0
  242. package/dist/types/common/browser-detection.d.ts +9 -0
  243. package/dist/types/common/collection.d.ts +48 -0
  244. package/dist/types/common/config.d.ts +2 -0
  245. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  246. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  247. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  248. package/dist/types/common/errors/media.d.ts +15 -0
  249. package/dist/types/common/errors/parameter.d.ts +15 -0
  250. package/dist/types/common/errors/password-error.d.ts +15 -0
  251. package/dist/types/common/errors/permission.d.ts +14 -0
  252. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  253. package/dist/types/common/errors/reconnection.d.ts +15 -0
  254. package/dist/types/common/errors/stats.d.ts +15 -0
  255. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  256. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  257. package/dist/types/common/events/events-scope.d.ts +17 -0
  258. package/dist/types/common/events/events.d.ts +12 -0
  259. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  260. package/dist/types/common/events/util.d.ts +2 -0
  261. package/dist/types/common/logs/logger-config.d.ts +2 -0
  262. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  263. package/dist/types/common/logs/request.d.ts +34 -0
  264. package/dist/types/common/queue.d.ts +34 -0
  265. package/dist/types/config.d.ts +72 -0
  266. package/dist/types/constants.d.ts +1016 -0
  267. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  268. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  269. package/dist/types/controls-options-manager/index.d.ts +136 -0
  270. package/dist/types/controls-options-manager/types.d.ts +43 -0
  271. package/dist/types/controls-options-manager/util.d.ts +1 -0
  272. package/dist/types/index.d.ts +7 -0
  273. package/dist/types/interpretation/collection.d.ts +5 -0
  274. package/dist/types/interpretation/index.d.ts +5 -0
  275. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  276. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  277. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  278. package/dist/types/locus-info/fullState.d.ts +2 -0
  279. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  280. package/dist/types/locus-info/index.d.ts +322 -0
  281. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  282. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  283. package/dist/types/locus-info/parser.d.ts +271 -0
  284. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  285. package/dist/types/media/index.d.ts +34 -0
  286. package/dist/types/media/properties.d.ts +93 -0
  287. package/dist/types/media/util.d.ts +2 -0
  288. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  289. package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
  290. package/dist/types/meeting/index.d.ts +1471 -0
  291. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  292. package/dist/types/meeting/muteState.d.ts +184 -0
  293. package/dist/types/meeting/request.d.ts +257 -0
  294. package/dist/types/meeting/request.type.d.ts +11 -0
  295. package/dist/types/meeting/state.d.ts +9 -0
  296. package/dist/types/meeting/util.d.ts +78 -0
  297. package/dist/types/meeting-info/collection.d.ts +20 -0
  298. package/dist/types/meeting-info/index.d.ts +62 -0
  299. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  300. package/dist/types/meeting-info/request.d.ts +22 -0
  301. package/dist/types/meeting-info/util.d.ts +2 -0
  302. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  303. package/dist/types/meetings/collection.d.ts +31 -0
  304. package/dist/types/meetings/index.d.ts +367 -0
  305. package/dist/types/meetings/meetings.types.d.ts +4 -0
  306. package/dist/types/meetings/request.d.ts +27 -0
  307. package/dist/types/meetings/util.d.ts +18 -0
  308. package/dist/types/member/index.d.ts +159 -0
  309. package/dist/types/member/types.d.ts +32 -0
  310. package/dist/types/member/util.d.ts +2 -0
  311. package/dist/types/members/collection.d.ts +29 -0
  312. package/dist/types/members/index.d.ts +353 -0
  313. package/dist/types/members/request.d.ts +114 -0
  314. package/dist/types/members/types.d.ts +24 -0
  315. package/dist/types/members/util.d.ts +210 -0
  316. package/dist/types/metrics/constants.d.ts +55 -0
  317. package/dist/types/metrics/index.d.ts +45 -0
  318. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  319. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  320. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  321. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  322. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  323. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  324. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  325. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  326. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  327. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  328. package/dist/types/reachability/index.d.ts +152 -0
  329. package/dist/types/reachability/request.d.ts +37 -0
  330. package/dist/types/reactions/constants.d.ts +3 -0
  331. package/dist/types/reactions/reactions.d.ts +4 -0
  332. package/dist/types/reactions/reactions.type.d.ts +52 -0
  333. package/dist/types/reconnection-manager/index.d.ts +126 -0
  334. package/dist/types/recording-controller/enums.d.ts +7 -0
  335. package/dist/types/recording-controller/index.d.ts +208 -0
  336. package/dist/types/recording-controller/util.d.ts +14 -0
  337. package/dist/types/roap/index.d.ts +77 -0
  338. package/dist/types/roap/request.d.ts +36 -0
  339. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  340. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  341. package/dist/types/rtcMetrics/index.d.ts +46 -0
  342. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  343. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  344. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  345. package/dist/types/transcription/index.d.ts +64 -0
  346. package/internal-README.md +7 -6
  347. package/package.json +29 -21
  348. package/src/annotation/annotation.types.ts +50 -0
  349. package/src/annotation/constants.ts +36 -0
  350. package/src/annotation/index.ts +328 -0
  351. package/src/breakouts/README.md +220 -0
  352. package/src/breakouts/breakout.ts +188 -0
  353. package/src/breakouts/collection.ts +19 -0
  354. package/src/breakouts/edit-lock-error.ts +25 -0
  355. package/src/breakouts/events.ts +56 -0
  356. package/src/breakouts/index.ts +925 -0
  357. package/src/breakouts/request.ts +55 -0
  358. package/src/breakouts/utils.ts +57 -0
  359. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  360. package/src/common/collection.ts +9 -7
  361. package/src/common/{config.js → config.ts} +1 -1
  362. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  363. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  364. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  365. package/src/common/errors/{media.js → media.ts} +11 -7
  366. package/src/common/errors/parameter.ts +11 -7
  367. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  368. package/src/common/errors/{permission.js → permission.ts} +10 -6
  369. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  370. package/src/common/errors/{stats.js → stats.ts} +11 -7
  371. package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
  372. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  373. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  374. package/src/common/events/{events.js → events.ts} +5 -1
  375. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  376. package/src/common/events/{util.js → util.ts} +2 -3
  377. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  378. package/src/common/logs/logger-proxy.ts +44 -0
  379. package/src/common/logs/{request.js → request.ts} +22 -9
  380. package/src/common/queue.ts +22 -9
  381. package/src/{config.js → config.ts} +17 -17
  382. package/src/constants.ts +197 -22
  383. package/src/controls-options-manager/constants.ts +5 -0
  384. package/src/controls-options-manager/enums.ts +18 -0
  385. package/src/controls-options-manager/index.ts +278 -0
  386. package/src/controls-options-manager/types.ts +59 -0
  387. package/src/controls-options-manager/util.ts +300 -0
  388. package/src/index.ts +39 -0
  389. package/src/interpretation/README.md +60 -0
  390. package/src/interpretation/collection.ts +19 -0
  391. package/src/interpretation/index.ts +332 -0
  392. package/src/interpretation/siLanguage.ts +18 -0
  393. package/src/locus-info/controlsUtils.ts +222 -0
  394. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  395. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  396. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  397. package/src/locus-info/{index.js → index.ts} +518 -111
  398. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  399. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
  400. package/src/locus-info/{parser.js → parser.ts} +271 -98
  401. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  402. package/src/media/index.ts +456 -0
  403. package/src/media/{properties.js → properties.ts} +80 -102
  404. package/src/media/{util.js → util.ts} +2 -2
  405. package/src/mediaQualityMetrics/config.ts +384 -0
  406. package/src/meeting/in-meeting-actions.ts +171 -3
  407. package/src/meeting/index.ts +7070 -0
  408. package/src/meeting/locusMediaRequest.ts +309 -0
  409. package/src/meeting/muteState.ts +450 -0
  410. package/src/meeting/{request.js → request.ts} +354 -214
  411. package/src/meeting/request.type.ts +13 -0
  412. package/src/meeting/{state.js → state.ts} +50 -35
  413. package/src/meeting/util.ts +615 -0
  414. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  415. package/src/meeting-info/index.ts +183 -0
  416. package/src/meeting-info/meeting-info-v2.ts +407 -0
  417. package/src/meeting-info/{request.js → request.ts} +14 -4
  418. package/src/meeting-info/{util.js → util.ts} +60 -51
  419. package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
  420. package/src/meetings/{collection.js → collection.ts} +26 -3
  421. package/src/meetings/index.ts +1467 -0
  422. package/src/meetings/meetings.types.ts +12 -0
  423. package/src/meetings/{request.js → request.ts} +34 -25
  424. package/src/meetings/{util.js → util.ts} +137 -36
  425. package/src/member/{index.js → index.ts} +151 -56
  426. package/src/member/types.ts +38 -0
  427. package/src/member/util.ts +383 -0
  428. package/src/members/{collection.js → collection.ts} +10 -2
  429. package/src/members/{index.js → index.ts} +323 -145
  430. package/src/members/request.ts +255 -0
  431. package/src/members/types.ts +28 -0
  432. package/src/members/util.ts +339 -0
  433. package/src/metrics/{constants.js → constants.ts} +2 -6
  434. package/src/metrics/index.ts +73 -0
  435. package/src/multistream/mediaRequestManager.ts +337 -61
  436. package/src/multistream/receiveSlot.ts +69 -26
  437. package/src/multistream/receiveSlotManager.ts +66 -42
  438. package/src/multistream/remoteMedia.ts +40 -5
  439. package/src/multistream/remoteMediaGroup.ts +63 -3
  440. package/src/multistream/remoteMediaManager.ts +263 -66
  441. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  442. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  443. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  444. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  445. package/src/reachability/{index.js → index.ts} +157 -94
  446. package/src/reachability/request.ts +46 -35
  447. package/src/reactions/constants.ts +4 -0
  448. package/src/reactions/reactions.ts +104 -0
  449. package/src/reactions/reactions.type.ts +62 -0
  450. package/src/reconnection-manager/{index.js → index.ts} +254 -136
  451. package/src/recording-controller/enums.ts +8 -0
  452. package/src/recording-controller/index.ts +333 -0
  453. package/src/recording-controller/util.ts +75 -0
  454. package/src/roap/{index.js → index.ts} +86 -78
  455. package/src/roap/request.ts +163 -0
  456. package/src/roap/turnDiscovery.ts +111 -49
  457. package/src/rtcMetrics/constants.ts +3 -0
  458. package/src/rtcMetrics/index.ts +96 -0
  459. package/src/statsAnalyzer/global.ts +37 -0
  460. package/src/statsAnalyzer/index.ts +1272 -0
  461. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  462. package/src/transcription/{index.js → index.ts} +46 -39
  463. package/test/integration/spec/converged-space-meetings.js +233 -0
  464. package/test/integration/spec/journey.js +804 -526
  465. package/test/integration/spec/space-meeting.js +391 -204
  466. package/test/integration/spec/transcription.js +7 -8
  467. package/test/unit/spec/annotation/index.ts +418 -0
  468. package/test/unit/spec/breakouts/breakout.ts +237 -0
  469. package/test/unit/spec/breakouts/collection.ts +15 -0
  470. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  471. package/test/unit/spec/breakouts/events.ts +89 -0
  472. package/test/unit/spec/breakouts/index.ts +1790 -0
  473. package/test/unit/spec/breakouts/request.ts +104 -0
  474. package/test/unit/spec/breakouts/utils.js +72 -0
  475. package/test/unit/spec/common/browser-detection.js +9 -28
  476. package/test/unit/spec/common/queue.js +31 -2
  477. package/test/unit/spec/controls-options-manager/index.js +287 -0
  478. package/test/unit/spec/controls-options-manager/util.js +582 -0
  479. package/test/unit/spec/fixture/locus.js +93 -90
  480. package/test/unit/spec/interpretation/collection.ts +15 -0
  481. package/test/unit/spec/interpretation/index.ts +589 -0
  482. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  483. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  484. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  485. package/test/unit/spec/locus-info/index.js +1176 -18
  486. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  487. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  488. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  489. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  490. package/test/unit/spec/locus-info/parser.js +65 -31
  491. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  492. package/test/unit/spec/locus-info/selfUtils.js +296 -12
  493. package/test/unit/spec/media/index.ts +162 -68
  494. package/test/unit/spec/media/properties.ts +9 -9
  495. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
  496. package/test/unit/spec/meeting/index.js +4569 -1773
  497. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  498. package/test/unit/spec/meeting/muteState.js +382 -211
  499. package/test/unit/spec/meeting/request.js +444 -78
  500. package/test/unit/spec/meeting/utils.js +517 -192
  501. package/test/unit/spec/meeting-info/index.js +181 -0
  502. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  503. package/test/unit/spec/meeting-info/request.js +7 -9
  504. package/test/unit/spec/meeting-info/util.js +11 -12
  505. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  506. package/test/unit/spec/meetings/collection.js +15 -1
  507. package/test/unit/spec/meetings/index.js +1254 -330
  508. package/test/unit/spec/meetings/utils.js +220 -14
  509. package/test/unit/spec/member/index.js +58 -5
  510. package/test/unit/spec/member/util.js +494 -26
  511. package/test/unit/spec/members/index.js +423 -55
  512. package/test/unit/spec/members/request.js +228 -40
  513. package/test/unit/spec/members/utils.js +191 -4
  514. package/test/unit/spec/metrics/index.js +12 -66
  515. package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
  516. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  517. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  518. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  519. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  520. package/test/unit/spec/multistream/remoteMediaManager.ts +730 -65
  521. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  522. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  523. package/test/unit/spec/reachability/index.ts +176 -27
  524. package/test/unit/spec/reachability/request.js +66 -0
  525. package/test/unit/spec/reconnection-manager/index.js +155 -9
  526. package/test/unit/spec/recording-controller/index.js +307 -0
  527. package/test/unit/spec/recording-controller/util.js +229 -0
  528. package/test/unit/spec/roap/index.ts +28 -52
  529. package/test/unit/spec/roap/request.ts +225 -0
  530. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  531. package/test/unit/spec/rtcMetrics/index.ts +60 -0
  532. package/test/unit/spec/stats-analyzer/index.js +116 -60
  533. package/test/utils/cmr.js +44 -42
  534. package/test/utils/constants.js +9 -0
  535. package/test/utils/integrationTestUtils.js +46 -0
  536. package/test/utils/testUtils.js +63 -99
  537. package/test/utils/webex-config.js +22 -18
  538. package/test/utils/webex-test-users.js +57 -50
  539. package/tsconfig.json +6 -0
  540. package/dist/media/internal-media-core-wrapper.js +0 -22
  541. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  542. package/dist/meeting/effectsState.js +0 -327
  543. package/dist/meeting/effectsState.js.map +0 -1
  544. package/dist/metrics/config.js +0 -301
  545. package/dist/metrics/config.js.map +0 -1
  546. package/dist/multistream/multistreamMedia.js +0 -116
  547. package/dist/multistream/multistreamMedia.js.map +0 -1
  548. package/dist/peer-connection-manager/util.js +0 -124
  549. package/dist/peer-connection-manager/util.js.map +0 -1
  550. package/src/common/logs/logger-proxy.js +0 -33
  551. package/src/index.js +0 -15
  552. package/src/locus-info/controlsUtils.js +0 -102
  553. package/src/media/index.js +0 -459
  554. package/src/media/internal-media-core-wrapper.ts +0 -9
  555. package/src/mediaQualityMetrics/config.js +0 -382
  556. package/src/meeting/effectsState.js +0 -205
  557. package/src/meeting/index.js +0 -6284
  558. package/src/meeting/muteState.js +0 -318
  559. package/src/meeting/util.js +0 -506
  560. package/src/meeting-info/index.js +0 -131
  561. package/src/meeting-info/meeting-info-v2.js +0 -255
  562. package/src/meetings/index.js +0 -1015
  563. package/src/member/util.js +0 -254
  564. package/src/members/request.js +0 -131
  565. package/src/members/util.js +0 -258
  566. package/src/metrics/config.js +0 -324
  567. package/src/metrics/index.js +0 -530
  568. package/src/multistream/multistreamMedia.ts +0 -92
  569. package/src/peer-connection-manager/util.ts +0 -117
  570. package/src/roap/request.js +0 -127
  571. package/src/statsAnalyzer/global.js +0 -133
  572. package/src/statsAnalyzer/index.js +0 -1006
  573. package/src/statsAnalyzer/mqaUtil.js +0 -173
  574. package/test/unit/spec/meeting/effectsState.js +0 -291
  575. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  576. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,163 @@
1
+ // @ts-ignore
2
+ import {StatelessWebexPlugin} from '@webex/webex-core';
3
+
4
+ import LoggerProxy from '../common/logs/logger-proxy';
5
+ import {REACHABILITY} from '../constants';
6
+ import {LocusMediaRequest} from '../meeting/locusMediaRequest';
7
+
8
+ /**
9
+ * @class RoapRequest
10
+ */
11
+ export default class RoapRequest extends StatelessWebexPlugin {
12
+ /**
13
+ * Returns reachability data.
14
+ * @param {Object} localSdp
15
+ * @returns {Object}
16
+ */
17
+ async attachReachabilityData(localSdp) {
18
+ let joinCookie;
19
+
20
+ // @ts-ignore
21
+ const reachabilityData = await this.webex.boundedStorage
22
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)
23
+ .catch(() => {});
24
+
25
+ if (reachabilityData) {
26
+ try {
27
+ const reachabilityResult = JSON.parse(reachabilityData);
28
+
29
+ /* istanbul ignore else */
30
+ if (reachabilityResult && Object.keys(reachabilityResult).length) {
31
+ localSdp.reachability = reachabilityResult;
32
+ }
33
+ } catch (e) {
34
+ LoggerProxy.logger.error(
35
+ `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
36
+ );
37
+ }
38
+ }
39
+
40
+ // @ts-ignore
41
+ const joinCookieRaw = await this.webex.boundedStorage
42
+ .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)
43
+ .catch(() => {});
44
+
45
+ if (joinCookieRaw) {
46
+ try {
47
+ joinCookie = JSON.parse(joinCookieRaw);
48
+ } catch (e) {
49
+ LoggerProxy.logger.error(
50
+ `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`
51
+ );
52
+ }
53
+ }
54
+
55
+ return {localSdp, joinCookie};
56
+ }
57
+
58
+ /**
59
+ * Sends a ROAP message
60
+ * @param {Object} options
61
+ * @param {Object} options.roapMessage
62
+ * @param {String} options.locusSelfUrl
63
+ * @param {String} options.mediaId
64
+ * @param {String} options.correlationId
65
+ * @param {String} options.meetingId
66
+ * @returns {Promise} returns the response/failure of the request
67
+ */
68
+ async sendRoap(options: {
69
+ roapMessage: any;
70
+ locusSelfUrl: string;
71
+ mediaId: string;
72
+ meetingId: string;
73
+ locusMediaRequest?: LocusMediaRequest;
74
+ }) {
75
+ const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest} = options;
76
+
77
+ if (!mediaId) {
78
+ LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');
79
+ }
80
+
81
+ if (!locusMediaRequest) {
82
+ LoggerProxy.logger.warn(
83
+ 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'
84
+ );
85
+
86
+ return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));
87
+ }
88
+ const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({
89
+ roapMessage,
90
+ });
91
+
92
+ LoggerProxy.logger.info(
93
+ `Roap:request#sendRoap --> ${locusSelfUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
94
+ );
95
+
96
+ // @ts-ignore
97
+ this.webex.internal.newMetrics.submitClientEvent({
98
+ name: 'client.locus.media.request',
99
+ options: {
100
+ meetingId,
101
+ },
102
+ });
103
+
104
+ return locusMediaRequest
105
+ .send({
106
+ type: 'RoapMessage',
107
+ selfUrl: locusSelfUrl,
108
+ joinCookie,
109
+ mediaId,
110
+ roapMessage,
111
+ reachability: localSdpWithReachabilityData.reachability,
112
+ })
113
+ .then((res) => {
114
+ // @ts-ignore
115
+ this.webex.internal.newMetrics.submitClientEvent({
116
+ name: 'client.locus.media.response',
117
+ options: {
118
+ meetingId,
119
+ },
120
+ });
121
+ // always it will be the first mediaConnection Object
122
+ const mediaConnections =
123
+ res.body.mediaConnections &&
124
+ res.body.mediaConnections.length > 0 &&
125
+ res.body.mediaConnections[0];
126
+
127
+ LoggerProxy.logger.debug(
128
+ `Roap:request#sendRoap --> response:${JSON.stringify(
129
+ mediaConnections,
130
+ null,
131
+ 2
132
+ )}'\n StatusCode:'${res.statusCode}`
133
+ );
134
+ const {locus} = res.body;
135
+
136
+ locus.roapSeq = options.roapMessage.seq;
137
+
138
+ return {
139
+ locus,
140
+ ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),
141
+ };
142
+ })
143
+ .catch((err) => {
144
+ // @ts-ignore
145
+ this.webex.internal.newMetrics.submitClientEvent({
146
+ name: 'client.locus.media.response',
147
+ options: {
148
+ meetingId,
149
+ rawError: err,
150
+ },
151
+ });
152
+ LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
153
+ LoggerProxy.logger.error(
154
+ `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
155
+ roapMessage,
156
+ null,
157
+ 2
158
+ )} + '\\n mediaId:'${options.mediaId}`
159
+ );
160
+ throw err;
161
+ });
162
+ }
163
+ }
@@ -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,6 +7,7 @@ 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
 
@@ -46,7 +48,6 @@ export default class TurnDiscovery {
46
48
  };
47
49
  }
48
50
 
49
-
50
51
  /**
51
52
  * waits for TURN_DISCOVERY_RESPONSE message to arrive
52
53
  *
@@ -54,22 +55,30 @@ export default class TurnDiscovery {
54
55
  * @private
55
56
  * @memberof Roap
56
57
  */
57
- waitForTurnDiscoveryResponse() {
58
+ private waitForTurnDiscoveryResponse() {
58
59
  if (!this.defer) {
59
- 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
+ );
60
63
 
61
- return Promise.reject(new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()'));
64
+ return Promise.reject(
65
+ new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')
66
+ );
62
67
  }
63
68
 
64
69
  const {defer} = this;
65
70
 
66
71
  this.responseTimer = setTimeout(() => {
67
- 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
+ );
68
75
 
69
76
  defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));
70
77
  }, TURN_DISCOVERY_TIMEOUT * 1000);
71
78
 
72
- 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
+ );
73
82
 
74
83
  return defer.promise;
75
84
  }
@@ -82,11 +91,14 @@ export default class TurnDiscovery {
82
91
  * @public
83
92
  * @memberof Roap
84
93
  */
85
- handleTurnDiscoveryResponse(roapMessage) {
94
+ public handleTurnDiscoveryResponse(roapMessage: object) {
95
+ // @ts-ignore - Fix missing type
86
96
  const {headers} = roapMessage;
87
97
 
88
98
  if (!this.defer) {
89
- LoggerProxy.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');
99
+ LoggerProxy.logger.warn(
100
+ 'Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response'
101
+ );
90
102
 
91
103
  return;
92
104
  }
@@ -103,7 +115,9 @@ export default class TurnDiscovery {
103
115
  // check if it matches any of our expected headers
104
116
  expectedHeaders.forEach((expectedHeader) => {
105
117
  if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {
106
- this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);
118
+ this.turnInfo[expectedHeader.field] = receivedHeader.substring(
119
+ expectedHeader.headerName.length + 1
120
+ );
107
121
  foundHeaders += 1;
108
122
  }
109
123
  });
@@ -113,11 +127,18 @@ export default class TurnDiscovery {
113
127
  this.responseTimer = undefined;
114
128
 
115
129
  if (foundHeaders !== expectedHeaders.length) {
116
- LoggerProxy.logger.warn(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(headers)}`);
117
- this.defer.reject(new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`));
118
- }
119
- else {
120
- 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
+ );
121
142
  this.defer.resolve();
122
143
  }
123
144
  }
@@ -131,9 +152,11 @@ export default class TurnDiscovery {
131
152
  * @private
132
153
  * @memberof Roap
133
154
  */
134
- sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
155
+ sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
135
156
  if (this.defer) {
136
- LoggerProxy.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
157
+ LoggerProxy.logger.warn(
158
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'
159
+ );
137
160
 
138
161
  return Promise.resolve();
139
162
  }
@@ -146,17 +169,19 @@ export default class TurnDiscovery {
146
169
  seq: TURN_DISCOVERY_SEQ,
147
170
  };
148
171
 
149
- LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
172
+ LoggerProxy.logger.info(
173
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'
174
+ );
150
175
 
151
176
  return this.roapRequest
152
177
  .sendRoap({
153
178
  roapMessage,
154
- correlationId: meeting.correlationId,
179
+ // @ts-ignore - Fix missing type
155
180
  locusSelfUrl: meeting.selfUrl,
181
+ // @ts-ignore - Fix missing type
156
182
  mediaId: isReconnecting ? '' : meeting.mediaId,
157
- audioMuted: meeting.isAudioMuted(),
158
- videoMuted: meeting.isVideoMuted(),
159
- meetingId: meeting.id
183
+ meetingId: meeting.id,
184
+ locusMediaRequest: meeting.locusMediaRequest,
160
185
  })
161
186
  .then(({mediaConnections}) => {
162
187
  if (mediaConnections) {
@@ -172,7 +197,7 @@ export default class TurnDiscovery {
172
197
  * @param {Meeting} meeting
173
198
  * @returns {Promise}
174
199
  */
175
- sendRoapOK(meeting) {
200
+ sendRoapOK(meeting: Meeting) {
176
201
  LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');
177
202
 
178
203
  return this.roapRequest.sendRoap({
@@ -181,15 +206,57 @@ export default class TurnDiscovery {
181
206
  version: ROAP.ROAP_VERSION,
182
207
  seq: TURN_DISCOVERY_SEQ,
183
208
  },
209
+ // @ts-ignore - fix type
184
210
  locusSelfUrl: meeting.selfUrl,
211
+ // @ts-ignore - fix type
185
212
  mediaId: meeting.mediaId,
186
- correlationId: meeting.correlationId,
187
- audioMuted: meeting.isAudioMuted(),
188
- videoMuted: meeting.isVideoMuted(),
189
- meetingId: meeting.id
213
+ meetingId: meeting.id,
214
+ locusMediaRequest: meeting.locusMediaRequest,
190
215
  });
191
216
  }
192
217
 
218
+ /**
219
+ * Gets the reason why reachability is skipped.
220
+ *
221
+ * @param {Meeting} meeting
222
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
223
+ */
224
+ private async getSkipReason(meeting: Meeting): Promise<string> {
225
+ // @ts-ignore - fix type
226
+ const isAnyClusterReachable = await meeting.webex.meetings.reachability.isAnyClusterReachable();
227
+
228
+ if (isAnyClusterReachable) {
229
+ LoggerProxy.logger.info(
230
+ 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'
231
+ );
232
+
233
+ return 'reachability';
234
+ }
235
+
236
+ // @ts-ignore - fix type
237
+ if (!meeting.config.experimental.enableTurnDiscovery) {
238
+ LoggerProxy.logger.info(
239
+ 'Roap:turnDiscovery#getSkipReason --> TURN discovery disabled in config, skipping it'
240
+ );
241
+
242
+ return 'config';
243
+ }
244
+
245
+ return '';
246
+ }
247
+
248
+ /**
249
+ * Checks if TURN discovery is skipped.
250
+ *
251
+ * @param {Meeting} meeting
252
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
253
+ */
254
+ async isSkipped(meeting) {
255
+ const skipReason = await this.getSkipReason(meeting);
256
+
257
+ return !!skipReason;
258
+ }
259
+
193
260
  /**
194
261
  * Retrieves TURN server information from the backend by doing
195
262
  * a roap message exchange:
@@ -207,18 +274,14 @@ export default class TurnDiscovery {
207
274
  * media connection just after a reconnection
208
275
  * @returns {Promise}
209
276
  */
210
- doTurnDiscovery(meeting, isReconnecting) {
211
- const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
212
-
213
- if (isAnyClusterReachable) {
214
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery');
215
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'reachability'});
216
- }
217
-
218
- if (!meeting.config.experimental.enableTurnDiscovery) {
219
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');
220
-
221
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});
277
+ async doTurnDiscovery(meeting: Meeting, isReconnecting?: boolean) {
278
+ const turnDiscoverySkippedReason = await this.getSkipReason(meeting);
279
+
280
+ if (turnDiscoverySkippedReason) {
281
+ return {
282
+ turnServerInfo: undefined,
283
+ turnDiscoverySkippedReason,
284
+ };
222
285
  }
223
286
 
224
287
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting)
@@ -233,19 +296,18 @@ export default class TurnDiscovery {
233
296
  })
234
297
  .catch((e) => {
235
298
  // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
236
- LoggerProxy.logger.info(`Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`);
237
-
238
- Metrics.sendBehavioralMetric(
239
- BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,
240
- {
241
- correlation_id: meeting.correlationId,
242
- locus_id: meeting.locusUrl.split('/').pop(),
243
- reason: e.message,
244
- stack: e.stack
245
- }
299
+ LoggerProxy.logger.info(
300
+ `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`
246
301
  );
247
302
 
248
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
303
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {
304
+ correlation_id: meeting.correlationId,
305
+ locus_id: meeting.locusUrl.split('/').pop(),
306
+ reason: e.message,
307
+ stack: e.stack,
308
+ });
309
+
310
+ return {turnServerInfo: undefined, turnDiscoverySkippedReason: undefined};
249
311
  });
250
312
  }
251
313
  }
@@ -0,0 +1,3 @@
1
+ const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};
2
+
3
+ export {RTC_METRICS as default};
@@ -0,0 +1,96 @@
1
+ import uuid from 'uuid';
2
+ import RTC_METRICS from './constants';
3
+
4
+ /**
5
+ * Rtc Metrics
6
+ */
7
+ export default class RtcMetrics {
8
+ /**
9
+ * Array of MetricData items to be sent to the metrics service.
10
+ */
11
+ metricsQueue = [];
12
+
13
+ intervalId: number;
14
+
15
+ webex: any;
16
+
17
+ meetingId: string;
18
+
19
+ correlationId: string;
20
+
21
+ /**
22
+ * Initialize the interval.
23
+ *
24
+ * @param {object} webex - The main `webex` object.
25
+ * @param {string} meetingId - The meeting id.
26
+ */
27
+ constructor(webex, meetingId) {
28
+ // `window` is used to prevent typescript from returning a NodeJS.Timer.
29
+ this.intervalId = window.setInterval(this.checkMetrics.bind(this), 30 * 1000);
30
+ this.meetingId = meetingId;
31
+ this.webex = webex;
32
+ this.correlationId = uuid.v4();
33
+ // Send the first set of metrics at 5 seconds in the case of a user leaving the call shortly after joining.
34
+ setTimeout(this.checkMetrics.bind(this), 5 * 1000);
35
+ }
36
+
37
+ /**
38
+ * Check to see if the metrics queue has any items.
39
+ *
40
+ * @returns {void}
41
+ */
42
+ private checkMetrics() {
43
+ if (this.metricsQueue.length) {
44
+ this.sendMetrics();
45
+ this.metricsQueue = [];
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Add metrics items to the metrics queue.
51
+ *
52
+ * @param {object} data - An object with a payload array of metrics items.
53
+ *
54
+ * @returns {void}
55
+ */
56
+ addMetrics(data) {
57
+ if (data.payload.length) {
58
+ this.metricsQueue.push(data);
59
+ }
60
+ }
61
+
62
+ /**
63
+ * Clear the metrics interval.
64
+ *
65
+ * @returns {void}
66
+ */
67
+ closeMetrics() {
68
+ this.checkMetrics();
69
+ clearInterval(this.intervalId);
70
+ }
71
+
72
+ /**
73
+ * Send metrics to the metrics service.
74
+ *
75
+ * @returns {void}
76
+ */
77
+ private sendMetrics() {
78
+ this.webex.request({
79
+ method: 'POST',
80
+ service: 'unifiedTelemetry',
81
+ resource: 'metric/v2',
82
+ headers: {
83
+ type: 'webrtcMedia',
84
+ appId: RTC_METRICS.APP_ID,
85
+ },
86
+ body: {
87
+ type: 'webrtc',
88
+ version: '1.0.0',
89
+ userId: this.webex.internal.device.userId,
90
+ meetingId: this.meetingId,
91
+ correlationId: this.correlationId,
92
+ metrics: this.metricsQueue,
93
+ },
94
+ });
95
+ }
96
+ }
@@ -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;