@webex/plugin-meetings 3.0.0-beta.16 → 3.0.0-beta.161

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 (424) hide show
  1. package/README.md +45 -1
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +212 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +3 -2
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/config.js +6 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +175 -26
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +300 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +77 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +214 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +92 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +317 -24
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/mediaSharesUtils.js +43 -1
  53. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  54. package/dist/locus-info/parser.js +2 -1
  55. package/dist/locus-info/parser.js.map +1 -1
  56. package/dist/locus-info/selfUtils.js +97 -14
  57. package/dist/locus-info/selfUtils.js.map +1 -1
  58. package/dist/media/index.js +39 -134
  59. package/dist/media/index.js.map +1 -1
  60. package/dist/media/properties.js +19 -97
  61. package/dist/media/properties.js.map +1 -1
  62. package/dist/mediaQualityMetrics/config.js +505 -493
  63. package/dist/mediaQualityMetrics/config.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +79 -1
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2349 -2178
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +291 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +229 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +191 -167
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/request.type.js.map +1 -1
  75. package/dist/meeting/util.js +444 -443
  76. package/dist/meeting/util.js.map +1 -1
  77. package/dist/meeting-info/meeting-info-v2.js +157 -49
  78. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  79. package/dist/meeting-info/utilv2.js +20 -5
  80. package/dist/meeting-info/utilv2.js.map +1 -1
  81. package/dist/meetings/collection.js +22 -0
  82. package/dist/meetings/collection.js.map +1 -1
  83. package/dist/meetings/index.js +365 -73
  84. package/dist/meetings/index.js.map +1 -1
  85. package/dist/meetings/meetings.types.js +7 -0
  86. package/dist/meetings/meetings.types.js.map +1 -0
  87. package/dist/meetings/request.js +16 -12
  88. package/dist/meetings/request.js.map +1 -1
  89. package/dist/meetings/util.js +88 -1
  90. package/dist/meetings/util.js.map +1 -1
  91. package/dist/member/index.js +43 -0
  92. package/dist/member/index.js.map +1 -1
  93. package/dist/member/types.js +15 -0
  94. package/dist/member/types.js.map +1 -0
  95. package/dist/member/util.js +97 -3
  96. package/dist/member/util.js.map +1 -1
  97. package/dist/members/collection.js +10 -0
  98. package/dist/members/collection.js.map +1 -1
  99. package/dist/members/index.js +94 -11
  100. package/dist/members/index.js.map +1 -1
  101. package/dist/members/request.js +109 -39
  102. package/dist/members/request.js.map +1 -1
  103. package/dist/members/types.js +15 -0
  104. package/dist/members/types.js.map +1 -0
  105. package/dist/members/util.js +316 -233
  106. package/dist/members/util.js.map +1 -1
  107. package/dist/metrics/config.js +50 -14
  108. package/dist/metrics/config.js.map +1 -1
  109. package/dist/metrics/constants.js +3 -5
  110. package/dist/metrics/constants.js.map +1 -1
  111. package/dist/metrics/index.js +48 -29
  112. package/dist/metrics/index.js.map +1 -1
  113. package/dist/multistream/mediaRequestManager.js +265 -36
  114. package/dist/multistream/mediaRequestManager.js.map +1 -1
  115. package/dist/multistream/receiveSlot.js +52 -19
  116. package/dist/multistream/receiveSlot.js.map +1 -1
  117. package/dist/multistream/receiveSlotManager.js +53 -33
  118. package/dist/multistream/receiveSlotManager.js.map +1 -1
  119. package/dist/multistream/remoteMedia.js +44 -18
  120. package/dist/multistream/remoteMedia.js.map +1 -1
  121. package/dist/multistream/remoteMediaGroup.js +60 -3
  122. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  123. package/dist/multistream/remoteMediaManager.js +322 -103
  124. package/dist/multistream/remoteMediaManager.js.map +1 -1
  125. package/dist/networkQualityMonitor/index.js +4 -2
  126. package/dist/networkQualityMonitor/index.js.map +1 -1
  127. package/dist/reachability/index.js +117 -60
  128. package/dist/reachability/index.js.map +1 -1
  129. package/dist/reachability/request.js +12 -5
  130. package/dist/reachability/request.js.map +1 -1
  131. package/dist/reactions/constants.js +13 -0
  132. package/dist/reactions/constants.js.map +1 -0
  133. package/dist/reactions/reactions.js +2 -2
  134. package/dist/reactions/reactions.js.map +1 -1
  135. package/dist/reactions/reactions.type.js +18 -18
  136. package/dist/reactions/reactions.type.js.map +1 -1
  137. package/dist/reconnection-manager/index.js +190 -145
  138. package/dist/reconnection-manager/index.js.map +1 -1
  139. package/dist/recording-controller/enums.js +17 -0
  140. package/dist/recording-controller/enums.js.map +1 -0
  141. package/dist/recording-controller/index.js +343 -0
  142. package/dist/recording-controller/index.js.map +1 -0
  143. package/dist/recording-controller/util.js +63 -0
  144. package/dist/recording-controller/util.js.map +1 -0
  145. package/dist/roap/index.js +21 -29
  146. package/dist/roap/index.js.map +1 -1
  147. package/dist/roap/request.js +127 -92
  148. package/dist/roap/request.js.map +1 -1
  149. package/dist/roap/turnDiscovery.js +135 -53
  150. package/dist/roap/turnDiscovery.js.map +1 -1
  151. package/dist/statsAnalyzer/global.js +1 -93
  152. package/dist/statsAnalyzer/global.js.map +1 -1
  153. package/dist/statsAnalyzer/index.js +329 -314
  154. package/dist/statsAnalyzer/index.js.map +1 -1
  155. package/dist/statsAnalyzer/mqaUtil.js +103 -54
  156. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  157. package/dist/types/annotation/annotation.types.d.ts +43 -0
  158. package/dist/types/annotation/constants.d.ts +31 -0
  159. package/dist/types/annotation/index.d.ts +124 -0
  160. package/dist/types/breakouts/breakout.d.ts +8 -0
  161. package/dist/types/breakouts/collection.d.ts +5 -0
  162. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  163. package/dist/types/breakouts/events.d.ts +2 -0
  164. package/dist/types/breakouts/index.d.ts +5 -0
  165. package/dist/types/breakouts/request.d.ts +22 -0
  166. package/dist/types/breakouts/utils.d.ts +15 -0
  167. package/dist/types/common/browser-detection.d.ts +9 -0
  168. package/dist/types/common/collection.d.ts +48 -0
  169. package/dist/types/common/config.d.ts +2 -0
  170. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  171. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  172. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  173. package/dist/types/common/errors/media.d.ts +15 -0
  174. package/dist/types/common/errors/parameter.d.ts +15 -0
  175. package/dist/types/common/errors/password-error.d.ts +15 -0
  176. package/dist/types/common/errors/permission.d.ts +14 -0
  177. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  178. package/dist/types/common/errors/reconnection.d.ts +15 -0
  179. package/dist/types/common/errors/stats.d.ts +15 -0
  180. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  181. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  182. package/dist/types/common/events/events-scope.d.ts +17 -0
  183. package/dist/types/common/events/events.d.ts +12 -0
  184. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  185. package/dist/types/common/events/util.d.ts +2 -0
  186. package/dist/types/common/logs/logger-config.d.ts +2 -0
  187. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  188. package/dist/types/common/logs/request.d.ts +34 -0
  189. package/dist/types/common/queue.d.ts +32 -0
  190. package/dist/types/config.d.ts +72 -0
  191. package/dist/types/constants.d.ts +987 -0
  192. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  193. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  194. package/dist/types/controls-options-manager/index.d.ts +136 -0
  195. package/dist/types/controls-options-manager/types.d.ts +43 -0
  196. package/dist/types/controls-options-manager/util.d.ts +1 -0
  197. package/dist/types/index.d.ts +7 -0
  198. package/dist/types/interpretation/collection.d.ts +5 -0
  199. package/dist/types/interpretation/index.d.ts +5 -0
  200. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  201. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  202. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  203. package/dist/types/locus-info/fullState.d.ts +2 -0
  204. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  205. package/dist/types/locus-info/index.d.ts +315 -0
  206. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  207. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  208. package/dist/types/locus-info/parser.d.ts +212 -0
  209. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  210. package/dist/types/media/index.d.ts +34 -0
  211. package/dist/types/media/properties.d.ts +86 -0
  212. package/dist/types/media/util.d.ts +2 -0
  213. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  214. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  215. package/dist/types/meeting/index.d.ts +1524 -0
  216. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  217. package/dist/types/meeting/muteState.d.ts +184 -0
  218. package/dist/types/meeting/request.d.ts +270 -0
  219. package/dist/types/meeting/request.type.d.ts +11 -0
  220. package/dist/types/meeting/state.d.ts +9 -0
  221. package/dist/types/meeting/util.d.ts +75 -0
  222. package/dist/types/meeting-info/collection.d.ts +20 -0
  223. package/dist/types/meeting-info/index.d.ts +57 -0
  224. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  225. package/dist/types/meeting-info/request.d.ts +22 -0
  226. package/dist/types/meeting-info/util.d.ts +2 -0
  227. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  228. package/dist/types/meetings/collection.d.ts +31 -0
  229. package/dist/types/meetings/index.d.ts +364 -0
  230. package/dist/types/meetings/meetings.types.d.ts +4 -0
  231. package/dist/types/meetings/request.d.ts +27 -0
  232. package/dist/types/meetings/util.d.ts +18 -0
  233. package/dist/types/member/index.d.ts +158 -0
  234. package/dist/types/member/types.d.ts +21 -0
  235. package/dist/types/member/util.d.ts +2 -0
  236. package/dist/types/members/collection.d.ts +29 -0
  237. package/dist/types/members/index.d.ts +353 -0
  238. package/dist/types/members/request.d.ts +114 -0
  239. package/dist/types/members/types.d.ts +24 -0
  240. package/dist/types/members/util.d.ts +210 -0
  241. package/dist/types/metrics/config.d.ts +195 -0
  242. package/dist/types/metrics/constants.d.ts +55 -0
  243. package/dist/types/metrics/index.d.ts +169 -0
  244. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  245. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  246. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  247. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  248. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  249. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  250. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  251. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  252. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  253. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  254. package/dist/types/reachability/index.d.ts +152 -0
  255. package/dist/types/reachability/request.d.ts +37 -0
  256. package/dist/types/reactions/constants.d.ts +3 -0
  257. package/dist/types/reactions/reactions.d.ts +4 -0
  258. package/dist/types/reactions/reactions.type.d.ts +52 -0
  259. package/dist/types/reconnection-manager/index.d.ts +126 -0
  260. package/dist/types/recording-controller/enums.d.ts +7 -0
  261. package/dist/types/recording-controller/index.d.ts +193 -0
  262. package/dist/types/recording-controller/util.d.ts +13 -0
  263. package/dist/types/roap/index.d.ts +77 -0
  264. package/dist/types/roap/request.d.ts +36 -0
  265. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  266. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  267. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  268. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  269. package/dist/types/transcription/index.d.ts +64 -0
  270. package/package.json +28 -21
  271. package/src/annotation/annotation.types.ts +52 -0
  272. package/src/annotation/constants.ts +36 -0
  273. package/src/annotation/index.ts +343 -0
  274. package/src/breakouts/README.md +220 -0
  275. package/src/breakouts/breakout.ts +180 -0
  276. package/src/breakouts/collection.ts +19 -0
  277. package/src/breakouts/edit-lock-error.ts +25 -0
  278. package/src/breakouts/events.ts +37 -0
  279. package/src/breakouts/index.ts +921 -0
  280. package/src/breakouts/request.ts +55 -0
  281. package/src/breakouts/utils.ts +57 -0
  282. package/src/common/errors/webex-errors.ts +6 -2
  283. package/src/common/logs/logger-proxy.ts +1 -1
  284. package/src/config.ts +5 -7
  285. package/src/constants.ts +165 -20
  286. package/src/controls-options-manager/constants.ts +5 -0
  287. package/src/controls-options-manager/enums.ts +18 -0
  288. package/src/controls-options-manager/index.ts +278 -0
  289. package/src/controls-options-manager/types.ts +59 -0
  290. package/src/controls-options-manager/util.ts +286 -0
  291. package/src/index.ts +34 -0
  292. package/src/interpretation/README.md +51 -0
  293. package/src/interpretation/collection.ts +19 -0
  294. package/src/interpretation/index.ts +182 -0
  295. package/src/interpretation/siLanguage.ts +18 -0
  296. package/src/locus-info/controlsUtils.ts +110 -0
  297. package/src/locus-info/index.ts +339 -21
  298. package/src/locus-info/mediaSharesUtils.ts +48 -0
  299. package/src/locus-info/parser.ts +2 -1
  300. package/src/locus-info/selfUtils.ts +86 -2
  301. package/src/media/index.ts +70 -142
  302. package/src/media/properties.ts +41 -104
  303. package/src/mediaQualityMetrics/config.ts +379 -377
  304. package/src/meeting/in-meeting-actions.ts +156 -0
  305. package/src/meeting/index.ts +1779 -1741
  306. package/src/meeting/locusMediaRequest.ts +309 -0
  307. package/src/meeting/muteState.ts +228 -132
  308. package/src/meeting/request.ts +100 -91
  309. package/src/meeting/request.type.ts +2 -0
  310. package/src/meeting/util.ts +422 -421
  311. package/src/meeting-info/meeting-info-v2.ts +134 -13
  312. package/src/meeting-info/utilv2.ts +13 -3
  313. package/src/meetings/collection.ts +20 -0
  314. package/src/meetings/index.ts +385 -83
  315. package/src/meetings/meetings.types.ts +12 -0
  316. package/src/meetings/request.ts +3 -1
  317. package/src/meetings/util.ts +103 -4
  318. package/src/member/index.ts +42 -0
  319. package/src/member/types.ts +24 -0
  320. package/src/member/util.ts +95 -1
  321. package/src/members/collection.ts +8 -0
  322. package/src/members/index.ts +108 -6
  323. package/src/members/request.ts +98 -17
  324. package/src/members/types.ts +28 -0
  325. package/src/members/util.ts +319 -240
  326. package/src/metrics/config.ts +49 -10
  327. package/src/metrics/constants.ts +2 -4
  328. package/src/metrics/index.ts +43 -27
  329. package/src/multistream/mediaRequestManager.ts +337 -63
  330. package/src/multistream/receiveSlot.ts +68 -26
  331. package/src/multistream/receiveSlotManager.ts +61 -38
  332. package/src/multistream/remoteMedia.ts +29 -3
  333. package/src/multistream/remoteMediaGroup.ts +61 -2
  334. package/src/multistream/remoteMediaManager.ts +260 -66
  335. package/src/networkQualityMonitor/index.ts +6 -6
  336. package/src/reachability/index.ts +75 -25
  337. package/src/reachability/request.ts +10 -5
  338. package/src/reactions/constants.ts +4 -0
  339. package/src/reactions/reactions.ts +4 -4
  340. package/src/reactions/reactions.type.ts +28 -3
  341. package/src/reconnection-manager/index.ts +53 -32
  342. package/src/recording-controller/enums.ts +8 -0
  343. package/src/recording-controller/index.ts +315 -0
  344. package/src/recording-controller/util.ts +58 -0
  345. package/src/roap/index.ts +21 -30
  346. package/src/roap/request.ts +51 -52
  347. package/src/roap/turnDiscovery.ts +51 -27
  348. package/src/statsAnalyzer/global.ts +1 -94
  349. package/src/statsAnalyzer/index.ts +380 -390
  350. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  351. package/test/integration/spec/converged-space-meetings.js +233 -0
  352. package/test/integration/spec/journey.js +331 -254
  353. package/test/integration/spec/space-meeting.js +77 -4
  354. package/test/unit/spec/annotation/index.ts +436 -0
  355. package/test/unit/spec/breakouts/breakout.ts +233 -0
  356. package/test/unit/spec/breakouts/collection.ts +15 -0
  357. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  358. package/test/unit/spec/breakouts/events.ts +77 -0
  359. package/test/unit/spec/breakouts/index.ts +1790 -0
  360. package/test/unit/spec/breakouts/request.ts +104 -0
  361. package/test/unit/spec/breakouts/utils.js +72 -0
  362. package/test/unit/spec/controls-options-manager/index.js +287 -0
  363. package/test/unit/spec/controls-options-manager/util.js +518 -0
  364. package/test/unit/spec/fixture/locus.js +1 -0
  365. package/test/unit/spec/interpretation/collection.ts +15 -0
  366. package/test/unit/spec/interpretation/index.ts +329 -0
  367. package/test/unit/spec/interpretation/siLanguage.ts +26 -0
  368. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  369. package/test/unit/spec/locus-info/index.js +680 -4
  370. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  371. package/test/unit/spec/locus-info/selfConstant.js +48 -0
  372. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  373. package/test/unit/spec/media/index.ts +118 -22
  374. package/test/unit/spec/media/properties.ts +9 -9
  375. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  376. package/test/unit/spec/meeting/index.js +2695 -1513
  377. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  378. package/test/unit/spec/meeting/muteState.js +370 -208
  379. package/test/unit/spec/meeting/request.js +354 -42
  380. package/test/unit/spec/meeting/utils.js +270 -156
  381. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  382. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  383. package/test/unit/spec/meetings/collection.js +14 -0
  384. package/test/unit/spec/meetings/index.js +866 -120
  385. package/test/unit/spec/meetings/utils.js +206 -2
  386. package/test/unit/spec/member/index.js +31 -0
  387. package/test/unit/spec/member/util.js +408 -32
  388. package/test/unit/spec/members/index.js +320 -1
  389. package/test/unit/spec/members/request.js +206 -27
  390. package/test/unit/spec/members/utils.js +184 -0
  391. package/test/unit/spec/metrics/index.js +98 -0
  392. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  393. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  394. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  395. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  396. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  397. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  398. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  399. package/test/unit/spec/reachability/index.ts +176 -25
  400. package/test/unit/spec/reachability/request.js +66 -0
  401. package/test/unit/spec/reconnection-manager/index.js +46 -13
  402. package/test/unit/spec/recording-controller/index.js +231 -0
  403. package/test/unit/spec/recording-controller/util.js +102 -0
  404. package/test/unit/spec/roap/index.ts +21 -51
  405. package/test/unit/spec/roap/request.ts +187 -0
  406. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  407. package/test/unit/spec/stats-analyzer/index.js +94 -43
  408. package/test/utils/constants.js +9 -0
  409. package/test/utils/integrationTestUtils.js +46 -0
  410. package/test/utils/testUtils.js +0 -45
  411. package/test/utils/webex-config.js +4 -0
  412. package/test/utils/webex-test-users.js +7 -3
  413. package/tsconfig.json +6 -0
  414. package/dist/media/internal-media-core-wrapper.js +0 -18
  415. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  416. package/dist/meeting/effectsState.js +0 -262
  417. package/dist/meeting/effectsState.js.map +0 -1
  418. package/dist/multistream/multistreamMedia.js +0 -106
  419. package/dist/multistream/multistreamMedia.js.map +0 -1
  420. package/src/index.js +0 -15
  421. package/src/media/internal-media-core-wrapper.ts +0 -9
  422. package/src/meeting/effectsState.ts +0 -211
  423. package/src/multistream/multistreamMedia.ts +0 -93
  424. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -1,16 +1,23 @@
