1import * as Alchemy from "alchemy";
2import * as Cloudflare from "alchemy/Cloudflare";
3import * as Effect from "effect/Effect";
4import * as pathe from "pathe";
5import { App } from "./app.ts";
6import FlagshipEffectWorker from "./effect-worker.ts";
7
8export const AsyncWorker = Cloudflare.Worker("FlagshipAsyncWorker", {
9 main: pathe.resolve(import.meta.dirname, "async-worker.ts"),
10 env: {
11 FLAGS: App,
12 },
13});
14
15export type AsyncWorkerEnv = Cloudflare.InferEnv<typeof AsyncWorker>;
16
17export default Alchemy.Stack(
18 "FlagshipBindingStack",
19 {
20 providers: Cloudflare.providers(),
21 state: Cloudflare.state(),
22 },
23 Effect.gen(function* () {
24 const asyncWorker = yield* AsyncWorker;
25 const effectWorker = yield* FlagshipEffectWorker;
26
27 return {
28 asyncWorkerUrl: asyncWorker.url.as<string>(),
29 effectWorkerUrl: effectWorker.url.as<string>(),
30 };
31 }),
32);