import express from 'express' import cors from 'cors' import { AccessToken } from 'livekit-server-sdk' import * as dotenv from 'dotenv' // Cargar variables de entorno dotenv.config({ path: '../../.env' }) const app = express() const port = 3010 // Middleware app.use(cors()) app.use(express.json()) // Configuraciรณn de LiveKit desde variables de entorno const LIVEKIT_API_KEY = process.env.LIVEKIT_API_KEY || 'devkey' const LIVEKIT_API_SECRET = process.env.LIVEKIT_API_SECRET || 'secret' const LIVEKIT_URL = process.env.LIVEKIT_URL || 'wss://livekit-server.bfzqqk.easypanel.host' console.log('๐Ÿš€ Servidor de tokens iniciado') console.log('๐Ÿ“ก LiveKit URL:', LIVEKIT_URL) console.log('๐Ÿ”‘ API Key:', LIVEKIT_API_KEY) // Endpoint para generar tokens app.get('/api/token', async (req, res) => { try { const { room, username } = req.query if (!room || !username) { return res.status(400).json({ error: 'Se requieren los parรกmetros room y username' }) } // Crear token de acceso const at = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET, { identity: username, name: username, }) // Agregar permisos at.addGrant({ room: room, roomJoin: true, canPublish: true, canPublishData: true, canSubscribe: true, }) // Generar JWT const token = await at.toJwt() console.log(`โœ… Token generado para usuario: ${username} en sala: ${room}`) res.json({ token, serverUrl: LIVEKIT_URL, }) } catch (error) { console.error('โŒ Error generando token:', error) res.status(500).json({ error: 'Error al generar token', details: error.message }) } }) // Endpoint de salud app.get('/health', (req, res) => { res.json({ status: 'ok', livekit: { url: LIVEKIT_URL, apiKey: LIVEKIT_API_KEY, }, }) }) const server = app.listen(port, () => { console.log(`๐ŸŽ™๏ธ Servidor corriendo en http://localhost:${port}`) console.log(`๐Ÿ“‹ Endpoint de tokens: http://localhost:${port}/api/token?room=ROOM_NAME&username=USERNAME`) console.log(`๐Ÿ’š Health check: http://localhost:${port}/health`) }) server.on('error', (error) => { console.error('โŒ Error del servidor:', error) process.exit(1) }) process.on('SIGTERM', () => { console.log('๐Ÿ›‘ SIGTERM recibido, cerrando servidor...') server.close(() => { console.log('โœ… Servidor cerrado') process.exit(0) }) }) process.on('SIGINT', () => { console.log('๐Ÿ›‘ SIGINT recibido, cerrando servidor...') server.close(() => { console.log('โœ… Servidor cerrado') process.exit(0) }) })