A shim to insulate apps from WebRTC spec changes and browser prefix differences
Overall
score
98%
WebRTC Adapter's browser detection system automatically identifies the WebRTC engine, browser version, and specific capabilities to determine which shims need to be applied.
The main source of browser information available through adapter.browserDetails.
interface IBrowserDetails {
/** Browser name: 'chrome', 'firefox', 'safari', or 'Not a browser.' */
browser: string;
/** Browser version number, null if unable to detect */
version: number | null;
/** Safari-specific: WebRTC Unified Plan support detection */
supportsUnifiedPlan?: boolean;
}Usage Examples:
import adapter from 'webrtc-adapter';
// Check browser type
switch (adapter.browserDetails.browser) {
case 'chrome':
console.log('Chrome-based browser detected');
break;
case 'firefox':
console.log('Firefox browser detected');
break;
case 'safari':
console.log('Safari browser detected');
break;
default:
console.log('Unsupported or unknown browser');
}
// Check version for feature support
if (adapter.browserDetails.browser === 'chrome' && adapter.browserDetails.version >= 74) {
console.log('Supports modern WebRTC features');
}
// Safari-specific capability check
if (adapter.browserDetails.browser === 'safari' && adapter.browserDetails.supportsUnifiedPlan) {
console.log('Safari supports Unified Plan');
}Low-level browser detection function that analyzes the user agent string.
/**
* Detects browser type and version from window object
* @param window - Browser window object
* @returns Browser details object with detected information
*/
function detectBrowser(window: Window): IBrowserDetails;Usage Examples:
import { detectBrowser } from 'webrtc-adapter/src/js/utils.js';
// Manual browser detection
const browserInfo = detectBrowser(window);
console.log(`Detected: ${browserInfo.browser} version ${browserInfo.version}`);
// Custom window object (useful for testing)
const mockWindow = { navigator: { userAgent: 'Mozilla/5.0...' } };
const mockBrowserInfo = detectBrowser(mockWindow);Utility function for parsing version numbers from user agent strings using regular expressions.
/**
* Extract browser version from user agent string
* @param uastring - User agent string to parse
* @param expr - Regular expression pattern for version extraction
* @param pos - Position in regex match array containing version
* @returns Parsed version number or null if not found
*/
function extractVersion(uastring: string, expr: string, pos: number): number;Usage Examples:
import adapter from 'webrtc-adapter';
// Extract Chrome version
const chromeVersion = adapter.extractVersion(
navigator.userAgent,
/Chrom(e|ium)\/(\d+)\./,
2
);
// Extract Firefox version
const firefoxVersion = adapter.extractVersion(
navigator.userAgent,
/Firefox\/(\d+)\./,
1
);
// Custom version extraction
const customVersion = adapter.extractVersion(
'MyApp/1.2.3 (Windows)',
/MyApp\/(\d+\.\d+\.\d+)/,
1
);The detection system uses the following priority order:
navigator.userAgentData.brands when available for Chromium detectionnavigator.mozGetUserMedia presencenavigator.webkitGetUserMedia or window.webkitRTCPeerConnectionwindow.RTCPeerConnection + WebKit user agent patternInstall with Tessl CLI
npx tessl i tessl/npm-webrtc-adapterdocs
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10