@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.15

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 (252) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/common/browser-detection.js +1 -0
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js.map +1 -1
  6. package/dist/common/errors/captcha-error.js +5 -5
  7. package/dist/common/errors/captcha-error.js.map +1 -1
  8. package/dist/common/errors/intent-to-join.js +5 -5
  9. package/dist/common/errors/intent-to-join.js.map +1 -1
  10. package/dist/common/errors/join-meeting.js +6 -6
  11. package/dist/common/errors/join-meeting.js.map +1 -1
  12. package/dist/common/errors/media.js +5 -5
  13. package/dist/common/errors/media.js.map +1 -1
  14. package/dist/common/errors/parameter.js +5 -5
  15. package/dist/common/errors/parameter.js.map +1 -1
  16. package/dist/common/errors/password-error.js +5 -5
  17. package/dist/common/errors/password-error.js.map +1 -1
  18. package/dist/common/errors/permission.js +4 -4
  19. package/dist/common/errors/permission.js.map +1 -1
  20. package/dist/common/errors/reconnection.js +5 -5
  21. package/dist/common/errors/reconnection.js.map +1 -1
  22. package/dist/common/errors/stats.js +5 -5
  23. package/dist/common/errors/stats.js.map +1 -1
  24. package/dist/common/errors/webex-errors.js.map +1 -1
  25. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  26. package/dist/common/events/events-scope.js.map +1 -1
  27. package/dist/common/events/events.js.map +1 -1
  28. package/dist/common/events/trigger-proxy.js.map +1 -1
  29. package/dist/common/events/util.js.map +1 -1
  30. package/dist/common/logs/logger-proxy.js.map +1 -1
  31. package/dist/common/logs/request.js.map +1 -1
  32. package/dist/config.js.map +1 -1
  33. package/dist/constants.js.map +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/locus-info/controlsUtils.js.map +1 -1
  36. package/dist/locus-info/fullState.js.map +1 -1
  37. package/dist/locus-info/hostUtils.js.map +1 -1
  38. package/dist/locus-info/index.js +11 -8
  39. package/dist/locus-info/index.js.map +1 -1
  40. package/dist/locus-info/infoUtils.js.map +1 -1
  41. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  42. package/dist/locus-info/parser.js +2 -1
  43. package/dist/locus-info/parser.js.map +1 -1
  44. package/dist/locus-info/selfUtils.js +2 -1
  45. package/dist/locus-info/selfUtils.js.map +1 -1
  46. package/dist/media/index.js.map +1 -1
  47. package/dist/media/internal-media-core-wrapper.js.map +1 -1
  48. package/dist/media/properties.js.map +1 -1
  49. package/dist/media/util.js +1 -1
  50. package/dist/media/util.js.map +1 -1
  51. package/dist/mediaQualityMetrics/config.js.map +1 -1
  52. package/dist/meeting/effectsState.js +1 -1
  53. package/dist/meeting/effectsState.js.map +1 -1
  54. package/dist/meeting/in-meeting-actions.js.map +1 -1
  55. package/dist/meeting/index.js +118 -89
  56. package/dist/meeting/index.js.map +1 -1
  57. package/dist/meeting/muteState.js +1 -1
  58. package/dist/meeting/muteState.js.map +1 -1
  59. package/dist/meeting/request.js +25 -0
  60. package/dist/meeting/request.js.map +1 -1
  61. package/dist/meeting/request.type.js +8 -0
  62. package/dist/meeting/request.type.js.map +1 -0
  63. package/dist/meeting/state.js +5 -5
  64. package/dist/meeting/state.js.map +1 -1
  65. package/dist/meeting/util.js.map +1 -1
  66. package/dist/meeting-info/collection.js.map +1 -1
  67. package/dist/meeting-info/index.js +2 -2
  68. package/dist/meeting-info/index.js.map +1 -1
  69. package/dist/meeting-info/meeting-info-v2.js +48 -48
  70. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  71. package/dist/meeting-info/request.js.map +1 -1
  72. package/dist/meeting-info/util.js.map +1 -1
  73. package/dist/meeting-info/utilv2.js +1 -1
  74. package/dist/meeting-info/utilv2.js.map +1 -1
  75. package/dist/meetings/collection.js.map +1 -1
  76. package/dist/meetings/index.js +251 -250
  77. package/dist/meetings/index.js.map +1 -1
  78. package/dist/meetings/request.js +2 -2
  79. package/dist/meetings/request.js.map +1 -1
  80. package/dist/meetings/util.js +14 -14
  81. package/dist/meetings/util.js.map +1 -1
  82. package/dist/member/index.js +31 -31
  83. package/dist/member/index.js.map +1 -1
  84. package/dist/member/util.js.map +1 -1
  85. package/dist/members/collection.js.map +1 -1
  86. package/dist/members/index.js +43 -43
  87. package/dist/members/index.js.map +1 -1
  88. package/dist/members/request.js.map +1 -1
  89. package/dist/members/util.js.map +1 -1
  90. package/dist/metrics/config.js.map +1 -1
  91. package/dist/metrics/constants.js.map +1 -1
  92. package/dist/metrics/index.js +23 -20
  93. package/dist/metrics/index.js.map +1 -1
  94. package/dist/multistream/multistreamMedia.js +2 -1
  95. package/dist/multistream/multistreamMedia.js.map +1 -1
  96. package/dist/multistream/receiveSlot.js.map +1 -1
  97. package/dist/multistream/receiveSlotManager.js +2 -0
  98. package/dist/multistream/receiveSlotManager.js.map +1 -1
  99. package/dist/multistream/remoteMedia.js.map +1 -1
  100. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  101. package/dist/multistream/remoteMediaManager.js.map +1 -1
  102. package/dist/networkQualityMonitor/index.js +8 -8
  103. package/dist/networkQualityMonitor/index.js.map +1 -1
  104. package/dist/personal-meeting-room/index.js +7 -7
  105. package/dist/personal-meeting-room/index.js.map +1 -1
  106. package/dist/personal-meeting-room/request.js.map +1 -1
  107. package/dist/personal-meeting-room/util.js.map +1 -1
  108. package/dist/reachability/index.js.map +1 -1
  109. package/dist/reachability/request.js.map +1 -1
  110. package/dist/reactions/reactions.js.map +1 -1
  111. package/dist/reactions/reactions.type.js +3 -1
  112. package/dist/reactions/reactions.type.js.map +1 -1
  113. package/dist/reconnection-manager/index.js +4 -4
  114. package/dist/reconnection-manager/index.js.map +1 -1
  115. package/dist/roap/index.js +5 -5
  116. package/dist/roap/index.js.map +1 -1
  117. package/dist/roap/request.js.map +1 -1
  118. package/dist/roap/turnDiscovery.js.map +1 -1
  119. package/dist/statsAnalyzer/global.js.map +1 -1
  120. package/dist/statsAnalyzer/index.js.map +1 -1
  121. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  122. package/dist/transcription/index.js +4 -1
  123. package/dist/transcription/index.js.map +1 -1
  124. package/internal-README.md +7 -6
  125. package/package.json +18 -18
  126. package/src/common/browser-detection.ts +9 -6
  127. package/src/common/collection.ts +3 -1
  128. package/src/common/errors/captcha-error.ts +6 -6
  129. package/src/common/errors/intent-to-join.ts +6 -6
  130. package/src/common/errors/join-meeting.ts +12 -8
  131. package/src/common/errors/media.ts +6 -6
  132. package/src/common/errors/parameter.ts +9 -6
  133. package/src/common/errors/password-error.ts +6 -6
  134. package/src/common/errors/permission.ts +5 -5
  135. package/src/common/errors/reconnection.ts +6 -6
  136. package/src/common/errors/stats.ts +6 -6
  137. package/src/common/errors/webex-errors.ts +7 -5
  138. package/src/common/errors/webex-meetings-error.ts +1 -1
  139. package/src/common/events/events-scope.ts +5 -1
  140. package/src/common/events/events.ts +5 -1
  141. package/src/common/events/trigger-proxy.ts +8 -3
  142. package/src/common/events/util.ts +1 -2
  143. package/src/common/logs/logger-proxy.ts +21 -10
  144. package/src/common/logs/request.ts +11 -8
  145. package/src/config.ts +11 -11
  146. package/src/constants.ts +1 -1
  147. package/src/index.js +1 -1
  148. package/src/locus-info/controlsUtils.ts +34 -24
  149. package/src/locus-info/fullState.ts +15 -11
  150. package/src/locus-info/hostUtils.ts +4 -3
  151. package/src/locus-info/index.ts +25 -34
  152. package/src/locus-info/infoUtils.ts +12 -4
  153. package/src/locus-info/mediaSharesUtils.ts +4 -4
  154. package/src/locus-info/parser.ts +45 -68
  155. package/src/locus-info/selfUtils.ts +106 -57
  156. package/src/media/index.ts +123 -135
  157. package/src/media/internal-media-core-wrapper.ts +2 -2
  158. package/src/media/properties.ts +30 -20
  159. package/src/media/util.ts +1 -1
  160. package/src/mediaQualityMetrics/config.ts +46 -46
  161. package/src/meeting/effectsState.ts +35 -35
  162. package/src/meeting/in-meeting-actions.ts +7 -3
  163. package/src/meeting/index.ts +1576 -1291
  164. package/src/meeting/muteState.ts +62 -31
  165. package/src/meeting/request.ts +174 -113
  166. package/src/meeting/request.type.ts +11 -0
  167. package/src/meeting/state.ts +45 -30
  168. package/src/meeting/util.ts +101 -70
  169. package/src/meeting-info/collection.ts +2 -1
  170. package/src/meeting-info/index.ts +32 -30
  171. package/src/meeting-info/meeting-info-v2.ts +106 -108
  172. package/src/meeting-info/request.ts +9 -3
  173. package/src/meeting-info/util.ts +54 -46
  174. package/src/meeting-info/utilv2.ts +59 -53
  175. package/src/meetings/collection.ts +1 -1
  176. package/src/meetings/index.ts +512 -440
  177. package/src/meetings/request.ts +26 -24
  178. package/src/meetings/util.ts +29 -29
  179. package/src/member/index.ts +55 -49
  180. package/src/member/util.ts +26 -13
  181. package/src/members/collection.ts +0 -1
  182. package/src/members/index.ts +182 -126
  183. package/src/members/request.ts +46 -14
  184. package/src/members/util.ts +44 -42
  185. package/src/metrics/config.ts +254 -81
  186. package/src/metrics/constants.ts +0 -2
  187. package/src/metrics/index.ts +84 -71
  188. package/src/multistream/multistreamMedia.ts +1 -0
  189. package/src/multistream/receiveSlot.ts +1 -0
  190. package/src/multistream/receiveSlotManager.ts +1 -0
  191. package/src/multistream/remoteMedia.ts +1 -1
  192. package/src/multistream/remoteMediaGroup.ts +2 -1
  193. package/src/multistream/remoteMediaManager.ts +3 -0
  194. package/src/networkQualityMonitor/index.ts +20 -23
  195. package/src/personal-meeting-room/index.ts +12 -16
  196. package/src/personal-meeting-room/request.ts +10 -3
  197. package/src/personal-meeting-room/util.ts +3 -3
  198. package/src/reachability/index.ts +61 -59
  199. package/src/reachability/request.ts +36 -32
  200. package/src/reactions/reactions.ts +4 -4
  201. package/src/reactions/reactions.type.ts +4 -3
  202. package/src/reconnection-manager/index.ts +139 -84
  203. package/src/roap/index.ts +46 -38
  204. package/src/roap/request.ts +44 -31
  205. package/src/roap/turnDiscovery.ts +59 -30
  206. package/src/statsAnalyzer/global.ts +30 -33
  207. package/src/statsAnalyzer/index.ts +432 -175
  208. package/src/statsAnalyzer/mqaUtil.ts +178 -72
  209. package/src/transcription/index.ts +34 -32
  210. package/test/integration/spec/journey.js +663 -462
  211. package/test/integration/spec/space-meeting.js +318 -203
  212. package/test/integration/spec/transcription.js +6 -7
  213. package/test/unit/spec/common/browser-detection.js +9 -28
  214. package/test/unit/spec/fixture/locus.js +92 -90
  215. package/test/unit/spec/locus-info/controlsUtils.js +5 -5
  216. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  217. package/test/unit/spec/locus-info/index.js +1 -2
  218. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  219. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  220. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  221. package/test/unit/spec/locus-info/parser.js +3 -9
  222. package/test/unit/spec/locus-info/selfConstant.js +72 -103
  223. package/test/unit/spec/locus-info/selfUtils.js +21 -12
  224. package/test/unit/spec/meeting/effectsState.js +36 -46
  225. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
  226. package/test/unit/spec/meeting/index.js +1342 -684
  227. package/test/unit/spec/meeting/muteState.js +42 -33
  228. package/test/unit/spec/meeting/request.js +75 -45
  229. package/test/unit/spec/meeting/utils.js +78 -53
  230. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  231. package/test/unit/spec/meeting-info/request.js +7 -9
  232. package/test/unit/spec/meeting-info/util.js +11 -12
  233. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  234. package/test/unit/spec/meetings/collection.js +1 -1
  235. package/test/unit/spec/meetings/index.js +438 -257
  236. package/test/unit/spec/meetings/utils.js +14 -12
  237. package/test/unit/spec/member/index.js +0 -1
  238. package/test/unit/spec/member/util.js +5 -6
  239. package/test/unit/spec/members/index.js +104 -54
  240. package/test/unit/spec/members/request.js +29 -20
  241. package/test/unit/spec/members/utils.js +8 -5
  242. package/test/unit/spec/metrics/index.js +16 -21
  243. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  244. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  245. package/test/unit/spec/reachability/index.ts +9 -11
  246. package/test/unit/spec/reconnection-manager/index.js +16 -18
  247. package/test/unit/spec/roap/turnDiscovery.ts +22 -19
  248. package/test/unit/spec/stats-analyzer/index.js +25 -20
  249. package/test/utils/cmr.js +44 -42
  250. package/test/utils/testUtils.js +83 -74
  251. package/test/utils/webex-config.js +18 -18
  252. package/test/utils/webex-test-users.js +53 -50
