@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
@@ -12,13 +12,14 @@ describe('Peerconnection Manager', () => {
12
12
  let sdp = null;
13
13
 
14
14
  beforeEach(() => {
15
- sdp = 'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 47974 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 41234 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 41619 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 47098 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 37670 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 37790 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
15
+ sdp =
16
+ 'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 47974 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 41234 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 41619 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 47098 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:602151403 1 udp 2122262783 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 37670 typ host generation 0 network-id 2 network-cost 900\r\na=candidate:675071982 1 udp 2122197247 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 37790 typ host generation 0 network-id 3 network-cost 900\r\na=candidate:1835525403 1 tcp 1518283007 2401:4900:2301:c2cb:5ea9:46d5:7321:2531 9 typ host tcptype active generation 0 network-id 2 network-cost 900\r\na=candidate:1723808542 1 tcp 1518217471 2401:4900:33fc:314c:ad57:3e1d:befe:34b7 9 typ host tcptype active generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
16
17
 
17
18
  peerConnection = {
18
19
  iceGatheringState: 'new',
19
20
  onicecandidate: null,
20
21
  onicecandidateerror: null,
21
- localDescription: {sdp}
22
+ localDescription: {sdp},
22
23
  };
23
24
 
24
25
  Object.defineProperty(global.window, 'RTCSessionDescription', {
@@ -28,7 +29,7 @@ describe('Peerconnection Manager', () => {
28
29
  this.type = options.type;
29
30
  this.sdp = options.sdp;
30
31
  }
31
- }
32
+ },
32
33
  });
33
34
  });
34
35
  describe('setRemoteSessionDetails', () => {
@@ -40,25 +41,32 @@ describe('Peerconnection Manager', () => {
40
41
 
41
42
  return Promise.resolve();
42
43
  });
43
- const remoteSdp = 'v=0\r\n' +
44
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
45
- 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
46
- 'a=rtpmap:127 H264/90000\r\n' +
47
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
48
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
49
-
50
- const resultSdp = 'v=0\r\n' +
51
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
52
- 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n' +
53
- 'a=rtpmap:127 H264/90000\r\r\n' +
54
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n';
44
+ const remoteSdp =
45
+ 'v=0\r\n' +
46
+ 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
47
+ 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
48
+ 'a=rtpmap:127 H264/90000\r\n' +
49
+ 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
50
+ 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
51
+
52
+ const resultSdp =
53
+ 'v=0\r\n' +
54
+ 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
55
+ 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n' +
56
+ 'a=rtpmap:127 H264/90000\r\r\n' +
57
+ 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1;x-google-start-bitrate=2000\r\n';
55
58
  const peerConnection = {
56
59
  signalingState: 'have-local-offer',
57
60
  setRemoteDescription,
58
- enableExtmap: false
61
+ enableExtmap: false,
59
62
  };
60
63
 
61
- await PeerConnectionManager.setRemoteSessionDetails(peerConnection, 'answer', remoteSdp, {});
64
+ await PeerConnectionManager.setRemoteSessionDetails(
65
+ peerConnection,
66
+ 'answer',
67
+ remoteSdp,
68
+ {}
69
+ );
62
70
 
63
71
  assert.equal(result.sdp, resultSdp);
64
72
  });
@@ -71,18 +79,24 @@ describe('Peerconnection Manager', () => {
71
79
 
72
80
  return Promise.resolve();
73
81
  });
74
- const remoteSdp = 'v=0\r\n' +
75
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
76
- 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
77
- 'a=rtpmap:127 H264/90000\r\n' +
78
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
82
+ const remoteSdp =
83
+ 'v=0\r\n' +
84
+ 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
85
+ 'a=fmtp:102 profile-level-id=42e016;packetization-mode=1;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n' +
86
+ 'a=rtpmap:127 H264/90000\r\n' +
87
+ 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
79
88
 
80
89
  const peerConnection = {
81
90
  signalingState: 'have-local-offer',
82
- setRemoteDescription
91
+ setRemoteDescription,
83
92
  };
84
93
 
85
- await PeerConnectionManager.setRemoteSessionDetails(peerConnection, 'answer', remoteSdp, {});
94
+ await PeerConnectionManager.setRemoteSessionDetails(
95
+ peerConnection,
96
+ 'answer',
97
+ remoteSdp,
98
+ {}
99
+ );
86
100
 
87
101
  assert.equal(result.sdp, remoteSdp);
88
102
  });
