CamarauthBackend
La clase CamarauthBackend es el núcleo del servidor de autenticación. Gestiona WebSockets, webhooks de WhatsApp, generación de PINs y tokens JWT.
Constructor
constructor(config: BackendConfig)
Parámetros
Configuración del backend
Ejemplo
import { CamarauthBackend } from '@camarauth/sdk/server';
const backend = new CamarauthBackend({
port: 3001,
host: '0.0.0.0',
jwtSecret: 'tu-secreto-jwt',
evolutionApiUrl: 'https://evolution-api.com',
evolutionApiKey: 'api-key',
evolutionInstanceName: 'mi-instancia',
pinExpirationMinutes: 3,
corsOrigins: ['http://localhost:5173']
});
Métodos
start()
Inicia el servidor HTTP y WebSocket.
backend.start();
// Servidor iniciado en http://localhost:3001
stop()
Detiene el servidor gracefully.
sendWhatsAppMessage()
Envía un mensaje de WhatsApp manualmente.
sendWhatsAppMessage(options: SendMessageOptions): Promise<void>
Parámetros
Número de teléfono destino
Nombre de la instancia de Evolution (opcional)
Ejemplo
await backend.sendWhatsAppMessage({
phoneNumber: '+1234567890',
message: '¡Hola! Tu PIN es: 🔐🔑'
});
getPins()
Obtiene el Map de PINs activos (útil para debugging).
getPins(): Map<string, PinData>
getApp()
Obtiene la instancia de Express (para agregar rutas personalizadas).
getApp(): express.Application
const app = backend.getApp();
app.get('/custom-route', (req, res) => {
res.json({ message: 'Ruta personalizada' });
});
getIO()
Obtiene la instancia de Socket.IO.
Eventos
El backend emite eventos que puedes escuchar:
auth:verified
Emitido cuando un PIN es verificado exitosamente.
backend.on('auth:verified', (data) => {
console.log('Usuario verificado:', data.userId);
console.log('Teléfono:', data.phoneNumber);
console.log('PIN:', data.pin);
});
Endpoints HTTP
El backend expone los siguientes endpoints:
| Método | Endpoint | Descripción |
|---|
| GET | /health | Health check |
| POST | /register-pin | Registrar nuevo PIN |
| POST | /check-login | Verificar estado de login |
| POST | /whatsapp-endpoint | Webhook para Evolution API |
| POST | /webhook/evolution | Alias del webhook |
| POST | /refresh-token | Refrescar token JWT |
| GET | /profile | Obtener perfil del usuario |
| POST | /logout | Cerrar sesión |
| POST | /send-message | Enviar mensaje WhatsApp |
WebSocket Events
Cliente → Servidor
register-pin - Registrar un PIN
cancel-auth - Cancelar autenticación
Servidor → Cliente
pin-registered - PIN registrado exitosamente
auth-success - Autenticación exitosa
pin-expired - PIN expirado
pin-error - Error en el PIN
Ejemplo completo
import { CamarauthBackend, PostgreSQLAdapter } from '@camarauth/sdk/server';
import { Pool } from 'pg';
const pool = new Pool({
connectionString: process.env.DATABASE_URL
});
const backend = new CamarauthBackend({
port: parseInt(process.env.PORT || '3001'),
host: process.env.HOST || '0.0.0.0',
jwtSecret: process.env.JWT_SECRET!,
evolutionApiUrl: process.env.EVOLUTION_API_URL!,
evolutionApiKey: process.env.EVOLUTION_API_KEY!,
evolutionInstanceName: process.env.EVOLUTION_INSTANCE_NAME!,
pinExpirationMinutes: 3,
corsOrigins: process.env.CORS_ORIGINS?.split(',') || ['http://localhost:5173'],
database: new PostgreSQLAdapter(pool)
});
// Escuchar eventos
backend.on('auth:verified', async (data) => {
// Enviar mensaje de bienvenida
await backend.sendWhatsAppMessage({
phoneNumber: data.phoneNumber,
message: `¡Bienvenido! Tu sesión ha sido verificada. 🔐`
});
});
// Iniciar servidor
backend.start();
// Graceful shutdown
process.on('SIGTERM', async () => {
console.log('Cerrando servidor...');
await backend.stop();
process.exit(0);
});
Véase también