From e5f820d1197d6db501c268873b6046f5ee440eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Lucas=20de=20Oliveira=20Lopes?= <55464917+jlucaso1@users.noreply.github.com> Date: Wed, 19 Nov 2025 10:12:28 -0300 Subject: [PATCH] fix: gracefully handle unavailable view-once messages and improve log error (#2070) --- src/Socket/messages-recv.ts | 10 ++++++++++ src/Socket/socket.ts | 6 ++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Socket/messages-recv.ts b/src/Socket/messages-recv.ts index 274b2732..98a4cbec 100644 --- a/src/Socket/messages-recv.ts +++ b/src/Socket/messages-recv.ts @@ -1143,6 +1143,7 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { } const encNode = getBinaryNodeChild(node, 'enc') + const unavailableNode = getBinaryNodeChild(node, 'unavailable') // TODO: temporary fix for crashes and issues resulting of failed msmsg decryption if (encNode && encNode.attrs.type === 'msmsg') { @@ -1151,6 +1152,15 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => { return } + if (unavailableNode) { + logger.warn( + { id: node.attrs.id, from: node.attrs.from, type: unavailableNode.attrs?.type }, + 'received unavailable message, sending positive ack' + ) + await sendMessageAck(node) + return + } + const { fullMessage: msg, category, diff --git a/src/Socket/socket.ts b/src/Socket/socket.ts index cb5e5070..efc75253 100644 --- a/src/Socket/socket.ts +++ b/src/Socket/socket.ts @@ -38,6 +38,7 @@ import { type BinaryNode, binaryNodeToString, encodeBinaryNode, + getAllBinaryNodeChildren, getBinaryNodeChild, getBinaryNodeChildren, isLidUser, @@ -908,11 +909,12 @@ export const makeSocket = (config: SocketConfig) => { }) ws.on('CB:stream:error', (node: BinaryNode) => { - logger.error({ node }, 'stream errored out') + const [reasonNode] = getAllBinaryNodeChildren(node) + logger.error({ reasonNode, fullErrorNode: node }, 'stream errored out') const { reason, statusCode } = getErrorCodeFromStreamError(node) - end(new Boom(`Stream Errored (${reason})`, { statusCode, data: node })) + end(new Boom(`Stream Errored (${reason})`, { statusCode, data: reasonNode || node })) }) // stream fail, possible logout ws.on('CB:failure', (node: BinaryNode) => {