whatsapp-crm-common
Version:
Componentes compartidos para servicios de WhatsApp CRM - Common utilities and types for WhatsApp CRM system
72 lines • 2.35 kB
TypeScript
import { RedisClient } from "../../config/redis-config";
import { WhatsAppEventType } from "../../events/types/event-types";
import { WhatsAppEvent } from "../../events/types/event-interfaces";
export interface PubSubOptions {
subscriberPoolSize?: number;
enableRetry?: boolean;
retryAttempts?: number;
}
export interface NotificationData {
type: 'notification' | 'broadcast' | 'alert';
event: WhatsAppEventType;
data: any;
timestamp: number;
source: string;
}
/**
* Sistema Pub/Sub para notificaciones en tiempo real
* Complementa BullMQ para eventos no críticos que requieren baja latencia
*/
export declare class WhatsAppPubSubSystem {
private publisher;
private subscribers;
private subscriberPool;
private activeSubscriptions;
private options;
constructor(redisClient: RedisClient, options?: PubSubOptions);
/**
* Inicializa el pool de suscriptores para distribuir la carga
*/
private initializeSubscriberPool;
/**
* Publica un evento para notificaciones en tiempo real
*/
publishEvent(event: WhatsAppEvent): Promise<number>;
/**
* Publica una notificación específica para la UI
*/
publishNotification(event: WhatsAppEvent): Promise<void>;
/**
* Suscribirse a un patrón de canales
*/
subscribe(pattern: string, handler: (channel: string, event: WhatsAppEvent) => Promise<void>): Promise<void>;
/**
* Suscribirse a notificaciones de un tenant/agente específico
*/
subscribeToNotifications(tenantId: string, agentId: number, callback: (notification: NotificationData) => void): Promise<void>;
/**
* Broadcast a todos los usuarios de un tenant
*/
broadcastToTenant(tenantId: string, data: any): Promise<void>;
/**
* Obtiene estadísticas del sistema Pub/Sub
*/
getStats(): Promise<any>;
/**
* Desconectar una suscripción específica
*/
unsubscribe(tenantId: string, agentId: number): Promise<void>;
/**
* Cerrar todas las conexiones
*/
shutdown(): Promise<void>;
/**
* Obtiene el canal apropiado para un tipo de evento
*/
private getChannelForEvent;
/**
* Obtiene un suscriptor disponible del pool
*/
private getAvailableSubscriber;
}
//# sourceMappingURL=whatsapp-pubsub.d.ts.map