mediasoup-client 3.6.85 → 3.6.87

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.
@@ -1 +1 @@
1
- {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../src/Device.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAoB,MAAM,6BAA6B,CAAC;AAY/E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,MAAM,kBAAkB,GAC3B,WAAW,GACX,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,UAAU,GACV,UAAU,GACV,QAAQ,GACR,wBAAwB,GACxB,aAAa,CAAC;AAEjB,MAAM,MAAM,aAAa,GACzB;IACC;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,YAAY,IAAI,kBAAkB,GAAG,SAAS,CA4I7D;AAED,MAAM,MAAM,oBAAoB,GAChC;IACC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC;CAC1B,CAAC;AAEF,qBAAa,MAAM;IAGlB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,wBAAwB,CAAC,CAAM;IAEvC,OAAO,CAAC,oBAAoB,CAAC,CAAkB;IAG/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAErD,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAE7C,SAAS,CAAC,QAAQ,CAAC,SAAS,6CAAoD;IAEhF;;;;OAIG;gBACS,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,GAAE,aAAkB;IA2GxE;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAGxB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAGpB;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,eAAe,CAQrC;IAED;;;;OAIG;IACH,IAAI,gBAAgB,IAAI,gBAAgB,CAQvC;IAED,IAAI,QAAQ,IAAI,oBAAoB,CAGnC;IAED;;OAEG;IACG,IAAI,CACT,EAAE,qBAAqB,EAAE,EACzB;QAAE,qBAAqB,EAAE,eAAe,CAAA;KAAE,GACxC,OAAO,CAAC,IAAI,CAAC;IAgFhB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAcpC;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,SAAS,OAAO,GAAG,OAAO,EAC7D,EACC,EAAE,EACF,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,OAAO,EACP,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GACnC,SAAS,CAAC,gBAAgB,CAAC;IAoB9B;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,SAAS,OAAO,GAAG,OAAO,EAC7D,EACC,EAAE,EACF,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,OAAO,EACP,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GACnC,SAAS,CAAC,gBAAgB,CAAC;IAoB9B,OAAO,CAAC,eAAe;CAwEvB"}
1
+ {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../src/Device.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAoB,MAAM,6BAA6B,CAAC;AAY/E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,MAAM,kBAAkB,GAC3B,WAAW,GACX,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,GACX,UAAU,GACV,UAAU,GACV,QAAQ,GACR,wBAAwB,GACxB,aAAa,CAAC;AAEjB,MAAM,MAAM,aAAa,GACzB;IACC;;OAEG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,YAAY,IAAI,kBAAkB,GAAG,SAAS,CAiM7D;AAED,MAAM,MAAM,oBAAoB,GAChC;IACC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC;CAC1B,CAAC;AAEF,qBAAa,MAAM;IAGlB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,wBAAwB,CAAC,CAAM;IAEvC,OAAO,CAAC,oBAAoB,CAAC,CAAkB;IAG/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAErD,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAE7C,SAAS,CAAC,QAAQ,CAAC,SAAS,6CAAoD;IAEhF;;;;OAIG;gBACS,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,GAAE,aAAkB;IA2GxE;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAGxB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAGpB;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,eAAe,CAQrC;IAED;;;;OAIG;IACH,IAAI,gBAAgB,IAAI,gBAAgB,CAQvC;IAED,IAAI,QAAQ,IAAI,oBAAoB,CAGnC;IAED;;OAEG;IACG,IAAI,CACT,EAAE,qBAAqB,EAAE,EACzB;QAAE,qBAAqB,EAAE,eAAe,CAAA;KAAE,GACxC,OAAO,CAAC,IAAI,CAAC;IAgFhB;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAcpC;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,SAAS,OAAO,GAAG,OAAO,EAC7D,EACC,EAAE,EACF,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,OAAO,EACP,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GACnC,SAAS,CAAC,gBAAgB,CAAC;IAoB9B;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,SAAS,OAAO,GAAG,OAAO,EAC7D,EACC,EAAE,EACF,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,OAAO,EACP,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GACnC,SAAS,CAAC,gBAAgB,CAAC;IAoB9B,OAAO,CAAC,eAAe;CAwEvB"}
package/lib/Device.js CHANGED
@@ -22,12 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
25
  Object.defineProperty(exports, "__esModule", { value: true });
29
26
  exports.Device = exports.detectDevice = void 0;
30
- const bowser_1 = __importDefault(require("bowser"));
27
+ const ua_parser_js_1 = require("ua-parser-js");
31
28
  const Logger_1 = require("./Logger");
32
29
  const EnhancedEventEmitter_1 = require("./EnhancedEventEmitter");
33
30
  const errors_1 = require("./errors");
@@ -47,69 +44,106 @@ const ReactNativeUnifiedPlan_1 = require("./handlers/ReactNativeUnifiedPlan");
47
44
  const ReactNative_1 = require("./handlers/ReactNative");
48
45
  const logger = new Logger_1.Logger('Device');
49
46
  function detectDevice() {
47
+ var _a, _b, _c, _d, _e, _f, _g, _h;
50
48
  // React-Native.
51
49
  // NOTE: react-native-webrtc >= 1.75.0 is required.
52
50
  // NOTE: react-native-webrtc with Unified Plan requires version >= 106.0.0.
53
51
  if (typeof navigator === 'object' && navigator.product === 'ReactNative') {
52
+ logger.debug('detectDevice() | React-Native detected');
54
53
  if (typeof RTCPeerConnection === 'undefined') {
55
- logger.warn('this._detectDevice() | unsupported react-native-webrtc without RTCPeerConnection, forgot to call registerGlobals()?');
54
+ logger.warn('detectDevice() | unsupported react-native-webrtc without RTCPeerConnection, forgot to call registerGlobals()?');
56
55
  return undefined;
57
56
  }
58
57
  if (typeof RTCRtpTransceiver !== 'undefined') {
59
- logger.debug('this._detectDevice() | ReactNative UnifiedPlan handler chosen');
58
+ logger.debug('detectDevice() | ReactNative UnifiedPlan handler chosen');
60
59
  return 'ReactNativeUnifiedPlan';
61
60
  }
62
61
  else {
63
- logger.debug('this._detectDevice() | ReactNative PlanB handler chosen');
62
+ logger.debug('detectDevice() | ReactNative PlanB handler chosen');
64
63
  return 'ReactNative';
65
64
  }
66
65
  }
67
66
  // Browser.
68
67
  else if (typeof navigator === 'object' && typeof navigator.userAgent === 'string') {
69
68
  const ua = navigator.userAgent;
70
- const browser = bowser_1.default.getParser(ua);
71
- const engine = browser.getEngine();
69
+ const uaParser = new ua_parser_js_1.UAParser(ua);
70
+ logger.debug('detectDevice() | browser detected [ua:%s, parsed:%o]', ua, uaParser.getResult());
71
+ const browser = uaParser.getBrowser();
72
+ const browserName = (_b = (_a = browser.name) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : '';
73
+ const browserVersion = parseInt((_c = browser.major) !== null && _c !== void 0 ? _c : '0');
74
+ const engine = uaParser.getEngine();
75
+ const engineName = (_e = (_d = engine.name) === null || _d === void 0 ? void 0 : _d.toLowerCase()) !== null && _e !== void 0 ? _e : '';
76
+ const os = uaParser.getOS();
77
+ const osName = (_g = (_f = os.name) === null || _f === void 0 ? void 0 : _f.toLowerCase()) !== null && _g !== void 0 ? _g : '';
78
+ const osVersion = parseFloat((_h = os.version) !== null && _h !== void 0 ? _h : '0');
79
+ const isIOS = osName === 'ios';
80
+ const isChrome = [
81
+ 'chrome',
82
+ 'chromium',
83
+ 'mobile chrome',
84
+ 'chrome webview',
85
+ 'chrome headless'
86
+ ].includes(browserName);
87
+ const isFirefox = [
88
+ 'firefox',
89
+ 'mobile firefox',
90
+ 'mobile focus'
91
+ ].includes(browserName);
92
+ const isSafari = [
93
+ 'safari',
94
+ 'mobile safari'
95
+ ].includes(browserName);
96
+ const isEdge = ['edge'].includes(browserName);
72
97
  // Chrome, Chromium, and Edge.
73
- if (browser.satisfies({ chrome: '>=111', chromium: '>=111', 'microsoft edge': '>=111' })) {
98
+ if ((isChrome || isEdge) && !isIOS && browserVersion >= 111) {
74
99
  return 'Chrome111';
75
100
  }
76
- else if (browser.satisfies({ chrome: '>=74', chromium: '>=74', 'microsoft edge': '>=88' })) {
101
+ else if ((isChrome && !isIOS && browserVersion >= 74) ||
102
+ (isEdge && !isIOS && browserVersion >= 88)) {
77
103
  return 'Chrome74';
78
104
  }
79
- else if (browser.satisfies({ chrome: '>=70', chromium: '>=70' })) {
105
+ else if (isChrome && !isIOS && browserVersion >= 70) {
80
106
  return 'Chrome70';
81
107
  }
82
- else if (browser.satisfies({ chrome: '>=67', chromium: '>=67' })) {
108
+ else if (isChrome && !isIOS && browserVersion >= 67) {
83
109
  return 'Chrome67';
84
110
  }
85
- else if (browser.satisfies({ chrome: '>=55', chromium: '>=55' })) {
111
+ else if (isChrome && !isIOS && browserVersion >= 55) {
86
112
  return 'Chrome55';
87
113
  }
88
114
  // Firefox.
89
- else if (browser.satisfies({ firefox: '>=60' })) {
115
+ else if (isFirefox && !isIOS && browserVersion >= 60) {
90
116
  return 'Firefox60';
91
117
  }
92
- // Firefox on iOS.
93
- else if (browser.satisfies({ ios: { OS: '>=14.3', firefox: '>=30.0' } })) {
118
+ // Firefox on iOS (so Safari).
119
+ else if (isFirefox && isIOS && osVersion >= 14.3) {
94
120
  return 'Safari12';
95
121
  }
96
122
  // Safari with Unified-Plan support enabled.
97
- else if (browser.satisfies({ safari: '>=12.0' }) &&
123
+ else if (isSafari &&
124
+ browserVersion >= 12 &&
98
125
  typeof RTCRtpTransceiver !== 'undefined' &&
99
126
  RTCRtpTransceiver.prototype.hasOwnProperty('currentDirection')) {
100
127
  return 'Safari12';
101
128
  }
102
129
  // Safari with Plab-B support.
103
- else if (browser.satisfies({ safari: '>=11' })) {
130
+ else if (isSafari && browserVersion >= 11) {
104
131
  return 'Safari11';
105
132
  }
106
133
  // Old Edge with ORTC support.
107
- else if (browser.satisfies({ 'microsoft edge': '>=11' }) &&
108
- browser.satisfies({ 'microsoft edge': '<=18' })) {
134
+ else if (isEdge && !isIOS && browserVersion >= 11 && browserVersion <= 18) {
109
135
  return 'Edge11';
110
136
  }
137
+ // Best effort for WebKit based browsers in iOS.
138
+ else if (engineName === 'webkit' &&
139
+ isIOS &&
140
+ osVersion >= 14.3 &&
141
+ typeof RTCRtpTransceiver !== 'undefined' &&
142
+ RTCRtpTransceiver.prototype.hasOwnProperty('currentDirection')) {
143
+ return 'Safari12';
144
+ }
111
145
  // Best effort for Chromium based browsers.
112
- else if (engine.name && engine.name.toLowerCase() === 'blink') {
146
+ else if (engineName === 'blink') {
113
147
  const match = ua.match(/(?:(?:Chrome|Chromium))[ /](\w+)/i);
114
148
  if (match) {
115
149
  const version = Number(match[1]);
@@ -135,13 +169,13 @@ function detectDevice() {
135
169
  }
136
170
  // Unsupported browser.
137
171
  else {
138
- logger.warn('this._detectDevice() | browser not supported [name:%s, version:%s]', browser.getBrowserName(), browser.getBrowserVersion());
172
+ logger.warn('detectDevice() | browser not supported [name:%s, version:%s]', browserName, browserVersion);
139
173
  return undefined;
140
174
  }
141
175
  }
142
176
  // Unknown device.
143
177
  else {
144
- logger.warn('this._detectDevice() | unknown device');
178
+ logger.warn('detectDevice() | unknown device');
145
179
  return undefined;
146
180
  }
147
181
  }
package/lib/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export { types };
8
8
  /**
9
9
  * Expose mediasoup-client version.
10
10
  */
11
- export declare const version = "3.6.85";
11
+ export declare const version = "3.6.87";
12
12
  /**
13
13
  * Expose Device class and detectDevice() helper.
14
14
  */
package/lib/index.js CHANGED
@@ -37,7 +37,7 @@ exports.types = types;
37
37
  /**
38
38
  * Expose mediasoup-client version.
39
39
  */
40
- exports.version = '3.6.85';
40
+ exports.version = '3.6.87';
41
41
  /**
42
42
  * Expose parseScalabilityMode() function.
43
43
  */
package/lib/tests/test.js CHANGED
@@ -35,6 +35,7 @@ const utils = __importStar(require("../utils"));
35
35
  const RemoteSdp_1 = require("../handlers/sdp/RemoteSdp");
36
36
  const FakeHandler_1 = require("../handlers/FakeHandler");
37
37
  const fakeParameters = __importStar(require("./fakeParameters"));
38
+ const uaTestCases_1 = require("./uaTestCases");
38
39
  const { Device, detectDevice, parseScalabilityMode, debug } = mediasoupClient;
39
40
  let device;
40
41
  let sendTransport;
@@ -1271,3 +1272,26 @@ test('parseScalabilityMode() works', () => {
1271
1272
  expect(parseScalabilityMode('L20T3')).toEqual({ spatialLayers: 20, temporalLayers: 3 });
1272
1273
  expect(parseScalabilityMode('S200T3')).toEqual({ spatialLayers: 1, temporalLayers: 1 });
1273
1274
  }, 500);
1275
+ describe('detectDevice() assigns proper handler based on UserAgent', () => {
1276
+ const originalNavigator = global.navigator;
1277
+ for (const uaTestCase of uaTestCases_1.uaTestCases) {
1278
+ test(uaTestCase.desc, () => {
1279
+ // @ts-ignore
1280
+ global.navigator =
1281
+ {
1282
+ userAgent: uaTestCase.ua
1283
+ };
1284
+ const originalRTCRtpTransceiver = global.RTCRtpTransceiver;
1285
+ if (uaTestCase.expect === 'Safari12') {
1286
+ global.RTCRtpTransceiver = class Dummy {
1287
+ currentDirection() { }
1288
+ };
1289
+ }
1290
+ expect(detectDevice()).toBe(uaTestCase.expect);
1291
+ // Cleanup.
1292
+ global.RTCRtpTransceiver = originalRTCRtpTransceiver;
1293
+ }, 100);
1294
+ }
1295
+ // Cleanup.
1296
+ global.navigator = originalNavigator;
1297
+ });
@@ -0,0 +1,9 @@
1
+ import { BuiltinHandlerName } from '../Device';
2
+ type UATestCase = {
3
+ desc: string;
4
+ ua: string;
5
+ expect?: BuiltinHandlerName;
6
+ };
7
+ export declare const uaTestCases: UATestCase[];
8
+ export {};
9
+ //# sourceMappingURL=uaTestCases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uaTestCases.d.ts","sourceRoot":"","sources":["../../src/tests/uaTestCases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,KAAK,UAAU,GACf;IACC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,UAAU,EAkFnC,CAAC"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uaTestCases = void 0;
4
+ exports.uaTestCases = [
5
+ {
6
+ desc: 'Microsoft Edge 100',
7
+ ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.1108.55 Safari/537.36 Edg/100.0.1108.55',
8
+ expect: 'Chrome74'
9
+ },
10
+ {
11
+ desc: 'Mac (Intel) Chrome 112',
12
+ ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
13
+ expect: 'Chrome111'
14
+ },
15
+ {
16
+ desc: 'Generic Android Chrome 112',
17
+ ua: 'Mozilla/5.0 (Linux; Android 13; M2012K11AG) AppleWebKit/537.36 (KHTML, like Gecko) Soul/4.0 Chrome/112.0.5615.135 Mobile Safari/537.36',
18
+ expect: 'Chrome111'
19
+ },
20
+ {
21
+ desc: 'Motorola Edge Chrome 104',
22
+ ua: 'Mozilla/5.0 (Linux; Android 10; motorola edge) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Mobile Safari/537.36',
23
+ expect: 'Chrome74'
24
+ },
25
+ {
26
+ desc: 'Microsoft Edge 44',
27
+ ua: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763',
28
+ expect: 'Edge11'
29
+ },
30
+ {
31
+ desc: 'Firefox 68 (Android)',
32
+ ua: 'Mozilla/5.0 (Android 10; Mobile; rv:68.10.0) Gecko/68.10.0 Firefox/68.10.0',
33
+ expect: 'Firefox60'
34
+ },
35
+ {
36
+ desc: 'In-app WebView (Android)',
37
+ ua: 'Mozilla/5.0 (Linux; Android 11; G91 Pro Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.130 Mobile Safari/537.36',
38
+ expect: 'Chrome111'
39
+ },
40
+ {
41
+ desc: 'Safari 11',
42
+ ua: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_13) AppleWebKit/537.36 (KHTML, like Gecko) Version/11.0.92 Safari/619.28',
43
+ expect: 'Safari11'
44
+ },
45
+ {
46
+ desc: 'Safari 11 (iPad)',
47
+ ua: 'Mozilla/5.0 (iPad; CPU OS 14_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1',
48
+ expect: 'Safari11'
49
+ },
50
+ {
51
+ desc: 'Brave',
52
+ ua: 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.4044.113 Safari/5370.36 Brave/9085',
53
+ expect: 'Chrome111'
54
+ },
55
+ {
56
+ desc: 'In-app WebView (Android) (Facebook)',
57
+ ua: 'Mozilla/5.0 (Linux; Android 12; SM-S908U1 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.88 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/377.0.0.22.107;]',
58
+ expect: 'Chrome74'
59
+ },
60
+ {
61
+ desc: 'Firefox (Linux)',
62
+ ua: 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:109.0) Gecko/20100101 Firefox/114.0',
63
+ expect: 'Firefox60'
64
+ },
65
+ {
66
+ desc: 'Firefox (iOS) - Unsupported',
67
+ ua: 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/114.0 Mobile/15E148 Safari/605.1.15',
68
+ expect: undefined
69
+ },
70
+ {
71
+ desc: 'In-app WKWebView (iOS) (TikTok)',
72
+ ua: 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 musical_ly_21.1.0 JsSdk/2.0 NetType/4G Channel/App Store ByteLocale/ru Region/RU ByteFullLocale/ru-RU isDarkMode/1 WKWebView/1 BytedanceWebview/d8a21c6',
73
+ expect: 'Safari12'
74
+ },
75
+ {
76
+ desc: 'In-app WkWebView (iOS) (WeChat)',
77
+ ua: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.37(0x1800252f) NetType/WIFI Language/zh_CN',
78
+ expect: 'Safari12'
79
+ },
80
+ {
81
+ desc: 'Chrome Mobile (iOS)',
82
+ ua: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/114.0.5735.124 Mobile/15E148 Safari/604.1',
83
+ expect: 'Safari12'
84
+ }
85
+ ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasoup-client",
3
- "version": "3.6.85",
3
+ "version": "3.6.87",
4
4
  "description": "mediasoup client side JavaScript library",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
@@ -63,23 +63,24 @@
63
63
  "dependencies": {
64
64
  "@types/debug": "^4.1.8",
65
65
  "awaitqueue": "^3.0.1",
66
- "bowser": "^2.11.0",
67
66
  "debug": "^4.3.4",
68
67
  "events": "^3.3.0",
69
68
  "fake-mediastreamtrack": "^1.1.6",
70
69
  "h264-profile-level-id": "^1.0.1",
71
70
  "queue-microtask": "^1.2.3",
72
71
  "sdp-transform": "^2.14.1",
73
- "supports-color": "^9.3.1"
72
+ "supports-color": "^9.3.1",
73
+ "ua-parser-js": "^1.0.35"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/events": "^3.0.0",
77
77
  "@types/jest": "^29.5.2",
78
78
  "@types/sdp-transform": "^2.4.6",
79
+ "@types/ua-parser-js": "^0.7.36",
79
80
  "@typescript-eslint/eslint-plugin": "^5.59.11",
80
81
  "@typescript-eslint/parser": "^5.59.11",
81
- "eslint": "^8.42.0",
82
- "eslint-plugin-jest": "^27.2.1",
82
+ "eslint": "^8.43.0",
83
+ "eslint-plugin-jest": "^27.2.2",
83
84
  "jest": "^29.5.0",
84
85
  "open-cli": "^7.2.0",
85
86
  "ts-jest": "^29.1.0",