export type MediaMode = 'legacy' | 'single_server_sfu'; const parseMediaMode = (value: string | undefined): MediaMode => { const normalized = (value ?? 'legacy').trim().toLowerCase(); if (normalized === 'single_server_sfu') { return 'single_server_sfu'; } return 'legacy'; }; const parseCsv = (value: string | undefined): string[] => { if (!value) return []; return value .split(',') .map((item) => item.trim()) .filter(Boolean); }; const parsePositiveNumber = (value: string | undefined): number | null => { if (!value) return null; const parsed = Number(value); if (!Number.isFinite(parsed) || parsed <= 0) { return null; } return parsed; }; export const mediaMode: MediaMode = parseMediaMode(process.env.MEDIA_MODE); export const mediaConfig = { mode: mediaMode, turn: { urls: parseCsv(process.env.TURN_URLS), username: process.env.TURN_USERNAME ?? '', credential: process.env.TURN_CREDENTIAL ?? '', }, recordingsDir: process.env.MEDIA_RECORDINGS_DIR ?? 'media-recordings', limits: { maxPublishers: parsePositiveNumber(process.env.MEDIA_MAX_PUBLISHERS), maxSubscribersPerRoom: parsePositiveNumber(process.env.MEDIA_MAX_SUBSCRIBERS_PER_ROOM), }, };