@@ -3,11 +3,7 @@
3
3
  import {StatelessWebexPlugin} from '@webex/webex-core';
4
4
 
5
5
  import LoggerProxy from '../common/logs/logger-proxy';
6
- import {
7
- MEDIA,
8
- HTTP_VERBS,
9
- REACHABILITY
10
- } from '../constants';
6
+ import {MEDIA, HTTP_VERBS, REACHABILITY} from '../constants';
11
7
  import Metrics from '../metrics';
12
8
  import {eventType} from '../metrics/config';
13
9
 
@@ -21,7 +17,6 @@ export default class RoapRequest extends StatelessWebexPlugin {
21
17
  * @returns {Promise} returns a promise that resolves/rejects whatever the request does
22
18
  */
23
19
 
24
-
25
20
  attachRechabilityData(localSdp) {
26
21
  const reachabilityData = window.localStorage.getItem(REACHABILITY.localStorage);
27
22
 
@@ -33,9 +28,10 @@ export default class RoapRequest extends StatelessWebexPlugin {
33
28
  if (reachabilityResult && Object.keys(reachabilityResult).length) {
34
29
  localSdp.reachability = reachabilityResult;
35
30
  }
36
- }
37
- catch (e) {
38
- LoggerProxy.logger.error(`Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`);
31
+ } catch (e) {
32
+ LoggerProxy.logger.error(
33
+ `Roap:request#attachReachabilityData --> Error in parsing reachability data: ${e}`
34
+ );
39
35
  }
40
36
  }
41
37
 
@@ -64,9 +60,7 @@ export default class RoapRequest extends StatelessWebexPlugin {
64
60
  meetingId: string;
65
61
  preferTranscoding?: boolean;
66
62
  }) {
67
- const {
68
- roapMessage, locusSelfUrl, mediaId, correlationId, meetingId
69
- } = options;
63
+ const {roapMessage, locusSelfUrl, mediaId, correlationId, meetingId} = options;
70
64
 
71
65
  if (!mediaId) {
72
66
  LoggerProxy.logger.info('Roap:request#sendRoap --> Race Condition /call mediaID not present');
@@ -76,7 +70,9 @@ export default class RoapRequest extends StatelessWebexPlugin {
76
70
  // @ts-ignore
77
71
  const deviceUrl = this.webex.internal.device.url;
78
72
 
79
- LoggerProxy.logger.info(`Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`);
73
+ LoggerProxy.logger.info(
74
+ `Roap:request#sendRoap --> ${mediaUrl} \n ${roapMessage.messageType} \n seq:${roapMessage.seq}`
75
+ );
80
76
 
81
77
  Metrics.postEvent({event: eventType.MEDIA_REQUEST, meetingId});
82
78
 
@@ -89,34 +85,43 @@ export default class RoapRequest extends StatelessWebexPlugin {
89
85
  device: {
90
86
  url: deviceUrl,
91
87
  // @ts-ignore
92
- deviceType: this.config.meetings.deviceType
88
+ deviceType: this.config.meetings.deviceType,
93
89
  },
94
90
  correlationId,
95
91
  localMedias: [
96
92
  {
97
- localSdp: JSON.stringify(this.attachRechabilityData({
98
- roapMessage,
99
- // eslint-disable-next-line no-warning-comments
100
- // TODO: check whats the need for video and audiomute
101
- audioMuted: !!options.audioMuted,
102
- videoMuted: !!options.videoMuted
103
- })),
104
- mediaId: options.mediaId
105
- }
93
+ localSdp: JSON.stringify(
94
+ this.attachRechabilityData({
95
+ roapMessage,
96
+ // eslint-disable-next-line no-warning-comments
97
+ // TODO: check whats the need for video and audiomute
98
+ audioMuted: !!options.audioMuted,
99
+ videoMuted: !!options.videoMuted,
100
+ })
101
+ ),
102
+ mediaId: options.mediaId,
103
+ },
106
104
  ],
107
105
  clientMediaPreferences: {
108
- preferTranscoding: options.preferTranscoding ?? true
109
- }
110
- }
106
+ preferTranscoding: options.preferTranscoding ?? true,
107
+ },
108
+ },
111
109
  })
