routes.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. import { Database } from "@opencode-ai/core/database/database"
  2. import { EventV2 } from "@opencode-ai/core/event"
  3. import { LocationServiceMap } from "@opencode-ai/core/location-layer"
  4. import { FetchHttpClient, HttpRouter, HttpServer } from "effect/unstable/http"
  5. import { HttpApiBuilder } from "effect/unstable/httpapi"
  6. import { Layer, Option } from "effect"
  7. import { Api } from "./api"
  8. import { ServerAuth } from "./auth"
  9. import { handlers } from "./handlers"
  10. import { authorizationLayer } from "./middleware/authorization"
  11. import { schemaErrorLayer } from "./middleware/schema-error"
  12. export function createRoutes(password?: string) {
  13. return HttpApiBuilder.layer(Api, { openapiPath: "/openapi.json" }).pipe(
  14. Layer.provide(handlers),
  15. Layer.provide(authorizationLayer),
  16. Layer.provide(schemaErrorLayer),
  17. Layer.provide(
  18. password
  19. ? ServerAuth.Config.layer({ username: "opencode", password: Option.some(password) })
  20. : ServerAuth.Config.defaultLayer,
  21. ),
  22. Layer.provide(LocationServiceMap.layer),
  23. Layer.provide(Database.defaultLayer),
  24. Layer.provide(EventV2.defaultLayer),
  25. Layer.provide(FetchHttpClient.layer),
  26. )
  27. }
  28. export const routes = createRoutes()
  29. export const webHandler = () =>
  30. HttpRouter.toWebHandler(routes.pipe(Layer.provide(HttpServer.layerServices)), { disableLogger: true })