@webex/plugin-meetings 2.60.0 → 2.60.1-next.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 (535) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.d.ts +31 -0
  6. package/dist/annotation/constants.js +41 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.d.ts +117 -0
  9. package/dist/annotation/index.js +357 -0
  10. package/dist/annotation/index.js.map +1 -0
  11. package/dist/breakouts/breakout.d.ts +8 -0
  12. package/dist/breakouts/breakout.js +215 -0
  13. package/dist/breakouts/breakout.js.map +1 -0
  14. package/dist/breakouts/collection.d.ts +5 -0
  15. package/dist/breakouts/collection.js +22 -0
  16. package/dist/breakouts/collection.js.map +1 -0
  17. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  18. package/dist/breakouts/edit-lock-error.js +51 -0
  19. package/dist/breakouts/edit-lock-error.js.map +1 -0
  20. package/dist/breakouts/events.d.ts +8 -0
  21. package/dist/breakouts/events.js +44 -0
  22. package/dist/breakouts/events.js.map +1 -0
  23. package/dist/breakouts/index.d.ts +5 -0
  24. package/dist/breakouts/index.js +1047 -0
  25. package/dist/breakouts/index.js.map +1 -0
  26. package/dist/breakouts/request.d.ts +22 -0
  27. package/dist/breakouts/request.js +77 -0
  28. package/dist/breakouts/request.js.map +1 -0
  29. package/dist/breakouts/utils.d.ts +15 -0
  30. package/dist/breakouts/utils.js +64 -0
  31. package/dist/breakouts/utils.js.map +1 -0
  32. package/dist/common/browser-detection.js +2 -3
  33. package/dist/common/browser-detection.js.map +1 -1
  34. package/dist/common/collection.js +3 -4
  35. package/dist/common/collection.js.map +1 -1
  36. package/dist/common/config.js +1 -2
  37. package/dist/common/config.js.map +1 -1
  38. package/dist/common/errors/captcha-error.js +1 -2
  39. package/dist/common/errors/captcha-error.js.map +1 -1
  40. package/dist/common/errors/intent-to-join.js +1 -2
  41. package/dist/common/errors/intent-to-join.js.map +1 -1
  42. package/dist/common/errors/join-meeting.js +1 -2
  43. package/dist/common/errors/join-meeting.js.map +1 -1
  44. package/dist/common/errors/media.js +1 -2
  45. package/dist/common/errors/media.js.map +1 -1
  46. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  47. package/dist/common/errors/no-meeting-info.js +50 -0
  48. package/dist/common/errors/no-meeting-info.js.map +1 -0
  49. package/dist/common/errors/parameter.js +3 -4
  50. package/dist/common/errors/parameter.js.map +1 -1
  51. package/dist/common/errors/password-error.js +1 -2
  52. package/dist/common/errors/password-error.js.map +1 -1
  53. package/dist/common/errors/permission.js +1 -2
  54. package/dist/common/errors/permission.js.map +1 -1
  55. package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
  56. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  57. package/dist/common/errors/reconnection-in-progress.js +1 -2
  58. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  59. package/dist/common/errors/reconnection.js +1 -2
  60. package/dist/common/errors/reconnection.js.map +1 -1
  61. package/dist/common/errors/stats.js +1 -2
  62. package/dist/common/errors/stats.js.map +1 -1
  63. package/dist/common/errors/webex-errors.d.ts +20 -8
  64. package/dist/common/errors/webex-errors.js +48 -28
  65. package/dist/common/errors/webex-errors.js.map +1 -1
  66. package/dist/common/errors/webex-meetings-error.js +1 -2
  67. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  68. package/dist/common/events/events-scope.js +1 -2
  69. package/dist/common/events/events-scope.js.map +1 -1
  70. package/dist/common/events/events.js +1 -2
  71. package/dist/common/events/events.js.map +1 -1
  72. package/dist/common/events/trigger-proxy.js +1 -2
  73. package/dist/common/events/trigger-proxy.js.map +1 -1
  74. package/dist/common/events/util.js +1 -2
  75. package/dist/common/events/util.js.map +1 -1
  76. package/dist/common/logs/logger-config.js +1 -2
  77. package/dist/common/logs/logger-config.js.map +1 -1
  78. package/dist/common/logs/logger-proxy.js +2 -3
  79. package/dist/common/logs/logger-proxy.js.map +1 -1
  80. package/dist/common/logs/request.d.ts +3 -1
  81. package/dist/common/logs/request.js +8 -5
  82. package/dist/common/logs/request.js.map +1 -1
  83. package/dist/common/queue.d.ts +9 -7
  84. package/dist/common/queue.js +22 -9
  85. package/dist/common/queue.js.map +1 -1
  86. package/dist/config.d.ts +6 -7
  87. package/dist/config.js +8 -10
  88. package/dist/config.js.map +1 -1
  89. package/dist/constants.d.ts +217 -97
  90. package/dist/constants.js +416 -441
  91. package/dist/constants.js.map +1 -1
  92. package/dist/controls-options-manager/constants.js +3 -6
  93. package/dist/controls-options-manager/constants.js.map +1 -1
  94. package/dist/controls-options-manager/enums.d.ts +11 -1
  95. package/dist/controls-options-manager/enums.js +15 -6
  96. package/dist/controls-options-manager/enums.js.map +1 -1
  97. package/dist/controls-options-manager/index.d.ts +17 -1
  98. package/dist/controls-options-manager/index.js +127 -38
  99. package/dist/controls-options-manager/index.js.map +1 -1
  100. package/dist/controls-options-manager/types.d.ts +43 -0
  101. package/dist/controls-options-manager/types.js +7 -0
  102. package/dist/controls-options-manager/types.js.map +1 -0
  103. package/dist/controls-options-manager/util.d.ts +1 -7
  104. package/dist/controls-options-manager/util.js +309 -19
  105. package/dist/controls-options-manager/util.js.map +1 -1
  106. package/dist/index.d.ts +6 -3
  107. package/dist/index.js +121 -5
  108. package/dist/index.js.map +1 -1
  109. package/dist/interceptors/index.d.ts +2 -0
  110. package/dist/interceptors/index.js +15 -0
  111. package/dist/interceptors/index.js.map +1 -0
  112. package/dist/interceptors/locusRetry.d.ts +27 -0
  113. package/dist/interceptors/locusRetry.js +94 -0
  114. package/dist/interceptors/locusRetry.js.map +1 -0
  115. package/dist/interpretation/collection.d.ts +5 -0
  116. package/dist/interpretation/collection.js +22 -0
  117. package/dist/interpretation/collection.js.map +1 -0
  118. package/dist/interpretation/index.d.ts +5 -0
  119. package/dist/interpretation/index.js +365 -0
  120. package/dist/interpretation/index.js.map +1 -0
  121. package/dist/interpretation/siLanguage.d.ts +5 -0
  122. package/dist/interpretation/siLanguage.js +24 -0
  123. package/dist/interpretation/siLanguage.js.map +1 -0
  124. package/dist/locus-info/controlsUtils.js +100 -11
  125. package/dist/locus-info/controlsUtils.js.map +1 -1
  126. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  127. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  128. package/dist/locus-info/fullState.js +1 -2
  129. package/dist/locus-info/fullState.js.map +1 -1
  130. package/dist/locus-info/hostUtils.js +1 -2
  131. package/dist/locus-info/hostUtils.js.map +1 -1
  132. package/dist/locus-info/index.d.ts +57 -4
  133. package/dist/locus-info/index.js +425 -84
  134. package/dist/locus-info/index.js.map +1 -1
  135. package/dist/locus-info/infoUtils.js +13 -5
  136. package/dist/locus-info/infoUtils.js.map +1 -1
  137. package/dist/locus-info/mediaSharesUtils.js +58 -3
  138. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  139. package/dist/locus-info/parser.d.ts +66 -6
  140. package/dist/locus-info/parser.js +253 -80
  141. package/dist/locus-info/parser.js.map +1 -1
  142. package/dist/locus-info/selfUtils.js +97 -13
  143. package/dist/locus-info/selfUtils.js.map +1 -1
  144. package/dist/media/index.d.ts +2 -0
  145. package/dist/media/index.js +107 -319
  146. package/dist/media/index.js.map +1 -1
  147. package/dist/media/properties.d.ts +38 -53
  148. package/dist/media/properties.js +96 -153
  149. package/dist/media/properties.js.map +1 -1
  150. package/dist/media/util.js +1 -22
  151. package/dist/media/util.js.map +1 -1
  152. package/dist/mediaQualityMetrics/config.d.ts +234 -230
  153. package/dist/mediaQualityMetrics/config.js +302 -498
  154. package/dist/mediaQualityMetrics/config.js.map +1 -1
  155. package/dist/meeting/in-meeting-actions.d.ts +88 -0
  156. package/dist/meeting/in-meeting-actions.js +94 -3
  157. package/dist/meeting/in-meeting-actions.js.map +1 -1
  158. package/dist/meeting/index.d.ts +591 -494
  159. package/dist/meeting/index.js +4732 -2990
  160. package/dist/meeting/index.js.map +1 -1
  161. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  162. package/dist/meeting/locusMediaRequest.js +291 -0
  163. package/dist/meeting/locusMediaRequest.js.map +1 -0
  164. package/dist/meeting/muteState.d.ts +93 -25
  165. package/dist/meeting/muteState.js +224 -133
  166. package/dist/meeting/muteState.js.map +1 -1
  167. package/dist/meeting/request.d.ts +82 -47
  168. package/dist/meeting/request.js +297 -199
  169. package/dist/meeting/request.js.map +1 -1
  170. package/dist/meeting/request.type.d.ts +11 -0
  171. package/dist/meeting/request.type.js +7 -0
  172. package/dist/meeting/request.type.js.map +1 -0
  173. package/dist/meeting/state.js +1 -2
  174. package/dist/meeting/state.js.map +1 -1
  175. package/dist/meeting/util.d.ts +102 -1
  176. package/dist/meeting/util.js +605 -435
  177. package/dist/meeting/util.js.map +1 -1
  178. package/dist/meeting-info/collection.js +3 -4
  179. package/dist/meeting-info/collection.js.map +1 -1
  180. package/dist/meeting-info/index.d.ts +13 -1
  181. package/dist/meeting-info/index.js +74 -7
  182. package/dist/meeting-info/index.js.map +1 -1
  183. package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
  184. package/dist/meeting-info/meeting-info-v2.js +200 -63
  185. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  186. package/dist/meeting-info/request.js +1 -2
  187. package/dist/meeting-info/request.js.map +1 -1
  188. package/dist/meeting-info/util.js +2 -3
  189. package/dist/meeting-info/util.js.map +1 -1
  190. package/dist/meeting-info/utilv2.js +39 -41
  191. package/dist/meeting-info/utilv2.js.map +1 -1
  192. package/dist/meetings/collection.d.ts +17 -0
  193. package/dist/meetings/collection.js +42 -4
  194. package/dist/meetings/collection.js.map +1 -1
  195. package/dist/meetings/index.d.ts +93 -21
  196. package/dist/meetings/index.js +490 -127
  197. package/dist/meetings/index.js.map +1 -1
  198. package/dist/meetings/meetings.types.d.ts +4 -0
  199. package/dist/meetings/meetings.types.js +7 -0
  200. package/dist/meetings/meetings.types.js.map +1 -0
  201. package/dist/meetings/request.js +4 -3
  202. package/dist/meetings/request.js.map +1 -1
  203. package/dist/meetings/util.js +107 -6
  204. package/dist/meetings/util.js.map +1 -1
  205. package/dist/member/index.d.ts +13 -1
  206. package/dist/member/index.js +45 -2
  207. package/dist/member/index.js.map +1 -1
  208. package/dist/member/member.types.js +3 -4
  209. package/dist/member/member.types.js.map +1 -1
  210. package/dist/member/types.d.ts +32 -0
  211. package/dist/member/types.js +23 -0
  212. package/dist/member/types.js.map +1 -0
  213. package/dist/member/util.js +120 -29
  214. package/dist/member/util.js.map +1 -1
  215. package/dist/members/collection.d.ts +5 -0
  216. package/dist/members/collection.js +11 -2
  217. package/dist/members/collection.js.map +1 -1
  218. package/dist/members/index.d.ts +56 -11
  219. package/dist/members/index.js +174 -47
  220. package/dist/members/index.js.map +1 -1
  221. package/dist/members/request.d.ts +67 -11
  222. package/dist/members/request.js +102 -54
  223. package/dist/members/request.js.map +1 -1
  224. package/dist/members/types.js +3 -4
  225. package/dist/members/types.js.map +1 -1
  226. package/dist/members/util.d.ts +214 -1
  227. package/dist/members/util.js +327 -284
  228. package/dist/members/util.js.map +1 -1
  229. package/dist/metrics/constants.d.ts +15 -6
  230. package/dist/metrics/constants.js +17 -9
  231. package/dist/metrics/constants.js.map +1 -1
  232. package/dist/metrics/index.d.ts +4 -111
  233. package/dist/metrics/index.js +4 -452
  234. package/dist/metrics/index.js.map +1 -1
  235. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  236. package/dist/multistream/mediaRequestManager.js +344 -0
  237. package/dist/multistream/mediaRequestManager.js.map +1 -0
  238. package/dist/multistream/receiveSlot.d.ts +68 -0
  239. package/dist/multistream/receiveSlot.js +200 -0
  240. package/dist/multistream/receiveSlot.js.map +1 -0
  241. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  242. package/dist/multistream/receiveSlotManager.js +174 -0
  243. package/dist/multistream/receiveSlotManager.js.map +1 -0
  244. package/dist/multistream/remoteMedia.d.ts +72 -0
  245. package/dist/multistream/remoteMedia.js +268 -0
  246. package/dist/multistream/remoteMedia.js.map +1 -0
  247. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  248. package/dist/multistream/remoteMediaGroup.js +267 -0
  249. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  250. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  251. package/dist/multistream/remoteMediaManager.js +1211 -0
  252. package/dist/multistream/remoteMediaManager.js.map +1 -0
  253. package/dist/multistream/sendSlotManager.d.ts +61 -0
  254. package/dist/multistream/sendSlotManager.js +236 -0
  255. package/dist/multistream/sendSlotManager.js.map +1 -0
  256. package/dist/networkQualityMonitor/index.js +5 -4
  257. package/dist/networkQualityMonitor/index.js.map +1 -1
  258. package/dist/personal-meeting-room/index.js +2 -3
  259. package/dist/personal-meeting-room/index.js.map +1 -1
  260. package/dist/personal-meeting-room/request.js +2 -3
  261. package/dist/personal-meeting-room/request.js.map +1 -1
  262. package/dist/personal-meeting-room/util.js +1 -2
  263. package/dist/personal-meeting-room/util.js.map +1 -1
  264. package/dist/reachability/clusterReachability.d.ts +109 -0
  265. package/dist/reachability/clusterReachability.js +357 -0
  266. package/dist/reachability/clusterReachability.js.map +1 -0
  267. package/dist/reachability/index.d.ts +61 -95
  268. package/dist/reachability/index.js +300 -393
  269. package/dist/reachability/index.js.map +1 -1
  270. package/dist/reachability/request.d.ts +7 -3
  271. package/dist/reachability/request.js +18 -10
  272. package/dist/reachability/request.js.map +1 -1
  273. package/dist/reachability/util.d.ts +8 -0
  274. package/dist/reachability/util.js +29 -0
  275. package/dist/reachability/util.js.map +1 -0
  276. package/dist/reactions/constants.d.ts +3 -0
  277. package/dist/reactions/constants.js +12 -0
  278. package/dist/reactions/constants.js.map +1 -0
  279. package/dist/reactions/reactions.d.ts +2 -2
  280. package/dist/reactions/reactions.js +4 -6
  281. package/dist/reactions/reactions.js.map +1 -1
  282. package/dist/reactions/reactions.type.d.ts +23 -3
  283. package/dist/reactions/reactions.type.js +21 -23
  284. package/dist/reactions/reactions.type.js.map +1 -1
  285. package/dist/reconnection-manager/index.d.ts +32 -8
  286. package/dist/reconnection-manager/index.js +282 -231
  287. package/dist/reconnection-manager/index.js.map +1 -1
  288. package/dist/recording-controller/enums.js +4 -5
  289. package/dist/recording-controller/enums.js.map +1 -1
  290. package/dist/recording-controller/index.d.ts +15 -1
  291. package/dist/recording-controller/index.js +57 -46
  292. package/dist/recording-controller/index.js.map +1 -1
  293. package/dist/recording-controller/util.d.ts +5 -4
  294. package/dist/recording-controller/util.js +10 -10
  295. package/dist/recording-controller/util.js.map +1 -1
  296. package/dist/roap/index.d.ts +9 -47
  297. package/dist/roap/index.js +101 -235
  298. package/dist/roap/index.js.map +1 -1
  299. package/dist/roap/request.d.ts +18 -12
  300. package/dist/roap/request.js +126 -180
  301. package/dist/roap/request.js.map +1 -1
  302. package/dist/roap/turnDiscovery.d.ts +27 -16
  303. package/dist/roap/turnDiscovery.js +115 -105
  304. package/dist/roap/turnDiscovery.js.map +1 -1
  305. package/dist/rtcMetrics/constants.d.ts +4 -0
  306. package/dist/rtcMetrics/constants.js +11 -0
  307. package/dist/rtcMetrics/constants.js.map +1 -0
  308. package/dist/rtcMetrics/index.d.ts +54 -0
  309. package/dist/rtcMetrics/index.js +140 -0
  310. package/dist/rtcMetrics/index.js.map +1 -0
  311. package/dist/statsAnalyzer/global.d.ts +1 -83
  312. package/dist/statsAnalyzer/global.js +2 -85
  313. package/dist/statsAnalyzer/global.js.map +1 -1
  314. package/dist/statsAnalyzer/index.d.ts +50 -30
  315. package/dist/statsAnalyzer/index.js +435 -510
  316. package/dist/statsAnalyzer/index.js.map +1 -1
  317. package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
  318. package/dist/statsAnalyzer/mqaUtil.js +120 -83
  319. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  320. package/dist/transcription/index.js +1 -2
  321. package/dist/transcription/index.js.map +1 -1
  322. package/dist/webinar/collection.d.ts +16 -0
  323. package/dist/webinar/collection.js +43 -0
  324. package/dist/webinar/collection.js.map +1 -0
  325. package/dist/webinar/index.d.ts +5 -0
  326. package/dist/webinar/index.js +68 -0
  327. package/dist/webinar/index.js.map +1 -0
  328. package/package.json +38 -26
  329. package/src/annotation/annotation.types.ts +50 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +328 -0
  332. package/src/breakouts/README.md +220 -0
  333. package/src/breakouts/breakout.ts +188 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +56 -0
  337. package/src/breakouts/index.ts +925 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/errors/no-meeting-info.ts +24 -0
  341. package/src/common/errors/webex-errors.ts +36 -12
  342. package/src/common/logs/logger-proxy.ts +1 -1
  343. package/src/common/logs/request.ts +5 -1
  344. package/src/common/queue.ts +22 -8
  345. package/src/config.ts +6 -7
  346. package/src/constants.ts +244 -97
  347. package/src/controls-options-manager/enums.ts +12 -0
  348. package/src/controls-options-manager/index.ts +116 -21
  349. package/src/controls-options-manager/types.ts +59 -0
  350. package/src/controls-options-manager/util.ts +294 -14
  351. package/src/index.ts +44 -0
  352. package/src/interceptors/index.ts +3 -0
  353. package/src/interceptors/locusRetry.ts +67 -0
  354. package/src/interpretation/README.md +60 -0
  355. package/src/interpretation/collection.ts +19 -0
  356. package/src/interpretation/index.ts +332 -0
  357. package/src/interpretation/siLanguage.ts +18 -0
  358. package/src/locus-info/controlsUtils.ts +110 -0
  359. package/src/locus-info/index.ts +449 -61
  360. package/src/locus-info/infoUtils.ts +14 -2
  361. package/src/locus-info/mediaSharesUtils.ts +64 -0
  362. package/src/locus-info/parser.ts +258 -47
  363. package/src/locus-info/selfUtils.ts +85 -2
  364. package/src/media/index.ts +153 -370
  365. package/src/media/properties.ts +106 -136
  366. package/src/media/util.ts +0 -21
  367. package/src/mediaQualityMetrics/config.ts +244 -377
  368. package/src/meeting/in-meeting-actions.ts +176 -0
  369. package/src/meeting/index.ts +3944 -2489
  370. package/src/meeting/locusMediaRequest.ts +313 -0
  371. package/src/meeting/muteState.ts +224 -138
  372. package/src/meeting/request.ts +207 -127
  373. package/src/meeting/request.type.ts +13 -0
  374. package/src/meeting/util.ts +590 -423
  375. package/src/meeting-info/index.ts +81 -8
  376. package/src/meeting-info/meeting-info-v2.ts +163 -13
  377. package/src/meeting-info/util.ts +1 -1
  378. package/src/meeting-info/utilv2.ts +28 -28
  379. package/src/meetings/collection.ts +33 -0
  380. package/src/meetings/index.ts +487 -126
  381. package/src/meetings/meetings.types.ts +12 -0
  382. package/src/meetings/request.ts +2 -0
  383. package/src/meetings/util.ts +116 -5
  384. package/src/member/index.ts +43 -1
  385. package/src/member/types.ts +38 -0
  386. package/src/member/util.ts +125 -28
  387. package/src/members/collection.ts +8 -0
  388. package/src/members/index.ts +187 -52
  389. package/src/members/request.ts +87 -27
  390. package/src/members/util.ts +332 -291
  391. package/src/metrics/constants.ts +15 -6
  392. package/src/metrics/index.ts +1 -471
  393. package/src/multistream/mediaRequestManager.ts +440 -0
  394. package/src/multistream/receiveSlot.ts +184 -0
  395. package/src/multistream/receiveSlotManager.ts +166 -0
  396. package/src/multistream/remoteMedia.ts +254 -0
  397. package/src/multistream/remoteMediaGroup.ts +284 -0
  398. package/src/multistream/remoteMediaManager.ts +1145 -0
  399. package/src/multistream/sendSlotManager.ts +170 -0
  400. package/src/networkQualityMonitor/index.ts +6 -6
  401. package/src/reachability/clusterReachability.ts +320 -0
  402. package/src/reachability/index.ts +243 -347
  403. package/src/reachability/request.ts +17 -8
  404. package/src/reachability/util.ts +24 -0
  405. package/src/reactions/constants.ts +4 -0
  406. package/src/reactions/reactions.ts +4 -4
  407. package/src/reactions/reactions.type.ts +30 -4
  408. package/src/reconnection-manager/index.ts +168 -156
  409. package/src/recording-controller/index.ts +20 -3
  410. package/src/recording-controller/util.ts +26 -9
  411. package/src/roap/index.ts +98 -241
  412. package/src/roap/request.ts +74 -148
  413. package/src/roap/turnDiscovery.ts +62 -56
  414. package/src/rtcMetrics/constants.ts +3 -0
  415. package/src/rtcMetrics/index.ts +124 -0
  416. package/src/statsAnalyzer/global.ts +1 -84
  417. package/src/statsAnalyzer/index.ts +477 -643
  418. package/src/statsAnalyzer/mqaUtil.ts +115 -114
  419. package/src/webinar/collection.ts +31 -0
  420. package/src/webinar/index.ts +62 -0
  421. package/test/integration/spec/converged-space-meetings.js +233 -0
  422. package/test/integration/spec/journey.js +320 -264
  423. package/test/integration/spec/space-meeting.js +77 -4
  424. package/test/unit/spec/annotation/index.ts +418 -0
  425. package/test/unit/spec/breakouts/breakout.ts +237 -0
  426. package/test/unit/spec/breakouts/collection.ts +15 -0
  427. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  428. package/test/unit/spec/breakouts/events.ts +89 -0
  429. package/test/unit/spec/breakouts/index.ts +1790 -0
  430. package/test/unit/spec/breakouts/request.ts +104 -0
  431. package/test/unit/spec/breakouts/utils.js +72 -0
  432. package/test/unit/spec/common/queue.js +31 -2
  433. package/test/unit/spec/controls-options-manager/index.js +163 -0
  434. package/test/unit/spec/controls-options-manager/util.js +576 -60
  435. package/test/unit/spec/fixture/locus.js +1 -0
  436. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  437. package/test/unit/spec/interpretation/collection.ts +15 -0
  438. package/test/unit/spec/interpretation/index.ts +589 -0
  439. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  440. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  441. package/test/unit/spec/locus-info/index.js +1390 -16
  442. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  443. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  444. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  445. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  446. package/test/unit/spec/locus-info/parser.js +116 -35
  447. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  448. package/test/unit/spec/media/index.ts +290 -0
  449. package/test/unit/spec/media/properties.ts +75 -84
  450. package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
  451. package/test/unit/spec/meeting/index.js +8187 -2769
  452. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  453. package/test/unit/spec/meeting/muteState.js +409 -213
  454. package/test/unit/spec/meeting/request.js +512 -42
  455. package/test/unit/spec/meeting/utils.js +741 -24
  456. package/test/unit/spec/meeting-info/index.js +300 -0
  457. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  458. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  459. package/test/unit/spec/meetings/collection.js +26 -0
  460. package/test/unit/spec/meetings/index.js +1313 -243
  461. package/test/unit/spec/meetings/utils.js +202 -2
  462. package/test/unit/spec/member/index.js +32 -9
  463. package/test/unit/spec/member/util.js +499 -61
  464. package/test/unit/spec/members/index.js +394 -5
  465. package/test/unit/spec/members/request.js +206 -27
  466. package/test/unit/spec/members/utils.js +173 -38
  467. package/test/unit/spec/metrics/index.js +1 -50
  468. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  469. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  470. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  471. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  472. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  473. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  474. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  475. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  476. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  477. package/test/unit/spec/reachability/index.ts +531 -24
  478. package/test/unit/spec/reachability/request.js +68 -0
  479. package/test/unit/spec/reachability/util.ts +40 -0
  480. package/test/unit/spec/reconnection-manager/index.js +162 -24
  481. package/test/unit/spec/recording-controller/index.js +293 -218
  482. package/test/unit/spec/recording-controller/util.js +223 -96
  483. package/test/unit/spec/roap/index.ts +200 -76
  484. package/test/unit/spec/roap/request.ts +255 -0
  485. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  486. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  487. package/test/unit/spec/stats-analyzer/index.js +261 -167
  488. package/test/unit/spec/webinar/collection.ts +13 -0
  489. package/test/unit/spec/webinar/index.ts +60 -0
  490. package/test/utils/constants.js +9 -0
  491. package/test/utils/integrationTestUtils.js +46 -0
  492. package/test/utils/testUtils.js +0 -45
  493. package/test/utils/webex-config.js +4 -0
  494. package/test/utils/webex-test-users.js +7 -3
  495. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  496. package/dist/meeting/effectsState.d.ts +0 -42
  497. package/dist/meeting/effectsState.js +0 -260
  498. package/dist/meeting/effectsState.js.map +0 -1
  499. package/dist/metrics/config.d.ts +0 -169
  500. package/dist/metrics/config.js +0 -289
  501. package/dist/metrics/config.js.map +0 -1
  502. package/dist/peer-connection-manager/index.d.ts +0 -6
  503. package/dist/peer-connection-manager/index.js +0 -671
  504. package/dist/peer-connection-manager/index.js.map +0 -1
  505. package/dist/peer-connection-manager/util.d.ts +0 -6
  506. package/dist/peer-connection-manager/util.js +0 -110
  507. package/dist/peer-connection-manager/util.js.map +0 -1
  508. package/dist/roap/collection.d.ts +0 -10
  509. package/dist/roap/collection.js +0 -63
  510. package/dist/roap/collection.js.map +0 -1
  511. package/dist/roap/handler.d.ts +0 -47
  512. package/dist/roap/handler.js +0 -279
  513. package/dist/roap/handler.js.map +0 -1
  514. package/dist/roap/state.d.ts +0 -9
  515. package/dist/roap/state.js +0 -127
  516. package/dist/roap/state.js.map +0 -1
  517. package/dist/roap/util.d.ts +0 -2
  518. package/dist/roap/util.js +0 -76
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/index.js +0 -15
  521. package/src/meeting/effectsState.ts +0 -209
  522. package/src/metrics/config.ts +0 -485
  523. package/src/peer-connection-manager/index.ts +0 -847
  524. package/src/peer-connection-manager/util.ts +0 -119
  525. package/src/roap/collection.ts +0 -62
  526. package/src/roap/handler.ts +0 -294
  527. package/src/roap/state.ts +0 -156
  528. package/src/roap/util.ts +0 -100
  529. package/test/unit/spec/meeting/effectsState.js +0 -281
  530. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  531. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  532. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  533. package/test/unit/spec/roap/util.js +0 -30
  534. /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
  535. /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
