1import * as Cloudflare from "@/Cloudflare";
2import * as Alchemy from "@/index";
3import * as Effect from "effect/Effect";
4import * as path from "pathe";
5import RateLimitEffectWorker from "./effect.ts";
6
7export const AsyncWorker = Cloudflare.Worker("RateLimitAsyncWorker", {
8 main: path.resolve(import.meta.dirname, "async.ts"),
9 workersDev: true,
10 env: {
11 THROTTLE: Cloudflare.RateLimit("THROTTLE", {
12 namespaceId: 11_002,
13 simple: { limit: 2, period: 10 },
14 }),
15 },
16});
17
18export type AsyncWorkerEnv = Cloudflare.InferEnv<typeof AsyncWorker>;
19
20export default Alchemy.Stack(
21 "RateLimitTestStack",
22 {
23 providers: Cloudflare.providers(),
24 state: Cloudflare.state(),
25 },
26 Effect.gen(function* () {
27 const asyncWorker = yield* AsyncWorker;
28 const effectWorker = yield* RateLimitEffectWorker;
29 return {
30 asyncUrl: asyncWorker.url.as<string>(),
31 effectUrl: effectWorker.url.as<string>(),
32 };
33 }),
34);