112
110
  .then((res) => {
113
111
  Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId});
114
112
 
115
113
  // always it will be the first mediaConnection Object
116
- const mediaConnections = res.body.mediaConnections && res.body.mediaConnections.length > 0 && res.body.mediaConnections[0];
114
+ const mediaConnections =
115
+ res.body.mediaConnections &&
116
+ res.body.mediaConnections.length > 0 &&
117
+ res.body.mediaConnections[0];
117
118
 
118
119
  LoggerProxy.logger.info(
119
- `Roap:request#sendRoap --> response:${JSON.stringify(mediaConnections, null, 2)}'\n StatusCode:'${res.statusCode}`
120
+ `Roap:request#sendRoap --> response:${JSON.stringify(
121
+ mediaConnections,
122
+ null,
123
+ 2
124
+ )}'\n StatusCode:'${res.statusCode}`
120
125
  );
121
126
  const {locus} = res.body;
122
127
 
@@ -124,14 +129,22 @@ export default class RoapRequest extends StatelessWebexPlugin {
124
129
 
125
130
  return {
126
131
  locus,
127
- ...(mediaConnections && {mediaConnections: res.body.mediaConnections})
132
+ ...(mediaConnections && {mediaConnections: res.body.mediaConnections}),
128
133
  };
129
134
  })
