@webex/plugin-meetings 3.8.0 → 3.8.1-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +70 -6
  4. package/dist/breakouts/index.js.map +1 -1
  5. package/dist/common/errors/webex-errors.js +12 -2
  6. package/dist/common/errors/webex-errors.js.map +1 -1
  7. package/dist/config.js +5 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/constants.js +28 -123
  10. package/dist/constants.js.map +1 -1
  11. package/dist/controls-options-manager/enums.js +3 -0
  12. package/dist/controls-options-manager/enums.js.map +1 -1
  13. package/dist/controls-options-manager/types.js.map +1 -1
  14. package/dist/controls-options-manager/util.js +78 -0
  15. package/dist/controls-options-manager/util.js.map +1 -1
  16. package/dist/interpretation/index.js +4 -4
  17. package/dist/interpretation/index.js.map +1 -1
  18. package/dist/interpretation/siLanguage.js +1 -1
  19. package/dist/locus-info/controlsUtils.js +37 -11
  20. package/dist/locus-info/controlsUtils.js.map +1 -1
  21. package/dist/locus-info/index.js +92 -12
  22. package/dist/locus-info/index.js.map +1 -1
  23. package/dist/locus-info/selfUtils.js +432 -418
  24. package/dist/locus-info/selfUtils.js.map +1 -1
  25. package/dist/media/index.js +17 -17
  26. package/dist/media/index.js.map +1 -1
  27. package/dist/media/properties.js +94 -6
  28. package/dist/media/properties.js.map +1 -1
  29. package/dist/meeting/brbState.js +9 -2
  30. package/dist/meeting/brbState.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +21 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +678 -344
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +21 -22
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +4 -4
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +30 -0
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/request.type.js.map +1 -1
  42. package/dist/meeting/util.js +13 -2
  43. package/dist/meeting/util.js.map +1 -1
  44. package/dist/meeting-info/meeting-info-v2.js +373 -68
  45. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  46. package/dist/meeting-info/utilv2.js +5 -1
  47. package/dist/meeting-info/utilv2.js.map +1 -1
  48. package/dist/meetings/index.js +136 -1
  49. package/dist/meetings/index.js.map +1 -1
  50. package/dist/meetings/util.js +14 -0
  51. package/dist/meetings/util.js.map +1 -1
  52. package/dist/member/index.js +55 -9
  53. package/dist/member/index.js.map +1 -1
  54. package/dist/member/types.js +3 -0
  55. package/dist/member/types.js.map +1 -1
  56. package/dist/member/util.js +335 -353
  57. package/dist/member/util.js.map +1 -1
  58. package/dist/members/collection.js.map +1 -1
  59. package/dist/members/index.js +137 -29
  60. package/dist/members/index.js.map +1 -1
  61. package/dist/members/request.js +38 -0
  62. package/dist/members/request.js.map +1 -1
  63. package/dist/members/util.js +36 -1
  64. package/dist/members/util.js.map +1 -1
  65. package/dist/metrics/constants.js +10 -0
  66. package/dist/metrics/constants.js.map +1 -1
  67. package/dist/multistream/remoteMediaManager.js +40 -8
  68. package/dist/multistream/remoteMediaManager.js.map +1 -1
  69. package/dist/reachability/clusterReachability.js +63 -27
  70. package/dist/reachability/clusterReachability.js.map +1 -1
  71. package/dist/reachability/index.js +107 -47
  72. package/dist/reachability/index.js.map +1 -1
  73. package/dist/reachability/reachability.types.js +14 -0
  74. package/dist/reachability/reachability.types.js.map +1 -1
  75. package/dist/reachability/request.js +19 -3
  76. package/dist/reachability/request.js.map +1 -1
  77. package/dist/reconnection-manager/index.js +2 -2
  78. package/dist/reconnection-manager/index.js.map +1 -1
  79. package/dist/recording-controller/util.js +5 -5
  80. package/dist/recording-controller/util.js.map +1 -1
  81. package/dist/roap/index.js.map +1 -1
  82. package/dist/roap/turnDiscovery.js +45 -27
  83. package/dist/roap/turnDiscovery.js.map +1 -1
  84. package/dist/roap/types.js +17 -0
  85. package/dist/roap/types.js.map +1 -0
  86. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  87. package/dist/types/config.d.ts +3 -0
  88. package/dist/types/constants.d.ts +20 -85
  89. package/dist/types/controls-options-manager/enums.d.ts +4 -1
  90. package/dist/types/controls-options-manager/types.d.ts +10 -1
  91. package/dist/types/locus-info/index.d.ts +3 -3
  92. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  93. package/dist/types/media/properties.d.ts +15 -0
  94. package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
  95. package/dist/types/meeting/index.d.ts +65 -1
  96. package/dist/types/meeting/muteState.d.ts +0 -1
  97. package/dist/types/meeting/request.d.ts +12 -1
  98. package/dist/types/meeting/request.type.d.ts +6 -0
  99. package/dist/types/meeting/util.d.ts +3 -1
  100. package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
  101. package/dist/types/meetings/index.d.ts +57 -0
  102. package/dist/types/member/index.d.ts +21 -6
  103. package/dist/types/member/types.d.ts +73 -14
  104. package/dist/types/member/util.d.ts +156 -1
  105. package/dist/types/members/collection.d.ts +6 -5
  106. package/dist/types/members/index.d.ts +32 -43
  107. package/dist/types/members/request.d.ts +26 -0
  108. package/dist/types/members/util.d.ts +27 -0
  109. package/dist/types/metrics/constants.d.ts +10 -0
  110. package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
  111. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  112. package/dist/types/reachability/index.d.ts +10 -1
  113. package/dist/types/reachability/reachability.types.d.ts +5 -0
  114. package/dist/types/roap/index.d.ts +3 -2
  115. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  116. package/dist/types/roap/types.d.ts +16 -0
  117. package/dist/webinar/index.js +2 -2
  118. package/dist/webinar/index.js.map +1 -1
  119. package/package.json +24 -23
  120. package/src/breakouts/index.ts +69 -0
  121. package/src/common/errors/webex-errors.ts +8 -1
  122. package/src/config.ts +3 -0
  123. package/src/constants.ts +30 -90
  124. package/src/controls-options-manager/enums.ts +3 -0
  125. package/src/controls-options-manager/types.ts +16 -1
  126. package/src/controls-options-manager/util.ts +93 -0
  127. package/src/interpretation/index.ts +3 -3
  128. package/src/locus-info/controlsUtils.ts +59 -14
  129. package/src/locus-info/index.ts +97 -13
  130. package/src/locus-info/selfUtils.ts +496 -442
  131. package/src/media/index.ts +23 -21
  132. package/src/media/properties.ts +96 -0
  133. package/src/meeting/brbState.ts +11 -2
  134. package/src/meeting/in-meeting-actions.ts +40 -0
  135. package/src/meeting/index.ts +470 -105
  136. package/src/meeting/locusMediaRequest.ts +27 -22
  137. package/src/meeting/muteState.ts +4 -4
  138. package/src/meeting/request.ts +36 -1
  139. package/src/meeting/request.type.ts +7 -0
  140. package/src/meeting/util.ts +11 -2
  141. package/src/meeting-info/meeting-info-v2.ts +254 -8
  142. package/src/meeting-info/utilv2.ts +5 -0
  143. package/src/meetings/index.ts +148 -1
  144. package/src/meetings/util.ts +18 -0
  145. package/src/member/index.ts +68 -22
  146. package/src/member/types.ts +82 -16
  147. package/src/member/util.ts +357 -350
  148. package/src/members/collection.ts +4 -3
  149. package/src/members/index.ts +137 -18
  150. package/src/members/request.ts +44 -0
  151. package/src/members/util.ts +43 -1
  152. package/src/metrics/constants.ts +10 -0
  153. package/src/multistream/remoteMediaManager.ts +32 -10
  154. package/src/reachability/clusterReachability.ts +73 -26
  155. package/src/reachability/index.ts +62 -1
  156. package/src/reachability/reachability.types.ts +6 -0
  157. package/src/reachability/request.ts +7 -0
  158. package/src/reconnection-manager/index.ts +2 -2
  159. package/src/recording-controller/util.ts +17 -13
  160. package/src/roap/index.ts +3 -7
  161. package/src/roap/turnDiscovery.ts +34 -39
  162. package/src/roap/types.ts +23 -0
  163. package/src/webinar/index.ts +1 -1
  164. package/test/unit/spec/breakouts/index.ts +167 -95
  165. package/test/unit/spec/controls-options-manager/util.js +178 -0
  166. package/test/unit/spec/interpretation/index.ts +39 -1
  167. package/test/unit/spec/locus-info/controlsUtils.js +155 -9
  168. package/test/unit/spec/locus-info/index.js +209 -73
  169. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  170. package/test/unit/spec/media/index.ts +150 -18
  171. package/test/unit/spec/media/properties.ts +130 -0
  172. package/test/unit/spec/meeting/brbState.ts +40 -2
  173. package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
  174. package/test/unit/spec/meeting/index.js +804 -139
  175. package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
  176. package/test/unit/spec/meeting/muteState.js +73 -2
  177. package/test/unit/spec/meeting/request.js +32 -1
  178. package/test/unit/spec/meeting/utils.js +119 -18
  179. package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
  180. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  181. package/test/unit/spec/meetings/index.js +146 -2
  182. package/test/unit/spec/member/index.js +7 -0
  183. package/test/unit/spec/member/util.js +24 -0
  184. package/test/unit/spec/members/index.js +304 -78
  185. package/test/unit/spec/members/request.js +68 -22
  186. package/test/unit/spec/members/utils.js +75 -0
  187. package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
  188. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  189. package/test/unit/spec/reachability/index.ts +97 -0
  190. package/test/unit/spec/reachability/request.js +47 -2
  191. package/test/unit/spec/reconnection-manager/index.js +4 -4
  192. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
  193. package/test/unit/spec/webinar/index.ts +5 -0
  194. package/dist/annotation/annotation.types.d.ts +0 -42
  195. package/dist/annotation/constants.d.ts +0 -31
  196. package/dist/annotation/index.d.ts +0 -117
  197. package/dist/breakouts/breakout.d.ts +0 -8
  198. package/dist/breakouts/collection.d.ts +0 -5
  199. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  200. package/dist/breakouts/events.d.ts +0 -8
  201. package/dist/breakouts/index.d.ts +0 -5
  202. package/dist/breakouts/request.d.ts +0 -22
  203. package/dist/breakouts/utils.d.ts +0 -15
  204. package/dist/common/browser-detection.d.ts +0 -9
  205. package/dist/common/collection.d.ts +0 -48
  206. package/dist/common/config.d.ts +0 -2
  207. package/dist/common/errors/captcha-error.d.ts +0 -15
  208. package/dist/common/errors/intent-to-join.d.ts +0 -16
  209. package/dist/common/errors/join-meeting.d.ts +0 -17
  210. package/dist/common/errors/media.d.ts +0 -15
  211. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  212. package/dist/common/errors/parameter.d.ts +0 -15
  213. package/dist/common/errors/password-error.d.ts +0 -15
  214. package/dist/common/errors/permission.d.ts +0 -14
  215. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  216. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  217. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  218. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  219. package/dist/common/errors/reconnection-in-progress.js +0 -33
  220. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  221. package/dist/common/errors/reconnection.d.ts +0 -15
  222. package/dist/common/errors/stats.d.ts +0 -15
  223. package/dist/common/errors/webex-errors.d.ts +0 -93
  224. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  225. package/dist/common/events/events-scope.d.ts +0 -17
  226. package/dist/common/events/events.d.ts +0 -12
  227. package/dist/common/events/trigger-proxy.d.ts +0 -2
  228. package/dist/common/events/util.d.ts +0 -2
  229. package/dist/common/logs/logger-config.d.ts +0 -2
  230. package/dist/common/logs/logger-proxy.d.ts +0 -2
  231. package/dist/common/logs/request.d.ts +0 -36
  232. package/dist/common/queue.d.ts +0 -34
  233. package/dist/config.d.ts +0 -72
  234. package/dist/constants.d.ts +0 -1088
  235. package/dist/controls-options-manager/constants.d.ts +0 -4
  236. package/dist/controls-options-manager/enums.d.ts +0 -15
  237. package/dist/controls-options-manager/index.d.ts +0 -136
  238. package/dist/controls-options-manager/types.d.ts +0 -43
  239. package/dist/controls-options-manager/util.d.ts +0 -1
  240. package/dist/index.d.ts +0 -7
  241. package/dist/interceptors/index.d.ts +0 -2
  242. package/dist/interceptors/locusRetry.d.ts +0 -27
  243. package/dist/interpretation/collection.d.ts +0 -5
  244. package/dist/interpretation/index.d.ts +0 -5
  245. package/dist/interpretation/siLanguage.d.ts +0 -5
  246. package/dist/locus-info/controlsUtils.d.ts +0 -2
  247. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  248. package/dist/locus-info/fullState.d.ts +0 -2
  249. package/dist/locus-info/hostUtils.d.ts +0 -2
  250. package/dist/locus-info/index.d.ts +0 -322
  251. package/dist/locus-info/infoUtils.d.ts +0 -2
  252. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  253. package/dist/locus-info/parser.d.ts +0 -272
  254. package/dist/locus-info/selfUtils.d.ts +0 -2
  255. package/dist/media/index.d.ts +0 -34
  256. package/dist/media/properties.d.ts +0 -93
  257. package/dist/media/util.d.ts +0 -2
  258. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  259. package/dist/mediaQualityMetrics/config.js +0 -502
  260. package/dist/mediaQualityMetrics/config.js.map +0 -1
  261. package/dist/meeting/effectsState.js +0 -260
  262. package/dist/meeting/effectsState.js.map +0 -1
  263. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  264. package/dist/meeting/index.d.ts +0 -1825
  265. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  266. package/dist/meeting/muteState.d.ts +0 -178
  267. package/dist/meeting/request.d.ts +0 -295
  268. package/dist/meeting/request.type.d.ts +0 -11
  269. package/dist/meeting/state.d.ts +0 -9
  270. package/dist/meeting/util.d.ts +0 -119
  271. package/dist/meeting/voicea-meeting.d.ts +0 -16
  272. package/dist/meeting-info/collection.d.ts +0 -20
  273. package/dist/meeting-info/index.d.ts +0 -69
  274. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  275. package/dist/meeting-info/request.d.ts +0 -22
  276. package/dist/meeting-info/util.d.ts +0 -2
  277. package/dist/meeting-info/utilv2.d.ts +0 -2
  278. package/dist/meetings/collection.d.ts +0 -40
  279. package/dist/meetings/index.d.ts +0 -390
  280. package/dist/meetings/meetings.types.d.ts +0 -4
  281. package/dist/meetings/request.d.ts +0 -27
  282. package/dist/meetings/util.d.ts +0 -18
  283. package/dist/member/index.d.ts +0 -160
  284. package/dist/member/member.types.js +0 -17
  285. package/dist/member/member.types.js.map +0 -1
  286. package/dist/member/types.d.ts +0 -32
  287. package/dist/member/util.d.ts +0 -2
  288. package/dist/members/collection.d.ts +0 -29
  289. package/dist/members/index.d.ts +0 -353
  290. package/dist/members/request.d.ts +0 -114
  291. package/dist/members/types.d.ts +0 -25
  292. package/dist/members/util.d.ts +0 -215
  293. package/dist/metrics/config.js +0 -276
  294. package/dist/metrics/config.js.map +0 -1
  295. package/dist/metrics/constants.d.ts +0 -70
  296. package/dist/metrics/index.d.ts +0 -45
  297. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  298. package/dist/multistream/receiveSlot.d.ts +0 -68
  299. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  300. package/dist/multistream/remoteMedia.d.ts +0 -72
  301. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  302. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  303. package/dist/multistream/sendSlotManager.d.ts +0 -69
  304. package/dist/networkQualityMonitor/index.d.ts +0 -70
  305. package/dist/networkQualityMonitor/index.js +0 -221
  306. package/dist/networkQualityMonitor/index.js.map +0 -1
  307. package/dist/peer-connection-manager/index.js +0 -671
  308. package/dist/peer-connection-manager/index.js.map +0 -1
  309. package/dist/peer-connection-manager/util.js +0 -109
  310. package/dist/peer-connection-manager/util.js.map +0 -1
  311. package/dist/personal-meeting-room/index.d.ts +0 -47
  312. package/dist/personal-meeting-room/request.d.ts +0 -14
  313. package/dist/personal-meeting-room/util.d.ts +0 -2
  314. package/dist/reachability/clusterReachability.d.ts +0 -109
  315. package/dist/reachability/index.d.ts +0 -105
  316. package/dist/reachability/request.d.ts +0 -39
  317. package/dist/reachability/util.d.ts +0 -8
  318. package/dist/reactions/constants.d.ts +0 -3
  319. package/dist/reactions/reactions.d.ts +0 -4
  320. package/dist/reactions/reactions.type.d.ts +0 -52
  321. package/dist/reconnection-manager/index.d.ts +0 -136
  322. package/dist/recording-controller/enums.d.ts +0 -7
  323. package/dist/recording-controller/index.d.ts +0 -207
  324. package/dist/recording-controller/util.d.ts +0 -14
  325. package/dist/roap/collection.js +0 -62
  326. package/dist/roap/collection.js.map +0 -1
  327. package/dist/roap/handler.js +0 -275
  328. package/dist/roap/handler.js.map +0 -1
  329. package/dist/roap/index.d.ts +0 -86
  330. package/dist/roap/request.d.ts +0 -39
  331. package/dist/roap/state.js +0 -126
  332. package/dist/roap/state.js.map +0 -1
  333. package/dist/roap/turnDiscovery.d.ts +0 -155
  334. package/dist/roap/util.js +0 -75
  335. package/dist/roap/util.js.map +0 -1
  336. package/dist/rtcMetrics/constants.d.ts +0 -4
  337. package/dist/rtcMetrics/constants.js +0 -11
  338. package/dist/rtcMetrics/constants.js.map +0 -1
  339. package/dist/rtcMetrics/index.d.ts +0 -61
  340. package/dist/rtcMetrics/index.js +0 -197
  341. package/dist/rtcMetrics/index.js.map +0 -1
  342. package/dist/statsAnalyzer/global.d.ts +0 -36
  343. package/dist/statsAnalyzer/global.js +0 -126
  344. package/dist/statsAnalyzer/global.js.map +0 -1
  345. package/dist/statsAnalyzer/index.d.ts +0 -217
  346. package/dist/statsAnalyzer/index.js +0 -1013
  347. package/dist/statsAnalyzer/index.js.map +0 -1
  348. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  349. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  350. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  351. package/dist/transcription/index.d.ts +0 -64
  352. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  353. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  354. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  355. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  356. package/dist/types/rtcMetrics/index.d.ts +0 -71
  357. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  358. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  359. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  360. package/dist/webinar/collection.d.ts +0 -16
  361. package/dist/webinar/index.d.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnection","_reconnectionNotStarted","_metrics","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","NeedsRetryError","_Error","_inherits2","_super","_classCallCheck2","_createClass2","_wrapNativeSuper2","Error","NeedsRejoinError","_Error2","_super2","_ref","_this","wasSharing","_ref$error","error","_defineProperty2","_assertThisInitialized2","ReconnectionManager","exports","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","key","value","resetReconnectionTimer","clearTimeout","iceReconnected","LoggerProxy","logger","log","waitForIceReconnect","_this2","_promise","reject","setTimeout","concat","cleanUp","_stopLocalShareStream","_asyncToGenerator2","_regenerator","mark","_callee","reason","wrap","_callee$","_context","prev","next","unpublishStreams","mediaProperties","shareVideoStream","shareAudioStream","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","stop","stopLocalShareStream","_x","isReconnectInProgress","IN_PROGRESS","canStartReconnection","enabled","info","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","completionCallback","triggerEvent","_args2","_callee2$","_context2","length","id","event","payload","ReconnectionNotStartedError","MEETING_RECONNECTION_STARTING","internal","newMetrics","submitClientEvent","name","options","meetingId","meetings","startReachability","t0","executeReconnection","t1","reconnect","abrupt","message","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","MEETING_RECONNECTION_SUCCESS","recoveredBy","t2","MEETING_RECONNECTION_FAILURE","ReconnectionError","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_RECONNECT_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","stack","finish","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_callee3$","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","syncMeetings","keepOnlyLocusMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","_x2","_rejoinMeeting","_callee4","_args4","_callee4$","_context4","join","rejoin","MEETING_REJOIN","MEETING_MAX_REJOIN_FAILURE","_reconnectMedia","_callee5","_turnServerResult$tur","turnServerResult","iceServers","_callee5$","_context5","roap","doTurnDiscovery","turnServerInfo","push","urls","username","credential","password","webrtcMediaConnection","isMultistream","_values","mediaRequestManagers","forEach","mediaRequestManager","clearPreviousRequests","commit","_reconnectMercuryWebSocket","_callee6","_callee6$","_context6","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n RECONNECTION_STATE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {RECONNECTION_STATE}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = 0;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.rejoinAttempts = 0;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n }\n\n /**\n * Stop the local share stream.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private async stopLocalShareStream(reason: string) {\n await this.meeting.unpublishStreams([\n this.meeting.mediaProperties.shareVideoStream,\n this.meeting.mediaProperties.shareAudioStream,\n ]);\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareStream',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectInProgress, ReconnectionDisabled}\n * @private\n * @memberof ReconnectionManager\n */\n private canStartReconnection() {\n if (this.meeting.config.reconnection.enabled) {\n if (this.status === RECONNECTION.STATE.DEFAULT_STATUS) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection already in progress.'\n );\n\n return false;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection is not enabled.'\n );\n\n return false;\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @param {Function} [completionCallback] callback that gets called when reconnection is started successfully\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect(\n {\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {},\n completionCallback: (() => Promise<void>) | undefined = undefined\n ) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n\n const triggerEvent = (event, payload = undefined) =>\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'reconnect',\n },\n event,\n payload\n );\n\n if (!this.canStartReconnection()) {\n throw new ReconnectionNotStartedError();\n }\n\n try {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.reconnecting',\n options: {\n meetingId: this.meeting.id,\n },\n });\n }\n\n try {\n await this.webex.meetings.startReachability('reconnection');\n } catch (err) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reachability failed, continuing with reconnection attempt, err: ',\n err\n );\n }\n\n try {\n await this.executeReconnection({networkDisconnect});\n } catch (reconnectError) {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n await this.reconnect({networkDisconnect: true, networkRetry: true}, completionCallback);\n\n return;\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n\n // send call aborted event with category as expected as we are trying to rejoin\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.aborted',\n payload: {\n errors: [\n {\n category: 'expected',\n errorCode: 2008,\n fatal: true,\n name: 'media-engine',\n shownToUser: false,\n },\n ],\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n\n if (reconnectError instanceof NeedsRejoinError && this.autoRejoinEnabled) {\n await this.rejoinMeeting(reconnectError.wasSharing);\n\n return;\n }\n\n throw reconnectError;\n }\n\n // finalize the reconnection process by calling the completionCallback\n if (completionCallback) {\n await completionCallback();\n }\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.recovered',\n payload: {\n recoveredBy: 'new',\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n } catch (error) {\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {\n error: new ReconnectionError('Reconnection failure event', error),\n });\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE, {\n correlation_id: this.meeting.correlationId,\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw new ReconnectionError('Reconnection failure event', error);\n } finally {\n this.reset();\n }\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> webRTC media connection renewed and local sdp offer sent'\n );\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> failed to renew webRTC media connection or initiate offer'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> do turn discovery');\n\n // do the TURN server discovery again and ignore reachability results since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo?.url) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.url,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> renew webRTC media connection and send local sdp offer'\n );\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach(\n (mediaRequestManager: MediaRequestManager) => {\n mediaRequestManager.clearPreviousRequests();\n mediaRequestManager.commit();\n }\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'\n );\n } catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_triggerProxy","_constants","_constants2","_reconnection","_reconnectionNotStarted","_metrics","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","NeedsRetryError","_Error","_inherits2","_super","_classCallCheck2","_createClass2","_wrapNativeSuper2","Error","NeedsRejoinError","_Error2","_super2","_ref","_this","wasSharing","_ref$error","error","_defineProperty2","_assertThisInitialized2","ReconnectionManager","exports","meeting","iceState","disconnected","resolve","timer","undefined","timeoutDuration","config","reconnection","iceReconnectionTimeout","status","RECONNECTION","STATE","DEFAULT_STATUS","webex","maxRejoinAttempts","rejoinAttempts","autoRejoinEnabled","autoRejoin","reset","key","value","resetReconnectionTimer","clearTimeout","iceReconnected","LoggerProxy","logger","log","waitForIceReconnect","_this2","_promise","reject","setTimeout","concat","cleanUp","_stopLocalShareStream","_asyncToGenerator2","_regenerator","mark","_callee","reason","wrap","_callee$","_context","prev","next","unpublishStreams","mediaProperties","shareVideoStream","shareAudioStream","Trigger","trigger","file","function","EVENT_TRIGGERS","MEETING_STOPPED_SHARING_LOCAL","stop","stopLocalShareStream","_x","isReconnectInProgress","IN_PROGRESS","canStartReconnection","enabled","info","_reconnect","_callee2","_this3","_ref2","_ref2$networkDisconne","networkDisconnect","_ref2$networkRetry","networkRetry","completionCallback","triggerEvent","_args2","_callee2$","_context2","length","id","event","payload","ReconnectionNotStartedError","MEETING_RECONNECTION_STARTING","internal","newMetrics","submitClientEvent","name","options","meetingId","meetings","startReachability","t0","executeReconnection","t1","reconnect","abrupt","message","errors","category","errorCode","fatal","shownToUser","rejoinMeeting","MEETING_RECONNECTION_SUCCESS","recoveredBy","t2","MEETING_RECONNECTION_FAILURE","ReconnectionError","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","MEETING_RECONNECT_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","stack","finish","_executeReconnection","_callee3","_ref3","_ref3$networkDisconne","media","_callee3$","_context3","shareStatus","SHARE_STATUS","LOCAL_SHARE_ACTIVE","SHARE_STOPPED_REASON","MEDIA_RECONNECTION","reconnectMercuryWebSocket","device","url","FAILURE","syncMeetings","keepOnlyLocusMeetings","getMeetingByType","_ID_","state","_LEFT_","type","_CALL_","reconnectMedia","sent","_x2","_rejoinMeeting","_callee4","_args4","_callee4$","_context4","join","rejoin","MEETING_REJOIN","MEETING_MAX_REJOIN_FAILURE","_reconnectMedia","_callee5","_turnServerResult$tur","turnServerResult","iceServers","_callee5$","_context5","roap","doTurnDiscovery","turnServerInfo","urls","push","username","credential","password","webrtcMediaConnection","isMultistream","_values","mediaRequestManagers","forEach","mediaRequestManager","clearPreviousRequests","commit","_reconnectMercuryWebSocket","_callee6","_callee6$","_context6","mercury","connected","disconnect","connect"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-disable no-warning-comments */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Trigger from '../common/events/trigger-proxy';\nimport {\n EVENT_TRIGGERS,\n RECONNECTION,\n SHARE_STATUS,\n SHARE_STOPPED_REASON,\n _CALL_,\n _LEFT_,\n _ID_,\n RECONNECTION_STATE,\n} from '../constants';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport ReconnectionError from '../common/errors/reconnection';\nimport ReconnectionNotStartedError from '../common/errors/reconnection-not-started';\nimport Metrics from '../metrics';\nimport Meeting from '../meeting';\nimport {MediaRequestManager} from '../multistream/mediaRequestManager';\n\n/**\n * Used to indicate that the reconnect logic needs to be retried.\n *\n * @class NeedsRetryError\n * @extends {Error}\n */\nclass NeedsRetryError extends Error {}\n\n/**\n * Used to indicate that the meeting needs to be rejoined, not just media reconnected\n *\n * @class NeedsRejoinError\n * @extends {Error}\n */\nclass NeedsRejoinError extends Error {\n wasSharing: any;\n\n /**\n * Creates an instance of NeedsRejoinError.\n * @param {Object} params\n * @param {boolean} params.wasSharing\n * @param {Error} params.error\n * @memberof NeedsRejoinError\n */\n constructor({\n wasSharing,\n error = new Error('Meeting needs to be rejoined'),\n }: {\n wasSharing?: boolean;\n error?: Error;\n }) {\n // @ts-ignore\n super(error);\n\n this.wasSharing = wasSharing;\n }\n}\n\n/**\n * @export\n * @class ReconnectionManager\n */\nexport default class ReconnectionManager {\n autoRejoinEnabled: any;\n iceState: any;\n maxRejoinAttempts: any;\n meeting: any;\n rejoinAttempts: any;\n shareStatus: any;\n status: any;\n webex: any;\n /**\n * @param {Meeting} meeting\n */\n constructor(meeting: Meeting) {\n /**\n * Stores ICE reconnection state data.\n *\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n this.iceState = {\n disconnected: false,\n resolve: () => {},\n timer: undefined,\n // @ts-ignore\n timeoutDuration: meeting.config.reconnection.iceReconnectionTimeout,\n };\n\n /**\n * @instance\n * @type {RECONNECTION_STATE}\n * @private\n * @memberof ReconnectionManager\n */\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO : change this logic to not save the meeting instance\n // It gets complicated when meeting ends on remote side , We have a old meeting instance which is not up to date\n // @ts-ignore\n this.webex = meeting.webex;\n /**\n * @instance\n * @type {Meeting}\n * @private\n * @memberof ReconnectionManager\n */\n // TODO: try removing the circular dependency for meeting and reconnection manager\n // try moving this to meetings collection\n this.meeting = meeting;\n\n // @ts-ignore\n this.maxRejoinAttempts = meeting.config.reconnection.maxRejoinAttempts;\n this.rejoinAttempts = 0;\n // @ts-ignore\n this.autoRejoinEnabled = meeting.config.reconnection.autoRejoin;\n\n // Make sure reconnection state is in default\n this.reset();\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {void}\n */\n resetReconnectionTimer() {\n this.iceState.resolve();\n this.iceState.resolve = () => {};\n\n if (this.iceState.timer) {\n clearTimeout(this.iceState.timer);\n delete this.iceState.timer;\n }\n }\n\n /**\n * Sets the iceState to connected and clears any disconnect timeouts and\n * related timeout data within the iceState.\n *\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public iceReconnected() {\n if (this.iceState.disconnected) {\n LoggerProxy.logger.log('ReconnectionManager:index#iceReconnected --> ice has reconnected');\n\n this.resetReconnectionTimer();\n\n this.iceState.disconnected = false;\n }\n }\n\n /**\n * Set the iceState to disconnected and generates a timeout that waits for the\n * iceState to reconnect and then resolves. If the ice state is already\n * processing a reconnect, it immediately resolves. Rejects if the timeout\n * duration is reached.\n *\n * @returns {Promise<undefined>}\n * @public\n * @memberof ReconnectionManager\n */\n public waitForIceReconnect() {\n if (!this.iceState.disconnected) {\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#waitForIceReconnect --> waiting for ice reconnect'\n );\n\n this.iceState.disconnected = true;\n\n return new Promise<void>((resolve, reject) => {\n this.iceState.timer = setTimeout(() => {\n if (this.iceState.disconnected === false) {\n resolve();\n } else {\n this.iceState.disconnected = false;\n reject(\n new Error(`ice reconnection did not occur in ${this.iceState.timeoutDuration}ms`)\n );\n }\n }, this.iceState.timeoutDuration);\n\n this.iceState.resolve = resolve;\n });\n }\n\n // return a resolved promise to prevent multiple catch executions of reconnect\n return Promise.resolve();\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public reset() {\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n this.rejoinAttempts = 0;\n }\n\n /**\n * @returns {undefined}\n * @public\n * @memberof ReconnectionManager\n */\n public cleanUp() {\n this.reset();\n }\n\n /**\n * Stop the local share stream.\n *\n * @param {string} reason a {@link SHARE_STOPPED_REASON}\n * @returns {undefined}\n * @private\n * @memberof ReconnectionManager\n */\n private async stopLocalShareStream(reason: string) {\n await this.meeting.unpublishStreams([\n this.meeting.mediaProperties.shareVideoStream,\n this.meeting.mediaProperties.shareAudioStream,\n ]);\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'stopLocalShareStream',\n },\n EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL,\n {\n reason,\n }\n );\n }\n\n /**\n * @public\n * @memberof ReconnectionManager\n * @returns {Boolean} true if reconnection operation is in progress\n */\n isReconnectInProgress() {\n return this.status === RECONNECTION.STATE.IN_PROGRESS;\n }\n\n /**\n * @returns {Boolean}\n * @throws {ReconnectInProgress, ReconnectionDisabled}\n * @private\n * @memberof ReconnectionManager\n */\n private canStartReconnection() {\n if (this.meeting.config.reconnection.enabled) {\n if (this.status === RECONNECTION.STATE.DEFAULT_STATUS) {\n return true;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection already in progress.'\n );\n\n return false;\n }\n\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#canStartReconnection --> Reconnection is not enabled.'\n );\n\n return false;\n }\n\n /**\n * Initiates a media reconnect for the active meeting\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @param {boolean} [reconnectOptions.networkRetry=false] indicates if we are retrying the reconnect\n * @param {Function} [completionCallback] callback that gets called when reconnection is started successfully\n * @returns {Promise}\n * @public\n * @memberof ReconnectionManager\n */\n public async reconnect(\n {\n networkDisconnect = false,\n networkRetry = false,\n }: {\n networkDisconnect?: boolean;\n networkRetry?: boolean;\n } = {},\n completionCallback: (() => Promise<void>) | undefined = undefined\n ) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#reconnect --> Reconnection start for meeting ${this.meeting.id}.`\n );\n\n const triggerEvent = (event, payload = undefined) =>\n Trigger.trigger(\n this.meeting,\n {\n file: 'reconnection-manager/index',\n function: 'reconnect',\n },\n event,\n payload\n );\n\n if (!this.canStartReconnection()) {\n throw new ReconnectionNotStartedError();\n }\n\n try {\n this.status = RECONNECTION.STATE.IN_PROGRESS;\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);\n\n if (!networkRetry) {\n // Only log START metrics on the initial reconnect\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Sending reconnect start metric.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.reconnecting',\n options: {\n meetingId: this.meeting.id,\n },\n });\n }\n\n try {\n await this.webex.meetings.startReachability('reconnection');\n } catch (err) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reachability failed, continuing with reconnection attempt, err: ',\n err\n );\n }\n\n try {\n await this.executeReconnection({networkDisconnect});\n } catch (reconnectError) {\n if (reconnectError instanceof NeedsRetryError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnect --> Reconnection not successful, retrying.'\n );\n // Reset our reconnect status since we are looping back to the beginning\n this.status = RECONNECTION.STATE.DEFAULT_STATUS;\n\n // This is a network retry, so we should not log START metrics again\n await this.reconnect({networkDisconnect: true, networkRetry: true}, completionCallback);\n\n return;\n }\n\n // Reconnect has failed\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnect --> Reconnection failed.',\n reconnectError.message\n );\n\n // send call aborted event with category as expected as we are trying to rejoin\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.aborted',\n payload: {\n errors: [\n {\n category: 'expected',\n errorCode: 2008,\n fatal: true,\n name: 'media-engine',\n shownToUser: false,\n },\n ],\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n\n if (reconnectError instanceof NeedsRejoinError && this.autoRejoinEnabled) {\n await this.rejoinMeeting(reconnectError.wasSharing);\n\n return;\n }\n\n throw reconnectError;\n }\n\n // finalize the reconnection process by calling the completionCallback\n if (completionCallback) {\n await completionCallback();\n }\n\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.media.recovered',\n payload: {\n recoveredBy: 'new',\n },\n options: {\n meetingId: this.meeting.id,\n },\n });\n } catch (error) {\n triggerEvent(EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {\n error: new ReconnectionError('Reconnection failure event', error),\n });\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_RECONNECT_FAILURE, {\n correlation_id: this.meeting.correlationId,\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n throw new ReconnectionError('Reconnection failure event', error);\n } finally {\n this.reset();\n }\n }\n\n /**\n * @param {Object} reconnectOptions\n * @param {boolean} [reconnectOptions.networkDisconnect=false] indicates if a network disconnect event happened\n * @returns {Promise}\n * @throws {NeedsRetryError}\n * @private\n * @memberof ReconnectionManager\n */\n private async executeReconnection({networkDisconnect = false}: {networkDisconnect?: boolean}) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Attempting to reconnect to meeting.'\n );\n\n const wasSharing = this.meeting.shareStatus === SHARE_STATUS.LOCAL_SHARE_ACTIVE;\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEDIA_RECONNECTION);\n }\n\n if (networkDisconnect) {\n try {\n await this.reconnectMercuryWebSocket();\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Websocket reconnected.',\n this.webex.internal.device.url\n );\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> Unable to reconnect to websocket, giving up.'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n throw error;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Updating meeting data from server.'\n );\n await this.webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});\n } catch (syncError) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Unable to sync meetings, reconnecting.',\n syncError\n );\n throw new NeedsRetryError(syncError);\n }\n\n // TODO: try to improve this logic as the reconnection manager saves the instance of deleted meeting object\n // So that on rejoin it known what parametrs it was using\n if (!this.meeting || !this.webex.meetings.getMeetingByType(_ID_, this.meeting.id)) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#executeReconnection --> Meeting got deleted due to inactivity or ended remotely.'\n );\n\n throw new Error('Unable to rejoin a meeting already ended or inactive.');\n }\n\n LoggerProxy.logger.info(\n `ReconnectionManager:index#executeReconnection --> Current state of meeting is ${this.meeting.state}`\n );\n\n // If the meeting state was left, no longer reconnect media\n if (this.meeting.state === _LEFT_) {\n if (this.meeting.type === _CALL_) {\n throw new Error('Unable to rejoin a call in LEFT state.');\n }\n\n throw new NeedsRejoinError({wasSharing});\n }\n\n try {\n const media = await this.reconnectMedia();\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#executeReconnection --> webRTC media connection renewed and local sdp offer sent'\n );\n\n return media;\n } catch (error) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#executeReconnection --> failed to renew webRTC media connection or initiate offer'\n );\n this.status = RECONNECTION.STATE.FAILURE;\n\n throw error;\n }\n }\n\n /**\n * Rejoins a meeting after detecting the member was in a LEFT state\n *\n * @async\n * @param {boolean} wasSharing\n * @returns {Promise}\n */\n async rejoinMeeting(wasSharing = false) {\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#rejoinMeeting --> attemping meeting rejoin'\n );\n\n await this.meeting.join({rejoin: true});\n LoggerProxy.logger.info('ReconnectionManager:index#rejoinMeeting --> meeting rejoined');\n\n if (wasSharing) {\n await this.stopLocalShareStream(SHARE_STOPPED_REASON.MEETING_REJOIN);\n }\n } catch (joinError) {\n this.rejoinAttempts += 1;\n if (this.rejoinAttempts <= this.maxRejoinAttempts) {\n LoggerProxy.logger.info(\n `ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting, attempt #${this.rejoinAttempts}, retrying.`,\n joinError\n );\n this.rejoinMeeting();\n } else {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to rejoin meeting after max attempts.',\n joinError\n );\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_MAX_REJOIN_FAILURE, {\n locus_id: this.meeting.locusUrl.split('/').pop(),\n reason: joinError.message,\n stack: joinError.stack,\n });\n this.status = RECONNECTION.STATE.FAILURE;\n throw joinError;\n }\n }\n\n try {\n await this.reconnectMedia();\n } catch (mediaError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#rejoinMeeting --> Unable to reestablish media after rejoining.',\n mediaError\n );\n throw mediaError;\n }\n }\n\n /**\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n async reconnectMedia() {\n LoggerProxy.logger.log('ReconnectionManager:index#reconnectMedia --> do turn discovery');\n\n // do the TURN server discovery again and ignore reachability results since the TURN server might change\n const turnServerResult = await this.meeting.roap.doTurnDiscovery(this.meeting, true, true);\n\n const iceServers = [];\n\n if (turnServerResult.turnServerInfo?.urls.length > 0) {\n iceServers.push({\n urls: turnServerResult.turnServerInfo.urls,\n username: turnServerResult.turnServerInfo.username || '',\n credential: turnServerResult.turnServerInfo.password || '',\n });\n }\n\n LoggerProxy.logger.log(\n 'ReconnectionManager:index#reconnectMedia --> renew webRTC media connection and send local sdp offer'\n );\n\n await this.meeting.mediaProperties.webrtcMediaConnection.reconnect(iceServers);\n\n // resend media requests\n if (this.meeting.isMultistream) {\n Object.values(this.meeting.mediaRequestManagers).forEach(\n (mediaRequestManager: MediaRequestManager) => {\n mediaRequestManager.clearPreviousRequests();\n mediaRequestManager.commit();\n }\n );\n }\n }\n\n /**\n * Attempt to Reconnect Mercury Websocket\n * @returns {Promise}\n * @private\n * @memberof ReconnectionManager\n */\n private async reconnectMercuryWebSocket() {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Reconnecting websocket.'\n );\n // First, attempt to disconnect if we think we are already connected.\n if (this.webex.internal.mercury.connected) {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Disconnecting existing websocket.'\n );\n try {\n await this.webex.internal.mercury.disconnect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket disconnected successfully.'\n );\n } catch (disconnectError) {\n // If we can't disconnect, the sdk is in such a bad state that reconnecting is not going to happen.\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to disconnect from websocket, giving up.',\n disconnectError\n );\n throw disconnectError;\n }\n }\n\n try {\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Connecting websocket.'\n );\n await this.webex.internal.mercury.connect();\n LoggerProxy.logger.info(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Websocket connected successfully.'\n );\n } catch (connectError) {\n LoggerProxy.logger.error(\n 'ReconnectionManager:index#reconnectMercuryWebSocket --> Unable to connect to websocket, giving up.',\n connectError\n );\n\n throw connectError;\n }\n }\n}\n"],"mappings":"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"}
@@ -10,19 +10,19 @@ var _constants = require("../constants");
10
10
  var _enums = require("./enums");
11
11
  var _util = _interopRequireDefault(require("../meeting/util"));
12
12
  var canUserStart = function canUserStart(displayHints, userPolicies) {
13
- return (displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_START) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
13
+ return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_START) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
14
14
  };
