UNPKG

@webrtc2/utils

Version:

WebRTC2 Utils - Cross-platform WebRTC utility functions for device detection, media management, error handling, and performance optimization

129 lines (127 loc) 3.7 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { VERSION: () => VERSION, WebRTCError: () => WebRTCError, createError: () => createError, debounce: () => debounce, generateRoomId: () => generateRoomId, getAudioDevices: () => getAudioDevices, getMediaDevices: () => getMediaDevices, getVideoDevices: () => getVideoDevices, isAndroid: () => isAndroid, isIOS: () => isIOS, isMobile: () => isMobile, isValidRoomId: () => isValidRoomId, measureLatency: () => measureLatency, muteStream: () => muteStream, stopMediaStream: () => stopMediaStream, toggleVideo: () => toggleVideo }); module.exports = __toCommonJS(index_exports); function isMobile() { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); } function isIOS() { return /iPad|iPhone|iPod/.test(navigator.userAgent); } function isAndroid() { return /Android/.test(navigator.userAgent); } function getMediaDevices() { if (!navigator.mediaDevices?.enumerateDevices) { return Promise.reject(new Error("Media devices not supported")); } return navigator.mediaDevices.enumerateDevices(); } function getVideoDevices() { return getMediaDevices().then( (devices) => devices.filter((device) => device.kind === "videoinput") ); } function getAudioDevices() { return getMediaDevices().then( (devices) => devices.filter((device) => device.kind === "audioinput") ); } function stopMediaStream(stream) { if (!stream) return; stream.getTracks().forEach((track) => { track.stop(); }); } function muteStream(stream, muted) { stream.getAudioTracks().forEach((track) => { track.enabled = !muted; }); } function toggleVideo(stream, enabled) { stream.getVideoTracks().forEach((track) => { track.enabled = enabled; }); } function generateRoomId() { return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15); } function isValidRoomId(roomId) { return /^[a-zA-Z0-9]{8,32}$/.test(roomId); } var WebRTCError = class extends Error { constructor(message, code, details) { super(message); this.code = code; this.details = details; this.name = "WebRTCError"; } }; function createError(code, message, details) { return new WebRTCError(message, code, details); } function measureLatency(startTime) { return performance.now() - startTime; } function debounce(func, wait) { let timeout; return (...args) => { clearTimeout(timeout); timeout = setTimeout(() => func(...args), wait); }; } var VERSION = "1.0.0"; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { VERSION, WebRTCError, createError, debounce, generateRoomId, getAudioDevices, getMediaDevices, getVideoDevices, isAndroid, isIOS, isMobile, isValidRoomId, measureLatency, muteStream, stopMediaStream, toggleVideo });