@webex/plugin-meetings 3.6.0 → 3.7.0-ipv6-multi-turn-urls.2

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 (332) hide show
  1. package/README.md +2 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/common/errors/join-webinar-error.js +50 -0
  5. package/dist/common/errors/join-webinar-error.js.map +1 -0
  6. package/dist/config.js +4 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +54 -4
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +1 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/index.js +10 -3
  13. package/dist/controls-options-manager/index.js.map +1 -1
  14. package/dist/controls-options-manager/types.js.map +1 -1
  15. package/dist/controls-options-manager/util.js +12 -0
  16. package/dist/controls-options-manager/util.js.map +1 -1
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/interpretation/index.js +1 -1
  20. package/dist/interpretation/siLanguage.js +1 -1
  21. package/dist/locus-info/controlsUtils.js +28 -4
  22. package/dist/locus-info/controlsUtils.js.map +1 -1
  23. package/dist/locus-info/fullState.js +2 -1
  24. package/dist/locus-info/fullState.js.map +1 -1
  25. package/dist/locus-info/index.js +61 -3
  26. package/dist/locus-info/index.js.map +1 -1
  27. package/dist/locus-info/parser.js +5 -1
  28. package/dist/locus-info/parser.js.map +1 -1
  29. package/dist/media/index.js +29 -1
  30. package/dist/media/index.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +29 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +807 -540
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +2 -6
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +5 -2
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +21 -29
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/util.js +98 -61
  42. package/dist/meeting/util.js.map +1 -1
  43. package/dist/meeting-info/meeting-info-v2.js +80 -17
  44. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  45. package/dist/meetings/index.js +29 -2
  46. package/dist/meetings/index.js.map +1 -1
  47. package/dist/members/index.js +3 -2
  48. package/dist/members/index.js.map +1 -1
  49. package/dist/members/util.js +13 -7
  50. package/dist/members/util.js.map +1 -1
  51. package/dist/metrics/constants.js +4 -1
  52. package/dist/metrics/constants.js.map +1 -1
  53. package/dist/multistream/remoteMedia.js +34 -15
  54. package/dist/multistream/remoteMedia.js.map +1 -1
  55. package/dist/reachability/clusterReachability.js +12 -15
  56. package/dist/reachability/clusterReachability.js.map +1 -1
  57. package/dist/reachability/index.js +433 -136
  58. package/dist/reachability/index.js.map +1 -1
  59. package/dist/{rtcMetrics/constants.js → reachability/reachability.types.js} +1 -5
  60. package/dist/reachability/reachability.types.js.map +1 -0
  61. package/dist/reachability/request.js +23 -9
  62. package/dist/reachability/request.js.map +1 -1
  63. package/dist/recording-controller/enums.js +8 -4
  64. package/dist/recording-controller/enums.js.map +1 -1
  65. package/dist/recording-controller/index.js +18 -9
  66. package/dist/recording-controller/index.js.map +1 -1
  67. package/dist/recording-controller/util.js +13 -9
  68. package/dist/recording-controller/util.js.map +1 -1
  69. package/dist/roap/index.js +5 -7
  70. package/dist/roap/index.js.map +1 -1
  71. package/dist/roap/request.js +45 -79
  72. package/dist/roap/request.js.map +1 -1
  73. package/dist/roap/turnDiscovery.js +3 -6
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/{common/errors/parameter.d.ts → types/common/errors/join-webinar-error.d.ts} +4 -5
  76. package/dist/types/config.d.ts +3 -0
  77. package/dist/types/constants.d.ts +43 -0
  78. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  79. package/dist/types/controls-options-manager/index.d.ts +2 -1
  80. package/dist/types/controls-options-manager/types.d.ts +2 -0
  81. package/dist/types/index.d.ts +2 -1
  82. package/dist/types/locus-info/index.d.ts +9 -0
  83. package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
  84. package/dist/types/meeting/index.d.ts +34 -3
  85. package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
  86. package/dist/types/meeting/muteState.d.ts +2 -1
  87. package/dist/types/meeting/request.d.ts +2 -2
  88. package/dist/types/meeting/util.d.ts +2 -2
  89. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  90. package/dist/types/meetings/index.d.ts +13 -1
  91. package/dist/types/members/index.d.ts +2 -1
  92. package/dist/types/members/util.d.ts +5 -1
  93. package/dist/types/metrics/constants.d.ts +3 -0
  94. package/dist/types/multistream/remoteMedia.d.ts +1 -0
  95. package/dist/types/reachability/clusterReachability.d.ts +1 -10
  96. package/dist/types/reachability/index.d.ts +74 -35
  97. package/dist/types/reachability/reachability.types.d.ts +64 -0
  98. package/dist/types/reachability/request.d.ts +5 -1
  99. package/dist/types/recording-controller/enums.d.ts +5 -2
  100. package/dist/types/recording-controller/index.d.ts +1 -0
  101. package/dist/types/recording-controller/util.d.ts +2 -1
  102. package/dist/types/roap/request.d.ts +1 -13
  103. package/dist/webinar/index.js +382 -19
  104. package/dist/webinar/index.js.map +1 -1
  105. package/package.json +22 -22
  106. package/src/common/errors/join-webinar-error.ts +24 -0
  107. package/src/config.ts +3 -0
  108. package/src/constants.ts +52 -0
  109. package/src/controls-options-manager/enums.ts +1 -0
  110. package/src/controls-options-manager/index.ts +19 -2
  111. package/src/controls-options-manager/types.ts +2 -0
  112. package/src/controls-options-manager/util.ts +12 -0
  113. package/src/index.ts +2 -0
  114. package/src/locus-info/controlsUtils.ts +46 -2
  115. package/src/locus-info/fullState.ts +1 -0
  116. package/src/locus-info/index.ts +60 -0
  117. package/src/locus-info/parser.ts +8 -1
  118. package/src/media/index.ts +15 -0
  119. package/src/meeting/in-meeting-actions.ts +58 -0
  120. package/src/meeting/index.ts +268 -32
  121. package/src/meeting/locusMediaRequest.ts +4 -8
  122. package/src/meeting/muteState.ts +6 -2
  123. package/src/meeting/request.ts +4 -11
  124. package/src/meeting/util.ts +31 -6
  125. package/src/meeting-info/meeting-info-v2.ts +63 -0
  126. package/src/meetings/index.ts +74 -40
  127. package/src/members/index.ts +4 -2
  128. package/src/members/util.ts +4 -1
  129. package/src/metrics/constants.ts +3 -0
  130. package/src/multistream/remoteMedia.ts +33 -15
  131. package/src/reachability/clusterReachability.ts +5 -15
  132. package/src/reachability/index.ts +285 -77
  133. package/src/reachability/reachability.types.ts +85 -0
  134. package/src/reachability/request.ts +55 -30
  135. package/src/recording-controller/enums.ts +5 -2
  136. package/src/recording-controller/index.ts +17 -4
  137. package/src/recording-controller/util.ts +20 -5
  138. package/src/roap/index.ts +4 -5
  139. package/src/roap/request.ts +32 -44
  140. package/src/roap/turnDiscovery.ts +2 -4
  141. package/src/webinar/index.ts +223 -17
  142. package/test/unit/spec/controls-options-manager/index.js +56 -32
  143. package/test/unit/spec/controls-options-manager/util.js +44 -0
  144. package/test/unit/spec/locus-info/controlsUtils.js +80 -4
  145. package/test/unit/spec/locus-info/index.js +88 -2
  146. package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
  147. package/test/unit/spec/meeting/index.js +407 -82
  148. package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
  149. package/test/unit/spec/meeting/muteState.js +8 -4
  150. package/test/unit/spec/meeting/request.js +3 -26
  151. package/test/unit/spec/meeting/utils.js +71 -14
  152. package/test/unit/spec/meeting-info/meetinginfov2.js +42 -0
  153. package/test/unit/spec/meetings/index.js +41 -6
  154. package/test/unit/spec/members/index.js +25 -2
  155. package/test/unit/spec/members/request.js +37 -3
  156. package/test/unit/spec/members/utils.js +110 -1
  157. package/test/unit/spec/multistream/remoteMedia.ts +27 -9
  158. package/test/unit/spec/reachability/clusterReachability.ts +7 -0
  159. package/test/unit/spec/reachability/index.ts +265 -1
  160. package/test/unit/spec/reachability/request.js +56 -15
  161. package/test/unit/spec/recording-controller/index.js +61 -5
  162. package/test/unit/spec/recording-controller/util.js +39 -3
  163. package/test/unit/spec/roap/index.ts +1 -1
  164. package/test/unit/spec/roap/request.ts +51 -109
  165. package/test/unit/spec/roap/turnDiscovery.ts +202 -147
  166. package/test/unit/spec/webinar/index.ts +443 -14
  167. package/dist/annotation/annotation.types.d.ts +0 -42
  168. package/dist/annotation/constants.d.ts +0 -31
  169. package/dist/annotation/index.d.ts +0 -117
  170. package/dist/breakouts/breakout.d.ts +0 -8
  171. package/dist/breakouts/collection.d.ts +0 -5
  172. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  173. package/dist/breakouts/events.d.ts +0 -8
  174. package/dist/breakouts/index.d.ts +0 -5
  175. package/dist/breakouts/request.d.ts +0 -22
  176. package/dist/breakouts/utils.d.ts +0 -15
  177. package/dist/common/browser-detection.d.ts +0 -9
  178. package/dist/common/collection.d.ts +0 -48
  179. package/dist/common/config.d.ts +0 -2
  180. package/dist/common/errors/captcha-error.d.ts +0 -15
  181. package/dist/common/errors/intent-to-join.d.ts +0 -16
  182. package/dist/common/errors/join-meeting.d.ts +0 -17
  183. package/dist/common/errors/media.d.ts +0 -15
  184. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  185. package/dist/common/errors/password-error.d.ts +0 -15
  186. package/dist/common/errors/permission.d.ts +0 -14
  187. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  188. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  189. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  190. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  191. package/dist/common/errors/reconnection-in-progress.js +0 -33
  192. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  193. package/dist/common/errors/reconnection.d.ts +0 -15
  194. package/dist/common/errors/stats.d.ts +0 -15
  195. package/dist/common/errors/webex-errors.d.ts +0 -93
  196. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  197. package/dist/common/events/events-scope.d.ts +0 -17
  198. package/dist/common/events/events.d.ts +0 -12
  199. package/dist/common/events/trigger-proxy.d.ts +0 -2
  200. package/dist/common/events/util.d.ts +0 -2
  201. package/dist/common/logs/logger-config.d.ts +0 -2
  202. package/dist/common/logs/logger-proxy.d.ts +0 -2
  203. package/dist/common/logs/request.d.ts +0 -36
  204. package/dist/common/queue.d.ts +0 -34
  205. package/dist/config.d.ts +0 -72
  206. package/dist/constants.d.ts +0 -1088
  207. package/dist/controls-options-manager/constants.d.ts +0 -4
  208. package/dist/controls-options-manager/enums.d.ts +0 -15
  209. package/dist/controls-options-manager/index.d.ts +0 -136
  210. package/dist/controls-options-manager/types.d.ts +0 -43
  211. package/dist/controls-options-manager/util.d.ts +0 -1
  212. package/dist/index.d.ts +0 -7
  213. package/dist/interceptors/index.d.ts +0 -2
  214. package/dist/interceptors/locusRetry.d.ts +0 -27
  215. package/dist/interpretation/collection.d.ts +0 -5
  216. package/dist/interpretation/index.d.ts +0 -5
  217. package/dist/interpretation/siLanguage.d.ts +0 -5
  218. package/dist/locus-info/controlsUtils.d.ts +0 -2
  219. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  220. package/dist/locus-info/fullState.d.ts +0 -2
  221. package/dist/locus-info/hostUtils.d.ts +0 -2
  222. package/dist/locus-info/index.d.ts +0 -322
  223. package/dist/locus-info/infoUtils.d.ts +0 -2
  224. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  225. package/dist/locus-info/parser.d.ts +0 -272
  226. package/dist/locus-info/selfUtils.d.ts +0 -2
  227. package/dist/media/index.d.ts +0 -34
  228. package/dist/media/properties.d.ts +0 -93
  229. package/dist/media/util.d.ts +0 -2
  230. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  231. package/dist/mediaQualityMetrics/config.js +0 -502
  232. package/dist/mediaQualityMetrics/config.js.map +0 -1
  233. package/dist/meeting/effectsState.js +0 -260
  234. package/dist/meeting/effectsState.js.map +0 -1
  235. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  236. package/dist/meeting/index.d.ts +0 -1825
  237. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  238. package/dist/meeting/muteState.d.ts +0 -178
  239. package/dist/meeting/request.d.ts +0 -295
  240. package/dist/meeting/request.type.d.ts +0 -11
  241. package/dist/meeting/state.d.ts +0 -9
  242. package/dist/meeting/util.d.ts +0 -119
  243. package/dist/meeting/voicea-meeting.d.ts +0 -16
  244. package/dist/meeting-info/collection.d.ts +0 -20
  245. package/dist/meeting-info/index.d.ts +0 -69
  246. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  247. package/dist/meeting-info/request.d.ts +0 -22
  248. package/dist/meeting-info/util.d.ts +0 -2
  249. package/dist/meeting-info/utilv2.d.ts +0 -2
  250. package/dist/meetings/collection.d.ts +0 -40
  251. package/dist/meetings/index.d.ts +0 -390
  252. package/dist/meetings/meetings.types.d.ts +0 -4
  253. package/dist/meetings/request.d.ts +0 -27
  254. package/dist/meetings/util.d.ts +0 -18
  255. package/dist/member/index.d.ts +0 -160
  256. package/dist/member/member.types.js +0 -17
  257. package/dist/member/member.types.js.map +0 -1
  258. package/dist/member/types.d.ts +0 -32
  259. package/dist/member/util.d.ts +0 -2
  260. package/dist/members/collection.d.ts +0 -29
  261. package/dist/members/index.d.ts +0 -353
  262. package/dist/members/request.d.ts +0 -114
  263. package/dist/members/types.d.ts +0 -25
  264. package/dist/members/util.d.ts +0 -215
  265. package/dist/metrics/config.js +0 -276
  266. package/dist/metrics/config.js.map +0 -1
  267. package/dist/metrics/constants.d.ts +0 -70
  268. package/dist/metrics/index.d.ts +0 -45
  269. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  270. package/dist/multistream/receiveSlot.d.ts +0 -68
  271. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  272. package/dist/multistream/remoteMedia.d.ts +0 -72
  273. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  274. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  275. package/dist/multistream/sendSlotManager.d.ts +0 -69
  276. package/dist/networkQualityMonitor/index.d.ts +0 -70
  277. package/dist/networkQualityMonitor/index.js +0 -221
  278. package/dist/networkQualityMonitor/index.js.map +0 -1
  279. package/dist/peer-connection-manager/index.js +0 -671
  280. package/dist/peer-connection-manager/index.js.map +0 -1
  281. package/dist/peer-connection-manager/util.js +0 -109
  282. package/dist/peer-connection-manager/util.js.map +0 -1
  283. package/dist/personal-meeting-room/index.d.ts +0 -47
  284. package/dist/personal-meeting-room/request.d.ts +0 -14
  285. package/dist/personal-meeting-room/util.d.ts +0 -2
  286. package/dist/reachability/clusterReachability.d.ts +0 -109
  287. package/dist/reachability/index.d.ts +0 -105
  288. package/dist/reachability/request.d.ts +0 -39
  289. package/dist/reachability/util.d.ts +0 -8
  290. package/dist/reactions/constants.d.ts +0 -3
  291. package/dist/reactions/reactions.d.ts +0 -4
  292. package/dist/reactions/reactions.type.d.ts +0 -52
  293. package/dist/reconnection-manager/index.d.ts +0 -136
  294. package/dist/recording-controller/enums.d.ts +0 -7
  295. package/dist/recording-controller/index.d.ts +0 -207
  296. package/dist/recording-controller/util.d.ts +0 -14
  297. package/dist/roap/collection.js +0 -62
  298. package/dist/roap/collection.js.map +0 -1
  299. package/dist/roap/handler.js +0 -275
  300. package/dist/roap/handler.js.map +0 -1
  301. package/dist/roap/index.d.ts +0 -86
  302. package/dist/roap/request.d.ts +0 -39
  303. package/dist/roap/state.js +0 -126
  304. package/dist/roap/state.js.map +0 -1
  305. package/dist/roap/turnDiscovery.d.ts +0 -155
  306. package/dist/roap/util.js +0 -75
  307. package/dist/roap/util.js.map +0 -1
  308. package/dist/rtcMetrics/constants.d.ts +0 -4
  309. package/dist/rtcMetrics/constants.js.map +0 -1
  310. package/dist/rtcMetrics/index.d.ts +0 -61
  311. package/dist/rtcMetrics/index.js +0 -197
  312. package/dist/rtcMetrics/index.js.map +0 -1
  313. package/dist/statsAnalyzer/global.d.ts +0 -36
  314. package/dist/statsAnalyzer/global.js +0 -126
  315. package/dist/statsAnalyzer/global.js.map +0 -1
  316. package/dist/statsAnalyzer/index.d.ts +0 -217
  317. package/dist/statsAnalyzer/index.js +0 -1013
  318. package/dist/statsAnalyzer/index.js.map +0 -1
  319. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  320. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  321. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  322. package/dist/transcription/index.d.ts +0 -64
  323. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  324. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  325. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  326. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  327. package/dist/types/rtcMetrics/index.d.ts +0 -71
  328. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  329. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  330. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  331. package/dist/webinar/collection.d.ts +0 -16
  332. package/dist/webinar/index.d.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"names":["_common","require","_metrics","_interopRequireDefault","_constants","_loggerProxy","_constants2","_util","TURN_DISCOVERY_TIMEOUT","TURN_DISCOVERY_SEQ","TurnDiscoverySkipReason","missingHttpResponse","reachability","alreadyInProgress","TurnDiscovery","exports","default","roapRequest","_classCallCheck2","_defineProperty2","turnInfo","url","username","password","_createClass2","key","value","waitForTurnDiscoveryResponse","defer","LoggerProxy","logger","warn","_promise","reject","Error","responseTimer","setTimeout","concat","info","promise","handleTurnDiscoveryResponse","roapMessage","from","_this","headers","messageType","ROAP","ROAP_TYPES","TURN_DISCOVERY_RESPONSE","_stringify","expectedHeaders","headerName","field","foundHeaders","forEach","receivedHeader","expectedHeader","startsWith","substring","length","clearTimeout","undefined","resolve","isOkRequired","includes","_generateTurnDiscoveryRequestMessage","_asyncToGenerator2","_regenerator","mark","_callee","meeting","isForced","turnDiscoverySkippedReason","wrap","_callee$","_context","prev","next","abrupt","getSkipReason","sent","Defer","TURN_DISCOVERY_REQUEST","version","ROAP_VERSION","seq","stop","generateTurnDiscoveryRequestMessage","_x","_x2","apply","arguments","handleTurnDiscoveryFailure","error","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","TURN_DISCOVERY_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","reason","message","stack","turnServerInfo","_handleTurnDiscoveryHttpResponse","_callee2","httpResponse","_yield$this$defer$pro","_callee2$","_context2","parseHttpTurnDiscoveryResponse","sendRoapOK","t0","abort","handleTurnDiscoveryHttpResponse","_x3","_x4","_httpResponse$mediaCo","_httpResponse$mediaCo2","turnDiscoveryResponse","mediaConnections","remoteSdp","JSON","parse","_remoteSdp$roapMessag","errorType","errorCause","ROAP_HTTP_RESPONSE_MISSING","isMultistream","sendRoapTurnDiscoveryRequest","isReconnecting","_this2","sendRoap","locusSelfUrl","selfUrl","mediaId","meetingId","id","locusMediaRequest","ipVersion","MeetingUtil","getIpVersion","webex","then","_ref","_callee3","response","_callee3$","_context3","updateMediaConnections","_x5","TURN_DISCOVERY_REQUIRES_OK","OK","_getSkipReason","_callee4","isAnyPublicClusterReachable","_callee4$","_context4","meetings","_x6","_isSkipped","_callee5","skipReason","_callee5$","_context5","isSkipped","_x7","_doTurnDiscovery","_callee6","turnDiscoveryResult","_yield$this$waitForTu","_callee6$","_context6","doTurnDiscovery","_x8","_x9","_x10"],"sources":["turnDiscovery.ts"],"sourcesContent":["// @ts-ignore - Types not available for @webex/common\nimport {Defer} from '@webex/common';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, Enum} from '../constants';\n\nimport RoapRequest from './request';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\n\nconst TURN_DISCOVERY_TIMEOUT = 10; // in seconds\n\n// Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0\n// and this is handy for us, because TURN discovery is always done before the first SDP exchange,\n// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection\n// and do the SDP offer with seq=1\nconst TURN_DISCOVERY_SEQ = 0;\n\nconst TurnDiscoverySkipReason = {\n missingHttpResponse: 'missing http response', // when we asked for the TURN discovery response to be in the http response, but it wasn't there\n reachability: 'reachability', // when udp reachability to public clusters is ok, so we don't need TURN (this doens't apply when joinWithMedia() is used)\n alreadyInProgress: 'already in progress', // when we try to start TURN discovery while it's already in progress\n} as const;\n\nexport type TurnDiscoverySkipReason =\n | Enum<typeof TurnDiscoverySkipReason> // this is a kind of FYI, because in practice typescript will infer the type of TurnDiscoverySkipReason as a string\n | string // used in case of errors, contains the error message\n | undefined; // used when TURN discovery is not skipped\n\nexport type TurnServerInfo = {\n url: string;\n username: string;\n password: string;\n};\n\nexport type TurnDiscoveryResult = {\n turnServerInfo?: TurnServerInfo;\n turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n};\n\n/**\n * Handles the process of finding out TURN server information from Linus.\n * This is achieved by sending a TURN_DISCOVERY_REQUEST.\n */\nexport default class TurnDiscovery {\n private roapRequest: RoapRequest;\n\n private defer?: Defer; // used for waiting for the response\n\n private turnInfo: TurnServerInfo;\n\n private responseTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * Constructor\n *\n * @param {RoapRequest} roapRequest\n */\n constructor(roapRequest: RoapRequest) {\n this.roapRequest = roapRequest;\n this.turnInfo = {\n url: '',\n username: '',\n password: '',\n };\n }\n\n /**\n * waits for TURN_DISCOVERY_RESPONSE message to arrive\n *\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private waitForTurnDiscoveryResponse(): Promise<{isOkRequired: boolean}> {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'\n );\n\n return Promise.reject(\n new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')\n );\n }\n\n const {defer} = this;\n\n this.responseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`\n );\n\n defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));\n }, TURN_DISCOVERY_TIMEOUT * 1000);\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'\n );\n\n return defer.promise;\n }\n\n /**\n * Handles TURN_DISCOVERY_RESPONSE roap message. Use it if the roap message comes over the websocket,\n * otherwise use handleTurnDiscoveryHttpResponse() if it comes in the http response.\n *\n * @param {Object} roapMessage\n * @param {string} from string to indicate how we got the response (used just for logging)\n * @returns {void}\n * @public\n * @memberof Roap\n */\n public handleTurnDiscoveryResponse(roapMessage: any, from: string) {\n const {headers} = roapMessage;\n\n if (!this.defer) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response ${from}`\n );\n\n return;\n }\n\n if (roapMessage.messageType !== ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} has unexpected messageType: ${JSON.stringify(\n roapMessage\n )}`\n )\n );\n }\n\n const expectedHeaders = [\n {headerName: 'x-cisco-turn-url', field: 'url'},\n {headerName: 'x-cisco-turn-username', field: 'username'},\n {headerName: 'x-cisco-turn-password', field: 'password'},\n ];\n\n let foundHeaders = 0;\n\n headers?.forEach((receivedHeader) => {\n // check if it matches any of our expected headers\n expectedHeaders.forEach((expectedHeader) => {\n if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {\n this.turnInfo[expectedHeader.field] = receivedHeader.substring(\n expectedHeader.headerName.length + 1\n );\n foundHeaders += 1;\n }\n });\n });\n\n clearTimeout(this.responseTimer);\n this.responseTimer = undefined;\n\n if (foundHeaders !== expectedHeaders.length) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ${from}: ${JSON.stringify(\n headers\n )}`\n );\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} missing some headers: ${JSON.stringify(headers)}`\n )\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ${from}, url=${this.turnInfo.url}`\n );\n\n this.defer.resolve({isOkRequired: !headers?.includes('noOkInTransaction')});\n }\n }\n\n /**\n * Generates TURN_DISCOVERY_REQUEST roap message. When this method returns a roapMessage, it means that a TURN discovery process has started.\n * It needs be ended by calling handleTurnDiscoveryHttpResponse() once you get a response from the backend. If you don't get any response\n * or want to abort, you need to call abort().\n *\n * @param {Meeting} meeting\n * @param {boolean} isForced\n * @returns {Object}\n */\n public async generateTurnDiscoveryRequestMessage(\n meeting: Meeting,\n isForced: boolean\n ): Promise<{roapMessage?: object; turnDiscoverySkippedReason: TurnDiscoverySkipReason}> {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> TURN discovery already in progress'\n );\n\n return {\n roapMessage: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress,\n };\n }\n\n let turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n\n if (!isForced) {\n turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n }\n\n if (turnDiscoverySkippedReason) {\n return {roapMessage: undefined, turnDiscoverySkippedReason};\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> generated TURN_DISCOVERY_REQUEST message'\n );\n\n return {roapMessage, turnDiscoverySkippedReason: undefined};\n }\n\n /**\n * Handles any errors that occur during TURN discovery without re-throwing them.\n *\n * @param {Meeting} meeting\n * @param {Error} error\n * @returns {TurnDiscoveryResult}\n */\n private handleTurnDiscoveryFailure(meeting: Meeting, error: Error): TurnDiscoveryResult {\n // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${error}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n return {turnServerInfo: undefined, turnDiscoverySkippedReason: `failure: ${error.message}`};\n }\n\n /**\n * Handles TURN_DISCOVERY_RESPONSE roap message that came in http response. If the response is not valid,\n * it returns an object with turnServerInfo set to undefined. In that case you need to call abort()\n * to end the TURN discovery process.\n *\n * @param {Meeting} meeting\n * @param {Object|undefined} httpResponse can be undefined to indicate that we didn't get the response\n * @returns {Promise<TurnDiscoveryResult>}\n * @memberof Roap\n */\n public async handleTurnDiscoveryHttpResponse(\n meeting: Meeting,\n httpResponse?: object\n ): Promise<TurnDiscoveryResult> {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#handleTurnDiscoveryHttpResponse --> unexpected http response, TURN discovery is not in progress'\n );\n\n throw new Error(\n 'handleTurnDiscoveryHttpResponse() called before generateTurnDiscoveryRequestMessage()'\n );\n }\n\n if (httpResponse === undefined) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse,\n };\n }\n\n try {\n const roapMessage = this.parseHttpTurnDiscoveryResponse(meeting, httpResponse);\n\n if (!roapMessage) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse,\n };\n }\n\n this.handleTurnDiscoveryResponse(roapMessage, 'in http response');\n\n const {isOkRequired} = await this.defer.promise;\n\n if (isOkRequired) {\n await this.sendRoapOK(meeting);\n }\n\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n } catch (error) {\n this.abort();\n\n return this.handleTurnDiscoveryFailure(meeting, error);\n }\n }\n\n /**\n * Aborts current TURN discovery. This method needs to be called if you called generateTurnDiscoveryRequestMessage(),\n * but then never got any response from the server.\n * @returns {void}\n */\n public abort() {\n if (this.defer) {\n this.defer.reject(new Error('TURN discovery aborted'));\n this.defer = undefined;\n }\n }\n\n /**\n * Parses the TURN_DISCOVERY_RESPONSE roap message out of the http response\n * and returns it.\n *\n * @param {Meeting} meeting\n * @param {any} httpResponse\n * @returns {any}\n */\n private parseHttpTurnDiscoveryResponse(\n meeting: Meeting,\n httpResponse: {mediaConnections?: Array<{remoteSdp?: string}>}\n ) {\n let turnDiscoveryResponse;\n\n if (httpResponse.mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(httpResponse.mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n // yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...\n const {seq, messageType, errorType, errorCause, headers} = remoteSdp.roapMessage;\n\n turnDiscoveryResponse = {\n seq,\n messageType,\n errorType,\n errorCause,\n headers,\n };\n }\n }\n\n if (!turnDiscoveryResponse) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'TURN_DISCOVERY_RESPONSE',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return turnDiscoveryResponse;\n }\n\n /**\n * sends the TURN_DISCOVERY_REQUEST roap request\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapTurnDiscoveryRequest(\n meeting: Meeting,\n isReconnecting: boolean\n ): Promise<TurnDiscoveryResult> {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'\n );\n\n return Promise.resolve({\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress,\n });\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'\n );\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n // @ts-ignore - Fix missing type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - Fix missing type\n mediaId: isReconnecting ? '' : meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n // @ts-ignore - because of meeting.webex\n ipVersion: MeetingUtil.getIpVersion(meeting.webex),\n })\n .then(async (response) => {\n const {mediaConnections} = response;\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return this.handleTurnDiscoveryHttpResponse(meeting, response);\n });\n }\n\n /**\n * Sends the OK message that server expects to receive\n * after it sends us TURN_DISCOVERY_RESPONSE\n *\n * @param {Meeting} meeting\n * @returns {Promise}\n */\n sendRoapOK(meeting: Meeting) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapOK --> TURN discovery response requires OK, sending it...'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_REQUIRES_OK, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n });\n\n return this.roapRequest.sendRoap({\n roapMessage: {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n },\n // @ts-ignore - fix type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - fix type\n mediaId: meeting.mediaId,\n meetingId: meeting.id,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Gets the reason why reachability is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped\n */\n private async getSkipReason(meeting: Meeting): Promise<TurnDiscoverySkipReason> {\n const isAnyPublicClusterReachable =\n // @ts-ignore - fix type\n await meeting.webex.meetings.reachability.isAnyPublicClusterReachable();\n\n if (isAnyPublicClusterReachable) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'\n );\n\n return TurnDiscoverySkipReason.reachability;\n }\n\n return undefined;\n }\n\n /**\n * Checks if TURN discovery is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done\n */\n async isSkipped(meeting) {\n const skipReason = await this.getSkipReason(meeting);\n\n return !!skipReason;\n }\n\n /**\n * Retrieves TURN server information from the backend by doing\n * a roap message exchange:\n * client server\n * | -----TURN_DISCOVERY_REQUEST-----> |\n * | <----TURN_DISCOVERY_RESPONSE----- |\n * | --------------OK----------------> |\n *\n * This TURN discovery roap exchange is always done with seq=0.\n * The RoapMediaConnection SDP exchange always starts with seq=1,\n * so it works fine no matter if TURN discovery is done or not.\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 async doTurnDiscovery(\n meeting: Meeting,\n isReconnecting?: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n let turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n\n if (!isForced) {\n turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n }\n\n if (turnDiscoverySkippedReason) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason,\n };\n }\n\n try {\n const turnDiscoveryResult = await this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);\n\n if (\n turnDiscoveryResult.turnDiscoverySkippedReason !==\n TurnDiscoverySkipReason.missingHttpResponse\n ) {\n return turnDiscoveryResult;\n }\n\n // if we haven't got the response over http, we need to wait for it to come over the websocket via Mercury\n const {isOkRequired} = await this.waitForTurnDiscoveryResponse();\n\n if (isOkRequired) {\n await this.sendRoapOK(meeting);\n }\n\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n } catch (e) {\n return this.handleTurnDiscoveryFailure(meeting, e);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_common","require","_metrics","_interopRequireDefault","_constants","_loggerProxy","_constants2","TURN_DISCOVERY_TIMEOUT","TURN_DISCOVERY_SEQ","TurnDiscoverySkipReason","missingHttpResponse","reachability","alreadyInProgress","TurnDiscovery","exports","default","roapRequest","_classCallCheck2","_defineProperty2","turnInfo","url","username","password","_createClass2","key","value","waitForTurnDiscoveryResponse","defer","LoggerProxy","logger","warn","_promise","reject","Error","responseTimer","setTimeout","concat","info","promise","handleTurnDiscoveryResponse","roapMessage","from","_this","headers","messageType","ROAP","ROAP_TYPES","TURN_DISCOVERY_RESPONSE","_stringify","expectedHeaders","headerName","field","foundHeaders","forEach","receivedHeader","expectedHeader","startsWith","substring","length","clearTimeout","undefined","resolve","isOkRequired","includes","_generateTurnDiscoveryRequestMessage","_asyncToGenerator2","_regenerator","mark","_callee","meeting","isForced","turnDiscoverySkippedReason","wrap","_callee$","_context","prev","next","abrupt","getSkipReason","sent","Defer","TURN_DISCOVERY_REQUEST","version","ROAP_VERSION","seq","stop","generateTurnDiscoveryRequestMessage","_x","_x2","apply","arguments","handleTurnDiscoveryFailure","error","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","TURN_DISCOVERY_FAILURE","correlation_id","correlationId","locus_id","locusUrl","split","pop","reason","message","stack","turnServerInfo","_handleTurnDiscoveryHttpResponse","_callee2","httpResponse","_yield$this$defer$pro","_callee2$","_context2","parseHttpTurnDiscoveryResponse","sendRoapOK","t0","abort","handleTurnDiscoveryHttpResponse","_x3","_x4","_httpResponse$mediaCo","_httpResponse$mediaCo2","turnDiscoveryResponse","mediaConnections","remoteSdp","JSON","parse","_remoteSdp$roapMessag","errorType","errorCause","ROAP_HTTP_RESPONSE_MISSING","isMultistream","sendRoapTurnDiscoveryRequest","isReconnecting","_this2","sendRoap","locusSelfUrl","selfUrl","mediaId","locusMediaRequest","then","_ref","_callee3","response","_callee3$","_context3","updateMediaConnections","_x5","TURN_DISCOVERY_REQUIRES_OK","OK","_getSkipReason","_callee4","isAnyPublicClusterReachable","_callee4$","_context4","webex","meetings","_x6","_isSkipped","_callee5","skipReason","_callee5$","_context5","isSkipped","_x7","_doTurnDiscovery","_callee6","turnDiscoveryResult","_yield$this$waitForTu","_callee6$","_context6","doTurnDiscovery","_x8","_x9","_x10"],"sources":["turnDiscovery.ts"],"sourcesContent":["// @ts-ignore - Types not available for @webex/common\nimport {Defer} from '@webex/common';\n\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {ROAP, Enum} from '../constants';\n\nimport RoapRequest from './request';\nimport Meeting from '../meeting';\nimport MeetingUtil from '../meeting/util';\n\nconst TURN_DISCOVERY_TIMEOUT = 10; // in seconds\n\n// Roap spec says that seq should start from 1, but TURN discovery works fine with seq=0\n// and this is handy for us, because TURN discovery is always done before the first SDP exchange,\n// so we can do it with seq=0 or not do it at all and then we create the RoapMediaConnection\n// and do the SDP offer with seq=1\nconst TURN_DISCOVERY_SEQ = 0;\n\nconst TurnDiscoverySkipReason = {\n missingHttpResponse: 'missing http response', // when we asked for the TURN discovery response to be in the http response, but it wasn't there\n reachability: 'reachability', // when udp reachability to public clusters is ok, so we don't need TURN (this doens't apply when joinWithMedia() is used)\n alreadyInProgress: 'already in progress', // when we try to start TURN discovery while it's already in progress\n} as const;\n\nexport type TurnDiscoverySkipReason =\n | Enum<typeof TurnDiscoverySkipReason> // this is a kind of FYI, because in practice typescript will infer the type of TurnDiscoverySkipReason as a string\n | string // used in case of errors, contains the error message\n | undefined; // used when TURN discovery is not skipped\n\nexport type TurnServerInfo = {\n url: string;\n username: string;\n password: string;\n};\n\nexport type TurnDiscoveryResult = {\n turnServerInfo?: TurnServerInfo;\n turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n};\n\n/**\n * Handles the process of finding out TURN server information from Linus.\n * This is achieved by sending a TURN_DISCOVERY_REQUEST.\n */\nexport default class TurnDiscovery {\n private roapRequest: RoapRequest;\n\n private defer?: Defer; // used for waiting for the response\n\n private turnInfo: TurnServerInfo;\n\n private responseTimer?: ReturnType<typeof setTimeout>;\n\n /**\n * Constructor\n *\n * @param {RoapRequest} roapRequest\n */\n constructor(roapRequest: RoapRequest) {\n this.roapRequest = roapRequest;\n this.turnInfo = {\n url: '',\n username: '',\n password: '',\n };\n }\n\n /**\n * waits for TURN_DISCOVERY_RESPONSE message to arrive\n *\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private waitForTurnDiscoveryResponse(): Promise<{isOkRequired: boolean}> {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'\n );\n\n return Promise.reject(\n new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')\n );\n }\n\n const {defer} = this;\n\n this.responseTimer = setTimeout(() => {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`\n );\n\n defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));\n }, TURN_DISCOVERY_TIMEOUT * 1000);\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'\n );\n\n return defer.promise;\n }\n\n /**\n * Handles TURN_DISCOVERY_RESPONSE roap message. Use it if the roap message comes over the websocket,\n * otherwise use handleTurnDiscoveryHttpResponse() if it comes in the http response.\n *\n * @param {Object} roapMessage\n * @param {string} from string to indicate how we got the response (used just for logging)\n * @returns {void}\n * @public\n * @memberof Roap\n */\n public handleTurnDiscoveryResponse(roapMessage: any, from: string) {\n const {headers} = roapMessage;\n\n if (!this.defer) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response ${from}`\n );\n\n return;\n }\n\n if (roapMessage.messageType !== ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} has unexpected messageType: ${JSON.stringify(\n roapMessage\n )}`\n )\n );\n }\n\n const expectedHeaders = [\n {headerName: 'x-cisco-turn-url', field: 'url'},\n {headerName: 'x-cisco-turn-username', field: 'username'},\n {headerName: 'x-cisco-turn-password', field: 'password'},\n ];\n\n let foundHeaders = 0;\n\n headers?.forEach((receivedHeader) => {\n // check if it matches any of our expected headers\n expectedHeaders.forEach((expectedHeader) => {\n if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {\n this.turnInfo[expectedHeader.field] = receivedHeader.substring(\n expectedHeader.headerName.length + 1\n );\n foundHeaders += 1;\n }\n });\n });\n\n clearTimeout(this.responseTimer);\n this.responseTimer = undefined;\n\n if (foundHeaders !== expectedHeaders.length) {\n LoggerProxy.logger.warn(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received ${from}: ${JSON.stringify(\n headers\n )}`\n );\n this.defer.reject(\n new Error(\n `TURN_DISCOVERY_RESPONSE ${from} missing some headers: ${JSON.stringify(headers)}`\n )\n );\n } else {\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response ${from}, url=${this.turnInfo.url}`\n );\n\n this.defer.resolve({isOkRequired: !headers?.includes('noOkInTransaction')});\n }\n }\n\n /**\n * Generates TURN_DISCOVERY_REQUEST roap message. When this method returns a roapMessage, it means that a TURN discovery process has started.\n * It needs be ended by calling handleTurnDiscoveryHttpResponse() once you get a response from the backend. If you don't get any response\n * or want to abort, you need to call abort().\n *\n * @param {Meeting} meeting\n * @param {boolean} isForced\n * @returns {Object}\n */\n public async generateTurnDiscoveryRequestMessage(\n meeting: Meeting,\n isForced: boolean\n ): Promise<{roapMessage?: object; turnDiscoverySkippedReason: TurnDiscoverySkipReason}> {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> TURN discovery already in progress'\n );\n\n return {\n roapMessage: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress,\n };\n }\n\n let turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n\n if (!isForced) {\n turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n }\n\n if (turnDiscoverySkippedReason) {\n return {roapMessage: undefined, turnDiscoverySkippedReason};\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#generateTurnDiscoveryRequestMessage --> generated TURN_DISCOVERY_REQUEST message'\n );\n\n return {roapMessage, turnDiscoverySkippedReason: undefined};\n }\n\n /**\n * Handles any errors that occur during TURN discovery without re-throwing them.\n *\n * @param {Meeting} meeting\n * @param {Error} error\n * @returns {TurnDiscoveryResult}\n */\n private handleTurnDiscoveryFailure(meeting: Meeting, error: Error): TurnDiscoveryResult {\n // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN\n LoggerProxy.logger.info(\n `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${error}`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n reason: error.message,\n stack: error.stack,\n });\n\n return {turnServerInfo: undefined, turnDiscoverySkippedReason: `failure: ${error.message}`};\n }\n\n /**\n * Handles TURN_DISCOVERY_RESPONSE roap message that came in http response. If the response is not valid,\n * it returns an object with turnServerInfo set to undefined. In that case you need to call abort()\n * to end the TURN discovery process.\n *\n * @param {Meeting} meeting\n * @param {Object|undefined} httpResponse can be undefined to indicate that we didn't get the response\n * @returns {Promise<TurnDiscoveryResult>}\n * @memberof Roap\n */\n public async handleTurnDiscoveryHttpResponse(\n meeting: Meeting,\n httpResponse?: object\n ): Promise<TurnDiscoveryResult> {\n if (!this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#handleTurnDiscoveryHttpResponse --> unexpected http response, TURN discovery is not in progress'\n );\n\n throw new Error(\n 'handleTurnDiscoveryHttpResponse() called before generateTurnDiscoveryRequestMessage()'\n );\n }\n\n if (httpResponse === undefined) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse,\n };\n }\n\n try {\n const roapMessage = this.parseHttpTurnDiscoveryResponse(meeting, httpResponse);\n\n if (!roapMessage) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.missingHttpResponse,\n };\n }\n\n this.handleTurnDiscoveryResponse(roapMessage, 'in http response');\n\n const {isOkRequired} = await this.defer.promise;\n\n if (isOkRequired) {\n await this.sendRoapOK(meeting);\n }\n\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n } catch (error) {\n this.abort();\n\n return this.handleTurnDiscoveryFailure(meeting, error);\n }\n }\n\n /**\n * Aborts current TURN discovery. This method needs to be called if you called generateTurnDiscoveryRequestMessage(),\n * but then never got any response from the server.\n * @returns {void}\n */\n public abort() {\n if (this.defer) {\n this.defer.reject(new Error('TURN discovery aborted'));\n this.defer = undefined;\n }\n }\n\n /**\n * Parses the TURN_DISCOVERY_RESPONSE roap message out of the http response\n * and returns it.\n *\n * @param {Meeting} meeting\n * @param {any} httpResponse\n * @returns {any}\n */\n private parseHttpTurnDiscoveryResponse(\n meeting: Meeting,\n httpResponse: {mediaConnections?: Array<{remoteSdp?: string}>}\n ) {\n let turnDiscoveryResponse;\n\n if (httpResponse.mediaConnections?.[0]?.remoteSdp) {\n const remoteSdp = JSON.parse(httpResponse.mediaConnections[0].remoteSdp);\n\n if (remoteSdp.roapMessage) {\n // yes, it's misleading that remoteSdp actually contains a TURN discovery response, but that's how the backend works...\n const {seq, messageType, errorType, errorCause, headers} = remoteSdp.roapMessage;\n\n turnDiscoveryResponse = {\n seq,\n messageType,\n errorType,\n errorCause,\n headers,\n };\n }\n }\n\n if (!turnDiscoveryResponse) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_HTTP_RESPONSE_MISSING, {\n correlationId: meeting.correlationId,\n messageType: 'TURN_DISCOVERY_RESPONSE',\n isMultistream: meeting.isMultistream,\n });\n }\n\n return turnDiscoveryResponse;\n }\n\n /**\n * sends the TURN_DISCOVERY_REQUEST roap request\n *\n * @param {Meeting} meeting\n * @param {Boolean} isReconnecting\n * @returns {Promise}\n * @private\n * @memberof Roap\n */\n private sendRoapTurnDiscoveryRequest(\n meeting: Meeting,\n isReconnecting: boolean\n ): Promise<TurnDiscoveryResult> {\n if (this.defer) {\n LoggerProxy.logger.warn(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'\n );\n\n return Promise.resolve({\n turnServerInfo: undefined,\n turnDiscoverySkippedReason: TurnDiscoverySkipReason.alreadyInProgress,\n });\n }\n\n this.defer = new Defer();\n\n const roapMessage = {\n messageType: ROAP.ROAP_TYPES.TURN_DISCOVERY_REQUEST,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n headers: ['includeAnswerInHttpResponse', 'noOkInTransaction'],\n };\n\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'\n );\n\n return this.roapRequest\n .sendRoap({\n roapMessage,\n // @ts-ignore - Fix missing type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - Fix missing type\n mediaId: isReconnecting ? '' : meeting.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n })\n .then(async (response) => {\n const {mediaConnections} = response;\n\n if (mediaConnections) {\n meeting.updateMediaConnections(mediaConnections);\n }\n\n return this.handleTurnDiscoveryHttpResponse(meeting, response);\n });\n }\n\n /**\n * Sends the OK message that server expects to receive\n * after it sends us TURN_DISCOVERY_RESPONSE\n *\n * @param {Meeting} meeting\n * @returns {Promise}\n */\n sendRoapOK(meeting: Meeting) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#sendRoapOK --> TURN discovery response requires OK, sending it...'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_REQUIRES_OK, {\n correlation_id: meeting.correlationId,\n locus_id: meeting.locusUrl.split('/').pop(),\n });\n\n return this.roapRequest.sendRoap({\n roapMessage: {\n messageType: ROAP.ROAP_TYPES.OK,\n version: ROAP.ROAP_VERSION,\n seq: TURN_DISCOVERY_SEQ,\n },\n // @ts-ignore - fix type\n locusSelfUrl: meeting.selfUrl,\n // @ts-ignore - fix type\n mediaId: meeting.mediaId,\n isMultistream: meeting.isMultistream,\n locusMediaRequest: meeting.locusMediaRequest,\n });\n }\n\n /**\n * Gets the reason why reachability is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Promise<string>} Promise with empty string if reachability is not skipped or a reason if it is skipped\n */\n private async getSkipReason(meeting: Meeting): Promise<TurnDiscoverySkipReason> {\n const isAnyPublicClusterReachable =\n // @ts-ignore - fix type\n await meeting.webex.meetings.reachability.isAnyPublicClusterReachable();\n\n if (isAnyPublicClusterReachable) {\n LoggerProxy.logger.info(\n 'Roap:turnDiscovery#getSkipReason --> reachability has not failed, skipping TURN discovery'\n );\n\n return TurnDiscoverySkipReason.reachability;\n }\n\n return undefined;\n }\n\n /**\n * Checks if TURN discovery is skipped.\n *\n * @param {Meeting} meeting\n * @returns {Boolean} true if TURN discovery is being skipped, false if it is being done\n */\n async isSkipped(meeting) {\n const skipReason = await this.getSkipReason(meeting);\n\n return !!skipReason;\n }\n\n /**\n * Retrieves TURN server information from the backend by doing\n * a roap message exchange:\n * client server\n * | -----TURN_DISCOVERY_REQUEST-----> |\n * | <----TURN_DISCOVERY_RESPONSE----- |\n * | --------------OK----------------> |\n *\n * This TURN discovery roap exchange is always done with seq=0.\n * The RoapMediaConnection SDP exchange always starts with seq=1,\n * so it works fine no matter if TURN discovery is done or not.\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 async doTurnDiscovery(\n meeting: Meeting,\n isReconnecting?: boolean,\n isForced?: boolean\n ): Promise<TurnDiscoveryResult> {\n let turnDiscoverySkippedReason: TurnDiscoverySkipReason;\n\n if (!isForced) {\n turnDiscoverySkippedReason = await this.getSkipReason(meeting);\n }\n\n if (turnDiscoverySkippedReason) {\n return {\n turnServerInfo: undefined,\n turnDiscoverySkippedReason,\n };\n }\n\n try {\n const turnDiscoveryResult = await this.sendRoapTurnDiscoveryRequest(meeting, isReconnecting);\n\n if (\n turnDiscoveryResult.turnDiscoverySkippedReason !==\n TurnDiscoverySkipReason.missingHttpResponse\n ) {\n return turnDiscoveryResult;\n }\n\n // if we haven't got the response over http, we need to wait for it to come over the websocket via Mercury\n const {isOkRequired} = await this.waitForTurnDiscoveryResponse();\n\n if (isOkRequired) {\n await this.sendRoapOK(meeting);\n }\n\n this.defer = undefined;\n\n LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery completed');\n\n return {turnServerInfo: this.turnInfo, turnDiscoverySkippedReason: undefined};\n } catch (e) {\n return this.handleTurnDiscoveryFailure(meeting, e);\n }\n }\n}\n"],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  /**
2
- * Extended Error object for general parameter errors
2
+ * Error occurred while join the webinar
3
3
  */