@@ -3,7 +3,8 @@ import PermissionError from '../common/errors/permission';
3
3
  import {CONTROLS, HTTP_VERBS} from '../constants';
4
4
  import MeetingRequest from '../meeting/request';
5
5
  import LoggerProxy from '../common/logs/logger-proxy';
6
- import Setting from './enums';
6
+ import {Control, Setting} from './enums';
7
+ import {ControlConfig} from './types';
7
8
  import Util from './util';
8
9
  import {CAN_SET, CAN_UNSET, ENABLED} from './constants';
9
10
 
@@ -133,32 +134,106 @@ export default class ControlsOptionsManager {
133
134
  this.setLocusUrl(options?.locusUrl);
134
135
  }
135
136
 
137
+ /**
138
+ * Set controls for this meeting.
139
+ *
140
+ * @param {Array<ControlConfig>} controls - Spread Array of ControlConfigs
141
+ * @returns {Promise<Array<any>>}- Promise resolving if the request was successful.
142
+ */
143
+ public update(...controls: Array<ControlConfig>) {
144
+ const payloads = controls.map((control) => {
145
+ if (!Object.keys(Control).includes(control.scope)) {
146
+ throw new Error(
147
+ `updating meeting control scope "${control.scope}" is not a supported scope`
148
+ );
149
+ }
150
+
151
+ if (!Util.canUpdate(control, this.displayHints)) {
152
+ throw new PermissionError(
153
+ `updating meeting control scope "${control.scope}" not allowed, due to moderator property.`
154
+ );
155
+ }
156
+
157
+ return {
158
+ [control.scope]: control.properties,
159
+ };
160
+ });
161
+
162
+ return payloads.reduce((previous, payload) => {
163
+ return previous.then(() =>
164
+ // @ts-ignore
165
+ this.request.request({
166
+ uri: `${this.locusUrl}/${CONTROLS}`,
167
+ body: payload,
168
+ method: HTTP_VERBS.PATCH,
169
+ })
170
+ );
171
+ }, Promise.resolve());
172
+ }
173
+
136
174
  /**
137
175
  * @param {Setting} setting
138
- * @param {boolean} enabled
139
176
  * @private
140
177
  * @memberof ControlsOptionsManager
141
178
  * @returns {Promise}
142
179
  */
