From 700449ee0e9e7e4fca5233baf537501cd719bc27 Mon Sep 17 00:00:00 2001 From: nakaterm <104970808+nakaterm@users.noreply.github.com> Date: Wed, 10 Jun 2026 01:05:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Pages=20Function=20=E3=81=A7=20api=20?= =?UTF-8?q?=E3=81=B8=E3=81=AE=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=82=92=E3=83=97=E3=83=AD=E3=82=AD=E3=82=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + client/.env.preview | 2 +- client/.env.production | 2 +- client/.gitignore | 2 ++ client/functions/api/[[path]].ts | 26 ++++++++++++++++++++++++++ 5 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 client/functions/api/[[path]].ts diff --git a/.gitignore b/.gitignore index 879cb66..bf77846 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules .direnv +.wrangler CLAUDE.local.md diff --git a/client/.env.preview b/client/.env.preview index 831fe4f..3d69f54 100644 --- a/client/.env.preview +++ b/client/.env.preview @@ -1,2 +1,2 @@ -VITE_API_ENDPOINT=https://api.itsuhima-staging.utcode.net +VITE_API_ENDPOINT=/api VITE_FRONTEND_ORIGIN=https://itsuhima-staging.utcode.net diff --git a/client/.env.production b/client/.env.production index 3fdbb58..ae35cf5 100644 --- a/client/.env.production +++ b/client/.env.production @@ -1,2 +1,2 @@ -VITE_API_ENDPOINT=https://api.itsuhima.utcode.net +VITE_API_ENDPOINT=/api VITE_FRONTEND_ORIGIN=https://itsuhima.utcode.net diff --git a/client/.gitignore b/client/.gitignore index 438657a..fdc0972 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -13,6 +13,8 @@ dist-ssr *.local .env +.wrangler + # Editor directories and files .vscode/* !.vscode/extensions.json diff --git a/client/functions/api/[[path]].ts b/client/functions/api/[[path]].ts new file mode 100644 index 0000000..db356f3 --- /dev/null +++ b/client/functions/api/[[path]].ts @@ -0,0 +1,26 @@ +/// + +interface Env { + API_ENDPOINT: string; +} + +// biome-ignore lint/suspicious/noExplicitAny: This is a Cloudflare Worker context +export async function onRequest(context: EventContext): Promise { + const { request, env } = context; + const url = new URL(request.url); + const backendUrl = env.API_ENDPOINT + url.pathname.replace(/^\/api/, "") + url.search; + + const proxied = new Request(backendUrl, { + method: request.method, + headers: request.headers, + body: request.method !== "GET" && request.method !== "HEAD" ? request.body : undefined, + redirect: "manual", + }); + + const response = await fetch(proxied); + return new Response(response.body, { + status: response.status, + statusText: response.statusText, + headers: response.headers, + }); +}