4
- export default class ParameterError extends Error {
5
- sdkMessage: string;
6
- error: null;
4
+ export default class JoinWebinarError extends Error {
7
5
  code: number;
6
+ error: any;
7
+ sdkMessage: string;
8
8
  /**
9
- *
10
9
  * @constructor
11
10
  * @param {String} [message]
12
11
  * @param {Object} [error]
@@ -69,6 +69,9 @@ declare const _default: {
69
69
  maxMacroblocksLimit: number;
70
70
  };
71
71
  iceCandidatesGatheringTimeout: any;
72
+ backendIpv6NativeSupport: boolean;
73
+ reachabilityGetClusterTimeout: number;
74
+ logUploadIntervalMultiplicationFactor: number;
72
75
  };
73
76
  };
74
77
  export default _default;
@@ -136,6 +136,8 @@ export declare const ICE_FAIL_TIMEOUT = 3000;
136
136
  export declare const RETRY_TIMEOUT = 3000;
137
137
  export declare const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
138
138
  export declare const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
139
+ export declare const WEBINAR_ERROR_WEBCAST: number[];
140
+ export declare const WEBINAR_ERROR_REGISTRATIONID: number[];
139
141
  export declare const DIALER_REGEX: {
140
142
  SIP_ADDRESS: RegExp;
141
143
  PHONE_NUMBER: RegExp;
@@ -264,6 +266,10 @@ export declare const EVENT_TRIGGERS: {
264
266
  MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED: string;
265
267
  MEETING_CONTROLS_RAISE_HAND_UPDATED: string;
266
268
  MEETING_CONTROLS_VIDEO_UPDATED: string;
269
+ MEETING_CONTROLS_STAGE_VIEW_UPDATED: string;
270
+ MEETING_CONTROLS_WEBCAST_UPDATED: string;
271
+ MEETING_CONTROLS_MEETING_FULL_UPDATED: string;
272
+ MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED: string;
267
273
  MEETING_LOCUS_URL_UPDATE: string;
268
274
  MEETING_STREAM_PUBLISH_STATE_CHANGED: string;
269
275
  MEETING_TRANSCRIPTION_CONNECTED: string;
@@ -282,6 +288,12 @@ export declare const EVENT_TYPES: {
282
288
  REMOTE_SHARE_AUDIO: string;
283
289
  ERROR: string;
284
290
  };
291
+ export declare const HEADERS: {
292
+ CONTENT_TYPE: string;
293
+ CONTENT_TYPE_VALUE: {
294
+ APPLICATION_JSON: string;
295
+ };
296
+ };
285
297
  export declare const MEETING_REMOVED_REASON: {
286
298
  SELF_REMOVED: string;
287
299
  FULLSTATE_REMOVED: string;
@@ -406,6 +418,11 @@ export declare const ERROR_DICTIONARY: {
406
418
  MESSAGE: string;
407
419
  CODE: number;
408
420
  };
421
+ JoinWebinarError: {
422
+ NAME: string;
423
+ MESSAGE: string;
424
+ CODE: number;
425
+ };
409
426
  };
410
427
  export declare const FLOOR_ACTION: {
411
428
  GRANTED: string;
@@ -541,7 +558,11 @@ export declare const LOCUSINFO: {
541
558
  CONTROLS_REACTIONS_CHANGED: string;
542
559
  CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: string;
543
560
  CONTROLS_RAISE_HAND_CHANGED: string;
561
+ CONTROLS_WEBCAST_CHANGED: string;
562
+ CONTROLS_MEETING_FULL_CHANGED: string;
563
+ CONTROLS_PRACTICE_SESSION_STATUS_UPDATED: string;
544
564
  CONTROLS_VIDEO_CHANGED: string;
565
+ CONTROLS_STAGE_VIEW_UPDATED: string;
545
566
  SELF_UNADMITTED_GUEST: string;
546
567
  SELF_ADMITTED_GUEST: string;
547
568
  SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: string;
@@ -567,6 +588,7 @@ export declare const LOCUSINFO: {
567
588
  SELF_MEETING_INTERPRETATION_CHANGED: string;
568
589
  MEDIA_INACTIVITY: string;
569
590
  LINKS_SERVICES: string;
591
+ LINKS_RESOURCES: string;
570
592
  };
571
593
  };
572
594
  export declare const LOCUSEVENT: {
@@ -724,6 +746,10 @@ export declare const DISPLAY_HINTS: {
724
746
  RECORDING_CONTROL_PAUSE: string;
725
747
  RECORDING_CONTROL_STOP: string;
726
748
  RECORDING_CONTROL_RESUME: string;
749
+ PREMISE_RECORDING_CONTROL_START: string;
750
+ PREMISE_RECORDING_CONTROL_PAUSE: string;
751
+ PREMISE_RECORDING_CONTROL_STOP: string;
752
+ PREMISE_RECORDING_CONTROL_RESUME: string;
727
753
  LOCK_CONTROL_UNLOCK: string;
728
754
  LOCK_CONTROL_LOCK: string;
729
755
  LOCK_STATUS_LOCKED: string;
@@ -770,6 +796,10 @@ export declare const DISPLAY_HINTS: {
770
796
  DISABLE_LOBBY_TO_BREAKOUT: string;
771
797
  DISABLE_VIEW_THE_PARTICIPANT_LIST: string;
772
798
  ENABLE_VIEW_THE_PARTICIPANT_LIST: string;
799
+ DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: string;
800
+ ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: string;
801
+ DISABLE_SHOW_ATTENDEE_COUNT: string;
802
+ ENABLE_SHOW_ATTENDEE_COUNT: string;
773
803
  DISABLE_RAISE_HAND: string;
774
804
  ENABLE_RAISE_HAND: string;
775
805
  DISABLE_VIDEO: string;
@@ -781,6 +811,16 @@ export declare const DISPLAY_HINTS: {
781
811
  SHARE_CONTENT: string;
782
812
  SHARE_WHITEBOARD: string;
783
813
  VOIP_IS_ENABLED: string;
814
+ WEBCAST_CONTROL_START: string;
815
+ WEBCAST_CONTROL_STOP: string;
816
+ STAGE_VIEW_ACTIVE: string;
817
+ STAGE_VIEW_INACTIVE: string;
818
+ ENABLE_STAGE_VIEW: string;
819
+ DISABLE_STAGE_VIEW: string;
820
+ PRACTICE_SESSION_ON: string;
821
+ PRACTICE_SESSION_OFF: string;
822
+ SHOW_PRACTICE_SESSION_START: string;
823
+ SHOW_PRACTICE_SESSION_STOP: string;
784
824
  };
785
825
  export declare const INTERSTITIAL_DISPLAY_HINTS: string[];
786
826
  export declare const SELF_ROLES: {
@@ -1058,6 +1098,9 @@ export declare const MEETING_INFO_FAILURE_REASON: {
1058
1098
  WRONG_PASSWORD: string;
1059
1099
  WRONG_CAPTCHA: string;
1060
1100
  POLICY: string;
1101
+ WEBINAR_REGISTRATION: string;
1102
+ NEED_JOIN_WITH_WEBCAST: string;
1103
+ WEBINAR_NEED_REGISTRATIONID: string;
1061
1104
  OTHER: string;
1062
1105
  };
1063
1106
  export declare const BNR_STATUS: {
@@ -1,7 +1,8 @@
1
1
  declare enum Setting {
2
2
  disallowUnmute = "DisallowUnmute",
3
3
  muteOnEntry = "MuteOnEntry",
4
- muted = "Muted"
4
+ muted = "Muted",
5
+ roles = "Roles"
5
6
  }
6
7
  declare enum Control {
7
8
  audio = "audio",
@@ -129,8 +129,9 @@ export default class ControlsOptionsManager {
129
129
  * @param {boolean} mutedEnabled
130
130
  * @param {boolean} disallowUnmuteEnabled
131
131
  * @param {boolean} muteOnEntryEnabled
132
+ * @param {array} roles which should be muted
132
133
  * @memberof ControlsOptionsManager
133
134
  * @returns {Promise}
134
135
  */
135
- setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
136
+ setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean, roles: Array<string>): Promise<any>;
136
137
  }
