@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.20

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +1 -17
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +1 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -27,7 +27,7 @@ import {
27
27
  ONLINE,
28
28
  ROAP,
29
29
  LOCUSINFO,
30
- EVENT_TRIGGERS
30
+ EVENT_TRIGGERS,
31
31
  } from '../../../../src/constants';
32
32
 
33
33
  describe('plugin-meetings', () => {
@@ -37,17 +37,19 @@ describe('plugin-meetings', () => {
37
37
  error: () => {},
38
38
  warn: () => {},
39
39
  trace: () => {},
40
- debug: () => {}
40
+ debug: () => {},
41
41
  };
42
42
 
43
43
  beforeEach(() => {
44
44
  StaticConfig.set({
45
45
  bandwidth: {
46
- audio: 50, video: 500
47
- }
46
+ audio: 50,
47
+ video: 500,
48
+ },
48
49
  });
49
50
  LoggerConfig.set({
50
- verboseEvents: true, enable: false
51
+ verboseEvents: true,
52
+ enable: false,
51
53
  });
52
54
  TriggerProxy.trigger = sinon.stub().returns(true);
53
55
  });
@@ -71,13 +73,12 @@ describe('plugin-meetings', () => {
71
73
  children: {
72
74
  device: Device,
73
75
  mercury: Mercury,
74
- meetings: Meetings
75
- }
76
+ meetings: Meetings,
77
+ },
76
78
  });
77
79
 
78
-
79
80
  Object.assign(webex, {
80
- logging: logger
81
+ logging: logger,
81
82
  });
82
83
 
83
84
  Object.assign(webex.meetings.config, {
@@ -86,64 +87,66 @@ describe('plugin-meetings', () => {
86
87
  // the server supports, minimums have to be tested
87
88
  audio: 64000,
88
89
  video: 4000000,
89
- startBitrate: 2000
90
+ startBitrate: 2000,
90
91
  },
91
92
  experimental: {
92
- enableUnifiedMeetings: true
93
+ enableUnifiedMeetings: true,
93
94
  },
94
95
  logging: {
95
96
  enable: true,
96
- verboseEvents: true
97
- }
97
+ verboseEvents: true,
98
+ },
98
99
  });
99
100
 
100
101
  Object.assign(webex, {
101
- logger
102
+ logger,
102
103
  });
103
104
 
104
105
  Object.assign(webex.meetings, {
105
- startReachability: sinon.stub().returns(Promise.resolve())
106
+ startReachability: sinon.stub().returns(Promise.resolve()),
106
107
  });
107
108
 
108
109
  Object.assign(webex.internal, {
110
+ llm: {on: sinon.stub()},
109
111
  device: {
110
112
  deviceType: 'FAKE_DEVICE',
111
113
  register: sinon.stub().returns(Promise.resolve()),
112
- unregister: sinon.stub().returns(Promise.resolve())
114
+ unregister: sinon.stub().returns(Promise.resolve()),
113
115
  },
114
116
  mercury: {
115
117
  connect: sinon.stub().returns(Promise.resolve()),
116
118
  disconnect: sinon.stub().returns(Promise.resolve()),
117
119
  on: () => {},
118
- off: () => {}
120
+ off: () => {},
119
121
  },
120
122
  services: {
121
- getMeetingPreferences: sinon.stub().returns(Promise.resolve({
122
- sites: [
123
- {
124
- siteUrl: 'site1-example.webex.com',
125
- default: false
126
- },
127
- {
128
- siteUrl: 'site2-example.webex.com',
129
- default: false
130
- },
131
- {
132
- siteUrl: 'site3-example.webex.com',
133
- default: false
134
- },
135
- {
136
- siteUrl: 'go.webex.com',
137
- default: true
138
- }
139
- ]
140
- })),
141
- fetchClientRegionInfo: sinon.stub().returns(Promise.resolve())
123
+ getMeetingPreferences: sinon.stub().returns(
124
+ Promise.resolve({
125
+ sites: [
126
+ {
127
+ siteUrl: 'site1-example.webex.com',
128
+ default: false,
129
+ },
130
+ {
131
+ siteUrl: 'site2-example.webex.com',
132
+ default: false,
133
+ },
134
+ {
135
+ siteUrl: 'site3-example.webex.com',
136
+ default: false,
137
+ },
138
+ {
139
+ siteUrl: 'go.webex.com',
140
+ default: true,
141
+ },
142
+ ],
143
+ })
144
+ ),
145
+ fetchClientRegionInfo: sinon.stub().returns(Promise.resolve()),
142
146
  },
143
147
  metrics: {
144
- submitClientMetrics: sinon.stub().returns(Promise.resolve())
145
- }
146
-
148
+ submitClientMetrics: sinon.stub().returns(Promise.resolve()),
149
+ },
147
150
  });
148
151
  webex.emit('ready');
149
152
  });
@@ -177,10 +180,14 @@ describe('plugin-meetings', () => {
177
180
 
178
181
  describe('failure', () => {
179
182
  it('should not accept non boolean input', () => {
180
- const currentEnableUnifiedMeetings = webex.meetings.config.experimental.enableUnifiedMeetings;
183
+ const currentEnableUnifiedMeetings =
184
+ webex.meetings.config.experimental.enableUnifiedMeetings;
181
185
 
182
186
  webex.meetings._toggleUnifiedMeetings('test');
183
- assert.equal(webex.meetings.config.experimental.enableUnifiedMeetings, currentEnableUnifiedMeetings);
187
+ assert.equal(
188
+ webex.meetings.config.experimental.enableUnifiedMeetings,
189
+ currentEnableUnifiedMeetings
190
+ );
184
191
  });
185
192
  });
186
193
  });
