httpapi-layer.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. import { NodeHttpServer, NodeServices } from "@effect/platform-node"
  2. import { Config, Layer } from "effect"
  3. import { HttpClient, HttpClientRequest, HttpRouter, HttpServer } from "effect/unstable/http"
  4. import { layerWebSocketConstructorGlobal } from "effect/unstable/socket/Socket"
  5. import { HttpApiApp } from "../../src/server/routes/instance/httpapi/server"
  6. const servedRoutes: Layer.Layer<never, Config.ConfigError, HttpServer.HttpServer> = HttpRouter.serve(
  7. HttpApiApp.routes,
  8. {
  9. disableListenLog: true,
  10. disableLogger: true,
  11. },
  12. )
  13. export const httpApiLayer = servedRoutes.pipe(
  14. Layer.provide(layerWebSocketConstructorGlobal),
  15. Layer.provideMerge(NodeHttpServer.layerTest),
  16. Layer.provideMerge(NodeServices.layer),
  17. )
  18. export function request(path: string, init?: RequestInit) {
  19. const url = new URL(path, "http://localhost")
  20. return HttpClientRequest.fromWeb(new Request(url, init)).pipe(
  21. HttpClientRequest.setUrl(url.pathname),
  22. HttpClient.execute,
  23. )
  24. }
  25. export function requestInDirectory(path: string, directory: string, init: RequestInit = {}) {
  26. const headers = new Headers(init.headers)
  27. headers.set("x-opencode-directory", directory)
  28. return request(path, { ...init, headers })
  29. }