"""Auth dependency: validate Supabase JWT and return user_id""" from fastapi import Depends, HTTPException, status from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from app.services.supabase_client import get_supabase bearer_scheme = HTTPBearer(auto_error=False) async def get_current_user_id( credentials: HTTPAuthorizationCredentials | None = Depends(bearer_scheme), ) -> str: """Extract and validate Bearer token, return user_id.""" if not credentials: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Not authenticated", ) token = credentials.credentials sb = get_supabase() try: result = sb.auth.get_user(token) user = result.user if not user: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token", ) return user.id except Exception: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid or expired token", )