15
15
  var canUserPause = function canUserPause(displayHints, userPolicies) {
16
- return (displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
16
+ return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
17
17
  };
18
18
  var canUserResume = function canUserResume(displayHints, userPolicies) {
19
- return (displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_RESUME) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
19
+ return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_RESUME) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
20
20
  };
21
21
  var canUserStop = function canUserStop(displayHints, userPolicies) {
22
- return (displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_STOP) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
22
+ return displayHints.includes(_constants.DISPLAY_HINTS.RECORDING_CONTROL_STOP) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
23
23
  };
24
24
  var isPremiseRecordingEnabled = function isPremiseRecordingEnabled(displayHints, userPolicies) {
25
- return (displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);
25
+ return (displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) || displayHints.includes(_constants.DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) && _util.default.selfSupportsFeature(_constants.SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);
26
26
  };
27
27
  var extractLocusId = function extractLocusId(url) {
28
28
  return url === null || url === void 0 ? void 0 : url.split('/').pop();
@@ -1 +1 @@
1
- {"version":3,"names":["_constants","require","_enums","_util","_interopRequireDefault","canUserStart","displayHints","userPolicies","includes","DISPLAY_HINTS","RECORDING_CONTROL_START","PREMISE_RECORDING_CONTROL_START","MeetingUtil","selfSupportsFeature","SELF_POLICY","SUPPORT_NETWORK_BASED_RECORD","canUserPause","RECORDING_CONTROL_PAUSE","PREMISE_RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","PREMISE_RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","PREMISE_RECORDING_CONTROL_STOP","isPremiseRecordingEnabled","extractLocusId","url","split","pop","deriveRecordingStates","action","recording","paused","RecordingAction","Start","Stop","Resume","Pause","Error","concat","_default","exports","default"],"sources":["util.ts"],"sourcesContent":["import {DISPLAY_HINTS, SELF_POLICY} from '../constants';\nimport {RecordingAction} from './enums';\nimport MeetingUtil from '../meeting/util';\n\nconst canUserStart = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START)) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst canUserPause = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE)) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst canUserResume = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst canUserStop = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP)) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst isPremiseRecordingEnabled = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies);\n\nconst extractLocusId = (url: string) => {\n return url?.split('/').pop();\n};\n\nconst deriveRecordingStates = (action: RecordingAction): {recording: boolean; paused: boolean} => {\n let recording;\n let paused;\n\n switch (action) {\n case RecordingAction.Start:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Stop:\n recording = false;\n paused = false;\n break;\n case RecordingAction.Resume:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Pause:\n recording = true;\n paused = true;\n break;\n default:\n throw new Error(`Recording state cannot be derived from invalid action: ${action}`);\n }\n\n return {\n recording,\n paused,\n };\n};\n\nexport default {\n canUserStart,\n canUserPause,\n canUserResume,\n canUserStop,\n isPremiseRecordingEnabled,\n deriveRecordingStates,\n extractLocusId,\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_constants","require","_enums","_util","_interopRequireDefault","canUserStart","displayHints","userPolicies","includes","DISPLAY_HINTS","RECORDING_CONTROL_START","MeetingUtil","selfSupportsFeature","SELF_POLICY","SUPPORT_NETWORK_BASED_RECORD","PREMISE_RECORDING_CONTROL_START","SUPPORT_PREMISE_RECORD","canUserPause","RECORDING_CONTROL_PAUSE","PREMISE_RECORDING_CONTROL_PAUSE","canUserResume","RECORDING_CONTROL_RESUME","PREMISE_RECORDING_CONTROL_RESUME","canUserStop","RECORDING_CONTROL_STOP","PREMISE_RECORDING_CONTROL_STOP","isPremiseRecordingEnabled","extractLocusId","url","split","pop","deriveRecordingStates","action","recording","paused","RecordingAction","Start","Stop","Resume","Pause","Error","concat","_default","exports","default"],"sources":["util.ts"],"sourcesContent":["import {DISPLAY_HINTS, SELF_POLICY} from '../constants';\nimport {RecordingAction} from './enums';\nimport MeetingUtil from '../meeting/util';\n\nconst canUserStart = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_START) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst canUserPause = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_PAUSE) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst canUserResume = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_RESUME) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst canUserStop = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.RECORDING_CONTROL_STOP) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD, userPolicies)) ||\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies));\n\nconst isPremiseRecordingEnabled = (\n displayHints: Array<string>,\n userPolicies: Record<SELF_POLICY, boolean>\n): boolean =>\n (displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_START) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_PAUSE) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_STOP) ||\n displayHints.includes(DISPLAY_HINTS.PREMISE_RECORDING_CONTROL_RESUME)) &&\n MeetingUtil.selfSupportsFeature(SELF_POLICY.SUPPORT_PREMISE_RECORD, userPolicies);\n\nconst extractLocusId = (url: string) => {\n return url?.split('/').pop();\n};\n\nconst deriveRecordingStates = (action: RecordingAction): {recording: boolean; paused: boolean} => {\n let recording;\n let paused;\n\n switch (action) {\n case RecordingAction.Start:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Stop:\n recording = false;\n paused = false;\n break;\n case RecordingAction.Resume:\n recording = true;\n paused = false;\n break;\n case RecordingAction.Pause:\n recording = true;\n paused = true;\n break;\n default:\n throw new Error(`Recording state cannot be derived from invalid action: ${action}`);\n }\n\n return {\n recording,\n paused,\n };\n};\n\nexport default {\n canUserStart,\n canUserPause,\n canUserResume,\n canUserStop,\n isPremiseRecordingEnabled,\n deriveRecordingStates,\n extractLocusId,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_request","_turnDiscovery","_metrics","_constants2","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","exports","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","_createClass2","key","value","sendRoapOK","_this2","_promise","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","concat","sendRoap","locusSelfUrl","selfUrl","mediaId","isMultistream","locusMediaRequest","sendRoapAnswer","ANSWER","sdps","sdp","sendRoapError","ERROR","errorType","sendRoapMediaRequest","tieBreaker","OFFER","headers","sendEmptyMediaId","preferTranscoding","_ref","_mediaConnections$","locus","mediaConnections","updateMediaConnections","roapAnswer","remoteSdp","JSON","parse","_remoteSdp$roapMessag","answerSeq","errorCause","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ROAP_HTTP_RESPONSE_MISSING","doTurnDiscovery","isReconnecting","isForced","generateTurnDiscoveryRequestMessage","handleTurnDiscoveryHttpResponse","httpResponse","abortTurnDiscovery","abort","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery, {TurnDiscoveryResult} from './turnDiscovery';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport {\n type TurnDiscoveryResult,\n type TurnServerInfo,\n type TurnDiscoverySkipReason,\n} from './turnDiscovery';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: TurnDiscovery;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus\n // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,\n // so we don't need to ever send an empty media id here\n const sendEmptyMediaId = false;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n isMultistream: meeting.isMultistream,\n preferTranscoding: !meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n let roapAnswer;\n\n if (mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n const {\n seq: answerSeq,\n messageType,\n sdps,\n errorType,\n errorCause,\n headers,\n } = remoteSdp.roapMessage;\n\n if (messageType === ROAP.ROAP_TYPES.ANSWER) {\n roapAnswer = {\n seq: answerSeq,\n messageType,\n sdp: sdps[0],\n errorType,\n errorCause,\n headers,\n };\n }\n }\n }\n\n if (!roapAnswer) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'ANSWER',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return {locus, roapAnswer};\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n doTurnDiscovery(\n meeting: Meeting,\n isReconnecting: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);\n }\n\n generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean) {\n return this.turnDiscovery.generateTurnDiscoveryRequestMessage(meeting, isForced);\n }\n\n handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object) {\n return this.turnDiscovery.handleTurnDiscoveryHttpResponse(meeting, httpResponse);\n }\n\n abortTurnDiscovery() {\n return this.turnDiscovery.abort();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_webexCore","require","_constants","_loggerProxy","_interopRequireDefault","_request","_turnDiscovery","_metrics","_constants2","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","Roap","exports","_StatelessWebexPlugin","_inherits2","_super","attrs","options","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","roapRequest","RoapRequest","turnDiscovery","TurnDiscovery","_createClass2","key","value","sendRoapOK","_this2","_promise","resolve","then","meeting","webex","meetings","meetingCollection","getByKey","correlationId","roapMessage","messageType","ROAP","ROAP_TYPES","OK","version","ROAP_VERSION","seq","LoggerProxy","logger","log","concat","sendRoap","locusSelfUrl","selfUrl","mediaId","isMultistream","locusMediaRequest","sendRoapAnswer","ANSWER","sdps","sdp","sendRoapError","ERROR","errorType","sendRoapMediaRequest","tieBreaker","OFFER","headers","sendEmptyMediaId","preferTranscoding","_ref","_mediaConnections$","locus","mediaConnections","updateMediaConnections","roapAnswer","remoteSdp","JSON","parse","_remoteSdp$roapMessag","answerSeq","errorCause","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","ROAP_HTTP_RESPONSE_MISSING","doTurnDiscovery","isReconnecting","isForced","generateTurnDiscoveryRequestMessage","handleTurnDiscoveryHttpResponse","httpResponse","abortTurnDiscovery","abort","StatelessWebexPlugin"],"sources":["index.ts"],"sourcesContent":["// @ts-ignore\nimport {StatelessWebexPlugin} from '@webex/webex-core';\n\nimport {ROAP} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport RoapRequest from './request';\nimport TurnDiscovery from './turnDiscovery';\nimport {TurnDiscoveryResult} from './types';\nimport Meeting from '../meeting';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\n\nexport {type TurnDiscoveryResult, type TurnServerInfo, type TurnDiscoverySkipReason} from './types';\n\n/**\n * Roap options\n * @typedef {Object} RoapOptions\n * @property {String} sdp\n * @property {Meeting} meeting\n * @property {Number} seq\n * @property {Number} tieBreaker\n * @property {Boolean} reconnect\n */\n\n/**\n * @typedef {Object} SeqOptions\n * @property {String} correlationId\n * @property {String} mediaId\n * @property {Number} seq\n */\n\n/**\n * @class Roap\n * @export\n * @private\n */\nexport default class Roap extends StatelessWebexPlugin {\n attrs: any;\n lastRoapOffer: any;\n options: any;\n roapHandler: any;\n roapRequest: any;\n turnDiscovery: TurnDiscovery;\n\n /**\n *\n * @param {Object} attrs\n * @param {Object} options\n */\n constructor(attrs: any, options: any) {\n super({}, options);\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.attrs = attrs;\n /**\n * @instance\n * @type {Object}\n * @private\n * @memberof Roap\n */\n this.options = options;\n /**\n * The Roap Request Server Proxy Object\n * @instance\n * @type {RoapRequest}\n * @private\n * @memberof Roap\n */\n // @ts-ignore\n this.roapRequest = new RoapRequest({}, options);\n\n this.turnDiscovery = new TurnDiscovery(this.roapRequest);\n }\n\n /**\n *\n * @param {SeqOptions} options\n * @returns {null}\n * @memberof Roap\n */\n public sendRoapOK(options: any) {\n return Promise.resolve().then(() => {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sending with seq ${options.seq}`);\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(`Roap:index#sendRoapOK --> ROAP OK sent with seq ${options.seq}`);\n });\n });\n }\n\n /**\n * Sends a ROAP answer...\n * @param {SeqOptions} options\n * @param {Boolean} options.audioMuted\n * @param {Boolean} options.videoMuted\n * @returns {Promise}\n * @memberof Roap\n */\n public sendRoapAnswer(options: any) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ANSWER,\n sdps: [options.sdp],\n version: ROAP.ROAP_VERSION,\n seq: options.seq,\n };\n\n return this.roapRequest.sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Sends a ROAP error...\n * @param {Object} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapError(options) {\n // @ts-ignore\n const meeting = this.webex.meetings.meetingCollection.getByKey(\n 'correlationId',\n options.correlationId\n );\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.ERROR,\n version: ROAP.ROAP_VERSION,\n errorType: options.errorType,\n seq: options.seq,\n };\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: options.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(() => {\n LoggerProxy.logger.log(\n `Roap:index#sendRoapError --> ROAP ERROR sent with seq ${options.seq}`\n );\n });\n }\n\n /**\n * sends a roap media request\n * @param {RoapOptions} options\n * @returns {Promise}\n * @memberof Roap\n */\n sendRoapMediaRequest(options: any) {\n const {meeting, seq, sdp, tieBreaker} = options;\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.OFFER,\n sdps: [sdp],\n version: ROAP.ROAP_VERSION,\n seq,\n tieBreaker,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n // The only time we want to send an empty media id is when we are reconnecting, because this way we tell Locus\n // that it needs to create a new confluence, but when reconnecting we always send TURN_DISCOVERY_REQUEST first,\n // so we don't need to ever send an empty media id here\n const sendEmptyMediaId = false;\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n locusSelfUrl: meeting.selfUrl,\n mediaId: sendEmptyMediaId ? '' : meeting.mediaId,\n isMultistream: meeting.isMultistream,\n preferTranscoding: !meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(({locus, mediaConnections}) => {\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n let roapAnswer;\n\n if (mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n const {\n seq: answerSeq,\n messageType,\n sdps,\n errorType,\n errorCause,\n headers,\n } = remoteSdp.roapMessage;\n\n if (messageType === ROAP.ROAP_TYPES.ANSWER) {\n roapAnswer = {\n seq: answerSeq,\n messageType,\n sdp: sdps[0],\n errorType,\n errorCause,\n headers,\n };\n }\n }\n }\n\n if (!roapAnswer) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'ANSWER',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return {locus, roapAnswer};\n });\n }\n\n /**\n * Performs a TURN server discovery procedure, which involves exchanging\n * some roap messages with the server. This exchange has to be done before\n * any other roap messages are sent\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting should be set to true if this is a new\n * media connection just after a reconnection\n * @param {Boolean} [isForced]\n * @returns {Promise}\n */\n doTurnDiscovery(\n meeting: Meeting,\n isReconnecting: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n return this.turnDiscovery.doTurnDiscovery(meeting, isReconnecting, isForced);\n }\n\n generateTurnDiscoveryRequestMessage(meeting: Meeting, isForced: boolean) {\n return this.turnDiscovery.generateTurnDiscoveryRequestMessage(meeting, isForced);\n }\n\n handleTurnDiscoveryHttpResponse(meeting: Meeting, httpResponse: object) {\n return this.turnDiscovery.handleTurnDiscoveryHttpResponse(meeting, httpResponse);\n }\n\n abortTurnDiscovery() {\n return this.turnDiscovery.abort();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,QAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,cAAA,GAAAF,sBAAA,CAAAH,OAAA;AAGA,IAAAM,QAAA,GAAAH,sBAAA,CAAAH,OAAA;AACA,IAAAO,WAAA,GAAAJ,sBAAA,CAAAH,OAAA;AAAsD,SAAAQ,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBAXtD;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAJA,IAKqBC,IAAI,GAAAC,OAAA,CAAAjB,OAAA,0BAAAkB,qBAAA;EAAA,IAAAC,UAAA,CAAAnB,OAAA,EAAAgB,IAAA,EAAAE,qBAAA;EAAA,IAAAE,MAAA,GAAA3B,YAAA,CAAAuB,IAAA;EAQvB;AACF;AACA;AACA;AACA;EACE,SAAAA,KAAYK,KAAU,EAAEC,OAAY,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAAxB,OAAA,QAAAgB,IAAA;IACpCO,KAAA,GAAAH,MAAA,CAAAN,IAAA,OAAM,CAAC,CAAC,EAAEQ,OAAO;IACjB;AACJ;AACA;AACA;AACA;AACA;IALI,IAAAG,gBAAA,CAAAzB,OAAA,MAAA0B,uBAAA,CAAA1B,OAAA,EAAAuB,KAAA;IAAA,IAAAE,gBAAA,CAAAzB,OAAA,MAAA0B,uBAAA,CAAA1B,OAAA,EAAAuB,KAAA;IAAA,IAAAE,gBAAA,CAAAzB,OAAA,MAAA0B,uBAAA,CAAA1B,OAAA,EAAAuB,KAAA;IAAA,IAAAE,gBAAA,CAAAzB,OAAA,MAAA0B,uBAAA,CAAA1B,OAAA,EAAAuB,KAAA;IAAA,IAAAE,gBAAA,CAAAzB,OAAA,MAAA0B,uBAAA,CAAA1B,OAAA,EAAAuB,KAAA;IAAA,IAAAE,gBAAA,CAAAzB,OAAA,MAAA0B,uBAAA,CAAA1B,OAAA,EAAAuB,KAAA;IAMAA,KAAA,CAAKF,KAAK,GAAGA,KAAK;IAClB;AACJ;AACA;AACA;AACA;AACA;IACIE,KAAA,CAAKD,OAAO,GAAGA,OAAO;IACtB;AACJ;AACA;AACA;AACA;AACA;AACA;IACI;IACAC,KAAA,CAAKI,WAAW,GAAG,IAAIC,gBAAW,CAAC,CAAC,CAAC,EAAEN,OAAO,CAAC;IAE/CC,KAAA,CAAKM,aAAa,GAAG,IAAIC,sBAAa,CAACP,KAAA,CAAKI,WAAW,CAAC;IAAC,OAAAJ,KAAA;EAC3D;;EAEA;AACF;AACA;AACA;AACA;AACA;EALE,IAAAQ,aAAA,CAAA/B,OAAA,EAAAgB,IAAA;IAAAgB,GAAA;IAAAC,KAAA,EAMA,SAAAC,WAAkBZ,OAAY,EAAE;MAAA,IAAAa,MAAA;MAC9B,OAAOC,QAAA,CAAApC,OAAA,CAAQqC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,YAAM;QAClC;QACA,IAAMC,OAAO,GAAGJ,MAAI,CAACK,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACfrB,OAAO,CAACsB,aACV,CAAC;QACD,IAAMC,WAAW,GAAG;UAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACC,EAAE;UAC/BC,OAAO,EAAEH,eAAI,CAACI,YAAY;UAC1BC,GAAG,EAAE9B,OAAO,CAAC8B;QACf,CAAC;QAEDC,oBAAW,CAACC,MAAM,CAACC,GAAG,uDAAAC,MAAA,CAAuDlC,OAAO,CAAC8B,GAAG,CAAE,CAAC;QAE3F,OAAOjB,MAAI,CAACR,WAAW,CACpB8B,QAAQ,CAAC;UACRZ,WAAW,EAAXA,WAAW;UACXa,YAAY,EAAEnB,OAAO,CAACoB,OAAO;UAC7BC,OAAO,EAAEtC,OAAO,CAACsC,OAAO;UACxBC,aAAa,EAAEtB,OAAO,CAACsB,aAAa;UACpCC,iBAAiB,EAAEvB,OAAO,CAACuB;QAC7B,CAAC,CAAC,CACDxB,IAAI,CAAC,YAAM;UACVe,oBAAW,CAACC,MAAM,CAACC,GAAG,oDAAAC,MAAA,CAAoDlC,OAAO,CAAC8B,GAAG,CAAE,CAAC;QAC1F,CAAC,CAAC;MACN,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAApB,GAAA;IAAAC,KAAA,EAQA,SAAA8B,eAAsBzC,OAAY,EAAE;MAClC;MACA,IAAMiB,OAAO,GAAG,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACfrB,OAAO,CAACsB,aACV,CAAC;MACD,IAAMC,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACgB,MAAM;QACnCC,IAAI,EAAE,CAAC3C,OAAO,CAAC4C,GAAG,CAAC;QACnBhB,OAAO,EAAEH,eAAI,CAACI,YAAY;QAC1BC,GAAG,EAAE9B,OAAO,CAAC8B;MACf,CAAC;MAED,OAAO,IAAI,CAACzB,WAAW,CAAC8B,QAAQ,CAAC;QAC/BZ,WAAW,EAAXA,WAAW;QACXa,YAAY,EAAEnB,OAAO,CAACoB,OAAO;QAC7BC,OAAO,EAAEtC,OAAO,CAACsC,OAAO;QACxBC,aAAa,EAAEtB,OAAO,CAACsB,aAAa;QACpCC,iBAAiB,EAAEvB,OAAO,CAACuB;MAC7B,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA9B,GAAA;IAAAC,KAAA,EAMA,SAAAkC,cAAc7C,OAAO,EAAE;MACrB;MACA,IAAMiB,OAAO,GAAG,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,iBAAiB,CAACC,QAAQ,CAC5D,eAAe,EACfrB,OAAO,CAACsB,aACV,CAAC;MACD,IAAMC,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACoB,KAAK;QAClClB,OAAO,EAAEH,eAAI,CAACI,YAAY;QAC1BkB,SAAS,EAAE/C,OAAO,CAAC+C,SAAS;QAC5BjB,GAAG,EAAE9B,OAAO,CAAC8B;MACf,CAAC;MAED,OAAO,IAAI,CAACzB,WAAW,CACpB8B,QAAQ,CAAC;QACRZ,WAAW,EAAXA,WAAW;QACXa,YAAY,EAAEnB,OAAO,CAACoB,OAAO;QAC7BC,OAAO,EAAEtC,OAAO,CAACsC,OAAO;QACxBC,aAAa,EAAEtB,OAAO,CAACsB,aAAa;QACpCC,iBAAiB,EAAEvB,OAAO,CAACuB;MAC7B,CAAC,CAAC,CACDxB,IAAI,CAAC,YAAM;QACVe,oBAAW,CAACC,MAAM,CAACC,GAAG,0DAAAC,MAAA,CACqClC,OAAO,CAAC8B,GAAG,CACtE,CAAC;MACH,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAApB,GAAA;IAAAC,KAAA,EAMA,SAAAqC,qBAAqBhD,OAAY,EAAE;MACjC,IAAOiB,OAAO,GAA0BjB,OAAO,CAAxCiB,OAAO;QAAEa,GAAG,GAAqB9B,OAAO,CAA/B8B,GAAG;QAAEc,GAAG,GAAgB5C,OAAO,CAA1B4C,GAAG;QAAEK,UAAU,GAAIjD,OAAO,CAArBiD,UAAU;MACpC,IAAM1B,WAAW,GAAG;QAClBC,WAAW,EAAEC,eAAI,CAACC,UAAU,CAACwB,KAAK;QAClCP,IAAI,EAAE,CAACC,GAAG,CAAC;QACXhB,OAAO,EAAEH,eAAI,CAACI,YAAY;QAC1BC,GAAG,EAAHA,GAAG;QACHmB,UAAU,EAAVA,UAAU;QACVE,OAAO,EAAE,CAAC,6BAA6B,EAAE,mBAAmB;MAC9D,CAAC;;MAED;MACA;MACA;MACA,IAAMC,gBAAgB,GAAG,KAAK;MAE9B,OAAO,IAAI,CAAC/C,WAAW,CACpB8B,QAAQ,CAAC;QACRZ,WAAW,EAAXA,WAAW;QACXa,YAAY,EAAEnB,OAAO,CAACoB,OAAO;QAC7BC,OAAO,EAAEc,gBAAgB,GAAG,EAAE,GAAGnC,OAAO,CAACqB,OAAO;QAChDC,aAAa,EAAEtB,OAAO,CAACsB,aAAa;QACpCc,iBAAiB,EAAE,CAACpC,OAAO,CAACsB,aAAa;QACzCC,iBAAiB,EAAEvB,OAAO,CAACuB;MAC7B,CAAC,CAAC,CACDxB,IAAI,CAAC,UAAAsC,IAAA,EAA+B;QAAA,IAAAC,kBAAA;QAAA,IAA7BC,KAAK,GAAAF,IAAA,CAALE,KAAK;UAAEC,gBAAgB,GAAAH,IAAA,CAAhBG,gBAAgB;QAC7B,IAAIA,gBAAgB,EAAE;UACpBxC,OAAO,CAACyC,sBAAsB,CAACD,gBAAgB,CAAC;QAClD;QAEA,IAAIE,UAAU;QAEd,IAAIF,gBAAgB,aAAhBA,gBAAgB,gBAAAF,kBAAA,GAAhBE,gBAAgB,CAAG,CAAC,CAAC,cAAAF,kBAAA,eAArBA,kBAAA,CAAuBK,SAAS,EAAE;UACpC,IAAMA,SAAS,GAAGC,IAAI,CAACC,KAAK,CAACL,gBAAgB,CAAC,CAAC,CAAC,CAACG,SAAS,CAAC;UAE3D,IAAIA,SAAS,CAACrC,WAAW,EAAE;YACzB,IAAAwC,qBAAA,GAOIH,SAAS,CAACrC,WAAW;cANlByC,SAAS,GAAAD,qBAAA,CAAdjC,GAAG;cACHN,WAAW,GAAAuC,qBAAA,CAAXvC,WAAW;cACXmB,IAAI,GAAAoB,qBAAA,CAAJpB,IAAI;cACJI,SAAS,GAAAgB,qBAAA,CAAThB,SAAS;cACTkB,UAAU,GAAAF,qBAAA,CAAVE,UAAU;cACVd,OAAO,GAAAY,qBAAA,CAAPZ,OAAO;YAGT,IAAI3B,WAAW,KAAKC,eAAI,CAACC,UAAU,CAACgB,MAAM,EAAE;cAC1CiB,UAAU,GAAG;gBACX7B,GAAG,EAAEkC,SAAS;gBACdxC,WAAW,EAAXA,WAAW;gBACXoB,GAAG,EAAED,IAAI,CAAC,CAAC,CAAC;gBACZI,SAAS,EAATA,SAAS;gBACTkB,UAAU,EAAVA,UAAU;gBACVd,OAAO,EAAPA;cACF,CAAC;YACH;UACF;QACF;QAEA,IAAI,CAACQ,UAAU,EAAE;UACfO,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACC,0BAA0B,EAAE;YAC1E/C,aAAa,EAAEL,OAAO,CAACK,aAAa;YACpCE,WAAW,EAAE,QAAQ;YACrBe,aAAa,EAAEtB,OAAO,CAACsB;UACzB,CAAC,CAAC;QACJ;QAEA,OAAO;UAACiB,KAAK,EAALA,KAAK;UAAEG,UAAU,EAAVA;QAAU,CAAC;MAC5B,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAVE;IAAAjD,GAAA;IAAAC,KAAA,EAWA,SAAA2D,gBACErD,OAAgB,EAChBsD,cAAuB,EACvBC,QAAkB,EACY;MAC9B,OAAO,IAAI,CAACjE,aAAa,CAAC+D,eAAe,CAACrD,OAAO,EAAEsD,cAAc,EAAEC,QAAQ,CAAC;IAC9E;EAAC;IAAA9D,GAAA;IAAAC,KAAA,EAED,SAAA8D,oCAAoCxD,OAAgB,EAAEuD,QAAiB,EAAE;MACvE,OAAO,IAAI,CAACjE,aAAa,CAACkE,mCAAmC,CAACxD,OAAO,EAAEuD,QAAQ,CAAC;IAClF;EAAC;IAAA9D,GAAA;IAAAC,KAAA,EAED,SAAA+D,gCAAgCzD,OAAgB,EAAE0D,YAAoB,EAAE;MACtE,OAAO,IAAI,CAACpE,aAAa,CAACmE,+BAA+B,CAACzD,OAAO,EAAE0D,YAAY,CAAC;IAClF;EAAC;IAAAjE,GAAA;IAAAC,KAAA,EAED,SAAAiE,mBAAA,EAAqB;MACnB,OAAO,IAAI,CAACrE,aAAa,CAACsE,KAAK,CAAC,CAAC;IACnC;EAAC;EAAA,OAAAnF,IAAA;AAAA,EAtP+BoF,+BAAoB"}
@@ -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 _types = require("./types");
21
22
  // @ts-ignore - Types not available for @webex/common
22
23
 
23
24
  var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
@@ -27,15 +28,7 @@ var TURN_DISCOVERY_TIMEOUT = 10; // in seconds
27
28
  // so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection
28
29
  // and do the SDP offer with seq=1
29
30
  var TURN_DISCOVERY_SEQ = 0;
30
- var TurnDiscoverySkipReason = {
31
- missingHttpResponse: 'missing http response',
32
- // when we asked for the TURN discovery response to be in the http response, but it wasn't there
33
- reachability: 'reachability',
34
- // when udp reachability to public clusters is ok, so we don't need TURN (this doens't apply when joinWithMedia() is used)
35
- alreadyInProgress: 'already in progress' // when we try to start TURN discovery while it's already in progress
36
- };
37
31
 
38
- // used when TURN discovery is not skipped
39
32
  /**
40
33
  * Handles the process of finding out TURN server information from Linus.
41
34
  * This is achieved by sending a TURN_DISCOVERY_REQUEST.
@@ -54,11 +47,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
54
47
  (0, _defineProperty2.default)(this, "turnInfo", void 0);
55
48
  (0, _defineProperty2.default)(this, "responseTimer", void 0);
56
49
  this.roapRequest = roapRequest;
57
- this.turnInfo = {
58
- url: '',
59
- username: '',
60
- password: ''
61
- };
50
+ this.resetTurnInfo();
62
51
  }
63
52
 
64
53
  /**
@@ -69,6 +58,19 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
69
58
  * @memberof Roap
70
59
  */
71
60
  (0, _createClass2.default)(TurnDiscovery, [{
61
+ key: "resetTurnInfo",
62
+ value:
63
+ /** Resets the turnInfo structure to the defaults
64
+ * @returns {void}
65
+ */
66
+ function resetTurnInfo() {
67
+ this.turnInfo = {
68
+ urls: [],
69
+ username: '',
70
+ password: ''
71
+ };
72
+ }
73
+ }, {
72
74
  key: "waitForTurnDiscoveryResponse",
73
75
  value: function waitForTurnDiscoveryResponse() {
74
76
  if (!this.defer) {
@@ -108,31 +110,47 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
108
110
  }
109
111
  var expectedHeaders = [{
110
112
  headerName: 'x-cisco-turn-url',
111
- field: 'url'
113
+ field: 'urls',
114
+ multipleAllowed: true
112
115
  }, {
113
116
  headerName: 'x-cisco-turn-username',
114
- field: 'username'
117
+ field: 'username',
118
+ multipleAllowed: false
115
119
  }, {
116
120
  headerName: 'x-cisco-turn-password',
117
- field: 'password'
121
+ field: 'password',
122
+ multipleAllowed: false
118
123
  }];
119
- var foundHeaders = 0;
124
+ var foundHeaders = {};
125
+ this.resetTurnInfo();
120
126
  headers === null || headers === void 0 ? void 0 : headers.forEach(function (receivedHeader) {
121
127
  // check if it matches any of our expected headers
122
128
  expectedHeaders.forEach(function (expectedHeader) {
123
129
  if (receivedHeader.startsWith("".concat(expectedHeader.headerName, "="))) {
124
- _this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);
125
- foundHeaders += 1;
130
+ foundHeaders[expectedHeader.headerName] = true;
131
+ var headerValue = receivedHeader.substring(expectedHeader.headerName.length + 1);
132
+ if (expectedHeader.multipleAllowed) {
133
+ _this.turnInfo[expectedHeader.field].push(headerValue);
134
+ } else {
135
+ // just store the last one we find
136
+ _this.turnInfo[expectedHeader.field] = headerValue;
137
+ }
126
138
  }
127
139
  });
128
140
  });
129
141
  clearTimeout(this.responseTimer);
130
142
  this.responseTimer = undefined;
131
- if (foundHeaders !== expectedHeaders.length) {
143
+ if (expectedHeaders.some(function (header) {
144
+ return !foundHeaders[header.headerName];
145
+ })) {
132
146
  _loggerProxy.default.logger.warn("Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ".concat(from, ": ").concat((0, _stringify.default)(headers)));
133
147
  this.defer.reject(new Error("TURN_DISCOVERY_RESPONSE ".concat(from, " missing some headers: ").concat((0, _stringify.default)(headers))));
134
148
  } else {
135
- _loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ".concat(from, ", url=").concat(this.turnInfo.url));
149
+ _loggerProxy.default.logger.info("Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ".concat(from, ", urls=").concat(this.turnInfo.urls));
150
+ this.turnInfo.urls = this.turnInfo.urls.filter(function (url) {
151
+ return url !== '';
152
+ }); // remove empty urls, we might get them if we land on video-mesh nodes (VMN)
153
+
136
154
  this.defer.resolve({
137
155
  isOkRequired: !(headers !== null && headers !== void 0 && headers.includes('noOkInTransaction'))
138
156
  });
@@ -163,7 +181,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
163
181
  _loggerProxy.default.logger.warn('Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> TURN discovery already in progress');
164
182
  return _context.abrupt("return", {
165
183
  roapMessage: undefined,
166
- turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
184
+ turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.alreadyInProgress
167
185
  });
168
186
  case 3:
169
187
  if (isForced) {
@@ -263,7 +281,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
263
281
  }
264
282
  return _context2.abrupt("return", {
265
283
  turnServerInfo: undefined,
266
- turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
284
+ turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.missingHttpResponse
267
285
  });
268
286
  case 5:
269
287
  _context2.prev = 5;
@@ -274,7 +292,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
274
292
  }
275
293
  return _context2.abrupt("return", {
276
294
  turnServerInfo: undefined,
277
- turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse
295
+ turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.missingHttpResponse
278
296
  });
279
297
  case 9:
280
298
  this.handleTurnDiscoveryResponse(roapMessage, 'in http response');
@@ -386,7 +404,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
386
404
  _loggerProxy.default.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
387
405
  return _promise.default.resolve({
388
406
  turnServerInfo: undefined,
389
- turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress
407
+ turnDiscoverySkippedReason: _types.TurnDiscoverySkipReason.alreadyInProgress
390
408
  });
391
409
  }
392
410
  this.defer = new _common.Defer();
@@ -481,7 +499,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
481
499
  break;
482
500
  }
483
501
  _loggerProxy.default.logger.info('Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery');
484
- return _context4.abrupt("return", TurnDiscoverySkipReason.reachability);
502
+ return _context4.abrupt("return", _types.TurnDiscoverySkipReason.reachability);
485
503
  case 6:
486
504
  return _context4.abrupt("return", undefined);
487
505
  case 7:
@@ -576,7 +594,7 @@ var TurnDiscovery = exports.default = /*#__PURE__*/function () {
576
594
  return this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);
577
595
  case 9:
578
596
  turnDiscoveryResult = _context6.sent;
579
- if (!(turnDiscoveryResult.turnDiscoverySkippedReason !== TurnDiscoverySkipReason.missingHttpResponse)) {
597
+ if (!(turnDiscoveryResult.turnDiscoverySkippedReason !== _types.TurnDiscoverySkipReason.missingHttpResponse)) {
580
598
  _context6.next = 12;
581
599
  break;
582
600
  }