1import { Function } from "@/Railway/Function.ts";
2import { enableRailwayRpc } from "@/Railway/rpc-server.ts";
3import * as Effect from "effect/Effect";
4import * as HttpServerResponse from "effect/http/HttpServerResponse";
5import { Partition, Site } from "./rpc-shared.ts";
6
7export { Site };
8
9/**
10 * Tagged Function that hosts a schemaless `greet` method. RPC is served
11 * only on `{name}.railway.internal` with `ALCHEMY_RPC_TOKEN`.
12 */
13export default class Greeter extends Function<Greeter>()(
14 "Greeter",
15 {
16 project: Site,
17 environment: Partition,
18 main: import.meta.url,
19 },
20 Effect.gen(function* () {
21 enableRailwayRpc();
22 return {
23 greet: (name: string) => Effect.succeed(`hello ${name}`),
24 fetch: Effect.succeed(HttpServerResponse.text("greeter")),
25 };
26 }),
27) {}