@webex/plugin-meetings 2.37.0 → 2.37.1

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