diff --git a/routstr/payment/helpers.py b/routstr/payment/helpers.py index 3e131326..4404fd0b 100644 --- a/routstr/payment/helpers.py +++ b/routstr/payment/helpers.py @@ -1,8 +1,8 @@ import json import os -from typing import Optional from fastapi import HTTPException, Response +from fastapi.requests import Request from ..core import get_logger from ..wallet import deserialize_token_from_string @@ -157,21 +157,13 @@ def get_max_cost_for_model(model: str) -> int: def create_error_response( - error_type: str, message: str, status_code: int, token: Optional[str] = None + error_type: str, + message: str, + status_code: int, + request: Request, + token: str | None = None, ) -> Response: """Create a standardized error response.""" - logger.info( - "Creating error response", - extra={ - "error_type": error_type, - "error_message": message, - "status_code": status_code, - }, - ) - - response_headers = {} - if token: - response_headers["X-Cashu"] = token return Response( content=json.dumps( { @@ -179,12 +171,13 @@ def create_error_response( "message": message, "type": error_type, "code": status_code, - } + }, + "request_id": getattr(request.state, "request_id", "unknown"), } ), status_code=status_code, media_type="application/json", - headers=dict(response_headers), + headers={"X-Cashu": token} if token else {}, ) diff --git a/routstr/payment/x_cashu.py b/routstr/payment/x_cashu.py index afbc0d7e..041d2b22 100644 --- a/routstr/payment/x_cashu.py +++ b/routstr/payment/x_cashu.py @@ -63,7 +63,8 @@ async def x_cashu_handler( "token_already_spent", "The provided CASHU token has already been spent", 400, - x_cashu_token, + request=request, + token=x_cashu_token, ) if "invalid token" in error_message.lower(): @@ -71,12 +72,17 @@ async def x_cashu_handler( "invalid_token", "The provided CASHU token is invalid", 400, - x_cashu_token, + request=request, + token=x_cashu_token, ) if "mint error" in error_message.lower(): return create_error_response( - "mint_error", f"CASHU mint error: {error_message}", 422, x_cashu_token + "mint_error", + f"CASHU mint error: {error_message}", + 422, + request=request, + token=x_cashu_token, ) # Generic error for other cases @@ -84,7 +90,8 @@ async def x_cashu_handler( "cashu_error", f"CASHU token processing failed: {error_message}", 400, - x_cashu_token, + request=request, + token=x_cashu_token, ) @@ -217,7 +224,10 @@ async def forward_to_upstream( }, ) return create_error_response( - "internal_error", "An unexpected server error occurred", 500 + "internal_error", + "An unexpected server error occurred", + 500, + request=request, )