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.
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +58 -24
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/tests/test.js +24 -0
- package/lib/tests/uaTestCases.d.ts +9 -0
- package/lib/tests/uaTestCases.d.ts.map +1 -0
- package/lib/tests/uaTestCases.js +85 -0
- package/package.json +6 -5
package/lib/Device.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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('
|
|
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('
|
|
58
|
+
logger.debug('detectDevice() | ReactNative UnifiedPlan handler chosen');
|
|
60
59
|
return 'ReactNativeUnifiedPlan';
|
|
61
60
|
}
|
|
62
61
|
else {
|
|
63
|
-
logger.debug('
|
|
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
|
|
71
|
-
|
|
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 (
|
|
98
|
+
if ((isChrome || isEdge) && !isIOS && browserVersion >= 111) {
|
|
74
99
|
return 'Chrome111';
|
|
75
100
|
}
|
|
76
|
-
else if (
|
|
101
|
+
else if ((isChrome && !isIOS && browserVersion >= 74) ||
|
|
102
|
+
(isEdge && !isIOS && browserVersion >= 88)) {
|
|
77
103
|
return 'Chrome74';
|
|
78
104
|
}
|
|
79
|
-
else if (
|
|
105
|
+
else if (isChrome && !isIOS && browserVersion >= 70) {
|
|
80
106
|
return 'Chrome70';
|
|
81
107
|
}
|
|
82
|
-
else if (
|
|
108
|
+
else if (isChrome && !isIOS && browserVersion >= 67) {
|
|
83
109
|
return 'Chrome67';
|
|
84
110
|
}
|
|
85
|
-
else if (
|
|
111
|
+
else if (isChrome && !isIOS && browserVersion >= 55) {
|
|
86
112
|
return 'Chrome55';
|
|
87
113
|
}
|
|
88
114
|
// Firefox.
|
|
89
|
-
else if (
|
|
115
|
+
else if (isFirefox && !isIOS && browserVersion >= 60) {
|
|
90
116
|
return 'Firefox60';
|
|
91
117
|
}
|
|
92
|
-
// Firefox on iOS.
|
|
93
|
-
else if (
|
|
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 (
|
|
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 (
|
|
130
|
+
else if (isSafari && browserVersion >= 11) {
|
|
104
131
|
return 'Safari11';
|
|
105
132
|
}
|
|
106
133
|
// Old Edge with ORTC support.
|
|
107
|
-
else if (
|
|
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 (
|
|
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('
|
|
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('
|
|
178
|
+
logger.warn('detectDevice() | unknown device');
|
|
145
179
|
return undefined;
|
|
146
180
|
}
|
|
147
181
|
}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
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 @@
|
|
|
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.
|
|
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.
|
|
82
|
-
"eslint-plugin-jest": "^27.2.
|
|
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",
|