@whiskeysockets/baileys
Version:
A WebSockets library for interacting with WhatsApp Web
49 lines • 1.68 kB
JavaScript
import { proto } from '../../WAProto/index.js';
import { isLidUser, isPnUser } from '../WABinary/index.js';
/**
* Process contactAction and return events to emit.
* Pure function - no side effects.
*/
export const processContactAction = (action, id, logger) => {
const results = [];
if (!id) {
logger?.warn({ hasFullName: !!action.fullName, hasLidJid: !!action.lidJid, hasPnJid: !!action.pnJid }, 'contactAction sync: missing id in index');
return results;
}
const lidJid = action.lidJid;
const idIsPn = isPnUser(id);
// PN is in index[1], not in contactAction.pnJid which is usually null
const phoneNumber = idIsPn ? id : action.pnJid || undefined;
// Always emit contacts.upsert
results.push({
event: 'contacts.upsert',
data: [
{
id,
name: action.fullName || action.firstName || action.username || undefined,
username: action.username || undefined,
lid: lidJid || undefined,
phoneNumber
}
]
});
// Emit lid-mapping.update if we have valid LID-PN pair
if (lidJid && isLidUser(lidJid) && idIsPn) {
results.push({
event: 'lid-mapping.update',
data: { lid: lidJid, pn: id }
});
}
return results;
};
export const emitSyncActionResults = (ev, results) => {
for (const result of results) {
if (result.event === 'contacts.upsert') {
ev.emit('contacts.upsert', result.data);
}
else {
ev.emit('lid-mapping.update', result.data);
}
}
};
//# sourceMappingURL=sync-action-utils.js.map