routes.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  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 { PermissionSaved } from "@opencode-ai/core/permission/saved"
  5. import { SessionV2 } from "@opencode-ai/core/session"
  6. import { FetchHttpClient, HttpRouter, HttpServer } from "effect/unstable/http"
  7. import { HttpApiBuilder } from "effect/unstable/httpapi"
  8. import { Layer, Option } from "effect"
  9. import { V2Api } from "./api"
  10. import { ServerAuth } from "./auth"
  11. import { v2Handlers } from "./handlers"
  12. import { v2AuthorizationLayer } from "./middleware/authorization"
  13. import { schemaErrorLayer } from "./middleware/schema-error"
  14. export function createRoutes(password?: string) {
  15. return HttpApiBuilder.layer(V2Api).pipe(
  16. Layer.provide(v2Handlers),
  17. Layer.provide(v2AuthorizationLayer),
  18. Layer.provide(schemaErrorLayer),
  19. Layer.provide(
  20. password
  21. ? ServerAuth.Config.layer({ username: "opencode", password: Option.some(password) })
  22. : ServerAuth.Config.defaultLayer,
  23. ),
  24. Layer.provide(LocationServiceMap.layer),
  25. Layer.provide(PermissionSaved.layer),
  26. Layer.provide(SessionV2.defaultLayer),
  27. Layer.provide(Database.defaultLayer),
  28. Layer.provide(EventV2.defaultLayer),
  29. Layer.provide(FetchHttpClient.layer),
  30. )
  31. }
  32. export const routes = createRoutes()
  33. export const webHandler = () =>
  34. HttpRouter.toWebHandler(routes.pipe(Layer.provide(HttpServer.layerServices)), { disableLogger: true })