@@ -90,40 +104,50 @@ describe('Peerconnection Manager', () => {
90
104
  it('removes xTLS candidates from the remote sdp', async () => {
91
105
  StaticConfig.set({bandwidth: {}});
92
106
 
93
- const remoteSdpWithXtlsCandidates = 'v=0\r\n' +
94
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
95
- 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
96
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
97
- 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
98
- 'a=candidate:4 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
99
- 'a=rtpmap:127 H264/90000\r\n' +
100
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
101
- 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
102
- 'a=candidate:1 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
103
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
104
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
107
+ const remoteSdpWithXtlsCandidates =
108
+ 'v=0\r\n' +
109
+ 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
110
+ 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
111
+ 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
112
+ 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
113
+ 'a=candidate:4 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
114
+ 'a=rtpmap:127 H264/90000\r\n' +
115
+ 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
116
+ 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
117
+ 'a=candidate:1 1 xTLS 1795162111 external-media2.aintm-a-6.int.infra.webex.com 443 typ host tcptype passive fingerprint sha-1;55:B8:1D:94:BC:9D:B2:A5:5E:82:E7:84:C6:C8:10:AC:D3:FD:96:26\r\n' +
118
+ 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
119
+ 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
105
120
 
106
121
  // same as remoteSdpWithXtlsCandidates but without the xtls candidates
107
- const resultSdp = 'v=0\r\n' +
108
- 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
109
- 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
110
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
111
- 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
112
- 'a=rtpmap:127 H264/90000\r\n' +
113
- 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
114
- 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
115
- 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
116
- 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
122
+ const resultSdp =
123
+ 'v=0\r\n' +
124
+ 'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
125
+ 'a=candidate:1 1 UDP 2130706175 18.206.82.54 9000 typ host\r\n' +
126
+ 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
127
+ 'a=candidate:3 1 TCP 1962934015 18.206.82.54 9000 typ host tcptype passive\r\n' +
128
+ 'a=rtpmap:127 H264/90000\r\n' +
129
+ 'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
130
+ 'm=video 9000 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
131
+ 'a=candidate:2 1 TCP 1962934271 18.206.82.54 5004 typ host tcptype passive\r\n' +
132
+ 'a=fmtp:127 profile-level-id=42e016;max-mbps=244800;max-fs=8160;max-fps=3000;max-dpb=12240;max-rcmd-nalu-size=196608;level-asymmetry-allowed=1\r\n';
117
133
 
118
134
  const peerConnection = {
119
135
  signalingState: 'have-local-offer',
120
136
  setRemoteDescription: sinon.stub().resolves(),
121
- enableExtmap: true
137
+ enableExtmap: true,
122
138
  };
123
139
 
124
- await PeerConnectionManager.setRemoteSessionDetails(peerConnection, 'answer', remoteSdpWithXtlsCandidates, '');
125
-
126
- assert.calledWith(peerConnection.setRemoteDescription, new global.window.RTCSessionDescription({sdp: resultSdp, type: 'answer'}));
140
+ await PeerConnectionManager.setRemoteSessionDetails(
141
+ peerConnection,
142
+ 'answer',
143
+ remoteSdpWithXtlsCandidates,
144
+ ''
145
+ );
146
+
147
+ assert.calledWith(
148
+ peerConnection.setRemoteDescription,
149
+ new global.window.RTCSessionDescription({sdp: resultSdp, type: 'answer'})
150
+ );
127
151
  });
128
152
  });
