Skip to main content

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

config
BackendConfig
required
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.
start(): void
backend.start();
// Servidor iniciado en http://localhost:3001

stop()

Detiene el servidor gracefully.
stop(): Promise<void>
await backend.stop();

sendWhatsAppMessage()

Envía un mensaje de WhatsApp manualmente.
sendWhatsAppMessage(options: SendMessageOptions): Promise<void>

Parámetros

options.phoneNumber
string
required
Número de teléfono destino
options.message
string
required
Mensaje a enviar
options.instanceName
string
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.
getIO(): Server

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étodoEndpointDescripción
GET/healthHealth check
POST/register-pinRegistrar nuevo PIN
POST/check-loginVerificar estado de login
POST/whatsapp-endpointWebhook para Evolution API
POST/webhook/evolutionAlias del webhook
POST/refresh-tokenRefrescar token JWT
GET/profileObtener perfil del usuario
POST/logoutCerrar sesión
POST/send-messageEnviar 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