@webex/plugin-meetings 3.7.0-wxcc.1 → 3.8.0

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 (220) hide show
  1. package/dist/annotation/annotation.types.d.ts +42 -0
  2. package/dist/annotation/constants.d.ts +31 -0
  3. package/dist/annotation/index.d.ts +117 -0
  4. package/dist/breakouts/breakout.d.ts +8 -0
  5. package/dist/breakouts/breakout.js +1 -1
  6. package/dist/breakouts/collection.d.ts +5 -0
  7. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  8. package/dist/breakouts/events.d.ts +8 -0
  9. package/dist/breakouts/index.d.ts +5 -0
  10. package/dist/breakouts/index.js +1 -1
  11. package/dist/breakouts/request.d.ts +22 -0
  12. package/dist/breakouts/utils.d.ts +15 -0
  13. package/dist/common/browser-detection.d.ts +9 -0
  14. package/dist/common/collection.d.ts +48 -0
  15. package/dist/common/config.d.ts +2 -0
  16. package/dist/common/errors/captcha-error.d.ts +15 -0
  17. package/dist/common/errors/intent-to-join.d.ts +16 -0
  18. package/dist/common/errors/join-meeting.d.ts +17 -0
  19. package/dist/common/errors/media.d.ts +15 -0
  20. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  21. package/dist/common/errors/parameter.d.ts +15 -0
  22. package/dist/common/errors/password-error.d.ts +15 -0
  23. package/dist/common/errors/permission.d.ts +14 -0
  24. package/dist/common/errors/reclaim-host-role-error.js +149 -0
  25. package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
  26. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  27. package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
  28. package/dist/common/errors/reconnection-in-progress.js +33 -0
  29. package/dist/common/errors/reconnection-in-progress.js.map +1 -0
  30. package/dist/common/errors/reconnection.d.ts +15 -0
  31. package/dist/common/errors/stats.d.ts +15 -0
  32. package/dist/common/errors/webex-errors.d.ts +93 -0
  33. package/dist/common/errors/webex-meetings-error.d.ts +20 -0
  34. package/dist/common/events/events-scope.d.ts +17 -0
  35. package/dist/common/events/events.d.ts +12 -0
  36. package/dist/common/events/trigger-proxy.d.ts +2 -0
  37. package/dist/common/events/util.d.ts +2 -0
  38. package/dist/common/logs/logger-config.d.ts +2 -0
  39. package/dist/common/logs/logger-proxy.d.ts +2 -0
  40. package/dist/common/logs/request.d.ts +36 -0
  41. package/dist/common/queue.d.ts +34 -0
  42. package/dist/config.d.ts +72 -0
  43. package/dist/constants.d.ts +1088 -0
  44. package/dist/constants.js +15 -3
  45. package/dist/constants.js.map +1 -1
  46. package/dist/controls-options-manager/constants.d.ts +4 -0
  47. package/dist/controls-options-manager/enums.d.ts +15 -0
  48. package/dist/controls-options-manager/index.d.ts +136 -0
  49. package/dist/controls-options-manager/types.d.ts +43 -0
  50. package/dist/controls-options-manager/util.d.ts +1 -0
  51. package/dist/index.d.ts +7 -0
  52. package/dist/interceptors/index.d.ts +2 -0
  53. package/dist/interceptors/locusRetry.d.ts +27 -0
  54. package/dist/interpretation/collection.d.ts +5 -0
  55. package/dist/interpretation/index.d.ts +5 -0
  56. package/dist/interpretation/index.js +1 -1
  57. package/dist/interpretation/siLanguage.d.ts +5 -0
  58. package/dist/interpretation/siLanguage.js +1 -1
  59. package/dist/locus-info/controlsUtils.d.ts +2 -0
  60. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
  61. package/dist/locus-info/fullState.d.ts +2 -0
  62. package/dist/locus-info/hostUtils.d.ts +2 -0
  63. package/dist/locus-info/index.d.ts +322 -0
  64. package/dist/locus-info/infoUtils.d.ts +2 -0
  65. package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
  66. package/dist/locus-info/parser.d.ts +272 -0
  67. package/dist/locus-info/selfUtils.d.ts +2 -0
  68. package/dist/locus-info/selfUtils.js +5 -0
  69. package/dist/locus-info/selfUtils.js.map +1 -1
  70. package/dist/media/MediaConnectionAwaiter.js +1 -0
  71. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  72. package/dist/media/index.d.ts +34 -0
  73. package/dist/media/properties.d.ts +93 -0
  74. package/dist/media/properties.js +30 -16
  75. package/dist/media/properties.js.map +1 -1
  76. package/dist/media/util.d.ts +2 -0
  77. package/dist/mediaQualityMetrics/config.d.ts +241 -0
  78. package/dist/mediaQualityMetrics/config.js +502 -0
  79. package/dist/mediaQualityMetrics/config.js.map +1 -0
  80. package/dist/meeting/brbState.js +167 -0
  81. package/dist/meeting/brbState.js.map +1 -0
  82. package/dist/meeting/effectsState.js +260 -0
  83. package/dist/meeting/effectsState.js.map +1 -0
  84. package/dist/meeting/in-meeting-actions.d.ts +167 -0
  85. package/dist/meeting/index.d.ts +1825 -0
  86. package/dist/meeting/index.js +363 -295
  87. package/dist/meeting/index.js.map +1 -1
  88. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  89. package/dist/meeting/muteState.d.ts +178 -0
  90. package/dist/meeting/muteState.js +1 -6
  91. package/dist/meeting/muteState.js.map +1 -1
  92. package/dist/meeting/request.d.ts +295 -0
  93. package/dist/meeting/request.type.d.ts +11 -0
  94. package/dist/meeting/state.d.ts +9 -0
  95. package/dist/meeting/util.d.ts +119 -0
  96. package/dist/meeting/voicea-meeting.d.ts +16 -0
  97. package/dist/meeting-info/collection.d.ts +20 -0
  98. package/dist/meeting-info/index.d.ts +69 -0
  99. package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
  100. package/dist/meeting-info/meeting-info-v2.js +19 -12
  101. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  102. package/dist/meeting-info/request.d.ts +22 -0
  103. package/dist/meeting-info/util.d.ts +2 -0
  104. package/dist/meeting-info/utilv2.d.ts +2 -0
  105. package/dist/meeting-info/utilv2.js +5 -1
  106. package/dist/meeting-info/utilv2.js.map +1 -1
  107. package/dist/meetings/collection.d.ts +40 -0
  108. package/dist/meetings/index.d.ts +390 -0
  109. package/dist/meetings/meetings.types.d.ts +4 -0
  110. package/dist/meetings/request.d.ts +27 -0
  111. package/dist/meetings/util.d.ts +18 -0
  112. package/dist/member/index.d.ts +160 -0
  113. package/dist/member/member.types.js +17 -0
  114. package/dist/member/member.types.js.map +1 -0
  115. package/dist/member/types.d.ts +32 -0
  116. package/dist/member/util.d.ts +2 -0
  117. package/dist/members/collection.d.ts +29 -0
  118. package/dist/members/index.d.ts +353 -0
  119. package/dist/members/request.d.ts +114 -0
  120. package/dist/members/types.d.ts +25 -0
  121. package/dist/members/util.d.ts +215 -0
  122. package/dist/metrics/config.js +276 -0
  123. package/dist/metrics/config.js.map +1 -0
  124. package/dist/metrics/constants.d.ts +70 -0
  125. package/dist/metrics/constants.js +2 -0
  126. package/dist/metrics/constants.js.map +1 -1
  127. package/dist/metrics/index.d.ts +45 -0
  128. package/dist/multistream/mediaRequestManager.d.ts +119 -0
  129. package/dist/multistream/receiveSlot.d.ts +68 -0
  130. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  131. package/dist/multistream/remoteMedia.d.ts +72 -0
  132. package/dist/multistream/remoteMediaGroup.d.ts +49 -0
  133. package/dist/multistream/remoteMediaManager.d.ts +300 -0
  134. package/dist/multistream/sendSlotManager.d.ts +69 -0
  135. package/dist/networkQualityMonitor/index.d.ts +70 -0
  136. package/dist/networkQualityMonitor/index.js +221 -0
  137. package/dist/networkQualityMonitor/index.js.map +1 -0
  138. package/dist/peer-connection-manager/index.js +671 -0
  139. package/dist/peer-connection-manager/index.js.map +1 -0
  140. package/dist/peer-connection-manager/util.js +109 -0
  141. package/dist/peer-connection-manager/util.js.map +1 -0
  142. package/dist/personal-meeting-room/index.d.ts +47 -0
  143. package/dist/personal-meeting-room/request.d.ts +14 -0
  144. package/dist/personal-meeting-room/util.d.ts +2 -0
  145. package/dist/reachability/clusterReachability.d.ts +109 -0
  146. package/dist/reachability/index.d.ts +105 -0
  147. package/dist/reachability/index.js +31 -3
  148. package/dist/reachability/index.js.map +1 -1
  149. package/dist/reachability/request.d.ts +39 -0
  150. package/dist/reachability/util.d.ts +8 -0
  151. package/dist/reactions/constants.d.ts +3 -0
  152. package/dist/reactions/reactions.d.ts +4 -0
  153. package/dist/reactions/reactions.type.d.ts +52 -0
  154. package/dist/reconnection-manager/index.d.ts +136 -0
  155. package/dist/recording-controller/enums.d.ts +7 -0
  156. package/dist/recording-controller/index.d.ts +207 -0
  157. package/dist/recording-controller/util.d.ts +14 -0
  158. package/dist/roap/collection.js +62 -0
  159. package/dist/roap/collection.js.map +1 -0
  160. package/dist/roap/handler.js +275 -0
  161. package/dist/roap/handler.js.map +1 -0
  162. package/dist/roap/index.d.ts +86 -0
  163. package/dist/roap/request.d.ts +39 -0
  164. package/dist/roap/state.js +126 -0
  165. package/dist/roap/state.js.map +1 -0
  166. package/dist/roap/turnDiscovery.d.ts +155 -0
  167. package/dist/roap/util.js +75 -0
  168. package/dist/roap/util.js.map +1 -0
  169. package/dist/rtcMetrics/constants.d.ts +4 -0
  170. package/dist/rtcMetrics/constants.js +11 -0
  171. package/dist/rtcMetrics/constants.js.map +1 -0
  172. package/dist/rtcMetrics/index.d.ts +61 -0
  173. package/dist/rtcMetrics/index.js +197 -0
  174. package/dist/rtcMetrics/index.js.map +1 -0
  175. package/dist/statsAnalyzer/global.d.ts +36 -0
  176. package/dist/statsAnalyzer/global.js +126 -0
  177. package/dist/statsAnalyzer/global.js.map +1 -0
  178. package/dist/statsAnalyzer/index.d.ts +217 -0
  179. package/dist/statsAnalyzer/index.js +1013 -0
  180. package/dist/statsAnalyzer/index.js.map +1 -0
  181. package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
  182. package/dist/statsAnalyzer/mqaUtil.js +179 -0
  183. package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
  184. package/dist/transcription/index.d.ts +64 -0
  185. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  186. package/dist/types/constants.d.ts +9 -2
  187. package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
  188. package/dist/types/meeting/brbState.d.ts +54 -0
  189. package/dist/types/meeting/index.d.ts +23 -0
  190. package/dist/types/meeting-info/meeting-info-v2.d.ts +3 -1
  191. package/dist/types/metrics/constants.d.ts +2 -0
  192. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  193. package/dist/types/reachability/index.d.ts +9 -1
  194. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  195. package/dist/types/rtcMetrics/index.d.ts +71 -0
  196. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  197. package/dist/types/statsAnalyzer/index.d.ts +217 -0
  198. package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
  199. package/dist/webinar/collection.d.ts +16 -0
  200. package/dist/webinar/index.d.ts +5 -0
  201. package/dist/webinar/index.js +1 -1
  202. package/package.json +23 -23
  203. package/src/constants.ts +10 -2
  204. package/src/locus-info/selfUtils.ts +5 -0
  205. package/src/media/MediaConnectionAwaiter.ts +2 -0
  206. package/src/media/properties.ts +34 -13
  207. package/src/meeting/brbState.ts +169 -0
  208. package/src/meeting/index.ts +112 -26
  209. package/src/meeting/muteState.ts +1 -6
  210. package/src/meeting-info/meeting-info-v2.ts +9 -1
  211. package/src/meeting-info/utilv2.ts +14 -2
  212. package/src/metrics/constants.ts +2 -0
  213. package/src/reachability/index.ts +29 -1
  214. package/test/unit/spec/locus-info/selfUtils.js +10 -0
  215. package/test/unit/spec/media/properties.ts +15 -0
  216. package/test/unit/spec/meeting/brbState.ts +114 -0
  217. package/test/unit/spec/meeting/index.js +92 -30
  218. package/test/unit/spec/meeting/muteState.js +0 -24
  219. package/test/unit/spec/meeting-info/utilv2.js +9 -0
  220. package/test/unit/spec/reachability/index.ts +120 -10
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
13
+ var _internalPluginMetrics = require("@webex/internal-plugin-metrics");
14
+ var _uuid = _interopRequireDefault(require("uuid"));
15
+ var _constants = _interopRequireDefault(require("./constants"));
16
+ /* eslint-disable class-methods-use-this */
17
+
18
+ var parseJsonPayload = function parseJsonPayload(payload) {
19
+ try {
20
+ if (payload && payload[0]) {
21
+ return JSON.parse(payload[0]);
22
+ }
23
+ return null;
24
+ } catch (_) {
25
+ return null;
26
+ }
27
+ };
28
+
29
+ /**
30
+ * Rtc Metrics
31
+ */
32
+ var RtcMetrics = exports.default = /*#__PURE__*/function () {
33
+ /**
34
+ * Initialize the interval.
35
+ *
36
+ * @param {object} webex - The main `webex` object.
37
+ * @param {string} meetingId - The meeting id.
38
+ * @param {string} correlationId - The correlation id.
39
+ */
40
+ function RtcMetrics(webex, meetingId, correlationId) {
41
+ (0, _classCallCheck2.default)(this, RtcMetrics);
42
+ /**
43
+ * Array of MetricData items to be sent to the metrics service.
44
+ */
45
+ (0, _defineProperty2.default)(this, "metricsQueue", []);
46
+ (0, _defineProperty2.default)(this, "intervalId", void 0);
47
+ (0, _defineProperty2.default)(this, "webex", void 0);
48
+ (0, _defineProperty2.default)(this, "meetingId", void 0);
49
+ (0, _defineProperty2.default)(this, "correlationId", void 0);
50
+ (0, _defineProperty2.default)(this, "connectionId", void 0);
51
+ (0, _defineProperty2.default)(this, "shouldSendMetricsOnNextStatsReport", void 0);
52
+ // `window` is used to prevent typescript from returning a NodeJS.Timer.
53
+ this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);
54
+ this.meetingId = meetingId;
55
+ this.webex = webex;
56
+ this.correlationId = correlationId;
57
+ this.resetConnection();
58
+ }
59
+
60
+ /**
61
+ * Check to see if the metrics queue has any items.
62
+ *
63
+ * @returns {void}
64
+ */
65
+ (0, _createClass2.default)(RtcMetrics, [{
66
+ key: "sendMetricsInQueue",
67
+ value: function sendMetricsInQueue() {
68
+ if (this.metricsQueue.length) {
69
+ this.sendMetrics();
70
+ this.metricsQueue = [];
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Forces sending metrics when we get the next stats-report
76
+ *
77
+ * This is useful for cases when something important happens that affects the media connection,
78
+ * for example when we move from lobby into the meeting.
79
+ *
80
+ * @returns {void}
81
+ */
82
+ }, {
83
+ key: "sendNextMetrics",
84
+ value: function sendNextMetrics() {
85
+ this.shouldSendMetricsOnNextStatsReport = true;
86
+ }
87
+
88
+ /**
89
+ * Add metrics items to the metrics queue.
90
+ *
91
+ * @param {object} data - An object with a payload array of metrics items.
92
+ *
93
+ * @returns {void}
94
+ */
95
+ }, {
96
+ key: "addMetrics",
97
+ value: function addMetrics(data) {
98
+ if (data.payload.length) {
99
+ if (data.name === 'stats-report') {
100
+ data.payload = data.payload.map(this.anonymizeIp);
101
+ }
102
+ this.metricsQueue.push(data);
103
+ if (this.shouldSendMetricsOnNextStatsReport && data.name === 'stats-report') {
104
+ // this is the first useful set of data (WCME gives it to us after 5s), send it out immediately
105
+ // in case the user is unhappy and closes the browser early
106
+ this.sendMetricsInQueue();
107
+ this.shouldSendMetricsOnNextStatsReport = false;
108
+ }
109
+ try {
110
+ // If a connection fails, send the rest of the metrics in queue and get a new connection id.
111
+ var parsedPayload = parseJsonPayload(data.payload);
112
+ if (data.name === 'onconnectionstatechange' && parsedPayload && parsedPayload.value === 'failed') {
113
+ this.sendMetricsInQueue();
114
+ this.resetConnection();
115
+ }
116
+ } catch (e) {
117
+ console.error(e);
118
+ }
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Clear the metrics interval.
124
+ *
125
+ * @returns {void}
126
+ */
127
+ }, {
128
+ key: "closeMetrics",
129
+ value: function closeMetrics() {
130
+ this.sendMetricsInQueue();
131
+ clearInterval(this.intervalId);
132
+ }
133
+
134
+ /**
135
+ * Anonymize IP addresses.
136
+ *
137
+ * @param {array} stats - An RTCStatsReport organized into an array of strings.
138
+ * @returns {string}
139
+ */
140
+ }, {
141
+ key: "anonymizeIp",
142
+ value: function anonymizeIp(stats) {
143
+ var data = JSON.parse(stats);
144
+ // on local and remote candidates, anonymize the last 4 bits.
145
+ if (data.type === 'local-candidate' || data.type === 'remote-candidate') {
146
+ data.ip = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;
147
+ data.address = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;
148
+ data.relatedAddress = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;
149
+ }
150
+ return (0, _stringify.default)(data);
151
+ }
152
+
153
+ /**
154
+ * Set a new connection id.
155
+ *
156
+ * @returns {void}
157
+ */
158
+ }, {
159
+ key: "resetConnection",
160
+ value: function resetConnection() {
161
+ this.connectionId = _uuid.default.v4();
162
+ this.shouldSendMetricsOnNextStatsReport = true;
163
+ }
164
+
165
+ /**
166
+ * Send metrics to the metrics service.
167
+ *
168
+ * @returns {void}
169
+ */
170
+ }, {
171
+ key: "sendMetrics",
172
+ value: function sendMetrics() {
173
+ this.webex.request({
174
+ method: 'POST',
175
+ service: 'unifiedTelemetry',
176
+ resource: 'metric/v2',
177
+ headers: {
178
+ type: 'webrtcMedia',
179
+ appId: _constants.default.APP_ID
180
+ },
181
+ body: {
182
+ metrics: [{
183
+ type: 'webrtc',
184
+ version: '1.1.0',
185
+ userId: this.webex.internal.device.userId,
186
+ meetingId: this.meetingId,
187
+ correlationId: this.correlationId,
188
+ connectionId: this.connectionId,
189
+ data: this.metricsQueue
190
+ }]
191
+ }
192
+ });
193
+ }
194
+ }]);
195
+ return RtcMetrics;
196
+ }();
197
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_internalPluginMetrics","require","_uuid","_interopRequireDefault","_constants","parseJsonPayload","payload","JSON","parse","_","RtcMetrics","exports","default","webex","meetingId","correlationId","_classCallCheck2","_defineProperty2","intervalId","window","setInterval","sendMetricsInQueue","bind","resetConnection","_createClass2","key","value","metricsQueue","length","sendMetrics","sendNextMetrics","shouldSendMetricsOnNextStatsReport","addMetrics","data","name","map","anonymizeIp","push","parsedPayload","e","console","error","closeMetrics","clearInterval","stats","type","ip","CallDiagnosticUtils","anonymizeIPAddress","undefined","address","relatedAddress","_stringify","connectionId","uuid","v4","request","method","service","resource","headers","appId","RTC_METRICS","APP_ID","body","metrics","version","userId","internal","device"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';\nimport uuid from 'uuid';\nimport RTC_METRICS from './constants';\n\nconst parseJsonPayload = (payload: any[]): any | null => {\n try {\n if (payload && payload[0]) {\n return JSON.parse(payload[0]);\n }\n\n return null;\n } catch (_) {\n return null;\n }\n};\n\n/**\n * Rtc Metrics\n */\nexport default class RtcMetrics {\n /**\n * Array of MetricData items to be sent to the metrics service.\n */\n metricsQueue = [];\n\n intervalId: number;\n\n webex: any;\n\n meetingId: string;\n\n correlationId: string;\n\n connectionId: string;\n\n shouldSendMetricsOnNextStatsReport: boolean;\n\n /**\n * Initialize the interval.\n *\n * @param {object} webex - The main `webex` object.\n * @param {string} meetingId - The meeting id.\n * @param {string} correlationId - The correlation id.\n */\n constructor(webex, meetingId, correlationId) {\n // `window` is used to prevent typescript from returning a NodeJS.Timer.\n this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);\n this.meetingId = meetingId;\n this.webex = webex;\n this.correlationId = correlationId;\n this.resetConnection();\n }\n\n /**\n * Check to see if the metrics queue has any items.\n *\n * @returns {void}\n */\n public sendMetricsInQueue() {\n if (this.metricsQueue.length) {\n this.sendMetrics();\n this.metricsQueue = [];\n }\n }\n\n /**\n * Forces sending metrics when we get the next stats-report\n *\n * This is useful for cases when something important happens that affects the media connection,\n * for example when we move from lobby into the meeting.\n *\n * @returns {void}\n */\n public sendNextMetrics() {\n this.shouldSendMetricsOnNextStatsReport = true;\n }\n\n /**\n * Add metrics items to the metrics queue.\n *\n * @param {object} data - An object with a payload array of metrics items.\n *\n * @returns {void}\n */\n addMetrics(data) {\n if (data.payload.length) {\n if (data.name === 'stats-report') {\n data.payload = data.payload.map(this.anonymizeIp);\n }\n\n this.metricsQueue.push(data);\n\n if (this.shouldSendMetricsOnNextStatsReport && data.name === 'stats-report') {\n // this is the first useful set of data (WCME gives it to us after 5s), send it out immediately\n // in case the user is unhappy and closes the browser early\n this.sendMetricsInQueue();\n this.shouldSendMetricsOnNextStatsReport = false;\n }\n\n try {\n // If a connection fails, send the rest of the metrics in queue and get a new connection id.\n const parsedPayload = parseJsonPayload(data.payload);\n if (\n data.name === 'onconnectionstatechange' &&\n parsedPayload &&\n parsedPayload.value === 'failed'\n ) {\n this.sendMetricsInQueue();\n this.resetConnection();\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n /**\n * Clear the metrics interval.\n *\n * @returns {void}\n */\n closeMetrics() {\n this.sendMetricsInQueue();\n clearInterval(this.intervalId);\n }\n\n /**\n * Anonymize IP addresses.\n *\n * @param {array} stats - An RTCStatsReport organized into an array of strings.\n * @returns {string}\n */\n anonymizeIp(stats: string): string {\n const data = JSON.parse(stats);\n // on local and remote candidates, anonymize the last 4 bits.\n if (data.type === 'local-candidate' || data.type === 'remote-candidate') {\n data.ip = CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;\n data.address = CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;\n data.relatedAddress =\n CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;\n }\n\n return JSON.stringify(data);\n }\n\n /**\n * Set a new connection id.\n *\n * @returns {void}\n */\n private resetConnection() {\n this.connectionId = uuid.v4();\n this.shouldSendMetricsOnNextStatsReport = true;\n }\n\n /**\n * Send metrics to the metrics service.\n *\n * @returns {void}\n */\n private sendMetrics() {\n this.webex.request({\n method: 'POST',\n service: 'unifiedTelemetry',\n resource: 'metric/v2',\n headers: {\n type: 'webrtcMedia',\n appId: RTC_METRICS.APP_ID,\n },\n body: {\n metrics: [\n {\n type: 'webrtc',\n version: '1.1.0',\n userId: this.webex.internal.device.userId,\n meetingId: this.meetingId,\n correlationId: this.correlationId,\n connectionId: this.connectionId,\n data: this.metricsQueue,\n },\n ],\n },\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ declare const STATS_DEFAULT: {
2
+ encryption: string;
3
+ bandwidth: {
4
+ systemBandwidth: number;
5
+ sentPerSecond: number;
6
+ encodedPerSecond: number;
7
+ helper: {
8
+ audioBytesSent: number;
9
+ videoBytestSent: number;
10
+ };
11
+ speed: number;
12
+ };
13
+ results: {};
14
+ connectionType: {
15
+ systemNetworkType: string;
16
+ systemIpAddress: string;
17
+ local: {
18
+ candidateType: any[];
19
+ transport: any[];
20
+ ipAddress: any[];
21
+ networkType: any[];
22
+ };
23
+ remote: {
24
+ candidateType: any[];
25
+ transport: any[];
26
+ ipAddress: any[];
27
+ networkType: any[];
28
+ };
29
+ };
30
+ resolutions: {};
31
+ internal: {
32
+ remote: {};
33
+ candidates: {};
34
+ };
35
+ };
36
+ export default STATS_DEFAULT;
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var STATS_DEFAULT = {
9
+ encryption: 'sha-256',
10
+ audio: {
11
+ send: {
12
+ maxPacketLossRatio: 0,
13
+ availableBandwidth: 0,
14
+ bytesSent: 0,
15
+ meanRemoteJitter: [],
16
+ meanRoundTripTime: []
17
+ },
18
+ recv: {
19
+ availableBandwidth: 0,
20
+ bytesReceived: 0,
21
+ meanRtpJitter: [],
22
+ meanRoundTripTime: []
23
+ }
24
+ },
25
+ video: {
26
+ send: {
27
+ maxPacketLossRatio: 0,
28
+ availableBandwidth: 0,
29
+ meanRemoteJitter: [],
30
+ meanRoundTripTime: []
31
+ },
32
+ recv: {
33
+ availableBandwidth: 0,
34
+ totalPacketsLost: 0,
35
+ meanRtpJitter: [],
36
+ meanRoundTripTime: []
37
+ },
38
+ latency: 0,
39
+ packetsLost: 0
40
+ },
41
+ share: {
42
+ send: {
43
+ maxPacketLossRatio: 0,
44
+ availableBandwidth: 0,
45
+ totalPacketsLost: 0,
46
+ meanRemoteJitter: [],
47
+ meanRoundTripTime: []
48
+ },
49
+ recv: {
50
+ availableBandwidth: 0,
51
+ meanRtpJitter: [],
52
+ meanRoundTripTime: []
53
+ },
54
+ latency: 0,
55
+ packetsLost: 0
56
+ },
57
+ bandwidth: {
58
+ systemBandwidth: 0,
59
+ sentPerSecond: 0,
60
+ encodedPerSecond: 0,
61
+ helper: {
62
+ audioBytesSent: 0,
63
+ videoBytestSent: 0
64
+ },
65
+ speed: 0
66
+ },
67
+ results: {},
68
+ connectionType: {
69
+ systemNetworkType: 'unknown',
70
+ systemIpAddress: '0.0.0.0',
71
+ local: {
72
+ candidateType: [],
73
+ transport: [],
74
+ ipAddress: [],
75
+ networkType: []
76
+ },
77
+ remote: {
78
+ candidateType: [],
79
+ transport: [],
80
+ ipAddress: [],
81
+ networkType: []
82
+ }
83
+ },
84
+ resolutions: {
85
+ video: {
86
+ send: {
87
+ width: 0,
88
+ height: 0,
89
+ framesSent: 0
90
+ },
91
+ recv: {
92
+ width: 0,
93
+ height: 0
94
+ }
95
+ },
96
+ share: {
97
+ send: {
98
+ width: 0,
99
+ height: 0,
100
+ framesSent: 0
101
+ },
102
+ recv: {
103
+ width: 0,
104
+ height: 0
105
+ }
106
+ }
107
+ },
108
+ internal: {
109
+ audio: {
110
+ send: {},
111
+ recv: {}
112
+ },
113
+ video: {
114
+ send: {},
115
+ recv: {}
116
+ },
117
+ share: {
118
+ send: {},
119
+ recv: {}
120
+ },
121
+ remote: {},
122
+ candidates: {}
123
+ }
124
+ };
125
+ var _default = exports.default = STATS_DEFAULT;
126
+ //# sourceMappingURL=global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["STATS_DEFAULT","encryption","audio","send","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","framesSent","internal","candidates","_default","exports","default"],"sources":["global.ts"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n },\n video: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n latency: 0,\n packetsLost: 0,\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n\n latency: 0,\n packetsLost: 0,\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0,\n },\n speed: 0,\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n },\n resolutions: {\n video: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n share: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n },\n internal: {\n audio: {\n send: {},\n recv: {},\n },\n video: {\n send: {},\n recv: {},\n },\n share: {\n send: {},\n recv: {},\n },\n remote: {},\n candidates: {},\n },\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,217 @@
1
+ /// <reference types="node" />
2
+ import EventsScope from '../common/events/events-scope';
3
+ import { ReceiveSlot } from '../multistream/receiveSlot';
4
+ export declare const EVENTS: {
5
+ MEDIA_QUALITY: string;
6
+ LOCAL_MEDIA_STARTED: string;
7
+ LOCAL_MEDIA_STOPPED: string;
8
+ REMOTE_MEDIA_STARTED: string;
9
+ REMOTE_MEDIA_STOPPED: string;
10
+ };
11
+ type ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;
12
+ type MediaStatus = {
13
+ actual?: any;
14
+ expected?: any;
15
+ };
16
+ /**
17
+ * Stats Analyzer class that will emit events based on detected quality
18
+ *
19
+ * @export
20
+ * @class StatsAnalyzer
21
+ * @extends {EventsScope}
22
+ */
23
+ export declare class StatsAnalyzer extends EventsScope {
24
+ config: any;
25
+ correlationId: any;
26
+ lastEmittedStartStopEvent: any;
27
+ lastMqaDataSent: any;
28
+ lastStatsResults: any;
29
+ meetingMediaStatus: any;
30
+ mqaInterval: NodeJS.Timeout;
31
+ mqaSentCount: any;
32
+ networkQualityMonitor: any;
33
+ mediaConnection: any;
34
+ statsInterval: NodeJS.Timeout;
35
+ statsResults: any;
36
+ statsStarted: any;
37
+ successfulCandidatePair: any;
38
+ localIpAddress: string;
39
+ receiveSlotCallback: ReceiveSlotCallback;
40
+ /**
41
+ * Creates a new instance of StatsAnalyzer
42
+ * @constructor
43
+ * @public
44
+ * @param {Object} config SDK Configuration Object
45
+ * @param {Function} receiveSlotCallback Callback used to access receive slots.
46
+ * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
47
+ * @param {Object} statsResults Default properties for stats
48
+ */
49
+ constructor(config: any, receiveSlotCallback?: ReceiveSlotCallback, networkQualityMonitor?: object, statsResults?: object);
50
+ /**
51
+ * Resets cumulative stats arrays.
52
+ *
53
+ * @public
54
+ * @memberof StatsAnalyzer
55
+ * @returns {void}
56
+ */
57
+ resetStatsResults(): void;
58
+ /**
59
+ * sets mediaStatus status for analyzing metrics
60
+ *
61
+ * @public
62
+ * @param {Object} status for the audio and video
63
+ * @memberof StatsAnalyzer
64
+ * @returns {void}
65
+ */
66
+ updateMediaStatus(status: MediaStatus): void;
67
+ /**
68
+ * captures MQA data from media connection
69
+ *
70
+ * @public
71
+ * @memberof StatsAnalyzer
72
+ * @returns {void}
73
+ */
74
+ sendMqaData(): void;
75
+ /**
76
+ * updated the media connection when changed
77
+ *
78
+ * @private
79
+ * @memberof StatsAnalyzer
80
+ * @param {RoapMediaConnection} mediaConnection
81
+ * @returns {void}
82
+ */
83
+ updateMediaConnection(mediaConnection: any): void;
84
+ /**
85
+ * Returns the local IP address for diagnostics.
86
+ * this is the local IP of the interface used for the current media connection
87
+ * a host can have many local Ip Addresses
88
+ * @returns {string | undefined} The local IP address.
89
+ */
90
+ getLocalIpAddress(): string;
91
+ /**
92
+ * Starts the stats analyzer on interval
93
+ *
94
+ * @public
95
+ * @memberof StatsAnalyzer
96
+ * @param {RoapMediaConnection} mediaConnection
97
+ * @returns {Promise}
98
+ */
99
+ startAnalyzer(mediaConnection: any): any;
100
+ /**
101
+ * Cleans up the analyzer when done
102
+ *
103
+ * @public
104
+ * @memberof StatsAnalyzer
105
+ * @returns {void}
106
+ */
107
+ stopAnalyzer(): any;
108
+ /**
109
+ * Parse a single result of get stats
110
+ *
111
+ * @private
112
+ * @param {*} getStatsResult
113
+ * @param {String} type
114
+ * @param {boolean} isSender
115
+ * @returns {void}
116
+ * @memberof StatsAnalyzer
117
+ */
118
+ private parseGetStatsResult;
119
+ /**
120
+ * Filters the get stats results for types
121
+ * @private
122
+ * @param {Array} statsItem
123
+ * @param {String} type
124
+ * @param {boolean} isSender
125
+ * @returns {void}
126
+ */
127
+ filterAndParseGetStatsResults(statsItem: any, type: string, isSender: boolean): void;
128
+ /**
129
+ * parse the audio
130
+ * @param {String} result
131
+ * @param {boolean} type
132
+ * @returns {void}
133
+ */
134
+ parseAudioSource(result: any, type: any): void;
135
+ /**
136
+ * emits started/stopped events for local/remote media by checking
137
+ * if given values are increasing or not. The previousValue, currentValue
138
+ * params can be any numerical value like number of receive packets or
139
+ * decoded frames, etc.
140
+ *
141
+ * @private
142
+ * @param {string} mediaType
143
+ * @param {number} previousValue - value to compare
144
+ * @param {number} currentValue - value to compare (must be same type of value as previousValue)
145
+ * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received
146
+ * @memberof StatsAnalyzer
147
+ * @returns {void}
148
+ */
149
+ emitStartStopEvents: (mediaType: string, previousValue: number, currentValue: number, isLocal: boolean) => void;
150
+ /**
151
+ * compares current and previous stats to check if packets are not sent
152
+ *
153
+ * @private
154
+ * @memberof StatsAnalyzer
155
+ * @returns {void}
156
+ */
157
+ private compareLastStatsResult;
158
+ /**
159
+ * Does a `getStats` on all the transceivers and parses the results
160
+ *
161
+ * @private
162
+ * @memberof StatsAnalyzer
163
+ * @returns {Promise}
164
+ */
165
+ private getStatsAndParse;
166
+ /**
167
+ * Processes OutboundRTP stats result and stores
168
+ * @private
169
+ * @param {*} result
170
+ * @param {*} mediaType
171
+ * @returns {void}
172
+ */
173
+ private processOutboundRTPResult;
174
+ /**
175
+ * Processes InboundRTP stats result and stores
176
+ * @private
177
+ * @param {*} result
178
+ * @param {*} mediaType
179
+ * @returns {void}
180
+ */
181
+ private processInboundRTPResult;
182
+ /**
183
+ * extracts the local Ip address from the statsResult object by looking at stats results candidates
184
+ * and matches that ID with the successful candidate pair. It looks at the type of local candidate it is
185
+ * and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc
186
+ * note, there are known incompatibilities and it is possible for this to set undefined, or for the IP address to be the public IP address
187
+ * for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP
188
+ * @private
189
+ * @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
190
+ * @param {Object} candidates - the stats result candidates
191
+ * @returns {void}
192
+ */
193
+ extractAndSetLocalIpAddressInfoForDiagnostics: (successfulCandidatePairId: string, candidates: {
194
+ [key: string]: Record<string, unknown>;
195
+ }) => void;
196
+ /**
197
+ * Processes remote and local candidate result and stores
198
+ * @private
199
+ * @param {*} result
200
+ * @param {*} type
201
+ * @param {boolean} isSender
202
+ * @param {boolean} isRemote
203
+ *
204
+ * @returns {void}
205
+ */
206
+ parseCandidate: (result: any, type: any, isSender: boolean, isRemote: boolean) => void;
207
+ /**
208
+ *
209
+ * @private
210
+ * @param {*} result
211
+ * @param {*} type
212
+ * @returns {void}
213
+ * @memberof StatsAnalyzer
214
+ */
215
+ compareSentAndReceived(result: any, type: any): void;
216
+ }
217
+ export {};