fix(server): skip an unmappable event on replay instead of tearing down the stream

Wrap the per-event mapper.map in runCatching in the replay loop so a single
event the mapper can't handle no longer kills the whole WebSocket stream.
Defense-in-depth beyond the AnyMapSerializer fix.
This commit is contained in:
2026-07-03 01:01:04 +04:00
parent 527490e5df
commit ca3fd7971e
@@ -31,7 +31,10 @@ class SessionStreamHandler(private val module: ServerModule) {
log.debug("replaying {} event(s) for session={}", replayEvents.size, sessionId.value)
for (event in replayEvents) {
mapper.map(event)?.let { msg ->
runCatching { mapper.map(event) }
.onFailure { log.warn("skipping unmappable event seq={}: {}", event.sequence, it.message) }
.getOrNull()
?.let { msg ->
session.send(Frame.Text(ProtocolSerializer.encodeServerMessage(msg)))
}
}