lwk_boltz 0.14.0

Liquid Wallet Kit - Boltz integration
Documentation
from flask import Flask, request, json, Response
from flask_cors import CORS
import requests
import logging

app = Flask(__name__)
CORS(app)  # Allow all origins

# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


@app.route('/proxy', methods=['GET', 'POST', 'PUT', 'DELETE'])
def proxy_request():
    target_url = request.headers.get('X-Proxy-URL')

    if not target_url:
        return Response(
            json.dumps({"error": "No target URL provided"}),
            status=400,
            mimetype='application/json'
        )

    try:
        # Log the incoming request details
        logger.info(f"Proxy request to: {target_url}")
        logger.info(f"Request method: {request.method}")
        logger.info(f"Request headers: {dict(request.headers)}")

        # Try to log request body
        try:
            request_body = request.get_json(silent=True)
            logger.info(f"Request body: {request_body}")
        except Exception as body_log_error:
            logger.error(f"Could not log request body: {body_log_error}")

        # Prepare headers, excluding Flask-specific ones
        headers = {
            key: value for (key, value) in request.headers
            if key not in ['Host', 'X-Proxy-URL', 'Content-Length']
        }

        # Determine the method and make the request
        methods = {
            'GET': requests.get,
            'POST': requests.post,
            'PUT': requests.put,
            'DELETE': requests.delete
        }

        method = methods.get(request.method)
        if not method:
            return Response(
                json.dumps({"error": "Unsupported HTTP method"}),
                status=405,
                mimetype='application/json'
            )

        # Prepare request arguments
        kwargs = {
            'url': target_url,
            'headers': headers,
            'verify': False  # Bypass SSL verification
        }

        # Add data for methods that support it
        if request.method in ['POST', 'PUT']:
            # Try to parse request data as JSON if possible
            request_json = request.get_json(silent=True)
            if request_json:
                kwargs['json'] = request_json
            else:
                kwargs['data'] = request.get_data()

        # Make the request
        try:
            response = method(**kwargs)
        except Exception as request_error:
            logger.error(f"Request error: {request_error}")
            return Response(
                json.dumps({
                    "error": "Failed to make request to target service",
                    "details": str(request_error)
                }),
                status=500,
                mimetype='application/json'
            )

        return Response(
            response.text,
            status=response.status_code,
            mimetype='application/json'
        )

    except Exception as e:
        logger.error(f"Unexpected error: {e}")
        return Response(
            json.dumps({"error": str(e)}),
            status=500,
            mimetype='application/json'
        )


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=51234)