"""ObjectStore interface — pluggable binary storage behind the service layer. Implementations are S3-compatible (MinIO for self-host, any S3 otherwise). Methods are async wrappers so the service layer stays non-blocking even though the underlying SDK (boto3) is synchronous. """ from abc import ABC, abstractmethod class ObjectStore(ABC): @abstractmethod async def ensure_bucket(self) -> None: ... @abstractmethod async def put_object(self, *, key: str, data: bytes, content_type: str) -> None: ... @abstractmethod async def presigned_get_url(self, *, key: str) -> str: ... @abstractmethod async def delete_object(self, *, key: str) -> None: ...