129
153
 
@@ -157,10 +181,11 @@ describe('Peerconnection Manager', () => {
157
181
  peerConnection.iceGatheringState = 'complete';
158
182
  peerConnection.onIceGatheringStateChange();
159
183
  }, 1000);
160
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'})
161
- .then(() => {
184
+ await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}).then(
185
+ () => {
162
186
  assert(peerConnection.sdp.search('max-fs:8192'), true);
163
- });
187
+ }
188
+ );
164
189
  });
165
190
 
166
191
  it('should still generate sdp even if onicecandidateerror is called ', async () => {
@@ -169,19 +194,24 @@ describe('Peerconnection Manager', () => {
169
194
  peerConnection.onicecandidateerror();
170
195
  peerConnection.onicecandidate({candidate: null});
171
196
  }, 1000);
172
- await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'})
173
- .then(() => {
197
+ await PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}).then(
198
+ () => {
174
199
  assert(peerConnection.sdp.search('max-fs:8192'), true);
175
- });
200
+ }
201
+ );
176
202
  });
177
203
 
178
204
  it('should throw generated SDP does not have candidates ', async () => {
179
205
  peerConnection.iceGatheringState = 'none';
180
- peerConnection.localDescription.sdp = 'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
206
+ peerConnection.localDescription.sdp =
207
+ 'v=0\r\no=- 1026633665396855335 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1 2\r\nr\na=msid-semantic: WMS\r\nm=audio 40903 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\nb=TIAS:64000\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\nm=video 43875 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\nm=video 49298 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 122 121 127\r\nb=TIAS:4000000\r\nc=IN IP4 0.0.0.0\r\na=periodic-keyframes:20\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:zK3G\r\na=ice-pwd:e9xgQIGnRsJvaFpvTAenr5JQ\r\na=ice-options:trickle\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f;\r\na=content:slides\r\n';
181
208
  setTimeout(() => {
182
209
  peerConnection.onicecandidate({candidate: null});
183
210
  }, 1000);
184
- await assert.isRejected(PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}), InvalidSdpError);
211
+ await assert.isRejected(
212
+ PeerConnectionManager.iceCandidate(peerConnection, {remoteQualityLevel: 'HIGH'}),
213
+ InvalidSdpError
214
+ );
185
215
  });
186
216
  });
187
217
  });
@@ -4,23 +4,24 @@ import PeerConnectionUtils from '@webex/plugin-meetings/src/peer-connection-mana
4
4
  import {
5
5
  SDP_MULTIPLE_VIDEO_CODECS,
6
6
  SDP_MULTIPLE_VIDEO_CODECS_WITH_LOWERED_H264_PROFILE_LEVEL,
7
- SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS
7
+ SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS,
8
8
  } from './utils.test-fixtures';
9
9
 