143
- private setControls(setting: Setting, enabled: boolean): Promise<any> {
144
- LoggerProxy.logger.log(`ControlsOptionsManager:index#setControls --> ${setting} [${enabled}]`);
145
-
146
- if (Util?.[`${enabled ? CAN_SET : CAN_UNSET}${setting}`](this.displayHints)) {
147
- // @ts-ignore
148
- return this.request.request({
149
- uri: `${this.locusUrl}/${CONTROLS}`,
150
- body: {
151
- [camelCase(setting)]: {
152
- [ENABLED]: enabled,
153
- },
154
- },
155
- method: HTTP_VERBS.PATCH,
156
- });
180
+ private setControls(setting: {[key in Setting]?: boolean}): Promise<any> {
181
+ LoggerProxy.logger.log(
182
+ `ControlsOptionsManager:index#setControls --> ${JSON.stringify(setting)}`
183
+ );
184
+
185
+ const body: Record<string, any> = {};
186
+ let error: PermissionError;
187
+
188
+ let shouldSkipCheckToMergeBody = false;
189
+
190
+ Object.entries(setting).forEach(([key, value]) => {
191
+ if (
192
+ !shouldSkipCheckToMergeBody &&
193
+ !Util?.[`${value ? CAN_SET : CAN_UNSET}${key}`](this.displayHints)
194
+ ) {
195
+ error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);
196
+ }
197
+
198
+ if (error) {
199
+ return;
200
+ }
201
+
202
+ switch (key) {
203
+ case Setting.muted:
204
+ shouldSkipCheckToMergeBody = true;
205
+ body.audio = body.audio
206
+ ? {...body.audio, [camelCase(key)]: value}
207
+ : {[camelCase(key)]: value};
208
+ break;
209
+
210
+ case Setting.disallowUnmute:
211
+ case Setting.muteOnEntry:
212
+ if (Object.keys(setting).includes(Setting.muted)) {
213
+ body.audio = body.audio
214
+ ? {...body.audio, [camelCase(key)]: value}
215
+ : {[camelCase(key)]: value};
216
+ body.audio[camelCase(key)] = value;
217
+ } else {
218
+ body[camelCase(key)] = {[ENABLED]: value};
219
+ }
220
+ break;
221
+
222
+ default:
223
+ error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);
224
+ }
225
+ });
226
+
227
+ if (error) {
228
+ return Promise.reject(error);
157
229
  }
158
230
 
159
- return Promise.reject(
160
- new PermissionError(`${setting} [${enabled}] not allowed, due to moderator property.`)
161
- );
231
+ // @ts-ignore
232
+ return this.request.request({
233
+ uri: `${this.locusUrl}/${CONTROLS}`,
234
+ body,
235
+ method: HTTP_VERBS.PATCH,
236
+ });
162
237
  }
