@webex/plugin-meetings 3.5.0 → 3.6.0-next.10

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 (83) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/common/errors/webinar-registration-error.js +50 -0
  4. package/dist/common/errors/webinar-registration-error.js.map +1 -0
  5. package/dist/config.js +4 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.js +8 -0
  8. package/dist/constants.js.map +1 -1
  9. package/dist/index.js +7 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/interpretation/index.js +1 -1
  12. package/dist/interpretation/siLanguage.js +1 -1
  13. package/dist/locus-info/parser.js +5 -1
  14. package/dist/locus-info/parser.js.map +1 -1
  15. package/dist/media/index.js +3 -1
  16. package/dist/media/index.js.map +1 -1
  17. package/dist/meeting/in-meeting-actions.js +3 -1
  18. package/dist/meeting/in-meeting-actions.js.map +1 -1
  19. package/dist/meeting/index.js +185 -103
  20. package/dist/meeting/index.js.map +1 -1
  21. package/dist/meeting/muteState.js +5 -2
  22. package/dist/meeting/muteState.js.map +1 -1
  23. package/dist/meeting/util.js +8 -10
  24. package/dist/meeting/util.js.map +1 -1
  25. package/dist/meeting-info/meeting-info-v2.js +68 -17
  26. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  27. package/dist/meetings/index.js +102 -27
  28. package/dist/meetings/index.js.map +1 -1
  29. package/dist/metrics/constants.js +2 -1
  30. package/dist/metrics/constants.js.map +1 -1
  31. package/dist/multistream/remoteMedia.js +4 -0
  32. package/dist/multistream/remoteMedia.js.map +1 -1
  33. package/dist/roap/request.js +1 -1
  34. package/dist/roap/request.js.map +1 -1
  35. package/dist/types/common/errors/webinar-registration-error.d.ts +14 -0
  36. package/dist/types/config.d.ts +2 -0
  37. package/dist/types/constants.d.ts +8 -1
  38. package/dist/types/index.d.ts +2 -1
  39. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  40. package/dist/types/meeting/index.d.ts +11 -0
  41. package/dist/types/meeting/muteState.d.ts +2 -1
  42. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  43. package/dist/types/meetings/index.d.ts +43 -2
  44. package/dist/types/metrics/constants.d.ts +1 -0
  45. package/dist/types/multistream/remoteMedia.d.ts +1 -0
  46. package/dist/webinar/index.js +1 -1
  47. package/package.json +22 -22
  48. package/src/common/errors/webinar-registration-error.ts +27 -0
  49. package/src/config.ts +3 -0
  50. package/src/constants.ts +7 -0
  51. package/src/index.ts +2 -0
  52. package/src/locus-info/parser.ts +8 -1
  53. package/src/media/index.ts +4 -1
  54. package/src/meeting/in-meeting-actions.ts +3 -0
  55. package/src/meeting/index.ts +82 -13
  56. package/src/meeting/muteState.ts +6 -2
  57. package/src/meeting/util.ts +27 -31
  58. package/src/meeting-info/meeting-info-v2.ts +51 -0
  59. package/src/meetings/index.ts +129 -38
  60. package/src/metrics/constants.ts +1 -0
  61. package/src/multistream/remoteMedia.ts +5 -0
  62. package/src/roap/request.ts +3 -1
  63. package/test/unit/spec/locus-info/index.js +29 -0
  64. package/test/unit/spec/media/index.ts +4 -0
  65. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  66. package/test/unit/spec/meeting/index.js +118 -18
  67. package/test/unit/spec/meeting/muteState.js +8 -4
  68. package/test/unit/spec/meeting/utils.js +50 -85
  69. package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
  70. package/test/unit/spec/meetings/index.js +128 -13
  71. package/test/unit/spec/multistream/remoteMedia.ts +16 -2
  72. package/dist/networkQualityMonitor/index.js +0 -227
  73. package/dist/networkQualityMonitor/index.js.map +0 -1
  74. package/dist/rtcMetrics/constants.js +0 -11
  75. package/dist/rtcMetrics/constants.js.map +0 -1
  76. package/dist/rtcMetrics/index.js +0 -197
  77. package/dist/rtcMetrics/index.js.map +0 -1
  78. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  79. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  80. package/dist/types/rtcMetrics/index.d.ts +0 -71
  81. package/src/rtcMetrics/constants.ts +0 -3
  82. package/src/rtcMetrics/index.ts +0 -186
  83. package/test/unit/spec/rtcMetrics/index.ts +0 -154
