1import * as Cloudflare from "alchemy/Cloudflare";
2import * as Effect from "effect/Effect";
3import { HttpClientRequest, HttpServerResponse } from "effect/http";
4import { SandboxContainer } from "./SandboxContainer.ts";
5
6export default class SandboxDO extends Cloudflare.DurableObject<SandboxDO>()(
7 "SandboxDO",
8 Effect.gen(function* () {
9 const container = yield* SandboxContainer;
10
11 return Effect.gen(function* () {
12 return {
13 fetch: Effect.gen(function* () {
14 const { fetch } = yield* container.getTcpPort(3000);
15 const response = yield* fetch(
16 HttpClientRequest.get("http://container/"),
17 );
18 return HttpServerResponse.text(yield* response.text, {
19 status: response.status,
20 headers: response.headers,
21 });
22 }),
23 };
24 });
25 }).pipe(
26 Effect.provide(
27 Cloudflare.Containers.layer(SandboxContainer, {
28 enableInternet: true,
29 }),
30 ),
31 ),
32) {}