130
135
  .catch((err) => {
131
- Metrics.postEvent({event: eventType.MEDIA_RESPONSE, meetingId, data: {error: Metrics.parseLocusError(err, true)}});
136
+ Metrics.postEvent({
137
+ event: eventType.MEDIA_RESPONSE,
138
+ meetingId,
139
+ data: {error: Metrics.parseLocusError(err, true)},
140
+ });
132
141
  LoggerProxy.logger.error(`Roap:request#sendRoap --> Error:${JSON.stringify(err, null, 2)}`);
133
142
  LoggerProxy.logger.error(
134
- `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(roapMessage, null, 2)} + '\\n mediaId:'${options.mediaId}`
143
+ `Roap:request#sendRoapRequest --> errorBody:${JSON.stringify(
144
+ roapMessage,
145
+ null,
146
+ 2
147
+ )} + '\\n mediaId:'${options.mediaId}`
135
148
  );
136
149
  throw err;
137
150
  });
@@ -48,7 +48,6 @@ export default class TurnDiscovery {
48
48
  };
49
49
  }
50
50
 
51
-
52
51
  /**
53
52
  * waits for TURN_DISCOVERY_RESPONSE message to arrive
54
53
  *
@@ -58,20 +57,28 @@ export default class TurnDiscovery {
58
57
  */
