Spaces:
Build error
Build error
| import { json } from '@remix-run/cloudflare'; | |
| import type { ActionFunctionArgs, LoaderFunctionArgs } from '@remix-run/cloudflare'; | |
| // Handle all HTTP methods | |
| export async function action({ request, params }: ActionFunctionArgs) { | |
| return handleProxyRequest(request, params['*']); | |
| } | |
| export async function loader({ request, params }: LoaderFunctionArgs) { | |
| return handleProxyRequest(request, params['*']); | |
| } | |
| async function handleProxyRequest(request: Request, path: string | undefined) { | |
| try { | |
| if (!path) { | |
| return json({ error: 'Invalid proxy URL format' }, { status: 400 }); | |
| } | |
| const url = new URL(request.url); | |
| // Reconstruct the target URL | |
| const targetURL = `https://${path}${url.search}`; | |
| // Forward the request to the target URL | |
| const response = await fetch(targetURL, { | |
| method: request.method, | |
| headers: { | |
| ...Object.fromEntries(request.headers), | |
| // Override host header with the target host | |
| host: new URL(targetURL).host, | |
| }, | |
| body: ['GET', 'HEAD'].includes(request.method) ? null : await request.arrayBuffer(), | |
| }); | |
| // Create response with CORS headers | |
| const corsHeaders = { | |
| 'Access-Control-Allow-Origin': '*', | |
| 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', | |
| 'Access-Control-Allow-Headers': '*', | |
| }; | |
| // Handle preflight requests | |
| if (request.method === 'OPTIONS') { | |
| return new Response(null, { | |
| headers: corsHeaders, | |
| status: 204, | |
| }); | |
| } | |
| // Forward the response with CORS headers | |
| const responseHeaders = new Headers(response.headers); | |
| Object.entries(corsHeaders).forEach(([key, value]) => { | |
| responseHeaders.set(key, value); | |
| }); | |
| return new Response(response.body, { | |
| status: response.status, | |
| headers: responseHeaders, | |
| }); | |
| } catch (error) { | |
| console.error('Git proxy error:', error); | |
| return json({ error: 'Proxy error' }, { status: 500 }); | |
| } | |
| } | |