@webex/plugin-meetings 3.0.0-beta.18 → 3.0.0-beta.181

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 (410) hide show
  1. package/README.md +45 -7
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +3 -2
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/config.js +3 -8
  25. package/dist/config.js.map +1 -1
  26. package/dist/constants.js +172 -30
  27. package/dist/constants.js.map +1 -1
  28. package/dist/controls-options-manager/constants.js +14 -0
  29. package/dist/controls-options-manager/constants.js.map +1 -0
  30. package/dist/controls-options-manager/enums.js +27 -0
  31. package/dist/controls-options-manager/enums.js.map +1 -0
  32. package/dist/controls-options-manager/index.js +297 -0
  33. package/dist/controls-options-manager/index.js.map +1 -0
  34. package/dist/controls-options-manager/types.js +7 -0
  35. package/dist/controls-options-manager/types.js.map +1 -0
  36. package/dist/controls-options-manager/util.js +319 -0
  37. package/dist/controls-options-manager/util.js.map +1 -0
  38. package/dist/index.js +107 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/interpretation/collection.js +23 -0
  41. package/dist/interpretation/collection.js.map +1 -0
  42. package/dist/interpretation/index.js +352 -0
  43. package/dist/interpretation/index.js.map +1 -0
  44. package/dist/interpretation/siLanguage.js +25 -0
  45. package/dist/interpretation/siLanguage.js.map +1 -0
  46. package/dist/locus-info/controlsUtils.js +91 -2
  47. package/dist/locus-info/controlsUtils.js.map +1 -1
  48. package/dist/locus-info/index.js +302 -41
  49. package/dist/locus-info/index.js.map +1 -1
  50. package/dist/locus-info/mediaSharesUtils.js +43 -1
  51. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  52. package/dist/locus-info/parser.js +1 -1
  53. package/dist/locus-info/parser.js.map +1 -1
  54. package/dist/locus-info/selfUtils.js +89 -14
  55. package/dist/locus-info/selfUtils.js.map +1 -1
  56. package/dist/media/index.js +39 -134
  57. package/dist/media/index.js.map +1 -1
  58. package/dist/media/properties.js +29 -90
  59. package/dist/media/properties.js.map +1 -1
  60. package/dist/mediaQualityMetrics/config.js +505 -493
  61. package/dist/mediaQualityMetrics/config.js.map +1 -1
  62. package/dist/meeting/in-meeting-actions.js +76 -2
  63. package/dist/meeting/in-meeting-actions.js.map +1 -1
  64. package/dist/meeting/index.js +2622 -2465
  65. package/dist/meeting/index.js.map +1 -1
  66. package/dist/meeting/locusMediaRequest.js +291 -0
  67. package/dist/meeting/locusMediaRequest.js.map +1 -0
  68. package/dist/meeting/muteState.js +229 -124
  69. package/dist/meeting/muteState.js.map +1 -1
  70. package/dist/meeting/request.js +189 -146
  71. package/dist/meeting/request.js.map +1 -1
  72. package/dist/meeting/util.js +478 -414
  73. package/dist/meeting/util.js.map +1 -1
  74. package/dist/meeting-info/index.js +48 -7
  75. package/dist/meeting-info/index.js.map +1 -1
  76. package/dist/meeting-info/meeting-info-v2.js +171 -51
  77. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  78. package/dist/meeting-info/utilv2.js +20 -5
  79. package/dist/meeting-info/utilv2.js.map +1 -1
  80. package/dist/meetings/collection.js +22 -0
  81. package/dist/meetings/collection.js.map +1 -1
  82. package/dist/meetings/index.js +350 -65
  83. package/dist/meetings/index.js.map +1 -1
  84. package/dist/meetings/meetings.types.js +7 -0
  85. package/dist/meetings/meetings.types.js.map +1 -0
  86. package/dist/meetings/request.js +2 -0
  87. package/dist/meetings/request.js.map +1 -1
  88. package/dist/meetings/util.js +88 -1
  89. package/dist/meetings/util.js.map +1 -1
  90. package/dist/member/index.js +49 -0
  91. package/dist/member/index.js.map +1 -1
  92. package/dist/member/types.js +25 -0
  93. package/dist/member/types.js.map +1 -0
  94. package/dist/member/util.js +98 -2
  95. package/dist/member/util.js.map +1 -1
  96. package/dist/members/collection.js +10 -0
  97. package/dist/members/collection.js.map +1 -1
  98. package/dist/members/index.js +86 -5
  99. package/dist/members/index.js.map +1 -1
  100. package/dist/members/request.js +106 -38
  101. package/dist/members/request.js.map +1 -1
  102. package/dist/members/types.js +15 -0
  103. package/dist/members/types.js.map +1 -0
  104. package/dist/members/util.js +316 -233
  105. package/dist/members/util.js.map +1 -1
  106. package/dist/metrics/constants.js +3 -5
  107. package/dist/metrics/constants.js.map +1 -1
  108. package/dist/metrics/index.js +1 -468
  109. package/dist/metrics/index.js.map +1 -1
  110. package/dist/multistream/mediaRequestManager.js +238 -49
  111. package/dist/multistream/mediaRequestManager.js.map +1 -1
  112. package/dist/multistream/receiveSlot.js +49 -16
  113. package/dist/multistream/receiveSlot.js.map +1 -1
  114. package/dist/multistream/receiveSlotManager.js +48 -30
  115. package/dist/multistream/receiveSlotManager.js.map +1 -1
  116. package/dist/multistream/remoteMedia.js +44 -18
  117. package/dist/multistream/remoteMedia.js.map +1 -1
  118. package/dist/multistream/remoteMediaGroup.js +60 -3
  119. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  120. package/dist/multistream/remoteMediaManager.js +173 -59
  121. package/dist/multistream/remoteMediaManager.js.map +1 -1
  122. package/dist/networkQualityMonitor/index.js +4 -2
  123. package/dist/networkQualityMonitor/index.js.map +1 -1
  124. package/dist/reachability/index.js +72 -27
  125. package/dist/reachability/index.js.map +1 -1
  126. package/dist/reachability/request.js +12 -5
  127. package/dist/reachability/request.js.map +1 -1
  128. package/dist/reactions/reactions.js +2 -2
  129. package/dist/reactions/reactions.js.map +1 -1
  130. package/dist/reactions/reactions.type.js +18 -18
  131. package/dist/reactions/reactions.type.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +196 -155
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -1
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +21 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +110 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +93 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/statsAnalyzer/global.js +1 -93
  145. package/dist/statsAnalyzer/global.js.map +1 -1
  146. package/dist/statsAnalyzer/index.js +326 -311
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/breakout.d.ts +8 -0
  154. package/dist/types/breakouts/collection.d.ts +5 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/index.d.ts +5 -0
  158. package/dist/types/breakouts/request.d.ts +22 -0
  159. package/dist/types/breakouts/utils.d.ts +15 -0
  160. package/dist/types/common/browser-detection.d.ts +9 -0
  161. package/dist/types/common/collection.d.ts +48 -0
  162. package/dist/types/common/config.d.ts +2 -0
  163. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  164. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  165. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  166. package/dist/types/common/errors/media.d.ts +15 -0
  167. package/dist/types/common/errors/parameter.d.ts +15 -0
  168. package/dist/types/common/errors/password-error.d.ts +15 -0
  169. package/dist/types/common/errors/permission.d.ts +14 -0
  170. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  171. package/dist/types/common/errors/reconnection.d.ts +15 -0
  172. package/dist/types/common/errors/stats.d.ts +15 -0
  173. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  174. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  175. package/dist/types/common/events/events-scope.d.ts +17 -0
  176. package/dist/types/common/events/events.d.ts +12 -0
  177. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  178. package/dist/types/common/events/util.d.ts +2 -0
  179. package/dist/types/common/logs/logger-config.d.ts +2 -0
  180. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  181. package/dist/types/common/logs/request.d.ts +34 -0
  182. package/dist/types/common/queue.d.ts +32 -0
  183. package/dist/types/config.d.ts +72 -0
  184. package/dist/types/constants.d.ts +1016 -0
  185. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  186. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  187. package/dist/types/controls-options-manager/index.d.ts +136 -0
  188. package/dist/types/controls-options-manager/types.d.ts +43 -0
  189. package/dist/types/controls-options-manager/util.d.ts +1 -0
  190. package/dist/types/index.d.ts +7 -0
  191. package/dist/types/interpretation/collection.d.ts +5 -0
  192. package/dist/types/interpretation/index.d.ts +5 -0
  193. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  194. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  195. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  196. package/dist/types/locus-info/fullState.d.ts +2 -0
  197. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  198. package/dist/types/locus-info/index.d.ts +315 -0
  199. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  200. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  201. package/dist/types/locus-info/parser.d.ts +212 -0
  202. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  203. package/dist/types/media/index.d.ts +34 -0
  204. package/dist/types/media/properties.d.ts +93 -0
  205. package/dist/types/media/util.d.ts +2 -0
  206. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  207. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  208. package/dist/types/meeting/index.d.ts +1467 -0
  209. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  210. package/dist/types/meeting/muteState.d.ts +184 -0
  211. package/dist/types/meeting/request.d.ts +270 -0
  212. package/dist/types/meeting/request.type.d.ts +11 -0
  213. package/dist/types/meeting/state.d.ts +9 -0
  214. package/dist/types/meeting/util.d.ts +77 -0
  215. package/dist/types/meeting-info/collection.d.ts +20 -0
  216. package/dist/types/meeting-info/index.d.ts +62 -0
  217. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  218. package/dist/types/meeting-info/request.d.ts +22 -0
  219. package/dist/types/meeting-info/util.d.ts +2 -0
  220. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  221. package/dist/types/meetings/collection.d.ts +31 -0
  222. package/dist/types/meetings/index.d.ts +365 -0
  223. package/dist/types/meetings/meetings.types.d.ts +4 -0
  224. package/dist/types/meetings/request.d.ts +27 -0
  225. package/dist/types/meetings/util.d.ts +18 -0
  226. package/dist/types/member/index.d.ts +159 -0
  227. package/dist/types/member/types.d.ts +32 -0
  228. package/dist/types/member/util.d.ts +2 -0
  229. package/dist/types/members/collection.d.ts +29 -0
  230. package/dist/types/members/index.d.ts +353 -0
  231. package/dist/types/members/request.d.ts +114 -0
  232. package/dist/types/members/types.d.ts +24 -0
  233. package/dist/types/members/util.d.ts +210 -0
  234. package/dist/types/metrics/constants.d.ts +55 -0
  235. package/dist/types/metrics/index.d.ts +45 -0
  236. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  237. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  238. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  239. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  240. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  241. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  242. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  243. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  244. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  245. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  246. package/dist/types/reachability/index.d.ts +152 -0
  247. package/dist/types/reachability/request.d.ts +37 -0
  248. package/dist/types/reactions/constants.d.ts +3 -0
  249. package/dist/types/reactions/reactions.d.ts +4 -0
  250. package/dist/types/reactions/reactions.type.d.ts +52 -0
  251. package/dist/types/reconnection-manager/index.d.ts +126 -0
  252. package/dist/types/recording-controller/enums.d.ts +7 -0
  253. package/dist/types/recording-controller/index.d.ts +208 -0
  254. package/dist/types/recording-controller/util.d.ts +14 -0
  255. package/dist/types/roap/index.d.ts +77 -0
  256. package/dist/types/roap/request.d.ts +36 -0
  257. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  258. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  259. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  260. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  261. package/dist/types/transcription/index.d.ts +64 -0
  262. package/package.json +26 -23
  263. package/src/annotation/annotation.types.ts +50 -0
  264. package/src/annotation/constants.ts +36 -0
  265. package/src/annotation/index.ts +328 -0
  266. package/src/breakouts/README.md +44 -14
  267. package/src/breakouts/breakout.ts +87 -9
  268. package/src/breakouts/edit-lock-error.ts +25 -0
  269. package/src/breakouts/events.ts +56 -0
  270. package/src/breakouts/index.ts +710 -10
  271. package/src/breakouts/request.ts +55 -0
  272. package/src/breakouts/utils.ts +57 -0
  273. package/src/common/errors/webex-errors.ts +6 -2
  274. package/src/common/logs/logger-proxy.ts +1 -1
  275. package/src/config.ts +2 -7
  276. package/src/constants.ts +157 -21
  277. package/src/controls-options-manager/constants.ts +5 -0
  278. package/src/controls-options-manager/enums.ts +18 -0
  279. package/src/controls-options-manager/index.ts +278 -0
  280. package/src/controls-options-manager/types.ts +59 -0
  281. package/src/controls-options-manager/util.ts +300 -0
  282. package/src/index.ts +39 -0
  283. package/src/interpretation/README.md +60 -0
  284. package/src/interpretation/collection.ts +19 -0
  285. package/src/interpretation/index.ts +318 -0
  286. package/src/interpretation/siLanguage.ts +18 -0
  287. package/src/locus-info/controlsUtils.ts +108 -0
  288. package/src/locus-info/index.ts +316 -38
  289. package/src/locus-info/mediaSharesUtils.ts +48 -0
  290. package/src/locus-info/parser.ts +1 -1
  291. package/src/locus-info/selfUtils.ts +81 -5
  292. package/src/media/index.ts +77 -142
  293. package/src/media/properties.ts +49 -90
  294. package/src/mediaQualityMetrics/config.ts +379 -377
  295. package/src/meeting/in-meeting-actions.ts +151 -3
  296. package/src/meeting/index.ts +1940 -2002
  297. package/src/meeting/locusMediaRequest.ts +309 -0
  298. package/src/meeting/muteState.ts +228 -132
  299. package/src/meeting/request.ts +96 -65
  300. package/src/meeting/util.ts +464 -396
  301. package/src/meeting-info/index.ts +54 -8
  302. package/src/meeting-info/meeting-info-v2.ts +148 -14
  303. package/src/meeting-info/utilv2.ts +13 -3
  304. package/src/meetings/collection.ts +20 -0
  305. package/src/meetings/index.ts +386 -84
  306. package/src/meetings/meetings.types.ts +12 -0
  307. package/src/meetings/request.ts +2 -0
  308. package/src/meetings/util.ts +103 -4
  309. package/src/member/index.ts +49 -0
  310. package/src/member/types.ts +38 -0
  311. package/src/member/util.ts +103 -0
  312. package/src/members/collection.ts +8 -0
  313. package/src/members/index.ts +107 -6
  314. package/src/members/request.ts +97 -17
  315. package/src/members/types.ts +28 -0
  316. package/src/members/util.ts +319 -240
  317. package/src/metrics/constants.ts +2 -4
  318. package/src/metrics/index.ts +1 -490
  319. package/src/multistream/mediaRequestManager.ts +289 -79
  320. package/src/multistream/receiveSlot.ts +55 -18
  321. package/src/multistream/receiveSlotManager.ts +42 -20
  322. package/src/multistream/remoteMedia.ts +28 -2
  323. package/src/multistream/remoteMediaGroup.ts +59 -0
  324. package/src/multistream/remoteMediaManager.ts +113 -32
  325. package/src/networkQualityMonitor/index.ts +6 -6
  326. package/src/reachability/index.ts +62 -15
  327. package/src/reachability/request.ts +10 -5
  328. package/src/reactions/reactions.ts +4 -4
  329. package/src/reactions/reactions.type.ts +3 -3
  330. package/src/reconnection-manager/index.ts +68 -43
  331. package/src/recording-controller/index.ts +20 -2
  332. package/src/recording-controller/util.ts +26 -9
  333. package/src/roap/index.ts +21 -30
  334. package/src/roap/request.ts +101 -95
  335. package/src/roap/turnDiscovery.ts +47 -25
  336. package/src/statsAnalyzer/global.ts +1 -94
  337. package/src/statsAnalyzer/index.ts +376 -386
  338. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  339. package/test/integration/spec/converged-space-meetings.js +233 -0
  340. package/test/integration/spec/journey.js +336 -259
  341. package/test/integration/spec/space-meeting.js +77 -4
  342. package/test/unit/spec/annotation/index.ts +418 -0
  343. package/test/unit/spec/breakouts/breakout.ts +142 -24
  344. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  345. package/test/unit/spec/breakouts/events.ts +89 -0
  346. package/test/unit/spec/breakouts/index.ts +1545 -48
  347. package/test/unit/spec/breakouts/request.ts +104 -0
  348. package/test/unit/spec/breakouts/utils.js +72 -0
  349. package/test/unit/spec/controls-options-manager/index.js +287 -0
  350. package/test/unit/spec/controls-options-manager/util.js +582 -0
  351. package/test/unit/spec/fixture/locus.js +1 -0
  352. package/test/unit/spec/interpretation/collection.ts +15 -0
  353. package/test/unit/spec/interpretation/index.ts +570 -0
  354. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  355. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  356. package/test/unit/spec/locus-info/index.js +707 -22
  357. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  358. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  359. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  360. package/test/unit/spec/media/index.ts +129 -23
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
  362. package/test/unit/spec/meeting/index.js +2812 -1375
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  364. package/test/unit/spec/meeting/muteState.js +370 -208
  365. package/test/unit/spec/meeting/request.js +338 -43
  366. package/test/unit/spec/meeting/utils.js +378 -55
  367. package/test/unit/spec/meeting-info/index.js +181 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +846 -121
  372. package/test/unit/spec/meetings/utils.js +206 -2
  373. package/test/unit/spec/member/index.js +58 -4
  374. package/test/unit/spec/member/util.js +415 -33
  375. package/test/unit/spec/members/index.js +320 -1
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +184 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  380. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  382. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  385. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  386. package/test/unit/spec/reachability/index.ts +125 -8
  387. package/test/unit/spec/reachability/request.js +66 -0
  388. package/test/unit/spec/reconnection-manager/index.js +59 -6
  389. package/test/unit/spec/recording-controller/index.js +294 -218
  390. package/test/unit/spec/recording-controller/util.js +223 -96
  391. package/test/unit/spec/roap/index.ts +26 -51
  392. package/test/unit/spec/roap/request.ts +196 -85
  393. package/test/unit/spec/roap/turnDiscovery.ts +30 -7
  394. package/test/unit/spec/stats-analyzer/index.js +92 -41
  395. package/test/utils/constants.js +9 -0
  396. package/test/utils/integrationTestUtils.js +46 -0
  397. package/test/utils/testUtils.js +0 -45
  398. package/test/utils/webex-config.js +4 -0
  399. package/test/utils/webex-test-users.js +6 -3
  400. package/dist/meeting/effectsState.js +0 -262
  401. package/dist/meeting/effectsState.js.map +0 -1
  402. package/dist/metrics/config.js +0 -299
  403. package/dist/metrics/config.js.map +0 -1
  404. package/dist/multistream/multistreamMedia.js +0 -110
  405. package/dist/multistream/multistreamMedia.js.map +0 -1
  406. package/src/index.js +0 -15
  407. package/src/meeting/effectsState.ts +0 -211
  408. package/src/metrics/config.ts +0 -495
  409. package/src/multistream/multistreamMedia.ts +0 -97
  410. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -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, IMediaStatus, ParticipantWithRoles} from './types';
