summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-31 03:50:29 -0600
committerAdam <[email protected]>2025-12-31 03:50:29 -0600
commitb1a6333d1736e33ce9b763c349272fd368723b9a (patch)
tree06b9a1da9fb68f878ce7e31c919498ad8d93c0b4 /packages
parent5c9d6196207f8364a643df71b7dff88309602b18 (diff)
downloadopencode-b1a6333d1736e33ce9b763c349272fd368723b9a.tar.gz
opencode-b1a6333d1736e33ce9b763c349272fd368723b9a.zip
feat(core): configurable cors hosts
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/cli/network.ts12
-rw-r--r--packages/opencode/src/config/config.ts1
-rw-r--r--packages/opencode/src/server/server.ts10
3 files changed, 20 insertions, 3 deletions
diff --git a/packages/opencode/src/cli/network.ts b/packages/opencode/src/cli/network.ts
index 397f2ba3e..fe5731d07 100644
--- a/packages/opencode/src/cli/network.ts
+++ b/packages/opencode/src/cli/network.ts
@@ -17,6 +17,12 @@ const options = {
describe: "enable mDNS service discovery (defaults hostname to 0.0.0.0)",
default: false,
},
+ cors: {
+ type: "string" as const,
+ array: true,
+ describe: "additional domains to allow for CORS",
+ default: [] as string[],
+ },
}
export type NetworkOptions = InferredOptionTypes<typeof options>
@@ -30,6 +36,7 @@ export async function resolveNetworkOptions(args: NetworkOptions) {
const portExplicitlySet = process.argv.includes("--port")
const hostnameExplicitlySet = process.argv.includes("--hostname")
const mdnsExplicitlySet = process.argv.includes("--mdns")
+ const corsExplicitlySet = process.argv.includes("--cors")
const mdns = mdnsExplicitlySet ? args.mdns : (config?.server?.mdns ?? args.mdns)
const port = portExplicitlySet ? args.port : (config?.server?.port ?? args.port)
@@ -38,6 +45,9 @@ export async function resolveNetworkOptions(args: NetworkOptions) {
: mdns && !config?.server?.hostname
? "0.0.0.0"
: (config?.server?.hostname ?? args.hostname)
+ const configCors = config?.server?.cors ?? []
+ const argsCors = Array.isArray(args.cors) ? args.cors : args.cors ? [args.cors] : []
+ const cors = [...configCors, ...argsCors]
- return { hostname, port, mdns }
+ return { hostname, port, mdns, cors }
}
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 86576667b..012e3e12f 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -586,6 +586,7 @@ export namespace Config {
port: z.number().int().positive().optional().describe("Port to listen on"),
hostname: z.string().optional().describe("Hostname to listen on"),
mdns: z.boolean().optional().describe("Enable mDNS service discovery"),
+ cors: z.array(z.string()).optional().describe("Additional domains to allow for CORS"),
})
.strict()
.meta({
diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts
index a8adebd72..348e3cea8 100644
--- a/packages/opencode/src/server/server.ts
+++ b/packages/opencode/src/server/server.ts
@@ -45,7 +45,6 @@ import { Snapshot } from "@/snapshot"
import { SessionSummary } from "@/session/summary"
import { SessionStatus } from "@/session/status"
import { upgradeWebSocket, websocket } from "hono/bun"
-import type { BunWebSocketData } from "hono/bun"
import { errors } from "./error"
import { Pty } from "@/pty"
import { Installation } from "@/installation"
@@ -58,6 +57,7 @@ export namespace Server {
const log = Log.create({ service: "server" })
let _url: URL | undefined
+ let _corsWhitelist: string[] = []
export function url(): URL {
return _url ?? new URL("http://localhost:4096")
@@ -117,6 +117,10 @@ export namespace Server {
if (/^https:\/\/([a-z0-9-]+\.)*opencode\.ai$/.test(input)) {
return input
}
+ if (_corsWhitelist.includes(input)) {
+ return input
+ }
+
return
},
}),
@@ -2676,7 +2680,9 @@ export namespace Server {
return result
}
- export function listen(opts: { port: number; hostname: string; mdns?: boolean }) {
+ export function listen(opts: { port: number; hostname: string; mdns?: boolean; cors?: string[] }) {
+ _corsWhitelist = opts.cors ?? []
+
const args = {
hostname: opts.hostname,
idleTimeout: 0,