# `ExWapp.Session.RetryCounters`
[🔗](https://github.com/elchemista/ex_wapp/blob/v0.1.5/lib/ex_wapp/session/retry_counters.ex#L1)

Bounded bookkeeping for the per-message retry counters in the session state.

A counter is added for every inbound message that fails to decrypt and for
every outbound retry or session repair, and nothing ever resolves them —
deliberately, since `clear_pending_requests` must not forget attempt counts
across a reconnect. Without a cap, a peer with a desynced session grows the
session's heap by one permanent map entry per undecryptable message and the
repair path scans all of them on every rejected ack.

Keys are evicted oldest-first once the cap is reached. Losing an old counter
merely re-opens a handful of extra retries for a message that has long been
resolved, whereas an unbounded map grows for the life of the process.

# `put`

```elixir
@spec put(map(), String.t(), pos_integer()) :: map()
```

Sets `key` to `count` in the state's `:retry_counters`, evicting the oldest
counters beyond the cap.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
