Skip to content

Commit 5d42b9c

Browse files
committed
fixup! fix: standardize OAuth logging levels for production readiness
wip
1 parent 143f7aa commit 5d42b9c

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

src/mxcp/sdk/auth/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ async def refresh_external_token(self, mcp_token: str) -> str | None:
757757
"refresh_token", persisted_token.refresh_token
758758
)
759759

760-
if not new_access_token:
760+
if not new_access_token or not isinstance(new_access_token, str):
761761
logger.error("No access token received from refresh")
762762
return None
763763

@@ -779,7 +779,7 @@ async def refresh_external_token(self, mcp_token: str) -> str | None:
779779
logger.info(
780780
f"Successfully refreshed external token for MCP token: {mcp_token[:10]}..."
781781
)
782-
return new_access_token
782+
return str(new_access_token)
783783

784784
except Exception as e:
785785
logger.error(f"Error refreshing external token: {e}")

src/mxcp/sdk/auth/middleware.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,17 @@ def __init__(
5959
# Thread-safe cache for user contexts
6060
self._user_context_cache: dict[str, CachedUserContext] = {}
6161
self._cache_lock = asyncio.Lock()
62-
62+
6363
# Per-MCP-token locks for refresh operations to prevent race conditions
6464
self._refresh_locks: dict[str, asyncio.Lock] = {}
6565
self._refresh_locks_lock = asyncio.Lock()
6666

6767
async def _get_refresh_lock(self, mcp_token: str) -> asyncio.Lock:
6868
"""Get or create a refresh lock for the given MCP token.
69-
69+
7070
Args:
7171
mcp_token: MCP token to get lock for
72-
72+
7373
Returns:
7474
Lock specific to this MCP token
7575
"""
@@ -98,9 +98,7 @@ async def _get_cached_user_context(self, mcp_token: str) -> UserContext | None:
9898
logger.debug(f"⏰ Cache EXPIRED - removed entry for token {mcp_token[:20]}...")
9999
return None
100100

101-
logger.debug(
102-
f"🎯 Cache HIT - using cached user context for token {mcp_token[:20]}..."
103-
)
101+
logger.debug(f"🎯 Cache HIT - using cached user context for token {mcp_token[:20]}...")
104102
return cached_entry.user_context
105103

106104
async def _cache_user_context(self, mcp_token: str, user_context: UserContext) -> None:
@@ -151,14 +149,16 @@ async def _attempt_token_refresh(self, mcp_token: str, external_token: str) -> s
151149

152150
# Get the refresh lock for this specific MCP token to prevent race conditions
153151
refresh_lock = await self._get_refresh_lock(mcp_token)
154-
152+
155153
async with refresh_lock:
156154
try:
157155
# Check if another request already refreshed the token
158156
# by checking if we have a valid cached user context now
159157
cached_context = await self._get_cached_user_context(mcp_token)
160158
if cached_context is not None:
161-
logger.debug(f"🎯 Token already refreshed by another request for {mcp_token[:20]}...")
159+
logger.debug(
160+
f"🎯 Token already refreshed by another request for {mcp_token[:20]}..."
161+
)
162162
# Get the current external token from token mapping
163163
current_external_token = self.oauth_server._token_mapping.get(mcp_token)
164164
return current_external_token

0 commit comments

Comments
 (0)