refactor: migrate to Next.js with edge functions and update relay utilities

- Removed old relay utilities and tests, replacing them with a new structure under `src/lib/relay-utils.ts`.
- Implemented a new edge function in `app/api/proxy/route.ts` to handle proxy requests.
- Created a new Next.js layout and page structure for the frontend, including a user interface for testing the proxy.
- Added Tailwind CSS for styling and configured PostCSS.
- Updated TypeScript configuration for better compatibility with Next.js.
- Removed unused files and configurations related to the previous setup.
This commit is contained in:
MythEclipse
2026-05-07 20:59:23 +07:00
parent 4c30f2a6e1
commit b0dde3c885
17 changed files with 427 additions and 1078 deletions
+49
View File
@@ -0,0 +1,49 @@
export interface RelayOptions {
stripHeaders?: string[];
}
export function normalizeTargetUrl(target: string | null, relayPath: string): string | null {
if (!target) return null;
return target.replace(/\/$/, "") + relayPath;
}
export function stripRelayHeaders(headers: Headers): Headers {
const stripped = new Headers(headers);
stripped.delete("x-relay-target");
stripped.delete("x-relay-path");
stripped.delete("host");
return stripped;
}
export function shouldSendBody(method: string): boolean {
return method !== "GET" && method !== "HEAD";
}
export function buildRelayRequest(
req: Request,
targetUrl: string,
headers: Headers
): RequestInit {
return {
method: req.method,
headers,
body: shouldSendBody(req.method) ? req.body : undefined,
duplex: "half" as const,
};
}
export function isAllowedTarget(url: string): boolean {
try {
const parsed = new URL(url);
return ["http:", "https:"].includes(parsed.protocol);
} catch {
return false;
}
}
export function createRelayResponse(response: Response): Response {
return new Response(response.body, {
status: response.status,
headers: response.headers,
});
}