""" Authentication context for tool functions. Uses contextvars to safely pass user auth info through async calls. """ from contextvars import ContextVar from typing import Optional, Dict, Any # Context variables for current request authentication _current_user_id: ContextVar[Optional[str]] = ContextVar( "current_user_id", default=None ) _current_jwt_token: ContextVar[Optional[str]] = ContextVar( "current_jwt_token", default=None ) _current_search_filters: ContextVar[Optional[Dict[str, Any]]] = ContextVar( "current_search_filters", default=None ) _current_search_limit: ContextVar[Optional[int]] = ContextVar( "current_search_limit", default=10 ) _current_score_threshold: ContextVar[Optional[float]] = ContextVar( "current_score_threshold", default=0 ) def set_auth_context(user_id: str, jwt_token: str): """Set authentication context for the current async context""" _current_user_id.set(user_id) _current_jwt_token.set(jwt_token) def get_current_user_id() -> Optional[str]: """Get current user ID from context""" return _current_user_id.get() def get_current_jwt_token() -> Optional[str]: """Get current JWT token from context""" return _current_jwt_token.get() def get_auth_context() -> tuple[Optional[str], Optional[str]]: """Get current authentication context (user_id, jwt_token)""" return _current_user_id.get(), _current_jwt_token.get() def set_search_filters(filters: Dict[str, Any]): """Set search filters for the current async context""" _current_search_filters.set(filters) def get_search_filters() -> Optional[Dict[str, Any]]: """Get current search filters from context""" return _current_search_filters.get() def set_search_limit(limit: int): """Set search limit for the current async context""" _current_search_limit.set(limit) def get_search_limit() -> int: """Get current search limit from context""" return _current_search_limit.get() def set_score_threshold(threshold: float): """Set score threshold for the current async context""" _current_score_threshold.set(threshold) def get_score_threshold() -> float: """Get current score threshold from context""" return _current_score_threshold.get()