@@ -8,6 +8,7 @@ import {Crypto} from '@peculiar/webcrypto';
8
8
  global.crypto = new Crypto();
9
9
 
10
10
  import Device from '@webex/internal-plugin-device';
11
+ import {CatalogDetails} from '@webex/internal-plugin-device';
11
12
  import Mercury from '@webex/internal-plugin-mercury';
12
13
  import {assert} from '@webex/test-helper-chai';
13
14
  import MockWebex from '@webex/test-helper-mock-webex';
@@ -128,6 +129,11 @@ describe('plugin-meetings', () => {
128
129
 
129
130
  Object.assign(webex, {
130
131
  logger,
132
+ people: {
133
+ _getMe: sinon.stub().resolves({
134
+ type: 'validuser',
135
+ }),
136
+ }
131
137
  });
132
138
 
133
139
  startReachabilityStub = sinon.stub(webex.meetings, 'startReachability').resolves();
@@ -196,6 +202,43 @@ describe('plugin-meetings', () => {
196
202
  assert.calledOnce(MeetingsUtil.checkH264Support);
197
203
  });
198
204
 
205
+ describe('#getBasicMeetingInformation', () => {
206
+ beforeEach(() => {
207
+ sinon.stub(MeetingUtil, 'cleanUp');
208
+ });
209
+
210
+ it('returns correct meeting information', async () => {
211
+ const meeting = await webex.meetings.createMeeting('test', 'test');
212
+
213
+ const meetingIds = {
214
+ meetingId: meeting.id,
215
+ correlationId: meeting.correlationId,
216
+ };
217
+
218
+ // before meeting is destroyed - it should return information from the meetingCollection
219
+ assert.equal(
220
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).id,
221
+ meetingIds.meetingId
222
+ );
223
+ assert.equal(
224
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).correlationId,
225
+ meetingIds.correlationId
226
+ );
227
+
228
+ webex.meetings.destroy(meeting, test1);
229
+
230
+ // and it should still return the information after the meeting is destroyed
231
+ assert.equal(
232
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).id,
233
+ meetingIds.meetingId
234
+ );
235
+ assert.equal(
236
+ webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).correlationId,
237
+ meetingIds.correlationId
238
+ );
239
+ });
240
+ });
241
+
199
242
  describe('#startReachability', () => {
200
243
  let gatherReachabilitySpy;
201
244
  let fakeResult = {id: 'fake-result'};
@@ -302,6 +345,22 @@ describe('plugin-meetings', () => {
302
345
  });
303
346
  });
304
347
 
