From 3b7f33efef49a4bc54497d5388c70977d8890ae4 Mon Sep 17 00:00:00 2001 From: Rangga Fajar Oktariansyah <86386385+FajarKim@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:25:42 +0700 Subject: [PATCH] feat: add middleware to proxy requests to external generator --- middleware.ts | 47 +++++++++++++++++++++++++++++++++++++++++++++++ vercel.json | 6 ------ 2 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 middleware.ts diff --git a/middleware.ts b/middleware.ts new file mode 100644 index 00000000..0bb91791 --- /dev/null +++ b/middleware.ts @@ -0,0 +1,47 @@ +// Configuration for Vercel Edge Middleware (same as original) +export const config = { + // Matcher: all paths except those starting with /api + matcher: ['/((?!api/).*)'], +}; + +export default async function middleware(request: Request): Promise { + const url = new URL(request.url); + const { pathname, search } = url; + + // Additional check to ensure /api paths don't pass through + if (pathname.startsWith('/api')) { + return; // let the request proceed to the serverless function + } + + // Build the target generator URL while preserving the path and query + const generatorUrl = new URL(pathname + search, 'https://gh-readme-profile-generator.vercel.app'); + + // Prepare headers to forward + const headers = new Headers(); + headers.set('User-Agent', request.headers.get('User-Agent') || ''); + headers.set('Accept', request.headers.get('Accept') || '*/*'); + // Do not forward the 'host' header to avoid interference + + try { + const response = await fetch(generatorUrl, { + method: request.method, + headers: headers, + }); + + // Copy headers from the generator response, except for some unnecessary ones + const responseHeaders = new Headers(response.headers); + // Remove headers related to connection or original server if needed + responseHeaders.delete('content-encoding'); + responseHeaders.delete('transfer-encoding'); + + return new Response(response.body, { + status: response.status, + statusText: response.statusText, + headers: responseHeaders, + }); + } catch (error) { + // Handle errors by returning a 500 response or fallback + const errorMessage = error instanceof Error ? error.message : 'Unknown error'; + return new Response('Proxy error: ' + errorMessage, { status: 500 }); + } +} diff --git a/vercel.json b/vercel.json index a939310b..38d0ef84 100644 --- a/vercel.json +++ b/vercel.json @@ -5,12 +5,6 @@ "maxDuration": 10 } }, - "redirects": [ - { - "source": "/", - "destination": "https://gh-readme-profile-generator.vercel.app/" - } - ], "headers": [ { "source": "/api",