const express = require('express'); const cors = require('cors'); const jwt = require('jsonwebtoken'); const { AccessToken } = require('twilio').jwt; const { VideoGrant } = AccessToken; const app = express(); const PORT = 3001; // 中间件 app.use(cors()); app.use(express.json()); // Twilio 配置 - 请替换为您的实际凭证 const TWILIO_CONFIG = { accountSid: process.env.TWILIO_ACCOUNT_SID || 'AC_YOUR_ACCOUNT_SID', apiKey: process.env.TWILIO_API_KEY || 'SK3b25e00e6914162a7cf829cffc415cb3', apiSecret: process.env.TWILIO_API_SECRET || 'PpGH298dlRgMSeGrexUjw1flczTVIw9H', }; // 生成 Twilio Access Token app.post('/api/twilio/token', (req, res) => { try { const { identity, roomName } = req.body; if (!identity || !roomName) { return res.status(400).json({ error: 'Identity and roomName are required' }); } // 创建 Access Token const token = new AccessToken( TWILIO_CONFIG.accountSid, TWILIO_CONFIG.apiKey, TWILIO_CONFIG.apiSecret, { identity: identity } ); // 创建 Video Grant const videoGrant = new VideoGrant({ room: roomName }); // 将 grant 添加到 token token.addGrant(videoGrant); // 生成 JWT token const jwtToken = token.toJwt(); console.log(`Generated token for identity: ${identity}, room: ${roomName}`); res.json({ token: jwtToken, identity: identity, roomName: roomName }); } catch (error) { console.error('Token generation error:', error); res.status(500).json({ error: 'Failed to generate token', details: error.message }); } }); // 健康检查端点 app.get('/health', (req, res) => { res.json({ status: 'ok', timestamp: new Date().toISOString(), service: 'Twilio Token Server' }); }); // 获取房间信息(模拟) app.get('/api/twilio/rooms', (req, res) => { res.json({ rooms: [ { name: 'test-room', participants: 0 }, { name: 'demo-room', participants: 2 }, ] }); }); // 启动服务器 app.listen(PORT, () => { console.log(`🚀 Twilio Token Server running on http://localhost:${PORT}`); console.log(`📋 Health check: http://localhost:${PORT}/health`); console.log(`🎥 Token endpoint: http://localhost:${PORT}/api/twilio/token`); console.log(''); console.log('⚠️ 请确保已设置正确的 Twilio 凭证:'); console.log(` TWILIO_ACCOUNT_SID: ${TWILIO_CONFIG.accountSid}`); console.log(` TWILIO_API_KEY: ${TWILIO_CONFIG.apiKey}`); console.log(` TWILIO_API_SECRET: ${TWILIO_CONFIG.apiSecret.substring(0, 4)}...`); }); module.exports = app;