@@ -202,7 +209,10 @@ describe('plugin-meetings', () => {
202
209
  const currentEnableAdhocMeetings = webex.meetings.config.experimental.enableAdhocMeetings;
203
210
 
204
211
  webex.meetings._toggleAdhocMeetings('test');
205
- assert.equal(webex.meetings.config.experimental.enableAdhocMeetings, currentEnableAdhocMeetings);
212
+ assert.equal(
213
+ webex.meetings.config.experimental.enableAdhocMeetings,
214
+ currentEnableAdhocMeetings
215
+ );
206
216
  });
207
217
  });
208
218
  });
@@ -227,18 +237,25 @@ describe('plugin-meetings', () => {
227
237
  const currentEnableTurnDiscovery = webex.meetings.config.experimental.enableTurnDiscovery;
228
238
 
229
239
  webex.meetings._toggleTurnDiscovery('test');
230
- assert.equal(webex.meetings.config.experimental.enableAdhocMeetings, currentEnableTurnDiscovery);
240
+ assert.equal(
241
+ webex.meetings.config.experimental.enableAdhocMeetings,
242
+ currentEnableTurnDiscovery
243
+ );
231
244
  });
232
245
  });
233
246
  });
234
247
 
235
-
236
248
  describe('Public API Contracts', () => {
237
249
  describe('#register', () => {
238
250
  it('emits an event and resolves when register succeeds', async () => {
239
251
  webex.canAuthorize = true;
240
252
  await webex.meetings.register();
241
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meetings), {file: 'meetings', function: 'register'}, 'meetings:registered');
253
+ assert.calledWith(
254
+ TriggerProxy.trigger,
255
+ sinon.match.instanceOf(Meetings),
256
+ {file: 'meetings', function: 'register'},
257
+ 'meetings:registered'
258
+ );
242
259
  assert.isTrue(webex.meetings.registered);
243
260
  });
244
261
 
@@ -284,9 +301,15 @@ describe('plugin-meetings', () => {
284
301
  it('emits an event and resolves when unregister succeeds', (done) => {
285
302
  webex.meetings.registered = true;
286
303
  webex.meetings.unregister().then(() => {
287
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meetings), {
288
- file: 'meetings', function: 'unregister'
289
- }, 'meetings:unregistered');
304
+ assert.calledWith(
305
+ TriggerProxy.trigger,
306
+ sinon.match.instanceOf(Meetings),
307
+ {
308
+ file: 'meetings',
309
+ function: 'unregister',
310
+ },
311
+ 'meetings:unregistered'
312
+ );
290
313
  assert.isFalse(webex.meetings.registered);
291
314
  done();
292
315
  });
@@ -324,7 +347,10 @@ describe('plugin-meetings', () => {
324
347
  it('does not get a reachability instance', () => {
325
348
  const reachability = webex.meetings.getReachability();
326
349
 
327
- assert.notExists(reachability, 'reachability is undefined because #setReachability has not been called');
350
+ assert.notExists(
351
+ reachability,
352
+ 'reachability is undefined because #setReachability has not been called'
353
+ );
328
354
  });
329
355
  });
330
356
  describe('after #setReachability', () => {
@@ -337,7 +363,10 @@ describe('plugin-meetings', () => {
337
363
  it('gets the reachability data instance from webex.meetings', () => {
338
364
  const reachability = webex.meetings.getReachability();
339
365
 
340
- assert.exists(reachability, 'reachability is defined because #setReachability has been called');
366
+ assert.exists(
367
+ reachability,
368
+ 'reachability is defined because #setReachability has been called'
369
+ );
341
370
  assert.instanceOf(reachability, Reachability, 'should be a reachability instance');
342
371
  });
343
372
  });
@@ -349,8 +378,15 @@ describe('plugin-meetings', () => {
349
378
  it('gets the personal meeting room instance from webex.meetings', () => {
350
379
  const personalMeetingRoom = webex.meetings.getPersonalMeetingRoom();
351
380
 
352
- assert.exists(personalMeetingRoom, 'personal meeting room instance is set up at object creation');
353
- assert.instanceOf(personalMeetingRoom, PersonalMeetingRoom, 'should be a personal meeting room instance');
381
+ assert.exists(
382
+ personalMeetingRoom,
383
+ 'personal meeting room instance is set up at object creation'
384
+ );
385
+ assert.instanceOf(
386
+ personalMeetingRoom,
387
+ PersonalMeetingRoom,
388
+ 'should be a personal meeting room instance'
389
+ );
354
390
  });
355
391
  });
356
392
  describe('Static shortcut proxy methods', () => {
@@ -379,11 +415,11 @@ describe('plugin-meetings', () => {
379
415
  describe('#getAllMeetings', () => {
380
416
  it('calls MeetingCollection to get all meetings with supplied options', () => {
381
417
  webex.meetings.getAllMeetings({
382
- test: test1
418
+ test: test1,
383
419
  });
384
420
  assert.calledOnce(webex.meetings.meetingCollection.getAll);
385
421
  assert.calledWith(webex.meetings.meetingCollection.getAll, {
386
- test: test1
422
+ test: test1,
387
423
  });
388
424
  });
389
425
  });
@@ -396,11 +432,15 @@ describe('plugin-meetings', () => {
396
432
  });
397
433
  describe('succesful requests', () => {
398
434
  beforeEach(() => {
399
- webex.meetings.request.getActiveMeetings = sinon.stub().returns(Promise.resolve({
400
- loci: [{
401
- url: url1
402
- }]
403
- }));
435
+ webex.meetings.request.getActiveMeetings = sinon.stub().returns(
436
+ Promise.resolve({
437
+ loci: [
438
+ {
439
+ url: url1,
440
+ },
441
+ ],
442
+ })
443
+ );
404
444
  });
405
445
  describe('when meeting is returned', () => {
406
446
  let parse;
@@ -409,8 +449,8 @@ describe('plugin-meetings', () => {
409
449
  parse = sinon.stub().returns(true);
410
450
  webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
411
451
  locusInfo: {
412
- parse
413
- }
452
+ parse,
453
+ },
414
454
  });
415
455
  });
416
456
  it('tests the sync meeting calls for existing meeting', async () => {
@@ -427,11 +467,13 @@ describe('plugin-meetings', () => {
427
467
  beforeEach(() => {
428
468
  initialSetup = sinon.stub().returns(true);
429
469
  webex.meetings.meetingCollection.getByKey = sinon.stub().returns(null);
430
- webex.meetings.create = sinon.stub().returns(Promise.resolve({
431
- locusInfo: {
432
- initialSetup
433
- }
434
- }));
470
+ webex.meetings.create = sinon.stub().returns(
471
+ Promise.resolve({
472
+ locusInfo: {
473
+ initialSetup,
474
+ },
475
+ })
476
+ );
435
477
  });
436
478
  it('tests the sync meeting calls for not existing meeting', async () => {
437
479
  await webex.meetings.syncMeetings();
@@ -441,11 +483,15 @@ describe('plugin-meetings', () => {
441
483
  assert.calledOnce(webex.meetings.create);
442
484
  assert.calledWith(webex.meetings.request.getActiveMeetings);
443
485
  assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
444
- assert.calledWith(webex.meetings.create, {
445
- url: url1
446
- }, 'LOCUS_ID');
486
+ assert.calledWith(
487
+ webex.meetings.create,
488
+ {
489
+ url: url1,
490
+ },
491
+ 'LOCUS_ID'
492
+ );
447
493
  assert.calledWith(initialSetup, {
448
- url: url1
494
+ url: url1,
449
495
  });
450
496
  });
451
497
  });
@@ -460,24 +506,29 @@ describe('plugin-meetings', () => {
460
506
  initialSetup = sinon.stub().returns(true);
461
507
  webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
462
508
  locusInfo: {
463
- parse
509
+ parse,
464
510
  },
465
- sendCallAnalyzerMetrics: sinon.stub()
511
+ sendCallAnalyzerMetrics: sinon.stub(),
466
512
  });
467
513
  webex.meetings.meetingCollection.getAll = sinon.stub().returns({
468
514
  meetingutk: {
469
- locusUrl: 'fdfdjfdhj', sendCallAnalyzerMetrics: sinon.stub()
470
- }
471
- });
472
- webex.meetings.create = sinon.stub().returns(Promise.resolve({
473
- locusInfo: {
474
- initialSetup
515
+ locusUrl: 'fdfdjfdhj',
516
+ sendCallAnalyzerMetrics: sinon.stub(),
475
517
  },
476
- sendCallAnalyzerMetrics: sinon.stub()
477
- }));
478
- webex.meetings.request.getActiveMeetings = sinon.stub().returns(Promise.resolve({
479
- loci: []
480
- }));
518
+ });
519
+ webex.meetings.create = sinon.stub().returns(
520
+ Promise.resolve({
521
+ locusInfo: {
522
+ initialSetup,
523
+ },
524
+ sendCallAnalyzerMetrics: sinon.stub(),
525
+ })
526
+ );
527
+ webex.meetings.request.getActiveMeetings = sinon.stub().returns(
528
+ Promise.resolve({
529
+ loci: [],
530
+ })
531
+ );
481
532
  MeetingUtil.cleanUp = sinon.stub().returns(Promise.resolve());
482
533
  });
483
534
  it('destroy non active meetings', async () => {
@@ -499,34 +550,29 @@ describe('plugin-meetings', () => {
499
550
  beforeEach(() => {
500
551
  infoOptions = {
501
552
  destination: 'dest-example',
502
- type: 'CONVERSATION_URL'
553
+ type: 'CONVERSATION_URL',
503
554
  };
504
555
  webex.meetings.meetingCollection.getByKey = sinon.stub().returns();
505
- webex.meetings.createMeeting = sinon.stub().returns(Promise.resolve({
506
- on: () => true
507
- }));
556
+ webex.meetings.createMeeting = sinon.stub().returns(
557
+ Promise.resolve({
558
+ on: () => true,
559
+ })
560
+ );
508
561
  });
509
562
 
510
- it('should call MeetingInfo#fetchInfoOptions() with proper params',
511
- () => {
512
- webex.meetings.meetingInfo.fetchInfoOptions = sinon.stub().resolves(
513
- infoOptions
514
- );
563
+ it('should call MeetingInfo#fetchInfoOptions() with proper params', () => {
564
+ webex.meetings.meetingInfo.fetchInfoOptions = sinon.stub().resolves(infoOptions);
515
565
 
516
- return webex.meetings.create(
566
+ return webex.meetings.create(infoOptions.destination, infoOptions.type).then(() => {
567
+ assert.calledWith(
568
+ webex.meetings.meetingInfo.fetchInfoOptions,
517
569
  infoOptions.destination,
518
570
  infoOptions.type
519
- )
520
- .then(() => {
521
- assert.calledWith(
522
- webex.meetings.meetingInfo.fetchInfoOptions,
523
- infoOptions.destination,
524
- infoOptions.type
525
- );
526
-
527
- assert.calledTwice(webex.meetings.meetingCollection.getByKey);
528
- });
571
+ );
572
+
573
+ assert.calledTwice(webex.meetings.meetingCollection.getByKey);
529
574
  });
575
+ });
530
576
 
531
577
  it('calls createMeeting and returns its promise', async () => {
532
578
  const FAKE_USE_RANDOM_DELAY = true;
@@ -565,9 +611,9 @@ describe('plugin-meetings', () => {
565
611
  return undefined;
566
612
  });
567
613
 
568
- webex.meetings.meetingInfo.fetchInfoOptions = sinon.stub().resolves(
569
- scheduledMeetingFixture
570
- );
614
+ webex.meetings.meetingInfo.fetchInfoOptions = sinon
615
+ .stub()
616
+ .resolves(scheduledMeetingFixture);
571
617
 
572
618
  webex.meetings.meetingCollection.set(scheduledMeetingFixture);
573
619
 
@@ -602,28 +648,31 @@ describe('plugin-meetings', () => {
602
648
  it('doesnt call handle locus mercury for a locus roap event', () => {
603
649
  webex.meetings.handleLocusMercury({
604
650
  data: {
605
- eventType: 'locus.message.roap'
606
- }
651
+ eventType: 'locus.message.roap',
652
+ },
607
653
  });
608
654
  assert.notCalled(webex.meetings.handleLocusEvent);
609
655
  });
610
656
  it('doesnt call handle locus mercury for an undefined eventType', () => {
611
657
  webex.meetings.handleLocusMercury({
612
- data: {
613
- }
658
+ data: {},
614
659
  });
615
660
  assert.notCalled(webex.meetings.handleLocusEvent);
616
661
  });
617
662
  it('calls handle locus mercury for all locus events', () => {
618
663
  webex.meetings.handleLocusMercury({
619
664
  data: {
620
- eventType: test1
621
- }
665
+ eventType: test1,
666
+ },
622
667
  });
623
668
  assert.calledOnce(webex.meetings.handleLocusEvent);
624
- assert.calledWith(webex.meetings.handleLocusEvent, {
625
- eventType: test1
626
- }, true);
669
+ assert.calledWith(
670
+ webex.meetings.handleLocusEvent,
671
+ {
672
+ eventType: test1,
673
+ },
674
+ true
675
+ );
627
676
  });
628
677
  });
629
678
  describe('#handleLocusEvent', () => {
@@ -634,24 +683,28 @@ describe('plugin-meetings', () => {
634
683
  parse = sinon.stub().returns(true);
635
684
  webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
636
685
  locusInfo: {
637
- parse
638
- }
686
+ parse,
687
+ },
639
688
  });
640
689
  });
641
690
  it('should parse the meeting info', () => {
642
691
  webex.meetings.handleLocusEvent({
643
- locusUrl: url1
692
+ locusUrl: url1,
644
693
  });
645
694
  assert.calledOnce(webex.meetings.meetingCollection.getByKey);
646
695
  assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
647
696
  assert.calledOnce(parse);
648
- assert.calledWith(parse, {
649
- locusInfo: {
650
- parse
697
+ assert.calledWith(
698
+ parse,
699
+ {
700
+ locusInfo: {
701
+ parse,
702
+ },
703
+ },
704
+ {
705
+ locusUrl: url1,
651
706
  }
652
- }, {
653
- locusUrl: url1
654
- });
707
+ );
655
708
  });
656
709
  });
657
710
  describe('there was not a meeting', () => {
@@ -660,41 +713,47 @@ describe('plugin-meetings', () => {
660
713
  beforeEach(() => {
661
714
  initialSetup = sinon.stub().returns(true);
662
715
  webex.meetings.meetingCollection.getByKey = sinon.stub().returns(undefined);
663
- webex.meetings.create = sinon.stub().returns(Promise.resolve({
664
- locusInfo: {
665
- initialSetup
666
- }
667
- }));
716
+ webex.meetings.create = sinon.stub().returns(
717
+ Promise.resolve({
718
+ locusInfo: {
719
+ initialSetup,
720
+ },
721
+ })
722
+ );
668
723
  });
669
724
  it('should setup the meeting by difference event', async () => {
670
725
  await webex.meetings.handleLocusEvent({
671
726
  locus: {
672
727
  id: uuid1,
673
- replaces: [{
674
- locusUrl: 'http:locusUrl'
675
- }],
728
+ replaces: [
729
+ {
730
+ locusUrl: 'http:locusUrl',
731
+ },
732
+ ],
676
733
  self: {
677
734
  callBackInfo: {
678
- callbackAddress: uri1
679
- }
680
- }
735
+ callbackAddress: uri1,
736
+ },
737
+ },
681
738
  },
682
739
  eventType: 'locus.difference',
683
- locusUrl: url1
740
+ locusUrl: url1,
684
741
  });
685
742
  assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
686
743
  assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
687
744
  assert.calledOnce(initialSetup);
688
745
  assert.calledWith(initialSetup, {
689
746
  id: uuid1,
690
- replaces: [{
691
- locusUrl: 'http:locusUrl'
692
- }],
747
+ replaces: [
748
+ {
749
+ locusUrl: 'http:locusUrl',
750
+ },
751
+ ],
693
752
  self: {
694
753
  callBackInfo: {
695
- callbackAddress: uri1
696
- }
697
- }
754
+ callbackAddress: uri1,
755
+ },
756
+ },
698
757
  });
699
758
  });
700
759
  it('should setup the meeting by difference event without replaces', async () => {
@@ -703,12 +762,12 @@ describe('plugin-meetings', () => {
703
762
  id: uuid1,
704
763
  self: {
705
764
  callBackInfo: {
706
- callbackAddress: uri1
707
- }
708
- }
765
+ callbackAddress: uri1,
766
+ },
767
+ },
709
768
  },
710
769
  eventType: 'locus.difference',
711
- locusUrl: url1
770
+ locusUrl: url1,
712
771
  });
713
772
  assert.callCount(webex.meetings.meetingCollection.getByKey, 4);
714
773
  assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
@@ -717,9 +776,9 @@ describe('plugin-meetings', () => {
717
776
  id: uuid1,
718
777
  self: {
719
778
  callBackInfo: {
720
- callbackAddress: uri1
721
- }
722
- }
779
+ callbackAddress: uri1,
780
+ },
781
+ },
723
782
  });
724
783
  });
725
784
  it('should setup the meeting by a not difference event', async () => {
@@ -728,12 +787,12 @@ describe('plugin-meetings', () => {
728
787
  id: uuid1,
729
788
  self: {
730
789
  callBackInfo: {
731
- callbackAddress: uri1
732
- }
733
- }
790
+ callbackAddress: uri1,
791
+ },
792
+ },
734
793
  },
735
794
  eventType: test1,
736
- locusUrl: url1
795
+ locusUrl: url1,
737
796
  });
738
797
  assert.callCount(webex.meetings.meetingCollection.getByKey, 4);
739
798
  assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
@@ -742,9 +801,9 @@ describe('plugin-meetings', () => {
742
801
  id: uuid1,
743
802
  self: {
744
803
  callBackInfo: {
745
- callbackAddress: uri1
746
- }
747
- }
804
+ callbackAddress: uri1,
805
+ },
806
+ },
748
807
  });
749
808
  });
750
809
 
@@ -753,13 +812,13 @@ describe('plugin-meetings', () => {
753
812
  id: uuid1,
754
813
  self: {
755
814
  callbackInfo: {
756
- callbackAddress: uri1
757
- }
815
+ callbackAddress: uri1,
816
+ },
758
817
  },
759
818
  info: {
760
- isUnifiedSpaceMeeting
819
+ isUnifiedSpaceMeeting,
761
820
  },
762
- conversationUrl: 'fakeConvoUrl'
821
+ conversationUrl: 'fakeConvoUrl',
763
822
  },
764
823
  eventType: test1,
765
824
  locusUrl: url1,
@@ -768,18 +827,39 @@ describe('plugin-meetings', () => {
768
827
  it('should not try to match USM meetings by conversation url', async () => {
769
828
  await webex.meetings.handleLocusEvent(generateFakeLocusData(true));
770
829
  assert.callCount(webex.meetings.meetingCollection.getByKey, 3);
771
- assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, ['locusUrl', url1]);
772
- assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(1).args, ['correlationId', false]);
773
- assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(2).args, ['sipUri', uri1]);
830
+ assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, [
831
+ 'locusUrl',
832
+ url1,
833
+ ]);
834
+ assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(1).args, [
835
+ 'correlationId',
836
+ false,
837
+ ]);
838
+ assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(2).args, [
839
+ 'sipUri',
840
+ uri1,
841
+ ]);
774
842
  assert.calledOnce(initialSetup);
775
843
  });
776
844
  it('should try to match non-USM meetings by conversation url', async () => {
777
845
  await webex.meetings.handleLocusEvent(generateFakeLocusData(false));
778
846
  assert.callCount(webex.meetings.meetingCollection.getByKey, 4);
779
- assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, ['locusUrl', url1]);
780
- assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(1).args, ['correlationId', false]);
781
- assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(2).args, ['sipUri', uri1]);
782
- assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(3).args, ['conversationUrl', 'fakeConvoUrl']);
847
+ assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, [
848
+ 'locusUrl',
849
+ url1,
850
+ ]);
851
+ assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(1).args, [
852
+ 'correlationId',
853
+ false,
854
+ ]);
855
+ assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(2).args, [
856
+ 'sipUri',
857
+ uri1,
858
+ ]);
859
+ assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(3).args, [
860
+ 'conversationUrl',
861
+ 'fakeConvoUrl',
862
+ ]);
783
863
  assert.calledOnce(initialSetup);