348
+ describe('#_toggleIpv6BackendNativeSupport', () => {
349
+ it('should have _toggleIpv6BackendNativeSupport', () => {
350
+ assert.equal(typeof webex.meetings._toggleIpv6BackendNativeSupport, 'function');
351
+ });
352
+
353
+ describe('success', () => {
354
+ it('should update meetings config accordingly', () => {
355
+ webex.meetings._toggleIpv6BackendNativeSupport(true);
356
+ assert.equal(webex.meetings.config.backendIpv6NativeSupport, true);
357
+
358
+ webex.meetings._toggleIpv6BackendNativeSupport(false);
359
+ assert.equal(webex.meetings.config.backendIpv6NativeSupport, false);
360
+ });
361
+ });
362
+ });
363
+
305
364
  describe('Public API Contracts', () => {
306
365
  describe('#register', () => {
307
366
  it('emits an event and resolves when register succeeds', async () => {
@@ -346,12 +405,21 @@ describe('plugin-meetings', () => {
346
405
  webex.canAuthorize = true;
347
406
  webex.meetings.registered = false;
348
407
  await webex.meetings.register();
349
- assert.called(webex.internal.device.register);
408
+ assert.calledOnceWithExactly(webex.internal.device.register, undefined);
350
409
  assert.called(webex.internal.services.getMeetingPreferences);
351
410
  assert.called(webex.internal.services.fetchClientRegionInfo);
352
411
  assert.called(webex.internal.mercury.connect);
353
412
  assert.isTrue(webex.meetings.registered);
354
413
  });
414
+
415
+ it('passes on the device registration options', async () => {
416
+ webex.canAuthorize = true;
417
+ webex.meetings.registered = false;
418
+ await webex.meetings.register({includeDetails: CatalogDetails.features});
419
+ assert.calledOnceWithExactly(webex.internal.device.register, {
420
+ includeDetails: CatalogDetails.features,
421
+ });
422
+ });
355
423
  });
356
424
 
357
425
  describe('#unregister', () => {
@@ -753,14 +821,16 @@ describe('plugin-meetings', () => {
753
821
 
754
822
  const FAKE_USE_RANDOM_DELAY = true;
755
823
  const correlationId = 'my-correlationId';
824
+ const sessionCorrelationId = 'my-session-correlationId';
756
825
  const callStateForMetrics = {
826
+ sessionCorrelationId: 'my-session-correlationId2',
757
827
  correlationId: 'my-correlationId2',
758
828
  joinTrigger: 'my-join-trigger',
759
829
  loginType: 'my-login-type',
760
830
  };
761
831
 
762
- it('should call setCallStateForMetrics on any pre-existing meeting', async () => {
763
- const fakeMeeting = {setCallStateForMetrics: sinon.mock()};
832
+ it('should call updateCallStateForMetrics on any pre-existing meeting', async () => {
833
+ const fakeMeeting = {updateCallStateForMetrics: sinon.mock()};
764
834
  webex.meetings.meetingCollection.getByKey = sinon.stub().returns(fakeMeeting);
765
835
  await webex.meetings.create(
766
836
  test1,
@@ -769,11 +839,15 @@ describe('plugin-meetings', () => {
769
839
  {},
770
840
  correlationId,
771
841
  true,
772
- callStateForMetrics
842
+ callStateForMetrics,
843
+ undefined,
844
+ undefined,
845
+ sessionCorrelationId
773
846
  );
774
- assert.calledOnceWithExactly(fakeMeeting.setCallStateForMetrics, {
847
+ assert.calledOnceWithExactly(fakeMeeting.updateCallStateForMetrics, {
775
848
  ...callStateForMetrics,
776
849
  correlationId,
850
+ sessionCorrelationId,
777
851
  });
778
852
  });
779
853
 
@@ -814,13 +888,14 @@ describe('plugin-meetings', () => {
814
888
  undefined,
815
889
  meetingInfo,
816
890
  'meetingLookupURL',
891
+ sessionCorrelationId,
817
892
  ],
818
893
  [
819
894
  test1,
820
895
  test2,
821
896
  FAKE_USE_RANDOM_DELAY,
822
897
  {},
823
- {correlationId},
898
+ {correlationId, sessionCorrelationId},
824
899
  true,
825
900
  meetingInfo,
826
901
  'meetingLookupURL',
@@ -1719,6 +1794,7 @@ describe('plugin-meetings', () => {
1719
1794
  const expectedMeetingData = {
1720
1795
  correlationId: 'my-correlationId',
1721
1796
  callStateForMetrics: {
1797
+ sessionCorrelationId: '',
1722
1798
  correlationId: 'my-correlationId',
1723
1799
  joinTrigger: 'my-join-trigger',
1724
1800
  loginType: 'my-login-type',
@@ -1812,7 +1888,10 @@ describe('plugin-meetings', () => {
1812
1888
  });
1813
1889
 
1814
1890
  it('creates the meeting avoiding meeting info fetch by passing type as DESTINATION_TYPE.ONE_ON_ONE_CALL', async () => {
1815
- const meeting = await webex.meetings.createMeeting('test destination', DESTINATION_TYPE.ONE_ON_ONE_CALL);
1891
+ const meeting = await webex.meetings.createMeeting(
1892
+ 'test destination',
1893
+ DESTINATION_TYPE.ONE_ON_ONE_CALL
1894
+ );
1816
1895
 
1817
1896
  assert.instanceOf(
1818
1897
  meeting,
@@ -1822,7 +1901,6 @@ describe('plugin-meetings', () => {
1822
1901
 
1823
1902
  assert.notCalled(webex.meetings.meetingInfo.fetchMeetingInfo);
1824
1903
  });
1825
-
1826
1904
  });
1827
1905
 
1828
1906
  describe('rejected MeetingInfo.#fetchMeetingInfo - does not log for known Error types', () => {
@@ -1896,17 +1974,23 @@ describe('plugin-meetings', () => {
1896
1974
  assert.exists(webex.meetings.destroy);
1897
1975
  });
1898
1976
  describe('correctly established meeting', () => {
1977
+ let deleteSpy;
1899
1978
  beforeEach(() => {
1900
- webex.meetings.meetingCollection.delete = sinon.stub().returns(true);
1979
+ deleteSpy = sinon.spy(webex.meetings.meetingCollection, 'delete');
1901
1980
  });
1902
1981
 
1903
- it('tests the destroy removal from the collection', async () => {
1982
+ it('tests the destroy removal from the collection and storing basic info in deletedMeetings', async () => {
1904
1983
  const meeting = await webex.meetings.createMeeting('test', 'test');
1905
1984
 
1985
+ const meetingIds = {
1986
+ meetingId: meeting.id,
1987
+ correlationId: meeting.correlationId,
1988
+ };
1989
+
1906
1990
  webex.meetings.destroy(meeting, test1);
1907
1991
 
1908
- assert.calledOnce(webex.meetings.meetingCollection.delete);
1909
- assert.calledWith(webex.meetings.meetingCollection.delete, meeting.id);
1992
+ assert.calledOnce(deleteSpy);
1993
+ assert.calledWith(deleteSpy, meeting.id);
1910
1994
  assert.calledWith(
1911
1995
  TriggerProxy.trigger,
1912
1996
  sinon.match.instanceOf(Meetings),
@@ -1920,6 +2004,23 @@ describe('plugin-meetings', () => {
1920
2004
  reason: test1,
1921
2005
  }
1922
2006
  );
2007
+
2008
+ // check that the meeting is stored in deletedMeetings and removed from meetingCollection
2009
+ assert.equal(webex.meetings.deletedMeetings.get(meeting.id).id, meetingIds.meetingId);
2010
+ assert.equal(
2011
+ webex.meetings.deletedMeetings.get(meeting.id).correlationId,
2012
+ meetingIds.correlationId
2013
+ );
2014
+
2015
+ assert.equal(webex.meetings.meetingCollection.get(meeting.id), undefined);
2016
+
2017
+ // and that getBasicMeetingInformation() still returns the meeting info
2018
+ const deletedMeetingInfo = webex.meetings.getBasicMeetingInformation(
2019
+ meetingIds.meetingId
2020
+ );
2021
+
2022
+ assert.equal(deletedMeetingInfo.id, meetingIds.meetingId);
2023
+ assert.equal(deletedMeetingInfo.correlationId, meetingIds.correlationId);
1923
2024
  });
1924
2025
  });
1925
2026
 
@@ -1976,7 +2077,7 @@ describe('plugin-meetings', () => {
1976
2077
  ]);
1977
2078
  });
1978
2079
 
1979
- const setup = ({user} = {}) => {
2080
+ const setup = ({me = { type: 'validuser'}, user} = {}) => {
1980
2081
  loggerProxySpy = sinon.spy(LoggerProxy.logger, 'error');
1981
2082
  assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
1982
2083
 
@@ -1989,8 +2090,22 @@ describe('plugin-meetings', () => {
1989
2090
  Object.assign(webex.internal.services, {
1990
2091
  getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
1991
2092
  });
2093
+
2094
+ Object.assign(webex.people, {
2095
+ _getMe: sinon.stub().returns(Promise.resolve(me)),
2096
+ });
1992
2097
  };
1993
2098
 
2099
+ it('should not call request.getMeetingPreferences if user is a guest', async () => {
2100
+ setup({me: {type: 'appuser'}});
2101
+
2102
+ await webex.meetings.fetchUserPreferredWebexSite();
2103
+
2104
+ assert.equal(webex.meetings.preferredWebexSite, '');
2105
+ assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
2106
+ assert.notCalled(webex.internal.services.getMeetingPreferences);
2107
+ });
2108
+
1994
2109
  it('should not fail if UserPreferred info is not fetched ', async () => {
1995
2110
  setup();
1996
2111
 
@@ -7,7 +7,7 @@ import {RemoteMedia, RemoteMediaEvents} from '@webex/plugin-meetings/src/multist
7
7
  import {ReceiveSlotEvents} from '@webex/plugin-meetings/src/multistream/receiveSlot';
8
8
  import sinon from 'sinon';
9
9
  import {assert} from '@webex/test-helper-chai';
10
- import { forEach } from 'lodash';
10
+ import {forEach} from 'lodash';
11
11
 
12
12
  describe('RemoteMedia', () => {
13
13
  let remoteMedia;
@@ -227,12 +227,26 @@ describe('RemoteMedia', () => {
227
227
  });
228
228
 
229
229
  describe('setSizeHint()', () => {
230
-
231
230
  it('works if the receive slot is undefined', () => {
232
231
  remoteMedia.receiveSlot = undefined;
233
232
  remoteMedia.setSizeHint(100, 100);
234
233
  });
235
234
 
235
+ forEach(
236
+ [
237
+ {width: 0, height: 0},
238
+ {width: 135, height: 0},
239
+ {width: 0, height: 240},
240
+ ],
241
+ ({width, height}) => {
242
+ it(`skip updating the max fs when applied ${width}:${height}`, () => {
243
+ remoteMedia.setSizeHint(width, height);
244
+
245
+ assert.notCalled(fakeReceiveSlot.setMaxFs);
246
+ });
247
+ }
248
+ );
249
+
236
250
  forEach(
237
251
  [
238
252
  {height: 134, fs: 60},
@@ -1,227 +0,0 @@
1
- "use strict";
2
-
3
- var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
- var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
- _Object$defineProperty(exports, "__esModule", {
7
- value: true
8
- });
9
- exports.default = void 0;
10
- var _freeze = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/freeze"));
11
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
13
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
15
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
16
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
17
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
18
- var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
19
- var _constants = require("../constants");
20
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
21
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
22
- /**
23
- * Meeting - network quality event
24
- * Emitted on each interval of retrieving stats Analyzer data
25
- * @event network:quality
26
- * @type {Object}
27
- * @property {string} mediaType {video|audio}
28
- * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality
29
- * @memberof NetworkQualityMonitor
30
- */
31
- /**
32
- * NetworkQualityMonitor class that will emit events based on detected quality
33
- *
34
- * @class NetworkQualityMonitor
35
- * @extends {EventsScope}
36
- */
37
- var NetworkQualityMonitor = exports.default = /*#__PURE__*/function (_EventsScope) {
38
- (0, _inherits2.default)(NetworkQualityMonitor, _EventsScope);
39
- var _super = _createSuper(NetworkQualityMonitor);
40
- /**
41
- * Creates a new instance of NetworkQualityMonitor
42
- * @constructor
43
- * @public
44
- * @param {Object} config
45
- * @property {Object} indicatorTypes - network properties used to evaluate network quality used as constants
46
- * @property {Object} frequencyTypes - frequency properties used as constants {uplink|send} {downlink|receive}
47
- * @property {number} networkQualityScore - 0|1 1 is acceptable 0 is bad/unknown
48
- * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes
49
- * @property {string} mediaType - audio|video
50
- */
51
- function NetworkQualityMonitor(config) {
52
- var _this;
53
- (0, _classCallCheck2.default)(this, NetworkQualityMonitor);
54
- _this = _super.call(this);
55
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
56
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "frequencyTypes", void 0);
57
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "indicatorTypes", void 0);
58
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaType", void 0);
59
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "networkQualityScore", void 0);
60
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "networkQualityStatus", void 0);
61
- _this.config = config;
62
- _this.indicatorTypes = (0, _freeze.default)({
63
- PACKETLOSS: 'packetLoss',
64
- LATENCY: 'latency',
65
- JITTER: 'jitter'
66
- });
67
- _this.frequencyTypes = (0, _freeze.default)({
68
- UPLINK: 'uplink',
69
- DOWNLINK: 'downlink'
70
- });
71
- _this.networkQualityScore = 1;
72
- _this.networkQualityStatus = (0, _defineProperty2.default)({}, _this.frequencyTypes.UPLINK, {});
73
- _this.mediaType = null;
74
- return _this;
75
- }
76
-
77
- /**
78
- * emits NETWORK_QUALITY event on meeting with payload of media type and uplinkNetworkQuality score
79
- *
80
- * @memberof NetworkQualityMonitor
81
- * @returns {void}
82
- */
83
- (0, _createClass2.default)(NetworkQualityMonitor, [{
84
- key: "emitNetworkQuality",
85
- value: function emitNetworkQuality() {
86
- this.emit({
87
- file: 'networkQualityMonitor',
88
- function: 'emitNetworkQuality'
89
- }, _constants.EVENT_TRIGGERS.NETWORK_QUALITY, {
90
- mediaType: this.mediaType,
91
- networkQualityScore: this.networkQualityScore
92
- });
93
- }
94
-
95
- /**
96
- * invokes emitNetworkQuality method resets values back to default
97
- * @returns {void}
98
- * @memberof NetworkQualityMonitor
99
- */
100
- }, {
101
- key: "updateNetworkQualityStatus",
102
- value: function updateNetworkQualityStatus() {
103
- this.emitNetworkQuality();
104
-
105
- // reset values
106
- this.networkQualityScore = 1;
107
- this.mediaType = null;
108
- }
109
-
110
- /**
111
- * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp
112
- * @param {Object} configObj
113
- * @param {string} configObj.mediaType {audio|video}
114
- * @param {RTCStats} configObj.remoteRtpResults RTC stats remote obj
115
- * @param {Object} configObj.statsAnalyzerCurrentStats statsResults
116
- * @returns {void}
117
- * @public
118
- * @memberof NetworkQualityMonitor
119
- */
120
- }, {
121
- key: "determineUplinkNetworkQuality",
122
- value: function determineUplinkNetworkQuality(_ref) {
123
- var _this2 = this;
124
- var mediaType = _ref.mediaType,
125
- remoteRtpResults = _ref.remoteRtpResults,
126
- statsAnalyzerCurrentStats = _ref.statsAnalyzerCurrentStats;
127
- var roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;
128
- var jitterInMilliseconds = remoteRtpResults.jitter * 1000;
129
- var currentPacketLossRatio = statsAnalyzerCurrentStats[mediaType].send.currentPacketLossRatio;
130
- this.mediaType = mediaType;
131
- var _this$indicatorTypes = this.indicatorTypes,
132
- JITTER = _this$indicatorTypes.JITTER,
133
- PACKETLOSS = _this$indicatorTypes.PACKETLOSS,
134
- LATENCY = _this$indicatorTypes.LATENCY;
135
- var UPLINK = this.frequencyTypes.UPLINK;
136
-
137
- /**
138
- * determines if packetLoss ratio is over threshold set in config
139
- * sets networkQualityScore to 0 if over threshold
140
- * @returns {boolean}
141
- */
142
- var determinePacketLoss = function determinePacketLoss() {
143
- if (currentPacketLossRatio > _this2.config.videoPacketLossRatioThreshold) {
144
- _this2.networkQualityScore = 0;
145
- return false;
146
- }
147
- return true;
148
- };
149
-
150
- /**
151
- * determines if round trip time value is over threshold set in config
152
- * sets networkQualityScore to 0 if over threshold
153
- * @returns {boolean}
154
- */
155
- var determineLatency = function determineLatency() {
156
- if (roundTripTimeInMilliseconds > _this2.config.rttThreshold) {
157
- _this2.networkQualityScore = 0;
158
- return false;
159
- }
160
- return true;
161
- };
162
-
163
- /**
164
- * determines if jitter value is over threshold in config
165
- * sets networkQualityScore to 0 if over threshold
166
- * @returns {boolean}
167
- */
168
- var deterMineJitter = function deterMineJitter() {
169
- if (jitterInMilliseconds > _this2.config.jitterThreshold) {
170
- _this2.networkQualityScore = 0;
171
- return false;
172
- }
173
- return true;
174
- };
175
-
176
- /**
177
- * returns null if val is specifically undefined
178
- * @param {(number|undefined)} value
179
- * @returns {(number|null)}
180
- */
181
- var determineIfUndefined = function determineIfUndefined(value) {
182
- return typeof value === 'undefined' ? null : value;
183
- };
184
- if (!this.networkQualityStatus[UPLINK][mediaType]) {
185
- this.networkQualityStatus[UPLINK][mediaType] = {};
186
- }
187
-
188
- /**
189
- * Values for some browsers specifically Safari will be undefined we explicitly set to null
190
- * https://bugs.webkit.org/show_bug.cgi?id=206645
191
- * https://bugs.webkit.org/show_bug.cgi?id=212668
192
- */
193
- // PACKET LOSS
194
- this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {
195
- acceptable: determinePacketLoss(),
196
- value: determineIfUndefined(currentPacketLossRatio)
197
- };
198
-
199
- // LATENCY measured in Round trip time
200
- this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {
201
- acceptable: determineLatency(),
202
- value: determineIfUndefined(remoteRtpResults.roundTripTime)
203
- };
204
-
205
- // JITTER
206
- this.networkQualityStatus[UPLINK][mediaType][JITTER] = {
207
- acceptable: deterMineJitter(),
208
- value: determineIfUndefined(remoteRtpResults.jitter)
209
- };
210
- this.updateNetworkQualityStatus();
211
- }
212
-
213
- /**
214
- * Get the current status of network quaility object - networkQualityStatus
215
- * @returns {Object}
216
- * @public
217
- */
218
- }, {
219
- key: "networkQualityStats",
220
- get: function get() {
221
- var UPLINK = this.frequencyTypes.UPLINK;
222
- return this.networkQualityStatus[UPLINK];
223
- }
224
- }]);
225
- return NetworkQualityMonitor;
226
- }(_eventsScope.default);
227
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_eventsScope","_interopRequireDefault","require","_constants","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","NetworkQualityMonitor","exports","_EventsScope","_inherits2","_super","config","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","indicatorTypes","_freeze","PACKETLOSS","LATENCY","JITTER","frequencyTypes","UPLINK","DOWNLINK","networkQualityScore","networkQualityStatus","mediaType","_createClass2","key","value","emitNetworkQuality","emit","file","function","EVENT_TRIGGERS","NETWORK_QUALITY","updateNetworkQualityStatus","determineUplinkNetworkQuality","_ref","_this2","remoteRtpResults","statsAnalyzerCurrentStats","roundTripTimeInMilliseconds","roundTripTime","jitterInMilliseconds","jitter","currentPacketLossRatio","send","_this$indicatorTypes","determinePacketLoss","videoPacketLossRatioThreshold","determineLatency","rttThreshold","deterMineJitter","jitterThreshold","determineIfUndefined","acceptable","get","EventsScope"],"sources":["index.ts"],"sourcesContent":["import EventsScope from '../common/events/events-scope';\nimport {EVENT_TRIGGERS} from '../constants';\n\n/**\n * Meeting - network quality event\n * Emitted on each interval of retrieving stats Analyzer data\n * @event network:quality\n * @type {Object}\n * @property {string} mediaType {video|audio}\n * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality\n * @memberof NetworkQualityMonitor\n */\n/**\n * NetworkQualityMonitor class that will emit events based on detected quality\n *\n * @class NetworkQualityMonitor\n * @extends {EventsScope}\n */\nexport default class NetworkQualityMonitor extends EventsScope {\n config: any;\n frequencyTypes: any;\n indicatorTypes: any;\n mediaType: any;\n networkQualityScore: any;\n networkQualityStatus: any;\n\n /**\n * Creates a new instance of NetworkQualityMonitor\n * @constructor\n * @public\n * @param {Object} config\n * @property {Object} indicatorTypes - network properties used to evaluate network quality used as constants\n * @property {Object} frequencyTypes - frequency properties used as constants {uplink|send} {downlink|receive}\n * @property {number} networkQualityScore - 0|1 1 is acceptable 0 is bad/unknown\n * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes\n * @property {string} mediaType - audio|video\n */\n constructor(config: any) {\n super();\n this.config = config;\n this.indicatorTypes = Object.freeze({\n PACKETLOSS: 'packetLoss',\n LATENCY: 'latency',\n JITTER: 'jitter',\n });\n this.frequencyTypes = Object.freeze({\n UPLINK: 'uplink',\n DOWNLINK: 'downlink',\n });\n this.networkQualityScore = 1;\n this.networkQualityStatus = {\n [this.frequencyTypes.UPLINK]: {},\n };\n this.mediaType = null;\n }\n\n /**\n * emits NETWORK_QUALITY event on meeting with payload of media type and uplinkNetworkQuality score\n *\n * @memberof NetworkQualityMonitor\n * @returns {void}\n */\n emitNetworkQuality() {\n this.emit(\n {\n file: 'networkQualityMonitor',\n function: 'emitNetworkQuality',\n },\n EVENT_TRIGGERS.NETWORK_QUALITY,\n {\n mediaType: this.mediaType,\n networkQualityScore: this.networkQualityScore,\n }\n );\n }\n\n /**\n * invokes emitNetworkQuality method resets values back to default\n * @returns {void}\n * @memberof NetworkQualityMonitor\n */\n updateNetworkQualityStatus() {\n this.emitNetworkQuality();\n\n // reset values\n this.networkQualityScore = 1;\n this.mediaType = null;\n }\n\n /**\n * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp\n * @param {Object} configObj\n * @param {string} configObj.mediaType {audio|video}\n * @param {RTCStats} configObj.remoteRtpResults RTC stats remote obj\n * @param {Object} configObj.statsAnalyzerCurrentStats statsResults\n * @returns {void}\n * @public\n * @memberof NetworkQualityMonitor\n */\n public determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults,\n statsAnalyzerCurrentStats,\n }: {\n mediaType: string;\n remoteRtpResults: any;\n statsAnalyzerCurrentStats: object;\n }) {\n const roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;\n const jitterInMilliseconds = remoteRtpResults.jitter * 1000;\n const {currentPacketLossRatio} = statsAnalyzerCurrentStats[mediaType].send;\n\n this.mediaType = mediaType;\n\n const {JITTER, PACKETLOSS, LATENCY} = this.indicatorTypes;\n const {UPLINK} = this.frequencyTypes;\n\n /**\n * determines if packetLoss ratio is over threshold set in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const determinePacketLoss = () => {\n if (currentPacketLossRatio > this.config.videoPacketLossRatioThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * determines if round trip time value is over threshold set in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const determineLatency = () => {\n if (roundTripTimeInMilliseconds > this.config.rttThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * determines if jitter value is over threshold in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const deterMineJitter = () => {\n if (jitterInMilliseconds > this.config.jitterThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * returns null if val is specifically undefined\n * @param {(number|undefined)} value\n * @returns {(number|null)}\n */\n const determineIfUndefined = (value: number | undefined) =>\n typeof value === 'undefined' ? null : value;\n\n if (!this.networkQualityStatus[UPLINK][mediaType]) {\n this.networkQualityStatus[UPLINK][mediaType] = {};\n }\n\n /**\n * Values for some browsers specifically Safari will be undefined we explicitly set to null\n * https://bugs.webkit.org/show_bug.cgi?id=206645\n * https://bugs.webkit.org/show_bug.cgi?id=212668\n */\n // PACKET LOSS\n this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {\n acceptable: determinePacketLoss(),\n value: determineIfUndefined(currentPacketLossRatio),\n };\n\n // LATENCY measured in Round trip time\n this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {\n acceptable: determineLatency(),\n value: determineIfUndefined(remoteRtpResults.roundTripTime),\n };\n\n // JITTER\n this.networkQualityStatus[UPLINK][mediaType][JITTER] = {\n acceptable: deterMineJitter(),\n value: determineIfUndefined(remoteRtpResults.jitter),\n };\n\n this.updateNetworkQualityStatus();\n }\n\n /**\n * Get the current status of network quaility object - networkQualityStatus\n * @returns {Object}\n * @public\n */\n get networkQualityStats() {\n const {UPLINK} = this.frequencyTypes;\n\n return this.networkQualityStatus[UPLINK];\n }\n}\n"],"mappings":"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"}
@@ -1,11 +0,0 @@
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 RTC_METRICS = exports.default = {
9
- APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'
10
- };
11
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["RTC_METRICS","exports","default","APP_ID"],"sources":["constants.ts"],"sourcesContent":["const RTC_METRICS = {APP_ID: 'FFB51ED5-4319-4C55-8303-B1F2FCCDE231'};\n\nexport {RTC_METRICS as default};\n"],"mappings":";;;;;;;AAAA,IAAMA,WAAW,GAAAC,OAAA,CAAAC,OAAA,GAAG;EAACC,MAAM,EAAE;AAAsC,CAAC"}