59
58
  private waitForTurnDiscoveryResponse() {
60
59
  if (!this.defer) {
61
- LoggerProxy.logger.warn('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress');
60
+ LoggerProxy.logger.warn(
61
+ 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> TURN discovery is not in progress'
62
+ );
62
63
 
63
- return Promise.reject(new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()'));
64
+ return Promise.reject(
65
+ new Error('waitForTurnDiscoveryResponse() called before sendRoapTurnDiscoveryRequest()')
66
+ );
64
67
  }
65
68
 
66
69
  const {defer} = this;
67
70
 
68
71
  this.responseTimer = setTimeout(() => {
69
- LoggerProxy.logger.warn(`Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`);
72
+ LoggerProxy.logger.warn(
73
+ `Roap:turnDiscovery#waitForTurnDiscoveryResponse --> timeout! no response arrived within ${TURN_DISCOVERY_TIMEOUT} seconds`
74
+ );
70
75
 
71
76
  defer.reject(new Error('Timed out waiting for TURN_DISCOVERY_RESPONSE'));
72
77
  }, TURN_DISCOVERY_TIMEOUT * 1000);
73
78
 
74
- LoggerProxy.logger.info('Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...');
79
+ LoggerProxy.logger.info(
80
+ 'Roap:turnDiscovery#waitForTurnDiscoveryResponse --> waiting for TURN_DISCOVERY_RESPONSE...'
81
+ );
75
82
 
76
83
  return defer.promise;
77
84
  }
@@ -89,7 +96,9 @@ export default class TurnDiscovery {
89
96
  const {headers} = roapMessage;
90
97
 
91
98
  if (!this.defer) {
92
- LoggerProxy.logger.warn('Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response');
99
+ LoggerProxy.logger.warn(
100
+ 'Roap:turnDiscovery#handleTurnDiscoveryResponse --> unexpected TURN discovery response'
101
+ );
93
102
 
94
103
  return;
95
104
  }
@@ -106,7 +115,9 @@ export default class TurnDiscovery {
106
115
  // check if it matches any of our expected headers
107
116
  expectedHeaders.forEach((expectedHeader) => {
108
117
  if (receivedHeader.startsWith(`${expectedHeader.headerName}=`)) {
109
- this.turnInfo[expectedHeader.field] = receivedHeader.substring(expectedHeader.headerName.length + 1);
118
+ this.turnInfo[expectedHeader.field] = receivedHeader.substring(
119
+ expectedHeader.headerName.length + 1
120
+ );
110
121
  foundHeaders += 1;
111
122
  }
112
123
  });
@@ -116,11 +127,18 @@ export default class TurnDiscovery {
116
127
  this.responseTimer = undefined;
117
128
 
118
129
  if (foundHeaders !== expectedHeaders.length) {
119
- LoggerProxy.logger.warn(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(headers)}`);
120
- this.defer.reject(new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`));
121
- }
122
- else {
123
- LoggerProxy.logger.info(`Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`);
130
+ LoggerProxy.logger.warn(
131
+ `Roap:turnDiscovery#handleTurnDiscoveryResponse --> missing some headers, received: ${JSON.stringify(
132
+ headers
133
+ )}`
134
+ );
135
+ this.defer.reject(
136
+ new Error(`TURN_DISCOVERY_RESPONSE missing some headers: ${JSON.stringify(headers)}`)
137
+ );
138
+ } else {
139
+ LoggerProxy.logger.info(
140
+ `Roap:turnDiscovery#handleTurnDiscoveryResponse --> received a valid response, url=${this.turnInfo.url}`
141
+ );
124
142
  this.defer.resolve();
125
143
  }
126
144
  }
@@ -136,7 +154,9 @@ export default class TurnDiscovery {
136
154
  */
137
155
  sendRoapTurnDiscoveryRequest(meeting: Meeting, isReconnecting: boolean) {
138
156
  if (this.defer) {
139
- LoggerProxy.logger.warn('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress');
157
+ LoggerProxy.logger.warn(
158
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> already in progress'
159
+ );
140
160
 
141
161
  return Promise.resolve();
142
162
  }
@@ -149,19 +169,21 @@ export default class TurnDiscovery {
149
169
  seq: TURN_DISCOVERY_SEQ,
150
170
  };
151
171
 
152
- LoggerProxy.logger.info('Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST');
172
+ LoggerProxy.logger.info(
173
+ 'Roap:turnDiscovery#sendRoapTurnDiscoveryRequest --> sending TURN_DISCOVERY_REQUEST'
174
+ );
153
175
 
154
176
  return this.roapRequest
155
177
  .sendRoap({
156
178
  roapMessage,
157
179
  correlationId: meeting.correlationId,
158
- // @ts-ignore - Fix missing type
180
+ // @ts-ignore - Fix missing type
159
181
  locusSelfUrl: meeting.selfUrl,
160
182
  // @ts-ignore - Fix missing type
161
183
  mediaId: isReconnecting ? '' : meeting.mediaId,
162
184
  audioMuted: meeting.isAudioMuted(),
163
185
  videoMuted: meeting.isVideoMuted(),
164
- meetingId: meeting.id
186
+ meetingId: meeting.id,
165
187
  })
166
188
  .then(({mediaConnections}) => {
167
189
  if (mediaConnections) {
@@ -193,7 +215,7 @@ export default class TurnDiscovery {
193
215
  correlationId: meeting.correlationId,
194
216
  audioMuted: meeting.isAudioMuted(),
195
217
  videoMuted: meeting.isVideoMuted(),
196
- meetingId: meeting.id
218
+ meetingId: meeting.id,
197
219
  });
198
220
  }
199
221
 
@@ -219,13 +241,21 @@ export default class TurnDiscovery {
219
241
  const isAnyClusterReachable = meeting.webex.meetings.reachability.isAnyClusterReachable();
220
242
 
221
243
  if (isAnyClusterReachable) {
222
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery');
223
- return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'reachability'});
244
+ LoggerProxy.logger.info(
245
+ 'Roap:turnDiscovery#doTurnDiscovery --> reachability has not failed, skipping TURN discovery'
246
+ );
247
+
248
+ return Promise.resolve({
249
+ turnServerInfo: undefined,
250
+ turnDiscoverySkippedReason: 'reachability',
251
+ });
224
252
  }
225
253
 
226
254
  // @ts-ignore - fix type
227
255
  if (!meeting.config.experimental.enableTurnDiscovery) {
228
- LoggerProxy.logger.info('Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it');
256
+ LoggerProxy.logger.info(
257
+ 'Roap:turnDiscovery#doTurnDiscovery --> TURN discovery disabled in config, skipping it'
258
+ );
229
259
 
230
260
  return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: 'config'});
231
261
  }
@@ -242,18 +272,17 @@ export default class TurnDiscovery {
242
272
  })