784
864
  });
785
865
  });
@@ -798,11 +878,14 @@ describe('plugin-meetings', () => {
798
878
  beforeEach(() => {
799
879
  clock = sinon.useFakeTimers();
800
880
  setTimeoutSpy = sinon.spy(clock, 'setTimeout');
801
- webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(Promise.resolve({
802
- body: {
803
- permissionToken: 'PT', meetingJoinUrl: 'meetingJoinUrl'
804
- }
805
- }));
881
+ webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
882
+ Promise.resolve({
883
+ body: {
884
+ permissionToken: 'PT',
885
+ meetingJoinUrl: 'meetingJoinUrl',
886
+ },
887
+ })
888
+ );
806
889
  const nowTimeStamp = Date.now();
807
890
 
808
891
  FAKE_TIME_TO_START = 0.1 * 60 * 1000;
@@ -816,7 +899,12 @@ describe('plugin-meetings', () => {
816
899
  clock.restore();
817
900
  });
818
901
 
819
- const checkCreateWithoutDelay = (meeting, destination, type, expectedMeetingData = {}) => {
902
+ const checkCreateWithoutDelay = (
903
+ meeting,
904
+ destination,
905
+ type,
906
+ expectedMeetingData = {}
907
+ ) => {
820
908
  assert.calledOnce(webex.meetings.meetingInfo.fetchMeetingInfo);
821
909
  assert.calledOnce(MeetingsUtil.getMeetingAddedType);
822
910
  assert.notCalled(setTimeoutSpy);
@@ -832,12 +920,25 @@ describe('plugin-meetings', () => {
832
920
  }
833
921
  assert.equal(meeting.destination, destination);
834
922
  assert.equal(meeting.destinationType, type);
835
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meetings), {
836
- file: 'meetings', function: 'createMeeting'
837
- }, 'meeting:added', {
838
- meeting: sinon.match.instanceOf(Meeting), type: 'test meeting added type'
839
- });
840
- assert.calledWith(TriggerProxy.trigger, meeting, {file: 'meetings', function: 'fetchMeetingInfo'}, 'meeting:meetingInfoAvailable');
923
+ assert.calledWith(
924
+ TriggerProxy.trigger,
925
+ sinon.match.instanceOf(Meetings),
926
+ {
927
+ file: 'meetings',
928
+ function: 'createMeeting',
929
+ },
930
+ 'meeting:added',
931
+ {
932
+ meeting: sinon.match.instanceOf(Meeting),
933
+ type: 'test meeting added type',
934
+ }
935
+ );
936
+ assert.calledWith(
937
+ TriggerProxy.trigger,
938
+ meeting,
939
+ {file: 'meetings', function: 'fetchMeetingInfo'},
940
+ 'meeting:meetingInfoAvailable'
941
+ );
841
942
  };
842
943
 
843
944
  it('creates the meeting from a successful meeting info fetch promise testing', async () => {
@@ -845,7 +946,7 @@ describe('plugin-meetings', () => {
845
946
 
846
947
  const expectedMeetingData = {
847
948
  permissionToken: 'PT',
848
- meetingJoinUrl: 'meetingJoinUrl'
949
+ meetingJoinUrl: 'meetingJoinUrl',
849
950
  };
850
951
 
851
952
  checkCreateWithoutDelay(meeting, 'test destination', 'test type', expectedMeetingData);
@@ -855,10 +956,14 @@ describe('plugin-meetings', () => {
855
956
  const meeting = await webex.meetings.createMeeting('test destination', 'test type');
856
957
  const expectedMeetingData = {
857
958
  permissionToken: 'PT',
858
- meetingJoinUrl: 'meetingJoinUrl'
959
+ meetingJoinUrl: 'meetingJoinUrl',
859
960
  };
860
961
 
861
- assert.instanceOf(meeting, Meeting, 'createMeeting should eventually resolve to a Meeting Object');
962
+ assert.instanceOf(
963
+ meeting,
964
+ Meeting,
965
+ 'createMeeting should eventually resolve to a Meeting Object'
966
+ );
862
967
  checkCreateWithoutDelay(meeting, 'test destination', 'test type', expectedMeetingData);
863
968
  });
864
969
 
@@ -869,19 +974,27 @@ describe('plugin-meetings', () => {
869
974
  info: {
870
975
  webExMeetingId: 'locusMeetingId',
871
976
  sipUri: 'locusSipUri',
872
- owner: 'locusOwner'
977
+ owner: 'locusOwner',
873
978
  },
874
979
  meeting: {
875
- startTime: fakeMeetingStartTimeString
980
+ startTime: fakeMeetingStartTimeString,
876
981
  },
877
982
  fullState: {
878
- active: false
879
- }
983
+ active: false,
984
+ },
880
985
  };
881
986
 
882
- const meeting = await webex.meetings.createMeeting(FAKE_LOCUS_MEETING, 'test type', true);
987
+ const meeting = await webex.meetings.createMeeting(
988
+ FAKE_LOCUS_MEETING,
989
+ 'test type',
990
+ true
991
+ );
883
992
 
884
- assert.instanceOf(meeting, Meeting, 'createMeeting should eventually resolve to a Meeting Object');
993
+ assert.instanceOf(
994
+ meeting,
995
+ Meeting,
996
+ 'createMeeting should eventually resolve to a Meeting Object'
997
+ );
885
998
  assert.notCalled(webex.meetings.meetingInfo.fetchMeetingInfo);
886
999
  assert.calledOnce(setTimeoutSpy);
887
1000
 
@@ -897,15 +1010,27 @@ describe('plugin-meetings', () => {
897
1010
  // Add meeting and send trigger
898
1011
  assert.calledWith(MeetingsUtil.getMeetingAddedType, 'test type');
899
1012
  assert.calledTwice(TriggerProxy.trigger);
900
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meetings), {
901
- file: 'meetings', function: 'createMeeting'
902
- }, 'meeting:added', {
903
- meeting: sinon.match.instanceOf(Meeting), type: 'test meeting added type'
904
- });
1013
+ assert.calledWith(
1014
+ TriggerProxy.trigger,
1015
+ sinon.match.instanceOf(Meetings),
1016
+ {
1017
+ file: 'meetings',
1018
+ function: 'createMeeting',
1019
+ },
1020
+ 'meeting:added',
1021
+ {
1022
+ meeting: sinon.match.instanceOf(Meeting),
1023
+ type: 'test meeting added type',
1024
+ }
1025
+ );
905
1026
 
906
1027
  // When timer expires
907
1028
  clock.tick(FAKE_TIME_TO_START);
908
- assert.calledWith(webex.meetings.meetingInfo.fetchMeetingInfo, FAKE_LOCUS_MEETING, 'test type');
1029
+ assert.calledWith(
1030
+ webex.meetings.meetingInfo.fetchMeetingInfo,
1031
+ FAKE_LOCUS_MEETING,
1032
+ 'test type'
1033
+ );
909
1034
 
910
1035
  // Parse meeting info is called again with new meeting info
911
1036
  await testUtils.flushPromises();
@@ -917,7 +1042,12 @@ describe('plugin-meetings', () => {
917
1042
  assert.equal(meeting.owner, 'locusOwner');
918
1043
  assert.equal(meeting.permissionToken, 'PT');
919
1044
 
920
- assert.calledWith(TriggerProxy.trigger, meeting, {file: 'meetings', function: 'fetchMeetingInfo'}, 'meeting:meetingInfoAvailable');
1045
+ assert.calledWith(
1046
+ TriggerProxy.trigger,
1047
+ meeting,
1048
+ {file: 'meetings', function: 'fetchMeetingInfo'},
1049
+ 'meeting:meetingInfoAvailable'
1050
+ );
921
1051
  });
922
1052
 
923
1053
  it('creates the meeting from a successful meeting info fetch that has no random delay because it is active', async () => {
@@ -927,19 +1057,27 @@ describe('plugin-meetings', () => {
927
1057
  info: {
928
1058
  webExMeetingId: 'locusMeetingId',
929
1059
  sipUri: 'locusSipUri',
930
- owner: 'locusOwner'
1060
+ owner: 'locusOwner',
931
1061
  },
932
1062
  meeting: {
933
- startTime: fakeMeetingStartTimeString
1063
+ startTime: fakeMeetingStartTimeString,
934
1064
  },
935
1065
  fullState: {
936
- active: true
937
- }
1066
+ active: true,
1067
+ },
938
1068
  };
939
1069
 
940
- const meeting = await webex.meetings.createMeeting(FAKE_LOCUS_MEETING, 'test type', true);
1070
+ const meeting = await webex.meetings.createMeeting(
1071
+ FAKE_LOCUS_MEETING,
1072
+ 'test type',
1073
+ true
1074
+ );
941
1075
 
942
- assert.instanceOf(meeting, Meeting, 'createMeeting should eventually resolve to a Meeting Object');
1076
+ assert.instanceOf(
1077
+ meeting,
1078
+ Meeting,
1079
+ 'createMeeting should eventually resolve to a Meeting Object'
1080
+ );
943
1081
  checkCreateWithoutDelay(meeting, FAKE_LOCUS_MEETING, 'test type');
944
1082
  });
945
1083
 
@@ -950,27 +1088,35 @@ describe('plugin-meetings', () => {
950
1088
  info: {
951
1089
  webExMeetingId: 'locusMeetingId',
952
1090
  sipUri: 'locusSipUri',
953
- owner: 'locusOwner'
1091
+ owner: 'locusOwner',
954
1092
  },
955
1093
  meeting: {
956
- startTime: fakeMeetingStartTimeString - (1 * 60 * 60 * 1000)
1094
+ startTime: fakeMeetingStartTimeString - 1 * 60 * 60 * 1000,
957
1095
  },
958
1096
  fullState: {
959
- active: false
960
- }
1097
+ active: false,
1098
+ },
961
1099
  };
962
1100
 
963
- const meeting = await webex.meetings.createMeeting(FAKE_LOCUS_MEETING, 'test type', true);
1101
+ const meeting = await webex.meetings.createMeeting(
1102
+ FAKE_LOCUS_MEETING,
1103
+ 'test type',
1104
+ true
1105
+ );
964
1106
 
965
- assert.instanceOf(meeting, Meeting, 'createMeeting should eventually resolve to a Meeting Object');
1107
+ assert.instanceOf(
1108
+ meeting,
1109
+ Meeting,
1110
+ 'createMeeting should eventually resolve to a Meeting Object'
1111
+ );
966
1112
  checkCreateWithoutDelay(meeting, FAKE_LOCUS_MEETING, 'test type');
967
1113
  });
968
1114
 
969
1115
  it('creates the meeting from a successful meeting info fetch that has no random delay because enableUnifiedMeetings is disabled', async () => {
970
1116
  Object.assign(webex.meetings.config, {
971
1117
  experimental: {
972
- enableUnifiedMeetings: false
973
- }
1118
+ enableUnifiedMeetings: false,
1119
+ },
974
1120
  });
975
1121
  const FAKE_LOCUS_MEETING = {
976
1122
  conversationUrl: 'locusConvURL',
@@ -978,19 +1124,27 @@ describe('plugin-meetings', () => {
978
1124
  info: {
979
1125
  webExMeetingId: 'locusMeetingId',
980
1126
  sipUri: 'locusSipUri',
981
- owner: 'locusOwner'
1127
+ owner: 'locusOwner',
982
1128
  },
983
1129
  meeting: {
984
- startTime: fakeMeetingStartTimeString
1130
+ startTime: fakeMeetingStartTimeString,
985
1131
  },
986
1132
  fullState: {
987
- active: false
988
- }
1133
+ active: false,
1134
+ },
989
1135
  };
990
1136
 
991
- const meeting = await webex.meetings.createMeeting(FAKE_LOCUS_MEETING, 'test type', true);
1137
+ const meeting = await webex.meetings.createMeeting(
1138
+ FAKE_LOCUS_MEETING,
1139
+ 'test type',
1140
+ true
1141
+ );
992
1142
 
993
- assert.instanceOf(meeting, Meeting, 'createMeeting should eventually resolve to a Meeting Object');
1143
+ assert.instanceOf(
1144
+ meeting,
1145
+ Meeting,
1146
+ 'createMeeting should eventually resolve to a Meeting Object'
1147
+ );
994
1148
  checkCreateWithoutDelay(meeting, FAKE_LOCUS_MEETING, 'test type');
995
1149
  });
996
1150
  });
@@ -999,22 +1153,40 @@ describe('plugin-meetings', () => {
999
1153
  beforeEach(() => {
1000
1154
  console.error = sinon.stub().returns(false);
1001
1155
  TriggerProxy.trigger.reset();
1002
- webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(Promise.reject(new Error('test')));
1156
+ webex.meetings.meetingInfo.fetchMeetingInfo = sinon
1157
+ .stub()
1158
+ .returns(Promise.reject(new Error('test')));
1003
1159
  });
1004
1160
  it('creates the meeting from a rejected meeting info fetch', async () => {
1005
1161
  const meeting = await webex.meetings.createMeeting('test destination', 'test type');
1006
1162
 
1007
- assert.instanceOf(meeting, Meeting, 'createMeeting should eventually resolve to a Meeting Object');
1163
+ assert.instanceOf(
1164
+ meeting,
1165
+ Meeting,
1166
+ 'createMeeting should eventually resolve to a Meeting Object'
1167
+ );
1008
1168
  assert.calledOnce(webex.meetings.meetingInfo.fetchMeetingInfo);
1009
1169
  assert.calledOnce(MeetingsUtil.getMeetingAddedType);
1010
1170
  assert.calledTwice(TriggerProxy.trigger);
1011
- assert.calledWith(webex.meetings.meetingInfo.fetchMeetingInfo, 'test destination', 'test type');
1171
+ assert.calledWith(
1172
+ webex.meetings.meetingInfo.fetchMeetingInfo,
1173
+ 'test destination',
1174
+ 'test type'
1175
+ );
1012
1176
  assert.calledWith(MeetingsUtil.getMeetingAddedType, 'test type');
1013
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meetings), {
1014
- file: 'meetings', function: 'createMeeting'
1015
- }, 'meeting:added', {
1016
- meeting: sinon.match.instanceOf(Meeting), type: 'test meeting added type'
1017
- });
1177
+ assert.calledWith(
1178
+ TriggerProxy.trigger,
1179
+ sinon.match.instanceOf(Meetings),
1180
+ {
1181
+ file: 'meetings',
1182
+ function: 'createMeeting',
1183
+ },
1184
+ 'meeting:added',
1185
+ {
1186
+ meeting: sinon.match.instanceOf(Meeting),
1187
+ type: 'test meeting added type',
1188
+ }
1189
+ );
1018
1190
  });
1019
1191
  });
1020
1192
  });
