1import * as Fly from "@/Fly";
2import * as Effect from "effect/Effect";
3import * as FileSystem from "effect/FileSystem";
4import { HttpServerRequest } from "effect/http/HttpServerRequest";
5import * as HttpServerResponse from "effect/http/HttpServerResponse";
6
7/**
8 * HTTP Sprite: writes a marker during init and serves it back.
9 */
10export default class Box extends Fly.Sprite<Box>()(
11 "Box",
12 {
13 main: import.meta.url,
14 urlAuth: "public",
15 port: 3000,
16 },
17 Effect.gen(function* () {
18 const fs = yield* FileSystem.FileSystem;
19
20 return {
21 fetch: Effect.gen(function* () {
22 const request = yield* HttpServerRequest;
23 const url = new URL(request.url, "http://sprite");
24 if (url.pathname === "/health") {
25 return yield* HttpServerResponse.json({ ok: true });
26 }
27 yield* fs.makeDirectory("/tmp", { recursive: true }).pipe(Effect.orDie);
28 yield* fs
29 .writeFileString("/tmp/alchemy-sprite.txt", "hello-from-sprite")
30 .pipe(Effect.orDie);
31 const text = yield* fs
32 .readFileString("/tmp/alchemy-sprite.txt")
33 .pipe(Effect.orDie);
34 return yield* HttpServerResponse.json({
35 ok: true,
36 text,
37 });
38 }),
39 };
40 }),
41) {}