243
273
  .catch((e) => {
244
274
  // we catch any errors and resolve with no turn information so that the normal call join flow can continue without TURN
245
- LoggerProxy.logger.info(`Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`);
246
-
247
- Metrics.sendBehavioralMetric(
248
- BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE,
249
- {
250
- correlation_id: meeting.correlationId,
251
- locus_id: meeting.locusUrl.split('/').pop(),
252
- reason: e.message,
253
- stack: e.stack
254
- }
275
+ LoggerProxy.logger.info(
276
+ `Roap:turnDiscovery#doTurnDiscovery --> TURN discovery failed, continuing without TURN: ${e}`
255
277
  );
256
278
 
279
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.TURN_DISCOVERY_FAILURE, {
280
+ correlation_id: meeting.correlationId,
281
+ locus_id: meeting.locusUrl.split('/').pop(),
282
+ reason: e.message,
283
+ stack: e.stack,
284
+ });
285
+
257
286
  return Promise.resolve({turnServerInfo: undefined, turnDiscoverySkippedReason: undefined});
258
287
  });
259
288
  }
@@ -7,14 +7,14 @@ const STATS_DEFAULT = {
7
7
  availableBandwidth: 0,
8
8
  bytesSent: 0,
9
9
  meanRemoteJitter: [],
10
- meanRoundTripTime: []
10
+ meanRoundTripTime: [],
11
11
  },
