UNPKG

whatsapp-crm-common

Version:

Componentes compartidos para servicios de WhatsApp CRM - Common utilities and types for WhatsApp CRM system

212 lines 5.83 kB
import { WhatsAppEventType, EventPriority, EventStatus } from "./event-types"; /** * Interfaz base para todos los eventos del sistema WhatsApp */ export interface BaseWhatsAppEvent { /** Identificador único del evento */ id?: string; /** ID del tenant (inmobiliaria) */ tenantId: string; /** ID del agente */ agentId: number; /** Tipo de evento */ eventType: WhatsAppEventType; /** Clave de sesión única */ sessionKey: string; /** Timestamp del evento */ timestamp: number; /** Prioridad del evento para procesamiento */ priority?: EventPriority; /** Estado del procesamiento */ status?: EventStatus; /** Número de intentos de procesamiento */ attempts?: number; /** Metadatos adicionales */ metadata?: Record<string, any>; } /** * Evento de mensaje nuevo */ export interface MessageEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.MESSAGE_NEW; data: { messages: any[]; chatId?: string; fromMe?: boolean; }; } /** * Evento de actualización de mensaje */ export interface MessageUpdateEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.MESSAGE_UPDATE; data: { updates: any[]; chatId?: string; }; } /** * Evento de sincronización de historial */ export interface HistorySyncEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.HISTORY_SYNC | WhatsAppEventType.HISTORY_PARTIAL; data: { chats: any[]; contacts: any[]; messages: any[]; isLatest?: boolean; progress?: number; syncType?: any; peerDataRequestSessionId?: string; }; } /** * Evento de estado de conexión */ export interface ConnectionStatusEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.CONNECTION_STATUS; data: { connected: boolean; reason?: string; lastDisconnect?: any; qrCode?: string; }; } /** * Evento de código QR generado */ export interface QRCodeEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.QR_CODE_GENERATED; data: { qrCode: string; timestamp: number; }; } /** * Evento de notificación webhook */ export interface WebhookEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.WEBHOOK_NOTIFICATION; data: { webhookUrl: string; payload: any; retryCount?: number; }; } /** * Evento de actualización de contacto */ export interface ContactUpdateEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.CONTACT_UPDATE; data: { contacts: any[]; action: "create" | "update" | "delete"; }; } /** * Evento de actualización de conexión */ export interface ConnectionUpdateEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.CONNECTION_UPDATE; data: { connection: string; lastDisconnect?: any; qr?: any; timestamp: number; }; } /** * Evento de actualización de presencia */ export interface PresenceUpdateEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.PRESENCE_UPDATE; data: { jid: string; presence: string; timestamp?: number; }; } /** * Evento de inicio de escritura */ export interface TypingStartEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.TYPING_START; data: { jid: string; timestamp?: number; }; } /** * Evento de fin de escritura */ export interface TypingStopEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.TYPING_STOP; data: { jid: string; timestamp?: number; }; } /** * Evento de salud del sistema */ export interface SystemHealthEvent extends BaseWhatsAppEvent { eventType: WhatsAppEventType.SYSTEM_HEALTH; data: { status: string; metrics: any; timestamp: number; }; } /** * Unión de todos los tipos de eventos */ export type WhatsAppEvent = MessageEvent | MessageUpdateEvent | HistorySyncEvent | ConnectionStatusEvent | QRCodeEvent | WebhookEvent | ContactUpdateEvent | ConnectionUpdateEvent | PresenceUpdateEvent | TypingStartEvent | TypingStopEvent | SystemHealthEvent; /** * Configuración de procesamiento de eventos */ export interface EventProcessingConfig { /** Número máximo de intentos */ maxAttempts: number; /** Delay entre intentos (en ms) */ retryDelay: number; /** Timeout para procesamiento (en ms) */ processingTimeout: number; /** Indica si el evento debe ser procesado en orden */ ordered?: boolean; } /** * Resultado del procesamiento de un evento */ export interface EventProcessingResult { /** Indica si el procesamiento fue exitoso */ success: boolean; /** Mensaje de resultado */ message?: string; /** Datos resultantes del procesamiento */ data?: any; /** Error si el procesamiento falló */ error?: Error; /** Tiempo de procesamiento en ms */ processingTime?: number; } /** * Interfaz para publishers de eventos */ export interface IEventPublisher { /** Publica un evento en la cola correspondiente */ publishEvent(event: WhatsAppEvent, queueName?: string): Promise<void>; /** Publica múltiples eventos en batch */ publishBatch(events: WhatsAppEvent[], queueName?: string): Promise<void>; } /** * Interfaz para handlers de eventos */ export interface IEventHandler { /** Procesa un evento específico */ handleEvent(event: WhatsAppEvent): Promise<EventProcessingResult>; /** Indica si el handler puede procesar este tipo de evento */ canHandle(eventType: WhatsAppEventType): boolean; /** Configura el handler */ configure(config: EventProcessingConfig): void; } //# sourceMappingURL=event-interfaces.d.ts.map