163
238
 
164
239
  /**
@@ -168,7 +243,7 @@ export default class ControlsOptionsManager {
168
243
  * @returns {Promise}
169
244
  */
170
245
  public setMuteOnEntry(enabled: boolean): Promise<any> {
171
- return this.setControls(Setting.muteOnEntry, enabled);
246
+ return this.setControls({[Setting.muteOnEntry]: enabled});
172
247
  }
173
248
 
174
249
  /**
@@ -178,6 +253,26 @@ export default class ControlsOptionsManager {
178
253
  * @returns {Promise}
179
254
  */
180
255
  public setDisallowUnmute(enabled: boolean): Promise<any> {
181
- return this.setControls(Setting.disallowUnmute, enabled);
256
+ return this.setControls({[Setting.disallowUnmute]: enabled});
257
+ }
258
+
259
+ /**
260
+ * @public
261
+ * @param {boolean} mutedEnabled
262
+ * @param {boolean} disallowUnmuteEnabled
263
+ * @param {boolean} muteOnEntryEnabled
264
+ * @memberof ControlsOptionsManager
265
+ * @returns {Promise}
266
+ */
267
+ public setMuteAll(
268
+ mutedEnabled: boolean,
269
+ disallowUnmuteEnabled: boolean,
270
+ muteOnEntryEnabled: boolean
271
+ ): Promise<any> {
272
+ return this.setControls({
273
+ [Setting.muted]: mutedEnabled,
274
+ [Setting.disallowUnmute]: disallowUnmuteEnabled,
275
+ [Setting.muteOnEntry]: muteOnEntryEnabled,
276
+ });
182
277
  }