1
1
  /* globals window */
2
2
 
3
3
  import {
4
- _LOCUS_ID_,
5
- _INCOMING_,
6
4
  _CREATED_,
7
- LOCUSEVENT,
5
+ _INCOMING_,
6
+ _JOINED_,
7
+ _LEFT_,
8
+ _LOCUS_ID_,
9
+ _MOVED_,
10
+ BREAKOUTS,
8
11
  CORRELATION_ID,
9
12
  EVENT_TRIGGERS,
13
+ LOCUS,
14
+ LOCUSEVENT,
10
15
  ROAP,
11
16
  } from '../constants';
12
17
  import LoggerProxy from '../common/logs/logger-proxy';
13
18
  import Trigger from '../common/events/trigger-proxy';
19
+ import BEHAVIORAL_METRICS from '../metrics/constants';
20
+ import Metrics from '../metrics';
14
21
 
15
22
  /**
16
23
  * Meetings Media Codec Missing Event
@@ -44,6 +51,14 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
44
51
  if (meeting) {
45
52
  const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;
46
53
 
54
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_MERCURY_EVENT_RECEIVED, {
55
+ correlation_id: data.correlationId,
56
+ seq,
57
+ message_type: messageType,
58
+ error_type: errorType,
59
+ error_cause: errorCause,
60
+ });
61
+
47
62
  if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
48
63
  // turn discovery is not part of normal roap protocol and so we are not handling it
49
64
  // through the usual roap state machine
@@ -58,12 +73,36 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
58
73
  errorCause,
59
74
  };
60
75
 
76
+ const mediaServer = MeetingsUtil.getMediaServer(roapMessage.sdp);
77
+
61
78
  meeting.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);
79
+
80
+ if (mediaServer) {
81
+ meeting.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
82
+ }
62
83
  }
63
84
  }
64
85
  }
65
86
  };
66
87
 
88
+ MeetingsUtil.getMediaServer = (sdp) => {
89
+ let mediaServer;
90
+
91
+ // Attempt to collect the media server from the roap message.
92
+ try {
93
+ mediaServer = sdp
94
+ .split('\r\n')
95
+ .find((line) => line.startsWith('o='))
96
+ .split(' ')
97
+ .shift()
98
+ .replace('o=', '');
99
+ } catch {
100
+ mediaServer = undefined;
101
+ }
102
+
103
+ return mediaServer;
104
+ };
105
+
67
106
  MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
68
107
  let devices = [];
69
108
 
@@ -85,11 +124,13 @@ MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
85
124
  MeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {
86
125
  let result = '';
87
126
 
88
- if (userPreferences && userPreferences.sites) {
127
+ if (userPreferences?.sites?.length) {
89
128
  const defaultSite = userPreferences.sites.find((site) => site.default);
90
129
 
91
130
  if (defaultSite) {
92
131
  result = defaultSite.siteUrl;
132
+ } else {
133
+ result = userPreferences.sites[0].siteUrl;
93
134
  }
94
135
  }
95
136
 
@@ -196,4 +237,62 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
196
237
  }, delay);
197
238
  };
198
239
 
240
+ /**
241
+ * get device from locus data
242
+ * @param {Object} newLocus new locus data
243
+ * @param {String} deviceUrl current device url
244
+ * @returns {Object}
245
+ */
246
+ MeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {
247
+ if (newLocus?.self?.devices?.length > 0) {
248
+ return newLocus.self.devices.find((device) => device.url === deviceUrl);
249
+ }
250
+
251
+ return null;
252
+ };
253
+
254
+ /**
255
+ * get self device joined status from locus data
256
+ * @param {Object} meeting current meeting data
257
+ * @param {Object} newLocus new locus data
258
+ * @param {String} deviceUrl current device url
259
+ * @returns {Object}
260
+ */
261
+ MeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {
262
+ const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);
263
+ if (thisDevice) {
264
+ if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {
265
+ return (
266
+ thisDevice.state === _JOINED_ ||
267
+ (thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)
268
+ );
269
+ }
270
+ }
271
+
272
+ return false;
273
+ };
274
+
275
+ /**
276
+ * check the new locus is breakout session's one or not
277
+ * @param {Object} newLocus new locus data
278
+ * @returns {boolean}
279
+ * @private
280
+ */
281
+ MeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {
282
+ return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
283
+ };
284
+
285
+ /**
286
+ * check the locus is valid breakout locus or not
287
+ * @param {Object} locus
288
+ * @returns {boolean}
289
+ * @private
290
+ */
291
+ MeetingsUtil.isValidBreakoutLocus = (locus: any) => {
292
+ const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;
293
+ const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);
294
+ const selfJoined = locus.self?.state === _JOINED_;
295
+
296
+ return isLocusAsBreakout && !inActiveStatus && selfJoined;
297
+ };
199
298
  export default MeetingsUtil;
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
4
  import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
