from __future__ import annotations class IMessageError(Exception): pass class IMessageAuthError(IMessageError): pass class IMessageConnectionError(IMessageError): pass class IMessageSendError(IMessageError): pass class IMessageMediaError(IMessageError): pass def classify_http_error(status_code: int, body: str = "") -> IMessageError: if status_code == 401 or status_code == 403: return IMessageAuthError(f"HTTP {status_code}: {body}") if status_code >= 500: return IMessageConnectionError(f"HTTP {status_code}: {body}") return IMessageError(f"HTTP {status_code}: {body}") def get_retry_after_ms(error: Exception) -> int | None: if isinstance(error, IMessageConnectionError): return 5000 return None