import { NodeHttpServer, NodeServices } from "@effect/platform-node" import { Config, Layer } from "effect" import { HttpClient, HttpClientRequest, HttpRouter, HttpServer } from "effect/unstable/http" import { layerWebSocketConstructorGlobal } from "effect/unstable/socket/Socket" import { HttpApiApp } from "../../src/server/routes/instance/httpapi/server" const servedRoutes: Layer.Layer = HttpRouter.serve( HttpApiApp.routes, { disableListenLog: true, disableLogger: true, }, ) export const httpApiLayer = servedRoutes.pipe( Layer.provide(layerWebSocketConstructorGlobal), Layer.provideMerge(NodeHttpServer.layerTest), Layer.provideMerge(NodeServices.layer), ) export function request(path: string, init?: RequestInit) { const url = new URL(path, "http://localhost") return HttpClientRequest.fromWeb(new Request(url, init)).pipe( HttpClientRequest.setUrl(url.pathname), HttpClient.execute, ) } export function requestInDirectory(path: string, directory: string, init: RequestInit = {}) { const headers = new Headers(init.headers) headers.set("x-opencode-directory", directory) return request(path, { ...init, headers }) }