5
+ import {IExternalRoles, ParticipantWithRoles} from './types';
5
6
 
6
7
  import MemberUtil from './util';
7
8
 
@@ -28,9 +29,13 @@ export default class Member {
28
29
  isSelf: any;
29
30
  isUser: any;
30
31
  isVideoMuted: any;
32
+ roles: IExternalRoles;
31
33
  name: any;
32
34
  participant: any;
33
35
  status: any;
36
+ supportsBreakouts: boolean;
37
+ supportsInterpretation: boolean;
38
+ supportLiveAnnotation: boolean;
34
39
  type: any;
35
40
  namespace = MEETINGS;
36
41
 
@@ -100,6 +105,20 @@ export default class Member {
100
105
  * @memberof Member
101
106
  */
102
107
  this.isHandRaised = null;
108
+ /**
109
+ * @instance
110
+ * @type {Boolean}
111
+ * @public
112
+ * @memberof Member
113
+ */
114
+ this.supportsBreakouts = null;
115
+ /**
116
+ * @instance
117
+ * @type {Boolean}
118
+ * @public
119
+ * @memberof Member
120
+ */
121
+ this.supportLiveAnnotation = null;
103
122
  /**
104
123
  * @instance
105
124
  * @type {Boolean}
@@ -220,6 +239,14 @@ export default class Member {
220
239
  * @memberof Member
221
240
  */
222
241
  this.isModeratorAssignmentProhibited = null;
242
+
243
+ /**
244
+ * @instance
245
+ * @type {IExternalRoles}
246
+ * @public
247
+ * @memberof Member
248
+ */
249
+ this.roles = null;
223
250
  // TODO: more participant types
224
251
  // such as native client, web client, is a device, what type of phone, etc
225
252
  this.processParticipant(participant);
@@ -242,6 +269,9 @@ export default class Member {
242
269
  this.isAudioMuted = MemberUtil.isAudioMuted(participant);
243
270
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
244
271
  this.isHandRaised = MemberUtil.isHandRaised(participant);
272
+ this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
273
+ this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
274
+ this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
245
275
  this.isGuest = MemberUtil.isGuest(participant);
246
276
  this.isUser = MemberUtil.isUser(participant);
247
277
  this.isDevice = MemberUtil.isDevice(participant);
@@ -249,6 +279,7 @@ export default class Member {
249
279
  this.isModeratorAssignmentProhibited =
250
280
  MemberUtil.isModeratorAssignmentProhibited(participant);
251
281
  this.processStatus(participant);
282
+ this.processRoles(participant as ParticipantWithRoles);
252
283
  // must be done last
253
284
  this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
254
285
  }
@@ -418,6 +449,17 @@ export default class Member {
418
449
  }
419
450
  }
420
451
 
452
+ /**
453
+ * process the roles that have been applied to this member
454
+ * @param {Object} participant
455
+ * @returns {undefined}
456
+ * @private
457
+ * @memberof Member
458
+ */
459
+ private processRoles(participant: ParticipantWithRoles) {
460
+ this.roles = MemberUtil.extractControlRoles(participant);
461
+ }
462
+
421
463
  /**
422
464
  * set the type for the member, could be MEETING or CALL
423
465
  * @param {String} type
@@ -0,0 +1,24 @@
1
+ export interface IExternalRoles {
2
+ cohost: boolean;
3
+ moderator: boolean;
4
+ presenter: boolean;
5
+ }
6
+
7
+ export enum ServerRoles {
8
+ Cohost = 'COHOST',
9
+ Moderator = 'MODERATOR',
10
+ Presenter = 'PRESENTER',
11
+ }
12
+
13
+ export type ServerRoleShape = {
14
+ type: ServerRoles;
15
+ hasRole: boolean;
16
+ };
17
+
18
+ export type ParticipantWithRoles = {
19
+ controls: {
20
+ role: {
21
+ roles: Array<ServerRoleShape>;
22
+ };
23
+ };
24
+ };
@@ -1,3 +1,4 @@
1
+ import {IExternalRoles, ParticipantWithRoles, ServerRoles, ServerRoleShape} from './types';
1
2
  import {
2
3
  _USER_,
3
4
  _RESOURCE_ROOM_,
@@ -19,6 +20,58 @@ import ParameterError from '../common/errors/parameter';
19
20
 
20
21
  const MemberUtil: any = {};
21
22
 
23
+ /**
24
+ * @param {Object} participant the locus participant
25
+ * @returns {[ServerRoleShape]}
26
+ */
27
+ MemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>
28
+ participant?.controls?.role?.roles;
29
+
30
+ /**
31
+ * @param {Object} participant the locus participant
32
+ * @param {ServerRoles} controlRole the search role
33
+ * @returns {Boolean}
34
+ */
35
+ MemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>
36
+ MemberUtil.getControlsRoles(participant)?.some(
37
+ (role) => role.type === controlRole && role.hasRole
38
+ );
39
+
40
+ /**
41
+ * @param {Object} participant the locus participant
42
+ * @returns {Boolean}
43
+ */
44
+ MemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>
45
+ MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;
46
+
47
+ /**
48
+ * @param {Object} participant the locus participant
49
+ * @returns {Boolean}
50
+ */
51
+ MemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>
52
+ MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;
53
+
54
+ /**
55
+ * @param {Object} participant the locus participant
56
+ * @returns {Boolean}
57
+ */
58
+ MemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>
59
+ MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;
60
+
61
+ /**
62
+ * @param {Object} participant the locus participant
63
+ * @returns {IExternalRoles}
64
+ */
65
+ MemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {
66
+ const roles = {
67
+ cohost: MemberUtil.hasCohost(participant),
68
+ moderator: MemberUtil.hasModerator(participant),
69
+ presenter: MemberUtil.hasPresenter(participant),
70
+ };
71
+
72
+ return roles;
73
+ };
74
+
22
75
  /**
23
76
  * @param {Object} participant the locus participant
24
77
  * @returns {Boolean}
@@ -72,7 +125,7 @@ MemberUtil.isAssociatedSame = (participant: any, id: string) =>
72
125
  * @param {String} status
73
126
  * @returns {Boolean}
74
127
  */
75
- MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string) =>
128
+ MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>
76
129
  participant &&
77
130
  participant.guest &&
78
131
  ((participant.devices &&
@@ -82,6 +135,7 @@ MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string)
82
135
  // @ts-ignore
83
136
  isGuest &&
84
137
  status === _IN_LOBBY_) ||
138
+ // @ts-ignore
85
139
  !status === _IN_MEETING_);
