whatsapp-crm-common
Version:
Componentes compartidos para servicios de WhatsApp CRM - Common utilities and types for WhatsApp CRM system
212 lines • 5.83 kB
TypeScript
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