@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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 (393) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +242 -33
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +110 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +380 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +386 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +71 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +65 -102
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +135 -330
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4075 -2827
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +484 -119
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +73 -7
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +18 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +223 -32
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +10 -0
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +3 -1
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +76 -5
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +366 -104
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +255 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +263 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +266 -202
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +220 -70
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +357 -295
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +203 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -5
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +567 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +113 -21
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +17 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
  210. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  229. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  230. package/dist/types/webinar/collection.d.ts +16 -0
  231. package/dist/types/webinar/index.d.ts +5 -0
  232. package/dist/webinar/collection.js +44 -0
  233. package/dist/webinar/collection.js.map +1 -0
  234. package/dist/webinar/index.js +69 -0
  235. package/dist/webinar/index.js.map +1 -0
  236. package/package.json +22 -19
  237. package/src/annotation/annotation.types.ts +50 -0
  238. package/src/annotation/constants.ts +36 -0
  239. package/src/annotation/index.ts +328 -0
  240. package/src/breakouts/README.md +35 -11
  241. package/src/breakouts/breakout.ts +67 -9
  242. package/src/breakouts/events.ts +56 -0
  243. package/src/breakouts/index.ts +558 -59
  244. package/src/breakouts/utils.ts +42 -0
  245. package/src/common/errors/no-meeting-info.ts +24 -0
  246. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  247. package/src/common/errors/webex-errors.ts +44 -2
  248. package/src/common/logs/logger-proxy.ts +1 -1
  249. package/src/common/logs/request.ts +5 -1
  250. package/src/common/queue.ts +22 -8
  251. package/src/config.ts +4 -9
  252. package/src/constants.ts +229 -21
  253. package/src/controls-options-manager/enums.ts +12 -0
  254. package/src/controls-options-manager/index.ts +116 -21
  255. package/src/controls-options-manager/types.ts +59 -0
  256. package/src/controls-options-manager/util.ts +294 -14
  257. package/src/index.ts +44 -0
  258. package/src/interceptors/index.ts +3 -0
  259. package/src/interceptors/locusRetry.ts +67 -0
  260. package/src/interpretation/README.md +60 -0
  261. package/src/interpretation/collection.ts +19 -0
  262. package/src/interpretation/index.ts +349 -0
  263. package/src/interpretation/siLanguage.ts +18 -0
  264. package/src/locus-info/controlsUtils.ts +108 -0
  265. package/src/locus-info/index.ts +417 -59
  266. package/src/locus-info/infoUtils.ts +10 -2
  267. package/src/locus-info/mediaSharesUtils.ts +80 -0
  268. package/src/locus-info/parser.ts +258 -47
  269. package/src/locus-info/selfUtils.ts +81 -5
  270. package/src/media/index.ts +100 -108
  271. package/src/media/properties.ts +88 -117
  272. package/src/mediaQualityMetrics/config.ts +103 -238
  273. package/src/meeting/in-meeting-actions.ts +171 -3
  274. package/src/meeting/index.ts +3411 -2435
  275. package/src/meeting/locusMediaRequest.ts +313 -0
  276. package/src/meeting/muteState.ts +223 -136
  277. package/src/meeting/request.ts +155 -120
  278. package/src/meeting/util.ts +685 -395
  279. package/src/meeting-info/index.ts +81 -8
  280. package/src/meeting-info/meeting-info-v2.ts +170 -14
  281. package/src/meeting-info/util.ts +1 -1
  282. package/src/meeting-info/utilv2.ts +23 -23
  283. package/src/meetings/collection.ts +33 -0
  284. package/src/meetings/index.ts +507 -127
  285. package/src/meetings/meetings.types.ts +12 -0
  286. package/src/meetings/request.ts +2 -0
  287. package/src/meetings/util.ts +81 -12
  288. package/src/member/index.ts +58 -0
  289. package/src/member/types.ts +38 -0
  290. package/src/member/util.ts +141 -25
  291. package/src/members/collection.ts +8 -0
  292. package/src/members/index.ts +134 -8
  293. package/src/members/request.ts +97 -17
  294. package/src/members/types.ts +29 -0
  295. package/src/members/util.ts +333 -240
  296. package/src/metrics/constants.ts +17 -0
  297. package/src/metrics/index.ts +1 -469
  298. package/src/multistream/mediaRequestManager.ts +271 -56
  299. package/src/multistream/receiveSlot.ts +11 -4
  300. package/src/multistream/receiveSlotManager.ts +34 -24
  301. package/src/multistream/remoteMedia.ts +5 -3
  302. package/src/multistream/remoteMediaGroup.ts +78 -0
  303. package/src/multistream/remoteMediaManager.ts +248 -44
  304. package/src/multistream/sendSlotManager.ts +199 -0
  305. package/src/reachability/clusterReachability.ts +320 -0
  306. package/src/reachability/index.ts +229 -346
  307. package/src/reachability/request.ts +8 -4
  308. package/src/reachability/util.ts +24 -0
  309. package/src/reconnection-manager/index.ts +128 -97
  310. package/src/recording-controller/index.ts +20 -3
  311. package/src/recording-controller/util.ts +26 -9
  312. package/src/roap/index.ts +52 -23
  313. package/src/roap/request.ts +48 -67
  314. package/src/roap/turnDiscovery.ts +147 -49
  315. package/src/rtcMetrics/constants.ts +3 -0
  316. package/src/rtcMetrics/index.ts +166 -0
  317. package/src/statsAnalyzer/index.ts +457 -416
  318. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  319. package/src/webinar/collection.ts +31 -0
  320. package/src/webinar/index.ts +62 -0
  321. package/test/integration/spec/converged-space-meetings.js +60 -3
  322. package/test/integration/spec/journey.js +320 -261
  323. package/test/integration/spec/space-meeting.js +76 -3
  324. package/test/unit/spec/annotation/index.ts +418 -0
  325. package/test/unit/spec/breakouts/breakout.ts +118 -28
  326. package/test/unit/spec/breakouts/events.ts +89 -0
  327. package/test/unit/spec/breakouts/index.ts +1349 -114
  328. package/test/unit/spec/breakouts/utils.js +52 -1
  329. package/test/unit/spec/common/queue.js +31 -2
  330. package/test/unit/spec/controls-options-manager/index.js +163 -0
  331. package/test/unit/spec/controls-options-manager/util.js +576 -60
  332. package/test/unit/spec/fixture/locus.js +1 -0
  333. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  334. package/test/unit/spec/interpretation/collection.ts +15 -0
  335. package/test/unit/spec/interpretation/index.ts +625 -0
  336. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  337. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  338. package/test/unit/spec/locus-info/index.js +1363 -37
  339. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  340. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  341. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  342. package/test/unit/spec/locus-info/parser.js +116 -35
  343. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  344. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  345. package/test/unit/spec/media/index.ts +173 -81
  346. package/test/unit/spec/media/properties.ts +2 -2
  347. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  348. package/test/unit/spec/meeting/index.js +6821 -2172
  349. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  350. package/test/unit/spec/meeting/muteState.js +402 -212
  351. package/test/unit/spec/meeting/request.js +473 -54
  352. package/test/unit/spec/meeting/utils.js +773 -67
  353. package/test/unit/spec/meeting-info/index.js +300 -0
  354. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  355. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  356. package/test/unit/spec/meetings/collection.js +26 -0
  357. package/test/unit/spec/meetings/index.js +1415 -213
  358. package/test/unit/spec/meetings/utils.js +229 -2
  359. package/test/unit/spec/member/index.js +61 -6
  360. package/test/unit/spec/member/util.js +510 -34
  361. package/test/unit/spec/members/index.js +432 -1
  362. package/test/unit/spec/members/request.js +206 -27
  363. package/test/unit/spec/members/utils.js +210 -0
  364. package/test/unit/spec/metrics/index.js +1 -50
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
  366. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  367. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  368. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  369. package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
  370. package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
  371. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  372. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  373. package/test/unit/spec/reachability/index.ts +551 -14
  374. package/test/unit/spec/reachability/request.js +3 -1
  375. package/test/unit/spec/reachability/util.ts +40 -0
  376. package/test/unit/spec/reconnection-manager/index.js +171 -11
  377. package/test/unit/spec/recording-controller/index.js +294 -218
  378. package/test/unit/spec/recording-controller/util.js +223 -96
  379. package/test/unit/spec/roap/index.ts +180 -83
  380. package/test/unit/spec/roap/request.ts +100 -62
  381. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  382. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  383. package/test/unit/spec/stats-analyzer/index.js +1252 -12
  384. package/test/unit/spec/webinar/collection.ts +13 -0
  385. package/test/unit/spec/webinar/index.ts +60 -0
  386. package/test/utils/integrationTestUtils.js +46 -0
  387. package/test/utils/testUtils.js +0 -57
  388. package/test/utils/webex-test-users.js +12 -4
  389. package/dist/metrics/config.js +0 -289
  390. package/dist/metrics/config.js.map +0 -1
  391. package/dist/types/metrics/config.d.ts +0 -169
  392. package/src/index.js +0 -18
  393. package/src/metrics/config.ts +0 -485
