diff --git a/packages/server/src/http.ts b/packages/server/src/http.ts index da02f1c..8cc3964 100644 --- a/packages/server/src/http.ts +++ b/packages/server/src/http.ts @@ -16,51 +16,41 @@ const makeWebRpcRoute = Effect.all([ Effect.provide(WebRpcLive), ) -const makeProductionWebappMiddleware = Effect.gen(function*() { +const makeProductionWebappRoute = Effect.fnUntraced(function*(route: HttpRouter.PathInput) { const path = yield* Path.Path const fs = yield* FileSystem.FileSystem const dist = path.join(yield* path.fromFileUrl(new URL(".", import.meta.resolve("@website/webapp"))), "dist") - return () => Effect.gen(function*() { + return HttpRouter.all(route, Effect.gen(function*() { const req = yield* HttpServerRequest.HttpServerRequest const source = path.join(dist, req.url) - const isValid = yield* fs.stat(source).pipe( + const exists = yield* fs.stat(source).pipe( Effect.andThen(stat => stat.type === "File"), Effect.catchAll(() => Effect.succeed(false)), ) return yield* HttpServerResponse.setHeader( - yield* HttpServerResponse.file(isValid ? source : path.join(dist, "index.html")), + yield* HttpServerResponse.file(exists ? source : path.join(dist, "index.html")), "Cache-Control", `public, max-age=${Duration.toSeconds("365 days")}, immutable` ) - }) + })) }) -export const HttpAppDevelopment = Effect.provide(makeWebRpcRoute, WebRpcSerializationDevelopment).pipe( - Effect.map(serveWebRpc => router.pipe( - serveWebRpc, - HttpServer.serve(flow( - HttpMiddleware.logger, - HttpMiddleware.xForwardedHeaders, - )), +export const HttpAppDevelopment = Layer.unwrapScoped(Effect.gen(function*() { + return router.pipe( + yield* Effect.provide(makeWebRpcRoute, WebRpcSerializationDevelopment), + HttpServer.serve(flow(HttpMiddleware.logger, HttpMiddleware.xForwardedHeaders)), HttpServer.withLogAddress, - )), + ) +})) - Layer.unwrapScoped, -) - -export const HttpAppProduction = Effect.all([ - Effect.provide(makeWebRpcRoute, WebRpcSerializationProduction), - makeProductionWebappMiddleware, -]).pipe( - Effect.map(([serveWebRpc, serveProductionWebapp]) => router.pipe( - serveWebRpc, - serveProductionWebapp, +export const HttpAppProduction = Layer.unwrapScoped(Effect.gen(function*() { + return router.pipe( + yield* Effect.provide(makeWebRpcRoute, WebRpcSerializationProduction), + yield* makeProductionWebappRoute("*"), HttpServer.serve(HttpMiddleware.xForwardedHeaders), HttpServer.withLogAddress, - )), - - Layer.unwrapScoped, -) + ) +}))