@webex/plugin-meetings 3.0.0-bnr.4 → 3.0.0-stream-classes.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 (303) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +70 -32
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +422 -217
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +12 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/webex-errors.js +3 -2
  17. package/dist/common/errors/webex-errors.js.map +1 -1
  18. package/dist/common/logs/logger-proxy.js +1 -1
  19. package/dist/common/logs/logger-proxy.js.map +1 -1
  20. package/dist/common/logs/request.d.ts +1 -1
  21. package/dist/common/queue.js +24 -9
  22. package/dist/common/queue.js.map +1 -1
  23. package/dist/config.js +1 -7
  24. package/dist/config.js.map +1 -1
  25. package/dist/constants.js +118 -24
  26. package/dist/constants.js.map +1 -1
  27. package/dist/controls-options-manager/enums.js +2 -0
  28. package/dist/controls-options-manager/enums.js.map +1 -1
  29. package/dist/controls-options-manager/index.js +19 -14
  30. package/dist/controls-options-manager/index.js.map +1 -1
  31. package/dist/controls-options-manager/types.js.map +1 -1
  32. package/dist/controls-options-manager/util.js +80 -11
  33. package/dist/controls-options-manager/util.js.map +1 -1
  34. package/dist/index.js +62 -20
  35. package/dist/index.js.map +1 -1
  36. package/dist/interpretation/collection.js +23 -0
  37. package/dist/interpretation/collection.js.map +1 -0
  38. package/dist/interpretation/index.js +366 -0
  39. package/dist/interpretation/index.js.map +1 -0
  40. package/dist/interpretation/siLanguage.js +25 -0
  41. package/dist/interpretation/siLanguage.js.map +1 -0
  42. package/dist/locus-info/controlsUtils.js +71 -1
  43. package/dist/locus-info/controlsUtils.js.map +1 -1
  44. package/dist/locus-info/index.js +305 -57
  45. package/dist/locus-info/index.js.map +1 -1
  46. package/dist/locus-info/infoUtils.js +7 -1
  47. package/dist/locus-info/infoUtils.js.map +1 -1
  48. package/dist/locus-info/mediaSharesUtils.js +43 -1
  49. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  50. package/dist/locus-info/parser.js +219 -63
  51. package/dist/locus-info/parser.js.map +1 -1
  52. package/dist/locus-info/selfUtils.js +44 -22
  53. package/dist/locus-info/selfUtils.js.map +1 -1
  54. package/dist/media/index.js +57 -104
  55. package/dist/media/index.js.map +1 -1
  56. package/dist/media/properties.js +60 -121
  57. package/dist/media/properties.js.map +1 -1
  58. package/dist/meeting/in-meeting-actions.js +61 -3
  59. package/dist/meeting/in-meeting-actions.js.map +1 -1
  60. package/dist/meeting/index.js +2530 -2534
  61. package/dist/meeting/index.js.map +1 -1
  62. package/dist/meeting/locusMediaRequest.js +292 -0
  63. package/dist/meeting/locusMediaRequest.js.map +1 -0
  64. package/dist/meeting/muteState.js +125 -205
  65. package/dist/meeting/muteState.js.map +1 -1
  66. package/dist/meeting/request.js +150 -150
  67. package/dist/meeting/request.js.map +1 -1
  68. package/dist/meeting/util.js +568 -438
  69. package/dist/meeting/util.js.map +1 -1
  70. package/dist/meeting-info/index.js +48 -7
  71. package/dist/meeting-info/index.js.map +1 -1
  72. package/dist/meeting-info/meeting-info-v2.js +94 -38
  73. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  74. package/dist/meeting-info/utilv2.js +4 -2
  75. package/dist/meeting-info/utilv2.js.map +1 -1
  76. package/dist/meetings/index.d.ts +0 -2
  77. package/dist/meetings/index.js +260 -85
  78. package/dist/meetings/index.js.map +1 -1
  79. package/dist/meetings/meetings.types.js +7 -0
  80. package/dist/meetings/meetings.types.js.map +1 -0
  81. package/dist/meetings/util.js +42 -7
  82. package/dist/meetings/util.js.map +1 -1
  83. package/dist/member/index.d.ts +2 -0
  84. package/dist/member/index.js +26 -0
  85. package/dist/member/index.js.map +1 -1
  86. package/dist/member/member.types.d.ts +11 -0
  87. package/dist/member/member.types.js +18 -0
  88. package/dist/member/member.types.js.map +1 -0
  89. package/dist/member/types.js +11 -1
  90. package/dist/member/types.js.map +1 -1
  91. package/dist/member/util.js +60 -23
  92. package/dist/member/util.js.map +1 -1
  93. package/dist/members/index.js +4 -1
  94. package/dist/members/index.js.map +1 -1
  95. package/dist/members/request.js +75 -45
  96. package/dist/members/request.js.map +1 -1
  97. package/dist/members/util.js +308 -317
  98. package/dist/members/util.js.map +1 -1
  99. package/dist/metrics/config.js +1 -3
  100. package/dist/metrics/config.js.map +1 -1
  101. package/dist/metrics/constants.js +1 -0
  102. package/dist/metrics/constants.js.map +1 -1
  103. package/dist/metrics/index.d.ts +1 -1
  104. package/dist/metrics/index.js +1 -451
  105. package/dist/metrics/index.js.map +1 -1
  106. package/dist/multistream/mediaRequestManager.js +136 -40
  107. package/dist/multistream/mediaRequestManager.js.map +1 -1
  108. package/dist/multistream/receiveSlot.js.map +1 -1
  109. package/dist/multistream/receiveSlotManager.js +4 -4
  110. package/dist/multistream/receiveSlotManager.js.map +1 -1
  111. package/dist/multistream/remoteMedia.js.map +1 -1
  112. package/dist/multistream/remoteMediaGroup.js +60 -3
  113. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  114. package/dist/multistream/remoteMediaManager.js +36 -0
  115. package/dist/multistream/remoteMediaManager.js.map +1 -1
  116. package/dist/multistream/sendSlotManager.js +233 -0
  117. package/dist/multistream/sendSlotManager.js.map +1 -0
  118. package/dist/reachability/index.js +18 -3
  119. package/dist/reachability/index.js.map +1 -1
  120. package/dist/reachability/request.js +5 -3
  121. package/dist/reachability/request.js.map +1 -1
  122. package/dist/reconnection-manager/index.js +181 -153
  123. package/dist/reconnection-manager/index.js.map +1 -1
  124. package/dist/recording-controller/index.js +21 -2
  125. package/dist/recording-controller/index.js.map +1 -1
  126. package/dist/recording-controller/util.js +9 -8
  127. package/dist/recording-controller/util.js.map +1 -1
  128. package/dist/roap/index.js +25 -32
  129. package/dist/roap/index.js.map +1 -1
  130. package/dist/roap/request.js +42 -51
  131. package/dist/roap/request.js.map +1 -1
  132. package/dist/roap/turnDiscovery.js +97 -38
  133. package/dist/roap/turnDiscovery.js.map +1 -1
  134. package/dist/rtcMetrics/constants.js +12 -0
  135. package/dist/rtcMetrics/constants.js.map +1 -0
  136. package/dist/rtcMetrics/index.js +117 -0
  137. package/dist/rtcMetrics/index.js.map +1 -0
  138. package/dist/statsAnalyzer/index.js +0 -1
  139. package/dist/statsAnalyzer/index.js.map +1 -1
  140. package/dist/types/annotation/annotation.types.d.ts +43 -0
  141. package/dist/types/annotation/constants.d.ts +31 -0
  142. package/dist/types/annotation/index.d.ts +124 -0
  143. package/dist/types/breakouts/events.d.ts +2 -0
  144. package/dist/types/breakouts/utils.d.ts +7 -0
  145. package/dist/types/common/errors/webex-errors.d.ts +1 -1
  146. package/dist/types/config.d.ts +0 -6
  147. package/dist/types/constants.d.ts +51 -21
  148. package/dist/types/controls-options-manager/enums.d.ts +2 -0
  149. package/dist/types/controls-options-manager/index.d.ts +1 -1
  150. package/dist/types/controls-options-manager/types.d.ts +7 -1
  151. package/dist/types/index.d.ts +1 -1
  152. package/dist/types/interpretation/collection.d.ts +5 -0
  153. package/dist/types/interpretation/index.d.ts +5 -0
  154. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  155. package/dist/types/locus-info/index.d.ts +39 -1
  156. package/dist/types/media/index.d.ts +2 -0
  157. package/dist/types/media/properties.d.ts +16 -38
  158. package/dist/types/meeting/in-meeting-actions.d.ts +46 -2
  159. package/dist/types/meeting/index.d.ts +179 -379
  160. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  161. package/dist/types/meeting/muteState.d.ts +39 -40
  162. package/dist/types/meeting/request.d.ts +25 -26
  163. package/dist/types/meeting/util.d.ts +74 -1
  164. package/dist/types/meeting-info/meeting-info-v2.d.ts +14 -3
  165. package/dist/types/meetings/index.d.ts +49 -1
  166. package/dist/types/meetings/meetings.types.d.ts +4 -0
  167. package/dist/types/member/index.d.ts +2 -0
  168. package/dist/types/members/request.d.ts +56 -11
  169. package/dist/types/members/util.d.ts +209 -1
  170. package/dist/types/metrics/config.d.ts +26 -2
  171. package/dist/types/metrics/constants.d.ts +1 -0
  172. package/dist/types/metrics/index.d.ts +17 -0
  173. package/dist/types/multistream/mediaRequestManager.d.ts +27 -10
  174. package/dist/types/multistream/receiveSlot.d.ts +3 -3
  175. package/dist/types/multistream/remoteMedia.d.ts +2 -2
  176. package/dist/types/multistream/remoteMediaManager.d.ts +14 -0
  177. package/dist/types/roap/request.d.ts +6 -8
  178. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  179. package/package.json +3 -2
  180. package/src/annotation/annotation.types.ts +50 -0
  181. package/src/annotation/constants.ts +36 -0
  182. package/src/annotation/index.ts +328 -0
  183. package/src/breakouts/README.md +3 -2
  184. package/src/breakouts/breakout.ts +62 -27
  185. package/src/breakouts/events.ts +56 -0
  186. package/src/breakouts/index.ts +244 -64
  187. package/src/breakouts/utils.ts +13 -0
  188. package/src/common/errors/webex-errors.ts +6 -2
  189. package/src/common/logs/logger-proxy.ts +1 -1
  190. package/src/common/queue.ts +22 -8
  191. package/src/config.ts +0 -6
  192. package/src/constants.ts +111 -19
  193. package/src/controls-options-manager/enums.ts +2 -0
  194. package/src/controls-options-manager/index.ts +13 -10
  195. package/src/controls-options-manager/types.ts +10 -0
  196. package/src/controls-options-manager/util.ts +82 -11
  197. package/src/index.ts +18 -11
  198. package/src/interpretation/README.md +60 -0
  199. package/src/interpretation/collection.ts +19 -0
  200. package/src/interpretation/index.ts +332 -0
  201. package/src/interpretation/siLanguage.ts +18 -0
  202. package/src/locus-info/controlsUtils.ts +81 -0
  203. package/src/locus-info/index.ts +318 -57
  204. package/src/locus-info/infoUtils.ts +10 -2
  205. package/src/locus-info/mediaSharesUtils.ts +48 -0
  206. package/src/locus-info/parser.ts +224 -39
  207. package/src/locus-info/selfUtils.ts +32 -20
  208. package/src/media/index.ts +94 -108
  209. package/src/media/properties.ts +69 -109
  210. package/src/meeting/in-meeting-actions.ts +120 -4
  211. package/src/meeting/index.ts +1967 -2120
  212. package/src/meeting/locusMediaRequest.ts +314 -0
  213. package/src/meeting/muteState.ts +119 -194
  214. package/src/meeting/request.ts +122 -115
  215. package/src/meeting/util.ts +549 -413
  216. package/src/meeting-info/index.ts +54 -8
  217. package/src/meeting-info/meeting-info-v2.ts +89 -24
  218. package/src/meeting-info/utilv2.ts +6 -2
  219. package/src/meetings/index.ts +247 -87
  220. package/src/meetings/meetings.types.ts +12 -0
  221. package/src/meetings/util.ts +47 -12
  222. package/src/member/index.ts +28 -1
  223. package/src/member/types.ts +14 -0
  224. package/src/member/util.ts +75 -26
  225. package/src/members/index.ts +7 -1
  226. package/src/members/request.ts +61 -21
  227. package/src/members/util.ts +316 -326
  228. package/src/metrics/constants.ts +1 -0
  229. package/src/metrics/index.ts +1 -474
  230. package/src/multistream/mediaRequestManager.ts +183 -67
  231. package/src/multistream/receiveSlot.ts +4 -4
  232. package/src/multistream/receiveSlotManager.ts +4 -4
  233. package/src/multistream/remoteMedia.ts +2 -2
  234. package/src/multistream/remoteMediaGroup.ts +59 -0
  235. package/src/multistream/remoteMediaManager.ts +33 -0
  236. package/src/multistream/sendSlotManager.ts +170 -0
  237. package/src/reachability/index.ts +15 -4
  238. package/src/reachability/request.ts +7 -3
  239. package/src/reconnection-manager/index.ts +36 -29
  240. package/src/recording-controller/index.ts +20 -3
  241. package/src/recording-controller/util.ts +26 -9
  242. package/src/roap/index.ts +25 -30
  243. package/src/roap/request.ts +44 -51
  244. package/src/roap/turnDiscovery.ts +51 -25
  245. package/src/rtcMetrics/constants.ts +3 -0
  246. package/src/rtcMetrics/index.ts +100 -0
  247. package/src/statsAnalyzer/index.ts +0 -1
  248. package/test/integration/spec/converged-space-meetings.js +60 -3
  249. package/test/integration/spec/journey.js +336 -259
  250. package/test/integration/spec/space-meeting.js +76 -3
  251. package/test/unit/spec/annotation/index.ts +418 -0
  252. package/test/unit/spec/breakouts/breakout.ts +85 -26
  253. package/test/unit/spec/breakouts/events.ts +89 -0
  254. package/test/unit/spec/breakouts/index.ts +636 -98
  255. package/test/unit/spec/breakouts/utils.js +19 -1
  256. package/test/unit/spec/common/queue.js +31 -2
  257. package/test/unit/spec/controls-options-manager/index.js +8 -1
  258. package/test/unit/spec/controls-options-manager/util.js +576 -397
  259. package/test/unit/spec/fixture/locus.js +1 -0
  260. package/test/unit/spec/interpretation/collection.ts +15 -0
  261. package/test/unit/spec/interpretation/index.ts +589 -0
  262. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  263. package/test/unit/spec/locus-info/controlsUtils.js +195 -1
  264. package/test/unit/spec/locus-info/index.js +950 -45
  265. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  266. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  267. package/test/unit/spec/locus-info/parser.js +62 -22
  268. package/test/unit/spec/locus-info/selfConstant.js +19 -0
  269. package/test/unit/spec/locus-info/selfUtils.js +131 -26
  270. package/test/unit/spec/media/index.ts +82 -79
  271. package/test/unit/spec/meeting/in-meeting-actions.ts +60 -2
  272. package/test/unit/spec/meeting/index.js +3208 -1734
  273. package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
  274. package/test/unit/spec/meeting/muteState.js +328 -417
  275. package/test/unit/spec/meeting/request.js +393 -48
  276. package/test/unit/spec/meeting/utils.js +552 -76
  277. package/test/unit/spec/meeting-info/index.js +181 -0
  278. package/test/unit/spec/meeting-info/meetinginfov2.js +258 -20
  279. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  280. package/test/unit/spec/meetings/index.js +631 -145
  281. package/test/unit/spec/meetings/utils.js +164 -9
  282. package/test/unit/spec/member/index.js +44 -14
  283. package/test/unit/spec/member/util.js +296 -155
  284. package/test/unit/spec/members/index.js +23 -3
  285. package/test/unit/spec/members/request.js +167 -35
  286. package/test/unit/spec/metrics/index.js +1 -50
  287. package/test/unit/spec/multistream/mediaRequestManager.ts +366 -8
  288. package/test/unit/spec/multistream/receiveSlot.ts +1 -1
  289. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  290. package/test/unit/spec/multistream/remoteMediaManager.ts +123 -0
  291. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  292. package/test/unit/spec/reachability/index.ts +66 -5
  293. package/test/unit/spec/reachability/request.js +3 -1
  294. package/test/unit/spec/reconnection-manager/index.js +55 -5
  295. package/test/unit/spec/recording-controller/index.js +294 -218
  296. package/test/unit/spec/recording-controller/util.js +223 -96
  297. package/test/unit/spec/roap/index.ts +21 -48
  298. package/test/unit/spec/roap/request.ts +74 -60
  299. package/test/unit/spec/roap/turnDiscovery.ts +30 -6
  300. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  301. package/test/utils/integrationTestUtils.js +46 -0
  302. package/test/utils/testUtils.js +0 -60
  303. package/src/metrics/config.ts +0 -487