@@ -1039,11 +1211,19 @@ describe('plugin-meetings', () => {
1039
1211
 
1040
1212
  assert.calledOnce(webex.meetings.meetingCollection.delete);
1041
1213
  assert.calledWith(webex.meetings.meetingCollection.delete, meeting.id);
1042
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meetings), {
1043
- file: 'meetings', function: 'destroy'
1044
- }, 'meeting:removed', {
1045
- meetingId: meeting.id, reason: test1
1046
- });
1214
+ assert.calledWith(
1215
+ TriggerProxy.trigger,
1216
+ sinon.match.instanceOf(Meetings),
1217
+ {
1218
+ file: 'meetings',
1219
+ function: 'destroy',
1220
+ },
1221
+ 'meeting:removed',
1222
+ {
1223
+ meetingId: meeting.id,
1224
+ reason: test1,
1225
+ }
1226
+ );
1047
1227
  });
1048
1228
  });
1049
1229
 
@@ -1068,7 +1248,8 @@ describe('plugin-meetings', () => {
1068
1248
  it('should trigger event upon mercury disconnect', () => {
1069
1249
  const {meetings} = webex;
1070
1250
  const SCOPE = {
1071
- file: 'meetings/index', function: 'handleMercuryOffline'
1251
+ file: 'meetings/index',
1252
+ function: 'handleMercuryOffline',
1072
1253
  };
1073
1254
  const EVENT = 'network:disconnected';
1074
1255
 
@@ -1098,13 +1279,11 @@ describe('plugin-meetings', () => {
1098
1279
  services: {
1099
1280
  getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
1100
1281
  },
1101
-
1102
1282
  });
1103
1283
 
1104
- await webex.meetings.fetchUserPreferredWebexSite()
1105
- .then(() => {
1106
- assert.equal(webex.meetings.preferredWebexSite, '');
1107
- });
1284
+ await webex.meetings.fetchUserPreferredWebexSite().then(() => {
1285
+ assert.equal(webex.meetings.preferredWebexSite, '');
1286
+ });
1108
1287
  });
1109
1288
  });