86
140
 
87
141
  /**
@@ -130,6 +184,46 @@ MemberUtil.isHandRaised = (participant: any) => {
130
184
  return participant.controls?.hand?.raised || false;
131
185
  };
132
186
 
187
+ /**
188
+ * @param {Object} participant the locus participant
189
+ * @returns {Boolean}
190
+ */
191
+ MemberUtil.isBreakoutsSupported = (participant) => {
192
+ if (!participant) {
193
+ throw new ParameterError('Breakout support could not be processed, participant is undefined.');
194
+ }
195
+
196
+ return !participant.doesNotSupportBreakouts;
197
+ };
198
+
199
+ /**
200
+ * @param {Object} participant the locus participant
201
+ * @returns {Boolean}
202
+ */
203
+ MemberUtil.isInterpretationSupported = (participant) => {
204
+ if (!participant) {
205
+ throw new ParameterError(
206
+ 'Interpretation support could not be processed, participant is undefined.'
207
+ );
208
+ }
209
+
210
+ return !participant.doesNotSupportSiInterpreter;
211
+ };
212
+
213
+ /**
214
+ * @param {Object} participant the locus participant
215
+ * @returns {Boolean}
216
+ */
217
+ MemberUtil.isLiveAnnotationSupported = (participant) => {
218
+ if (!participant) {
219
+ throw new ParameterError(
220
+ 'LiveAnnotation support could not be processed, participant is undefined.'
221
+ );
222
+ }
223
+
224
+ return !participant.annotatorAssignmentNotAllowed;
225
+ };
226
+
133
227
  /**
134
228
  * utility method for audio/video muted status
135
229
  * @param {String} status
@@ -37,4 +37,12 @@ export default class MembersCollection {
37
37
  getAll() {
38
38
  return this.members;
39
39
  }
40
+
41
+ /**
42
+ * @returns {void}
43
+ * reset members
44
+ */
45
+ reset() {
46
+ this.members = {};
47
+ }
40
48
  }