@@ -29,6 +29,8 @@ export interface VideoProperties {
29
29
  }
30
30
  export interface ViewTheParticipantListProperties {
31
31
  enabled?: boolean;
32
+ panelistEnabled?: boolean;
33
+ attendeeCount?: boolean;
32
34
  }
33
35
  export type Properties = AudioProperties | RaiseHandProperties | ReactionsProperties | ShareControlProperties | VideoProperties | ViewTheParticipantListProperties;
34
36
  export interface ControlConfig<Props = Properties> {
@@ -3,6 +3,7 @@ import CaptchaError from './common/errors/captcha-error';
3
3
  import IntentToJoinError from './common/errors/intent-to-join';
4
4
  import PasswordError from './common/errors/password-error';
5
5
  import PermissionError from './common/errors/permission';
6
+ import JoinWebinarError from './common/errors/join-webinar-error';
6
7
  import { ReclaimHostEmptyWrongKeyError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError } from './common/errors/reclaim-host-role-errors';
7
8
  import Meeting from './meeting';
8
9
  import MeetingInfoUtil from './meeting-info/utilv2';
@@ -14,6 +15,6 @@ export * as REACTIONS from './reactions/reactions';
14
15
  export * as sdkAnnotationTypes from './annotation/annotation.types';
15
16
  export * as MeetingInfoV2 from './meeting-info/meeting-info-v2';
16
17
  export { type Reaction } from './reactions/reactions.type';
17
- export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, };
18
+ export { CaptchaError, IntentToJoinError, JoinMeetingError, PasswordError, PermissionError, ReclaimHostIsHostAlreadyError, ReclaimHostNotAllowedError, ReclaimHostNotSupportedError, ReclaimHostEmptyWrongKeyError, Meeting, MeetingInfoUtil, JoinWebinarError, };
18
19
  export { RemoteMedia } from './multistream/remoteMedia';
