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 { HostReachContainerObject } from "./object.ts";
6
7export default class HostReachContainerWorker extends Cloudflare.Worker<HostReachContainerWorker>()(
8 "HostReachContainerWorker",
9 {
10 main: import.meta.url,
11 },
12 Effect.gen(function* () {
13 const objects = yield* HostReachContainerObject;
14
15 return {
16 fetch: Effect.gen(function* () {
17 const request = yield* HttpServerRequest;
18 const url = new URL(request.url, "http://x");
19 const object = objects.getByName("default");
20
21 if (url.pathname === "/env") {
22 return HttpServerResponse.text(yield* object.getEnv());
23 }
24 if (url.pathname === "/probe") {
25 return HttpServerResponse.text(yield* object.getProbe());
26 }
27 return HttpServerResponse.text("ok");
28 }).pipe(
29 Effect.catchTag("HttpClientError", (err) =>
30 Effect.succeed(
31 err.response
32 ? HttpServerResponse.fromClientResponse(err.response)
33 : HttpServerResponse.text(err.message, { status: 500 }),
34 ),
35 ),
36 ),
37 };
38 }),
39) {}