diff --git a/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts b/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts index c9d4871b04..087d5ee851 100644 --- a/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts +++ b/packages/opencode/src/server/routes/instance/httpapi/middleware/error.ts @@ -1,6 +1,5 @@ import { Provider } from "@/provider/provider" import { Session } from "@/session/session" -import { NotFoundError } from "@/storage/storage" import { iife } from "@/util/iife" import { NamedError } from "@opencode-ai/core/util/error" import * as Log from "@opencode-ai/core/util/log" @@ -24,10 +23,6 @@ export const errorLayer = HttpRouter.middleware<{ handles: unknown }>()((effect) const error = defect.defect log.error("failed", { error, cause: Cause.pretty(cause) }) - if (error instanceof NotFoundError) { - return Effect.succeed(HttpServerResponse.jsonUnsafe(error.toObject(), { status: 404 })) - } - if (error instanceof NamedError) { return Effect.succeed( HttpServerResponse.jsonUnsafe(error.toObject(), { diff --git a/packages/opencode/test/server/httpapi-error-middleware.test.ts b/packages/opencode/test/server/httpapi-error-middleware.test.ts index a07e31382c..f53a9e887b 100644 --- a/packages/opencode/test/server/httpapi-error-middleware.test.ts +++ b/packages/opencode/test/server/httpapi-error-middleware.test.ts @@ -3,6 +3,7 @@ import { describe, expect } from "bun:test" import { Effect, Layer } from "effect" import { HttpClient, HttpClientRequest, HttpRouter } from "effect/unstable/http" import { errorLayer } from "../../src/server/routes/instance/httpapi/middleware/error" +import { NotFoundError } from "../../src/storage/storage" import { testEffect } from "../lib/effect" const it = testEffect(Layer.mergeAll(NodeHttpServer.layerTest, NodeServices.layer)) @@ -27,4 +28,23 @@ describe("HttpApi error middleware", () => { expect(JSON.stringify(body)).not.toContain("secret stack marker") }), ) + + it.live("does not map storage not-found defects to 404", () => + Effect.gen(function* () { + yield* HttpRouter.add( + "GET", + "/missing", + Effect.die(new NotFoundError({ message: "Resource not found: secret" })), + ).pipe(Layer.provide(errorLayer), HttpRouter.serve, Layer.build) + + const response = yield* HttpClientRequest.get("/missing").pipe(HttpClient.execute) + const body = yield* response.json + + expect(response.status).toBe(500) + expect(body).toEqual({ + name: "UnknownError", + data: { message: "Unexpected server error. Check server logs for details." }, + }) + }), + ) })