10
10
  describe('Peerconnection Manager', () => {
11
11
  describe('Utils', () => {
12
12
  describe('convertCLineToIpv4', () => {
13
13
  it('changes ipv6 to ipv4 default', () => {
14
- const localSdp = 'v=0\r\n' +
14
+ const localSdp =
15
+ 'v=0\r\n' +
15
16
  'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
16
17
  'c=IN IP6 2607:fb90:d27c:b314:211a:32dd:c47f:ffe\r\n' +
17
18
  'a=rtpmap:127 H264/90000\r\n';
18
- const resultSdp = 'v=0\r\n' +
19
+ const resultSdp =
20
+ 'v=0\r\n' +
19
21
  'm=video 5004 UDP/TLS/RTP/SAVPF 102 127 97 99\r\n' +
20
22
  'c=IN IP4 0.0.0.0\r\n' +
21
23
  'a=rtpmap:127 H264/90000\r\n';
22
24
 
23
-
24
25
  const temp = PeerConnectionUtils.convertCLineToIpv4(localSdp);
25
26
 
26
27
  assert.equal(temp, resultSdp);
@@ -2,16 +2,16 @@
2
2
  // here we're using tagged template literals to ensures that our SDP fixtures also have CRLF endings
3
3
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
4
  const ensureCRLF = (strings: any, ...tags: string[]) => {
5
- const stringsWithCRLF = strings.raw.map((str: string) => str.replace(/\n/g, '\r\n'));
5
+ const stringsWithCRLF = strings.raw.map((str: string) => str.replace(/\n/g, '\r\n'));
6
6
 
7
- // now construct the output the same way as it's done by default for template literals
8
- let output = stringsWithCRLF[0];
7
+ // now construct the output the same way as it's done by default for template literals
8
+ let output = stringsWithCRLF[0];
9
9
 
10
- tags.forEach((tag, index) => {
11
- output += tag + stringsWithCRLF[index + 1];
12
- });
10
+ tags.forEach((tag, index) => {
11
+ output += tag + stringsWithCRLF[index + 1];
12
+ });
13
13
 
14
- return output;
14
+ return output;
15
15
  };
16
16
 
17
17
  // example SDP that has an audio and 2 video m-lines, video contains multiple codecs
@@ -263,7 +263,6 @@ a=rtcp-rsize
263
263
  a=rtcp:9 IN IP4 0.0.0.0
264
264
  `;
265
265
 
266
-
267
266
  // same as SDP_MULTIPLE_VIDEO_CODECS, but has max-fs appended to all H264 fmtp lines
268
267
  export const SDP_MULTIPLE_VIDEO_CODECS_WITH_MAX_FS = ensureCRLF`v=0
269
268
  o=- 3328550572590672467 2 IN IP4 127.0.0.1
@@ -5,9 +5,7 @@
5
5
  import 'jsdom-global/register';
6
6
  import {assert} from '@webex/test-helper-chai';
7
7
  import sinon from 'sinon';
8
- import {
9
- _PERSONAL_ROOM_
10
- } from '@webex/plugin-meetings/src/constants';
8
+ import {_PERSONAL_ROOM_} from '@webex/plugin-meetings/src/constants';
11
9
  import PersonalMeetingRoom from '@webex/plugin-meetings/src/personal-meeting-room';
12
10
 
13
11
  describe('personal-meeting-room', () => {
@@ -16,14 +14,11 @@ describe('personal-meeting-room', () => {
16
14
 
17
15
  beforeEach(() => {
18
16
  meetingInfo = {
19
- fetchMeetingInfo: sinon.stub().returns(Promise.resolve(
20
- {body: {isPmr: true}}
21
- ))
17
+ fetchMeetingInfo: sinon.stub().returns(Promise.resolve({body: {isPmr: true}})),
22
18
  };
23
19
  pmr = new PersonalMeetingRoom({meetingInfo}, {parent: {}});
24
20
  });
25
21
 
26
-
27
22
  describe('#get()', () => {
28
23
  it('returns personal meeting room info', async () => {
29
24
  await pmr.get();
@@ -10,43 +10,41 @@ describe('isAnyClusterReachable', () => {
10
10
  });
11
11
 
12
12
  afterEach(() => {
13
- window.localStorage.clear()
13
+ window.localStorage.clear();
14
14
  });
15
15
 
16
16
  const checkIsClusterReachable = (mockStorage: any, expectedValue: boolean) => {
17
-
18
17
  if (mockStorage) {
19
- window.localStorage.setItem('reachability.result', JSON.stringify(mockStorage))
18
+ window.localStorage.setItem('reachability.result', JSON.stringify(mockStorage));
20
19
  }
21
20
  const reachability = new Reachability({});
22
21
 
23
22
  const result = reachability.isAnyClusterReachable();
24
23
 
25
24
  assert.equal(result, expectedValue);
26
-
27
- }
25
+ };
28
26
 
29
27
  it('returns true when udp is reachable', () => {
30
- checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'false'}}}, true)
28
+ checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'false'}}}, true);
31
29
  });
32
30
 
33
31
  it('returns true when tcp is reachable', () => {
34
- checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'true'}}}, true)
32
+ checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'true'}}}, true);
35
33
  });