19
20
  export { default as TriggerProxy } from './common/events/trigger-proxy';
@@ -35,6 +35,7 @@ export default class LocusInfo extends EventsScope {
35
35
  replace: any;
36
36
  url: any;
37
37
  services: any;
38
+ resources: any;
38
39
  mainSessionLocusCache: any;
39
40
  /**
40
41
  * Constructor
@@ -190,6 +191,14 @@ export default class LocusInfo extends EventsScope {
190
191
  updateServices(services: Record<'breakout' | 'record', {
191
192
  url: string;
192
193
  }>): void;
194
+ /**
195
+ * @param {Object} resources
196
+ * @returns {undefined}
197
+ * @memberof LocusInfo
198
+ */
199
+ updateResources(resources: Record<'webcastInstance', {
200
+ url: string;
201
+ }>): void;
193
202
  /**
194
203
  * @param {Object} fullState
195
204
  * @returns {undefined}
@@ -22,6 +22,7 @@ interface IInMeetingActions {
22
22
  canStartRecording?: boolean;
23
23
  canPauseRecording?: boolean;
24
24
  canResumeRecording?: boolean;
25
+ isPremiseRecordingEnabled?: boolean;
25
26
  canStopRecording?: boolean;
26
27
  canRaiseHand?: boolean;
27
28
  canLowerAllHands?: boolean;
@@ -61,6 +62,10 @@ interface IInMeetingActions {
61
62
  canUpdateShareControl?: boolean;
62
63
  canEnableViewTheParticipantsList?: boolean;
63
64
  canDisableViewTheParticipantsList?: boolean;
65
+ canEnableViewTheParticipantsListPanelist?: boolean;
66
+ canDisableViewTheParticipantsListPanelist?: boolean;
67
+ canEnableShowAttendeeCount?: boolean;
68
+ canDisableShowAttendeeCount?: boolean;
64
69
  canEnableRaiseHand?: boolean;
65
70
  canDisableRaiseHand?: boolean;
66
71
  canEnableVideo?: boolean;
@@ -80,6 +85,15 @@ interface IInMeetingActions {
80
85
  canShareWhiteBoard?: boolean;
81
86
  enforceVirtualBackground?: boolean;
82
87
  canPollingAndQA?: boolean;
88
+ canStartWebcast?: boolean;
89
+ canStopWebcast?: boolean;
90
+ canShowStageView?: boolean;
91
+ canEnableStageView?: boolean;
92
+ canDisableStageView?: boolean;
93
+ isPracticeSessionOn?: boolean;
94
+ isPracticeSessionOff?: boolean;
95
+ canStartPracticeSession?: boolean;
96
+ canStopPracticeSession?: boolean;
83
97
  }
84
98
  /**
85
99
  * @class InMeetingActions
@@ -94,6 +108,7 @@ export default class InMeetingActions implements IInMeetingActions {
94
108
  canStartRecording: any;
95
109
  canPauseRecording: any;
96
110
  canResumeRecording: any;
111
+ isPremiseRecordingEnabled: any;
97
112
  canStopRecording: any;
98
113
  canSetMuteOnEntry: any;
99
114
  canSetPresenter: any;
@@ -141,6 +156,10 @@ export default class InMeetingActions implements IInMeetingActions {
141
156
  canUpdateShareControl: any;
142
157
  canEnableViewTheParticipantsList: any;
143
158
  canDisableViewTheParticipantsList: any;
159
+ canEnableViewTheParticipantsListPanelist: any;
160
+ canDisableViewTheParticipantsListPanelist: any;
161
+ canEnableShowAttendeeCount: any;
162
+ canDisableShowAttendeeCount: any;
144
163
  canEnableRaiseHand: any;
145
164
  canDisableRaiseHand: any;
146
165
  canEnableVideo: any;
@@ -160,6 +179,15 @@ export default class InMeetingActions implements IInMeetingActions {
160
179
  supportHDV: any;
161
180
  canShareWhiteBoard: any;
162
181
  canPollingAndQA: any;
182
+ canStartWebcast: any;
183
+ canStopWebcast: any;
184
+ canShowStageView: any;
185
+ canEnableStageView: any;
186
+ canDisableStageView: any;
187
+ isPracticeSessionOn: any;
188
+ isPracticeSessionOff: any;
189
+ canStartPracticeSession: any;
190
+ canStopPracticeSession: any;
163
191
  /**
164
192
  * Returns all meeting action options
165
193
  * @returns {Object}
@@ -460,6 +460,8 @@ export default class Meeting extends StatelessWebexPlugin {
460
460
  private iceCandidateErrors;
461
461
  private iceCandidatesCount;
462
462
  private rtcMetrics?;
463
+ private uploadLogsTimer?;
464
+ private logUploadIntervalIndex;
463
465
  /**
464
466
  * @param {Object} attrs
465
467
  * @param {Object} options
@@ -737,6 +739,15 @@ export default class Meeting extends StatelessWebexPlugin {
737
739
  * @memberof Meeting
738
740
  */
739
741
  private setUpLocusServicesListener;
742
+ /**
743
+ * Set up the locus info resources link listener
744
+ * update the locusInfo for webcast instance url
745
+ * @param {Object} payload - The event payload
746
+ * @returns {undefined}
747
+ * @private
748
+ * @memberof Meeting
749
+ */
750
+ private setUpLocusResourcesListener;
740
751
  /**
741
752
  * Set up the locus info meeting info listener
742
753
  * @returns {undefined}
@@ -795,6 +806,7 @@ export default class Meeting extends StatelessWebexPlugin {
795
806
  emailAddress: string;
796
807
  email: string;
797
808
  phoneNumber: string;
809
+ roles: Array<string>;
798
810
  }, alertIfActive?: boolean): any;
799
811
  /**
800
812
  * Cancel an outgoing phone call invitation made during a meeting
@@ -952,6 +964,23 @@ export default class Meeting extends StatelessWebexPlugin {
952
964
  * @memberof Meeting
953
965
  */
954
966
  uploadLogs(options?: object): void;
967
+ /**
968
+ * sets the timer for periodic log upload
969
+ * @returns {void}
970
+ */
971
+ private setLogUploadTimer;
972
+ /**
973
+ * Starts a periodic upload of logs
974
+ *
975
+ * @returns {undefined}
976
+ */
977
+ startPeriodicLogUpload(): void;
978
+ /**
979
+ * Stops the periodic upload of logs
980
+ *
981
+ * @returns {undefined}
982
+ */
983
+ stopPeriodicLogUpload(): void;
955
984
  /**
956
985
  * Removes remote audio, video and share streams from class instance's mediaProperties
957
986
  * @returns {undefined}
@@ -1235,7 +1264,7 @@ export default class Meeting extends StatelessWebexPlugin {
1235
1264
  * @public
1236
1265
  * @memberof Meeting
1237
1266
  */
1238
- moveTo(resourceId: string): any;
1267
+ moveTo(resourceId: string): Promise<void>;
1239
1268
  /**
1240
1269
  * Moves the call from the specified resourceId, back to computer
1241
1270
  * @param {String} resourceId
@@ -1243,7 +1272,7 @@ export default class Meeting extends StatelessWebexPlugin {
1243
1272
  * @public
1244
1273
  * @memberof Meeting
1245
1274
  */
1246
- moveFrom(resourceId: string): any;
1275
+ moveFrom(resourceId: string): Promise<any>;
1247
1276
  /**
1248
1277
  * Handles ROAP_FAILURE event from the webrtc media connection
1249
1278
  *
@@ -1391,6 +1420,7 @@ export default class Meeting extends StatelessWebexPlugin {
1391
1420
  * @returns {Promise<void>}
1392
1421
  */
1393
1422
  private cleanUpBeforeRetryWithTurnServer;
1423
+ private cleanUpBeforeReconnection;
1394
1424
  /**
1395
1425
  * Creates an instance of LocusMediaRequest for this meeting - it is needed for doing any calls
1396
1426
  * to Locus /media API (these are used for sending Roap messages and updating audio/video mute status).
@@ -1605,10 +1635,11 @@ export default class Meeting extends StatelessWebexPlugin {
1605
1635
  * @param {boolean} mutedEnabled
1606
1636
  * @param {boolean} disallowUnmuteEnabled
1607
1637
  * @param {boolean} muteOnEntryEnabled
1638
+ * @param {array} roles
1608
1639
  * @public
1609
1640
  * @memberof Meeting
1610
1641
  */
1611
- setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean): Promise<any>;
1642
+ setMuteAll(mutedEnabled: boolean, disallowUnmuteEnabled: boolean, muteOnEntryEnabled: boolean, roles: Array<string>): Promise<any>;
1612
1643
  /**
1613
1644
  * End the recording of this meeting
1614
1645
  * @returns {Promise}
@@ -1,5 +1,5 @@
1
1
  import { WebexPlugin } from '@webex/webex-core';
2
- import { IP_VERSION } from '../constants';
2
+ import { ClientMediaPreferences } from '../reachability/reachability.types';
3
3
  export type MediaRequestType = 'RoapMessage' | 'LocalMute';
4
4
  export type RequestResult = any;
5
5
  export type RoapRequest = {
@@ -8,9 +8,8 @@ export type RoapRequest = {
8
8
  mediaId: string;
9
9
  roapMessage: any;
10
10
  reachability: any;
11
+ clientMediaPreferences: ClientMediaPreferences;
11
12
  sequence?: any;
12
- joinCookie: any;
13
- ipVersion?: IP_VERSION;
14
13
  };
15
14
  export type LocalMuteRequest = {
16
15
  type: 'LocalMute';
@@ -139,9 +139,10 @@ export declare class MuteState {
139
139
  * @public
140
140
  * @memberof MuteState
141
141
  * @param {Object} [meeting] the meeting object
142
+ * @param {Boolean} [unmuteAllowed] whether the user is allowed to unmute self
142
143
  * @returns {undefined}
143
144
  */