@@ -14,6 +14,7 @@ _Object$defineProperty(exports, "__esModule", {
14
14
  exports.default = void 0;
15
15
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
16
16
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
17
+ var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
17
18
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
18
19
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
19
20
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
@@ -25,8 +26,6 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
25
26
  var _webexCore = require("@webex/webex-core");
26
27
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
27
28
  var _constants = require("../constants");
28
- var _metrics = _interopRequireDefault(require("../metrics"));
29
- var _config = require("../metrics/config");
30
29
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
31
30
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
32
31
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
@@ -51,24 +50,16 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
51
50
  */
52
51
  function () {
53
52
  var _attachReachabilityData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(localSdp) {
54
- var joinCookie, reachabilityData, reachabilityResult, joinCookieRaw;
53
+ var joinCookie, reachabilityResult, joinCookieRaw;
55
54
  return _regenerator.default.wrap(function _callee$(_context) {
56
55
  while (1) switch (_context.prev = _context.next) {
57
56
  case 0:
58
57
  _context.next = 2;
59
- return this.webex.boundedStorage.get(_constants.REACHABILITY.namespace, _constants.REACHABILITY.localStorageResult).catch(function () {});
58
+ return this.webex.meetings.reachability.getReachabilityResults();
60
59
  case 2:
61
- reachabilityData = _context.sent;
62
- if (reachabilityData) {
63
- try {
64
- reachabilityResult = JSON.parse(reachabilityData);
65
- /* istanbul ignore else */
66
- if (reachabilityResult && (0, _keys.default)(reachabilityResult).length) {
67
- localSdp.reachability = reachabilityResult;
68
- }
69
- } catch (e) {
70
- _loggerProxy.default.logger.error("Roap:request#attachReachabilityData --> Error in parsing reachability data: ".concat(e));
71
- }
60
+ reachabilityResult = _context.sent;
61
+ if (reachabilityResult && (0, _keys.default)(reachabilityResult).length) {
62
+ localSdp.reachability = reachabilityResult;
72
63
  }
73
64
 
74
65
  // @ts-ignore
@@ -105,71 +96,63 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
105
96
  * @param {String} options.locusSelfUrl
106
97
  * @param {String} options.mediaId
107
98
  * @param {String} options.correlationId
108
- * @param {Boolean} options.audioMuted
109
- * @param {Boolean} options.videoMuted
110
99
  * @param {String} options.meetingId
111
- * @param {Boolean} options.preferTranscoding
100
+ * @param {IP_VERSION} options.ipVersion only required for offers
112
101
  * @returns {Promise} returns the response/failure of the request
113
102
  */
114
103
  }, {
115
104
  key: "sendRoap",
116
105
  value: function () {
117
106
  var _sendRoap = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(options) {
118
- var _options$preferTransc;
119
- var roapMessage, locusSelfUrl, mediaId, correlationId, meetingId, _yield$this$attachRea, localSdpWithReachabilityData, joinCookie, mediaUrl, deviceUrl;
107
+ var _this = this;
108
+ var roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, ipVersion, _yield$this$attachRea, localSdpWithReachabilityData, joinCookie;
120
109
  return _regenerator.default.wrap(function _callee2$(_context2) {
121
110
  while (1) switch (_context2.prev = _context2.next) {
122
111
  case 0:
123
- roapMessage = options.roapMessage, locusSelfUrl = options.locusSelfUrl, mediaId = options.mediaId, correlationId = options.correlationId, meetingId = options.meetingId;
112
+ roapMessage = options.roapMessage, locusSelfUrl = options.locusSelfUrl, mediaId = options.mediaId, meetingId = options.meetingId, locusMediaRequest = options.locusMediaRequest, ipVersion = options.ipVersion;
124
113
  if (!mediaId) {
125
- _loggerProxy.default.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
114
+ _loggerProxy.default.logger.info('Roap:request#sendRoap --> sending empty mediaID');
126
115
  }
127
- _context2.next = 4;
116
+ if (locusMediaRequest) {
117
+ _context2.next = 5;
118
+ break;
119
+ }
120
+ _loggerProxy.default.logger.warn('Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap');
121
+ return _context2.abrupt("return", _promise.default.reject(new Error('sendRoap called when locusMediaRequest is undefined')));
122
+ case 5:
123
+ _context2.next = 7;
128
124
  return this.attachReachabilityData({
129
- roapMessage: roapMessage,
130
- // eslint-disable-next-line no-warning-comments
131
- // TODO: check whats the need for video and audiomute
132
- audioMuted: !!options.audioMuted,
133
- videoMuted: !!options.videoMuted
125
+ roapMessage: roapMessage
134
126
  });
135
- case 4:
127
+ case 7:
136
128
  _yield$this$attachRea = _context2.sent;
137
129
  localSdpWithReachabilityData = _yield$this$attachRea.localSdp;
138
130
  joinCookie = _yield$this$attachRea.joinCookie;
139
- mediaUrl = "".concat(locusSelfUrl, "/").concat(_constants.MEDIA); // @ts-ignore
140
- deviceUrl = this.webex.internal.device.url;
141
- _loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(mediaUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
142
- _metrics.default.postEvent({
143
- event: _config.eventType.MEDIA_REQUEST,
144
- meetingId: meetingId
145
- });
131
+ _loggerProxy.default.logger.info("Roap:request#sendRoap --> ".concat(locusSelfUrl, " \n ").concat(roapMessage.messageType, " \n seq:").concat(roapMessage.seq));
146
132
 
147
133
  // @ts-ignore
148
- return _context2.abrupt("return", this.request({
149
- uri: mediaUrl,
150
- method: _constants.HTTP_VERBS.PUT,
151
- body: {
152
- device: {
153
- url: deviceUrl,
154
- // @ts-ignore
155
- deviceType: this.config.meetings.deviceType
156
- },
157
- correlationId: correlationId,
158
- localMedias: [{
159
- localSdp: (0, _stringify.default)(localSdpWithReachabilityData),
160
- mediaId: options.mediaId
161
- }],
162
- clientMediaPreferences: {
163
- preferTranscoding: (_options$preferTransc = options.preferTranscoding) !== null && _options$preferTransc !== void 0 ? _options$preferTransc : true,
164
- joinCookie: joinCookie
165
- }
134
+ this.webex.internal.newMetrics.submitClientEvent({
135
+ name: 'client.locus.media.request',
136
+ options: {
137
+ meetingId: meetingId
166
138
  }
139
+ });
140
+ return _context2.abrupt("return", locusMediaRequest.send({
141
+ type: 'RoapMessage',
142
+ selfUrl: locusSelfUrl,
143
+ joinCookie: joinCookie,
144
+ mediaId: mediaId,
145
+ roapMessage: roapMessage,
146
+ reachability: localSdpWithReachabilityData.reachability,
147
+ ipVersion: ipVersion
167
148
  }).then(function (res) {
168
- _metrics.default.postEvent({
169
- event: _config.eventType.MEDIA_RESPONSE,
170
- meetingId: meetingId
149
+ // @ts-ignore
150
+ _this.webex.internal.newMetrics.submitClientEvent({
151
+ name: 'client.locus.media.response',
152
+ options: {
153
+ meetingId: meetingId
154
+ }
171
155
  });
172
-
173
156
  // always it will be the first mediaConnection Object
174
157
  var mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];
175
158
  _loggerProxy.default.logger.debug("Roap:request#sendRoap --> response:".concat((0, _stringify.default)(mediaConnections, null, 2), "'\n StatusCode:'").concat(res.statusCode));
@@ -181,18 +164,19 @@ var RoapRequest = /*#__PURE__*/function (_StatelessWebexPlugin) {
181
164
  mediaConnections: res.body.mediaConnections
182
165
  });
183
166
  }).catch(function (err) {
184
- _metrics.default.postEvent({
185
- event: _config.eventType.MEDIA_RESPONSE,
186
- meetingId: meetingId,
187
- data: {
188
- error: _metrics.default.parseLocusError(err, true)
167
+ // @ts-ignore
168
+ _this.webex.internal.newMetrics.submitClientEvent({
169
+ name: 'client.locus.media.response',
170
+ options: {
171
+ meetingId: meetingId,
172
+ rawError: err
189
173
  }
190
174
  });
191
175
  _loggerProxy.default.logger.error("Roap:request#sendRoap --> Error:".concat((0, _stringify.default)(err, null, 2)));
192
176
  _loggerProxy.default.logger.error("Roap:request#sendRoapRequest --> errorBody:".concat((0, _stringify.default)(roapMessage, null, 2), " + '\\n mediaId:'").concat(options.mediaId));
193
177
  throw err;
194
178
  }));
195
- case 12:
179
+ case 13:
196
180
  case "end":
197
181
  return _context2.stop();
198
182
  }
@@ -1 +1 @@
1
- {"version":3,"names":["RoapRequest","localSdp","webex","boundedStorage","get","REACHABILITY","namespace","localStorageResult","catch","reachabilityData","reachabilityResult","JSON","parse","length","reachability","e","LoggerProxy","logger","error","localStorageJoinCookie","joinCookieRaw","joinCookie","options","roapMessage","locusSelfUrl","mediaId","correlationId","meetingId","info","attachReachabilityData","audioMuted","videoMuted","localSdpWithReachabilityData","mediaUrl","MEDIA","deviceUrl","internal","device","url","messageType","seq","Metrics","postEvent","event","eventType","MEDIA_REQUEST","request","uri","method","HTTP_VERBS","PUT","body","deviceType","config","meetings","localMedias","clientMediaPreferences","preferTranscoding","then","res","MEDIA_RESPONSE","mediaConnections","debug","statusCode","locus","roapSeq","err","data","parseLocusError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["/* global window */\n// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';\nimport Metrics from '../metrics';\nimport {eventType} from '../metrics/config';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityData = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageResult)\n .catch(() => {});\n\n if (reachabilityData) {\n try {\n const reachabilityResult = JSON.parse(reachabilityData);\n\n /* istanbul ignore else */\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n } catch (e) {\n LoggerProxy.logger.error(\n `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`\n );\n }\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @param {String} options.meetingId\n * @param {Boolean} options.preferTranscoding\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n correlationId: string;\n audioMuted: boolean;\n videoMuted: boolean;\n meetingId: string;\n preferTranscoding?: boolean;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');\n }\n\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n // eslint-disable-next-line no-warning-comments\n // TODO: check whats the need for video and audiomute\n audioMuted: !!options.audioMuted,\n videoMuted: !!options.videoMuted,\n });\n\n const mediaUrl = `${locusSelfUrl}/${MEDIA}`;\n // @ts-ignore\n const deviceUrl = this.webex.internal.device.url;\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${mediaUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});\n\n // @ts-ignore\n return this.request({\n uri: mediaUrl,\n method: HTTP_VERBS.PUT,\n body: {\n device: {\n url: deviceUrl,\n // @ts-ignore\n deviceType: this.config.meetings.deviceType,\n },\n correlationId,\n localMedias: [\n {\n localSdp: JSON.stringify(localSdpWithReachabilityData),\n mediaId: options.mediaId,\n },\n ],\n clientMediaPreferences: {\n preferTranscoding: options.preferTranscoding ?? true,\n joinCookie,\n },\n },\n })\n .then((res) => {\n Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});\n\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n Metrics.postEvent({\n event: eventType.MEDIA_RESPONSE,\n meetingId,\n data: {error: Metrics.parseLocusError(err, true)},\n });\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["RoapRequest","localSdp","webex","meetings","reachability","getReachabilityResults","reachabilityResult","length","boundedStorage","get","REACHABILITY","namespace","localStorageJoinCookie","catch","joinCookieRaw","joinCookie","JSON","parse","e","LoggerProxy","logger","error","options","roapMessage","locusSelfUrl","mediaId","meetingId","locusMediaRequest","ipVersion","info","warn","reject","Error","attachReachabilityData","localSdpWithReachabilityData","messageType","seq","internal","newMetrics","submitClientEvent","name","send","type","selfUrl","then","res","mediaConnections","body","debug","statusCode","locus","roapSeq","err","rawError","StatelessWebexPlugin"],"sources":["request.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {IP_VERSION, REACHABILITY} from '../constants';\nimport {LocusMediaRequest} from '../meeting/locusMediaRequest';\n\n/**\n * @class RoapRequest\n */\nexport default class RoapRequest extends StatelessWebexPlugin {\n /**\n * Returns reachability data.\n * @param {Object} localSdp\n * @returns {Object}\n */\n async attachReachabilityData(localSdp) {\n let joinCookie;\n\n // @ts-ignore\n const reachabilityResult = await this.webex.meetings.reachability.getReachabilityResults();\n\n if (reachabilityResult && Object.keys(reachabilityResult).length) {\n localSdp.reachability = reachabilityResult;\n }\n\n // @ts-ignore\n const joinCookieRaw = await this.webex.boundedStorage\n .get(REACHABILITY.namespace, REACHABILITY.localStorageJoinCookie)\n .catch(() => {});\n\n if (joinCookieRaw) {\n try {\n joinCookie = JSON.parse(joinCookieRaw);\n } catch (e) {\n LoggerProxy.logger.error(\n `MeetingRequest#constructor --> Error in parsing join cookie data: ${e}`\n );\n }\n }\n\n return {localSdp, joinCookie};\n }\n\n /**\n * Sends a ROAP message\n * @param {Object} options\n * @param {Object} options.roapMessage\n * @param {String} options.locusSelfUrl\n * @param {String} options.mediaId\n * @param {String} options.correlationId\n * @param {String} options.meetingId\n * @param {IP_VERSION} options.ipVersion only required for offers\n * @returns {Promise} returns the response/failure of the request\n */\n async sendRoap(options: {\n roapMessage: any;\n locusSelfUrl: string;\n mediaId: string;\n meetingId: string;\n ipVersion?: IP_VERSION;\n locusMediaRequest?: LocusMediaRequest;\n }) {\n const {roapMessage, locusSelfUrl, mediaId, meetingId, locusMediaRequest, ipVersion} = options;\n\n if (!mediaId) {\n LoggerProxy.logger.info('Roap:request#sendRoap --> sending empty mediaID');\n }\n\n if (!locusMediaRequest) {\n LoggerProxy.logger.warn(\n 'Roap:request#sendRoap --> locusMediaRequest unavailable, not sending roap'\n );\n\n return Promise.reject(new Error('sendRoap called when locusMediaRequest is undefined'));\n }\n const {localSdp: localSdpWithReachabilityData, joinCookie} = await this.attachReachabilityData({\n roapMessage,\n });\n\n LoggerProxy.logger.info(\n `Roap:request#sendRoap --> ${locusSelfUrl} \\n ${roapMessage.messageType} \\n seq:${roapMessage.seq}`\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.request',\n options: {\n meetingId,\n },\n });\n\n return locusMediaRequest\n .send({\n type: 'RoapMessage',\n selfUrl: locusSelfUrl,\n joinCookie,\n mediaId,\n roapMessage,\n reachability: localSdpWithReachabilityData.reachability,\n ipVersion,\n })\n .then((res) => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {\n meetingId,\n },\n });\n // always it will be the first mediaConnection Object\n const mediaConnections =\n res.body.mediaConnections &&\n res.body.mediaConnections.length > 0 &&\n res.body.mediaConnections[0];\n\n LoggerProxy.logger.debug(\n `Roap:request#sendRoap --> response:${JSON.stringify(\n mediaConnections,\n null,\n 2\n )}'\\n StatusCode:'${res.statusCode}`\n );\n const {locus} = res.body;\n\n locus.roapSeq = options.roapMessage.seq;\n\n return {\n locus,\n ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),\n };\n })\n .catch((err) => {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.locus.media.response',\n options: {\n meetingId,\n rawError: err,\n },\n });\n LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);\n LoggerProxy.logger.error(\n `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(\n roapMessage,\n null,\n 2\n )} + '\\\\n mediaId:'${options.mediaId}`\n );\n throw err;\n });\n }\n}\n"],"mappings":"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"}
@@ -18,6 +18,7 @@ var _metrics = _interopRequireDefault(require("../metrics"));
18
18
  var _constants = _interopRequireDefault(require("../metrics/constants"));
19
19
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
20
20
  var _constants2 = require("../constants");
21
+ var _util = _interopRequireDefault(require("../meeting/util"));
21
22
  // @ts-ignore - Types not available for @webex/common
22
23
 
23
24
  var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
@@ -81,20 +82,23 @@ var TurnDiscovery = /*#__PURE__*/function () {
81
82
  * handles TURN_DISCOVERY_RESPONSE roap message
82
83
  *
83
84
  * @param {Object} roapMessage
85
+ * @param {string} from string to indicate how we got the response (used just for logging)
84
86
  * @returns {void}
85
87
  * @public
86
88
  * @memberof Roap
87
89
  */
88
90
  }, {
89
91
  key: "handleTurnDiscoveryResponse",
90
- value: function handleTurnDiscoveryResponse(roapMessage) {
92
+ value: function handleTurnDiscoveryResponse(roapMessage, from) {
91
93
  var _this = this;
92
- // @ts-ignore - Fix missing type
93
94
  var headers = roapMessage.headers;
94
95
  if (!this.defer) {
95
- _loggerProxy.default.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');
96
+ _loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response ".concat(from));
96
97
  return;
97
98
  }
99
+ if (roapMessage.messageType !== _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
100
+ this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE ".concat(from, " has unexpected messageType: ").concat((0, _stringify.default)(roapMessage))));
101
+ }
98
102
  var expectedHeaders = [{
99
103
  headerName: 'x-cisco-turn-url',
100
104
  field: 'url'
@@ -118,14 +122,43 @@ var TurnDiscovery = /*#__PURE__*/function () {
118
122
  clearTimeout(this.responseTimer);
119
123
  this.responseTimer = undefined;
120
124
  if (foundHeaders !== expectedHeaders.length) {
121
- _loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ".concat((0, _stringify.default)(headers)));
122
- this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE missing some headers: ".concat((0, _stringify.default)(headers))));
125
+ _loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ".concat(from, ": ").concat((0, _stringify.default)(headers)));
126
+ this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE ".concat(from, " missing some headers: ").concat((0, _stringify.default)(headers))));
123
127
  } else {
124
- _loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=".concat(this.turnInfo.url));
125
- this.defer.resolve();
128
+ _loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ".concat(from, ", url=").concat(this.turnInfo.url));
129
+ this.defer.resolve({
130
+ isOkRequired: !(headers !== null && headers !== void 0 && headers.includes('noOkInTransaction'))
131
+ });
126
132
  }
127
133
  }
128
134
 
135
+ /**
136
+ * handles TURN_DISCOVERY_RESPONSE roap message that came in http response
137
+ *
138
+ * @param {Object} roapMessage
139
+ * @returns {Promise}
140
+ * @memberof Roap
141
+ */
142
+ }, {
143
+ key: "handleTurnDiscoveryResponseInHttpResponse",
144
+ value: function () {
145
+ var _handleTurnDiscoveryResponseInHttpResponse = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(roapMessage) {
146
+ return _regenerator.default.wrap(function _callee$(_context) {
147
+ while (1) switch (_context.prev = _context.next) {
148
+ case 0:
149
+ this.handleTurnDiscoveryResponse(roapMessage, 'in http response');
150
+ return _context.abrupt("return", this.defer.promise);
151
+ case 2:
152
+ case "end":
153
+ return _context.stop();
154
+ }
155
+ }, _callee, this);
156
+ }));
157
+ function handleTurnDiscoveryResponseInHttpResponse(_x) {
158
+ return _handleTurnDiscoveryResponseInHttpResponse.apply(this, arguments);
159
+ }
160
+ return handleTurnDiscoveryResponseInHttpResponse;
161
+ }()
129
162
  /**
130
163
  * sends the TURN_DISCOVERY_REQUEST roap request
131
164
  *
@@ -138,7 +171,6 @@ var TurnDiscovery = /*#__PURE__*/function () {
138
171
  }, {
139
172
  key: "sendRoapTurnDiscoveryRequest",
140
173
  value: function sendRoapTurnDiscoveryRequest(meeting, isReconnecting) {
141
- var _meeting$audio, _meeting$video;
142
174
  if (this.defer) {
143
175
  _loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
144
176
  return _promise.default.resolve();
@@ -147,25 +179,54 @@ var TurnDiscovery = /*#__PURE__*/function () {
147
179
  var roapMessage = {
148
180
  messageType: _constants2.ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,
149
181
  version: _constants2.ROAP.ROAP_VERSION,
150
- seq: TURN_DISCOVERY_SEQ
182
+ seq: TURN_DISCOVERY_SEQ,
183
+ headers: ['includeAnswerInHttpResponse', 'noOkInTransaction']
151
184
  };
152
185
  _loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
153
186
  return this.roapRequest.sendRoap({
154
187
  roapMessage: roapMessage,
155
- correlationId: meeting.correlationId,
156
188
  // @ts-ignore - Fix missing type
157
189
  locusSelfUrl: meeting.selfUrl,
158
190
  // @ts-ignore - Fix missing type
159
191
  mediaId: isReconnecting ? '' : meeting.mediaId,
160
- audioMuted: (_meeting$audio = meeting.audio) === null || _meeting$audio === void 0 ? void 0 : _meeting$audio.isLocallyMuted(),
161
- videoMuted: (_meeting$video = meeting.video) === null || _meeting$video === void 0 ? void 0 : _meeting$video.isLocallyMuted(),
162
192
  meetingId: meeting.id,
163
- preferTranscoding: !meeting.isMultistream
164
- }).then(function (_ref) {
165
- var mediaConnections = _ref.mediaConnections;
193
+ locusMediaRequest: meeting.locusMediaRequest,
194
+ // @ts-ignore - because of meeting.webex
195
+ ipVersion: _util.default.getIpVersion(meeting.webex)
196
+ }).then(function (response) {
197
+ var mediaConnections = response.mediaConnections;
198
+ var turnDiscoveryResponse;
166
199
  if (mediaConnections) {
200
+ var _mediaConnections$;
167
201
  meeting.updateMediaConnections(mediaConnections);
202
+ if ((_mediaConnections$ = mediaConnections[0]) !== null && _mediaConnections$ !== void 0 && _mediaConnections$.remoteSdp) {
203
+ var remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);
204
+ if (remoteSdp.roapMessage) {
205
+ // yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...
206
+ var _remoteSdp$roapMessag = remoteSdp.roapMessage,
207
+ seq = _remoteSdp$roapMessag.seq,
208
+ messageType = _remoteSdp$roapMessag.messageType,
209
+ errorType = _remoteSdp$roapMessag.errorType,
210
+ errorCause = _remoteSdp$roapMessag.errorCause,
211
+ headers = _remoteSdp$roapMessag.headers;
212
+ turnDiscoveryResponse = {
213
+ seq: seq,
214
+ messageType: messageType,
215
+ errorType: errorType,
216
+ errorCause: errorCause,
217
+ headers: headers
218
+ };
219
+ }
220
+ }
221
+ }
222
+ if (!turnDiscoveryResponse) {
223
+ _metrics.default.sendBehavioralMetric(_constants.default.ROAP_HTTP_RESPONSE_MISSING, {
224
+ correlationId: meeting.correlationId,
225
+ messageType: 'TURN_DISCOVERY_RESPONSE',
226
+ isMultistream: meeting.isMultistream
227
+ });
168
228
  }
229
+ return turnDiscoveryResponse;
169
230
  });
170
231
  }
171
232
 
@@ -179,7 +240,6 @@ var TurnDiscovery = /*#__PURE__*/function () {
179
240
  }, {
180
241
  key: "sendRoapOK",
181
242
  value: function sendRoapOK(meeting) {
182
- var _meeting$audio2, _meeting$video2;
183
243
  _loggerProxy.default.logger.info('Roap:turnDiscovery#sendRoapOK --> sending OK');
184
244
  return this.roapRequest.sendRoap({
185
245
  roapMessage: {
@@ -191,14 +251,78 @@ var TurnDiscovery = /*#__PURE__*/function () {
191
251
  locusSelfUrl: meeting.selfUrl,
192
252
  // @ts-ignore - fix type
193
253
  mediaId: meeting.mediaId,
194
- correlationId: meeting.correlationId,
195
- audioMuted: (_meeting$audio2 = meeting.audio) === null || _meeting$audio2 === void 0 ? void 0 : _meeting$audio2.isLocallyMuted(),
196
- videoMuted: (_meeting$video2 = meeting.video) === null || _meeting$video2 === void 0 ? void 0 : _meeting$video2.isLocallyMuted(),
197
254
  meetingId: meeting.id,
198
- preferTranscoding: !meeting.isMultistream
255
+ locusMediaRequest: meeting.locusMediaRequest
199
256
  });
200
257
  }
201
258
 
259
+ /**
260
+ * Gets the reason why reachability is skipped.
261
+ *
262
+ * @param {Meeting} meeting
263
+ * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped
264
+ */
265
+ }, {
266
+ key: "getSkipReason",
267
+ value: function () {
268
+ var _getSkipReason = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(meeting) {
269
+ var isAnyPublicClusterReachable;
270
+ return _regenerator.default.wrap(function _callee2$(_context2) {
271
+ while (1) switch (_context2.prev = _context2.next) {
272
+ case 0:
273
+ _context2.next = 2;
274
+ return meeting.webex.meetings.reachability.isAnyPublicClusterReachable();
275
+ case 2:
276
+ isAnyPublicClusterReachable = _context2.sent;
277
+ if (!isAnyPublicClusterReachable) {
278
+ _context2.next = 6;
279
+ break;
280
+ }
281
+ _loggerProxy.default.logger.info('Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery');
282
+ return _context2.abrupt("return", 'reachability');
283
+ case 6:
284
+ return _context2.abrupt("return", '');
285
+ case 7:
286
+ case "end":
287
+ return _context2.stop();
288
+ }
289
+ }, _callee2);
290
+ }));
291
+ function getSkipReason(_x2) {
292
+ return _getSkipReason.apply(this, arguments);
293
+ }
294
+ return getSkipReason;
295
+ }()
296
+ /**
297
+ * Checks if TURN discovery is skipped.
298
+ *
299
+ * @param {Meeting} meeting
300
+ * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done
301
+ */
302
+ }, {
303
+ key: "isSkipped",
304
+ value: function () {
305
+ var _isSkipped = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(meeting) {
306
+ var skipReason;
307
+ return _regenerator.default.wrap(function _callee3$(_context3) {
308
+ while (1) switch (_context3.prev = _context3.next) {
309
+ case 0:
310
+ _context3.next = 2;
311
+ return this.getSkipReason(meeting);
312
+ case 2:
313
+ skipReason = _context3.sent;
314
+ return _context3.abrupt("return", !!skipReason);
315
+ case 4:
316
+ case "end":
317
+ return _context3.stop();
318
+ }
319
+ }, _callee3, this);
320
+ }));
321
+ function isSkipped(_x3) {
322
+ return _isSkipped.apply(this, arguments);
323
+ }
324
+ return isSkipped;
325
+ }()
202
326
  /**
203
327
  * Retrieves TURN server information from the backend by doing
204
328
  * a roap message exchange:
@@ -212,75 +336,101 @@ var TurnDiscovery = /*#__PURE__*/function () {
212
336
  * so it works fine no matter if TURN discovery is done or not.
213
337
  *
214
338
  * @param {Meeting} meeting
215
- * @param {Boolean} isReconnecting should be set to true if this is a new
339
+ * @param {Boolean} [isReconnecting] should be set to true if this is a new
216
340
  * media connection just after a reconnection
341
+ * @param {Boolean} [isForced]
217
342
  * @returns {Promise}
218
343
  */
219
344
  }, {
220
345
  key: "doTurnDiscovery",
221
346
  value: function () {
222
- var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(meeting, isReconnecting) {
223
- var _this2 = this;
224
- var isAnyClusterReachable;
225
- return _regenerator.default.wrap(function _callee$(_context) {
226
- while (1) switch (_context.prev = _context.next) {
347
+ var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(meeting, isReconnecting, isForced) {
348
+ var turnDiscoverySkippedReason, httpResponse, _ref, isOkRequired;
349
+ return _regenerator.default.wrap(function _callee4$(_context4) {
350
+ while (1) switch (_context4.prev = _context4.next) {
227
351
  case 0:
228
- _context.next = 2;
229
- return meeting.webex.meetings.reachability.isAnyClusterReachable();
230
- case 2:
231
- isAnyClusterReachable = _context.sent;
232
- if (!isAnyClusterReachable) {
233
- _context.next = 6;
352
+ if (isForced) {
353
+ _context4.next = 4;
354
+ break;
355
+ }
356
+ _context4.next = 3;
357
+ return this.getSkipReason(meeting);
358
+ case 3:
359
+ turnDiscoverySkippedReason = _context4.sent;
360
+ case 4:
361
+ if (!turnDiscoverySkippedReason) {
362
+ _context4.next = 6;
234
363
  break;
235
364
  }
236
- _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery');
237
- return _context.abrupt("return", {
365
+ return _context4.abrupt("return", {
238
366
  turnServerInfo: undefined,
239
- turnDiscoverySkippedReason: 'reachability'
367
+ turnDiscoverySkippedReason: turnDiscoverySkippedReason
240
368
  });
241
369
  case 6:
242
- if (meeting.config.experimental.enableTurnDiscovery) {
243
- _context.next = 9;
370
+ _context4.prev = 6;
371
+ _context4.next = 9;
372
+ return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);
373
+ case 9:
374
+ httpResponse = _context4.sent;
375
+ if (!httpResponse) {
376
+ _context4.next = 16;
244
377
  break;
245
378
  }
246
- _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');
247
- return _context.abrupt("return", {
379
+ _context4.next = 13;
380
+ return this.handleTurnDiscoveryResponseInHttpResponse(httpResponse);
381
+ case 13:
382
+ _context4.t0 = _context4.sent;
383
+ _context4.next = 19;
384
+ break;
385
+ case 16:
386
+ _context4.next = 18;
387
+ return this.waitForTurnDiscoveryResponse();
388
+ case 18:
389
+ _context4.t0 = _context4.sent;
390
+ case 19:
391
+ _ref = _context4.t0;
392
+ isOkRequired = _ref.isOkRequired;
393
+ if (!isOkRequired) {
394
+ _context4.next = 26;
395
+ break;
396
+ }
397
+ _context4.next = 24;
398
+ return this.sendRoapOK(meeting);
399
+ case 24:
400
+ _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery response requires OK');
401
+ _metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_REQUIRES_OK, {
402
+ correlation_id: meeting.correlationId,
403
+ locus_id: meeting.locusUrl.split('/').pop()
404
+ });
405
+ case 26:
406
+ this.defer = undefined;
407
+ _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
408
+ return _context4.abrupt("return", {
409
+ turnServerInfo: this.turnInfo,
410
+ turnDiscoverySkippedReason: undefined
411
+ });
412
+ case 31:
413
+ _context4.prev = 31;
414
+ _context4.t1 = _context4["catch"](6);
415
+ // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
416
+ _loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(_context4.t1));
417
+ _metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
418
+ correlation_id: meeting.correlationId,
419
+ locus_id: meeting.locusUrl.split('/').pop(),
420
+ reason: _context4.t1.message,
421
+ stack: _context4.t1.stack
422
+ });
423
+ return _context4.abrupt("return", {
248
424
  turnServerInfo: undefined,
249
- turnDiscoverySkippedReason: 'config'
425
+ turnDiscoverySkippedReason: undefined
250
426
  });
251
- case 9:
252
- return _context.abrupt("return", this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting).then(function () {
253
- return _this2.waitForTurnDiscoveryResponse();
254
- }).then(function () {
255
- return _this2.sendRoapOK(meeting);
256
- }).then(function () {
257
- _this2.defer = undefined;
258
- _loggerProxy.default.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');
259
- return {
260
- turnServerInfo: _this2.turnInfo,
261
- turnDiscoverySkippedReason: undefined
262
- };
263
- }).catch(function (e) {
264
- // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
265
- _loggerProxy.default.logger.info("Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ".concat(e));
266
- _metrics.default.sendBehavioralMetric(_constants.default.TURN_DISCOVERY_FAILURE, {
267
- correlation_id: meeting.correlationId,
268
- locus_id: meeting.locusUrl.split('/').pop(),
269
- reason: e.message,
270
- stack: e.stack
271
- });
272
- return {
273
- turnServerInfo: undefined,
274
- turnDiscoverySkippedReason: undefined
275
- };
276
- }));
277
- case 10:
427
+ case 36:
278
428
  case "end":
279
- return _context.stop();
429
+ return _context4.stop();
280
430
  }
281
- }, _callee, this);
431
+ }, _callee4, this, [[6, 31]]);
282
432
  }));
283
- function doTurnDiscovery(_x, _x2) {
433
+ function doTurnDiscovery(_x4, _x5, _x6) {
284
434
  return _doTurnDiscovery.apply(this, arguments);
285
435
  }
286
436
  return doTurnDiscovery;