fix: address
fix: address
This commit is contained in:
+22
-15
@@ -30,22 +30,29 @@ console.log = function(...args: unknown[]) {
|
|||||||
if (args.length > 0 && typeof args[0] === 'string') {
|
if (args.length > 0 && typeof args[0] === 'string') {
|
||||||
const msg = args[0]
|
const msg = args[0]
|
||||||
|
|
||||||
// Suppress session lifecycle dumps (cryptographic details on every encrypt/decrypt)
|
// Check if this log comes from libsignal by examining the call stack
|
||||||
if (msg.startsWith('Closing session')) {
|
// This prevents suppressing unrelated logs from other modules
|
||||||
return
|
const stack = new Error().stack || ''
|
||||||
}
|
const isFromLibsignal = stack.includes('libsignal') || stack.includes('session_cipher')
|
||||||
|
|
||||||
// Suppress transient decryption errors that are auto-recovered by retry logic
|
if (isFromLibsignal) {
|
||||||
// These flood logs during normal operation when sessions are being re-established
|
// Suppress session lifecycle dumps (cryptographic details on every encrypt/decrypt)
|
||||||
// Final failures are still logged via our structured logger (see decode-wa-message.ts)
|
if (msg.startsWith('Closing session')) {
|
||||||
if (
|
return
|
||||||
msg.includes('Session error') ||
|
}
|
||||||
msg.includes('Bad MAC') ||
|
|
||||||
msg.includes('MessageCounterError') ||
|
// Suppress transient decryption errors that are auto-recovered by retry logic
|
||||||
msg.includes('Key used already or never filled') ||
|
// These flood logs during normal operation when sessions are being re-established
|
||||||
msg.includes('Failed to decrypt message with any known session')
|
// Final failures are still logged via our structured logger (see decode-wa-message.ts)
|
||||||
) {
|
if (
|
||||||
return // suppress - our retry system handles these gracefully
|
msg.includes('Session error') ||
|
||||||
|
msg.includes('Bad MAC') ||
|
||||||
|
msg.includes('MessageCounterError') ||
|
||||||
|
msg.includes('Key used already or never filled') ||
|
||||||
|
msg.includes('Failed to decrypt message with any known session')
|
||||||
|
) {
|
||||||
|
return // suppress - our retry system handles these gracefully
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -405,12 +405,10 @@ export const decryptMessageNode = (
|
|||||||
...(isRetryExhausted && { retriesExhausted: true, attempts: err.attempts })
|
...(isRetryExhausted && { retriesExhausted: true, attempts: err.attempts })
|
||||||
}
|
}
|
||||||
|
|
||||||
// Smart logging: Only show ERROR on final failure
|
// Smart logging based on error type and retry status
|
||||||
// During retries, libsignal may log internally - we can't suppress those
|
|
||||||
// But we can avoid adding our own duplicate error logs for each retry
|
|
||||||
if (isCorrupted) {
|
if (isCorrupted) {
|
||||||
// Corrupted session errors are expected and auto-recovered
|
// Corrupted session errors are expected and auto-recovered
|
||||||
// Only log as ERROR if this is the final failure after all retries
|
// Only log as ERROR if retries exhausted, otherwise WARN on first attempt
|
||||||
if (isRetryExhausted) {
|
if (isRetryExhausted) {
|
||||||
logger.error(
|
logger.error(
|
||||||
errorContext,
|
errorContext,
|
||||||
@@ -450,9 +448,10 @@ export const decryptMessageNode = (
|
|||||||
logger.debug(errorContext, 'No session record - will retry')
|
logger.debug(errorContext, 'No session record - will retry')
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Unknown/unexpected error - always log as error
|
// Unknown/unexpected errors (protobuf, parsing, etc.)
|
||||||
const logLevel = isRetryExhausted ? 'error' : 'warn'
|
// These don't go through retry, so always log as ERROR
|
||||||
logger[logLevel](
|
// Type-safe explicit logging instead of dynamic property access
|
||||||
|
logger.error(
|
||||||
errorContext,
|
errorContext,
|
||||||
isRetryExhausted
|
isRetryExhausted
|
||||||
? `Failed to decrypt message after ${err.attempts} attempts`
|
? `Failed to decrypt message after ${err.attempts} attempts`
|
||||||
@@ -461,7 +460,8 @@ export const decryptMessageNode = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT
|
fullMessage.messageStubType = proto.WebMessageInfo.StubType.CIPHERTEXT
|
||||||
fullMessage.messageStubParameters = [originalError.message.toString()]
|
// Safe coercion handling edge cases where message might be undefined
|
||||||
|
fullMessage.messageStubParameters = [String(originalError?.message ?? originalError)]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user