Skip to content

Commit 5c5c728

Browse files
committed
fix(logs): quiet benign libsignal session noise across console.info/warn/error
suppressLibsignalNoise only filtered console.info 'Closing session:'. The decrypt-path noise (Bad MAC, 'Failed to decrypt message with any known session', 'Closing open session in favor of incoming prekey bundle') is emitted via console.error/warn, so it leaked through. Extend the filter to all benign libsignal prefixes across info/warn/error; non-matching logs pass untouched.
1 parent e4eb99e commit 5c5c728

2 files changed

Lines changed: 41 additions & 13 deletions

File tree

src/connection/status-log.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,33 @@ export function formatConnectionStatus(event: StatusEvent): string | null {
4646

4747
let noiseFilterInstalled = false
4848

49+
const LIBSIGNAL_NOISE: readonly string[] = [
50+
'Closing session:',
51+
'Closing open session',
52+
'Closing stale open session',
53+
'Opening session:',
54+
'Removing old closed session',
55+
'Migrating session to:',
56+
'Session already closed',
57+
'Decrypted message with closed session',
58+
'Failed to decrypt message with any known session',
59+
'Session error:',
60+
]
61+
62+
const isLibsignalNoise = (args: unknown[]): boolean =>
63+
typeof args[0] === 'string' && LIBSIGNAL_NOISE.some((p) => (args[0] as string).startsWith(p))
64+
4965
export function suppressLibsignalNoise(): void {
5066
if (noiseFilterInstalled) return
5167
noiseFilterInstalled = true
52-
const original = console.info.bind(console)
53-
console.info = (...args: unknown[]): void => {
54-
if (typeof args[0] === 'string' && args[0].startsWith('Closing session:')) return
55-
original(...args)
68+
const patch = (method: 'info' | 'warn' | 'error'): void => {
69+
const original = console[method].bind(console)
70+
console[method] = (...args: unknown[]): void => {
71+
if (isLibsignalNoise(args)) return
72+
original(...args)
73+
}
5674
}
75+
patch('info')
76+
patch('warn')
77+
patch('error')
5778
}

tests/connection/status-log.test.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,27 @@ describe('formatConnectionStatus', () => {
7373
})
7474

7575
describe('suppressLibsignalNoise', () => {
76-
it('drops libsignal "Closing session:" dumps but passes other console.info through', () => {
77-
const original = console.info
78-
const seen: unknown[][] = []
79-
console.info = (...args: unknown[]): void => {
80-
seen.push(args)
81-
}
76+
it('drops benign libsignal noise across info/warn/error, passes everything else through', () => {
77+
const orig = { info: console.info, warn: console.warn, error: console.error }
78+
const seen = { info: [] as unknown[][], warn: [] as unknown[][], error: [] as unknown[][] }
79+
console.info = (...args: unknown[]): void => void seen.info.push(args)
80+
console.warn = (...args: unknown[]): void => void seen.warn.push(args)
81+
console.error = (...args: unknown[]): void => void seen.error.push(args)
8282
try {
8383
suppressLibsignalNoise()
8484
console.info('Closing session:', { huge: 'SessionEntry' })
8585
console.info('regular log', 42)
86-
expect(seen).toHaveLength(1)
87-
expect(seen[0]?.[0]).toBe('regular log')
86+
console.warn('Closing open session in favor of incoming prekey bundle')
87+
console.error('Failed to decrypt message with any known session...')
88+
console.error('Session error:Error: Bad MAC', 'stack')
89+
console.error('a real error', { x: 1 })
90+
expect(seen.info.map((a) => a[0])).toEqual(['regular log'])
91+
expect(seen.warn).toHaveLength(0)
92+
expect(seen.error.map((a) => a[0])).toEqual(['a real error'])
8893
} finally {
89-
console.info = original
94+
console.info = orig.info
95+
console.warn = orig.warn
96+
console.error = orig.error
9097
}
9198
})
9299
})

0 commit comments

Comments
 (0)