@webex/plugin-meetings 3.8.0-next.7 → 3.8.0-next.70

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 (166) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/common/errors/webex-errors.js +12 -2
  4. package/dist/common/errors/webex-errors.js.map +1 -1
  5. package/dist/config.js +4 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.js +17 -121
  8. package/dist/constants.js.map +1 -1
  9. package/dist/controls-options-manager/enums.js +2 -0
  10. package/dist/controls-options-manager/enums.js.map +1 -1
  11. package/dist/controls-options-manager/types.js.map +1 -1
  12. package/dist/controls-options-manager/util.js +52 -0
  13. package/dist/controls-options-manager/util.js.map +1 -1
  14. package/dist/interpretation/index.js +1 -1
  15. package/dist/interpretation/siLanguage.js +1 -1
  16. package/dist/locus-info/controlsUtils.js +28 -10
  17. package/dist/locus-info/controlsUtils.js.map +1 -1
  18. package/dist/locus-info/index.js +20 -1
  19. package/dist/locus-info/index.js.map +1 -1
  20. package/dist/locus-info/selfUtils.js +405 -418
  21. package/dist/locus-info/selfUtils.js.map +1 -1
  22. package/dist/media/index.js +14 -16
  23. package/dist/media/index.js.map +1 -1
  24. package/dist/media/properties.js +94 -6
  25. package/dist/media/properties.js.map +1 -1
  26. package/dist/meeting/brbState.js +6 -0
  27. package/dist/meeting/brbState.js.map +1 -1
  28. package/dist/meeting/in-meeting-actions.js +17 -1
  29. package/dist/meeting/in-meeting-actions.js.map +1 -1
  30. package/dist/meeting/index.js +541 -302
  31. package/dist/meeting/index.js.map +1 -1
  32. package/dist/meeting/locusMediaRequest.js +0 -17
  33. package/dist/meeting/locusMediaRequest.js.map +1 -1
  34. package/dist/meeting/muteState.js +0 -2
  35. package/dist/meeting/muteState.js.map +1 -1
  36. package/dist/meeting/request.js +30 -0
  37. package/dist/meeting/request.js.map +1 -1
  38. package/dist/meeting/request.type.js.map +1 -1
  39. package/dist/meeting/util.js +13 -2
  40. package/dist/meeting/util.js.map +1 -1
  41. package/dist/meeting-info/meeting-info-v2.js +359 -60
  42. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  43. package/dist/meetings/index.js +114 -1
  44. package/dist/meetings/index.js.map +1 -1
  45. package/dist/meetings/util.js +14 -0
  46. package/dist/meetings/util.js.map +1 -1
  47. package/dist/member/index.js +10 -0
  48. package/dist/member/index.js.map +1 -1
  49. package/dist/member/util.js +330 -353
  50. package/dist/member/util.js.map +1 -1
  51. package/dist/members/index.js +23 -0
  52. package/dist/members/index.js.map +1 -1
  53. package/dist/members/request.js +21 -0
  54. package/dist/members/request.js.map +1 -1
  55. package/dist/members/util.js +15 -0
  56. package/dist/members/util.js.map +1 -1
  57. package/dist/metrics/constants.js +9 -0
  58. package/dist/metrics/constants.js.map +1 -1
  59. package/dist/reachability/clusterReachability.js +63 -27
  60. package/dist/reachability/clusterReachability.js.map +1 -1
  61. package/dist/reachability/index.js +112 -47
  62. package/dist/reachability/index.js.map +1 -1
  63. package/dist/reachability/reachability.types.js +14 -0
  64. package/dist/reachability/reachability.types.js.map +1 -1
  65. package/dist/reachability/request.js +19 -3
  66. package/dist/reachability/request.js.map +1 -1
  67. package/dist/reconnection-manager/index.js +2 -2
  68. package/dist/reconnection-manager/index.js.map +1 -1
  69. package/dist/recording-controller/util.js +5 -5
  70. package/dist/recording-controller/util.js.map +1 -1
  71. package/dist/roap/index.js.map +1 -1
  72. package/dist/roap/turnDiscovery.js +45 -27
  73. package/dist/roap/turnDiscovery.js.map +1 -1
  74. package/dist/roap/types.js +17 -0
  75. package/dist/roap/types.js.map +1 -0
  76. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  77. package/dist/types/config.d.ts +2 -0
  78. package/dist/types/constants.d.ts +12 -85
  79. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  80. package/dist/types/controls-options-manager/types.d.ts +7 -1
  81. package/dist/types/locus-info/index.d.ts +1 -0
  82. package/dist/types/locus-info/selfUtils.d.ts +247 -1
  83. package/dist/types/media/properties.d.ts +15 -0
  84. package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
  85. package/dist/types/meeting/index.d.ts +32 -1
  86. package/dist/types/meeting/muteState.d.ts +0 -1
  87. package/dist/types/meeting/request.d.ts +12 -1
  88. package/dist/types/meeting/request.type.d.ts +6 -0
  89. package/dist/types/meeting/util.d.ts +3 -1
  90. package/dist/types/meeting-info/meeting-info-v2.d.ts +80 -0
  91. package/dist/types/meetings/index.d.ts +48 -0
  92. package/dist/types/member/index.d.ts +1 -0
  93. package/dist/types/member/util.d.ts +159 -1
  94. package/dist/types/members/index.d.ts +8 -0
  95. package/dist/types/members/request.d.ts +19 -0
  96. package/dist/types/members/util.d.ts +13 -0
  97. package/dist/types/metrics/constants.d.ts +9 -0
  98. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  99. package/dist/types/reachability/index.d.ts +10 -1
  100. package/dist/types/reachability/reachability.types.d.ts +5 -0
  101. package/dist/types/roap/index.d.ts +3 -2
  102. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  103. package/dist/types/roap/types.d.ts +16 -0
  104. package/dist/webinar/index.js +1 -1
  105. package/package.json +24 -23
  106. package/src/common/errors/webex-errors.ts +8 -1
  107. package/src/config.ts +2 -0
  108. package/src/constants.ts +19 -90
  109. package/src/controls-options-manager/enums.ts +2 -0
  110. package/src/controls-options-manager/types.ts +11 -1
  111. package/src/controls-options-manager/util.ts +62 -0
  112. package/src/locus-info/controlsUtils.ts +44 -14
  113. package/src/locus-info/index.ts +23 -1
  114. package/src/locus-info/selfUtils.ts +451 -447
  115. package/src/media/index.ts +20 -21
  116. package/src/media/properties.ts +96 -0
  117. package/src/meeting/brbState.ts +7 -0
  118. package/src/meeting/in-meeting-actions.ts +32 -0
  119. package/src/meeting/index.ts +346 -93
  120. package/src/meeting/locusMediaRequest.ts +0 -18
  121. package/src/meeting/muteState.ts +0 -2
  122. package/src/meeting/request.ts +36 -1
  123. package/src/meeting/request.type.ts +7 -0
  124. package/src/meeting/util.ts +11 -2
  125. package/src/meeting-info/meeting-info-v2.ts +247 -6
  126. package/src/meetings/index.ts +128 -1
  127. package/src/meetings/util.ts +18 -0
  128. package/src/member/index.ts +13 -2
  129. package/src/member/util.ts +351 -348
  130. package/src/members/index.ts +25 -0
  131. package/src/members/request.ts +26 -0
  132. package/src/members/util.ts +16 -0
  133. package/src/metrics/constants.ts +9 -0
  134. package/src/reachability/clusterReachability.ts +73 -26
  135. package/src/reachability/index.ts +70 -1
  136. package/src/reachability/reachability.types.ts +6 -0
  137. package/src/reachability/request.ts +7 -0
  138. package/src/reconnection-manager/index.ts +2 -2
  139. package/src/recording-controller/util.ts +17 -13
  140. package/src/roap/index.ts +3 -7
  141. package/src/roap/turnDiscovery.ts +34 -39
  142. package/src/roap/types.ts +23 -0
  143. package/test/unit/spec/controls-options-manager/util.js +120 -0
  144. package/test/unit/spec/locus-info/controlsUtils.js +103 -9
  145. package/test/unit/spec/locus-info/index.js +28 -0
  146. package/test/unit/spec/media/index.ts +98 -16
  147. package/test/unit/spec/media/properties.ts +130 -0
  148. package/test/unit/spec/meeting/brbState.ts +19 -0
  149. package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
  150. package/test/unit/spec/meeting/index.js +524 -35
  151. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
  152. package/test/unit/spec/meeting/muteState.js +0 -2
  153. package/test/unit/spec/meeting/request.js +32 -1
  154. package/test/unit/spec/meeting/utils.js +119 -18
  155. package/test/unit/spec/meeting-info/meetinginfov2.js +443 -114
  156. package/test/unit/spec/meetings/index.js +133 -2
  157. package/test/unit/spec/member/index.js +7 -0
  158. package/test/unit/spec/member/util.js +24 -0
  159. package/test/unit/spec/members/index.js +103 -26
  160. package/test/unit/spec/members/request.js +45 -22
  161. package/test/unit/spec/members/utils.js +33 -0
  162. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  163. package/test/unit/spec/reachability/index.ts +101 -0
  164. package/test/unit/spec/reachability/request.js +47 -2
  165. package/test/unit/spec/reconnection-manager/index.js +4 -4
  166. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -15,7 +15,8 @@ describe('TurnDiscovery', () => {
15
15
  let mockRoapRequest: RoapRequest;
16
16
  let testMeeting: any;
17
17
 
18
- const FAKE_TURN_URL = 'turns:fakeTurnServer.com:443?transport=tcp';
18
+ const FAKE_TURN_URL1 = 'turns:fakeTurnServer1.com:443?transport=tcp';
19
+ const FAKE_TURN_URL2 = 'turns:fakeTurnServer2.com:443?transport=tcp';
19
20
  const FAKE_TURN_USERNAME = 'someUsernameFromServer';
20
21
  const FAKE_TURN_PASSWORD = 'fakePasswordFromServer';
21
22
  const FAKE_LOCUS_ID = '09493311-f5d5-3e58-b491-009cc628162e';
@@ -186,7 +187,8 @@ describe('TurnDiscovery', () => {
186
187
  {
187
188
  messageType: 'TURN_DISCOVERY_RESPONSE',
188
189
  headers: [
189
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
190
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
191
+ `x-cisco-turn-url=${FAKE_TURN_URL2}`,
190
192
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
191
193
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
192
194
  ],
@@ -195,7 +197,7 @@ describe('TurnDiscovery', () => {
195
197
  );
196
198
 
197
199
  await checkResult(result, 'OK', {
198
- url: FAKE_TURN_URL,
200
+ urls: [FAKE_TURN_URL1, FAKE_TURN_URL2],
199
201
  username: FAKE_TURN_USERNAME,
200
202
  password: FAKE_TURN_PASSWORD,
201
203
  });
@@ -220,7 +222,7 @@ describe('TurnDiscovery', () => {
220
222
  {
221
223
  messageType: 'TURN_DISCOVERY_RESPONSE',
222
224
  headers: [
223
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
225
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
224
226
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
225
227
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
226
228
  'noOkInTransaction',
@@ -230,7 +232,7 @@ describe('TurnDiscovery', () => {
230
232
  );
231
233
 
232
234
  await checkResult(result, undefined, {
233
- url: FAKE_TURN_URL,
235
+ urls: [FAKE_TURN_URL1],
234
236
  username: FAKE_TURN_USERNAME,
235
237
  password: FAKE_TURN_PASSWORD,
236
238
  });
@@ -241,7 +243,7 @@ describe('TurnDiscovery', () => {
241
243
  mediaConnections: [
242
244
  {
243
245
  mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
244
- remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}", "noOkInTransaction"]}}`,
246
+ remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL1}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}", "noOkInTransaction"]}}`,
245
247
  },
246
248
  ],
247
249
  });
@@ -256,7 +258,7 @@ describe('TurnDiscovery', () => {
256
258
  mockRoapRequest.sendRoap.resetHistory();
257
259
 
258
260
  await checkResult(result, undefined, {
259
- url: FAKE_TURN_URL,
261
+ urls: [FAKE_TURN_URL1],
260
262
  username: FAKE_TURN_USERNAME,
261
263
  password: FAKE_TURN_PASSWORD,
262
264
  });
@@ -268,7 +270,7 @@ describe('TurnDiscovery', () => {
268
270
  mediaConnections: [
269
271
  {
270
272
  mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
271
- remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}"]}}`,
273
+ remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL1}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}"]}}`,
272
274
  },
273
275
  ],
274
276
  };
@@ -290,7 +292,7 @@ describe('TurnDiscovery', () => {
290
292
  sendRoapPromiseResolve(sendRoapResult);
291
293
 
292
294
  await checkResult(result, 'OK', {
293
- url: FAKE_TURN_URL,
295
+ urls: [FAKE_TURN_URL1],
294
296
  username: FAKE_TURN_USERNAME,
295
297
  password: FAKE_TURN_PASSWORD,
296
298
  });
@@ -350,16 +352,17 @@ describe('TurnDiscovery', () => {
350
352
  {
351
353
  messageType: 'TURN_DISCOVERY_RESPONSE',
352
354
  headers: [
353
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
355
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
354
356
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
355
357
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
358
+ `x-cisco-turn-url=${FAKE_TURN_URL2}`,
356
359
  ],
357
360
  },
358
361
  'from test'
359
362
  );
360
363
 
361
364
  await checkResult(result, 'OK', {
362
- url: FAKE_TURN_URL,
365
+ urls: [FAKE_TURN_URL1, FAKE_TURN_URL2],
363
366
  username: FAKE_TURN_USERNAME,
364
367
  password: FAKE_TURN_PASSWORD,
365
368
  });
@@ -391,6 +394,44 @@ describe('TurnDiscovery', () => {
391
394
  'failure: TURN_DISCOVERY_RESPONSE in http response has unexpected messageType: {"seq":"0","messageType":"ERROR"}'
392
395
  );
393
396
  });
397
+
398
+ it('resets turnInfo each time TURN discovery is done', async () => {
399
+ const runCheck = async (td, turnUrl, expectedResult) => {
400
+ mockRoapRequest.sendRoap = sinon.fake.resolves({
401
+ mediaConnections: [
402
+ {
403
+ mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
404
+ remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${turnUrl}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}", "noOkInTransaction"]}}`,
405
+ },
406
+ ],
407
+ });
408
+
409
+ const result = td.doTurnDiscovery(testMeeting, false);
410
+
411
+ // check that TURN_DISCOVERY_REQUEST was sent
412
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
413
+
414
+ // @ts-ignore
415
+ mockRoapRequest.sendRoap.resetHistory();
416
+
417
+ await checkResult(result, undefined, expectedResult);
418
+ };
419
+
420
+ const td = new TurnDiscovery(mockRoapRequest);
421
+
422
+ await runCheck(td, FAKE_TURN_URL1, {
423
+ urls: [FAKE_TURN_URL1],
424
+ username: FAKE_TURN_USERNAME,
425
+ password: FAKE_TURN_PASSWORD,
426
+ });
427
+
428
+ // call it again with different turn url, the result should not have the previous url
429
+ await runCheck(td, FAKE_TURN_URL2, {
430
+ urls: [FAKE_TURN_URL2],
431
+ username: FAKE_TURN_USERNAME,
432
+ password: FAKE_TURN_PASSWORD,
433
+ });
434
+ });
394
435
  });
395
436
  });
396
437
 
@@ -415,7 +456,7 @@ describe('TurnDiscovery', () => {
415
456
  {
416
457
  messageType: 'TURN_DISCOVERY_RESPONSE',
417
458
  headers: [
418
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
459
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
419
460
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
420
461
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
421
462
  ],
@@ -428,7 +469,7 @@ describe('TurnDiscovery', () => {
428
469
 
429
470
  const {turnServerInfo, turnDiscoverySkippedReason} = await result;
430
471
  assert.deepEqual(turnServerInfo, {
431
- url: FAKE_TURN_URL,
472
+ urls: [FAKE_TURN_URL1],
432
473
  username: FAKE_TURN_USERNAME,
433
474
  password: FAKE_TURN_PASSWORD,
434
475
  });
@@ -455,7 +496,7 @@ describe('TurnDiscovery', () => {
455
496
  {
456
497
  messageType: 'TURN_DISCOVERY_RESPONSE',
457
498
  headers: [
458
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
499
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
459
500
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
460
501
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
461
502
  ],
@@ -471,7 +512,7 @@ describe('TurnDiscovery', () => {
471
512
  const {turnServerInfo, turnDiscoverySkippedReason} = await result;
472
513
 
473
514
  assert.deepEqual(turnServerInfo, {
474
- url: FAKE_TURN_URL,
515
+ urls: [FAKE_TURN_URL1],
475
516
  username: FAKE_TURN_USERNAME,
476
517
  password: FAKE_TURN_PASSWORD,
477
518
  });
@@ -493,7 +534,7 @@ describe('TurnDiscovery', () => {
493
534
  messageType: 'TURN_DISCOVERY_RESPONSE',
494
535
  headers: [
495
536
  'x-cisco-turn-unexpected-header=xxx',
496
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
537
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
497
538
  'x-cisco-some-other-header',
498
539
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
499
540
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
@@ -510,7 +551,47 @@ describe('TurnDiscovery', () => {
510
551
 
511
552
  const {turnServerInfo, turnDiscoverySkippedReason} = await result;
512
553
  assert.deepEqual(turnServerInfo, {
513
- url: FAKE_TURN_URL,
554
+ urls: [FAKE_TURN_URL1],
555
+ username: FAKE_TURN_USERNAME,
556
+ password: FAKE_TURN_PASSWORD,
557
+ });
558
+ assert.isUndefined(turnDiscoverySkippedReason);
559
+ });
560
+
561
+ // this happens when we land on video-mesh nodes (VMN) - we will get a single empty url
562
+ it('filters out any empty TURN urls', async () => {
563
+ const td = new TurnDiscovery(mockRoapRequest);
564
+ const result = td.doTurnDiscovery(testMeeting, false);
565
+
566
+ // check that TURN_DISCOVERY_REQUEST was sent
567
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
568
+ // @ts-ignore
569
+ mockRoapRequest.sendRoap.resetHistory();
570
+
571
+ // simulate the response with some empty urls, normally there would be just 1, but we put more just for the sake of testing
572
+ td.handleTurnDiscoveryResponse(
573
+ {
574
+ messageType: 'TURN_DISCOVERY_RESPONSE',
575
+ headers: [
576
+ 'x-cisco-turn-url=',
577
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
578
+ 'x-cisco-turn-url=',
579
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
580
+ 'x-cisco-turn-url=non-empty-url',
581
+ 'x-cisco-turn-url=',
582
+ ],
583
+ },
584
+ 'from test'
585
+ );
586
+
587
+ await testUtils.flushPromises();
588
+
589
+ // check that we've sent OK and still parsed the headers we care about
590
+ await checkRoapMessageSent('OK', 0);
591
+
592
+ const {turnServerInfo, turnDiscoverySkippedReason} = await result;
593
+ assert.deepEqual(turnServerInfo, {
594
+ urls: ['non-empty-url'], // empty urls should be filtered out
514
595
  username: FAKE_TURN_USERNAME,
515
596
  password: FAKE_TURN_PASSWORD,
516
597
  });
@@ -575,7 +656,7 @@ describe('TurnDiscovery', () => {
575
656
  {
576
657
  messageType: 'TURN_DISCOVERY_RESPONSE',
577
658
  headers: [
578
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
659
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
579
660
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
580
661
  ],
581
662
  },
@@ -587,7 +668,7 @@ describe('TurnDiscovery', () => {
587
668
  assert.isUndefined(turnServerInfo);
588
669
  assert.equal(
589
670
  turnDiscoverySkippedReason,
590
- `failure: TURN_DISCOVERY_RESPONSE from test missing some headers: ["x-cisco-turn-url=${FAKE_TURN_URL}","x-cisco-turn-username=${FAKE_TURN_USERNAME}"]`
671
+ `failure: TURN_DISCOVERY_RESPONSE from test missing some headers: ["x-cisco-turn-url=${FAKE_TURN_URL1}","x-cisco-turn-username=${FAKE_TURN_USERNAME}"]`
591
672
  );
592
673
  checkFailureMetricsSent();
593
674
  });
@@ -655,7 +736,7 @@ describe('TurnDiscovery', () => {
655
736
  {
656
737
  messageType: 'TURN_DISCOVERY_RESPONSE',
657
738
  headers: [
658
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
739
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
659
740
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
660
741
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
661
742
  ],
@@ -707,7 +788,7 @@ describe('TurnDiscovery', () => {
707
788
  {
708
789
  messageType: 'TURN_DISCOVERY_RESPONSE',
709
790
  headers: [
710
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
791
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
711
792
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
712
793
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
713
794
  ],
@@ -816,7 +897,8 @@ describe('TurnDiscovery', () => {
816
897
  errorType: undefined,
817
898
  errorCause: undefined,
818
899
  headers: [
819
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
900
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
901
+ `x-cisco-turn-url=${FAKE_TURN_URL2}`,
820
902
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
821
903
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
822
904
  'noOkInTransaction',
@@ -902,7 +984,7 @@ describe('TurnDiscovery', () => {
902
984
 
903
985
  assert.deepEqual(result, {
904
986
  turnServerInfo: {
905
- url: FAKE_TURN_URL,
987
+ urls: [FAKE_TURN_URL1, FAKE_TURN_URL2],
906
988
  username: FAKE_TURN_USERNAME,
907
989
  password: FAKE_TURN_PASSWORD,
908
990
  },
@@ -914,7 +996,7 @@ describe('TurnDiscovery', () => {
914
996
 
915
997
  it('works as expected when httpResponse is missing some headers', async () => {
916
998
  roapMessage.headers = [
917
- `x-cisco-turn-url=${FAKE_TURN_URL}`, // missing headers for username and password
999
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`, // missing headers for username and password
918
1000
  ];
919
1001
 
920
1002
  const httpResponse = {mediaConnections: [{remoteSdp: JSON.stringify({roapMessage})}]};
@@ -930,7 +1012,7 @@ describe('TurnDiscovery', () => {
930
1012
  assert.deepEqual(result, {
931
1013
  turnServerInfo: undefined,
932
1014
  turnDiscoverySkippedReason:
933
- 'failure: TURN_DISCOVERY_RESPONSE in http response missing some headers: ["x-cisco-turn-url=turns:fakeTurnServer.com:443?transport=tcp"]',
1015
+ 'failure: TURN_DISCOVERY_RESPONSE in http response missing some headers: ["x-cisco-turn-url=turns:fakeTurnServer1.com:443?transport=tcp"]',
934
1016
  });
935
1017
  assert.calledOnceWithExactly(handleTurnDiscoveryResponseSpy, roapMessage, 'in http response');
936
1018
 
@@ -939,7 +1021,7 @@ describe('TurnDiscovery', () => {
939
1021
 
940
1022
  it('sends OK when required', async () => {
941
1023
  roapMessage.headers = [
942
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
1024
+ `x-cisco-turn-url=${FAKE_TURN_URL1}`,
943
1025
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
944
1026
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
945
1027
  // noOkInTransaction is missing
@@ -951,7 +1033,7 @@ describe('TurnDiscovery', () => {
951
1033
 
952
1034
  assert.deepEqual(result, {
953
1035
  turnServerInfo: {
954
- url: FAKE_TURN_URL,
1036
+ urls: [FAKE_TURN_URL1],
955
1037
  username: FAKE_TURN_USERNAME,
956
1038
  password: FAKE_TURN_PASSWORD,
957
1039
  },
@@ -982,7 +1064,7 @@ describe('TurnDiscovery', () => {
982
1064
  mediaConnections: [
983
1065
  {
984
1066
  mediaId: '464ff97f-4bda-466a-ad06-3a22184a2274',
985
- remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}", "noOkInTransaction"]}}`,
1067
+ remoteSdp: `{"roapMessage": {"messageType":"TURN_DISCOVERY_RESPONSE","seq":"0","headers": ["x-cisco-turn-url=${FAKE_TURN_URL1}","x-cisco-turn-username=${FAKE_TURN_USERNAME}","x-cisco-turn-password=${FAKE_TURN_PASSWORD}", "noOkInTransaction"]}}`,
986
1068
  },
987
1069
  ],
988
1070
  });