fix: gracefully handle unavailable view-once messages and improve log error (#2070)

This commit is contained in:
João Lucas de Oliveira Lopes
2025-11-19 10:12:28 -03:00
committed by GitHub
parent abf5af0e72
commit e5f820d119
2 changed files with 14 additions and 2 deletions
+10
View File
@@ -1143,6 +1143,7 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => {
} }
const encNode = getBinaryNodeChild(node, 'enc') const encNode = getBinaryNodeChild(node, 'enc')
const unavailableNode = getBinaryNodeChild(node, 'unavailable')
// TODO: temporary fix for crashes and issues resulting of failed msmsg decryption // TODO: temporary fix for crashes and issues resulting of failed msmsg decryption
if (encNode && encNode.attrs.type === 'msmsg') { if (encNode && encNode.attrs.type === 'msmsg') {
@@ -1151,6 +1152,15 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => {
return 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 { const {
fullMessage: msg, fullMessage: msg,
category, category,
+4 -2
View File
@@ -38,6 +38,7 @@ import {
type BinaryNode, type BinaryNode,
binaryNodeToString, binaryNodeToString,
encodeBinaryNode, encodeBinaryNode,
getAllBinaryNodeChildren,
getBinaryNodeChild, getBinaryNodeChild,
getBinaryNodeChildren, getBinaryNodeChildren,
isLidUser, isLidUser,
@@ -908,11 +909,12 @@ export const makeSocket = (config: SocketConfig) => {
}) })
ws.on('CB:stream:error', (node: BinaryNode) => { 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) 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 // stream fail, possible logout
ws.on('CB:failure', (node: BinaryNode) => { ws.on('CB:failure', (node: BinaryNode) => {