From 0640de9a38508481b8220a1b29813f8007886b6d Mon Sep 17 00:00:00 2001 From: Renato Alcara Date: Tue, 17 Mar 2026 23:01:20 -0300 Subject: [PATCH] Reapply "refactor: flatten participant encryption flow for lint" This reverts commit 7a66f8b3d6bf54283d0eb9baaa0d5d24be0f3fb8. --- src/Socket/messages-send.ts | 103 +++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 38 deletions(-) diff --git a/src/Socket/messages-send.ts b/src/Socket/messages-send.ts index a53bd937..cb2ec727 100644 --- a/src/Socket/messages-send.ts +++ b/src/Socket/messages-send.ts @@ -74,8 +74,6 @@ import { import { USyncQuery, USyncUser } from '../WAUSync' import { makeNewsletterSocket } from './newsletter' -/* eslint-disable max-depth */ - export const makeMessagesSocket = (config: SocketConfig) => { const { logger, @@ -601,7 +599,57 @@ export const makeMessagesSocket = (config: SocketConfig) => { return patchedMessage } - /* eslint-disable max-depth */ + const encryptPatchedMessageForRecipient = async ({ + jid, + patchedMessage, + dsmMessage, + meId, + meLid, + meLidUser, + extraAttrs, + onPkmsg + }: { + jid: string + patchedMessage: proto.IMessage + dsmMessage: proto.IMessage | undefined + meId: string + meLid: string | undefined + meLidUser: string | null | undefined + extraAttrs: BinaryNode['attrs'] | undefined + onPkmsg: () => void + }) => { + if (!jid) return null + + try { + const msgToEncrypt = resolveDsmMessageForRecipient(jid, patchedMessage, dsmMessage, meId, meLid, meLidUser) + const bytes = encodeWAMessage(msgToEncrypt) + const mutexKey = jid + + return await encryptionMutex.mutex(mutexKey, async () => { + const { type, ciphertext } = await signalRepository.encryptMessage({ jid, data: bytes }) + + if (type === 'pkmsg') { + onPkmsg() + } + + return { + tag: 'to', + attrs: { jid }, + content: [ + { + tag: 'enc', + attrs: { v: '2', type, ...(extraAttrs || {}) }, + content: ciphertext + } + ] + } as BinaryNode + }) + } catch (err) { + logger.error({ jid, err }, 'Failed to encrypt for recipient') + return null + } + } + const createParticipantNodes = async ( recipientJids: string[], message: proto.IMessage, @@ -622,42 +670,22 @@ export const makeMessagesSocket = (config: SocketConfig) => { if (!meId) throw new Boom('Not authenticated', { statusCode: 401 }) const meLid = authState.creds.me?.lid const meLidUser = meLid ? (jidDecode(meLid)?.user ?? null) : null + const onPkmsg = () => { + shouldIncludeDeviceIdentity = true + } const encryptionPromises = (patchedMessages as { recipientJid: string; message: proto.IMessage }[]).map( - async ({ recipientJid: jid, message: patchedMessage }: { recipientJid: string; message: proto.IMessage }) => { - try { - if (!jid) return null - - const msgToEncrypt = resolveDsmMessageForRecipient(jid, patchedMessage, dsmMessage, meId, meLid, meLidUser) - const bytes = encodeWAMessage(msgToEncrypt) - const mutexKey = jid - - const node = await encryptionMutex.mutex(mutexKey, async () => { - const { type, ciphertext } = await signalRepository.encryptMessage({ jid, data: bytes }) - - if (type === 'pkmsg') { - shouldIncludeDeviceIdentity = true - } - - return { - tag: 'to', - attrs: { jid }, - content: [ - { - tag: 'enc', - attrs: { v: '2', type, ...(extraAttrs || {}) }, - content: ciphertext - } - ] - } - }) - - return node - } catch (err) { - logger.error({ jid, err }, 'Failed to encrypt for recipient') - return null - } - } + ({ recipientJid: jid, message: patchedMessage }: { recipientJid: string; message: proto.IMessage }) => + encryptPatchedMessageForRecipient({ + jid, + patchedMessage, + dsmMessage, + meId, + meLid, + meLidUser, + extraAttrs, + onPkmsg + }) ) const nodes = (await Promise.all(encryptionPromises)).filter(node => node !== null) as BinaryNode[] @@ -669,7 +697,6 @@ export const makeMessagesSocket = (config: SocketConfig) => { return { nodes, shouldIncludeDeviceIdentity } } - /* eslint-enable max-depth */ // Interactive message detection and binary node injection