Tracks configurable daily outbound-message quotas.
The counter state lives in the session worker and is split across the whole
session, individual JIDs, and groups. check_and_increment/2 returns the
updated worker state and an explicit error when a blocking limit is hit.
Summary
Types
@type state_data() :: %{ period_key: String.t(), session_count: non_neg_integer(), per_jid: %{optional(String.t()) => non_neg_integer()}, per_group: %{optional(String.t()) => non_neg_integer()} }