Drops Slack's retried event deliveries so a handler never fires twice.
Slack re-sends an event (same event_id) when it doesn't see a timely ACK —
even though both transports ACK before the handler runs, a slow network or a
restart can still produce duplicates. This keeps a short-lived set of seen
event_ids in ETS; Slink.Dispatcher consults it before dispatching.
It's a set ETS table owned by this process but read/written directly by
callers (so the dedup check never blocks on a GenServer). A periodic sweep
evicts entries past their TTL.
Configuration
config :slink, :dedup, true— master switch (defaulttrue). Whenfalse,seen?/1always returnsfalseand nothing is tracked.config :slink, :dedup_ttl_ms, 60_000— how long an id is remembered (default 60s). Comfortably longer than Slack's retry schedule.
Summary
Functions
Returns a specification to start this module under a supervisor.
Whether key has been seen within the TTL; records it if not.
Functions
Returns a specification to start this module under a supervisor.
See Supervisor.
Whether key has been seen within the TTL; records it if not.
Returns false (and remembers key) the first time, true on a repeat.
Always false when dedup is disabled or the table isn't up yet, so a missing
dedup process fails open — never silently swallowing real events.