1import * as Cloudflare from "@/Cloudflare";
2import * as Effect from "effect/Effect";
3import { HttpServerRequest } from "effect/http/HttpServerRequest";
4import * as HttpServerResponse from "effect/http/HttpServerResponse";
5import { ReloadContainerObject } from "./object.ts";
6
7/** `GET /<file>` proxies to the container's httpd via the DO. */
8export default class ReloadContainerWorker extends Cloudflare.Worker<ReloadContainerWorker>()(
9 "ReloadContainerWorker",
10 { main: import.meta.url },
11 Effect.gen(function* () {
12 const objects = yield* ReloadContainerObject;
13
14 return {
15 fetch: Effect.gen(function* () {
16 const request = yield* HttpServerRequest;
17 const url = new URL(request.url, "http://x");
18 const text = yield* objects
19 .getByName("default")
20 .read(url.pathname)
21 .pipe(
22 Effect.catchCause((cause) =>
23 Effect.succeed(`CONTAINER_UNREACHABLE: ${cause}`),
24 ),
25 );
26 return HttpServerResponse.text(text);
27 }),
28 };
29 }),
30) {}