"""SentimentClient: contenitore credenziali per data provider sentiment. Sentiment è un read-only data provider (CryptoPanic, LunarCrush, aggregazioni multi-exchange di funding/OI da endpoint pubblici). Nessun testnet/mainnet, nessuna sessione HTTP persistente — i `fetchers.py` aprono client httpx ad-hoc tramite `cerbero_mcp.common.http.async_client`. Questo wrapper esiste solo per uniformità con il pattern degli altri exchange (DeribitClient/BybitClient/...) e per essere istanziato dal `ClientRegistry`. """ from __future__ import annotations from typing import Any class SentimentClient: """Wrapper credenziali CryptoPanic/LunarCrush. Stateless, no HTTP session.""" def __init__(self, *, cryptopanic_key: str = "", lunarcrush_key: str = "") -> None: self.cryptopanic_key = cryptopanic_key self.lunarcrush_key = lunarcrush_key async def aclose(self) -> None: # pragma: no cover - no-op, no resources return None async def health(self) -> dict[str, Any]: """Probe minimo per /health/ready: nessuna chiamata di rete.""" return {"status": "ok"}