12
12
  recv: {
13
13
  availableBandwidth: 0,
14
14
  bytesReceived: 0,
15
15
  meanRtpJitter: [],
16
- meanRoundTripTime: []
17
- }
16
+ meanRoundTripTime: [],
17
+ },
18
18
  },
19
19
  video: {
20
20
  send: {
@@ -22,17 +22,16 @@ const STATS_DEFAULT = {
22
22
  maxPacketLossRatio: 0,
23
23
  availableBandwidth: 0,
24
24
  meanRemoteJitter: [],
25
- meanRoundTripTime: []
25
+ meanRoundTripTime: [],
26
26
  },
27
27
  recv: {
28
28
  availableBandwidth: 0,
29
29
  totalPacketsLost: 0,
30
30
  meanRtpJitter: [],
31
- meanRoundTripTime: []
32
-
31
+ meanRoundTripTime: [],
33
32
  },
34
33
  latency: 0,
35
- packetsLost: 0
34
+ packetsLost: 0,
36
35
  },
37
36
  share: {
38
37
  send: {
@@ -40,16 +39,16 @@ const STATS_DEFAULT = {
40
39
  availableBandwidth: 0,
41
40
  totalPacketsLost: 0,
42
41
  meanRemoteJitter: [],
43
- meanRoundTripTime: []
42
+ meanRoundTripTime: [],
44
43
  },
45
44
  recv: {
46
45
  availableBandwidth: 0,
47
46
  meanRtpJitter: [],
48
- meanRoundTripTime: []
47
+ meanRoundTripTime: [],
49
48
  },
50
49
 
51
50
  latency: 0,
52
- packetsLost: 0
51
+ packetsLost: 0,
53
52
  },
54
53
  bandwidth: {
55
54
  systemBandwidth: 0,
@@ -57,9 +56,9 @@ const STATS_DEFAULT = {
57
56
  encodedPerSecond: 0,
58
57
  helper: {
59
58
  audioBytesSent: 0,
60
- videoBytestSent: 0
59
+ videoBytestSent: 0,
61
60
  },
62
- speed: 0
61
+ speed: 0,
63
62
  },
64
63
  results: {},
65
64
  connectionType: {
@@ -69,65 +68,63 @@ const STATS_DEFAULT = {
69
68
  candidateType: [],
70
69
  transport: [],
71
70
  ipAddress: [],
72
- networkType: []
71
+ networkType: [],
73
72
  },
74
73
  remote: {
75
74
  candidateType: [],
76
75
  transport: [],
77
76
  ipAddress: [],
78
- networkType: []
79
- }
77
+ networkType: [],
78
+ },
80
79
  },
81
80
  resolutions: {
82
81
  audio: {
83
82
  send: {
84
83
  width: 0,
85
- height: 0
84
+ height: 0,
86
85
  },
87
86
  recv: {
88
87
  width: 0,
89
- height: 0
90
- }
88
+ height: 0,
89
+ },
91
90
  },
92
91
  video: {
93
92
  send: {
94
93
  width: 0,
95
- height: 0
94
+ height: 0,
96
95
  },
97
96
  recv: {
98
97
  width: 0,
99
- height: 0
100
- }
98
+ height: 0,
99
+ },
101
100
  },
102
101
  share: {
103
102
  send: {
104
103
  width: 0,
105
- height: 0
104
+ height: 0,
106
105
  },
107
106
  recv: {
108
107
  width: 0,
109
- height: 0
110
- }
111
- }
108
+ height: 0,
109
+ },
110
+ },
112
111
  },
113
112
  internal: {
114
113
  audio: {
115
114
  send: {},
116
- recv: {}
115
+ recv: {},
117
116
  },
118
117
  video: {
119
118
  send: {},
120
- recv: {}
119
+ recv: {},
121
120
  },
122
121
  share: {
123
122
  send: {},
124
- recv: {}
123
+ recv: {},
125
124
  },
126
- remote: {
127
-
128
- },
129
- candidates: {}
130
- }
125
+ remote: {},
126
+ candidates: {},
127
+ },
131
128
  };
132
129
 
133
130
  export default STATS_DEFAULT;