@@ -16,6 +16,7 @@ import MembersRequest from './request';
16
16
  import MembersUtil from './util';
17
17
  import {ReceiveSlotManager} from '../multistream/receiveSlotManager';
18
18
  import {MediaRequestManager} from '../multistream/mediaRequestManager';
19
+ import {ServerRoleShape} from './types';
19
20
 
20
21
  /**
21
22
  * Members Update Event
@@ -96,8 +97,14 @@ export default class Members extends StatelessWebexPlugin {
96
97
  * @private
97
98
  * @memberof Members
98
99
  */
100
+
99
101
  // @ts-ignore
100
- this.membersRequest = new MembersRequest({}, options);
102
+ this.membersRequest = new MembersRequest(
103
+ {
104
+ meeting: attrs.meeting,
105
+ },
106
+ options
107
+ );
101
108
  /**
102
109
  * The Members Collection cache
103
110
  * @instance
@@ -282,6 +289,25 @@ export default class Members extends StatelessWebexPlugin {
282
289
  );
283
290
  }
284
291
 
292
+ /**
293
+ * clear member collection
294
+ * @returns {void}
295
+ * @private
296
+ * @memberof Members
297
+ */
298
+ clearMembers() {
299
+ this.membersCollection.reset();
300
+ Trigger.trigger(
301
+ this,
302
+ {
303
+ file: 'members',
304
+ function: 'clearMembers',
305
+ },
306
+ EVENT_TRIGGERS.MEMBERS_CLEAR,
307
+ {}
308
+ );
309
+ }
310
+
285
311
  /**
286
312
  * when new participant updates come in, both delta and full participants, update them in members collection
287
313
  * delta object in the event will have {updated, added} and full will be the full membersCollection
@@ -291,11 +317,16 @@ export default class Members extends StatelessWebexPlugin {
291
317
  * @private
292
318
  * @memberof Members
293
319
  */