36
34
 
37
35
  it('returns true when both tcp and udp are reachable', () => {
38
- checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'true'}}}, true)
36
+ checkIsClusterReachable({x: {udp: {reachable: 'true'}, tcp: {reachable: 'true'}}}, true);
39
37
  });
40
38
 
41
39
  it('returns false when both tcp and udp are unreachable', () => {
42
- checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'false'}}}, false)
40
+ checkIsClusterReachable({x: {udp: {reachable: 'false'}, tcp: {reachable: 'false'}}}, false);
43
41
  });
44
42
 
45
43
  it('returns false when reachability result is empty', () => {
46
- checkIsClusterReachable({x: {}}, false)
44
+ checkIsClusterReachable({x: {}}, false);
47
45
  });
48
46
 
49
47
  it('returns false when reachability.result item is not there', () => {
50
- checkIsClusterReachable(undefined, false)
48
+ checkIsClusterReachable(undefined, false);
51
49
  });
52
50
  });
@@ -11,7 +11,6 @@ const {assert} = chai;
11
11
  chai.use(chaiAsPromised);
12
12
  sinon.assert.expose(chai.assert, {prefix: ''});
13
13
 
14
-
15
14
  describe('plugin-meetings', () => {
16
15
  describe('ReconnectionManager.reconnectMedia', () => {
17
16
  it('uses correct TURN TLS information on reInitiatePeerconnection', async () => {
@@ -26,10 +25,10 @@ describe('plugin-meetings', () => {
26
25
  times: 2,
27
26
  backOff: {
28
27
  start: 1000,
29
- rate: 2
30
- }
31
- }
32
- }
28
+ rate: 2,
29
+ },
30
+ },
31
+ },
33
32
  },
34
33
  mediaProperties: {
35
34
  unsetPeerConnection: sinon.stub(),
@@ -43,7 +42,7 @@ describe('plugin-meetings', () => {
43
42
  username: 'fake_turn_username',
44
43
  password: 'fake_turn_password',
45
44
  },
46
- turnDiscoverySkippedReason: undefined
45
+ turnDiscoverySkippedReason: undefined,
47
46
  }),
48
47
  sendRoapMediaRequest: sinon.stub().resolves({}),
49
48
  },
@@ -53,9 +52,9 @@ describe('plugin-meetings', () => {
53
52
  webex: {
54
53
  meetings: {
55
54
  getMeetingByType: sinon.stub().returns(true),
56
- syncMeetings: sinon.stub().resolves({})
57
- }
58
- }
55
+ syncMeetings: sinon.stub().resolves({}),
56
+ },
57
+ },
59
58
  };
60
59
 
61
60
  Media.attachMedia = sinon.stub().resolves({});
@@ -63,7 +62,6 @@ describe('plugin-meetings', () => {
63
62
 
64
63
  rm.iceState.disconnected = true;
65
64
 
66
-
67
65
  await rm.reconnectMedia();
68
66
 
69
67
  assert.calledOnce(fakeMeeting.roap.doTurnDiscovery);
@@ -94,11 +92,11 @@ describe('plugin-meetings', () => {
94
92
  times: 2,
95
93
  backOff: {
96
94
  start: 1000,
97
- rate: 2
98
- }
99
- }
100
- }
101
- }
95
+ rate: 2,
96
+ },
97
+ },
98
+ },
99
+ },
102
100
  });
103
101
  });
104
102
 
@@ -117,8 +115,7 @@ describe('plugin-meetings', () => {
117
115
  });
118
116
 
