RoleDesk Backend proporciona infraestructura robusta para espacios virtuales colaborativos con comunicación en tiempo real, gestión de sesiones distribuidas y algoritmos optimizados de proximidad para video chat automático.
| Categoría | Características |
|---|---|
| 🚀 Performance | • Soporte para 1000+ usuarios concurrentes • Latencia <50ms en eventos WebSocket • Throughput de 10,000 eventos/segundo • Memory pooling y garbage collection optimizada |
| 🔒 Seguridad | • Autenticación JWT con Supabase Auth • Row Level Security (RLS) en base de datos • Rate limiting avanzado por endpoint y evento • Validación exhaustiva con Zod schemas |
| 📡 Tiempo Real | • WebSocket bidireccional con Socket.IO • Event batching para optimización • Proximity engine con spatial partitioning • Sincronización de estado distribuido |
| 📊 Escalabilidad | • Architecture event-driven • Redis clustering para múltiples instancias • Connection pooling optimizado • Horizontal scaling ready |
- Node.js 18.0.0 o superior
- npm 8.0.0 o superior
- Proyecto Supabase configurado con las tablas requeridas
# Clonar repositorio
git clone <repository-url>
cd gather-clone/RoleDesk_B
# Instalar dependencias
npm install
# Verificar instalación
npm run type-check# Copiar template de configuración
cp .env.example .env
# Editar variables requeridas
nano .env# === CONFIGURACIÓN DEL SERVIDOR ===
PORT=3001
NODE_ENV=development
# === SUPABASE CONFIGURATION ===
SUPABASE_URL=https://tu-proyecto.supabase.co
SERVICE_ROLE=tu_supabase_service_role_key
# === CORS CONFIGURATION ===
FRONTEND_URL=http://localhost:3000Ejecutar el setup de Database Schema en tu proyecto Supabase.
# Modo desarrollo (recomendado)
npm run dev
# Verificar que funciona
curl http://localhost:3001/health✅ ¡Listo! El servidor estará disponible en http://localhost:3001
| Documento | Descripción | Estado |
|---|---|---|
| 🗄️ Database Schema | Configuración completa de Supabase, tablas, políticas RLS, triggers y optimizaciones | ✅ Completo |
| 🔌 Socket Events | Documentación exhaustiva de eventos WebSocket, validaciones y flujos | ✅ Completo |
| 🛡️ Security Guide | Mejores prácticas de seguridad, autenticación, autorización y incident response | ✅ Completo |
| ⚡ Performance Guide | Optimizaciones de memoria, CPU, base de datos y técnicas de escalabilidad | ✅ Completo |
| 🐛 Troubleshooting | Solución de problemas comunes, debugging y herramientas de diagnóstico | ✅ Completo |
| 📡 API Reference | Documentación completa de REST API y WebSocket API con ejemplos | ✅ Completo |
src/
├── 🚀 index.ts # Bootstrap del servidor y configuración inicial
├── 🔧 supabase.ts # Cliente Supabase y configuración de conexión
├── 📊 session.ts # SessionManager - Gestión centralizada de sesiones
├── 👥 Users.ts # UserManager - Cache de usuarios en memoria
├── 🛠️ utils.ts # Utilidades compartidas y helpers
├── 🌐 routes/ # Capa de API REST
│ ├── routes.ts # Definición de endpoints y middleware
│ └── route-types.ts # Tipos TypeScript para requests/responses
└── ⚡ sockets/ # Capa de comunicación en tiempo real
├── sockets.ts # Event handlers y lógica de negocio
├── socket-types.ts # Schemas Zod y tipos de eventos
└── helpers.ts # Funciones auxiliares para sockets
| Tecnología | Versión | Propósito | Documentación |
|---|---|---|---|
| Node.js | 18+ | Runtime JavaScript | nodejs.org |
| TypeScript | 5.8+ | Tipado estático y desarrollo escalable | typescriptlang.org |
| Express.js | 4.19+ | Framework web HTTP | expressjs.com |
| Socket.IO | 4.7+ | Comunicación WebSocket bidireccional | socket.io |
| Supabase | 2.43+ | Backend-as-a-Service (PostgreSQL) | supabase.com |
| Zod | 3.23+ | Validación de schemas y runtime types | zod.dev |
{
"devDependencies": {
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/node": "^20.12.7",
"@types/uuid": "^10.0.0",
"ts-node": "^10.9.2",
"typescript": "^5.8.3"
}
}GET /health # Estado del servidor
POST /api/realms # Crear nuevo espacio virtual
GET /api/realms/:id # Obtener datos del espacio
PUT /api/realms/:id # Actualizar espacio
GET /api/profiles/:uid # Obtener perfil de usuario
PUT /api/profiles/me # Actualizar perfil propiojoinRealm- Unirse a un espacio virtualmovePlayer- Actualizar posición del jugadorteleport- Teletransportar a nueva ubicaciónchangedSkin- Cambiar apariencia del avatarsendMessage- Enviar mensaje de chat
realmJoined- Confirmación de unión exitosaplayerMoved- Movimiento de otro jugadorproximityUpdate- Cambios en proximidad para video chatmessageReceived- Nuevo mensaje de chatsessionTerminated- Sesión terminada por el servidor
📖 Ver documentación completa de API
# 🚀 Desarrollo
npm run dev # Servidor con hot-reload (ts-node + nodemon)
npm run type-check # Verificación de tipos TypeScript
# 🏗️ Construcción y Producción
npm run build # Compilar TypeScript → JavaScript
npm start # Ejecutar servidor compilado
# 🧪 Testing y Calidad
npm test # Ejecutar test suite
npm run test:watch # Tests en modo watch
npm run lint # Linting con ESLint
# 📦 Deployment
npm run heroku-postbuild # Build automático para HerokuFROM node:18-alpine
WORKDIR /app
# Instalar dependencias
COPY package*.json ./
RUN npm ci --only=production
# Copiar aplicación compilada
COPY dist ./dist
# Configurar usuario no-root
RUN addgroup -g 1001 -S nodejs && \
adduser -S backend -u 1001
USER backend
EXPOSE 3001
CMD ["npm", "start"]# Configurar variables de entorno en el dashboard
SUPABASE_URL=https://tu-proyecto.supabase.co
SERVICE_ROLE=tu_production_service_role_key
FRONTEND_URL=https://tu-dominio.com
NODE_ENV=production# Instalar PM2 globalmente
npm install -g pm2
# Configurar ecosystem
cp ecosystem.config.js.example ecosystem.config.js
# Desplegar
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup📖 Ver guía completa de deployment
# Endpoint de métricas de performance
curl http://localhost:3001/debug/metrics | jq
# Monitoreo con PM2
pm2 monit
# Logs en tiempo real
pm2 logs --lines 50# Health check básico
curl http://localhost:3001/health
# Estado de sesiones activas
curl http://localhost:3001/debug/sessions
# Métricas de base de datos
curl http://localhost:3001/debug/db-stats| Métrica | Desarrollo | Producción |
|---|---|---|
| Latencia WebSocket | <100ms | <50ms |
| Throughput Eventos | 5,000/s | 10,000/s |
| Usuarios Concurrentes | 100+ | 1,000+ |
| Uso de Memoria | <1GB | <512MB |
| Uptime | 99%+ | 99.9%+ |
# Verificar conectividad de base de datos
npm run test:db
# Verificar configuración
npm run validate-config
# Análisis de memoria
node --inspect dist/index.js
# Profiling de performance
clinic doctor -- node dist/index.js| Problema | Solución Rápida | Documentación |
|---|---|---|
| "Invalid access token" | Verificar variables SUPABASE_URL y SERVICE_ROLE | 🛡️ Security Guide |
| "Connection refused" | Verificar puerto y firewall, revisar CORS | 🐛 Troubleshooting |
| "High memory usage" | Revisar session cleanup y memory leaks | ⚡ Performance Guide |
| "Players not syncing" | Verificar room membership y state reconciliation | 🔌 Socket Events |
📖 Ver guía completa de troubleshooting
# Ejecutar todos los tests
npm test
# Tests con coverage
npm run test:coverage
# Tests de integración
npm run test:integration
# Load testing con Artillery
npm run load-test// Ejemplo de test de API
describe('Realms API', () => {
test('should create realm successfully', async () => {
const response = await request(app)
.post('/api/realms')
.set('Authorization', `Bearer ${authToken}`)
.send({
map_data: {
name: 'Test Realm',
dimensions: { width: 800, height: 600 }
}
})
.expect(201)
expect(response.body).toHaveProperty('id')
expect(response.body.map_data.name).toBe('Test Realm')
})
})# Fork y clonar el repositorio
git clone https://github.com/tu-usuario/roledesk-backend.git
cd roledesk-backend
# Instalar dependencias
npm install
# Configurar hooks de Git
npm run prepare
# Ejecutar verificaciones
npm run lint && npm run type-check && npm test- 🍴 Fork el proyecto
- 🌿 Branch para tu feature (
git checkout -b feature/nueva-funcionalidad) - ✨ Commit tus cambios (
git commit -m 'feat: agregar nueva funcionalidad') - 🚀 Push a la branch (
git push origin feature/nueva-funcionalidad) - 🔄 Pull Request con descripción detallada
- ✅ TypeScript Strict Mode obligatorio
- ✅ ESLint + Prettier para formateo
- ✅ Conventional Commits para mensajes
- ✅ Test Coverage >80% para nuevas features
- ✅ Zod Validation para todos los inputs
- ✅ Error Handling exhaustivo con logging
- 🔐 Sistema de moderación avanzado
- 📊 Dashboard de analytics en tiempo real
- 🎮 Plugin system para extensibilidad
- 🌍 Internacionalización (i18n)
- 📱 SDK para desarrollo de clientes
- 🧪 Más test coverage y casos edge
| Q2 2025 | Q3 2025 | Q4 2025 | 2026 |
|---|---|---|---|
| • Sistema de Moderación • Rate Limiting Avanzado • Métricas Extensas |
• Redis Clustering • Auto-scaling • Performance Optimizations |
• GraphQL API • Plugin System • Advanced Analytics |
• AI-powered Features • Multi-region Support • Enterprise Features |
Este proyecto está licenciado bajo GNU General Public License v3.0.
✅ Permitido:
- ✅ Uso comercial y personal
- ✅ Modificación del código fuente
- ✅ Distribución del software
- ✅ Uso de patentes incluidas
❌ Limitaciones:
- ❌ Sin garantía de funcionamiento
- ❌ Sin responsabilidad por daños
- ❌ Debe mantener la misma licencia GPL v3
📝 Condiciones:
- 📝 Incluir licencia y copyright en distribuciones
- 📝 Documentar cambios realizados al código
- 📝 Divulgar código fuente completo si se distribuye
- 📝 Usar la misma licencia GPL v3 en trabajos derivados
Ver CONTRIBUTORS.md para la lista completa de contribuidores que han hecho posible este proyecto.
- 🐛 Issues: GitHub Issues
- 💬 Discusiones: GitHub Discussions
- 📧 Email: support@roledesk.app
- 💬 Discord: discord.gg/roledesk
- 📱 Twitter: @RoleDeskApp
Agradecimientos especiales a:
📖 Leer Documentación • 🛠️ Ver API Reference • 🤝 Contribuir
Construido con ❤️ por el equipo de RoleDesk
Última actualización: 28 de junio de 2025
