From 3398fd7719dee3f17ec6601c6ae9bf7fc4d7c8a5 Mon Sep 17 00:00:00 2001 From: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Date: Thu, 30 Apr 2026 15:06:17 +0800 Subject: [PATCH] feat(httpapi): add CORS middleware to instance routes (#25074) --- .../server/routes/instance/httpapi/server.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/opencode/src/server/routes/instance/httpapi/server.ts b/packages/opencode/src/server/routes/instance/httpapi/server.ts index 86b7182c73..370696ddb2 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/server.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/server.ts @@ -55,6 +55,7 @@ import { workspaceRouterMiddleware, workspaceRoutingLayer } from "./middleware/w import { disposeMiddleware } from "./lifecycle" import { memoMap } from "@opencode-ai/core/effect/memo-map" import * as ServerBackend from "@/server/backend" +import type { Predicate } from "effect/Predicate" export const context = Context.makeUnsafe(new Map()) @@ -104,6 +105,23 @@ const instanceRoutes = Layer.mergeAll(rawInstanceRoutes, instanceApiRoutes).pipe ) export const routes = Layer.mergeAll(rootApiRoutes, instanceRoutes).pipe( + Layer.provide( + HttpRouter.cors({ + maxAge: 86_400, + allowedOrigins: ((input) => { + return ( + !input || + input.startsWith("http://localhost:") || + input.startsWith("http://127.0.0.1:") || + input.startsWith("oc://renderer") || + input === "tauri://localhost" || + input === "http://tauri.localhost" || + input === "https://tauri.localhost" || + /^https:\/\/([a-z0-9-]+\.)*opencode\.ai$/.test(input) + ) + }) as Predicate as any, + }), + ), Layer.provide([ runtime, Account.defaultLayer,