144
- handleServerLocalUnmuteRequired(meeting?: any): void;
145
+ handleServerLocalUnmuteRequired(meeting: any, unmuteAllowed: boolean): void;
145
146
  /**
146
147
  * Returns true if the user is locally or remotely muted.
147
148
  * It only checks the mute status, ignoring the fact whether audio/video is enabled.
@@ -1,7 +1,7 @@
1
1
  import { StatelessWebexPlugin } from '@webex/webex-core';
2
- import { IP_VERSION } from '../constants';
3
2
  import { SendReactionOptions, ToggleReactionsOptions } from './request.type';
4
3
  import { AnnotationInfo } from '../annotation/annotation.types';
4
+ import { ClientMediaPreferences } from '../reachability/reachability.types';
5
5
  /**
6
6
  * @class MeetingRequest
7
7
  */
@@ -63,8 +63,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
63
63
  locale?: string;
64
64
  deviceCapabilities?: Array<string>;
65
65
  liveAnnotationSupported: boolean;
66
- ipVersion?: IP_VERSION;
67
66
  alias?: string;
67
+ clientMediaPreferences: ClientMediaPreferences;
68
68
  }): Promise<any>;
69
69
  /**
70
70
  * Send a request to refresh the captcha
@@ -14,7 +14,7 @@ declare const MeetingUtil: {
14
14
  * @returns {IP_VERSION|undefined} ipver value to be passed to the backend APIs or undefined if we should not pass any value to the backend
15
15
  */
16
16
  getIpVersion(webex: any): IP_VERSION | undefined;
17
- joinMeeting: (meeting: any, options: any) => any;
17
+ joinMeeting: (meeting: any, options: any) => Promise<any>;
18
18
  cleanUp: (meeting: any) => any;
19
19
  disconnectPhoneAudio: (meeting: any, phoneUrl: any) => any;
20
20
  /**
@@ -30,7 +30,7 @@ declare const MeetingUtil: {
30
30
  isUserInIdleState: (locusInfo: any) => boolean;
31
31
  isUserInJoinedState: (locusInfo: any) => boolean;
32
32
  isMediaEstablished: (currentMediaStatus: any) => any;
33
- joinMeetingOptions: (meeting: any, options?: any) => any;
33
+ joinMeetingOptions: (meeting: any, options?: any) => Promise<any>;
34
34
  /**
35
35
  * Returns request options for leaving a meeting.
36
36
  * @param {any} meeting