183
278
  }
@@ -0,0 +1,59 @@
1
+ import {Control} from './enums';
2
+
3
+ export interface ControlProperties {
4
+ /**
5
+ * A list of additional properties that apply to various specific settings.
6
+ *
7
+ * @remarks
8
+ * The values stored here, per the service, are fully ambiguous, an can vary
9
+ * depending on which control scope is being configured.
10
+ */
11
+ [key: string]: boolean;
12
+ }
13
+
14
+ export interface AudioProperties {
15
+ muted?: boolean;
16
+ disallowUnmute?: boolean;
17
+ muteOnEntry?: boolean;
18
+ }
19
+
20
+ export interface RaiseHandProperties {
21
+ enabled?: boolean;
22
+ }
23
+
24
+ export interface ReactionsProperties {
25
+ enabled?: boolean;
26
+ showDisplayNameWithReactions?: boolean;
27
+ }
28
+
29
+ export interface ShareControlProperties {
30
+ control?: 'ANYONE' | 'MODERATOR_PRESENTER';
31
+ }
32
+
33
+ export interface VideoProperties {
34
+ enabled?: boolean;
35
+ }
36
+
37
+ export interface ViewTheParticipantListProperties {
38
+ enabled?: boolean;
39
+ }
40
+
41
+ export type Properties =
42
+ | AudioProperties
43
+ | RaiseHandProperties
44
+ | ReactionsProperties
45
+ | ShareControlProperties
46
+ | VideoProperties
47
+ | ViewTheParticipantListProperties;
48
+
49
+ export interface ControlConfig<Props = Properties> {
50
+ /**
51
+ * The scope of the control within this object.
52
+ */
53
+ scope: Control;
54
+
55
+ /**
56
+ * The properties to assign to this control.
57
+ */
58
+ properties: Props;
59
+ }
@@ -1,20 +1,300 @@
1
1
  import {DISPLAY_HINTS} from '../constants';