1110
1289
  });
@@ -1120,11 +1299,14 @@ describe('plugin-meetings', () => {
1120
1299
  TriggerProxy.trigger.reset();
1121
1300
  // clock = sinon.useFakeTimers();
1122
1301
  // setTimeoutSpy = sinon.spy(clock, 'setTimeout');
1123
- webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(Promise.resolve({
1124
- body: {
1125
- permissionToken: 'PT', meetingJoinUrl: 'meetingJoinUrl'
1126
- }
1127
- }));
1302
+ webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
1303
+ Promise.resolve({
1304
+ body: {
1305
+ permissionToken: 'PT',
1306
+ meetingJoinUrl: 'meetingJoinUrl',
1307
+ },
1308
+ })
1309
+ );
1128
1310
 
1129
1311
  meeting = await webex.meetings.createMeeting('test destination', 'test type');
1130
1312
 
@@ -1132,37 +1314,37 @@ describe('plugin-meetings', () => {
1132
1314
  });
1133
1315
 
1134
1316
  it('triggers correct event when CONTROLS_ENTRY_EXIT_TONE_UPDATED emitted', async () => {
1135
- await meeting.locusInfo.emitScoped(
1136
- {},
1137
- LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,
1138
- {entryExitTone: 'foo'}
1139
- );
1317
+ await meeting.locusInfo.emitScoped({}, LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, {
1318
+ entryExitTone: 'foo',
1319
+ });
1140
1320
 
1141
1321
  assert.calledOnce(TriggerProxy.trigger);
1142
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meeting),
1322
+ assert.calledWith(
1323
+ TriggerProxy.trigger,
1324
+ sinon.match.instanceOf(Meeting),
1143
1325
  {
1144
1326
  file: 'meeting/index',
1145
- function: 'setupLocusControlsListener'
1327
+ function: 'setupLocusControlsListener',
1146
1328
  },
1147
1329
  EVENT_TRIGGERS.MEETING_ENTRY_EXIT_TONE_UPDATE,
1148
- {entryExitTone: 'foo'});
1330
+ {entryExitTone: 'foo'}
1331
+ );
1149
1332
  });
1150
1333
 
1151
1334
  const checkSelfTrigger = async (inEvent, outEvent) => {
1152
- await meeting.locusInfo.emitScoped(
1153
- {},
1154
- inEvent,
1155
- {foo: 'bar'}
1156
- );
1335
+ await meeting.locusInfo.emitScoped({}, inEvent, {foo: 'bar'});
1157
1336
 
1158
1337
  assert.calledOnce(TriggerProxy.trigger);
1159
- assert.calledWith(TriggerProxy.trigger, sinon.match.instanceOf(Meeting),
1338
+ assert.calledWith(
1339
+ TriggerProxy.trigger,
1340
+ sinon.match.instanceOf(Meeting),
1160
1341
  {
1161
1342
  file: 'meeting/index',
1162
- function: 'setUpLocusInfoSelfListener'
1343
+ function: 'setUpLocusInfoSelfListener',
1163
1344
  },
1164
1345
  outEvent,
1165
- {payload: {foo: 'bar'}});
1346
+ {payload: {foo: 'bar'}}
1347
+ );
1166
1348
  };
1167
1349
 
1168
1350
  it('triggers correct event when SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE emitted', async () => {