UNPKG

@webrtc2/config

Version:

WebRTC2 Config - Configuration management for WebRTC applications with STUN/TURN servers, ICE settings, media constraints, and cross-platform defaults

110 lines (109 loc) 2.6 kB
// src/index.ts var defaultConfig = { rtc: { iceServers: [ { urls: "stun:stun.l.google.com:19302" }, { urls: "stun:stun1.l.google.com:19302" } ], bundlePolicy: "balanced", rtcpMuxPolicy: "require" }, signaling: { url: "wss://signaling.webrtc2.com", reconnectAttempts: 5, reconnectDelay: 1e3 }, media: { video: { width: 1280, height: 720, frameRate: 30, facingMode: "user" }, audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } }, ui: { theme: "auto", language: "en", showStats: false }, debug: { enabled: false, level: "info", logToConsole: true } }; var ConfigManager = class { constructor(initialConfig) { this.config = this.mergeConfig(defaultConfig, initialConfig || {}); } mergeConfig(base, override) { return { rtc: { ...base.rtc, ...override.rtc }, signaling: { ...base.signaling, ...override.signaling }, media: { video: { ...base.media.video, ...override.media?.video }, audio: { ...base.media.audio, ...override.media?.audio } }, ui: { ...base.ui, ...override.ui }, debug: { ...base.debug, ...override.debug } }; } get() { return { ...this.config }; } update(updates) { this.config = this.mergeConfig(this.config, updates); } reset() { this.config = { ...defaultConfig }; } // Specific getters for common use cases getRTCConfig() { return { ...this.config.rtc }; } getSignalingUrl() { return this.config.signaling.url; } getMediaConstraints() { return { video: { width: this.config.media.video.width, height: this.config.media.video.height, frameRate: this.config.media.video.frameRate, facingMode: this.config.media.video.facingMode }, audio: { echoCancellation: this.config.media.audio.echoCancellation, noiseSuppression: this.config.media.audio.noiseSuppression, autoGainControl: this.config.media.audio.autoGainControl } }; } }; var config = new ConfigManager(); function createConfig(overrides) { return new ConfigManager(overrides); } function validateConfig(config2) { if (config2.signaling?.url && !config2.signaling.url.startsWith("ws")) { return false; } if (config2.media?.video?.width && config2.media.video.width <= 0) { return false; } return true; } var VERSION = "1.0.0"; export { ConfigManager, VERSION, config, createConfig, defaultConfig, validateConfig };