294
- locusParticipantsUpdate(payload: {participants: object}) {
320
+ locusParticipantsUpdate(payload: {participants: object; isReplace?: boolean}) {
295
321
  if (payload) {
322
+ if (payload.isReplace) {
323
+ this.clearMembers();
324
+ }
296
325
  const delta = this.handleLocusInfoUpdatedParticipants(payload);
297
326
  const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates
298
327
 
328
+ this.receiveSlotManager?.updateMemberIds();
329
+
299
330
  Trigger.trigger(
300
331
  this,
301
332
  {
@@ -306,6 +337,7 @@ export default class Members extends StatelessWebexPlugin {
306
337
  {
307
338
  delta,
308
339
  full,
340
+ isReplace: !!payload.isReplace,
309
341
  }
310
342
  );
311
343
  }
@@ -731,15 +763,22 @@ export default class Members extends StatelessWebexPlugin {
731
763
  /**
732
764
  * Admits waiting members (invited guests to meeting)
733
765
  * @param {Array} memberIds
766
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
734
767
  * @returns {Promise}
735
768
  * @public
736
769
  * @memberof Members
737
770
  */
738
- public admitMembers(memberIds: Array<any>) {
771
+ public admitMembers(
772
+ memberIds: Array<any>,
773
+ sessionLocusUrls?: {authorizingLocusUrl: string; mainLocusUrl: string}
774
+ ) {
739
775
  if (isEmpty(memberIds)) {
740
776
  return Promise.reject(new ParameterError('No member ids provided to admit.'));
741
777
  }
742
- const options = MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl);
778
+ const options = {
779
+ sessionLocusUrls,
780
+ ...MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl),
781
+ };
743
782
 
744
783
  return this.membersRequest.admitMember(options);
745
784
  }
@@ -771,11 +810,12 @@ export default class Members extends StatelessWebexPlugin {
771
810
  * Audio mutes another member in a meeting
772
811
  * @param {String} memberId
773
812
  * @param {boolean} [mute] default true
813
+ * @param {boolean} [isAudio] default true
774
814
  * @returns {Promise}
775
815
  * @public
776
816
  * @memberof Members
777
817
  */
778
- public muteMember(memberId: string, mute = true) {
818
+ public muteMember(memberId: string, mute = true, isAudio = true) {
779
819
  if (!this.locusUrl) {
780
820
  return Promise.reject(
781
821
  new ParameterError(
@@ -788,11 +828,37 @@ export default class Members extends StatelessWebexPlugin {
788
828
  new ParameterError('The member id must be defined to mute the member.')
789
829
  );
790
830
  }
791
- const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl);
831
+ const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl, isAudio);
792
832
 
793
833
  return this.membersRequest.muteMember(options);
794
834
  }
795
835
 
836
+ /**
837
+ * Assign role(s) to a member in the meeting
838
+ * @param {String} memberId
839
+ * @param {[ServerRoleShape]} roles - to assign an array of roles
840
+ * @returns {Promise}
841
+ * @public
842
+ * @memberof Members
843
+ */
844
+ public assignRoles(memberId: string, roles: Array<ServerRoleShape>) {
845
+ if (!this.locusUrl) {
846
+ return Promise.reject(
847
+ new ParameterError(
848
+ 'The associated locus url for this meetings members object must be defined.'
849
+ )
850
+ );
851
+ }
852
+ if (!memberId) {
853
+ return Promise.reject(
854
+ new ParameterError('The member id must be defined to assign the roles to a member.')
855
+ );
856
+ }
857
+ const options = MembersUtil.generateRoleAssignmentMemberOptions(memberId, roles, this.locusUrl);
858
+
859
+ return this.membersRequest.assignRolesMember(options);
860
+ }
861
+
796
862
  /**
797
863
  * Raise or lower the hand of a member in a meeting
798
864
  * @param {String} memberId
@@ -925,6 +991,7 @@ export default class Members extends StatelessWebexPlugin {
925
991
  */
926
992
  findMemberByCsi(csi) {
927
993
  return Object.values(this.membersCollection.getAll()).find((member) =>
994
+ // @ts-ignore
928
995
  member.participant?.devices?.find((device) =>
929
996
  device.csis?.find((memberCsi) => memberCsi === csi)
930
997
  )
@@ -957,4 +1024,39 @@ export default class Members extends StatelessWebexPlugin {
957
1024
 
958
1025
  return csis;
959
1026
  }
1027
+
1028
+ /**
1029
+ * Edit display name of participants in a meeting
1030
+ * @param {string} memberId - id of the participant who is receiving request
1031
+ * @param {string} requestingParticipantId - id of the participant who is sending request (optional)
1032
+ * @param {string} [alias] - alias name
1033
+ * @returns {Promise}
1034
+ * @public
1035
+ * @memberof Members
1036
+ */
1037
+ public editDisplayName(memberId: string, requestingParticipantId: string, alias: string) {
1038
+ if (!this.locusUrl) {
1039
+ return Promise.reject(
1040
+ new ParameterError(
1041
+ 'The associated locus url for this meetings members object must be defined.'
1042
+ )
1043
+ );
1044
+ }
1045
+ if (!memberId) {
1046
+ return Promise.reject(
1047
+ new ParameterError('The member id must be defined to edit display name of the member.')
1048
+ );
1049
+ }
1050
+
1051
+ const {locusUrl} = this;
1052
+
1053
+ const options = MembersUtil.generateEditDisplayNameMemberOptions(
1054
+ memberId,
1055
+ requestingParticipantId,
1056
+ alias,
1057
+ locusUrl
1058
+ );
1059
+
1060
+ return this.membersRequest.editDisplayNameMember(options);
1061
+ }
960
1062
  }