From 7eee9518cae5dab3b86d4603a9c5a96ec79231dd Mon Sep 17 00:00:00 2001 From: Innei Date: Wed, 10 Jun 2026 17:50:24 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(server):=20rename?= =?UTF-8?q?=20hono-runtime=20client=20to=20backend-proxy;=20drop=20the=20r?= =?UTF-8?q?edundant=20binding=20route?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Next-side client is now a general forwarding layer for every (backend) shell, not a POC binding — rename src/server/hono-runtime -> src/server/backend-proxy and fetchHonoRuntime -> fetchBackendRuntime (55 call sites). The /hono-runtime/[...path] prefix route is redundant since all real routes forward directly; removed along with its guard exception. --- apps/server/README.md | 4 +- .../(backend)/api/agent/[[...route]]/route.ts | 4 +- src/app/(backend)/api/agent/stream/route.ts | 4 +- src/app/(backend)/api/auth/[...all]/route.ts | 4 +- .../(backend)/api/auth/check-user/route.ts | 4 +- .../api/auth/resolve-username/route.ts | 4 +- .../(backend)/api/dev/agent-tracing/route.ts | 4 +- .../benchmark-locomo/route.ts | 4 +- src/app/(backend)/api/dev/test-push/route.ts | 4 +- .../(backend)/api/v1/[[...route]]/route.ts | 4 +- src/app/(backend)/api/version/route.ts | 4 +- .../(backend)/api/webhooks/casdoor/route.ts | 4 +- src/app/(backend)/api/webhooks/logto/route.ts | 4 +- .../benchmark-locomo/route.ts | 4 +- .../api/webhooks/memory-extraction/route.ts | 4 +- .../persona/update-writing/route.ts | 4 +- .../extract/chat-topic/cancel/route.ts | 4 +- .../api/webhooks/video/[provider]/route.ts | 4 +- .../api/workflows/[[...route]]/route.ts | 4 +- .../agent-eval-run/execute-test-case/route.ts | 4 +- .../agent-eval-run/finalize-run/route.ts | 4 +- .../on-thread-complete/route.ts | 4 +- .../on-trajectory-complete/route.ts | 4 +- .../paginate-test-cases/route.ts | 4 +- .../resume-agent-trajectory/route.ts | 4 +- .../resume-thread-trajectory/route.ts | 4 +- .../run-agent-trajectory/route.ts | 4 +- .../agent-eval-run/run-benchmark/route.ts | 4 +- .../run-thread-trajectory/route.ts | 4 +- src/app/(backend)/f/[id]/route.ts | 4 +- .../hono-runtime/[...path]/route.test.ts | 29 ------------ .../(backend)/hono-runtime/[...path]/route.ts | 47 ------------------- .../market/agent/[[...segments]]/route.ts | 4 +- .../market/oidc/[[...segments]]/route.ts | 4 +- .../market/social/[[...segments]]/route.ts | 4 +- .../(backend)/market/user/[username]/route.ts | 4 +- src/app/(backend)/market/user/me/route.ts | 4 +- .../oauth/connector/callback/route.ts | 4 +- src/app/(backend)/oidc/[...oidc]/route.ts | 4 +- .../(backend)/oidc/callback/desktop/route.ts | 4 +- src/app/(backend)/oidc/clear-session/route.ts | 4 +- src/app/(backend)/oidc/consent/route.ts | 4 +- src/app/(backend)/oidc/handoff/route.ts | 4 +- src/app/(backend)/route-shell.guard.test.ts | 2 - src/app/(backend)/trpc/async/[trpc]/route.ts | 4 +- src/app/(backend)/trpc/lambda/[trpc]/route.ts | 4 +- src/app/(backend)/trpc/mobile/[trpc]/route.ts | 4 +- src/app/(backend)/trpc/tools/[trpc]/route.ts | 4 +- .../(backend)/webapi/chat/[provider]/route.ts | 4 +- .../webapi/create-image/comfyui/route.ts | 4 +- .../webapi/models/[provider]/pull/route.ts | 4 +- .../webapi/models/[provider]/route.ts | 4 +- src/app/(backend)/webapi/stt/openai/route.ts | 4 +- src/app/(backend)/webapi/trace/route.ts | 4 +- src/app/(backend)/webapi/tts/edge/route.ts | 4 +- .../(backend)/webapi/tts/microsoft/route.ts | 4 +- src/app/(backend)/webapi/tts/openai/route.ts | 4 +- .../webapi/user/avatar/[id]/[image]/route.ts | 4 +- .../{hono-runtime => backend-proxy}/client.ts | 2 +- 59 files changed, 111 insertions(+), 189 deletions(-) delete mode 100644 src/app/(backend)/hono-runtime/[...path]/route.test.ts delete mode 100644 src/app/(backend)/hono-runtime/[...path]/route.ts rename src/server/{hono-runtime => backend-proxy}/client.ts (97%) diff --git a/apps/server/README.md b/apps/server/README.md index 9a44a4fb7f..f2fc5257bd 100644 --- a/apps/server/README.md +++ b/apps/server/README.md @@ -32,10 +32,10 @@ The package's exports resolve via the `~server/*` alias (`apps/server/src/*`); ` Every `src/app/(backend)/**/route.ts` is a thin forwarder into this package: -- In dev, `fetchHonoRuntime` proxies each request to the standalone Hono server (`LOBE_DEV_HONO_TARGET`, default `http://localhost:3011`). +- In dev, `fetchBackendRuntime` (`src/server/backend-proxy/client.ts`) proxies each request to the standalone Hono server (`LOBE_DEV_HONO_TARGET`, default `http://localhost:3011`). - In production, it loads the vite-built `apps/server/dist/index.js` in-process via an opaque runtime `require` (override with `LOBE_HONO_DIST_ENTRY`), so the backend never passes through `next build`. - Route file paths, HTTP method export names, and segment config (`maxDuration`, `dynamic`) are contractual — the cloud repo re-exports them by path. `src/app/(backend)/route-shell.guard.test.ts` enforces that route files stay logic-free. -- Exceptions: `webapi/revalidate` (Next ISR machinery) and `hono-runtime/[...path]` (the binding route itself). +- Exception: `webapi/revalidate` (Next ISR machinery). The root `build` / `build:raw` scripts run `build:hono` first so the dist always pairs with the Next build. diff --git a/src/app/(backend)/api/agent/[[...route]]/route.ts b/src/app/(backend)/api/agent/[[...route]]/route.ts index 84768f130a..f932e0f753 100644 --- a/src/app/(backend)/api/agent/[[...route]]/route.ts +++ b/src/app/(backend)/api/agent/[[...route]]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/api/agent/stream/route.ts b/src/app/(backend)/api/agent/stream/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/api/agent/stream/route.ts +++ b/src/app/(backend)/api/agent/stream/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/api/auth/[...all]/route.ts b/src/app/(backend)/api/auth/[...all]/route.ts index 84768f130a..f932e0f753 100644 --- a/src/app/(backend)/api/auth/[...all]/route.ts +++ b/src/app/(backend)/api/auth/[...all]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/api/auth/check-user/route.ts b/src/app/(backend)/api/auth/check-user/route.ts index 5018771c75..a25518b74c 100644 --- a/src/app/(backend)/api/auth/check-user/route.ts +++ b/src/app/(backend)/api/auth/check-user/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/auth/resolve-username/route.ts b/src/app/(backend)/api/auth/resolve-username/route.ts index 09faf86dfe..345d12ff0d 100644 --- a/src/app/(backend)/api/auth/resolve-username/route.ts +++ b/src/app/(backend)/api/auth/resolve-username/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/dev/agent-tracing/route.ts b/src/app/(backend)/api/dev/agent-tracing/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/api/dev/agent-tracing/route.ts +++ b/src/app/(backend)/api/dev/agent-tracing/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/api/dev/memory-user-memory/benchmark-locomo/route.ts b/src/app/(backend)/api/dev/memory-user-memory/benchmark-locomo/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/dev/memory-user-memory/benchmark-locomo/route.ts +++ b/src/app/(backend)/api/dev/memory-user-memory/benchmark-locomo/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/dev/test-push/route.ts b/src/app/(backend)/api/dev/test-push/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/dev/test-push/route.ts +++ b/src/app/(backend)/api/dev/test-push/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/v1/[[...route]]/route.ts b/src/app/(backend)/api/v1/[[...route]]/route.ts index 02e8d4183c..c07b1b9e9b 100644 --- a/src/app/(backend)/api/v1/[[...route]]/route.ts +++ b/src/app/(backend)/api/v1/[[...route]]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/api/version/route.ts b/src/app/(backend)/api/version/route.ts index b0bb21d530..985b165257 100644 --- a/src/app/(backend)/api/version/route.ts +++ b/src/app/(backend)/api/version/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/api/webhooks/casdoor/route.ts b/src/app/(backend)/api/webhooks/casdoor/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/webhooks/casdoor/route.ts +++ b/src/app/(backend)/api/webhooks/casdoor/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/webhooks/logto/route.ts b/src/app/(backend)/api/webhooks/logto/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/webhooks/logto/route.ts +++ b/src/app/(backend)/api/webhooks/logto/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/webhooks/memory-extraction/benchmark-locomo/route.ts b/src/app/(backend)/api/webhooks/memory-extraction/benchmark-locomo/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/webhooks/memory-extraction/benchmark-locomo/route.ts +++ b/src/app/(backend)/api/webhooks/memory-extraction/benchmark-locomo/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/webhooks/memory-extraction/route.ts b/src/app/(backend)/api/webhooks/memory-extraction/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/webhooks/memory-extraction/route.ts +++ b/src/app/(backend)/api/webhooks/memory-extraction/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/webhooks/memory-user-memory/persona/update-writing/route.ts b/src/app/(backend)/api/webhooks/memory-user-memory/persona/update-writing/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/webhooks/memory-user-memory/persona/update-writing/route.ts +++ b/src/app/(backend)/api/webhooks/memory-user-memory/persona/update-writing/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/webhooks/memory-user-memory/pipelines/extract/chat-topic/cancel/route.ts b/src/app/(backend)/api/webhooks/memory-user-memory/pipelines/extract/chat-topic/cancel/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/webhooks/memory-user-memory/pipelines/extract/chat-topic/cancel/route.ts +++ b/src/app/(backend)/api/webhooks/memory-user-memory/pipelines/extract/chat-topic/cancel/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/webhooks/video/[provider]/route.ts b/src/app/(backend)/api/webhooks/video/[provider]/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/webhooks/video/[provider]/route.ts +++ b/src/app/(backend)/api/webhooks/video/[provider]/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/[[...route]]/route.ts b/src/app/(backend)/api/workflows/[[...route]]/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/[[...route]]/route.ts +++ b/src/app/(backend)/api/workflows/[[...route]]/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/execute-test-case/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/execute-test-case/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/execute-test-case/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/execute-test-case/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/finalize-run/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/finalize-run/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/finalize-run/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/finalize-run/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/on-thread-complete/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/on-thread-complete/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/on-thread-complete/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/on-thread-complete/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/on-trajectory-complete/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/on-trajectory-complete/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/on-trajectory-complete/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/on-trajectory-complete/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/paginate-test-cases/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/paginate-test-cases/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/paginate-test-cases/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/paginate-test-cases/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/resume-agent-trajectory/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/resume-agent-trajectory/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/resume-agent-trajectory/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/resume-agent-trajectory/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/resume-thread-trajectory/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/resume-thread-trajectory/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/resume-thread-trajectory/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/resume-thread-trajectory/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/run-agent-trajectory/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/run-agent-trajectory/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/run-agent-trajectory/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/run-agent-trajectory/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/run-benchmark/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/run-benchmark/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/run-benchmark/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/run-benchmark/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/api/workflows/agent-eval-run/run-thread-trajectory/route.ts b/src/app/(backend)/api/workflows/agent-eval-run/run-thread-trajectory/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/api/workflows/agent-eval-run/run-thread-trajectory/route.ts +++ b/src/app/(backend)/api/workflows/agent-eval-run/run-thread-trajectory/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/f/[id]/route.ts b/src/app/(backend)/f/[id]/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/f/[id]/route.ts +++ b/src/app/(backend)/f/[id]/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/hono-runtime/[...path]/route.test.ts b/src/app/(backend)/hono-runtime/[...path]/route.test.ts deleted file mode 100644 index 556e40169e..0000000000 --- a/src/app/(backend)/hono-runtime/[...path]/route.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -// @vitest-environment node -import { afterEach, describe, expect, it, vi } from 'vitest'; - -import { GET } from './route'; - -describe('Next Hono binding route', () => { - afterEach(() => { - vi.unstubAllGlobals(); - vi.unstubAllEnvs(); - }); - - it('forwards the rewritten request path into the configured Hono dev runtime', async () => { - vi.stubEnv('NODE_ENV', 'development'); - vi.stubEnv('LOBE_DEV_HONO_TARGET', 'http://localhost:3011'); - const fetchSpy = vi.fn(async (request: Request) => { - expect(request.url).toBe('http://localhost:3011/api/version'); - - return Response.json({ version: '2.1.56' }); - }); - vi.stubGlobal('fetch', fetchSpy); - - const response = await GET(new Request('http://localhost:3010/hono-runtime/api/version')); - - expect(response.status).toBe(200); - expect(response.headers.get('x-lobe-dev-hono-binding')).toBe('next-catch-all'); - await expect(response.json()).resolves.toEqual({ version: '2.1.56' }); - expect(fetchSpy).toHaveBeenCalledTimes(1); - }); -}); diff --git a/src/app/(backend)/hono-runtime/[...path]/route.ts b/src/app/(backend)/hono-runtime/[...path]/route.ts deleted file mode 100644 index 5fea5af93f..0000000000 --- a/src/app/(backend)/hono-runtime/[...path]/route.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; - -const HONO_BINDING_PREFIX = '/hono-runtime'; -const HONO_BINDING_HEADER = 'x-lobe-dev-hono-binding'; - -const rewriteHonoBindingRequest = (request: Request) => { - const url = new URL(request.url); - - if (!url.pathname.startsWith(HONO_BINDING_PREFIX)) return request; - - const pathname = url.pathname.slice(HONO_BINDING_PREFIX.length); - url.pathname = pathname || '/'; - - const init: RequestInit & { duplex?: 'half' } = { - headers: request.headers, - method: request.method, - redirect: request.redirect, - signal: request.signal, - }; - - if (request.method !== 'GET' && request.method !== 'HEAD') { - init.body = request.body; - init.duplex = 'half'; - } - - return new Request(url, init); -}; - -const handler = async (request: Request) => { - const response = await fetchHonoRuntime(rewriteHonoBindingRequest(request)); - const headers = new Headers(response.headers); - headers.set(HONO_BINDING_HEADER, 'next-catch-all'); - - return new Response(response.body, { - headers, - status: response.status, - statusText: response.statusText, - }); -}; - -export const DELETE = handler; -export const GET = handler; -export const HEAD = handler; -export const OPTIONS = handler; -export const PATCH = handler; -export const POST = handler; -export const PUT = handler; diff --git a/src/app/(backend)/market/agent/[[...segments]]/route.ts b/src/app/(backend)/market/agent/[[...segments]]/route.ts index 199901179d..49c64ca12a 100644 --- a/src/app/(backend)/market/agent/[[...segments]]/route.ts +++ b/src/app/(backend)/market/agent/[[...segments]]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/market/oidc/[[...segments]]/route.ts b/src/app/(backend)/market/oidc/[[...segments]]/route.ts index 199901179d..49c64ca12a 100644 --- a/src/app/(backend)/market/oidc/[[...segments]]/route.ts +++ b/src/app/(backend)/market/oidc/[[...segments]]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/market/social/[[...segments]]/route.ts b/src/app/(backend)/market/social/[[...segments]]/route.ts index 199901179d..49c64ca12a 100644 --- a/src/app/(backend)/market/social/[[...segments]]/route.ts +++ b/src/app/(backend)/market/social/[[...segments]]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/market/user/[username]/route.ts b/src/app/(backend)/market/user/[username]/route.ts index 92803e98bd..29c4c1d20a 100644 --- a/src/app/(backend)/market/user/[username]/route.ts +++ b/src/app/(backend)/market/user/[username]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/market/user/me/route.ts b/src/app/(backend)/market/user/me/route.ts index 0b3d905f12..3bd7b31ced 100644 --- a/src/app/(backend)/market/user/me/route.ts +++ b/src/app/(backend)/market/user/me/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const PUT = handler; diff --git a/src/app/(backend)/oauth/connector/callback/route.ts b/src/app/(backend)/oauth/connector/callback/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/oauth/connector/callback/route.ts +++ b/src/app/(backend)/oauth/connector/callback/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/oidc/[...oidc]/route.ts b/src/app/(backend)/oidc/[...oidc]/route.ts index 3a5227d6c2..a0df59c55c 100644 --- a/src/app/(backend)/oidc/[...oidc]/route.ts +++ b/src/app/(backend)/oidc/[...oidc]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/oidc/callback/desktop/route.ts b/src/app/(backend)/oidc/callback/desktop/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/oidc/callback/desktop/route.ts +++ b/src/app/(backend)/oidc/callback/desktop/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/oidc/clear-session/route.ts b/src/app/(backend)/oidc/clear-session/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/oidc/clear-session/route.ts +++ b/src/app/(backend)/oidc/clear-session/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/oidc/consent/route.ts b/src/app/(backend)/oidc/consent/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/oidc/consent/route.ts +++ b/src/app/(backend)/oidc/consent/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/oidc/handoff/route.ts b/src/app/(backend)/oidc/handoff/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/oidc/handoff/route.ts +++ b/src/app/(backend)/oidc/handoff/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/route-shell.guard.test.ts b/src/app/(backend)/route-shell.guard.test.ts index d0df8b1f2c..004f0b5330 100644 --- a/src/app/(backend)/route-shell.guard.test.ts +++ b/src/app/(backend)/route-shell.guard.test.ts @@ -15,8 +15,6 @@ const BACKEND_DIR = join(__dirname); /** Routes allowed to keep Next-only logic, with the reason. */ const EXCEPTIONS = new Set([ - // POC binding route: forwards into the standalone Hono runtime itself - 'hono-runtime/[...path]/route.ts', // revalidateTag is Next ISR machinery and cannot leave the Next runtime 'webapi/revalidate/route.ts', ]); diff --git a/src/app/(backend)/trpc/async/[trpc]/route.ts b/src/app/(backend)/trpc/async/[trpc]/route.ts index 84768f130a..f932e0f753 100644 --- a/src/app/(backend)/trpc/async/[trpc]/route.ts +++ b/src/app/(backend)/trpc/async/[trpc]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/trpc/lambda/[trpc]/route.ts b/src/app/(backend)/trpc/lambda/[trpc]/route.ts index 84768f130a..f932e0f753 100644 --- a/src/app/(backend)/trpc/lambda/[trpc]/route.ts +++ b/src/app/(backend)/trpc/lambda/[trpc]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/trpc/mobile/[trpc]/route.ts b/src/app/(backend)/trpc/mobile/[trpc]/route.ts index 84768f130a..f932e0f753 100644 --- a/src/app/(backend)/trpc/mobile/[trpc]/route.ts +++ b/src/app/(backend)/trpc/mobile/[trpc]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/trpc/tools/[trpc]/route.ts b/src/app/(backend)/trpc/tools/[trpc]/route.ts index 84768f130a..f932e0f753 100644 --- a/src/app/(backend)/trpc/tools/[trpc]/route.ts +++ b/src/app/(backend)/trpc/tools/[trpc]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; export const POST = handler; diff --git a/src/app/(backend)/webapi/chat/[provider]/route.ts b/src/app/(backend)/webapi/chat/[provider]/route.ts index c683fff3e5..147a4720c7 100644 --- a/src/app/(backend)/webapi/chat/[provider]/route.ts +++ b/src/app/(backend)/webapi/chat/[provider]/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/create-image/comfyui/route.ts b/src/app/(backend)/webapi/create-image/comfyui/route.ts index c683fff3e5..147a4720c7 100644 --- a/src/app/(backend)/webapi/create-image/comfyui/route.ts +++ b/src/app/(backend)/webapi/create-image/comfyui/route.ts @@ -1,6 +1,6 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/models/[provider]/pull/route.ts b/src/app/(backend)/webapi/models/[provider]/pull/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/webapi/models/[provider]/pull/route.ts +++ b/src/app/(backend)/webapi/models/[provider]/pull/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/models/[provider]/route.ts b/src/app/(backend)/webapi/models/[provider]/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/webapi/models/[provider]/route.ts +++ b/src/app/(backend)/webapi/models/[provider]/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/app/(backend)/webapi/stt/openai/route.ts b/src/app/(backend)/webapi/stt/openai/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/webapi/stt/openai/route.ts +++ b/src/app/(backend)/webapi/stt/openai/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/trace/route.ts b/src/app/(backend)/webapi/trace/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/webapi/trace/route.ts +++ b/src/app/(backend)/webapi/trace/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/tts/edge/route.ts b/src/app/(backend)/webapi/tts/edge/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/webapi/tts/edge/route.ts +++ b/src/app/(backend)/webapi/tts/edge/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/tts/microsoft/route.ts b/src/app/(backend)/webapi/tts/microsoft/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/webapi/tts/microsoft/route.ts +++ b/src/app/(backend)/webapi/tts/microsoft/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/tts/openai/route.ts b/src/app/(backend)/webapi/tts/openai/route.ts index e1e8861da8..82f47cf489 100644 --- a/src/app/(backend)/webapi/tts/openai/route.ts +++ b/src/app/(backend)/webapi/tts/openai/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const POST = handler; diff --git a/src/app/(backend)/webapi/user/avatar/[id]/[image]/route.ts b/src/app/(backend)/webapi/user/avatar/[id]/[image]/route.ts index 820bb1b73a..647acad9f9 100644 --- a/src/app/(backend)/webapi/user/avatar/[id]/[image]/route.ts +++ b/src/app/(backend)/webapi/user/avatar/[id]/[image]/route.ts @@ -1,5 +1,5 @@ -import { fetchHonoRuntime } from '@/server/hono-runtime/client'; +import { fetchBackendRuntime } from '@/server/backend-proxy/client'; -const handler = (req: Request) => fetchHonoRuntime(req); +const handler = (req: Request) => fetchBackendRuntime(req); export const GET = handler; diff --git a/src/server/hono-runtime/client.ts b/src/server/backend-proxy/client.ts similarity index 97% rename from src/server/hono-runtime/client.ts rename to src/server/backend-proxy/client.ts index ed46868954..21ca64d2ba 100644 --- a/src/server/hono-runtime/client.ts +++ b/src/server/backend-proxy/client.ts @@ -92,7 +92,7 @@ const loadProductionHonoApp = () => { return app; }; -export const fetchHonoRuntime = async (request: Request) => { +export const fetchBackendRuntime = async (request: Request) => { const devTarget = process.env.LOBE_DEV_HONO_TARGET; if (process.env.NODE_ENV !== 'production' && devTarget) {