Releases: IQAIcom/alert-logger
v1.1.0
Minor Changes
-
#21
3633feeThanks @Royal-lobster! - Make sustained alerting quieter and more informative by:- adding rate-aware early handoff from ramp to sustained mode
- changing the default sustained update interval from 5 minutes to 15 minutes
- adding
aggregation.periodCountfor per-update deltas while keepingsuppressedSincefor compatibility - exposing
aggregation.rampExitRatePerSecondandaggregation.rampExitRateWindowMsconfiguration knobs - updating sustained formatter output to show both per-period and total counts
v1.0.1
Patch Changes
-
942e36fThanks @Royal-lobster! - fix(fingerprinter): normalize numbers adjacent to unit lettersThe built-in
NUMBER_REused\b\d+\b, which failed to match digits
immediately followed by word characters (e.g.330s,120ms). Messages
like"No block processed for 330s"and"... for 360s"produced
different fingerprints, so aggregation treated each tick as a fresh
onset and no suppression occurred. Loosened to\d+so duration/size
suffixes are collapsed too. -
#20
3239f66Thanks @Royal-lobster! - fix(fingerprinter): run built-in normalizers before user-defined onesUser-defined normalizers previously ran before the built-in ones, so a
broad rule like{ pattern: /\d+/g, replacement: "<num>" }would strip
digits out of UUIDs and hex addresses beforeUUID_REandHEX_REhad a
chance to match. Every trade ID or transaction hash then produced a
distinct fingerprint, which made the aggregator treat each occurrence as
a fresh onset and suppression never kicked in.Built-ins now collapse structural identifiers first, and user rules
compose on top of the normalized output.
v1.0.0
Major Changes
-
#16
bc50c1aThanks @Royal-lobster! - Add Slack and Telegram adapters with adapter-owned routingBreaking changes:
- Removed
RoutingConfigtype,Routerclass, androutingoption fromAlertLoggerConfig - Removed
webhookUrlandpingsfromFormattedAlert - Removed
pingsfromEnvironmentConfig - Routing is now configured per-adapter via
channels,tags, andmentionsconstructor options
Migration: Move
routing.channels,routing.tags, androuting.pingsinto your adapter constructor:// Before AlertLogger.init({ adapters: [new DiscordAdapter({ webhookUrl: "..." })], routing: { channels: { critical: "..." }, pings: { critical: ["<@&role>"] }, }, }); // After AlertLogger.init({ adapters: [ new DiscordAdapter({ webhookUrl: "...", channels: { critical: "..." }, mentions: { critical: ["<@&role>"] }, }), ], });
New features:
SlackAdapter— Incoming Webhooks with Block Kit formatting, per-level channel routing, mention support, mrkdwn sanitizationTelegramAdapter— Bot API with HTML formatting, per-level forum topic routing, tag-to-topic mapping, @username mentions, safe HTML truncation
- Removed
v0.4.1
Patch Changes
-
#13
417688eThanks @Royal-lobster! - fix: improve default fingerprint aggregation to reduce alert noise- Normalize titles with the same rules used for messages (UUIDs, hex addresses, timestamps, numbers) so dynamic values in titles don't split fingerprints.
- Reduce default
stackDepthfrom 3 to 1 so the same error from different callers groups into a single aggregation stream. Users can restore the previous behavior withfingerprint: { stackDepth: 3 }.
v0.4.0
Minor Changes
-
#11
44f5ee8Thanks @Royal-lobster! - feat: adddescriptionoption and fix resolution noise- Add
descriptionfield toAlertOptionsfor separating short titles from detailed messages. When set,descriptionis used as the embed body instead of the title. - Allow
error()andcritical()to accept(title, options)without an intermediateundefinederror param. - Resolution notifications now only fire for sustained incidents (count > rampThreshold). One-off or sporadic alerts no longer produce "Resolved" messages.
- NestJS exception filter uses
{METHOD} {PATH}as the alert title instead of the full error message.
- Add
v0.3.1
Patch Changes
- #9
c578183Thanks @Royal-lobster! - Add typesVersions for TypeScript moduleResolution "node" subpath type resolution
v0.3.0
Minor Changes
-
#6
83c2811Thanks @Royal-lobster! - Add configurable HealthPolicy for adapter health/retry behavior- New
healthconfig option withunhealthyThreshold,healthWindowMs,drainIntervalMs,maxRetries, andentryExpiryMs - Extract shared
formatDurationutility to eliminate duplication between health-manager and discord formatter - Fix drain-only recovery:
onRecoverynow fires when adapters become unhealthy purely through background drain retries - Immediate re-drain after discarding expired queue entries for faster stale queue cleanup
- New
Patch Changes
- #8
0746d58Thanks @Royal-lobster! - Add CommonJS build output alongside ESM for compatibility with projects usingmoduleResolution: "node"
v0.2.0
Minor Changes
c31f9b9Thanks @Royal-lobster! - Initial release of @iqai/alert-logger with core engine, Discord/Console adapters, reliability layer, and NestJS/Next.js integrations.