fluxer/scripts/just/livekit-sync.js
2026-01-05 23:19:05 +01:00

52 lines
1.2 KiB
JavaScript
Executable File

#!/usr/bin/env node
const fs = require('node:fs');
const path = require('node:path');
const args = process.argv.slice(2);
const outputIdx = args.indexOf('--output');
const outputArg = outputIdx >= 0 && args[outputIdx + 1] ? args[outputIdx + 1] : 'dev/livekit.yaml';
const voiceEnabled = (process.env.VOICE_ENABLED || '').trim().toLowerCase() === 'true';
if (!voiceEnabled) {
process.exit(0);
}
const apiKey = (process.env.LIVEKIT_API_KEY || '').trim();
const apiSecret = (process.env.LIVEKIT_API_SECRET || '').trim();
const webhookUrl = (process.env.LIVEKIT_WEBHOOK_URL || '').trim();
if (!apiKey || !apiSecret || !webhookUrl) {
process.exit(0);
}
const redisUrl = (process.env.REDIS_URL || '').trim();
const redisAddr = redisUrl.replace(/^redis:\/\//, '') || 'redis:6379';
const yaml = `port: 7880
redis:
address: "${redisAddr}"
db: 0
keys:
"${apiKey}": "${apiSecret}"
rtc:
tcp_port: 7881
webhook:
api_key: "${apiKey}"
urls:
- "${webhookUrl}"
room:
auto_create: true
max_participants: 100
empty_timeout: 300
development: true
`;
const outputPath = path.resolve(outputArg);
fs.mkdirSync(path.dirname(outputPath), {recursive: true});
fs.writeFileSync(outputPath, yaml, {encoding: 'utf-8', mode: 0o600});