DeathNotificationLib v27
What's new
V27 — 2026-08-12
Improvements
- Hardened the receive paths against fabricated death floods. Previously both live
BROADCAST_DEATH_PINGmessages and background sync only ran a relaxed structural check, so a flood of junk names (digits, wire-unsafe characters, slurs that the game would never issue) could be committed. Incoming entries are now strictly validated — sync entries against the fullvalidatePlayerData(field types, known NPC sources, plausible names), and live broadcasts against the same locale-independent name rules — so forged entries are dropped on arrival. Legacy V2 broadcasts and UltraHardcore re-injections route through the same path and are covered; Blizzard-channel deaths are unaffected because they are built locally from server-authenticated data. - Added per-sender volume rate limiting on the live path (token bucket: 20-death burst, refilling at 1/second). A single sender can no longer swamp the log with hundreds of well-formed but fake deaths. Self-reports are exempt (the chat server authenticates the sender), and unattributable senders share one bucket so they cannot bypass the cap.
- Added a
reported_byfield to the death-alert entry so consumers can display which peer reported a death (surfaced by Deathlog's<reported_by>alert tag). Only populated for peer broadcasts — a self-report's sender is the victim, and Blizzard-sourced deaths have no transmitter. The alert copy is duplicated before the field is attached so it never leaks into a consumer's stored entry. - New
GetEntryOrigin(checksum)API: a session-local origin registry records who transmitted each entry, and returnssender, source, guid, line_id. The GUID is the server-stamped chat identity — unforgeable and rename-proof — so consumers can key an "ignore this sender" list on identity rather than on the spoofable name. The chat line ID lets a consumer file a Blizzard chat/message report against the offending broadcast text; it is valid only for the session the death arrived in and is never persisted, so a reloaded or synced entry returns nil for it.
This mod has no additional files

