mediasoup-client 3.6.86 → 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,CA6J7D;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
@@ -76,46 +76,72 @@ function detectDevice() {
76
76
  const os = uaParser.getOS();
77
77
  const osName = (_g = (_f = os.name) === null || _f === void 0 ? void 0 : _f.toLowerCase()) !== null && _g !== void 0 ? _g : '';
78
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);
79
97
  // Chrome, Chromium, and Edge.
80
- if (['chrome', 'chromium', 'edge'].includes(browserName) && browserVersion >= 111) {
98
+ if ((isChrome || isEdge) && !isIOS && browserVersion >= 111) {
81
99
  return 'Chrome111';
82
100
  }
83
- else if ((['chrome', 'chromium'].includes(browserName) && browserVersion >= 74) ||
84
- (browserName === 'edge' && browserVersion >= 88)) {
101
+ else if ((isChrome && !isIOS && browserVersion >= 74) ||
102
+ (isEdge && !isIOS && browserVersion >= 88)) {
85
103
  return 'Chrome74';
86
104
  }
87
- else if (['chrome', 'chromium'].includes(browserName) && browserVersion >= 70) {
105
+ else if (isChrome && !isIOS && browserVersion >= 70) {
88
106
  return 'Chrome70';
89
107
  }
90
- else if (['chrome', 'chromium'].includes(browserName) && browserVersion >= 67) {
108
+ else if (isChrome && !isIOS && browserVersion >= 67) {
91
109
  return 'Chrome67';
92
110
  }
93
- else if (['chrome', 'chromium'].includes(browserName) && browserVersion >= 55) {
111
+ else if (isChrome && !isIOS && browserVersion >= 55) {
94
112
  return 'Chrome55';
95
113
  }
96
114
  // Firefox.
97
- else if (browserName === 'firefox' && osName !== 'ios' && browserVersion >= 60) {
115
+ else if (isFirefox && !isIOS && browserVersion >= 60) {
98
116
  return 'Firefox60';
99
117
  }
100
118
  // Firefox on iOS (so Safari).
101
- else if (browserName === 'firefox' && osName === 'ios' && osVersion >= 14.3) {
119
+ else if (isFirefox && isIOS && osVersion >= 14.3) {
102
120
  return 'Safari12';
103
121
  }
104
122
  // Safari with Unified-Plan support enabled.
105
- else if (browserName === 'safari' &&
123
+ else if (isSafari &&
106
124
  browserVersion >= 12 &&
107
125
  typeof RTCRtpTransceiver !== 'undefined' &&
108
126
  RTCRtpTransceiver.prototype.hasOwnProperty('currentDirection')) {
109
127
  return 'Safari12';
110
128
  }
111
129
  // Safari with Plab-B support.
112
- else if (browserName === 'safari' && browserVersion >= 11) {
130
+ else if (isSafari && browserVersion >= 11) {
113
131
  return 'Safari11';
114
132
  }
115
133
  // Old Edge with ORTC support.
116
- else if (browserName === 'edge' && browserVersion >= 11 && browserVersion <= 18) {
134
+ else if (isEdge && !isIOS && browserVersion >= 11 && browserVersion <= 18) {
117
135
  return 'Edge11';
118
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
+ }
119
145
  // Best effort for Chromium based browsers.
120
146
  else if (engineName === 'blink') {
121
147
  const match = ua.match(/(?:(?:Chrome|Chromium))[ /](\w+)/i);
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.86";
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.86';
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.86",
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)",
@@ -79,8 +79,8 @@
79
79
  "@types/ua-parser-js": "^0.7.36",
80
80
  "@typescript-eslint/eslint-plugin": "^5.59.11",
81
81
  "@typescript-eslint/parser": "^5.59.11",
82
- "eslint": "^8.42.0",
83
- "eslint-plugin-jest": "^27.2.1",
82
+ "eslint": "^8.43.0",
83
+ "eslint-plugin-jest": "^27.2.2",
84
84
  "jest": "^29.5.0",
85
85
  "open-cli": "^7.2.0",
86
86
  "ts-jest": "^29.1.0",