119
117
  it('should resolve the deferred promise', () => {
120
- reconnectionManager.iceState.resolve =
121
- sinon.spy();
118
+ reconnectionManager.iceState.resolve = sinon.spy();
122
119
  const {resolve} = reconnectionManager.iceState;
123
120
 
124
121
  reconnectionManager.iceReconnected();
@@ -13,7 +13,9 @@ describe('Roap', () => {
13
13
  const RESULT = {something: 'some value'};
14
14
  const meeting = {id: 'some meeting id'};
15
15
 
16
- const doTurnDiscoveryStub = sinon.stub(TurnDiscovery.prototype, 'doTurnDiscovery').resolves(RESULT);
16
+ const doTurnDiscoveryStub = sinon
17
+ .stub(TurnDiscovery.prototype, 'doTurnDiscovery')
18
+ .resolves(RESULT);
17
19
 
18
20
  const roap = new Roap({}, {parent: 'fake'});
19
21
 
@@ -66,13 +68,20 @@ describe('Roap', () => {
66
68
  {reconnect: false, enableTurnDiscovery: true, expectEmptyMediaId: false},
67
69
  {reconnect: false, enableTurnDiscovery: false, expectEmptyMediaId: false},
68
70
  ].forEach(({reconnect, enableTurnDiscovery, expectEmptyMediaId}) =>
69
- it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${reconnect ? '' : 'not '}reconnecting and TURN discovery is ${enableTurnDiscovery ? 'enabled' : 'disabled'}`, async () => {
71
+ it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
72
+ reconnect ? '' : 'not '
73
+ }reconnecting and TURN discovery is ${
74
+ enableTurnDiscovery ? 'enabled' : 'disabled'
75
+ }`, async () => {
70
76
  meeting.config.experimental.enableTurnDiscovery = enableTurnDiscovery;
71
77
 
72
78
  const roap = new Roap({}, {parent: 'fake'});
73
79
 
74
80
  await roap.sendRoapMediaRequest({
75
- meeting, sdp: 'sdp', reconnect, roapSeq: 1
81
+ meeting,
82
+ sdp: 'sdp',
83
+ reconnect,
84
+ roapSeq: 1,
76
85
  });
77
86
 
78
87
  const expectedRoapMessage = {
@@ -80,7 +89,7 @@ describe('Roap', () => {
80
89
  sdps: ['sdp'],
81
90
  version: '2',
82
91
  seq: 2,
83
- tieBreaker: 4294967294
92
+ tieBreaker: 4294967294,
84
93
  };
85
94
 
86
95
  assert.calledOnce(sendRoapStub);
@@ -91,23 +100,24 @@ describe('Roap', () => {
91
100
  mediaId: expectEmptyMediaId ? '' : meeting.mediaId,
92
101
  audioMuted: meeting.isAudioMuted(),
93
102
  videoMuted: meeting.isVideoMuted(),
94
- meetingId: meeting.id
103
+ meetingId: meeting.id,
95
104
  });
96
105
 
97
106
  assert.calledTwice(roapHandlerSubmitStub);
98
107
  assert.calledWith(roapHandlerSubmitStub, {
99
108
  type: ROAP.SEND_ROAP_MSG,
100
109
  msg: expectedRoapMessage,
101
- correlationId: meeting.correlationId
110
+ correlationId: meeting.correlationId,
102
111
  });
103
112
  assert.calledWith(roapHandlerSubmitStub, {
104
113
  type: ROAP.SEND_ROAP_MSG_SUCCESS,
105
114
  seq: 2,
106
- correlationId: meeting.correlationId
115
+ correlationId: meeting.correlationId,
107
116
  });
108
117
 
109
118
  assert.calledOnce(meeting.setRoapSeq);
110
119
  assert.calledWith(meeting.setRoapSeq, 2);
111
- }));
120
+ })
121
+ );
112
122
  });
113
123
  });