5
6
 
6
7
  import MemberUtil from './util';
7
8
 
@@ -28,10 +29,14 @@ export default class Member {
28
29
  isSelf: any;
29
30
  isUser: any;
30
31
  isVideoMuted: any;
32
+ roles: IExternalRoles;
33
+ mediaStatus: IMediaStatus;
31
34
  name: any;
32
35
  participant: any;
33
36
  status: any;
34
37
  supportsBreakouts: boolean;
38
+ supportsInterpretation: boolean;
39
+ supportLiveAnnotation: boolean;
35
40
  type: any;
36
41
  namespace = MEETINGS;
37
42
 
@@ -108,6 +113,13 @@ export default class Member {
108
113
  * @memberof Member
109
114
  */
110
115
  this.supportsBreakouts = null;
116
+ /**
117
+ * @instance
118
+ * @type {Boolean}
119
+ * @public
120
+ * @memberof Member
121
+ */
122
+ this.supportLiveAnnotation = null;
111
123
  /**
112
124
  * @instance
113
125
  * @type {Boolean}
@@ -228,6 +240,27 @@ export default class Member {
228
240
  * @memberof Member
229
241
  */
230
242
  this.isModeratorAssignmentProhibited = null;
243
+
244
+ /**
245
+ * @instance
246
+ * @type {IExternalRoles}
247
+ * @public
248
+ * @memberof Member
249
+ */
250
+ this.roles = null;
251
+
252
+ /**
253
+ * @instance
254
+ * @type {IMediaStatus}
255
+ * @public
256
+ * @memberof Member
257
+ * @example {audio: MediaStatus.RECVONLY, video: MediaStatus.SENDRECV}
258
+ */
259
+ this.mediaStatus = {
260
+ audio: null,
261
+ video: null,
262
+ };
263
+
231
264
  // TODO: more participant types
232
265
  // such as native client, web client, is a device, what type of phone, etc
233
266
  this.processParticipant(participant);
@@ -251,6 +284,8 @@ export default class Member {
251
284
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
252
285
  this.isHandRaised = MemberUtil.isHandRaised(participant);
253
286
  this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
287
+ this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
288
+ this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
254
289
  this.isGuest = MemberUtil.isGuest(participant);
255
290
  this.isUser = MemberUtil.isUser(participant);
256
291
  this.isDevice = MemberUtil.isDevice(participant);
@@ -258,6 +293,7 @@ export default class Member {
258
293
  this.isModeratorAssignmentProhibited =
259
294
  MemberUtil.isModeratorAssignmentProhibited(participant);
260
295
  this.processStatus(participant);
296
+ this.processRoles(participant as ParticipantWithRoles);
261
297
  // must be done last
262
298
  this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
263
299
  }
@@ -303,6 +339,8 @@ export default class Member {
303
339
  this.isAudioMuted,
304
340
  this.type
305
341
  );
342
+
343
+ this.mediaStatus = MemberUtil.extractMediaStatus(this.participant);
306
344
  }
307
345
 
308
346
  /**
@@ -427,6 +465,17 @@ export default class Member {
427
465
  }
428
466
  }
429
467
 
468
+ /**
469
+ * process the roles that have been applied to this member
470
+ * @param {Object} participant
471
+ * @returns {undefined}
472
+ * @private
473
+ * @memberof Member
474
+ */
475
+ private processRoles(participant: ParticipantWithRoles) {
476
+ this.roles = MemberUtil.extractControlRoles(participant);
477
+ }
478
+
430
479
  /**
431
480
  * set the type for the member, could be MEETING or CALL
432
481
  * @param {String} type
@@ -0,0 +1,38 @@
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
+ };
25
+
26
+ // values are inherited from locus so don't update these
27
+ export enum MediaStatus {
28
+ RECVONLY = 'RECVONLY', // participant only receiving and not sending
29
+ SENDONLY = 'SENDONLY', // participant only sending and not receiving
30
+ SENDRECV = 'SENDRECV', // participant both sending and receiving
31
+ INACTIVE = 'INACTIVE', // participant is not connected to media source
32
+ UNKNOWN = 'UNKNOWN', // participant has not added media in the meeting
33
+ }
34
+
35
+ export interface IMediaStatus {
36
+ audio: MediaStatus;
37
+ video: MediaStatus;
38
+ }
@@ -1,3 +1,10 @@
1
+ import {
2
+ IExternalRoles,
3
+ ParticipantWithRoles,
4
+ ServerRoles,
5
+ ServerRoleShape,
6
+ IMediaStatus,
7
+ } from './types';
1
8
  import {
2
9
  _USER_,
3
10
  _RESOURCE_ROOM_,
@@ -19,6 +26,58 @@ import ParameterError from '../common/errors/parameter';
19
26
 
20
27
  const MemberUtil: any = {};
21
28
 
29
+ /**
30
+ * @param {Object} participant the locus participant
31
+ * @returns {[ServerRoleShape]}
32
+ */
33
+ MemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>
34
+ participant?.controls?.role?.roles;
35
+
36
+ /**
37
+ * @param {Object} participant the locus participant
38
+ * @param {ServerRoles} controlRole the search role
39
+ * @returns {Boolean}
40
+ */
41
+ MemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>
42
+ MemberUtil.getControlsRoles(participant)?.some(
43
+ (role) => role.type === controlRole && role.hasRole
44
+ );
45
+
46
+ /**
47
+ * @param {Object} participant the locus participant
48
+ * @returns {Boolean}
49
+ */
50
+ MemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>
51
+ MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;
52
+
53
+ /**
54
+ * @param {Object} participant the locus participant
55
+ * @returns {Boolean}
56
+ */
57
+ MemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>
58
+ MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;
59
+
60
+ /**
61
+ * @param {Object} participant the locus participant
62
+ * @returns {Boolean}
63
+ */
64
+ MemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>
65
+ MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;
66
+
67
+ /**
68
+ * @param {Object} participant the locus participant
69
+ * @returns {IExternalRoles}
70
+ */
71
+ MemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {
72
+ const roles = {
73
+ cohost: MemberUtil.hasCohost(participant),
74
+ moderator: MemberUtil.hasModerator(participant),
75
+ presenter: MemberUtil.hasPresenter(participant),
76
+ };
77
+
78
+ return roles;
79
+ };
80
+
22
81
  /**
23
82
  * @param {Object} participant the locus participant
24
83
  * @returns {Boolean}
@@ -143,6 +202,34 @@ MemberUtil.isBreakoutsSupported = (participant) => {
143
202
  return !participant.doesNotSupportBreakouts;
144
203
  };
145
204
 
205
+ /**
206
+ * @param {Object} participant the locus participant
207
+ * @returns {Boolean}
208
+ */
209
+ MemberUtil.isInterpretationSupported = (participant) => {
210
+ if (!participant) {
211
+ throw new ParameterError(
212
+ 'Interpretation support could not be processed, participant is undefined.'
213
+ );
214
+ }
215
+
216
+ return !participant.doesNotSupportSiInterpreter;
217
+ };
218
+
219
+ /**
220
+ * @param {Object} participant the locus participant
221
+ * @returns {Boolean}
222
+ */
223
+ MemberUtil.isLiveAnnotationSupported = (participant) => {
224
+ if (!participant) {
225
+ throw new ParameterError(
226
+ 'LiveAnnotation support could not be processed, participant is undefined.'
227
+ );
228
+ }
229
+
230
+ return !participant.annotatorAssignmentNotAllowed;
231
+ };
232
+
146
233
  /**
147
234
  * utility method for audio/video muted status
148
235
  * @param {String} status
@@ -266,6 +353,22 @@ MemberUtil.extractId = (participant: any) => {
266
353
  return null;
267
354
  };
268
355
 
356
+ /**
357
+ * extracts the media status from nested participant object
358
+ * @param {Object} participant the locus participant
359
+ * @returns {Object}
360
+ */
361
+ MemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {
362
+ if (!participant) {
363
+ throw new ParameterError('Media status could not be extracted, participant is undefined.');
364
+ }
365
+
366
+ return {
367
+ audio: participant.status.audioStatus,
368
+ video: participant.status.videoStatus,
369
+ };
370
+ };
371
+
269
372
  /**
270
373
  * @param {Object} participant the locus participant
271
374
  * @returns {String}
@@ -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
@@ -958,4 +1024,39 @@ export default class Members extends StatelessWebexPlugin {
958
1024
 
959
1025
  return csis;
960
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
+ }
961
1062
  }