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,
+ });
+}