From 9f1d0c4a433ea5daa56b2fbb34d56be6f1cec4f6 Mon Sep 17 00:00:00 2001 From: Renato Alcara Date: Sun, 15 Feb 2026 23:12:14 -0300 Subject: [PATCH] fix(chats): add LID/PN dual identifier validation for updateBlockStatus WhatsApp now requires both LID and PN JID when blocking a user. Resolves identifiers via signalRepository.lidMapping and sends both for block operations. Unblock only sends LID as required by protocol. Based on WhiskeySockets/Baileys#2265 Co-Authored-By: Claude Opus 4.6 --- src/Socket/chats.ts | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/src/Socket/chats.ts b/src/Socket/chats.ts index 03db6e82..73dabfbc 100644 --- a/src/Socket/chats.ts +++ b/src/Socket/chats.ts @@ -431,6 +431,42 @@ export const makeChatsSocket = (config: SocketConfig) => { } const updateBlockStatus = async (jid: string, action: 'block' | 'unblock') => { + let lid: string + let pn_jid: string | undefined + + if (isLidUser(jid)) { + lid = jid + if (action === 'block') { + const pn = await signalRepository.lidMapping.getPNForLID(jid) + if (!pn) { + throw new Boom(`Unable to resolve PN JID for LID: ${jid}`) + } + + pn_jid = jidNormalizedUser(pn) + } + } else if (isPnUser(jid)) { + const mapped = await signalRepository.lidMapping.getLIDForPN(jid) + if (!mapped) { + throw new Boom(`Unable to resolve LID for PN JID: ${jid}`) + } + + lid = mapped + if (action === 'block') { + pn_jid = jidNormalizedUser(jid) + } + } else { + throw new Boom(`Invalid jid for block/unblock: ${jid}`) + } + + const itemAttrs: { action: 'block' | 'unblock'; jid: string; pn_jid?: string } = { + action, + jid: lid + } + + if (action === 'block' && pn_jid) { + itemAttrs.pn_jid = pn_jid + } + await query({ tag: 'iq', attrs: { @@ -441,10 +477,7 @@ export const makeChatsSocket = (config: SocketConfig) => { content: [ { tag: 'item', - attrs: { - action, - jid - } + attrs: itemAttrs } ] })