@@ -2,6 +2,7 @@ import {assert} from '@webex/test-helper-chai';
2
2
  import MockWebex from '@webex/test-helper-mock-webex';
3
3
  import sinon from 'sinon';
4
4
  import Reachability, {ICECandidateResult} from '@webex/plugin-meetings/src/reachability/';
5
+ import { IP_VERSION } from '@webex/plugin-meetings/src/constants';
5
6
 
6
7
  describe('isAnyClusterReachable', () => {
7
8
  let webex;
@@ -98,6 +99,55 @@ describe('gatherReachability', () => {
98
99
  assert.equal(JSON.stringify(getClustersResult.joinCookie), storedResultForJoinCookie);
99
100
  });
100
101
 
102
+ it('does reachability only on udp', async () => {
103
+ const reachability = new Reachability(webex);
104
+
105
+ const getClustersResult = {
106
+ clusters: {clusterId: {
107
+ tcp: [
108
+ 'stun:170.72.164.1:5004',
109
+ 'stun:170.72.165.2:5004'
110
+ ],
111
+ udp: [
112
+ 'stun:170.72.164.3:5004',
113
+ 'stun:170.72.164.3:9000',
114
+ ],
115
+ xtls: [
116
+ 'stun:external-media101.public.wjfkm-a-4.prod.infra.webex.com:443',
117
+ 'stun:external-media94.public.wjfkm-a-8.prod.infra.webex.com:443'
118
+ ]
119
+ }},
120
+ joinCookie: {id: 'id'},
121
+ };
122
+
123
+ sinon.stub(reachability.reachabilityRequest, 'getClusters').returns(getClustersResult);
124
+
125
+ const createPeerConnectionStub = sinon.stub(reachability, 'createPeerConnection');
126
+
127
+ await reachability.gatherReachability();
128
+
129
+ // check that a peer connection was created with only the udp urls
130
+ assert.calledOnceWithExactly(createPeerConnectionStub, {
131
+ key: 'clusterId',
132
+ config: {
133
+ iceServers: [
134
+ {
135
+ username: '',
136
+ credential: '',
137
+ urls: ['stun:170.72.164.3:5004'],
138
+ },
139
+ {
140
+ username: '',
141
+ credential: '',
142
+ urls: ['stun:170.72.164.3:9000'],
143
+ }
144
+ ],
145
+ iceCandidatePoolSize: '0',
146
+ iceTransportPolicy: 'all'
147
+ }
148
+ })
149
+ });
150
+
101
151
  describe('clientMediaIPs', () => {
102
152
  let testingClass: TestReachability;
103
153
 
@@ -135,9 +185,10 @@ describe('gatherReachability', () => {
135
185
  assert.deepEqual(res, {
136
186
  id1: {
137
187
  tcp: {
138
- clientMediaIPs: ['1.1.1.1'],
139
- latencyInMilliseconds: '12312',
140
- reachable: 'true',
188
+ untested: 'true',
189
+ },
190
+ xtls: {
191
+ untested: 'true',
141
192
  },
142
193
  udp: {
143
194
  clientMediaIPs: ['1.1.1.1'],
@@ -146,9 +197,11 @@ describe('gatherReachability', () => {
146
197
  },
147
198
  },
148
199
  id2: {
200
+ xtls: {
201
+ untested: 'true',
202
+ },
149
203
  tcp: {
150
- latencyInMilliseconds: '14123',
151
- reachable: 'true',
204
+ untested: 'true',
152
205
  },
153
206
  udp: {
154
207
  latencyInMilliseconds: '14123',
@@ -198,4 +251,12 @@ describe('gatherReachability', () => {
198
251
  });
199
252
  });
200
253
  });
254
+
255
+ describe('getIpVersion', () => {
256
+ it('returns unknown', () => {
257
+ const reachability = new Reachability(webex);
258
+
259
+ assert.equal(reachability.getIpVersion(), IP_VERSION.unknown);
260
+ })
261
+ })
201
262
  });
@@ -3,6 +3,7 @@ import {assert} from '@webex/test-helper-chai';
3
3
  import MockWebex from '@webex/test-helper-mock-webex';
4
4
  import Meetings from '@webex/plugin-meetings';
5
5
  import ReachabilityRequest from '@webex/plugin-meetings/src/reachability/request';
6
+ import {IP_VERSION} from '@webex/plugin-meetings/src/constants';
6
7
 
7
8
 
8
9
  describe('plugin-meetings/reachability', () => {
@@ -47,7 +48,7 @@ describe('plugin-meetings/reachability', () => {
47
48
  }
48
49
  }));
49
50
 
50
- const res = await reachabilityRequest.getClusters();
51
+ const res = await reachabilityRequest.getClusters(IP_VERSION.only_ipv4);
51
52
 
52
53
  const requestParams = webex.request.getCall(0).args[0];
53
54
 
@@ -58,6 +59,7 @@ describe('plugin-meetings/reachability', () => {
58
59
 
59
60
  assert.deepEqual(requestParams.qs, {
60
61
  JCSupport: 1,
62
+ ipver: 4,
61
63
  });
62
64
  assert.deepEqual(res.clusters.clusterId, {udp: "testUDP", isVideoMesh: true})
63
65
  assert.deepEqual(res.joinCookie, {anycastEntryPoint: "aws-eu-west-1"})
@@ -3,7 +3,6 @@ import chai from 'chai';
3
3
  import chaiAsPromised from 'chai-as-promised';
4
4
  import sinon from 'sinon';
5
5
  import ReconnectionManager from '@webex/plugin-meetings/src/reconnection-manager';
6
- import Metrics from '@webex/plugin-meetings/src/metrics';
7
6
 
8
7
  const {assert} = chai;
9
8
 
@@ -16,7 +15,6 @@ describe('plugin-meetings', () => {
16
15
  let fakeMeeting;
17
16
 
18
17
  beforeEach(() => {
19
- Metrics.postEvent = sinon.stub();
20
18
  fakeMediaConnection = {
21
19
  initiateOffer: sinon.stub().resolves({}),
22
20
  reconnect: sinon.stub().resolves({}),
@@ -64,6 +62,11 @@ describe('plugin-meetings', () => {
64
62
  getMeetingByType: sinon.stub().returns(true),
65
63
  syncMeetings: sinon.stub().resolves({}),
66
64
  },
65
+ internal: {
66
+ newMetrics: {
67
+ submitClientEvent: sinon.stub()
68
+ }
69
+ }
67
70
  },
68
71
  };
69
72
  });
@@ -82,6 +85,23 @@ describe('plugin-meetings', () => {
82
85
  credential: 'fake_turn_password',
83
86
  },
84
87
  ]);
88
+
89
+ assert.calledWith(fakeMeeting.webex.internal.newMetrics.submitClientEvent, {
90
+ name: 'client.media.reconnecting',
91
+ options: {
92
+ meetingId: rm.meeting.id,
93
+ },
94
+ });
95
+
96
+ assert.calledWith(fakeMeeting.webex.internal.newMetrics.submitClientEvent, {
97
+ name: 'client.media.recovered',
98
+ payload: {
99
+ recoveredBy: 'new',
100
+ },
101
+ options: {
102
+ meetingId: rm.meeting.id,
103
+ },
104
+ });
85
105
  });
86
106
 
87
107
  it('does not clear previous requests and re-request media for non-multistream meetings', async () => {
@@ -107,6 +127,35 @@ describe('plugin-meetings', () => {
107
127
  assert.calledOnce(fakeMeeting.mediaRequestManagers.audio.commit);
108
128
  assert.calledOnce(fakeMeeting.mediaRequestManagers.video.commit);
109
129
  });
130
+
131
+
132
+ it('sends the correct client event when reconnection fails', async () => {
133
+ sinon.stub(ReconnectionManager.prototype, 'executeReconnection').rejects();
134
+ fakeMeeting.isMultistream = true;
135
+ const rm = new ReconnectionManager(fakeMeeting);
136
+
137
+ try {
138
+ await rm.reconnect();
139
+ } catch (err) {
140
+ assert.calledWith(fakeMeeting.webex.internal.newMetrics.submitClientEvent, {
141
+ name: 'client.call.aborted',
142
+ payload: {
143
+ errors: [
144
+ {
145
+ category: 'expected',
146
+ errorCode: 2008,
147
+ fatal: true,
148
+ name: 'media-engine',
149
+ shownToUser: false,
150
+ },
151
+ ],
152
+ },
153
+ options: {
154
+ meetingId: rm.meeting.id,
155
+ },
156
+ });
157
+ }
158
+ });
110
159
  });
111
160
 
112
161
  /**
@@ -114,7 +163,7 @@ describe('plugin-meetings', () => {
114
163
  * level causes testing errors in CI based around related files. Skipping this here until a solution
115
164
  * to this problem is generated.
116
165
  */
117
- describe.skip('ReconnectionManager', () => {
166
+ describe('ReconnectionManager', () => {
118
167
  let reconnectionManager;
119
168
 
120
169
  beforeEach(() => {
@@ -207,10 +256,11 @@ describe('plugin-meetings', () => {
207
256
  assert.isTrue(reconnectionManager.iceState.disconnected);
208
257
  });
209
258
 
210
- it('should return a promise that rejects after a duration', () => {
259
+ it('should return a promise that rejects after a duration', (done) => {
211
260
  reconnectionManager.iceState.timeoutDuration = 100;
212
261
 
213
- return assert.isRejected(reconnectionManager.waitForIceReconnect());
262
+ assert.isRejected(reconnectionManager.waitForIceReconnect());
263
+ done();
214
264
  });
215
265
 
216
266
  it('should resolve return a resolved promise when triggered', () => {