@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
JavaScript
;
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
});