whatsapp-crm-common
Version:
Componentes compartidos para servicios de WhatsApp CRM - Common utilities and types for WhatsApp CRM system
101 lines • 3.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatPhoneNumber = formatPhoneNumber;
exports.formatPhoneNumberForDisplay = formatPhoneNumberForDisplay;
exports.isValidPhoneNumber = isValidPhoneNumber;
exports.formatGroupId = formatGroupId;
exports.extractPhoneNumber = extractPhoneNumber;
exports.timestampToDate = timestampToDate;
exports.formatDateTime = formatDateTime;
/**
* Formatea un número de teléfono para asegurar que tenga el formato correcto para WhatsApp
* @param phone Número de teléfono (con código de país)
* @returns Número formateado para WhatsApp
*/
function formatPhoneNumber(phone) {
// Eliminar cualquier carácter no numérico
let cleaned = phone.replace(/\D/g, "");
// Asegurar que tiene el formato correcto para WhatsApp (CCNNNNNNNNN@s.whatsapp.net)
if (!cleaned.includes("@")) {
cleaned = `${cleaned}@s.whatsapp.net`;
}
return cleaned;
}
/**
* Formatea un número de teléfono para mostrar en la interfaz de usuario
* @param phone Número de teléfono con formato WhatsApp
* @returns Número formateado para mostrar
*/
function formatPhoneNumberForDisplay(phone) {
// Quitar el sufijo '@s.whatsapp.net' si existe
let cleaned = phone.replace(/@s\.whatsapp\.net$/, "");
// Formatear como +CC NNN NNN NNN si es posible
if (cleaned.length > 2) {
// Asumir que los primeros 2-3 dígitos son el código de país
const countryCode = cleaned.substring(0, cleaned.length > 10 ? 3 : 2);
const rest = cleaned.substring(countryCode.length);
// Insertar espacios cada 3 dígitos
let formatted = "";
for (let i = 0; i < rest.length; i += 3) {
formatted += " " + rest.substring(i, Math.min(i + 3, rest.length));
}
return `+${countryCode}${formatted}`;
}
return cleaned;
}
/**
* Verifica si un número de teléfono tiene el formato correcto para WhatsApp
* @param phone Número de teléfono a verificar
* @returns true si el formato es válido, false en caso contrario
*/
function isValidPhoneNumber(phone) {
// Patrón básico: código de país + número (al menos 10 dígitos en total)
const phonePattern = /^\d{10,15}$/;
// Limpiar el número de cualquier caracter que no sea dígito
const cleaned = phone.replace(/\D/g, "");
return phonePattern.test(cleaned);
}
/**
* Convierte un ID de chat grupal al formato JID de WhatsApp
* @param groupId ID del grupo
* @returns ID del grupo en formato JID
*/
function formatGroupId(groupId) {
// Asegurar que tiene el formato correcto para grupos de WhatsApp
if (!groupId.includes("@")) {
groupId = `${groupId}@g.us`;
}
return groupId;
}
/**
* Extrae el número de teléfono desde un JID de WhatsApp
* @param jid JID de WhatsApp (ej: '5491155555555@s.whatsapp.net')
* @returns Número de teléfono sin el dominio
*/
function extractPhoneNumber(jid) {
return jid.split("@")[0];
}
/**
* Convierte una marca de tiempo de WhatsApp a Date
* @param timestamp Marca de tiempo en formato WhatsApp (segundos)
* @returns Objeto Date
*/
function timestampToDate(timestamp) {
// WhatsApp usa segundos, JavaScript usa milisegundos
return new Date(timestamp * 1000);
}
/**
* Formatea una fecha para mostrar en la interfaz de usuario
* @param date Fecha a formatear
* @returns Fecha formateada
*/
function formatDateTime(date) {
return date.toLocaleString("es-ES", {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
});
}
//# sourceMappingURL=formatter.js.map