2
+ import {Control} from './enums';
3
+ import {
4
+ ControlConfig,
5
+ AudioProperties,
6
+ RaiseHandProperties,
7
+ ReactionsProperties,
8
+ ViewTheParticipantListProperties,
9
+ VideoProperties,
10
+ } from './types';
2
11
 
3
- const canSetMuteOnEntry = (displayHints: Array<string>): boolean =>
4
- displayHints.includes(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);
12
+ /**
13
+ * The Controls Options Manager utilities
14
+ *
15
+ * @internal
16
+ */
17
+ class Utils {
18
+ /**
19
+ * Validate if enabling mute on entry can be set.
20
+ *
21
+ * @param {Array<string>} displayHints - Display Hints to use when validating.
22
+ * @returns {boolean} - True if the action is allowed.
23
+ */
24
+ public static canSetMuteOnEntry(displayHints: Array<string>): boolean {
25
+ return displayHints.includes(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);
26
+ }
5
27
 
6
- const canSetDisallowUnmute = (displayHints: Array<string>): boolean =>
7
- displayHints.includes(DISPLAY_HINTS.ENABLE_HARD_MUTE);
28
+ /**
29
+ * Validate if allowing unmuting can be set.
30
+ *
31
+ * @param {Array<string>} displayHints - Display Hints to use when validating.
32
+ * @returns {boolean} - True if the action is allowed.
33
+ */
34
+ public static canSetDisallowUnmute(displayHints: Array<string>): boolean {
35
+ return displayHints.includes(DISPLAY_HINTS.ENABLE_HARD_MUTE);
36
+ }
8
37
 
9
- const canUnsetMuteOnEntry = (displayHints: Array<string>): boolean =>
10
- displayHints.includes(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);
38
+ /**
39
+ * Validate if disabling mute on entry can be set.
40
+ *
41
+ * @param {Array<string>} displayHints - Display Hints to use when validating.
42
+ * @returns {boolean} - True if the action is allowed.
43
+ */
44
+ public static canUnsetMuteOnEntry(displayHints: Array<string>): boolean {
45
+ return displayHints.includes(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);
46
+ }
11
47
 
12
- const canUnsetDisallowUnmute = (displayHints: Array<string>): boolean =>
13
- displayHints.includes(DISPLAY_HINTS.DISABLE_HARD_MUTE);
48
+ /**
49
+ * Validate if enabling muting can be set.
50
+ *
51
+ * @param {Array<string>} displayHints - Display Hints to use when validating.
52
+ * @returns {boolean} - True if the action is allowed.
53
+ */
54
+ public static canUnsetDisallowUnmute(displayHints: Array<string>): boolean {
55
+ return displayHints.includes(DISPLAY_HINTS.DISABLE_HARD_MUTE);
56
+ }
14
57
 
15
- export default {
16
- canSetMuteOnEntry,
17
- canSetDisallowUnmute,
18
- canUnsetMuteOnEntry,
19
- canUnsetDisallowUnmute,
20
- };
58
+ /**
59
+ * Validate if muting all can be set.
60
+ *
61
+ * @param {Array<string>} displayHints - Display Hints to use when validating.
62
+ * @returns {boolean} - True if the action is allowed.
63
+ */
64
+ public static canSetMuted(displayHints: Array<string>): boolean {
65
+ return displayHints.includes(DISPLAY_HINTS.MUTE_ALL);
66
+ }
67
+
68
+ /**
69
+ * Validate if unmuting all can be set.
70
+ *
71
+ * @param {Array<string>} displayHints - Display Hints to use when validating.
72
+ * @returns {boolean} - True if the action is allowed.
73
+ */
74
+ public static canUnsetMuted(displayHints: Array<string>): boolean {
75
+ return displayHints.includes(DISPLAY_HINTS.UNMUTE_ALL);
76
+ }
77
+
78
+ /**
79
+ * Validate an array of hints are allowed based on a full collection of hints.
80
+ *
81
+ * @param {Object} config - Configuration Object.
82
+ * @param {Array<string>} config.requiredHints - Hints required for validation.
83
+ * @param {Array<string>} config.displayHints - All available hints.
84
+ * @returns {boolean} - True if all of the actions are allowed.
85
+ */
86
+ public static hasHints(config: {requiredHints: Array<string>; displayHints: Array<string>}) {
87
+ const {requiredHints, displayHints} = config;
88
+
89
+ return requiredHints.every((hint) => displayHints.includes(hint));
90
+ }
91
+
92
+ /**
93
+ * Validate that the self policy object contains the required policies.
94
+ *
95
+ * @param {Object} config - Configuration Object.
96
+ * @param {Array<string>} config.requiredPolicies - Policies required for validation.
97
+ * @param {Array<string>} config.policies - All available policies.
98
+ * @returns {boolean} - True if all of the actions are allowed.
99
+ */
100
+ public static hasPolicies(config: {requiredPolicies: Array<string>; policies: Array<string>}) {
101
+ const {requiredPolicies, policies = {}} = config;
102
+
103
+ return requiredPolicies.every((hint) => policies[hint]);
104
+ }
105
+
106
+ /**
107
+ * Validate if an audio-scoped control is allowed to be sent to the service.
108
+ *
109
+ * @param {ControlConfig<AudioProperties>} control - Audio control config to validate.
110
+ * @param {Array<string>} displayHints - All available hints.
111
+ * @returns {boolean} - True if all of the actions are allowed.
112
+ */
113
+ public static canUpdateAudio(
114
+ control: ControlConfig<AudioProperties>,
115
+ displayHints: Array<string>
116
+ ) {
117
+ const requiredHints = [];
118
+
119
+ if (control.properties.muted === true) {
120
+ requiredHints.push(DISPLAY_HINTS.MUTE_ALL);
121
+ }
122
+ if (control.properties.muted === false) {
123
+ requiredHints.push(DISPLAY_HINTS.UNMUTE_ALL);
124
+ }
125
+ if (control.properties.disallowUnmute === true) {
126
+ requiredHints.push(DISPLAY_HINTS.ENABLE_HARD_MUTE);
127
+ }
128
+ if (control.properties.disallowUnmute === false) {
129
+ requiredHints.push(DISPLAY_HINTS.DISABLE_HARD_MUTE);
130
+ }
131
+ if (control.properties.muteOnEntry === true) {
132
+ requiredHints.push(DISPLAY_HINTS.ENABLE_MUTE_ON_ENTRY);
133
+ }
134
+ if (control.properties.muteOnEntry === false) {
135
+ requiredHints.push(DISPLAY_HINTS.DISABLE_MUTE_ON_ENTRY);
136
+ }
137
+
138
+ return Utils.hasHints({requiredHints, displayHints});
139
+ }
140
+
141
+ public static canUpdateRaiseHand(
142
+ control: ControlConfig<RaiseHandProperties>,
143
+ displayHints: Array<string>
144
+ ) {
145
+ const requiredHints = [];
146
+
147
+ if (control.properties.enabled === true) {
148
+ requiredHints.push(DISPLAY_HINTS.ENABLE_RAISE_HAND);
149
+ }
150
+ if (control.properties.enabled === false) {
151
+ requiredHints.push(DISPLAY_HINTS.DISABLE_RAISE_HAND);
152
+ }
153
+
154
+ return Utils.hasHints({requiredHints, displayHints});
155
+ }
156
+
157
+ /**
158
+ * Validate if an reactions-scoped control is allowed to be sent to the service.
159
+ *
160
+ * @param {ControlConfig<ReactionsProperties>} control - Reaction control config to validate.
161
+ * @param {Array<string>} displayHints - All available hints.
162
+ * @returns {boolean} - True if all of the actions are allowed.
163
+ */
164
+ public static canUpdateReactions(
165
+ control: ControlConfig<ReactionsProperties>,
166
+ displayHints: Array<string>
167
+ ) {
168
+ const requiredHints = [];
169
+
170
+ // This additional if statement avoids the display hint discrepency due to
171
+ // the service blocking partial requests with this property only.
172
+ if (control.properties.showDisplayNameWithReactions !== undefined) {
173
+ if (control.properties.showDisplayNameWithReactions === true) {
174
+ requiredHints.push(DISPLAY_HINTS.ENABLE_SHOW_DISPLAY_NAME);
175
+ }
176
+ if (control.properties.showDisplayNameWithReactions === false) {
177
+ requiredHints.push(DISPLAY_HINTS.DISABLE_SHOW_DISPLAY_NAME);
178
+ }
179
+ } else {
180
+ if (control.properties.enabled === true) {
181
+ requiredHints.push(DISPLAY_HINTS.ENABLE_REACTIONS);
182
+ }
183
+ if (control.properties.enabled === false) {
184
+ requiredHints.push(DISPLAY_HINTS.DISABLE_REACTIONS);
185
+ }
186
+ }
187
+
188
+ return Utils.hasHints({requiredHints, displayHints});
189
+ }
190
+
191
+ /**
192
+ * Validate if an share-control-scoped control is allowed to be sent to the service.
193
+ *
194
+ * @param {Array<string>} displayHints - All available hints.
195
+ * @returns {boolean} - True if all of the actions are allowed.
196
+ */
197
+ public static canUpdateShareControl(displayHints: Array<string>) {
198
+ return Utils.hasHints({requiredHints: [DISPLAY_HINTS.SHARE_CONTROL], displayHints});
199
+ }
200
+
201
+ /**
202
+ * Validate if an view-the-participants-list-scoped control is allowed to be sent to the service.
203
+ *
204
+ * @param {ControlConfig<ViewTheParticipantListProperties>} control - View Participants List control config to validate.
205
+ * @param {Array<string>} displayHints - All available hints.
206
+ * @returns {boolean} - True if all of the actions are allowed.
207
+ */
208
+ public static canUpdateViewTheParticipantsList(
209
+ control: ControlConfig<ViewTheParticipantListProperties>,
210
+ displayHints: Array<string>
211
+ ) {
212
+ const requiredHints = [];
213
+
214
+ if (control.properties.enabled === true) {
215
+ requiredHints.push(DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST);
216
+ }
217
+ if (control.properties.enabled === false) {
218
+ requiredHints.push(DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST);
219
+ }
220
+
221
+ return Utils.hasHints({requiredHints, displayHints});
222
+ }
223
+
224
+ /**
225
+ * Validate if a video-scoped control is allowed to be sent to the service.
226
+ *
227
+ * @param {ControlConfig<VideoProperties>} control - Video control config to validate.
228
+ * @param {Array<string>} displayHints - All available hints.
229
+ * @returns {boolean} - True if all of the actions are allowed.
230
+ */
231
+ public static canUpdateVideo(
232
+ control: ControlConfig<VideoProperties>,
233
+ displayHints: Array<string>
234
+ ) {
235
+ const requiredHints = [];
236
+
237
+ if (control.properties.enabled === true) {
238
+ requiredHints.push(DISPLAY_HINTS.ENABLE_VIDEO);
239
+ }
240
+ if (control.properties.enabled === false) {
241
+ requiredHints.push(DISPLAY_HINTS.DISABLE_VIDEO);
242
+ }
243
+
244
+ return Utils.hasHints({requiredHints, displayHints});
245
+ }
246
+
247
+ /**
248
+ * Validate that a control can be sent to the service based on the provided
249
+ * display hints.
250
+ *
251
+ * @param {ControlConfig} control - Control to validate.
252
+ * @param {Array<string>} displayHints - All available hints.
253
+ * @returns {boolean} - True if all of the actions are allowed.
254
+ */
255
+ public static canUpdate(control: ControlConfig, displayHints: Array<string>) {
256
+ let determinant: boolean;
257
+
258
+ switch (control.scope) {
259
+ case Control.audio:
260
+ determinant = Utils.canUpdateAudio(control as ControlConfig<AudioProperties>, displayHints);
261
+ break;
262
+
263
+ case Control.raiseHand:
264
+ determinant = Utils.canUpdateRaiseHand(
265
+ control as ControlConfig<RaiseHandProperties>,
266
+ displayHints
267
+ );
268
+ break;
269
+
270
+ case Control.reactions:
271
+ determinant = Utils.canUpdateReactions(
272
+ control as ControlConfig<ReactionsProperties>,
273
+ displayHints
274
+ );
275
+ break;
276
+
277
+ case Control.shareControl:
278
+ determinant = Utils.canUpdateShareControl(displayHints);
279
+ break;
280
+
281
+ case Control.video:
282
+ determinant = Utils.canUpdateVideo(control as ControlConfig<VideoProperties>, displayHints);
283
+ break;
284
+
285
+ case Control.viewTheParticipantList:
286
+ determinant = Utils.canUpdateViewTheParticipantsList(
287
+ control as ControlConfig<ViewTheParticipantListProperties>,
288
+ displayHints
289
+ );
290
+ break;
291
+
292
+ default:
293
+ determinant = false;
294
+ }
295
+
296
+ return determinant;
297
+ }
298
+ }
299
+
300
+ export default Utils;
package/src/index.ts ADDED
@@ -0,0 +1,44 @@
1
+ /* eslint-env browser */
2
+ import {registerPlugin} from '@webex/webex-core';
3
+
4
+ import Meetings from './meetings';
5
+ import config from './config';
6
+ import {LocusRetryStatusInterceptor} from './interceptors';
7
+
8
+ registerPlugin('meetings', Meetings, {
9
+ config,
10
+ interceptors: {
11
+ LocusRetryStatusInterceptor: LocusRetryStatusInterceptor.create,
12
+ },
13
+ });
14
+
15
+ export {
16
+ getDevices,
17
+ LocalStream,
18
+ LocalDisplayStream,
19
+ LocalSystemAudioStream,
20
+ LocalStreamEventNames,
21
+ StreamEventNames,
22
+ type ServerMuteReason,
23
+ LocalMicrophoneStreamEventNames,
24
+ LocalCameraStreamEventNames,
25
+ LocalMicrophoneStream,
26
+ LocalCameraStream,
27
+ createMicrophoneStream,
28
+ createCameraStream,
29
+ createDisplayStream,
30
+ createDisplayStreamWithAudio,
31
+ FacingMode,
32
+ DisplaySurface,
33
+ PresetCameraConstraints,
34
+ type VideoContentHint,
35
+ } from '@webex/media-helpers';
36
+
37
+ export default Meetings;
38
+
39
+ export * as CONSTANTS from './constants';
40
+ export * as REACTIONS from './reactions/reactions';
41
+
42
+ export {RemoteMedia} from './multistream/remoteMedia';
43
+
44
+ export {default as TriggerProxy} from './common/events/trigger-proxy';
@@ -0,0 +1,3 @@
1
+ import LocusRetryStatusInterceptor from './locusRetry';
2
+
3
+ export {LocusRetryStatusInterceptor};
@@ -0,0 +1,67 @@
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {Interceptor} from '@webex/http-core';
6
+
7
+ const rateLimitExpiryTime = new WeakMap();
8
+ /**
9
+ * @class
10
+ */
11
+ export default class LocusRetryStatusInterceptor extends Interceptor {
12
+ /**
13
+ * @returns {LocusRetryStatusInterceptor}
14
+ */
15
+ static create() {
16
+ // @ts-ignore
17
+ return new LocusRetryStatusInterceptor({webex: this});
18
+ }
19
+
20
+ /**
21
+ * Handle response errors
22
+ * @param {Object} options
23
+ * @param {WebexHttpError} reason
24
+ * @returns {Promise<WebexHttpError>}
25
+ */
26
+ onResponseError(options, reason) {
27
+ if ((reason.statusCode === 503 || reason.statusCode === 429) && options.uri.includes('locus')) {
28
+ const hasRetriedLocusRequest = rateLimitExpiryTime.get(this);
29
+ const retryAfterTime = options.headers['retry-after'] || 2000;
30
+
31
+ if (hasRetriedLocusRequest) {
32
+ rateLimitExpiryTime.set(this, false);
33
+
34
+ return Promise.reject(options);
35
+ }
36
+ rateLimitExpiryTime.set(this, true);
37
+
38
+ return this.handleRetryRequestLocusServiceError(options, retryAfterTime);
39
+ }
40
+
41
+ return Promise.reject(reason);
42
+ }
43
+
44
+ /**
45
+ * Handle retries for locus service unavailable errors
46
+ * @param {Object} options associated with the request
47
+ * @param {number} retryAfterTime retry after time in milliseconds
48
+ * @returns {Promise}
49
+ */
50
+ handleRetryRequestLocusServiceError(options, retryAfterTime) {
51
+ return new Promise((resolve, reject) => {
52
+ const timeout = setTimeout(() => {
53
+ clearTimeout(timeout);
54
+
55
+ // @ts-ignore
56
+ this.webex
57
+ .request({
58
+ method: options.method,
59
+ uri: options.uri,
60
+ body: options.body,
61
+ })
62
+ .then(resolve)
63
+ .catch(reject);
64
+ }, retryAfterTime);
65
+ });
66
+ }
67
+ }