diff --git a/.changeset/happy-worms-rest.md b/.changeset/happy-worms-rest.md
new file mode 100644
index 000000000..dec18baea
--- /dev/null
+++ b/.changeset/happy-worms-rest.md
@@ -0,0 +1,11 @@
+---
+"@opennextjs/cloudflare": minor
+---
+
+feat: rename the binary from "cloudflare" to "opennextjs-cloudflare"
+
+**BREAKING CHANGE**:
+After this change the old way of running the tool (e.g. `pnpm cloudflare`) no longer works.
+Going forward use the new binary name (e.g. `pnpm opennextjs-cloudflare`).
+
+See [#161](https://github.com/opennextjs/opennextjs-cloudflare/issues/161)
diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml
index 822038df7..dafd1144b 100644
--- a/.github/workflows/checks.yml
+++ b/.github/workflows/checks.yml
@@ -2,9 +2,9 @@ name: Code checks
 
 on:
   push:
-    branches: [main]
+    branches: [main, experimental]
   pull_request:
-    branches: [main]
+    branches: [main, experimental]
 
 jobs:
   checks:
diff --git a/.gitignore b/.gitignore
index 0b54a0cc8..ae1970180 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,5 +3,6 @@ node_modules
 
 output
 .worker-next
-.save.next
+.open-next
+.wrangler
 dist
\ No newline at end of file
diff --git a/examples/api/.dev.vars b/examples/api/.dev.vars
new file mode 100644
index 000000000..17f2dcc2e
--- /dev/null
+++ b/examples/api/.dev.vars
@@ -0,0 +1 @@
+NEXTJS_ENV=development
\ No newline at end of file
diff --git a/examples/api/.env.development b/examples/api/.env.development
new file mode 100644
index 000000000..7eeb777a5
--- /dev/null
+++ b/examples/api/.env.development
@@ -0,0 +1 @@
+TEST_ENV_VAR=TEST_VALUE
\ No newline at end of file
diff --git a/examples/api/app/api/env/route.ts b/examples/api/app/api/env/route.ts
new file mode 100644
index 000000000..24dfdc74a
--- /dev/null
+++ b/examples/api/app/api/env/route.ts
@@ -0,0 +1,3 @@
+export async function GET() {
+  return new Response(JSON.stringify(process.env));
+}
diff --git a/examples/api/e2e/base.spec.ts b/examples/api/e2e/base.spec.ts
index a4f8811e1..2cba20495 100644
--- a/examples/api/e2e/base.spec.ts
+++ b/examples/api/e2e/base.spec.ts
@@ -30,3 +30,8 @@ test("the hello-world api POST route works as intended", async ({ page }) => {
   expect(res.headers()["content-type"]).toContain("text/plain");
   await expect(res.text()).resolves.toEqual("Hello post-World! body=some body");
 });
+
+test("sets environment variables from the Next.js env file", async ({ page }) => {
+  const res = await page.request.get("/api/env");
+  await expect(res.json()).resolves.toEqual(expect.objectContaining({ TEST_ENV_VAR: "TEST_VALUE" }));
+});
diff --git a/examples/api/open-next.config.ts b/examples/api/open-next.config.ts
new file mode 100644
index 000000000..0f7794ffd
--- /dev/null
+++ b/examples/api/open-next.config.ts
@@ -0,0 +1,25 @@
+import type { OpenNextConfig } from "@opennextjs/aws/types/open-next";
+
+const config: OpenNextConfig = {
+  default: {
+    override: {
+      wrapper: "cloudflare-node",
+      converter: "edge",
+      // Unused implementation
+      incrementalCache: "dummy",
+      tagCache: "dummy",
+      queue: "dummy",
+    },
+  },
+
+  middleware: {
+    external: true,
+    override: {
+      wrapper: "cloudflare-edge",
+      converter: "edge",
+      proxyExternalRequest: "fetch",
+    },
+  },
+};
+
+export default config;
diff --git a/examples/api/package.json b/examples/api/package.json
index de74cbddb..43c4b05f9 100644
--- a/examples/api/package.json
+++ b/examples/api/package.json
@@ -8,7 +8,7 @@
     "build": "next build",
     "start": "next start",
     "lint": "next lint",
-    "build:worker": "pnpm cloudflare",
+    "build:worker": "pnpm opennextjs-cloudflare",
     "dev:worker": "wrangler dev --port 8770 --inspector-port 9330",
     "preview:worker": "pnpm build:worker && pnpm dev:worker",
     "e2e": "playwright test -c e2e/playwright.config.ts",
diff --git a/examples/api/tsconfig.json b/examples/api/tsconfig.json
index 5c536dfe8..e2ecc0c92 100644
--- a/examples/api/tsconfig.json
+++ b/examples/api/tsconfig.json
@@ -19,5 +19,5 @@
     ]
   },
   "include": ["next-env.d.ts", ".next/types/**/*.ts", "**/*.ts", "**/*.tsx", "worker-configuration.d.ts"],
-  "exclude": ["node_modules"]
+  "exclude": ["node_modules", "open-next.config.ts"]
 }
diff --git a/examples/api/wrangler.toml b/examples/api/wrangler.toml
index c1ee09359..661e3f97c 100644
--- a/examples/api/wrangler.toml
+++ b/examples/api/wrangler.toml
@@ -1,10 +1,10 @@
 #:schema node_modules/wrangler/config-schema.json
 name = "api"
-main = ".worker-next/index.mjs"
-compatibility_date = "2024-09-16"
-compatibility_flags = ["nodejs_compat_v2"]
+main = ".open-next/worker.js"
+compatibility_date = "2024-09-23"
+compatibility_flags = ["nodejs_compat"]
 
-assets = { directory = ".worker-next/assets", binding = "ASSETS" }
+assets = { directory = ".open-next/assets", binding = "ASSETS" }
 
 [vars]
 hello = 'Hello World from the cloudflare context!'
diff --git a/examples/create-next-app/open-next.config.ts b/examples/create-next-app/open-next.config.ts
new file mode 100644
index 000000000..0f7794ffd
--- /dev/null
+++ b/examples/create-next-app/open-next.config.ts
@@ -0,0 +1,25 @@
+import type { OpenNextConfig } from "@opennextjs/aws/types/open-next";
+
+const config: OpenNextConfig = {
+  default: {
+    override: {
+      wrapper: "cloudflare-node",
+      converter: "edge",
+      // Unused implementation
+      incrementalCache: "dummy",
+      tagCache: "dummy",
+      queue: "dummy",
+    },
+  },
+
+  middleware: {
+    external: true,
+    override: {
+      wrapper: "cloudflare-edge",
+      converter: "edge",
+      proxyExternalRequest: "fetch",
+    },
+  },
+};
+
+export default config;
diff --git a/examples/create-next-app/package.json b/examples/create-next-app/package.json
index c8589c555..d8cea2b0b 100644
--- a/examples/create-next-app/package.json
+++ b/examples/create-next-app/package.json
@@ -7,7 +7,7 @@
     "build": "next build",
     "start": "next start",
     "lint": "next lint",
-    "build:worker": "cloudflare",
+    "build:worker": "opennextjs-cloudflare",
     "dev:worker": "wrangler dev --port 8771 --inspector-port 9331",
     "preview:worker": "pnpm build:worker && pnpm dev:worker",
     "e2e": "playwright test -c e2e/playwright.config.ts"
diff --git a/examples/create-next-app/tsconfig.json b/examples/create-next-app/tsconfig.json
index 7b2858930..811633116 100644
--- a/examples/create-next-app/tsconfig.json
+++ b/examples/create-next-app/tsconfig.json
@@ -22,5 +22,5 @@
     }
   },
   "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
-  "exclude": ["node_modules"]
+  "exclude": ["node_modules", "open-next.config.ts"]
 }
diff --git a/examples/create-next-app/wrangler.toml b/examples/create-next-app/wrangler.toml
index 5c85ee9f0..b2967de62 100644
--- a/examples/create-next-app/wrangler.toml
+++ b/examples/create-next-app/wrangler.toml
@@ -1,9 +1,9 @@
 #:schema node_modules/wrangler/config-schema.json
 name = "create-next-app"
-main = ".worker-next/index.mjs"
+main = ".open-next/worker.js"
 
-compatibility_date = "2024-08-29"
-compatibility_flags = ["nodejs_compat_v2"]
+compatibility_date = "2024-09-23"
+compatibility_flags = ["nodejs_compat"]
 
 # Use the new Workers + Assets to host the static frontend files
-assets = { directory = ".worker-next/assets", binding = "ASSETS" }
+assets = { directory = ".open-next/assets", binding = "ASSETS" }
diff --git a/examples/middleware/.gitignore b/examples/middleware/.gitignore
new file mode 100755
index 000000000..998933bb3
--- /dev/null
+++ b/examples/middleware/.gitignore
@@ -0,0 +1,42 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
+
+# playwright
+/test-results/
+/playwright-report/
+/blob-report/
+/playwright/.cache/
diff --git a/examples/middleware/README.md b/examples/middleware/README.md
new file mode 100755
index 000000000..a8eeb816f
--- /dev/null
+++ b/examples/middleware/README.md
@@ -0,0 +1,31 @@
+# Middleware
+
+This example shows how to use [Middleware in Next.js](https://nextjs.org/docs/app/building-your-application/routing/middleware) to run code before a request is completed.
+
+The index page ([`app/page.tsx`](app/page.tsx)) has a list of links to pages with `redirect`, `rewrite`, or normal behavior.
+
+On the Middleware file ([`middleware.ts`](middleware.ts)) the routes are already being filtered by defining a `matcher` on the exported config. If you want the Middleware to run for every request, you can remove the `matcher`.
+
+## Deploy your own
+
+Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example):
+
+[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/next.js/tree/canary/examples/middleware&project-name=middleware&repository-name=middleware)
+
+## How to use
+
+Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init), [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/), or [pnpm](https://pnpm.io) to bootstrap the example:
+
+```bash
+npx create-next-app --example middleware middleware-app
+```
+
+```bash
+yarn create next-app --example middleware middleware-app
+```
+
+```bash
+pnpm create next-app --example middleware middleware-app
+```
+
+Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)).
diff --git a/examples/middleware/app/about/page.tsx b/examples/middleware/app/about/page.tsx
new file mode 100644
index 000000000..9c8145d3b
--- /dev/null
+++ b/examples/middleware/app/about/page.tsx
@@ -0,0 +1,3 @@
+export default function AboutPage() {
+  return <h1>About</h1>;
+}
diff --git a/examples/middleware/app/about2/page.tsx b/examples/middleware/app/about2/page.tsx
new file mode 100644
index 000000000..76a7a4e29
--- /dev/null
+++ b/examples/middleware/app/about2/page.tsx
@@ -0,0 +1,3 @@
+export default function About2Page() {
+  return <h1>About 2</h1>;
+}
diff --git a/examples/middleware/app/another/page.tsx b/examples/middleware/app/another/page.tsx
new file mode 100644
index 000000000..b80bfc764
--- /dev/null
+++ b/examples/middleware/app/another/page.tsx
@@ -0,0 +1,3 @@
+export default function AnotherPage() {
+  return <h1>Another</h1>;
+}
diff --git a/examples/middleware/app/layout.tsx b/examples/middleware/app/layout.tsx
new file mode 100644
index 000000000..4036c99e7
--- /dev/null
+++ b/examples/middleware/app/layout.tsx
@@ -0,0 +1,14 @@
+import type { Metadata } from "next";
+
+export default function RootLayout({ children }: { children: React.ReactNode }) {
+  return (
+    <html lang="en">
+      <body>{children}</body>
+    </html>
+  );
+}
+
+export const metadata: Metadata = {
+  title: "Next.js Middleware example",
+  description: "Redirect and rewrite pages using Next.js Middleware.",
+};
diff --git a/examples/middleware/app/middleware/page.tsx b/examples/middleware/app/middleware/page.tsx
new file mode 100644
index 000000000..aa28fa5fd
--- /dev/null
+++ b/examples/middleware/app/middleware/page.tsx
@@ -0,0 +1,3 @@
+export default function MiddlewarePage() {
+  return <h1>Via middleware</h1>;
+}
diff --git a/examples/middleware/app/page.tsx b/examples/middleware/app/page.tsx
new file mode 100755
index 000000000..0db10d12b
--- /dev/null
+++ b/examples/middleware/app/page.tsx
@@ -0,0 +1,21 @@
+import Link from "next/link";
+
+export default function Home() {
+  return (
+    <div>
+      <h1>Index</h1>
+      <p>
+        <Link href="/about">Go to about page (will redirect)</Link>
+      </p>
+      <p>
+        <Link href="/another">Go to another page (will rewrite)</Link>
+      </p>
+      <p>
+        <Link href="/about2">Go to about 2 page (no redirect or rewrite)</Link>
+      </p>
+      <p>
+        <Link href="/middleware">Go to middleware page (using NextResponse.next())</Link>
+      </p>
+    </div>
+  );
+}
diff --git a/examples/middleware/app/redirected/page.tsx b/examples/middleware/app/redirected/page.tsx
new file mode 100644
index 000000000..fa383f3ff
--- /dev/null
+++ b/examples/middleware/app/redirected/page.tsx
@@ -0,0 +1,3 @@
+export default function RedirectedPage() {
+  return <h1>Redirected from /about</h1>;
+}
diff --git a/examples/middleware/app/rewrite/page.tsx b/examples/middleware/app/rewrite/page.tsx
new file mode 100644
index 000000000..9f1c1e57f
--- /dev/null
+++ b/examples/middleware/app/rewrite/page.tsx
@@ -0,0 +1,3 @@
+export default function RewritePage() {
+  return <h1>Rewrite</h1>;
+}
diff --git a/examples/middleware/e2e/base.spec.ts b/examples/middleware/e2e/base.spec.ts
new file mode 100644
index 000000000..c4316c939
--- /dev/null
+++ b/examples/middleware/e2e/base.spec.ts
@@ -0,0 +1,29 @@
+import { test, expect } from "@playwright/test";
+
+test("redirect", async ({ page }) => {
+  await page.goto("/");
+  await page.click('[href="/about"]');
+  expect(page.waitForURL("**/redirected"));
+  expect(await page.textContent("h1")).toContain("Redirected");
+});
+
+test("rewrite", async ({ page }) => {
+  await page.goto("/");
+  await page.click('[href="/another"]');
+  expect(page.waitForURL("**/another"));
+  expect(await page.textContent("h1")).toContain("Rewrite");
+});
+
+test("no matching middleware", async ({ page }) => {
+  await page.goto("/");
+  await page.click('[href="/about2"]');
+  expect(page.waitForURL("**/about2"));
+  expect(await page.textContent("h1")).toContain("About 2");
+});
+
+test("matching noop middleware", async ({ page }) => {
+  await page.goto("/");
+  await page.click('[href="/middleware"]');
+  expect(page.waitForURL("**/middleware"));
+  expect(await page.textContent("h1")).toContain("Via middleware");
+});
diff --git a/examples/middleware/e2e/playwright.config.ts b/examples/middleware/e2e/playwright.config.ts
new file mode 100644
index 000000000..d6d8499cd
--- /dev/null
+++ b/examples/middleware/e2e/playwright.config.ts
@@ -0,0 +1,53 @@
+import { defineConfig, devices } from "@playwright/test";
+
+declare const process: { env: Record<string, string> };
+
+/**
+ * See https://playwright.dev/docs/test-configuration.
+ */
+export default defineConfig({
+  testDir: "./",
+  /* Run tests in files in parallel */
+  fullyParallel: true,
+  /* Fail the build on CI if you accidentally left test.only in the source code. */
+  forbidOnly: !!process.env.CI,
+  /* Retry on CI only */
+  retries: process.env.CI ? 2 : 0,
+  /* Opt out of parallel tests on CI. */
+  workers: process.env.CI ? 1 : undefined,
+  /* Reporter to use. See https://playwright.dev/docs/test-reporters */
+  reporter: "html",
+  /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
+  use: {
+    /* Base URL to use in actions like `await page.goto('/')`. */
+    baseURL: "http://localhost:8774",
+
+    /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
+    trace: "on-first-retry",
+  },
+
+  /* Configure projects for major browsers */
+  projects: [
+    {
+      name: "chromium",
+      use: { ...devices["Desktop Chrome"] },
+    },
+
+    {
+      name: "firefox",
+      use: { ...devices["Desktop Firefox"] },
+    },
+
+    {
+      name: "webkit",
+      use: { ...devices["Desktop Safari"] },
+    },
+  ],
+
+  /* Run your local dev server before starting the tests */
+  webServer: {
+    command: "pnpm preview:worker",
+    url: "http://localhost:8774",
+    reuseExistingServer: !process.env.CI,
+  },
+});
diff --git a/examples/middleware/middleware.ts b/examples/middleware/middleware.ts
new file mode 100644
index 000000000..83acae441
--- /dev/null
+++ b/examples/middleware/middleware.ts
@@ -0,0 +1,16 @@
+import { NextRequest, NextResponse } from "next/server";
+
+export function middleware(request: NextRequest) {
+  console.log("middleware");
+  if (request.nextUrl.pathname === "/about") {
+    return NextResponse.redirect(new URL("/redirected", request.url));
+  }
+  if (request.nextUrl.pathname === "/another") {
+    return NextResponse.rewrite(new URL("/rewrite", request.url));
+  }
+  return NextResponse.next();
+}
+
+export const config = {
+  matcher: ["/about/:path*", "/another/:path*", "/middleware/:path*"],
+};
diff --git a/examples/middleware/next.config.mjs b/examples/middleware/next.config.mjs
new file mode 100644
index 000000000..4678774e6
--- /dev/null
+++ b/examples/middleware/next.config.mjs
@@ -0,0 +1,4 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {};
+
+export default nextConfig;
diff --git a/examples/middleware/open-next.config.ts b/examples/middleware/open-next.config.ts
new file mode 100644
index 000000000..0f7794ffd
--- /dev/null
+++ b/examples/middleware/open-next.config.ts
@@ -0,0 +1,25 @@
+import type { OpenNextConfig } from "@opennextjs/aws/types/open-next";
+
+const config: OpenNextConfig = {
+  default: {
+    override: {
+      wrapper: "cloudflare-node",
+      converter: "edge",
+      // Unused implementation
+      incrementalCache: "dummy",
+      tagCache: "dummy",
+      queue: "dummy",
+    },
+  },
+
+  middleware: {
+    external: true,
+    override: {
+      wrapper: "cloudflare-edge",
+      converter: "edge",
+      proxyExternalRequest: "fetch",
+    },
+  },
+};
+
+export default config;
diff --git a/examples/middleware/package.json b/examples/middleware/package.json
new file mode 100644
index 000000000..ff1fbc0c1
--- /dev/null
+++ b/examples/middleware/package.json
@@ -0,0 +1,29 @@
+{
+  "name": "middleware",
+  "private": true,
+  "scripts": {
+    "dev": "next dev",
+    "build": "next build",
+    "start": "next start",
+    "lint": "next lint",
+    "build:worker": "pnpm opennextjs-cloudflare",
+    "dev:worker": "wrangler dev --port 8774 --inspector-port 9334",
+    "preview:worker": "pnpm build:worker && pnpm dev:worker",
+    "e2e": "playwright test -c e2e/playwright.config.ts"
+  },
+  "dependencies": {
+    "next": "catalog:",
+    "react": "catalog:",
+    "react-dom": "catalog:"
+  },
+  "devDependencies": {
+    "@opennextjs/cloudflare": "workspace:*",
+    "@playwright/test": "catalog:",
+    "@types/node": "catalog:",
+    "@types/react": "catalog:",
+    "@types/react-dom": "catalog:",
+    "eslint": "catalog:",
+    "typescript": "catalog:",
+    "wrangler": "catalog:"
+  }
+}
diff --git a/examples/middleware/public/favicon.ico b/examples/middleware/public/favicon.ico
new file mode 100755
index 000000000..718d6fea4
Binary files /dev/null and b/examples/middleware/public/favicon.ico differ
diff --git a/examples/middleware/public/vercel.svg b/examples/middleware/public/vercel.svg
new file mode 100755
index 000000000..fbf0e25a6
--- /dev/null
+++ b/examples/middleware/public/vercel.svg
@@ -0,0 +1,4 @@
+<svg width="283" height="64" viewBox="0 0 283 64" fill="none" 
+    xmlns="http://www.w3.org/2000/svg">
+    <path d="M141.04 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.46 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM248.72 16c-11.04 0-19 7.2-19 18s8.96 18 20 18c6.67 0 12.55-2.64 16.19-7.09l-7.65-4.42c-2.02 2.21-5.09 3.5-8.54 3.5-4.79 0-8.86-2.5-10.37-6.5h28.02c.22-1.12.35-2.28.35-3.5 0-10.79-7.96-17.99-19-17.99zm-9.45 14.5c1.25-3.99 4.67-6.5 9.45-6.5 4.79 0 8.21 2.51 9.45 6.5h-18.9zM200.24 34c0 6 3.92 10 10 10 4.12 0 7.21-1.87 8.8-4.92l7.68 4.43c-3.18 5.3-9.14 8.49-16.48 8.49-11.05 0-19-7.2-19-18s7.96-18 19-18c7.34 0 13.29 3.19 16.48 8.49l-7.68 4.43c-1.59-3.05-4.68-4.92-8.8-4.92-6.07 0-10 4-10 10zm82.48-29v46h-9V5h9zM36.95 0L73.9 64H0L36.95 0zm92.38 5l-27.71 48L73.91 5H84.3l17.32 30 17.32-30h10.39zm58.91 12v9.69c-1-.29-2.06-.49-3.2-.49-5.81 0-10 4-10 10V51h-9V17h9v9.2c0-5.08 5.91-9.2 13.2-9.2z" fill="#000"/>
+</svg>
\ No newline at end of file
diff --git a/examples/middleware/tsconfig.json b/examples/middleware/tsconfig.json
new file mode 100755
index 000000000..74ea7c8b2
--- /dev/null
+++ b/examples/middleware/tsconfig.json
@@ -0,0 +1,25 @@
+{
+  "compilerOptions": {
+    "target": "es5",
+    "lib": ["dom", "dom.iterable", "esnext"],
+    "allowJs": true,
+    "skipLibCheck": true,
+    "strict": true,
+    "forceConsistentCasingInFileNames": true,
+    "noEmit": true,
+    "esModuleInterop": true,
+    "module": "esnext",
+    "moduleResolution": "node",
+    "resolveJsonModule": true,
+    "isolatedModules": true,
+    "jsx": "preserve",
+    "incremental": true,
+    "plugins": [
+      {
+        "name": "next"
+      }
+    ]
+  },
+  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+  "exclude": ["node_modules", "open-next.config.ts", "worker.ts"]
+}
diff --git a/examples/middleware/wrangler.toml b/examples/middleware/wrangler.toml
new file mode 100644
index 000000000..30f65f510
--- /dev/null
+++ b/examples/middleware/wrangler.toml
@@ -0,0 +1,8 @@
+#:schema node_modules/wrangler/config-schema.json
+name = "middleware"
+main = ".open-next/worker.js"
+compatibility_date = "2024-09-23"
+compatibility_flags = ["nodejs_compat"]
+
+# Use the new Workers + Assets to host the static frontend files
+assets = { directory = ".open-next/assets", binding = "ASSETS" }
diff --git a/examples/vercel-blog-starter/open-next.config.ts b/examples/vercel-blog-starter/open-next.config.ts
new file mode 100644
index 000000000..6337166ea
--- /dev/null
+++ b/examples/vercel-blog-starter/open-next.config.ts
@@ -0,0 +1,26 @@
+import type { OpenNextConfig } from "@opennextjs/aws/types/open-next";
+import cache from "@opennextjs/cloudflare/kvCache";
+
+const config: OpenNextConfig = {
+  default: {
+    override: {
+      wrapper: "cloudflare-node",
+      converter: "edge",
+      incrementalCache: async () => cache,
+      // Unused implementations
+      tagCache: "dummy",
+      queue: "dummy",
+    },
+  },
+
+  middleware: {
+    external: true,
+    override: {
+      wrapper: "cloudflare-edge",
+      converter: "edge",
+      proxyExternalRequest: "fetch",
+    },
+  },
+};
+
+export default config;
diff --git a/examples/vercel-blog-starter/package.json b/examples/vercel-blog-starter/package.json
index f265c5343..2a53a6b03 100644
--- a/examples/vercel-blog-starter/package.json
+++ b/examples/vercel-blog-starter/package.json
@@ -5,7 +5,7 @@
     "dev": "next",
     "build": "next build",
     "start": "next start",
-    "build:worker": "cloudflare",
+    "build:worker": "opennextjs-cloudflare",
     "dev:worker": "wrangler dev --port 8773",
     "preview:worker": "pnpm build:worker && pnpm dev:worker"
   },
diff --git a/examples/vercel-blog-starter/tsconfig.json b/examples/vercel-blog-starter/tsconfig.json
index 7b2858930..811633116 100644
--- a/examples/vercel-blog-starter/tsconfig.json
+++ b/examples/vercel-blog-starter/tsconfig.json
@@ -22,5 +22,5 @@
     }
   },
   "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
-  "exclude": ["node_modules"]
+  "exclude": ["node_modules", "open-next.config.ts"]
 }
diff --git a/examples/vercel-blog-starter/wrangler.toml b/examples/vercel-blog-starter/wrangler.toml
index ceb8a923e..38643753b 100644
--- a/examples/vercel-blog-starter/wrangler.toml
+++ b/examples/vercel-blog-starter/wrangler.toml
@@ -1,9 +1,9 @@
 #:schema node_modules/wrangler/config-schema.json
 name = "vercel-blog-starter-on-workers"
-main = ".worker-next/index.mjs"
+main = ".open-next/worker.js"
 
 compatibility_date = "2024-09-23"
 compatibility_flags = ["nodejs_compat"]
 
 # Use the new Workers + Assets to host the static frontend files
-assets = { directory = ".worker-next/assets", binding = "ASSETS" }
+assets = { directory = ".open-next/assets", binding = "ASSETS" }
diff --git a/examples/vercel-commerce/open-next.config.ts b/examples/vercel-commerce/open-next.config.ts
new file mode 100644
index 000000000..e26c466e1
--- /dev/null
+++ b/examples/vercel-commerce/open-next.config.ts
@@ -0,0 +1,25 @@
+import type { OpenNextConfig } from '@opennextjs/aws/types/open-next';
+
+const config: OpenNextConfig = {
+  default: {
+    override: {
+      wrapper: 'cloudflare-node',
+      converter: 'edge',
+      // Unused implementation
+      incrementalCache: 'dummy',
+      tagCache: 'dummy',
+      queue: 'dummy'
+    }
+  },
+
+  middleware: {
+    external: true,
+    override: {
+      wrapper: 'cloudflare-edge',
+      converter: 'edge',
+      proxyExternalRequest: 'fetch'
+    }
+  }
+};
+
+export default config;
diff --git a/examples/vercel-commerce/package.json b/examples/vercel-commerce/package.json
index b11c9f36c..2832346eb 100644
--- a/examples/vercel-commerce/package.json
+++ b/examples/vercel-commerce/package.json
@@ -12,7 +12,7 @@
     "prettier": "prettier --write --ignore-unknown .",
     "prettier:check": "prettier --check --ignore-unknown .",
     "test": "pnpm prettier:check",
-    "build:worker": "cloudflare",
+    "build:worker": "opennextjs-cloudflare",
     "dev:worker": "wrangler dev --port 8772",
     "preview:worker": "pnpm build:worker && pnpm dev:worker"
   },
diff --git a/examples/vercel-commerce/tsconfig.json b/examples/vercel-commerce/tsconfig.json
index 5504152f4..ea2f6700b 100644
--- a/examples/vercel-commerce/tsconfig.json
+++ b/examples/vercel-commerce/tsconfig.json
@@ -24,5 +24,5 @@
     ]
   },
   "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
-  "exclude": ["node_modules"]
+  "exclude": ["node_modules", "open-next.config.ts"]
 }
diff --git a/examples/vercel-commerce/wrangler.toml b/examples/vercel-commerce/wrangler.toml
index 31c8d97d5..6fc49d563 100644
--- a/examples/vercel-commerce/wrangler.toml
+++ b/examples/vercel-commerce/wrangler.toml
@@ -1,9 +1,9 @@
 #:schema node_modules/wrangler/config-schema.json
 name = "vercel-commerce-on-workers"
-main = ".worker-next/index.mjs"
+main = ".open-next/worker.js"
 
-compatibility_date = "2024-08-29"
-compatibility_flags = ["nodejs_compat_v2"]
+compatibility_date = "2024-09-23"
+compatibility_flags = ["nodejs_compat"]
 
 # Use the new Workers + Assets to host the static frontend files
-assets = { directory = ".worker-next/assets", binding = "ASSETS" }
+assets = { directory = ".open-next/assets", binding = "ASSETS" }
diff --git a/packages/cloudflare/README.md b/packages/cloudflare/README.md
index 72351e373..c74250735 100644
--- a/packages/cloudflare/README.md
+++ b/packages/cloudflare/README.md
@@ -2,8 +2,119 @@
 
 Deploy Next.js apps to Cloudflare!
 
-[OpenNext for Cloudflare](https://opennext.js.org/cloudflare) is an adapter that enables the deployment of Next.js applications to Cloudflare's developer platform.
+[OpenNext for Cloudflare](https://opennext.js.org/cloudflare) is Cloudflare specific adapter that enables deployment of Next.js applications to Cloudflare.
 
 ## Get started
 
-Visit the [OpenNext docs](https://opennext.js.org/cloudflare/get-started) for instructions on starting a new project, or migrating an existing one.
+You can use [`create-next-app`](https://nextjs.org/docs/pages/api-reference/cli/create-next-app) to start a new application or take an existing Next.js application and deploy it to Cloudflare using the following few steps:
+
+## Configure your app
+
+- add the following `devDependencies` to the `package.json`:
+
+  ```bash
+  npm add -D wrangler@latest @opennextjs/cloudflare
+  # or
+  pnpm add -D wrangler@latest @opennextjs/cloudflare
+  # or
+  yarn add -D wrangler@latest @opennextjs/cloudflare
+  # or
+  bun add -D wrangler@latest @opennextjs/cloudflare
+  ```
+
+- add a `wrangler.toml` at the root of your project
+
+  ```toml
+  #:schema node_modules/wrangler/config-schema.json
+  name = "<your-app-name>"
+  main = ".open-next/worker.js"
+
+  compatibility_date = "2024-09-23"
+  compatibility_flags = ["nodejs_compat"]
+
+  # Use the new Workers + Assets to host the static frontend files
+  assets = { directory = ".open-next/assets", binding = "ASSETS" }
+  ```
+
+- add a `open-next.config.ts` at the root of your project:
+
+```ts
+import type { OpenNextConfig } from "open-next/types/open-next";
+
+const config: OpenNextConfig = {
+  default: {
+    override: {
+      wrapper: "cloudflare-node",
+      converter: "edge",
+      // Unused implementation
+      incrementalCache: "dummy",
+      tagCache: "dummy",
+      queue: "dummy",
+    },
+  },
+
+  middleware: {
+    external: true,
+    override: {
+      wrapper: "cloudflare-edge",
+      converter: "edge",
+      proxyExternalRequest: "fetch",
+    },
+  },
+};
+
+export default config;
+```
+
+## Known issues
+
+- `▲ [WARNING] Suspicious assignment to defined constant "process.env.NODE_ENV" [assign-to-define]` can safely be ignored
+- Maybe more, still experimental...
+
+## Local development
+
+- you can use the regular `next` CLI to start the Next.js dev server:
+
+## Local preview
+
+Run the following commands to preview the production build of your application locally:
+
+- build the app and adapt it for Cloudflare
+
+  ```bash
+  npx opennextjs-cloudflare
+  # or
+  pnpm opennextjs-cloudflare
+  # or
+  yarn opennextjs-cloudflare
+  # or
+  bun opennextjs-cloudflare
+  ```
+
+- Preview the app in Wrangler
+
+  ```bash
+  npx wrangler dev
+  # or
+  pnpm wrangler dev
+  # or
+  yarn wrangler dev
+  # or
+  bun wrangler dev
+  ```
+
+## Deploy your app
+
+Deploy your application to production with the following:
+
+- build the app and adapt it for Cloudflare
+
+  ```bash
+  npx opennextjs-cloudflare && npx wrangler deploy
+  # or
+  pnpm opennextjs-cloudflare && pnpm wrangler deploy
+  # or
+  yarn opennextjs-cloudflare && yarn wrangler deploy
+  # or
+  bun opennextjs-cloudflare && bun wrangler deploy
+  ```
diff --git a/packages/cloudflare/TODO.md b/packages/cloudflare/TODO.md
deleted file mode 100644
index f25e84f1e..000000000
--- a/packages/cloudflare/TODO.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# TODO
-
-- move the wrangler.toml to the templates
-
-DONE:
-
-- wrangler alias
-- figure out the assets
-- copy the template folders
-
-## Open next [example app](https://github.com/opennextjs/opennextjs-aws/tree/main/example)
-
-Changes:
-
-- App: Update package.json
-
-```text
-  "scripts": {
-    "dev": "next dev",
-    ...
-  },
-  "dependencies": {
-    "next": "^14.2.11",
-    "next-auth": "latest",
-    ...
-  },
-  "devDependencies": {
-    "wrangler": "^3.78.6"
-    ...
-  }
-```
-
-- Build the app `pnpm cloudflare`
-
-- Serve with `WRANGLER_BUILD_CONDITIONS="" WRANGLER_BUILD_PLATFORM="node" pnpm wrangler dev`
diff --git a/packages/cloudflare/env.d.ts b/packages/cloudflare/env.d.ts
index b5e1c844a..8303fb30c 100644
--- a/packages/cloudflare/env.d.ts
+++ b/packages/cloudflare/env.d.ts
@@ -1,12 +1,13 @@
 declare global {
   namespace NodeJS {
     interface ProcessEnv {
-      ASSETS: Fetcher;
       __NEXT_PRIVATE_STANDALONE_CONFIG?: string;
       SKIP_NEXT_APP_BUILD?: string;
       NEXT_PRIVATE_DEBUG_CACHE?: string;
-      __OPENNEXT_KV_BINDING_NAME: string;
-      [key: string]: string | Fetcher;
+      OPEN_NEXT_ORIGIN: string;
+      NODE_ENV?: string;
+      // Whether process.env has been populated (on first request).
+      __PROCESS_ENV_POPULATED?: string;
     }
   }
 }
diff --git a/packages/cloudflare/package.json b/packages/cloudflare/package.json
index 6c9483f0e..ac3ceed46 100644
--- a/packages/cloudflare/package.json
+++ b/packages/cloudflare/package.json
@@ -1,23 +1,31 @@
 {
   "name": "@opennextjs/cloudflare",
   "description": "Cloudflare builder for next apps",
-  "version": "0.2.1",
+  "version": "0.3.0",
+  "type": "module",
   "scripts": {
-    "build": "tsup",
-    "build:watch": "tsup --watch src",
+    "clean": "rimraf dist",
+    "build": "pnpm clean && tsc",
+    "build:watch": "tsc -w",
     "lint:check": "eslint",
     "lint:fix": "eslint --fix",
     "ts:check": "tsc --noEmit",
     "test": "vitest --run",
     "test:watch": "vitest"
   },
-  "bin": "dist/cli/index.mjs",
-  "main": "./dist/api/index.mjs",
-  "types": "./dist/api/index.d.mts",
+  "bin": {
+    "opennextjs-cloudflare": "dist/cli/index.js"
+  },
+  "main": "./dist/api/index.js",
+  "types": "./dist/api/index.d.ts",
   "exports": {
     ".": {
-      "import": "./dist/api/index.mjs",
-      "types": "./dist/api/index.d.mts"
+      "import": "./dist/api/index.js",
+      "types": "./dist/api/index.d.ts"
+    },
+    "./*": {
+      "import": "./dist/api/*.js",
+      "types": "./dist/api/*.d.ts"
     }
   },
   "files": [
@@ -30,6 +38,7 @@
     "directory": "packages/cloudflare"
   },
   "keywords": [
+    "opennextjs-cloudflare",
     "cloudflare",
     "workers",
     "next.js"
@@ -46,22 +55,26 @@
     "@types/node": "catalog:",
     "esbuild": "catalog:",
     "eslint": "catalog:",
-    "eslint-plugin-import": "^2.31.0",
-    "eslint-plugin-simple-import-sort": "^12.1.1",
+    "eslint-plugin-import": "catalog:",
+    "eslint-plugin-simple-import-sort": "catalog:",
     "eslint-plugin-unicorn": "catalog:",
     "glob": "catalog:",
     "globals": "catalog:",
     "next": "catalog:",
     "package-manager-detector": "catalog:",
-    "tsup": "catalog:",
     "typescript": "catalog:",
     "typescript-eslint": "catalog:",
-    "vitest": "catalog:"
+    "vitest": "catalog:",
+    "mock-fs": "catalog:",
+    "@types/mock-fs": "catalog:"
   },
   "dependencies": {
-    "ts-morph": "catalog:"
+    "@opennextjs/aws": "https://pkg.pr.new/@opennextjs/aws@684",
+    "ts-morph": "catalog:",
+    "@dotenvx/dotenvx": "catalog:"
   },
   "peerDependencies": {
+    "rimraf": "catalog:",
     "wrangler": "catalog:"
   }
 }
diff --git a/packages/cloudflare/src/api/get-cloudflare-context.ts b/packages/cloudflare/src/api/get-cloudflare-context.ts
index 50944afcf..9cbb4c91f 100644
--- a/packages/cloudflare/src/api/get-cloudflare-context.ts
+++ b/packages/cloudflare/src/api/get-cloudflare-context.ts
@@ -1,8 +1,8 @@
-import "server-only";
-
 declare global {
-  // eslint-disable-next-line @typescript-eslint/no-empty-object-type
-  interface CloudflareEnv {}
+  interface CloudflareEnv {
+    NEXT_CACHE_WORKERS_KV?: KVNamespace;
+    ASSETS?: Fetcher;
+  }
 }
 
 export type CloudflareContext<
diff --git a/packages/cloudflare/src/api/index.ts b/packages/cloudflare/src/api/index.ts
index 120e08a08..5442c415c 100644
--- a/packages/cloudflare/src/api/index.ts
+++ b/packages/cloudflare/src/api/index.ts
@@ -1 +1 @@
-export * from "./get-cloudflare-context";
+export * from "./get-cloudflare-context.js";
diff --git a/packages/cloudflare/src/api/kvCache.ts b/packages/cloudflare/src/api/kvCache.ts
new file mode 100644
index 000000000..6e780a9b1
--- /dev/null
+++ b/packages/cloudflare/src/api/kvCache.ts
@@ -0,0 +1,152 @@
+import type { KVNamespace } from "@cloudflare/workers-types";
+import type { CacheValue, IncrementalCache, WithLastModified } from "@opennextjs/aws/types/overrides";
+import { IgnorableError, RecoverableError } from "@opennextjs/aws/utils/error.js";
+
+import { getCloudflareContext } from "./get-cloudflare-context.js";
+
+export const CACHE_ASSET_DIR = "cnd-cgi/_next_cache";
+
+export const STATUS_DELETED = 1;
+
+/**
+ * Open Next cache based on cloudflare KV and Assets.
+ *
+ * Note: The class is instantiated outside of the request context.
+ * The cloudflare context and process.env are not initialzed yet
+ * when the constructor is called.
+ */
+class Cache implements IncrementalCache {
+  readonly name = "cloudflare-kv";
+  protected initialized = false;
+  protected kv: KVNamespace | undefined;
+  protected assets: Fetcher | undefined;
+
+  async get<IsFetch extends boolean = false>(
+    key: string,
+    isFetch?: IsFetch
+  ): Promise<WithLastModified<CacheValue<IsFetch>>> {
+    if (!this.initialized) {
+      await this.init();
+    }
+
+    if (!(this.kv || this.assets)) {
+      throw new IgnorableError(`No KVNamespace nor Fetcher`);
+    }
+
+    this.debug(`Get ${key}`);
+
+    try {
+      let entry: {
+        value?: CacheValue<IsFetch>;
+        lastModified?: number;
+        status?: number;
+      } | null = null;
+
+      if (this.kv) {
+        this.debug(`- From KV`);
+        const kvKey = this.getKVKey(key, isFetch);
+        entry = await this.kv.get(kvKey, "json");
+        if (entry?.status === STATUS_DELETED) {
+          return {};
+        }
+      }
+
+      if (!entry && this.assets) {
+        this.debug(`- From Assets`);
+        const url = this.getAssetUrl(key, isFetch);
+        const response = await this.assets.fetch(url);
+        if (response.ok) {
+          // TODO: consider populating KV with the asset value if faster.
+          // This could be optional as KV writes are $$.
+          // See https://github.com/opennextjs/opennextjs-cloudflare/pull/194#discussion_r1893166026
+          entry = {
+            value: await response.json(),
+            // __BUILD_TIMESTAMP_MS__ is injected by ESBuild.
+            lastModified: (globalThis as { __BUILD_TIMESTAMP_MS__?: number }).__BUILD_TIMESTAMP_MS__,
+          };
+        }
+      }
+      this.debug(entry ? `-> hit` : `-> miss`);
+      return { value: entry?.value, lastModified: entry?.lastModified };
+    } catch {
+      throw new RecoverableError(`Failed to get cache [${key}]`);
+    }
+  }
+
+  async set<IsFetch extends boolean = false>(
+    key: string,
+    value: CacheValue<IsFetch>,
+    isFetch?: IsFetch
+  ): Promise<void> {
+    if (!this.initialized) {
+      await this.init();
+    }
+    if (!this.kv) {
+      throw new IgnorableError(`No KVNamespace`);
+    }
+    this.debug(`Set ${key}`);
+    try {
+      const kvKey = this.getKVKey(key, isFetch);
+      // Note: We can not set a TTL as we might fallback to assets,
+      //       still removing old data (old BUILD_ID) could help avoiding
+      //       the cache growing too big.
+      await this.kv.put(
+        kvKey,
+        JSON.stringify({
+          value,
+          // Note: `Date.now()` returns the time of the last IO rather than the actual time.
+          //       See https://developers.cloudflare.com/workers/reference/security-model/
+          lastModified: Date.now(),
+        })
+      );
+    } catch {
+      throw new RecoverableError(`Failed to set cache [${key}]`);
+    }
+  }
+
+  async delete(key: string): Promise<void> {
+    if (!this.initialized) {
+      await this.init();
+    }
+    if (!this.kv) {
+      throw new IgnorableError(`No KVNamespace`);
+    }
+    this.debug(`Delete ${key}`);
+    try {
+      const kvKey = this.getKVKey(key, /* isFetch= */ false);
+      // Do not delete the key as we would then fallback to the assets.
+      await this.kv.put(kvKey, JSON.stringify({ status: STATUS_DELETED }));
+    } catch {
+      throw new RecoverableError(`Failed to delete cache [${key}]`);
+    }
+  }
+
+  protected getKVKey(key: string, isFetch?: boolean): string {
+    return `${this.getBuildId()}/${key}.${isFetch ? "fetch" : "cache"}`;
+  }
+
+  protected getAssetUrl(key: string, isFetch?: boolean): string {
+    return isFetch
+      ? `http://assets.local/${CACHE_ASSET_DIR}/__fetch/${this.getBuildId()}/${key}`
+      : `http://assets.local/${CACHE_ASSET_DIR}/${this.getBuildId()}/${key}.cache`;
+  }
+
+  protected debug(...args: unknown[]) {
+    if (process.env.NEXT_PRIVATE_DEBUG_CACHE) {
+      console.log(`[Cache ${this.name}] `, ...args);
+    }
+  }
+
+  protected getBuildId() {
+    return process.env.NEXT_BUILD_ID ?? "no-build-id";
+  }
+
+  protected async init() {
+    const env = (await getCloudflareContext()).env;
+    this.kv = env.NEXT_CACHE_WORKERS_KV;
+    this.assets = env.ASSETS;
+    this.initialized = true;
+  }
+}
+
+export default new Cache();
diff --git a/packages/cloudflare/src/cli/args.ts b/packages/cloudflare/src/cli/args.ts
index 8a5a996e1..3dd226b9d 100644
--- a/packages/cloudflare/src/cli/args.ts
+++ b/packages/cloudflare/src/cli/args.ts
@@ -7,9 +7,7 @@ export function getArgs(): {
   outputDir?: string;
   minify: boolean;
 } {
-  const {
-    values: { skipBuild, output, noMinify },
-  } = parseArgs({
+  const { skipBuild, output, noMinify } = parseArgs({
     options: {
       skipBuild: {
         type: "boolean",
@@ -26,7 +24,7 @@ export function getArgs(): {
       },
     },
     allowPositionals: false,
-  });
+  }).values;
 
   const outputDir = output ? resolve(output) : undefined;
 
diff --git a/packages/cloudflare/src/cli/build/build-next-app.ts b/packages/cloudflare/src/cli/build/build-next-app.ts
deleted file mode 100644
index 2e2c50f28..000000000
--- a/packages/cloudflare/src/cli/build/build-next-app.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { execSync } from "node:child_process";
-
-import { type AgentName as PackageManager, detect } from "package-manager-detector";
-
-/**
- * Builds the Next.js app in the standard Next.js cli way (this outputs a `.next` directory)
- *
- * Note: this function simply builds the `.next` directory it does not perform any extra building operation
- *
- * @param nextAppDir the directory of the app to build
- */
-export async function buildNextjsApp(nextAppDir: string): Promise<void> {
-  const pm = await detect();
-
-  if (!pm) {
-    throw new Error("Fatal Error: package manager detection failed, aborting");
-  }
-
-  runNextBuildCommand(pm.name, nextAppDir);
-}
-
-// equivalent to: https://github.com/opennextjs/opennextjs-aws/blob/f61b0e94/packages/open-next/src/build.ts#L175-L186
-function runNextBuildCommand(packager: PackageManager, nextAppDir: string) {
-  const command = `${packager === "npm" ? "npx" : packager} next build`;
-  execSync(command, {
-    stdio: "inherit",
-    cwd: nextAppDir,
-    env: {
-      ...process.env,
-      // equivalent to: https://github.com/opennextjs/opennextjs-aws/blob/f61b0e9/packages/open-next/src/build.ts#L168-L173
-      // Equivalent to setting `output: "standalone"` in next.config.js
-      NEXT_PRIVATE_STANDALONE: "true",
-    },
-  });
-}
diff --git a/packages/cloudflare/src/cli/build/build-worker.ts b/packages/cloudflare/src/cli/build/build-worker.ts
deleted file mode 100644
index 6c7fa8d14..000000000
--- a/packages/cloudflare/src/cli/build/build-worker.ts
+++ /dev/null
@@ -1,184 +0,0 @@
-import { existsSync, readFileSync } from "node:fs";
-import { cp, readFile, writeFile } from "node:fs/promises";
-import { dirname, join } from "node:path";
-import { fileURLToPath } from "node:url";
-
-import { build, Plugin } from "esbuild";
-
-import { Config } from "../config";
-import { copyPackageCliFiles } from "./patches/investigated/copy-package-cli-files";
-import { patchCache } from "./patches/investigated/patch-cache";
-import { patchRequire } from "./patches/investigated/patch-require";
-import { updateWebpackChunksFile } from "./patches/investigated/update-webpack-chunks-file";
-import { inlineEvalManifest } from "./patches/to-investigate/inline-eval-manifest";
-import { inlineMiddlewareManifestRequire } from "./patches/to-investigate/inline-middleware-manifest-require";
-import { inlineNextRequire } from "./patches/to-investigate/inline-next-require";
-import { patchExceptionBubbling } from "./patches/to-investigate/patch-exception-bubbling";
-import { patchFindDir } from "./patches/to-investigate/patch-find-dir";
-import { patchReadFile } from "./patches/to-investigate/patch-read-file";
-import { patchWranglerDeps } from "./patches/to-investigate/wrangler-deps";
-import { copyPrerenderedRoutes } from "./utils";
-
-/** The dist directory of the Cloudflare adapter package */
-const packageDistDir = join(dirname(fileURLToPath(import.meta.url)), "..");
-
-/**
- * Using the Next.js build output in the `.next` directory builds a workerd compatible output
- *
- * @param outputDir the directory where to save the output
- * @param config
- */
-export async function buildWorker(config: Config): Promise<void> {
-  console.log(`\x1b[35m⚙️ Copying files...\n\x1b[0m`);
-
-  // Copy over client-side generated files
-  await cp(join(config.paths.source.dotNext, "static"), join(config.paths.output.assets, "_next", "static"), {
-    recursive: true,
-  });
-
-  // Copy over any static files (e.g. images) from the source project
-  const publicDir = join(config.paths.source.root, "public");
-  if (existsSync(publicDir)) {
-    await cp(publicDir, config.paths.output.assets, { recursive: true });
-  }
-
-  // Copy over prerendered assets (e.g. SSG routes)
-  copyPrerenderedRoutes(config);
-
-  copyPackageCliFiles(packageDistDir, config);
-
-  const workerEntrypoint = join(config.paths.internal.templates, "worker.ts");
-  const workerOutputFile = join(config.paths.output.root, "index.mjs");
-
-  const nextConfigStr =
-    readFileSync(join(config.paths.output.standaloneApp, "/server.js"), "utf8")?.match(
-      /const nextConfig = ({.+?})\n/
-    )?.[1] ?? {};
-
-  console.log(`\x1b[35m⚙️ Bundling the worker file...\n\x1b[0m`);
-
-  patchWranglerDeps(config);
-  updateWebpackChunksFile(config);
-
-  await build({
-    entryPoints: [workerEntrypoint],
-    bundle: true,
-    outfile: workerOutputFile,
-    format: "esm",
-    target: "esnext",
-    minify: false,
-    plugins: [createFixRequiresESBuildPlugin(config)],
-    alias: {
-      // Note: we apply an empty shim to next/dist/compiled/ws because it generates two `eval`s:
-      //   eval("require")("bufferutil");
-      //   eval("require")("utf-8-validate");
-      "next/dist/compiled/ws": join(config.paths.internal.templates, "shims", "empty.ts"),
-      // Note: we apply an empty shim to next/dist/compiled/edge-runtime since (amongst others) it generated the following `eval`:
-      //   eval(getModuleCode)(module, module.exports, throwingRequire, params.context, ...Object.values(params.scopedContext));
-      //   which comes from https://github.com/vercel/edge-runtime/blob/6e96b55f/packages/primitives/src/primitives/load.js#L57-L63
-      // QUESTION: Why did I encountered this but mhart didn't?
-      "next/dist/compiled/edge-runtime": join(config.paths.internal.templates, "shims", "empty.ts"),
-      // `@next/env` is a library Next.js uses for loading dotenv files, for obvious reasons we need to stub it here
-      // source: https://github.com/vercel/next.js/tree/0ac10d79720/packages/next-env
-      "@next/env": join(config.paths.internal.templates, "shims", "env.ts"),
-    },
-    define: {
-      // config file used by Next.js, see: https://github.com/vercel/next.js/blob/68a7128/packages/next/src/build/utils.ts#L2137-L2139
-      "process.env.__NEXT_PRIVATE_STANDALONE_CONFIG": JSON.stringify(nextConfigStr),
-      // Next.js tried to access __dirname so we need to define it
-      __dirname: '""',
-      // Note: we need the __non_webpack_require__ variable declared as it is used by next-server:
-      // https://github.com/vercel/next.js/blob/be0c3283/packages/next/src/server/next-server.ts#L116-L119
-      __non_webpack_require__: "require",
-      // Ask mhart if he can explain why the `define`s below are necessary
-      "process.env.NEXT_RUNTIME": '"nodejs"',
-      "process.env.NODE_ENV": '"production"',
-      "process.env.NEXT_MINIMAL": "true",
-    },
-    // We need to set platform to node so that esbuild doesn't complain about the node imports
-    platform: "node",
-    banner: {
-      js: `
-				${
-          /*
-					`__dirname` is used by unbundled js files (which don't inherit the `__dirname` present in the `define` field)
-					so we also need to set it on the global scope
-					Note: this was hit in the `next/dist/compiled/@opentelemetry/api` module
-				*/ ""
-        }
-				globalThis.__dirname ??= "";
-
-// Do not crash on cache not supported
-// https://github.com/cloudflare/workerd/pull/2434
-// compatibility flag "cache_option_enabled" -> does not support "force-cache"
-const curFetch = globalThis.fetch;
-globalThis.fetch = (input, init) => {
-  if (init) {
-    delete init.cache;
-  }
-  return curFetch(input, init);
-};
-import { Readable } from 'node:stream';
-fetch = globalThis.fetch;
-const CustomRequest = class extends globalThis.Request {
-  constructor(input, init) {
-    if (init) {
-      delete init.cache;
-      if (init.body?.__node_stream__ === true) {
-        // https://github.com/cloudflare/workerd/issues/2746
-        init.body = Readable.toWeb(init.body);
-      }
-    }
-    super(input, init);
-  }
-};
-globalThis.Request = CustomRequest;
-Request = globalThis.Request;
-`,
-    },
-  });
-
-  await updateWorkerBundledCode(workerOutputFile, config);
-
-  console.log(`\x1b[35mWorker saved in \`${workerOutputFile}\` 🚀\n\x1b[0m`);
-}
-
-/**
- * This function applies string replacements on the bundled worker code necessary to get it to run in workerd
- *
- * Needless to say all the logic in this function is something we should avoid as much as possible!
- *
- * @param workerOutputFile
- * @param config
- */
-async function updateWorkerBundledCode(workerOutputFile: string, config: Config): Promise<void> {
-  const originalCode = await readFile(workerOutputFile, "utf8");
-
-  let patchedCode = originalCode;
-
-  patchedCode = patchRequire(patchedCode);
-  patchedCode = patchReadFile(patchedCode, config);
-  patchedCode = inlineNextRequire(patchedCode, config);
-  patchedCode = patchFindDir(patchedCode, config);
-  patchedCode = inlineEvalManifest(patchedCode, config);
-  patchedCode = await patchCache(patchedCode, config);
-  patchedCode = inlineMiddlewareManifestRequire(patchedCode, config);
-  patchedCode = patchExceptionBubbling(patchedCode);
-
-  await writeFile(workerOutputFile, patchedCode);
-}
-
-function createFixRequiresESBuildPlugin(config: Config): Plugin {
-  return {
-    name: "replaceRelative",
-    setup(build) {
-      // Note: we (empty) shim require-hook modules as they generate problematic code that uses requires
-      build.onResolve({ filter: /^\.\/require-hook$/ }, () => ({
-        path: join(config.paths.internal.templates, "shims", "empty.ts"),
-      }));
-      build.onResolve({ filter: /\.\/lib\/node-fs-methods$/ }, () => ({
-        path: join(config.paths.internal.templates, "shims", "empty.ts"),
-      }));
-    },
-  };
-}
diff --git a/packages/cloudflare/src/cli/build/bundle-server.ts b/packages/cloudflare/src/cli/build/bundle-server.ts
new file mode 100644
index 000000000..0cf3a4137
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/bundle-server.ts
@@ -0,0 +1,223 @@
+import fs from "node:fs";
+import { readFile, writeFile } from "node:fs/promises";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+
+import type { BuildOptions } from "@opennextjs/aws/build/helper.js";
+import { build, Plugin } from "esbuild";
+
+import { Config } from "../config.js";
+import * as patches from "./patches/index.js";
+
+/** The dist directory of the Cloudflare adapter package */
+const packageDistDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "../..");
+
+/**
+ * Bundle the Open Next server.
+ */
+export async function bundleServer(config: Config, openNextOptions: BuildOptions): Promise<void> {
+  patches.copyPackageCliFiles(packageDistDir, config, openNextOptions);
+
+  const nextConfigStr =
+    fs
+      .readFileSync(path.join(config.paths.output.standaloneApp, "server.js"), "utf8")
+      ?.match(/const nextConfig = ({.+?})\n/)?.[1] ?? {};
+
+  console.log(`\x1b[35m⚙️ Bundling the OpenNext server...\n\x1b[0m`);
+
+  patches.patchWranglerDeps(config);
+  patches.updateWebpackChunksFile(config);
+
+  const { appBuildOutputPath, appPath, outputDir, monorepoRoot } = openNextOptions;
+  const outputPath = path.join(outputDir, "server-functions", "default");
+  const packagePath = path.relative(monorepoRoot, appBuildOutputPath);
+  const openNextServer = path.join(outputPath, packagePath, `index.mjs`);
+  const openNextServerBundle = path.join(outputPath, packagePath, `handler.mjs`);
+
+  await build({
+    entryPoints: [openNextServer],
+    bundle: true,
+    outfile: openNextServerBundle,
+    format: "esm",
+    target: "esnext",
+    minify: false,
+    plugins: [createFixRequiresESBuildPlugin(config)],
+    external: ["./middleware/handler.mjs"],
+    alias: {
+      // Note: we apply an empty shim to next/dist/compiled/ws because it generates two `eval`s:
+      //   eval("require")("bufferutil");
+      //   eval("require")("utf-8-validate");
+      "next/dist/compiled/ws": path.join(config.paths.internal.templates, "shims", "empty.js"),
+      // Note: we apply an empty shim to next/dist/compiled/edge-runtime since (amongst others) it generated the following `eval`:
+      //   eval(getModuleCode)(module, module.exports, throwingRequire, params.context, ...Object.values(params.scopedContext));
+      //   which comes from https://github.com/vercel/edge-runtime/blob/6e96b55f/packages/primitives/src/primitives/load.js#L57-L63
+      // QUESTION: Why did I encountered this but mhart didn't?
+      "next/dist/compiled/edge-runtime": path.join(config.paths.internal.templates, "shims", "empty.js"),
+      // `@next/env` is a library Next.js uses for loading dotenv files, for obvious reasons we need to stub it here
+      // source: https://github.com/vercel/next.js/tree/0ac10d79720/packages/next-env
+      "@next/env": path.join(config.paths.internal.templates, "shims", "env.js"),
+    },
+    define: {
+      // config file used by Next.js, see: https://github.com/vercel/next.js/blob/68a7128/packages/next/src/build/utils.ts#L2137-L2139
+      "process.env.__NEXT_PRIVATE_STANDALONE_CONFIG": JSON.stringify(nextConfigStr),
+      // Next.js tried to access __dirname so we need to define it
+      __dirname: '""',
+      // Note: we need the __non_webpack_require__ variable declared as it is used by next-server:
+      // https://github.com/vercel/next.js/blob/be0c3283/packages/next/src/server/next-server.ts#L116-L119
+      __non_webpack_require__: "require",
+      // Ask mhart if he can explain why the `define`s below are necessary
+      "process.env.NEXT_RUNTIME": '"nodejs"',
+      "process.env.NODE_ENV": '"production"',
+      "process.env.NEXT_MINIMAL": "true",
+    },
+    // We need to set platform to node so that esbuild doesn't complain about the node imports
+    platform: "node",
+    banner: {
+      js: `
+// __dirname is used by unbundled js files (which don't inherit the __dirname present in the define field)
+// so we also need to set it on the global scope
+// Note: this was hit in the next/dist/compiled/@opentelemetry/api module
+globalThis.__dirname ??= "";
+
+// Do not crash on cache not supported
+// https://github.com/cloudflare/workerd/pull/2434
+// compatibility flag "cache_option_enabled" -> does not support "force-cache"
+const curFetch = globalThis.fetch;
+globalThis.fetch = (input, init) => {
+  if (init) {
+    delete init.cache;
+  }
+  return curFetch(input, init);
+};
+import __cf_stream from 'node:stream';
+fetch = globalThis.fetch;
+const CustomRequest = class extends globalThis.Request {
+  constructor(input, init) {
+    if (init) {
+      init = {
+        ...init,
+        cache: undefined,
+        // https://github.com/cloudflare/workerd/issues/2746
+        // https://github.com/cloudflare/workerd/issues/3245
+        body: init.body instanceof __cf_stream.Readable ? ReadableStream.from(init.body) : init.body,
+      };
+    }
+    super(input, init);
+  }
+};
+globalThis.Request = CustomRequest;
+Request = globalThis.Request;
+// Makes the edge converter returns either a Response or a Request.
+globalThis.__dangerous_ON_edge_converter_returns_request = true;
+globalThis.__BUILD_TIMESTAMP_MS__ = ${Date.now()};
+`,
+    },
+  });
+
+  await updateWorkerBundledCode(openNextServerBundle, config, openNextOptions);
+
+  const isMonorepo = monorepoRoot !== appPath;
+  if (isMonorepo) {
+    const packagePosixPath = packagePath.split(path.sep).join(path.posix.sep);
+    fs.writeFileSync(
+      path.join(outputPath, "handler.mjs"),
+      `export * from "./${packagePosixPath}/handler.mjs";`
+    );
+  }
+
+  console.log(`\x1b[35mWorker saved in \`${openNextServerBundle}\` 🚀\n\x1b[0m`);
+}
+
+/**
+ * This function applies string replacements on the bundled worker code necessary to get it to run in workerd
+ *
+ * Needless to say all the logic in this function is something we should avoid as much as possible!
+ *
+ * @param workerOutputFile
+ * @param config
+ */
+async function updateWorkerBundledCode(
+  workerOutputFile: string,
+  config: Config,
+  openNextOptions: BuildOptions
+): Promise<void> {
+  const code = await readFile(workerOutputFile, "utf8");
+
+  const patchedCode = await patchCodeWithValidations(code, [
+    ["require", patches.patchRequire],
+    ["`buildId` function", (code) => patches.patchBuildId(code, config)],
+    ["`loadManifest` function", (code) => patches.patchLoadManifest(code, config)],
+    ["next's require", (code) => patches.inlineNextRequire(code, config)],
+    ["`findDir` function", (code) => patches.patchFindDir(code, config)],
+    ["`evalManifest` function", (code) => patches.inlineEvalManifest(code, config)],
+    ["cacheHandler", (code) => patches.patchCache(code, openNextOptions)],
+    [
+      "'require(this.middlewareManifestPath)'",
+      (code) => patches.inlineMiddlewareManifestRequire(code, config),
+    ],
+    ["exception bubbling", patches.patchExceptionBubbling],
+    ["`loadInstrumentationModule` function", patches.patchLoadInstrumentationModule],
+    [
+      "`patchAsyncStorage` call",
+      (code) =>
+        code
+          // TODO: implement for cf (possibly in @opennextjs/aws)
+          .replace("patchAsyncStorage();", "//patchAsyncStorage();"),
+    ],
+    [
+      '`eval("require")` calls',
+      (code) => code.replaceAll('eval("require")', "require"),
+      { isOptional: true },
+    ],
+    [
+      "`require.resolve` call",
+      // workers do not support dynamic require nor require.resolve
+      (code) => code.replace('require.resolve("./cache.cjs")', '"unused"'),
+    ],
+  ]);
+
+  await writeFile(workerOutputFile, patchedCode);
+}
+
+function createFixRequiresESBuildPlugin(config: Config): Plugin {
+  return {
+    name: "replaceRelative",
+    setup(build) {
+      // Note: we (empty) shim require-hook modules as they generate problematic code that uses requires
+      build.onResolve({ filter: /^\.\/require-hook$/ }, () => ({
+        path: path.join(config.paths.internal.templates, "shims", "empty.js"),
+      }));
+    },
+  };
+}
+
+/**
+ * Applies multiple code patches in order to a given piece of code, at each step it validates that the code
+ * has actually been patched/changed, if not an error is thrown
+ *
+ * @param code the code to apply the patches to
+ * @param patches array of tuples, containing a string indicating the target of the patching (for logging) and
+ *                a patching function that takes a string (pre-patch code) and returns a string (post-patch code)
+ * @returns the patched code
+ */
+async function patchCodeWithValidations(
+  code: string,
+  patches: [string, (code: string) => string | Promise<string>, opts?: { isOptional?: boolean }][]
+): Promise<string> {
+  console.log(`Applying code patches:`);
+  let patchedCode = code;
+
+  for (const [target, patchFunction, opts] of patches) {
+    console.log(` - patching ${target}`);
+
+    const prePatchCode = patchedCode;
+    patchedCode = await patchFunction(patchedCode);
+
+    if (!opts?.isOptional && prePatchCode === patchedCode) {
+      throw new Error(`Failed to patch ${target}`);
+    }
+  }
+
+  console.log(`All ${patches.length} patches applied\n`);
+  return patchedCode;
+}
diff --git a/packages/cloudflare/src/cli/build/index.ts b/packages/cloudflare/src/cli/build/index.ts
index 87b84cda4..3530221c6 100644
--- a/packages/cloudflare/src/cli/build/index.ts
+++ b/packages/cloudflare/src/cli/build/index.ts
@@ -1,11 +1,23 @@
 import { cpSync } from "node:fs";
-import { rm } from "node:fs/promises";
-import { join } from "node:path";
+import { createRequire } from "node:module";
+import { dirname, join } from "node:path";
 
-import type { ProjectOptions } from "../config";
-import { containsDotNextDir, getConfig } from "../config";
-import { buildNextjsApp } from "./build-next-app";
-import { buildWorker } from "./build-worker";
+import { buildNextjsApp, setStandaloneBuildMode } from "@opennextjs/aws/build/buildNextApp.js";
+import { compileCache } from "@opennextjs/aws/build/compileCache.js";
+import { compileOpenNextConfig } from "@opennextjs/aws/build/compileConfig.js";
+import { createCacheAssets, createStaticAssets } from "@opennextjs/aws/build/createAssets.js";
+import { createMiddleware } from "@opennextjs/aws/build/createMiddleware.js";
+import * as buildHelper from "@opennextjs/aws/build/helper.js";
+import { printHeader, showWarningOnWindows } from "@opennextjs/aws/build/utils.js";
+import logger from "@opennextjs/aws/logger.js";
+import type { OpenNextConfig } from "@opennextjs/aws/types/open-next.js";
+
+import type { ProjectOptions } from "../config.js";
+import { containsDotNextDir, getConfig } from "../config.js";
+import { bundleServer } from "./bundle-server.js";
+import { compileEnvFiles } from "./open-next/compile-env-files.js";
+import { copyCacheAssets } from "./open-next/copyCacheAssets.js";
+import { createServerBundle } from "./open-next/createServerBundle.js";
 
 /**
  * Builds the application in a format that can be passed to workerd
@@ -15,26 +27,125 @@ import { buildWorker } from "./build-worker";
  * @param projectOpts The options for the project
  */
 export async function build(projectOpts: ProjectOptions): Promise<void> {
-  if (!projectOpts.skipNextBuild) {
+  printHeader("Cloudflare build");
+
+  showWarningOnWindows();
+
+  const baseDir = projectOpts.sourceDir;
+  const require = createRequire(import.meta.url);
+  const openNextDistDir = dirname(require.resolve("@opennextjs/aws/index.js"));
+
+  const { config, buildDir } = await compileOpenNextConfig(baseDir);
+
+  ensureCloudflareConfig(config);
+
+  // Initialize options
+  const options = buildHelper.normalizeOptions(config, openNextDistDir, buildDir);
+  logger.setLevel(options.debug ? "debug" : "info");
+
+  // Do not minify the code so that we can apply string replacement patch.
+  // Note that wrangler will still minify the bundle.
+  options.minify = false;
+
+  // Pre-build validation
+  buildHelper.checkRunningInsideNextjsApp(options);
+  logger.info(`App directory: ${options.appPath}`);
+  buildHelper.printNextjsVersion(options);
+  buildHelper.printOpenNextVersion(options);
+
+  if (projectOpts.skipNextBuild) {
+    logger.warn("Skipping Next.js build");
+  } else {
     // Build the next app
-    await buildNextjsApp(projectOpts.sourceDir);
+    printHeader("Building Next.js app");
+    setStandaloneBuildMode(options);
+    buildNextjsApp(options);
   }
 
   if (!containsDotNextDir(projectOpts.sourceDir)) {
     throw new Error(`.next folder not found in ${projectOpts.sourceDir}`);
   }
 
-  // Clean the output directory
-  await cleanDirectory(projectOpts.outputDir);
+  // Generate deployable bundle
+  printHeader("Generating bundle");
+  buildHelper.initOutputDir(options);
+
+  // Compile cache.ts
+  compileCache(options);
+
+  // Compile .env files
+  compileEnvFiles(options);
+
+  // Compile middleware
+  await createMiddleware(options, { forceOnlyBuildOnce: true });
+
+  createStaticAssets(options);
 
+  if (config.dangerous?.disableIncrementalCache !== true) {
+    createCacheAssets(options);
+    copyCacheAssets(options);
+  }
+
+  await createServerBundle(options);
+
+  // TODO: drop this copy.
   // Copy the .next directory to the output directory so it can be mutated.
   cpSync(join(projectOpts.sourceDir, ".next"), join(projectOpts.outputDir, ".next"), { recursive: true });
 
-  const config = getConfig(projectOpts);
+  const projConfig = getConfig(projectOpts);
 
-  await buildWorker(config);
+  // TODO: rely on options only.
+  await bundleServer(projConfig, options);
+
+  logger.info("OpenNext build complete.");
 }
 
-async function cleanDirectory(path: string): Promise<void> {
-  return await rm(path, { recursive: true, force: true });
+/**
+ * Ensures open next is configured for cloudflare.
+ *
+ * @param config OpenNext configuration.
+ */
+function ensureCloudflareConfig(config: OpenNextConfig) {
+  const requirements = {
+    dftUseCloudflareWrapper: config.default?.override?.wrapper === "cloudflare-node",
+    dftUseEdgeConverter: config.default?.override?.converter === "edge",
+    dftMaybeUseCache:
+      config.default?.override?.incrementalCache === "dummy" ||
+      typeof config.default?.override?.incrementalCache === "function",
+    dftUseDummyTagCacheAndQueue:
+      config.default?.override?.tagCache === "dummy" && config.default?.override?.queue === "dummy",
+    disableCacheInterception: config.dangerous?.enableCacheInterception !== true,
+    mwIsMiddlewareExternal: config.middleware?.external == true,
+    mwUseCloudflareWrapper: config.middleware?.override?.wrapper === "cloudflare-edge",
+    mwUseEdgeConverter: config.middleware?.override?.converter === "edge",
+    mwUseFetchProxy: config.middleware?.override?.proxyExternalRequest === "fetch",
+  };
+
+  if (Object.values(requirements).some((satisfied) => !satisfied)) {
+    throw new Error(`open-next.config.ts should contain:
+{
+  default: {
+    override: {
+      wrapper: "cloudflare-node",
+      converter: "edge",
+      incrementalCache: "dummy" | function,
+      tagCache: "dummy",
+      queue: "dummy",
+    },
+  },
+
+  middleware: {
+    external: true,
+    override: {
+      wrapper: "cloudflare-edge",
+      converter: "edge",
+      proxyExternalRequest: "fetch",
+    },
+  },
+
+  "dangerous": {
+    "enableCacheInterception": false
+  }
+}`);
+  }
 }
diff --git a/packages/cloudflare/src/cli/build/open-next/compile-env-files.ts b/packages/cloudflare/src/cli/build/open-next/compile-env-files.ts
new file mode 100644
index 000000000..6d8a678a0
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/open-next/compile-env-files.ts
@@ -0,0 +1,18 @@
+import fs from "node:fs";
+import path from "node:path";
+
+import { BuildOptions } from "@opennextjs/aws/build/helper.js";
+
+import { extractProjectEnvVars } from "../utils/index.js";
+
+/**
+ * Compiles the values extracted from the project's env files to the output directory for use in the worker.
+ */
+export function compileEnvFiles(options: BuildOptions) {
+  ["production", "development", "test"].forEach((mode) =>
+    fs.appendFileSync(
+      path.join(options.outputDir, `.env.mjs`),
+      `export const ${mode} = ${JSON.stringify(extractProjectEnvVars(mode, options))};\n`
+    )
+  );
+}
diff --git a/packages/cloudflare/src/cli/build/open-next/copyCacheAssets.ts b/packages/cloudflare/src/cli/build/open-next/copyCacheAssets.ts
new file mode 100644
index 000000000..50b752c1e
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/open-next/copyCacheAssets.ts
@@ -0,0 +1,14 @@
+import { cpSync, mkdirSync } from "node:fs";
+import { join } from "node:path";
+
+import * as buildHelper from "@opennextjs/aws/build/helper.js";
+
+import { CACHE_ASSET_DIR } from "../../../api/kvCache.js";
+
+export function copyCacheAssets(options: buildHelper.BuildOptions) {
+  const { outputDir } = options;
+  const srcPath = join(outputDir, "cache");
+  const dstPath = join(outputDir, "assets", CACHE_ASSET_DIR);
+  mkdirSync(dstPath, { recursive: true });
+  cpSync(srcPath, dstPath, { recursive: true });
+}
diff --git a/packages/cloudflare/src/cli/build/open-next/createServerBundle.ts b/packages/cloudflare/src/cli/build/open-next/createServerBundle.ts
new file mode 100644
index 000000000..3aaec1ff6
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/open-next/createServerBundle.ts
@@ -0,0 +1,290 @@
+// Copy-Edit of @opennextjs/aws packages/open-next/src/build/createServerBundle.ts
+// Adapted for cloudflare workers
+
+import fs from "node:fs";
+import path from "node:path";
+
+import { bundleNextServer } from "@opennextjs/aws/build/bundleNextServer.js";
+import { compileCache } from "@opennextjs/aws/build/compileCache.js";
+import { copyTracedFiles } from "@opennextjs/aws/build/copyTracedFiles.js";
+import { generateEdgeBundle } from "@opennextjs/aws/build/edge/createEdgeBundle.js";
+import * as buildHelper from "@opennextjs/aws/build/helper.js";
+import { installDependencies } from "@opennextjs/aws/build/installDeps.js";
+import logger from "@opennextjs/aws/logger.js";
+import { minifyAll } from "@opennextjs/aws/minimize-js.js";
+import { openNextEdgePlugins } from "@opennextjs/aws/plugins/edge.js";
+import { openNextReplacementPlugin } from "@opennextjs/aws/plugins/replacement.js";
+import { openNextResolvePlugin } from "@opennextjs/aws/plugins/resolve.js";
+import type { FunctionOptions, SplittedFunctionOptions } from "@opennextjs/aws/types/open-next.js";
+
+export async function createServerBundle(options: buildHelper.BuildOptions) {
+  const { config } = options;
+  const foundRoutes = new Set<string>();
+  // Get all functions to build
+  const defaultFn = config.default;
+  const functions = Object.entries(config.functions ?? {});
+
+  // Recompile cache.ts as ESM if any function is using Deno runtime
+  if (defaultFn.runtime === "deno" || functions.some(([, fn]) => fn.runtime === "deno")) {
+    compileCache(options, "esm");
+  }
+
+  const promises = functions.map(async ([name, fnOptions]) => {
+    const routes = fnOptions.routes;
+    routes.forEach((route) => foundRoutes.add(route));
+    if (fnOptions.runtime === "edge") {
+      await generateEdgeBundle(name, options, fnOptions);
+    } else {
+      await generateBundle(name, options, fnOptions);
+    }
+  });
+
+  //TODO: throw an error if not all edge runtime routes has been bundled in a separate function
+
+  // We build every other function than default before so we know which route there is left
+  await Promise.all(promises);
+
+  const remainingRoutes = new Set<string>();
+
+  const { appBuildOutputPath, monorepoRoot } = options;
+
+  const packagePath = path.relative(monorepoRoot, appBuildOutputPath);
+
+  // Find remaining routes
+  const serverPath = path.join(appBuildOutputPath, ".next", "standalone", packagePath, ".next", "server");
+
+  // Find app dir routes
+  if (fs.existsSync(path.join(serverPath, "app"))) {
+    const appPath = path.join(serverPath, "app");
+    buildHelper.traverseFiles(
+      appPath,
+      ({ relativePath }) => relativePath.endsWith("page.js") || relativePath.endsWith("route.js"),
+      ({ relativePath }) => {
+        const route = `app/${relativePath.replace(/\.js$/, "")}`;
+        if (!foundRoutes.has(route)) {
+          remainingRoutes.add(route);
+        }
+      }
+    );
+  }
+
+  // Find pages dir routes
+  if (fs.existsSync(path.join(serverPath, "pages"))) {
+    const pagePath = path.join(serverPath, "pages");
+    buildHelper.traverseFiles(
+      pagePath,
+      ({ relativePath }) => relativePath.endsWith(".js"),
+      ({ relativePath }) => {
+        const route = `pages/${relativePath.replace(/\.js$/, "")}`;
+        if (!foundRoutes.has(route)) {
+          remainingRoutes.add(route);
+        }
+      }
+    );
+  }
+
+  // Generate default function
+  await generateBundle("default", options, {
+    ...defaultFn,
+    // @ts-expect-error - Those string are RouteTemplate
+    routes: Array.from(remainingRoutes),
+    patterns: ["*"],
+  });
+}
+
+async function generateBundle(
+  name: string,
+  options: buildHelper.BuildOptions,
+  fnOptions: SplittedFunctionOptions
+) {
+  const { appPath, appBuildOutputPath, config, outputDir, monorepoRoot } = options;
+  logger.info(`Building server function: ${name}...`);
+
+  // Create output folder
+  const outputPath = path.join(outputDir, "server-functions", name);
+
+  // Resolve path to the Next.js app if inside the monorepo
+  // note: if user's app is inside a monorepo, standalone mode places
+  //       `node_modules` inside `.next/standalone`, and others inside
+  //       `.next/standalone/package/path` (ie. `.next`, `server.js`).
+  //       We need to output the handler file inside the package path.
+  const packagePath = path.relative(monorepoRoot, appBuildOutputPath);
+  fs.mkdirSync(path.join(outputPath, packagePath), { recursive: true });
+
+  const ext = fnOptions.runtime === "deno" ? "mjs" : "cjs";
+  fs.copyFileSync(
+    path.join(options.buildDir, `cache.${ext}`),
+    path.join(outputPath, packagePath, "cache.cjs")
+  );
+
+  if (fnOptions.runtime === "deno") {
+    addDenoJson(outputPath, packagePath);
+  }
+
+  // Bundle next server if necessary
+  const isBundled = fnOptions.experimentalBundledNextServer ?? false;
+  if (isBundled) {
+    await bundleNextServer(path.join(outputPath, packagePath), appPath, {
+      minify: options.minify,
+    });
+  }
+
+  // Copy middleware
+  if (!config.middleware?.external) {
+    fs.copyFileSync(
+      path.join(options.buildDir, "middleware.mjs"),
+      path.join(outputPath, packagePath, "middleware.mjs")
+    );
+  }
+
+  // Copy open-next.config.mjs
+  buildHelper.copyOpenNextConfig(options.buildDir, path.join(outputPath, packagePath), true);
+
+  // Copy env files
+  buildHelper.copyEnvFile(appBuildOutputPath, packagePath, outputPath);
+
+  // Copy all necessary traced files
+  await copyTracedFiles(
+    appBuildOutputPath,
+    packagePath,
+    outputPath,
+    fnOptions.routes ?? ["app/page.tsx"],
+    isBundled
+  );
+
+  // Build Lambda code
+  // note: bundle in OpenNext package b/c the adapter relies on the
+  //       "serverless-http" package which is not a dependency in user's
+  //       Next.js app.
+
+  const disableNextPrebundledReact =
+    buildHelper.compareSemver(options.nextVersion, "13.5.1") >= 0 ||
+    buildHelper.compareSemver(options.nextVersion, "13.4.1") <= 0;
+
+  const overrides = fnOptions.override ?? {};
+
+  const isBefore13413 = buildHelper.compareSemver(options.nextVersion, "13.4.13") <= 0;
+  const isAfter141 = buildHelper.compareSemver(options.nextVersion, "14.0.4") >= 0;
+
+  const disableRouting = isBefore13413 || config.middleware?.external;
+
+  const plugins = [
+    openNextReplacementPlugin({
+      name: `requestHandlerOverride ${name}`,
+      target: /core(\/|\\)requestHandler\.js/g,
+      deletes: [
+        ...(disableNextPrebundledReact ? ["applyNextjsPrebundledReact"] : []),
+        ...(disableRouting ? ["withRouting"] : []),
+      ],
+    }),
+    openNextReplacementPlugin({
+      name: `utilOverride ${name}`,
+      target: /core(\/|\\)util\.js/g,
+      deletes: [
+        ...(disableNextPrebundledReact ? ["requireHooks"] : []),
+        ...(disableRouting ? ["trustHostHeader"] : []),
+        ...(!isBefore13413 ? ["requestHandlerHost"] : []),
+        ...(isAfter141 ? ["experimentalIncrementalCacheHandler"] : ["stableIncrementalCache"]),
+      ],
+    }),
+
+    openNextResolvePlugin({
+      fnName: name,
+      overrides,
+    }),
+
+    openNextEdgePlugins({
+      nextDir: path.join(options.appBuildOutputPath, ".next"),
+      edgeFunctionHandlerPath: path.join(options.openNextDistDir, "core", "edgeFunctionHandler.js"),
+      isInCloudfare: true,
+    }),
+  ];
+
+  const outfileExt = fnOptions.runtime === "deno" ? "ts" : "mjs";
+  await buildHelper.esbuildAsync(
+    {
+      entryPoints: [path.join(options.openNextDistDir, "adapters", "server-adapter.js")],
+      outfile: path.join(outputPath, packagePath, `index.${outfileExt}`),
+      banner: {
+        js: [
+          `globalThis.monorepoPackagePath = "${packagePath}";`,
+          name === "default" ? "" : `globalThis.fnName = "${name}";`,
+        ].join(""),
+      },
+      plugins,
+      alias: {
+        ...(isBundled
+          ? {
+              "next/dist/server/next-server.js": "./next-server.runtime.prod.js",
+            }
+          : {}),
+      },
+    },
+    options
+  );
+
+  const isMonorepo = monorepoRoot !== appPath;
+  if (isMonorepo) {
+    addMonorepoEntrypoint(outputPath, packagePath);
+  }
+
+  installDependencies(outputPath, fnOptions.install);
+
+  if (fnOptions.minify) {
+    await minifyServerBundle(outputPath);
+  }
+
+  const shouldGenerateDocker = shouldGenerateDockerfile(fnOptions);
+  if (shouldGenerateDocker) {
+    fs.writeFileSync(
+      path.join(outputPath, "Dockerfile"),
+      typeof shouldGenerateDocker === "string"
+        ? shouldGenerateDocker
+        : `
+FROM node:18-alpine
+WORKDIR /app
+COPY . /app
+EXPOSE 3000
+CMD ["node", "index.mjs"]
+    `
+    );
+  }
+}
+
+function shouldGenerateDockerfile(options: FunctionOptions) {
+  return options.override?.generateDockerfile ?? false;
+}
+
+// Add deno.json file to enable "bring your own node_modules" mode.
+// TODO: this won't be necessary in Deno 2. See https://github.com/denoland/deno/issues/23151
+function addDenoJson(outputPath: string, packagePath: string) {
+  const config = {
+    // Enable "bring your own node_modules" mode
+    // and allow `__proto__`
+    unstable: ["byonm", "fs", "unsafe-proto"],
+  };
+  fs.writeFileSync(path.join(outputPath, packagePath, "deno.json"), JSON.stringify(config, null, 2));
+}
+
+//TODO: check if this PR is still necessary https://github.com/opennextjs/opennextjs-aws/pull/341
+function addMonorepoEntrypoint(outputPath: string, packagePath: string) {
+  // Note: in the monorepo case, the handler file is output to
+  //       `.next/standalone/package/path/index.mjs`, but we want
+  //       the Lambda function to be able to find the handler at
+  //       the root of the bundle. We will create a dummy `index.mjs`
+  //       that re-exports the real handler.
+
+  // TOOD: use helper
+  // Always use posix path for import path
+  const packagePosixPath = packagePath.split(path.sep).join(path.posix.sep);
+  fs.writeFileSync(path.join(outputPath, "index.mjs"), `export * from "./${packagePosixPath}/index.mjs";`);
+}
+
+async function minifyServerBundle(outputDir: string) {
+  logger.info("Minimizing server function...");
+
+  await minifyAll(outputDir, {
+    compress_json: true,
+    mangle: true,
+  });
+}
diff --git a/packages/cloudflare/src/cli/build/patches/index.ts b/packages/cloudflare/src/cli/build/patches/index.ts
new file mode 100644
index 000000000..d556d6cbb
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/patches/index.ts
@@ -0,0 +1,2 @@
+export * from "./investigated/index.js";
+export * from "./to-investigate/index.js";
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/copy-package-cli-files.ts b/packages/cloudflare/src/cli/build/patches/investigated/copy-package-cli-files.ts
index fb31c64bd..818bcbddd 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/copy-package-cli-files.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/copy-package-cli-files.ts
@@ -1,15 +1,22 @@
-import { cpSync } from "node:fs";
-import { join } from "node:path";
+import fs from "node:fs";
+import path from "node:path";
 
-import { Config } from "../../../config";
+import type { BuildOptions } from "@opennextjs/aws/build/helper.js";
+
+import { Config } from "../../../config.js";
 
 /**
  * Copies the template files present in the cloudflare adapter package into the standalone node_modules folder
  */
-export function copyPackageCliFiles(packageDistDir: string, config: Config) {
+export function copyPackageCliFiles(packageDistDir: string, config: Config, openNextConfig: BuildOptions) {
   console.log("# copyPackageTemplateFiles");
-  const sourceDir = join(packageDistDir, "cli");
-  const destinationDir = join(config.paths.internal.package, "cli");
+  const sourceDir = path.join(packageDistDir, "cli");
+  const destinationDir = path.join(config.paths.internal.package, "cli");
+
+  fs.cpSync(sourceDir, destinationDir, { recursive: true });
 
-  cpSync(sourceDir, destinationDir, { recursive: true });
+  fs.copyFileSync(
+    path.join(packageDistDir, "cli", "templates", "worker.js"),
+    path.join(openNextConfig.outputDir, "worker.js")
+  );
 }
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/index.ts b/packages/cloudflare/src/cli/build/patches/investigated/index.ts
new file mode 100644
index 000000000..9d46a4d84
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/patches/investigated/index.ts
@@ -0,0 +1,4 @@
+export * from "./copy-package-cli-files.js";
+export * from "./patch-cache.js";
+export * from "./patch-require.js";
+export * from "./update-webpack-chunks-file/index.js";
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/patch-cache.ts b/packages/cloudflare/src/cli/build/patches/investigated/patch-cache.ts
index ef37a8168..4e82d503f 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/patch-cache.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/patch-cache.ts
@@ -1,8 +1,6 @@
-import { join } from "node:path";
+import path from "node:path";
 
-import { build } from "esbuild";
-
-import { Config } from "../../../config";
+import type { BuildOptions } from "@opennextjs/aws/build/helper.js";
 
 /**
  * Sets up the OpenNext cache handler in a Next.js build.
@@ -15,35 +13,18 @@ import { Config } from "../../../config";
  * build-time. Therefore, we have to manually override the default way that the cache handler is
  * instantiated with a dynamic require that uses a string literal for the path.
  */
-export async function patchCache(code: string, config: Config): Promise<string> {
-  console.log("# patchCache");
-
-  const cacheHandlerFileName = "cache-handler.mjs";
-  const cacheHandlerEntrypoint = join(config.paths.internal.templates, "cache-handler", "index.ts");
-  const cacheHandlerOutputFile = join(config.paths.output.root, cacheHandlerFileName);
+export async function patchCache(code: string, openNextOptions: BuildOptions): Promise<string> {
+  const { appBuildOutputPath, outputDir, monorepoRoot } = openNextOptions;
 
-  await build({
-    entryPoints: [cacheHandlerEntrypoint],
-    bundle: true,
-    outfile: cacheHandlerOutputFile,
-    format: "esm",
-    target: "esnext",
-    minify: config.build.shouldMinify,
-    define: {
-      "process.env.__OPENNEXT_KV_BINDING_NAME": `"${config.cache.kvBindingName}"`,
-    },
-  });
+  // TODO: switch to cache.mjs
+  const outputPath = path.join(outputDir, "server-functions", "default");
+  const packagePath = path.relative(monorepoRoot, appBuildOutputPath);
+  const cacheFile = path.join(outputPath, packagePath, "cache.cjs");
 
-  const patchedCode = code.replace(
+  return code.replace(
     "const { cacheHandler } = this.nextConfig;",
     `const cacheHandler = null;
-CacheHandler = (await import('./${cacheHandlerFileName}')).OpenNextCacheHandler;
+CacheHandler = require('${cacheFile}').default;
 `
   );
-
-  if (patchedCode === code) {
-    throw new Error("Patch `patchCache` not applied");
-  }
-
-  return patchedCode;
 }
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/patch-require.ts b/packages/cloudflare/src/cli/build/patches/investigated/patch-require.ts
index 3771b0883..12f40160a 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/patch-require.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/patch-require.ts
@@ -5,6 +5,5 @@
  * James on Aug 29: `module.createRequire()` is planned.
  */
 export function patchRequire(code: string): string {
-  console.log("# patchRequire");
   return code.replace(/__require\d?\(/g, "require(").replace(/__require\d?\./g, "require.");
 }
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-chunk-installation-identifiers.test.ts b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-chunk-installation-identifiers.test.ts
index f61852440..17435c631 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-chunk-installation-identifiers.test.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-chunk-installation-identifiers.test.ts
@@ -2,8 +2,8 @@ import { readFile } from "node:fs/promises";
 
 import { describe, expect, test } from "vitest";
 
-import { tsParseFile } from "../../../utils";
-import { getChunkInstallationIdentifiers } from "./get-chunk-installation-identifiers";
+import { tsParseFile } from "../../../utils/index.js";
+import { getChunkInstallationIdentifiers } from "./get-chunk-installation-identifiers.js";
 
 describe("getChunkInstallationIdentifiers", () => {
   test("gets chunk identifiers from unminified code", async () => {
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-file-content-with-updated-webpack-f-require-code.test.ts b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-file-content-with-updated-webpack-f-require-code.test.ts
index 39fbe804b..9f1a6c59d 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-file-content-with-updated-webpack-f-require-code.test.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-file-content-with-updated-webpack-f-require-code.test.ts
@@ -2,7 +2,7 @@ import { readFile } from "node:fs/promises";
 
 import { describe, expect, test } from "vitest";
 
-import { tsParseFile } from "../../../utils";
+import { tsParseFile } from "../../../utils/index.js";
 import { getFileContentWithUpdatedWebpackFRequireCode } from "./get-file-content-with-updated-webpack-f-require-code";
 
 describe("getFileContentWithUpdatedWebpackFRequireCode", () => {
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.test.ts b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.test.ts
index bad22b04f..673051cb6 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.test.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.test.ts
@@ -2,7 +2,7 @@ import { readFile } from "node:fs/promises";
 
 import { describe, expect, test } from "vitest";
 
-import { getUpdatedWebpackChunksFileContent } from "./get-updated-webpack-chunks-file-content";
+import { getUpdatedWebpackChunksFileContent } from "./get-updated-webpack-chunks-file-content.js";
 
 describe("getUpdatedWebpackChunksFileContent", () => {
   test("returns the updated content of a webpack runtime chunks unminified file", async () => {
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.ts b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.ts
index 860311bd6..d4816573a 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/get-updated-webpack-chunks-file-content.ts
@@ -1,6 +1,6 @@
-import { tsParseFile } from "../../../utils";
-import { getChunkInstallationIdentifiers } from "./get-chunk-installation-identifiers";
-import { getFileContentWithUpdatedWebpackFRequireCode } from "./get-file-content-with-updated-webpack-f-require-code";
+import { tsParseFile } from "../../../utils/index.js";
+import { getChunkInstallationIdentifiers } from "./get-chunk-installation-identifiers.js";
+import { getFileContentWithUpdatedWebpackFRequireCode } from "./get-file-content-with-updated-webpack-f-require-code.js";
 
 /**
  * Updates the content of the webpack runtime file in a manner so that it doesn't perform runtime dynamic `require` calls which fail in our runtime.
diff --git a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/index.ts b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/index.ts
index 943b08da7..38464a52f 100644
--- a/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/index.ts
+++ b/packages/cloudflare/src/cli/build/patches/investigated/update-webpack-chunks-file/index.ts
@@ -1,8 +1,8 @@
 import { readdirSync, readFileSync, writeFileSync } from "node:fs";
 import { join } from "node:path";
 
-import { Config } from "../../../../config";
-import { getUpdatedWebpackChunksFileContent } from "./get-updated-webpack-chunks-file-content";
+import { Config } from "../../../../config.js";
+import { getUpdatedWebpackChunksFileContent } from "./get-updated-webpack-chunks-file-content.js";
 
 /**
  * Fixes the webpack-runtime.js file by removing its webpack dynamic requires.
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/index.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/index.ts
new file mode 100644
index 000000000..5c431dc1b
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/index.ts
@@ -0,0 +1,8 @@
+export * from "./inline-eval-manifest.js";
+export * from "./inline-middleware-manifest-require.js";
+export * from "./inline-next-require.js";
+export * from "./patch-exception-bubbling.js";
+export * from "./patch-find-dir.js";
+export * from "./patch-load-instrumentation-module.js";
+export * from "./patch-read-file.js";
+export * from "./wrangler-deps.js";
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/inline-eval-manifest.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/inline-eval-manifest.ts
index 4733794d0..4fde5ed7f 100644
--- a/packages/cloudflare/src/cli/build/patches/to-investigate/inline-eval-manifest.ts
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/inline-eval-manifest.ts
@@ -2,8 +2,8 @@ import { join, posix } from "node:path";
 
 import { globSync } from "glob";
 
-import { Config } from "../../../config";
-import { normalizePath } from "../../utils";
+import { Config } from "../../../config.js";
+import { normalizePath } from "../../utils/index.js";
 
 /**
  * `evalManifest` relies on readFileSync so we need to patch the function so that it instead returns the content of the manifest files
@@ -13,7 +13,6 @@ import { normalizePath } from "../../utils";
  * there is a vm `runInNewContext` call which we also don't support (source: https://github.com/vercel/next.js/blob/b1e32c5d1f/packages/next/src/server/load-manifest.ts#L88)
  */
 export function inlineEvalManifest(code: string, config: Config): string {
-  console.log("# inlineEvalManifest");
   const manifestJss = globSync(
     normalizePath(join(config.paths.output.standaloneAppDotNext, "**", "*_client-reference-manifest.js"))
   ).map((file) =>
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/inline-middleware-manifest-require.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/inline-middleware-manifest-require.ts
index db6d2341c..8e25afd22 100644
--- a/packages/cloudflare/src/cli/build/patches/to-investigate/inline-middleware-manifest-require.ts
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/inline-middleware-manifest-require.ts
@@ -1,29 +1,18 @@
 import { existsSync, readFileSync } from "node:fs";
 import { join } from "node:path";
 
-import { Config } from "../../../config";
+import { Config } from "../../../config.js";
 
 /**
  * Inlines the middleware manifest from the build output to prevent a dynamic require statement
  * as they result in runtime failures.
  */
 export function inlineMiddlewareManifestRequire(code: string, config: Config) {
-  console.log("# inlineMiddlewareManifestRequire");
-
   const middlewareManifestPath = join(config.paths.output.standaloneAppServer, "middleware-manifest.json");
 
   const middlewareManifest = existsSync(middlewareManifestPath)
     ? JSON.parse(readFileSync(middlewareManifestPath, "utf-8"))
     : {};
 
-  const patchedCode = code.replace(
-    "require(this.middlewareManifestPath)",
-    JSON.stringify(middlewareManifest)
-  );
-
-  if (patchedCode === code) {
-    throw new Error("Patch `inlineMiddlewareManifestRequire` not applied");
-  }
-
-  return patchedCode;
+  return code.replace("require(this.middlewareManifestPath)", JSON.stringify(middlewareManifest));
 }
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/inline-next-require.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/inline-next-require.ts
index b9143e19d..6e92f9092 100644
--- a/packages/cloudflare/src/cli/build/patches/to-investigate/inline-next-require.ts
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/inline-next-require.ts
@@ -1,14 +1,13 @@
 import { existsSync, readFileSync } from "node:fs";
 import { join } from "node:path";
 
-import { Config } from "../../../config";
+import { Config } from "../../../config.js";
 
 /**
  * The following avoid various Next.js specific files `require`d at runtime since we can just read
  * and inline their content during build time
  */
 export function inlineNextRequire(code: string, config: Config) {
-  console.log("# inlineNextRequire");
   const pagesManifestFile = join(config.paths.output.standaloneAppServer, "pages-manifest.json");
   const appPathsManifestFile = join(config.paths.output.standaloneAppServer, "app-paths-manifest.json");
 
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/patch-exception-bubbling.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-exception-bubbling.ts
index 63e43275a..9dba8092b 100644
--- a/packages/cloudflare/src/cli/build/patches/to-investigate/patch-exception-bubbling.ts
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-exception-bubbling.ts
@@ -5,13 +5,5 @@
  * promises.
  */
 export function patchExceptionBubbling(code: string) {
-  console.log("# patchExceptionBubbling");
-
-  const patchedCode = code.replace('_nextBubbleNoFallback = "1"', "_nextBubbleNoFallback = undefined");
-
-  if (patchedCode === code) {
-    throw new Error("Patch `patchExceptionBubbling` not applied");
-  }
-
-  return patchedCode;
+  return code.replace('_nextBubbleNoFallback = "1"', "_nextBubbleNoFallback = undefined");
 }
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/patch-find-dir.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-find-dir.ts
index 1984fb178..471b8fa98 100644
--- a/packages/cloudflare/src/cli/build/patches/to-investigate/patch-find-dir.ts
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-find-dir.ts
@@ -1,7 +1,7 @@
 import { existsSync } from "node:fs";
 import { join } from "node:path";
 
-import { Config } from "../../../config";
+import { Config } from "../../../config.js";
 
 /**
  * Here we patch `findDir` so that the next server can detect whether the `app` or `pages` directory exists
@@ -10,19 +10,18 @@ import { Config } from "../../../config";
  * Note: `findDir` uses `fs.existsSync` under the hood, so patching that should be enough to make this work
  */
 export function patchFindDir(code: string, config: Config): string {
-  console.log("# patchFindDir");
   return code.replace(
-    "function findDir(dir, name) {",
-    `function findDir(dir, name) {
-			if (dir.endsWith(".next/server")) {
-			if (name === "app") {
+    /function findDir\((?<dir>dir\d*), (?<name>name\d*)\) {/,
+    `function findDir($dir, $name) {
+			if ($dir.endsWith(".next/server")) {
+			if ($name === "app") {
 			  return ${existsSync(`${join(config.paths.output.standaloneAppServer, "app")}`)};
 	    }
-			if (name === "pages") {
+			if ($name === "pages") {
 			  return ${existsSync(`${join(config.paths.output.standaloneAppServer, "pages")}`)};
 	    }
 		}
-		throw new Error("Unknown findDir call: " + dir + " " + name);
+		throw new Error("Unknown findDir call: " + $dir + " " + $name);
 		`
   );
 }
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/patch-load-instrumentation-module.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-load-instrumentation-module.ts
new file mode 100644
index 000000000..d3eae38bc
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-load-instrumentation-module.ts
@@ -0,0 +1,38 @@
+import * as ts from "ts-morph";
+
+import { tsParseFile } from "../../utils/index.js";
+
+/**
+ * The `loadInstrumentationModule` method (source: https://github.com/vercel/next.js/blob/5b7833e3/packages/next/src/server/next-server.ts#L301)
+ * calls `module.findSourceMap` (https://nodejs.org/api/module.html#modulefindsourcemappath) which we haven't implemented causing a runtime error.
+ *
+ * To solve this issue this function gets all the `loadInstrumentationModule` declarations found in the file and removes all the statements
+ * from their bodies (making them no-op methods).
+ *
+ * Instrumentation is a Next.js feature for monitoring and logging (see: https://nextjs.org/docs/app/building-your-application/optimizing/instrumentation),
+ * the removal of this method's logic most likely breaks this feature (see: https://nextjs.org/docs/app/api-reference/file-conventions/instrumentation),
+ * so this function is likely temporary and something that we'll have to fix in the future.
+ *
+ * TODO: investigate and re-enable instrumentation (https://github.com/opennextjs/opennextjs-cloudflare/issues/171)
+ */
+export function patchLoadInstrumentationModule(code: string) {
+  const file = tsParseFile(code);
+  const loadInstrumentationModuleDeclarations = file
+    .getDescendantsOfKind(ts.SyntaxKind.MethodDeclaration)
+    .filter((methodDeclaration) => {
+      if (methodDeclaration.getName() !== "loadInstrumentationModule") {
+        return false;
+      }
+      const methodModifierKinds = methodDeclaration.getModifiers().map((modifier) => modifier.getKind());
+      if (methodModifierKinds.length !== 1 || methodModifierKinds[0] !== ts.SyntaxKind.AsyncKeyword) {
+        return false;
+      }
+
+      return true;
+    });
+
+  loadInstrumentationModuleDeclarations.forEach((loadInstrumentationModuleDeclaration) => {
+    loadInstrumentationModuleDeclaration.setBodyText("");
+  });
+  return file.print();
+}
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/patch-read-file.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-read-file.ts
index 4e44d9355..7a26f717a 100644
--- a/packages/cloudflare/src/cli/build/patches/to-investigate/patch-read-file.ts
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/patch-read-file.ts
@@ -3,23 +3,24 @@ import { join, posix } from "node:path";
 
 import { globSync } from "glob";
 
-import { Config } from "../../../config";
-import { normalizePath } from "../../utils";
+import { Config } from "../../../config.js";
+import { normalizePath } from "../../utils/index.js";
 
-export function patchReadFile(code: string, config: Config): string {
-  console.log("# patchReadFile");
+export function patchBuildId(code: string, config: Config): string {
   // The next-server code gets the buildId from the filesystem, resulting in a `[unenv] fs.readFileSync is not implemented yet!` error
   // so we add an early return to the `getBuildId` function so that the `readyFileSync` is never encountered
   // (source: https://github.com/vercel/next.js/blob/15aeb92efb34c09a36/packages/next/src/server/next-server.ts#L438-L451)
   // Note: we could/should probably just patch readFileSync here or something!
-  code = code.replace(
+  return code.replace(
     "getBuildId() {",
     `getBuildId() {
       return ${JSON.stringify(readFileSync(join(config.paths.output.standaloneAppDotNext, "BUILD_ID"), "utf-8"))};
     `
   );
+}
 
-  // Same as above, the next-server code loads the manifests with `readFileSync` and we want to avoid that
+export function patchLoadManifest(code: string, config: Config): string {
+  // Same as patchBuildId, the next-server code loads the manifests with `readFileSync` and we want to avoid that
   // (source: https://github.com/vercel/next.js/blob/15aeb92e/packages/next/src/server/load-manifest.ts#L34-L56)
   // Note: we could/should probably just patch readFileSync here or something!
   const manifestJsons = globSync(
@@ -27,7 +28,7 @@ export function patchReadFile(code: string, config: Config): string {
   ).map((file) =>
     normalizePath(file).replace(normalizePath(config.paths.output.standaloneApp) + posix.sep, "")
   );
-  code = code.replace(
+  return code.replace(
     /function loadManifest\((.+?), .+?\) {/,
     `$&
     ${manifestJsons
@@ -42,6 +43,4 @@ export function patchReadFile(code: string, config: Config): string {
     throw new Error("Unknown loadManifest: " + $1);
     `
   );
-
-  return code;
 }
diff --git a/packages/cloudflare/src/cli/build/patches/to-investigate/wrangler-deps.ts b/packages/cloudflare/src/cli/build/patches/to-investigate/wrangler-deps.ts
index 8aa7c9c5b..6fed53ecd 100644
--- a/packages/cloudflare/src/cli/build/patches/to-investigate/wrangler-deps.ts
+++ b/packages/cloudflare/src/cli/build/patches/to-investigate/wrangler-deps.ts
@@ -1,7 +1,7 @@
 import { readFileSync, statSync, writeFileSync } from "node:fs";
 import { join } from "node:path";
 
-import { Config } from "../../../config";
+import { Config } from "../../../config.js";
 
 export function patchWranglerDeps(config: Config) {
   console.log("# patchWranglerDeps");
diff --git a/packages/cloudflare/src/cli/build/utils/copy-prerendered-routes.ts b/packages/cloudflare/src/cli/build/utils/copy-prerendered-routes.ts
deleted file mode 100644
index 1fb9bd052..000000000
--- a/packages/cloudflare/src/cli/build/utils/copy-prerendered-routes.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
-import { dirname, join } from "node:path";
-
-import type { PrerenderManifest } from "next/dist/build";
-
-import { Config } from "../../config";
-import { NEXT_META_SUFFIX, SEED_DATA_DIR } from "../../constants/incremental-cache";
-import { readPathsRecursively } from "./read-paths-recursively";
-
-/**
- * Copies all prerendered routes from the standalone output directory to the OpenNext static assets
- * output directory.
- *
- * Updates metadata configs with the current time as a modified date, so that it can be re-used in
- * the incremental cache to determine whether an entry is _fresh_ or not.
- *
- * @param config Build config.
- */
-export function copyPrerenderedRoutes(config: Config) {
-  console.log("# copyPrerenderedRoutes");
-
-  const serverAppDirPath = join(config.paths.output.standaloneAppServer, "app");
-  const prerenderManifestPath = join(config.paths.output.standaloneAppDotNext, "prerender-manifest.json");
-  const outputPath = join(config.paths.output.assets, SEED_DATA_DIR);
-
-  const prerenderManifest: PrerenderManifest = existsSync(prerenderManifestPath)
-    ? JSON.parse(readFileSync(prerenderManifestPath, "utf8"))
-    : {};
-  const prerenderedRoutes = Object.keys(prerenderManifest.routes);
-
-  const prerenderedAssets = readPathsRecursively(serverAppDirPath)
-    .map((fullPath) => ({ fullPath, relativePath: fullPath.replace(serverAppDirPath, "") }))
-    .filter(({ relativePath }) =>
-      prerenderedRoutes.includes(relativePath.replace(/\.\w+$/, "").replace(/^\/index$/, "/"))
-    );
-
-  prerenderedAssets.forEach(({ fullPath, relativePath }) => {
-    const destPath = join(outputPath, relativePath);
-    mkdirSync(dirname(destPath), { recursive: true });
-
-    if (fullPath.endsWith(NEXT_META_SUFFIX)) {
-      const data = JSON.parse(readFileSync(fullPath, "utf8"));
-      writeFileSync(destPath, JSON.stringify({ ...data, lastModified: config.build.timestamp }));
-    } else {
-      copyFileSync(fullPath, destPath);
-    }
-  });
-}
diff --git a/packages/cloudflare/src/cli/build/utils/extract-project-env-vars.spec.ts b/packages/cloudflare/src/cli/build/utils/extract-project-env-vars.spec.ts
new file mode 100644
index 000000000..6aa9834d1
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/utils/extract-project-env-vars.spec.ts
@@ -0,0 +1,70 @@
+import { appendFileSync, writeFileSync } from "node:fs";
+
+import { BuildOptions } from "@opennextjs/aws/build/helper.js";
+import mockFs from "mock-fs";
+import { afterEach, beforeEach, describe, expect, it } from "vitest";
+
+import { extractProjectEnvVars } from "./extract-project-env-vars";
+
+const options = { monorepoRoot: "", appPath: "" } as BuildOptions;
+
+describe("extractProjectEnvVars", () => {
+  beforeEach(() => {
+    mockFs({
+      ".env": "ENV_VAR=value",
+      ".env.local": "ENV_LOCAL_VAR=value",
+      ".env.development": "ENV_DEV_VAR=value",
+      ".env.development.local": "ENV_DEV_LOCAL_VAR=value",
+      ".env.production": "ENV_PROD_VAR=value",
+      ".env.production.local": "ENV_PROD_LOCAL_VAR=value",
+    });
+  });
+
+  afterEach(() => mockFs.restore());
+
+  it("should extract production env vars", () => {
+    const result = extractProjectEnvVars("production", options);
+    expect(result).toEqual({
+      ENV_LOCAL_VAR: "value",
+      ENV_PROD_LOCAL_VAR: "value",
+      ENV_PROD_VAR: "value",
+      ENV_VAR: "value",
+    });
+  });
+
+  it("should extract development env vars", () => {
+    writeFileSync(".dev.vars", 'NEXTJS_ENV = "development"');
+
+    const result = extractProjectEnvVars("development", options);
+    expect(result).toEqual({
+      ENV_LOCAL_VAR: "value",
+      ENV_DEV_LOCAL_VAR: "value",
+      ENV_DEV_VAR: "value",
+      ENV_VAR: "value",
+    });
+  });
+
+  it("should override env vars with those in a local file", () => {
+    writeFileSync(".env.production.local", "ENV_PROD_VAR=overridden");
+
+    const result = extractProjectEnvVars("production", options);
+    expect(result).toEqual({
+      ENV_LOCAL_VAR: "value",
+      ENV_PROD_VAR: "overridden",
+      ENV_VAR: "value",
+    });
+  });
+
+  it("should support referencing variables", () => {
+    appendFileSync(".env.production.local", "\nENV_PROD_LOCAL_VAR_REF=$ENV_PROD_LOCAL_VAR");
+
+    const result = extractProjectEnvVars("production", options);
+    expect(result).toEqual({
+      ENV_LOCAL_VAR: "value",
+      ENV_PROD_LOCAL_VAR: "value",
+      ENV_PROD_LOCAL_VAR_REF: "value",
+      ENV_PROD_VAR: "value",
+      ENV_VAR: "value",
+    });
+  });
+});
diff --git a/packages/cloudflare/src/cli/build/utils/extract-project-env-vars.ts b/packages/cloudflare/src/cli/build/utils/extract-project-env-vars.ts
new file mode 100644
index 000000000..7440e6b1d
--- /dev/null
+++ b/packages/cloudflare/src/cli/build/utils/extract-project-env-vars.ts
@@ -0,0 +1,36 @@
+import * as fs from "node:fs";
+import * as path from "node:path";
+
+import { parse } from "@dotenvx/dotenvx";
+import type { BuildOptions } from "@opennextjs/aws/build/helper.js";
+
+function readEnvFile(filePath: string) {
+  if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
+    return parse(fs.readFileSync(filePath).toString());
+  }
+}
+
+/**
+ * Extracts the environment variables defined in various .env files for a project.
+ *
+ * The `NEXTJS_ENV` environment variable in `.dev.vars` determines the mode.
+ *
+ * Merged variables respect the following priority order.
+ * 1. `.env.{mode}.local`
+ * 2. `.env.local`
+ * 3. `.env.{mode}`
+ * 4. `.env`
+ *
+ * https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables#environment-variable-load-order
+ *
+ * In a monorepo, the env files in an app's directory will take precedence over
+ * the env files at the root of the monorepo.
+ */
+export function extractProjectEnvVars(mode: string, { monorepoRoot, appPath }: BuildOptions) {
+  return [".env", `.env.${mode}`, ".env.local", `.env.${mode}.local`]
+    .flatMap((fileName) => [
+      ...(monorepoRoot !== appPath ? [readEnvFile(path.join(monorepoRoot, fileName))] : []),
+      readEnvFile(path.join(appPath, fileName)),
+    ])
+    .reduce<Record<string, string>>((acc, overrides) => ({ ...acc, ...overrides }), {});
+}
diff --git a/packages/cloudflare/src/cli/build/utils/index.ts b/packages/cloudflare/src/cli/build/utils/index.ts
index 5b703b4de..fec50715a 100644
--- a/packages/cloudflare/src/cli/build/utils/index.ts
+++ b/packages/cloudflare/src/cli/build/utils/index.ts
@@ -1,3 +1,3 @@
-export * from "./copy-prerendered-routes";
-export * from "./normalize-path";
-export * from "./ts-parse-file";
+export * from "./extract-project-env-vars.js";
+export * from "./normalize-path.js";
+export * from "./ts-parse-file.js";
diff --git a/packages/cloudflare/src/cli/config.ts b/packages/cloudflare/src/cli/config.ts
index eb101e0c7..e08889948 100644
--- a/packages/cloudflare/src/cli/config.ts
+++ b/packages/cloudflare/src/cli/config.ts
@@ -5,8 +5,6 @@ const PACKAGE_NAME = "@opennextjs/cloudflare";
 
 export type Config = {
   build: {
-    // Timestamp for when the build was started
-    timestamp: number;
     // Whether to skip building the Next.js app or not
     skipNextBuild: boolean;
     // Whether minification should be enabled or not
@@ -46,10 +44,6 @@ export type Config = {
     };
   };
 
-  cache: {
-    kvBindingName: string;
-  };
-
   // Internal name for the copy of the package
   internalPackageName: string;
 };
@@ -74,11 +68,8 @@ export function getConfig(projectOpts: ProjectOptions): Config {
   const internalPackage = join(nodeModules, ...PACKAGE_NAME.split("/"));
   const internalTemplates = join(internalPackage, "cli", "templates");
 
-  process.env.__OPENNEXT_KV_BINDING_NAME ??= "NEXT_CACHE_WORKERS_KV";
-
   return {
     build: {
-      timestamp: Date.now(),
       skipNextBuild: projectOpts.skipNextBuild,
       shouldMinify: projectOpts.minify,
     },
@@ -104,10 +95,6 @@ export function getConfig(projectOpts: ProjectOptions): Config {
       },
     },
 
-    cache: {
-      kvBindingName: process.env.__OPENNEXT_KV_BINDING_NAME,
-    },
-
     internalPackageName: PACKAGE_NAME,
   };
 }
diff --git a/packages/cloudflare/src/cli/constants/incremental-cache.ts b/packages/cloudflare/src/cli/constants/incremental-cache.ts
deleted file mode 100644
index 90b21bbc5..000000000
--- a/packages/cloudflare/src/cli/constants/incremental-cache.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-export const RSC_PREFETCH_SUFFIX = ".prefetch.rsc";
-export const RSC_SUFFIX = ".rsc";
-export const NEXT_DATA_SUFFIX = ".json";
-export const NEXT_META_SUFFIX = ".meta";
-export const NEXT_BODY_SUFFIX = ".body";
-export const NEXT_HTML_SUFFIX = ".html";
-
-export const SEED_DATA_DIR = "cdn-cgi/_cf_seed_data";
diff --git a/packages/cloudflare/src/cli/index.ts b/packages/cloudflare/src/cli/index.ts
index beb5472d5..1993389ac 100644
--- a/packages/cloudflare/src/cli/index.ts
+++ b/packages/cloudflare/src/cli/index.ts
@@ -1,27 +1,16 @@
 #!/usr/bin/env node
-import { existsSync } from "node:fs";
 import { resolve } from "node:path";
 
-import { getArgs } from "./args";
-import { build } from "./build";
+import { getArgs } from "./args.js";
+import { build } from "./build/index.js";
 
-const nextAppDir = resolve(".");
-
-console.log(`Building the Next.js app in the current folder (${nextAppDir})`);
-
-if (!["js", "cjs", "mjs", "ts"].some((ext) => existsSync(`./next.config.${ext}`))) {
-  // TODO: we can add more validation later
-  console.error(
-    "Error: next.config file not found. Please make sure you run the command inside a Next.js app"
-  );
-  process.exit(1);
-}
+const nextAppDir = process.cwd();
 
 const { skipNextBuild, outputDir, minify } = getArgs();
 
 await build({
   sourceDir: nextAppDir,
-  outputDir: resolve(outputDir ?? nextAppDir, ".worker-next"),
+  outputDir: resolve(outputDir ?? nextAppDir, ".open-next"),
   skipNextBuild,
   minify,
 });
diff --git a/packages/cloudflare/src/cli/templates/cache-handler/index.ts b/packages/cloudflare/src/cli/templates/cache-handler/index.ts
deleted file mode 100644
index 46fc26df3..000000000
--- a/packages/cloudflare/src/cli/templates/cache-handler/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from "./open-next-cache-handler";
diff --git a/packages/cloudflare/src/cli/templates/cache-handler/open-next-cache-handler.ts b/packages/cloudflare/src/cli/templates/cache-handler/open-next-cache-handler.ts
deleted file mode 100644
index 0f7de47d7..000000000
--- a/packages/cloudflare/src/cli/templates/cache-handler/open-next-cache-handler.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import type { KVNamespace } from "@cloudflare/workers-types";
-import type {
-  CacheHandler,
-  CacheHandlerContext,
-  CacheHandlerValue,
-} from "next/dist/server/lib/incremental-cache";
-import type { IncrementalCacheValue } from "next/dist/server/response-cache";
-
-import {
-  NEXT_BODY_SUFFIX,
-  NEXT_DATA_SUFFIX,
-  NEXT_HTML_SUFFIX,
-  RSC_PREFETCH_SUFFIX,
-  RSC_SUFFIX,
-  SEED_DATA_DIR,
-} from "../../constants/incremental-cache";
-import { getSeedBodyFile, getSeedMetaFile, getSeedTextFile, parseCtx } from "./utils";
-
-type CacheEntry = {
-  lastModified: number;
-  value: IncrementalCacheValue | null;
-};
-
-export class OpenNextCacheHandler implements CacheHandler {
-  protected kv: KVNamespace | undefined;
-
-  protected debug: boolean = !!process.env.NEXT_PRIVATE_DEBUG_CACHE;
-
-  constructor(protected ctx: CacheHandlerContext) {
-    this.kv = process.env[process.env.__OPENNEXT_KV_BINDING_NAME] as KVNamespace | undefined;
-  }
-
-  async get(...args: Parameters<CacheHandler["get"]>): Promise<CacheHandlerValue | null> {
-    const [key, _ctx] = args;
-    const ctx = parseCtx(_ctx);
-
-    if (this.debug) console.log(`cache - get: ${key}, ${ctx?.kind}`);
-
-    if (this.kv !== undefined) {
-      try {
-        const value = await this.kv.get<CacheEntry>(key, "json");
-        if (value) return value;
-      } catch (e) {
-        console.error(`Failed to get value for key = ${key}: ${e}`);
-      }
-    }
-
-    // Check for seed data from the file-system.
-
-    // we don't check for seed data for fetch or image cache entries
-    if (ctx?.kind === "FETCH" || ctx?.kind === "IMAGE") return null;
-
-    const seedKey = `http://assets.local/${SEED_DATA_DIR}/${key}`.replace(/\/\//g, "/");
-
-    if (ctx?.kind === "APP" || ctx?.kind === "APP_ROUTE") {
-      const fallbackBody = await getSeedBodyFile(seedKey, NEXT_BODY_SUFFIX);
-      if (fallbackBody) {
-        const meta = await getSeedMetaFile(seedKey);
-        return {
-          lastModified: meta?.lastModified,
-          value: {
-            kind: (ctx.kind === "APP_ROUTE" ? ctx.kind : "ROUTE") as Extract<
-              IncrementalCacheValue["kind"],
-              "ROUTE"
-            >,
-            body: fallbackBody,
-            status: meta?.status ?? 200,
-            headers: meta?.headers ?? {},
-          },
-        };
-      }
-
-      if (ctx.kind === "APP_ROUTE") {
-        return null;
-      }
-    }
-
-    const seedHtml = await getSeedTextFile(seedKey, NEXT_HTML_SUFFIX);
-    if (!seedHtml) return null; // we're only checking for prerendered routes at the moment
-
-    if (ctx?.kind === "PAGES" || ctx?.kind === "APP" || ctx?.kind === "APP_PAGE") {
-      const metaPromise = getSeedMetaFile(seedKey);
-
-      let pageDataPromise: Promise<Buffer | string | undefined> = Promise.resolve(undefined);
-      if (!ctx.isFallback) {
-        const rscSuffix = ctx.isRoutePPREnabled ? RSC_PREFETCH_SUFFIX : RSC_SUFFIX;
-
-        if (ctx.kind === "APP_PAGE") {
-          pageDataPromise = getSeedBodyFile(seedKey, rscSuffix);
-        } else {
-          pageDataPromise = getSeedTextFile(seedKey, ctx.kind === "APP" ? rscSuffix : NEXT_DATA_SUFFIX);
-        }
-      }
-
-      const [meta, pageData] = await Promise.all([metaPromise, pageDataPromise]);
-
-      return {
-        lastModified: meta?.lastModified,
-        value: {
-          kind: (ctx.kind === "APP_PAGE" ? "APP_PAGE" : "PAGE") as Extract<
-            IncrementalCacheValue["kind"],
-            "PAGE"
-          >,
-          html: seedHtml,
-          pageData: pageData ?? "",
-          ...(ctx.kind === "APP_PAGE" && { rscData: pageData }),
-          postponed: meta?.postponed,
-          status: meta?.status,
-          headers: meta?.headers,
-        },
-      };
-    }
-
-    return null;
-  }
-
-  async set(...args: Parameters<CacheHandler["set"]>) {
-    // eslint-disable-next-line @typescript-eslint/no-unused-vars
-    const [key, entry, _ctx] = args;
-
-    if (this.kv === undefined) {
-      return;
-    }
-
-    if (this.debug) console.log(`cache - set: ${key}`);
-
-    const data: CacheEntry = {
-      lastModified: Date.now(),
-      value: entry,
-    };
-
-    try {
-      await this.kv.put(key, JSON.stringify(data));
-    } catch (e) {
-      console.error(`Failed to set value for key = ${key}: ${e}`);
-    }
-  }
-
-  async revalidateTag(...args: Parameters<CacheHandler["revalidateTag"]>) {
-    const [tags] = args;
-    if (this.kv === undefined) {
-      return;
-    }
-
-    if (this.debug) console.log(`cache - revalidateTag: ${JSON.stringify([tags].flat())}`);
-  }
-
-  resetRequestCache(): void {}
-}
diff --git a/packages/cloudflare/src/cli/templates/cache-handler/utils.ts b/packages/cloudflare/src/cli/templates/cache-handler/utils.ts
deleted file mode 100644
index d17084beb..000000000
--- a/packages/cloudflare/src/cli/templates/cache-handler/utils.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import type { IncrementalCache } from "next/dist/server/lib/incremental-cache";
-
-import { NEXT_META_SUFFIX } from "../../constants/incremental-cache";
-
-type PrerenderedRouteMeta = {
-  lastModified: number;
-  status?: number;
-  headers?: Record<string, string>;
-  postponed?: string;
-};
-
-type EntryKind =
-  | "APP" // .body, .html - backwards compat
-  | "PAGES"
-  | "FETCH"
-  | "APP_ROUTE" // .body
-  | "APP_PAGE" // .html
-  | "IMAGE"
-  | undefined;
-
-async function getAsset<T>(key: string, cb: (resp: Response) => T): Promise<Awaited<T> | undefined> {
-  const resp = await process.env.ASSETS.fetch(key);
-  return resp.status === 200 ? await cb(resp) : undefined;
-}
-
-export function getSeedBodyFile(key: string, suffix: string) {
-  return getAsset(key + suffix, (resp) => resp.arrayBuffer() as Promise<Buffer>);
-}
-
-export function getSeedTextFile(key: string, suffix: string) {
-  return getAsset(key + suffix, (resp) => resp.text());
-}
-
-export function getSeedMetaFile(key: string) {
-  return getAsset(key + NEXT_META_SUFFIX, (resp) => resp.json<PrerenderedRouteMeta>());
-}
-
-export function parseCtx(ctx: Parameters<IncrementalCache["get"]>[1] = {}) {
-  return { ...ctx, kind: ctx?.kindHint?.toUpperCase() } as
-    | (typeof ctx & { kind?: EntryKind; isFallback?: boolean; isRoutePPREnabled?: boolean })
-    | undefined;
-}
diff --git a/packages/cloudflare/src/cli/templates/worker.ts b/packages/cloudflare/src/cli/templates/worker.ts
index ce048089e..f5ab47be6 100644
--- a/packages/cloudflare/src/cli/templates/worker.ts
+++ b/packages/cloudflare/src/cli/templates/worker.ts
@@ -1,16 +1,10 @@
 import { AsyncLocalStorage } from "node:async_hooks";
-import type { IncomingMessage } from "node:http";
-import Stream from "node:stream";
-
-import type { ExportedHandler, Fetcher } from "@cloudflare/workers-types";
-import type { NextConfig } from "next";
-import { NodeNextRequest, NodeNextResponse } from "next/dist/server/base-http/node";
-import { MockedResponse } from "next/dist/server/lib/mock-request";
-import type { NodeRequestHandler } from "next/dist/server/next-server";
 
 import type { CloudflareContext } from "../../api";
-
-const NON_BODY_RESPONSES = new Set([101, 204, 205, 304]);
+// @ts-expect-error: resolved by wrangler build
+import { handler as middlewareHandler } from "./middleware/handler.mjs";
+// @ts-expect-error: resolved by wrangler build
+import { handler as serverHandler } from "./server-functions/default/handler.mjs";
 
 const cloudflareContextALS = new AsyncLocalStorage<CloudflareContext>();
 
@@ -27,132 +21,66 @@ const cloudflareContextALS = new AsyncLocalStorage<CloudflareContext>();
   }
 );
 
-// Injected at build time
-const nextConfig: NextConfig = JSON.parse(process.env.__NEXT_PRIVATE_STANDALONE_CONFIG ?? "{}");
-
-let requestHandler: NodeRequestHandler | null = null;
-
 export default {
   async fetch(request, env, ctx) {
     return cloudflareContextALS.run({ env, ctx, cf: request.cf }, async () => {
-      if (requestHandler == null) {
-        globalThis.process.env = { ...globalThis.process.env, ...env };
-        // Note: "next/dist/server/next-server" is a cjs module so we have to `require` it not to confuse esbuild
-        //       (since esbuild can run in projects with different module resolutions)
-        // eslint-disable-next-line @typescript-eslint/no-require-imports
-        const NextNodeServer = require("next/dist/server/next-server")
-          .default as typeof import("next/dist/server/next-server").default;
+      const url = new URL(request.url);
 
-        requestHandler = new NextNodeServer({
-          conf: nextConfig,
-          customServer: false,
-          dev: false,
-          dir: "",
-          minimalMode: false,
-        }).getRequestHandler();
+      if (process.env.__PROCESS_ENV_POPULATED !== "1") {
+        await populateProcessEnv(url, env.NEXTJS_ENV);
+        process.env.__PROCESS_ENV_POPULATED = "1";
       }
 
-      const url = new URL(request.url);
-
       if (url.pathname === "/_next/image") {
-        const imageUrl =
-          url.searchParams.get("url") ?? "https://developers.cloudflare.com/_astro/logo.BU9hiExz.svg";
-        if (imageUrl.startsWith("/")) {
-          return env.ASSETS.fetch(new URL(imageUrl, request.url));
-        }
-        return fetch(imageUrl, { cf: { cacheEverything: true } });
+        const imageUrl = url.searchParams.get("url") ?? "";
+        return imageUrl.startsWith("/")
+          ? env.ASSETS.fetch(new URL(imageUrl, request.url))
+          : fetch(imageUrl, { cf: { cacheEverything: true } });
       }
 
-      const { req, res, webResponse } = getWrappedStreams(request, ctx);
+      // The Middleware handler can return either a `Response` or a `Request`:
+      // - `Response`s should be returned early
+      // - `Request`s are handled by the Next server
+      const reqOrResp = await middlewareHandler(request, env, ctx);
 
-      ctx.waitUntil(Promise.resolve(requestHandler(new NodeNextRequest(req), new NodeNextResponse(res))));
+      if (reqOrResp instanceof Response) {
+        return reqOrResp;
+      }
 
-      return await webResponse();
+      return serverHandler(reqOrResp, env, ctx);
     });
   },
-} as ExportedHandler<{ ASSETS: Fetcher }>;
-
-function getWrappedStreams(request: Request, ctx: ExecutionContext) {
-  const url = new URL(request.url);
-
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  const reqBody = request.body && Stream.Readable.fromWeb(request.body as any);
-  const req = (reqBody ?? Stream.Readable.from([])) as IncomingMessage;
-  req.httpVersion = "1.0";
-  req.httpVersionMajor = 1;
-  req.httpVersionMinor = 0;
-  req.url = url.href.slice(url.origin.length);
-  req.headers = Object.fromEntries([...request.headers]);
-  req.method = request.method;
-  Object.defineProperty(req, "__node_stream__", {
-    value: true,
-    writable: false,
-  });
-  Object.defineProperty(req, "headersDistinct", {
-    get() {
-      const headers: Record<string, string[]> = {};
-      for (const [key, value] of Object.entries(req.headers)) {
-        if (!value) continue;
-        headers[key] = Array.isArray(value) ? value : [value];
-      }
-      return headers;
-    },
-  });
+} as ExportedHandler<{ ASSETS: Fetcher; NEXTJS_ENV?: string }>;
+
+/**
+ * Populate process.env with:
+ * - the variables from Next .env* files
+ * - the origin resolver information
+ *
+ * Note that cloudflare env string values are copied by the middleware handler.
+ */
+async function populateProcessEnv(url: URL, nextJsEnv?: string) {
+  if (process.env.__PROCESS_ENV_POPULATED === "1") {
+    return;
+  }
 
-  const { readable, writable } = new IdentityTransformStream();
-  const resBodyWriter = writable.getWriter();
+  // @ts-expect-error: resolved by wrangler build
+  const nextEnvVars = await import("./.env.mjs");
 
-  const res = new MockedResponse({
-    resWriter: (chunk) => {
-      resBodyWriter.write(typeof chunk === "string" ? Buffer.from(chunk) : chunk).catch((err) => {
-        if (
-          err.message.includes("WritableStream has been closed") ||
-          err.message.includes("Network connection lost")
-        ) {
-          // safe to ignore
-          return;
-        }
-        console.error("Error in resBodyWriter.write");
-        console.error(err);
-      });
-      return true;
-    },
-  });
+  const mode = nextJsEnv ?? "production";
 
-  // It's implemented as a no-op, but really it should mark the headers as done
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  res.flushHeaders = () => (res as any).headPromiseResolve();
+  if (nextEnvVars[mode]) {
+    for (const key in nextEnvVars[mode]) {
+      process.env[key] = nextEnvVars[mode][key];
+    }
+  }
 
-  // Only allow statusCode to be modified if not sent
-  let { statusCode } = res;
-  Object.defineProperty(res, "statusCode", {
-    get: function () {
-      return statusCode;
-    },
-    set: function (val) {
-      if (this.finished || this.headersSent) {
-        return;
-      }
-      statusCode = val;
+  // Set the default Origin for the origin resolver.
+  process.env.OPEN_NEXT_ORIGIN = JSON.stringify({
+    default: {
+      host: url.hostname,
+      protocol: url.protocol.slice(0, -1),
+      port: url.port,
     },
   });
-
-  // Make sure the writer is eventually closed
-  // eslint-disable-next-line @typescript-eslint/no-explicit-any
-  ctx.waitUntil((res as any).hasStreamed.finally(() => resBodyWriter.close().catch(() => {})));
-
-  return {
-    res,
-    req,
-    webResponse: async () => {
-      await res.headPromise;
-      // TODO: remove this once streaming with compression is working nicely
-      res.setHeader("content-encoding", "identity");
-      return new Response(NON_BODY_RESPONSES.has(res.statusCode) ? null : readable, {
-        status: res.statusCode,
-        // eslint-disable-next-line @typescript-eslint/no-explicit-any
-        headers: (res as any).headers,
-      });
-    },
-  };
 }
diff --git a/packages/cloudflare/tsconfig.json b/packages/cloudflare/tsconfig.json
index b28f0e5ff..7dc2dcd4e 100644
--- a/packages/cloudflare/tsconfig.json
+++ b/packages/cloudflare/tsconfig.json
@@ -2,17 +2,18 @@
   "$schema": "https://json.schemastore.org/tsconfig",
   "extends": "@tsconfig/strictest/tsconfig.json",
   "compilerOptions": {
-    "target": "ESNext",
-    "module": "ESNext",
-    "lib": ["ESNext"],
-    "moduleResolution": "Bundler",
-
-    "types": ["@cloudflare/workers-types"],
-
+    "declaration": true,
+    "esModuleInterop": true,
+    "exactOptionalPropertyTypes": false,
     "forceConsistentCasingInFileNames": true,
+    "lib": ["ESNext"],
+    "module": "ESNext",
+    "moduleResolution": "node",
     "noImplicitReturns": false,
-    "exactOptionalPropertyTypes": false
+    "noPropertyAccessFromIndexSignature": false,
+    "outDir": "./dist",
+    "target": "ES2022",
+    "types": ["@cloudflare/workers-types"]
   },
-  "include": ["**/*.ts"],
-  "exclude": ["dist"]
+  "include": ["src/**/*.ts"]
 }
diff --git a/packages/cloudflare/tsup.config.ts b/packages/cloudflare/tsup.config.ts
deleted file mode 100644
index 239e67835..000000000
--- a/packages/cloudflare/tsup.config.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { cp } from "node:fs/promises";
-
-import { defineConfig } from "tsup";
-
-const cliConfig = defineConfig({
-  entry: ["src/cli/index.ts"],
-  outDir: "dist/cli",
-  dts: false,
-  format: ["esm"],
-  platform: "node",
-  external: ["esbuild"],
-  clean: true,
-  onSuccess: async () => {
-    await cp(`${__dirname}/src/cli/constants`, `${__dirname}/dist/cli/constants`, {
-      recursive: true,
-    });
-    await cp(`${__dirname}/src/cli/templates`, `${__dirname}/dist/cli/templates`, {
-      recursive: true,
-    });
-  },
-});
-
-const apiConfig = defineConfig({
-  entry: ["src/api"],
-  outDir: "dist/api",
-  dts: true,
-  format: ["esm"],
-  platform: "node",
-  external: ["server-only"],
-  clean: true,
-});
-
-export default [cliConfig, apiConfig];
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2e379814e..75480e704 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,6 +9,9 @@ catalogs:
     '@cloudflare/workers-types':
       specifier: ^4.20240925.0
       version: 4.20240925.0
+    '@dotenvx/dotenvx':
+      specifier: 1.31.0
+      version: 1.31.0
     '@eslint/js':
       specifier: ^9.11.1
       version: 9.11.1
@@ -18,6 +21,9 @@ catalogs:
     '@tsconfig/strictest':
       specifier: ^2.0.5
       version: 2.0.5
+    '@types/mock-fs':
+      specifier: ^4.13.4
+      version: 4.13.4
     '@types/node':
       specifier: ^22.2.0
       version: 22.2.0
@@ -33,6 +39,12 @@ catalogs:
     eslint:
       specifier: ^9.11.1
       version: 9.11.1
+    eslint-plugin-import:
+      specifier: ^2.31.0
+      version: 2.31.0
+    eslint-plugin-simple-import-sort:
+      specifier: ^12.1.1
+      version: 12.1.1
     eslint-plugin-unicorn:
       specifier: ^55.0.0
       version: 55.0.0
@@ -42,6 +54,9 @@ catalogs:
     globals:
       specifier: ^15.9.0
       version: 15.9.0
+    mock-fs:
+      specifier: ^5.4.1
+      version: 5.4.1
     next:
       specifier: 14.2.11
       version: 14.2.11
@@ -54,12 +69,12 @@ catalogs:
     react-dom:
       specifier: ^18
       version: 18.3.1
+    rimraf:
+      specifier: ^6.0.1
+      version: 6.0.1
     ts-morph:
       specifier: ^23.0.0
       version: 23.0.0
-    tsup:
-      specifier: ^8.2.4
-      version: 8.2.4
     tsx:
       specifier: ^4.19.2
       version: 4.19.2
@@ -73,8 +88,8 @@ catalogs:
       specifier: ^2.1.1
       version: 2.1.1
     wrangler:
-      specifier: ^3.78.10
-      version: 3.78.10
+      specifier: ^3.99.0
+      version: 3.99.0
 
 importers:
 
@@ -131,7 +146,7 @@ importers:
         version: 22.2.0
       wrangler:
         specifier: 'catalog:'
-        version: 3.78.10(@cloudflare/workers-types@4.20240925.0)
+        version: 3.99.0(@cloudflare/workers-types@4.20240925.0)
 
   examples/create-next-app:
     dependencies:
@@ -177,7 +192,44 @@ importers:
         version: 5.5.4
       wrangler:
         specifier: 'catalog:'
-        version: 3.78.10(@cloudflare/workers-types@4.20240925.0)
+        version: 3.99.0(@cloudflare/workers-types@4.20240925.0)
+
+  examples/middleware:
+    dependencies:
+      next:
+        specifier: 'catalog:'
+        version: 14.2.11(@playwright/test@1.47.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      react:
+        specifier: 'catalog:'
+        version: 18.3.1
+      react-dom:
+        specifier: 'catalog:'
+        version: 18.3.1(react@18.3.1)
+    devDependencies:
+      '@opennextjs/cloudflare':
+        specifier: workspace:*
+        version: link:../../packages/cloudflare
+      '@playwright/test':
+        specifier: 'catalog:'
+        version: 1.47.0
+      '@types/node':
+        specifier: 'catalog:'
+        version: 22.2.0
+      '@types/react':
+        specifier: 'catalog:'
+        version: 18.3.3
+      '@types/react-dom':
+        specifier: 'catalog:'
+        version: 18.3.0
+      eslint:
+        specifier: 'catalog:'
+        version: 9.11.1(jiti@1.21.6)
+      typescript:
+        specifier: 'catalog:'
+        version: 5.5.4
+      wrangler:
+        specifier: 'catalog:'
+        version: 3.99.0(@cloudflare/workers-types@4.20240925.0)
 
   examples/vercel-blog-starter:
     dependencies:
@@ -262,7 +314,7 @@ importers:
         version: 1.5.0(react-dom@19.0.0-rc-3208e73e-20240730(react@19.0.0-rc-3208e73e-20240730))(react@19.0.0-rc-3208e73e-20240730)
       wrangler:
         specifier: 'catalog:'
-        version: 3.78.10(@cloudflare/workers-types@4.20240925.0)
+        version: 3.99.0(@cloudflare/workers-types@4.20240925.0)
     devDependencies:
       '@opennextjs/cloudflare':
         specifier: workspace:*
@@ -303,12 +355,21 @@ importers:
 
   packages/cloudflare:
     dependencies:
+      '@dotenvx/dotenvx':
+        specifier: 'catalog:'
+        version: 1.31.0
+      '@opennextjs/aws':
+        specifier: https://pkg.pr.new/@opennextjs/aws@684
+        version: https://pkg.pr.new/@opennextjs/aws@684
+      rimraf:
+        specifier: 'catalog:'
+        version: 6.0.1
       ts-morph:
         specifier: 'catalog:'
         version: 23.0.0
       wrangler:
         specifier: 'catalog:'
-        version: 3.78.10(@cloudflare/workers-types@4.20240925.0)
+        version: 3.99.0(@cloudflare/workers-types@4.20240925.0)
     devDependencies:
       '@cloudflare/workers-types':
         specifier: 'catalog:'
@@ -319,6 +380,9 @@ importers:
       '@tsconfig/strictest':
         specifier: 'catalog:'
         version: 2.0.5
+      '@types/mock-fs':
+        specifier: 'catalog:'
+        version: 4.13.4
       '@types/node':
         specifier: 'catalog:'
         version: 22.2.0
@@ -329,10 +393,10 @@ importers:
         specifier: 'catalog:'
         version: 9.11.1(jiti@1.21.6)
       eslint-plugin-import:
-        specifier: ^2.31.0
+        specifier: 'catalog:'
         version: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))
       eslint-plugin-simple-import-sort:
-        specifier: ^12.1.1
+        specifier: 'catalog:'
         version: 12.1.1(eslint@9.11.1(jiti@1.21.6))
       eslint-plugin-unicorn:
         specifier: 'catalog:'
@@ -343,15 +407,15 @@ importers:
       globals:
         specifier: 'catalog:'
         version: 15.9.0
+      mock-fs:
+        specifier: 'catalog:'
+        version: 5.4.1
       next:
         specifier: 'catalog:'
         version: 14.2.11(@playwright/test@1.47.0)(react-dom@19.0.0-rc-3208e73e-20240730(react@19.0.0-rc-3208e73e-20240730))(react@19.0.0-rc-3208e73e-20240730)
       package-manager-detector:
         specifier: 'catalog:'
         version: 0.2.0
-      tsup:
-        specifier: 'catalog:'
-        version: 8.2.4(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.5.4)(yaml@2.5.1)
       typescript:
         specifier: 'catalog:'
         version: 5.5.4
@@ -368,6 +432,193 @@ packages:
     resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
     engines: {node: '>=10'}
 
+  '@aws-crypto/crc32@5.2.0':
+    resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-crypto/crc32c@5.2.0':
+    resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==}
+
+  '@aws-crypto/sha1-browser@5.2.0':
+    resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==}
+
+  '@aws-crypto/sha256-browser@5.2.0':
+    resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==}
+
+  '@aws-crypto/sha256-js@5.2.0':
+    resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-crypto/supports-web-crypto@5.2.0':
+    resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==}
+
+  '@aws-crypto/util@5.2.0':
+    resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
+
+  '@aws-sdk/client-dynamodb@3.716.0':
+    resolution: {integrity: sha512-/brlrkp5ShSgxSmzj1b7S6ds7iYpqnTlwxdX0ld+bIRrFJH2PS91CAuT1rZiqLG9rarWfk3Of5G0BrclroVnhA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/client-lambda@3.716.0':
+    resolution: {integrity: sha512-pWcnLQFbG4/xmzq7614YBz6Kbx3Skm3yuQOhac9y163hSmey1bfFdr1bZ+FcxquHbRb5KNvhU1RGmwmNVxsOfg==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/client-s3@3.716.0':
+    resolution: {integrity: sha512-B49DwXnZS9GjjV+auIuqnCx86cqpACd//4mC5AXb5MsrLJJ6bPE/U2T+C/0NqUTfb31aqYbZ/cwhJELvpDU9mA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/client-sqs@3.716.0':
+    resolution: {integrity: sha512-nDpnXvmo65dDGw+/c/c6e/ic9HUvJRayzs9Rc4DdatsnAZE71gcWoLUBupJ/IOkNwgoVau0TDs9SRlmsuDsm1w==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/client-sso-oidc@3.716.0':
+    resolution: {integrity: sha512-lA4IB9FzR2KjH7EVCo+mHGFKqdViVyeBQEIX9oVratL/l7P0bMS1fMwgfHOc3ACazqNxBxDES7x08ZCp32y6Lw==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      '@aws-sdk/client-sts': ^3.716.0
+
+  '@aws-sdk/client-sso@3.716.0':
+    resolution: {integrity: sha512-5Nb0jJXce2TclbjG7WVPufwhgV1TRydz1QnsuBtKU0AdViEpr787YrZhPpGnNIM1Dx+R1H/tmAHZnOoohS6D8g==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/client-sts@3.716.0':
+    resolution: {integrity: sha512-i4SVNsrdXudp8T4bkm7Fi3YWlRnvXCSwvNDqf6nLqSJxqr4CN3VlBELueDyjBK7TAt453/qSif+eNx+bHmwo4Q==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/core@3.716.0':
+    resolution: {integrity: sha512-5DkUiTrbyzO8/W4g7UFEqRFpuhgizayHI/Zbh0wtFMcot8801nJV+MP/YMhdjimlvAr/OqYB08FbGsPyWppMTw==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/credential-provider-env@3.716.0':
+    resolution: {integrity: sha512-JI2KQUnn2arICwP9F3CnqP1W3nAbm4+meQg/yOhp9X0DMzQiHrHRd4HIrK2vyVgi2/6hGhONY5uLF26yRTA7nQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/credential-provider-http@3.716.0':
+    resolution: {integrity: sha512-CZ04pl2z7igQPysQyH2xKZHM3fLwkemxQbKOlje3TmiS1NwXvcKvERhp9PE/H23kOL7beTM19NMRog/Fka/rlw==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/credential-provider-ini@3.716.0':
+    resolution: {integrity: sha512-P37We2GtZvdROxiwP0zrpEL81/HuYK1qlYxp5VCj3uV+G4mG8UQN2gMIU/baYrpOQqa0h81RfyQGRFUjVaDVqw==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      '@aws-sdk/client-sts': ^3.716.0
+
+  '@aws-sdk/credential-provider-node@3.716.0':
+    resolution: {integrity: sha512-FGQPK2uKfS53dVvoskN/s/t6m0Po24BGd1PzJdzHBFCOjxbZLM6+8mDMXeyi2hCLVVQOUcuW41kOgmJ0+zMbww==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/credential-provider-process@3.716.0':
+    resolution: {integrity: sha512-0spcu2MWVVHSTHH3WE2E//ttUJPwXRM3BCp+WyI41xLzpNu1Fd8zjOrDpEo0SnGUzsSiRTIJWgkuu/tqv9NJ2A==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/credential-provider-sso@3.716.0':
+    resolution: {integrity: sha512-J2IA3WuCpRGGoZm6VHZVFCnrxXP+41iUWb9Ct/1spljegTa1XjiaZ5Jf3+Ubj7WKiyvP9/dgz1L0bu2bYEjliw==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/credential-provider-web-identity@3.716.0':
+    resolution: {integrity: sha512-vzgpWKs2gGXZGdbMKRFrMW4PqEFWkGvwWH2T7ZwQv9m+8lQ7P4Dk2uimqu0f37HZAbpn8HFMqRh4CaySjU354A==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      '@aws-sdk/client-sts': ^3.716.0
+
+  '@aws-sdk/endpoint-cache@3.693.0':
+    resolution: {integrity: sha512-/zK0ZZncBf5FbTfo8rJMcQIXXk4Ibhe5zEMiwFNivVPR2uNC0+oqfwXz7vjxwY0t6BPE3Bs4h9uFEz4xuGCY6w==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-bucket-endpoint@3.714.0':
+    resolution: {integrity: sha512-I/xSOskiseJJ8i183Z522BgqbgYzLKP7jGcg2Qeib/IWoG2IP+9DH8pwqagKaPAycyswtnoKBJiiFXY43n0CkA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-endpoint-discovery@3.714.0':
+    resolution: {integrity: sha512-WttOa+M6/aPCK0OHPlWPBaQDTVhfKsWYnmDNvS2d0qvoJEjZuGRyf5DxcA2gWt3MMekxwq9IxOpdA5R9T70HiA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-expect-continue@3.714.0':
+    resolution: {integrity: sha512-rlzsXdG8Lzo4Qpl35ZnpOBAWlzvDHpP9++0AXoUwAJA0QmMm7auIRmgxJuNj91VwT9h15ZU6xjU4S7fJl4W0+w==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-flexible-checksums@3.716.0':
+    resolution: {integrity: sha512-1j8PoBYyn0oQlRhPPzOnqf0sdXO0x34pG19cMC0a7cv+En17m7W44BtVplFPRKpGfto3DU5frozV+wu8d9v/hQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-host-header@3.714.0':
+    resolution: {integrity: sha512-6l68kjNrh5QC8FGX3I3geBDavWN5Tg1RLHJ2HLA8ByGBtJyCwnz3hEkKfaxn0bBx0hF9DzbfjEOUF6cDqy2Kjg==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-location-constraint@3.714.0':
+    resolution: {integrity: sha512-MX7M+V+FblujKck3fyuzePVIAy9530gY719IiSxV6uN1qLHl7VDJxNblpF/KpXakD6rOg8OpvtmqsXj9aBMftw==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-logger@3.714.0':
+    resolution: {integrity: sha512-RkqHlMvQWUaRklU1bMfUuBvdWwxgUtEqpADaHXlGVj3vtEY2UgBjy+57CveC4MByqKIunNvVHBBbjrGVtwY7Lg==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-recursion-detection@3.714.0':
+    resolution: {integrity: sha512-AVU5ixnh93nqtsfgNc284oXsXaadyHGPHpql/jwgaaqQfEXjS/1/j3j9E/vpacfTTz2Vzo7hAOjnvrOXSEVDaA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-sdk-s3@3.716.0':
+    resolution: {integrity: sha512-Qzz5OfRA/5brqfvq+JHTInwS1EuJ1+tC6qMtwKWJN3czMnVJVdnnsPTf+G5IM/1yYaGEIjY8rC1ExQLcc8ApFQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-sdk-sqs@3.716.0':
+    resolution: {integrity: sha512-dAkFlLv4W0GO9lP419eXxFZ7UgO/mTGC/WlS6OYrSDFemzySSpxE+PNL6Eg2rqVNLiwhW4U9+6e8CC8RE++lEQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-ssec@3.714.0':
+    resolution: {integrity: sha512-RkK8REAVwNUQmYbIDRw8eYbMJ8F1Rw4C9mlME4BBMhFlelGcD3ErU2ce24moQbDxBjNwHNESmIqgmdQk93CDCQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/middleware-user-agent@3.716.0':
+    resolution: {integrity: sha512-FpAtT6nNKrYdkDZndutEraiRMf+TgDzAGvniqRtZ/YTPA+gIsWrsn+TwMKINR81lFC3nQfb9deS5CFtxd021Ew==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/region-config-resolver@3.714.0':
+    resolution: {integrity: sha512-HJzsQxgMOAzZrbf/YIqEx30or4tZK1oNAk6Wm6xecUQx+23JXIaePRu1YFUOLBBERQ4QBPpISFurZWBMZ5ibAw==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/signature-v4-multi-region@3.716.0':
+    resolution: {integrity: sha512-k0goWotZKKz+kV6Ln0qeAMSeSVi4NipuIIz5R8A0uCF2zBK4CXWdZR7KeaIoLBhJwQnHj1UU7E+2MK74KIUBzA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/token-providers@3.714.0':
+    resolution: {integrity: sha512-vKN064aLE3kl+Zl16Ony3jltHnMddMBT7JRkP1L+lLywhA0PcAKxpdvComul/sTBWnbnwLnaS5NsDUhcWySH8A==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      '@aws-sdk/client-sso-oidc': ^3.714.0
+
+  '@aws-sdk/types@3.714.0':
+    resolution: {integrity: sha512-ZjpP2gYbSFlxxaUDa1Il5AVvfggvUPbjzzB/l3q0gIE5Thd6xKW+yzEpt2mLZ5s5UaYSABZbF94g8NUOF4CVGA==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/util-arn-parser@3.693.0':
+    resolution: {integrity: sha512-WC8x6ca+NRrtpAH64rWu+ryDZI3HuLwlEr8EU6/dbC/pt+r/zC0PBoC15VEygUaBA+isppCikQpGyEDu0Yj7gQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/util-endpoints@3.714.0':
+    resolution: {integrity: sha512-Xv+Z2lhe7w7ZZRsgBwBMZgGTVmS+dkkj2S13uNHAx9lhB5ovM8PhK5G/j28xYf6vIibeuHkRAbb7/ozdZIGR+A==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/util-locate-window@3.693.0':
+    resolution: {integrity: sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==}
+    engines: {node: '>=16.0.0'}
+
+  '@aws-sdk/util-user-agent-browser@3.714.0':
+    resolution: {integrity: sha512-OdJJ03cP9/MgIVToPJPCPUImbpZzTcwdIgbXC0tUQPJhbD7b7cB4LdnkhNHko+MptpOrCq4CPY/33EpOjRdofw==}
+
+  '@aws-sdk/util-user-agent-node@3.716.0':
+    resolution: {integrity: sha512-3PqaXmQbxrtHKAsPCdp7kn5FrQktj8j3YyuNsqFZ8rWZeEQ88GWlsvE61PTsr2peYCKzpFqYVddef2x1axHU0w==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      aws-crt: '>=1.0.0'
+    peerDependenciesMeta:
+      aws-crt:
+        optional: true
+
+  '@aws-sdk/xml-builder@3.709.0':
+    resolution: {integrity: sha512-2GPCwlNxeHspoK/Mc8nbk9cBOkSpp3j2SJUQmFnyQK6V/pR6II2oPRyZkMomug1Rc10hqlBHByMecq4zhV2uUw==}
+    engines: {node: '>=16.0.0'}
+
   '@babel/code-frame@7.24.7':
     resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==}
     engines: {node: '>=6.9.0'}
@@ -443,22 +694,16 @@ packages:
     resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==}
     engines: {node: '>=16.13'}
 
-  '@cloudflare/workerd-darwin-64@1.20240925.0':
-    resolution: {integrity: sha512-KdLnSXuzB65CbqZPm+qYzk+zkQ1tUNPaaRGYVd/jPYAxwwtfTUQdQ+ahDPwVVs2tmQELKy7ZjQjf2apqSWUfjw==}
-    engines: {node: '>=16'}
-    cpu: [x64]
-    os: [darwin]
-
   '@cloudflare/workerd-darwin-64@1.20241004.0':
     resolution: {integrity: sha512-c2afR486NXDRcPm7RaTSRDnffFklPCXde/IeNVhEhBJ8O+pQhBOdDcGIy8zXPwMu0CYga0iHNZmpbsl+ZcHttA==}
     engines: {node: '>=16'}
     cpu: [x64]
     os: [darwin]
 
-  '@cloudflare/workerd-darwin-arm64@1.20240925.0':
-    resolution: {integrity: sha512-MiQ6uUmCXjsXgWNV+Ock2tp2/tYqNJGzjuaH6jFioeRF+//mz7Tv7J7EczOL4zq+TH8QFOh0/PUsLyazIWVGng==}
+  '@cloudflare/workerd-darwin-64@1.20241218.0':
+    resolution: {integrity: sha512-8rveQoxtUvlmORKqTWgjv2ycM8uqWox0u9evn3zd2iWKdou5sncFwH517ZRLI3rq9P31ZLmCQBZ0gloFsTeY6w==}
     engines: {node: '>=16'}
-    cpu: [arm64]
+    cpu: [x64]
     os: [darwin]
 
   '@cloudflare/workerd-darwin-arm64@1.20241004.0':
@@ -467,11 +712,11 @@ packages:
     cpu: [arm64]
     os: [darwin]
 
-  '@cloudflare/workerd-linux-64@1.20240925.0':
-    resolution: {integrity: sha512-Rjix8jsJMfsInmq3Hm3fmiRQ+rwzuWRPV1pg/OWhMSfNP7Qp2RCU+RGkhgeR9Z5eNAje0Sn2BMrFq4RvF9/yRA==}
+  '@cloudflare/workerd-darwin-arm64@1.20241218.0':
+    resolution: {integrity: sha512-be59Ad9nmM9lCkhHqmTs/uZ3JVZt8NJ9Z0PY+B0xnc5z6WwmV2lj0RVLtq7xJhQsQJA189zt5rXqDP6J+2mu7Q==}
     engines: {node: '>=16'}
-    cpu: [x64]
-    os: [linux]
+    cpu: [arm64]
+    os: [darwin]
 
   '@cloudflare/workerd-linux-64@1.20241004.0':
     resolution: {integrity: sha512-EtKGXO5fzRgX6UhDDLhjjEsB1QtliHb12zavZ/S0C8hKPz76II7MQ3Lls9kfB62fbdMP8L6vcqWPObEUcw6GSw==}
@@ -479,10 +724,10 @@ packages:
     cpu: [x64]
     os: [linux]
 
-  '@cloudflare/workerd-linux-arm64@1.20240925.0':
-    resolution: {integrity: sha512-VYIPeMHQRtbwQoIjUwS/zULlywPxyDvo46XkTpIW5MScEChfqHvAYviQ7TzYGx6Q+gmZmN+DUB2KOMx+MEpCxA==}
+  '@cloudflare/workerd-linux-64@1.20241218.0':
+    resolution: {integrity: sha512-MzpSBcfZXRxrYWxQ4pVDYDrUbkQuM62ssl4ZtHH8J35OAeGsWFAYji6MkS2SpVwVcvacPwJXIF4JSzp4xKImKw==}
     engines: {node: '>=16'}
-    cpu: [arm64]
+    cpu: [x64]
     os: [linux]
 
   '@cloudflare/workerd-linux-arm64@1.20241004.0':
@@ -491,11 +736,11 @@ packages:
     cpu: [arm64]
     os: [linux]
 
-  '@cloudflare/workerd-windows-64@1.20240925.0':
-    resolution: {integrity: sha512-C8peGvaU5R51bIySi1VbyfRgwNSSRknqoFSnSbSBI3uTN3THTB3UnmRKy7GXJDmyjgXuT9Pcs1IgaWNubLtNtw==}
+  '@cloudflare/workerd-linux-arm64@1.20241218.0':
+    resolution: {integrity: sha512-RIuJjPxpNqvwIs52vQsXeRMttvhIjgg9NLjjFa3jK8Ijnj8c3ZDru9Wqi48lJP07yDFIRr4uDMMqh/y29YQi2A==}
     engines: {node: '>=16'}
-    cpu: [x64]
-    os: [win32]
+    cpu: [arm64]
+    os: [linux]
 
   '@cloudflare/workerd-windows-64@1.20241004.0':
     resolution: {integrity: sha512-o+TmCYGq58jNUDbG73xOvd648XvJ2TicI++2BBoySklJXG6f4But5AwA8TxQgmeujR3vpBjPZKexEzcZSUOTtA==}
@@ -503,9 +748,11 @@ packages:
     cpu: [x64]
     os: [win32]
 
-  '@cloudflare/workers-shared@0.5.4':
-    resolution: {integrity: sha512-PNL/0TjKRdUHa1kwgVdqUNJVZ9ez4kacsi8omz+gv859EvJmsVuGiMAClY2YfJnC9LVKhKCcjqmFgKNXG9/IXA==}
-    engines: {node: '>=16.7.0'}
+  '@cloudflare/workerd-windows-64@1.20241218.0':
+    resolution: {integrity: sha512-tO1VjlvK3F6Yb2d1jgEy/QBYl//9Pyv3K0j+lq8Eu7qdfm0IgKwSRgDWLept84/qmNsQfausZ4JdNGxTf9xsxQ==}
+    engines: {node: '>=16'}
+    cpu: [x64]
+    os: [win32]
 
   '@cloudflare/workers-shared@0.6.0':
     resolution: {integrity: sha512-rfUCvb3hx4AsvdUZsxgk9lmgEnQehqV3jdtXLP/Xr0+P56n11T/0nXNMzmn7Nnv+IJFOV6X9NmFhuMz4sBPw7w==}
@@ -518,6 +765,16 @@ packages:
     resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
     engines: {node: '>=12'}
 
+  '@dotenvx/dotenvx@1.31.0':
+    resolution: {integrity: sha512-GeDxvtjiRuoyWVU9nQneId879zIyNdL05bS7RKiqMkfBSKpHMWHLoRyRqjYWLaXmX/llKO1hTlqHDmatkQAjPA==}
+    hasBin: true
+
+  '@ecies/ciphers@0.2.2':
+    resolution: {integrity: sha512-ylfGR7PyTd+Rm2PqQowG08BCKA22QuX8NzrL+LxAAvazN10DMwdJ2fWwAzRj05FI/M8vNFGm3cv9Wq/GFWCBLg==}
+    engines: {bun: '>=1', deno: '>=2', node: '>=16'}
+    peerDependencies:
+      '@noble/ciphers': ^1.0.0
+
   '@emnapi/runtime@1.2.0':
     resolution: {integrity: sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==}
 
@@ -531,6 +788,11 @@ packages:
     peerDependencies:
       esbuild: '*'
 
+  '@esbuild-plugins/node-resolve@0.2.2':
+    resolution: {integrity: sha512-+t5FdX3ATQlb53UFDBRb4nqjYBz492bIrnVWvpQHpzZlu9BQL5HasMZhqc409ygUwOWCXZhrWr6NyZ6T6Y+cxw==}
+    peerDependencies:
+      esbuild: '*'
+
   '@esbuild/aix-ppc64@0.21.5':
     resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
     engines: {node: '>=12'}
@@ -549,6 +811,12 @@ packages:
     cpu: [arm64]
     os: [android]
 
+  '@esbuild/android-arm64@0.19.2':
+    resolution: {integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+
   '@esbuild/android-arm64@0.21.5':
     resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
     engines: {node: '>=12'}
@@ -567,6 +835,12 @@ packages:
     cpu: [arm]
     os: [android]
 
+  '@esbuild/android-arm@0.19.2':
+    resolution: {integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+
   '@esbuild/android-arm@0.21.5':
     resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
     engines: {node: '>=12'}
@@ -585,6 +859,12 @@ packages:
     cpu: [x64]
     os: [android]
 
+  '@esbuild/android-x64@0.19.2':
+    resolution: {integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+
   '@esbuild/android-x64@0.21.5':
     resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
     engines: {node: '>=12'}
@@ -603,6 +883,12 @@ packages:
     cpu: [arm64]
     os: [darwin]
 
+  '@esbuild/darwin-arm64@0.19.2':
+    resolution: {integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+
   '@esbuild/darwin-arm64@0.21.5':
     resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
     engines: {node: '>=12'}
@@ -621,6 +907,12 @@ packages:
     cpu: [x64]
     os: [darwin]
 
+  '@esbuild/darwin-x64@0.19.2':
+    resolution: {integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+
   '@esbuild/darwin-x64@0.21.5':
     resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
     engines: {node: '>=12'}
@@ -639,6 +931,12 @@ packages:
     cpu: [arm64]
     os: [freebsd]
 
+  '@esbuild/freebsd-arm64@0.19.2':
+    resolution: {integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+
   '@esbuild/freebsd-arm64@0.21.5':
     resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
     engines: {node: '>=12'}
@@ -657,6 +955,12 @@ packages:
     cpu: [x64]
     os: [freebsd]
 
+  '@esbuild/freebsd-x64@0.19.2':
+    resolution: {integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+
   '@esbuild/freebsd-x64@0.21.5':
     resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
     engines: {node: '>=12'}
@@ -675,6 +979,12 @@ packages:
     cpu: [arm64]
     os: [linux]
 
+  '@esbuild/linux-arm64@0.19.2':
+    resolution: {integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+
   '@esbuild/linux-arm64@0.21.5':
     resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
     engines: {node: '>=12'}
@@ -693,6 +1003,12 @@ packages:
     cpu: [arm]
     os: [linux]
 
+  '@esbuild/linux-arm@0.19.2':
+    resolution: {integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+
   '@esbuild/linux-arm@0.21.5':
     resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
     engines: {node: '>=12'}
@@ -711,6 +1027,12 @@ packages:
     cpu: [ia32]
     os: [linux]
 
+  '@esbuild/linux-ia32@0.19.2':
+    resolution: {integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+
   '@esbuild/linux-ia32@0.21.5':
     resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
     engines: {node: '>=12'}
@@ -729,6 +1051,12 @@ packages:
     cpu: [loong64]
     os: [linux]
 
+  '@esbuild/linux-loong64@0.19.2':
+    resolution: {integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+
   '@esbuild/linux-loong64@0.21.5':
     resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
     engines: {node: '>=12'}
@@ -747,6 +1075,12 @@ packages:
     cpu: [mips64el]
     os: [linux]
 
+  '@esbuild/linux-mips64el@0.19.2':
+    resolution: {integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+
   '@esbuild/linux-mips64el@0.21.5':
     resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
     engines: {node: '>=12'}
@@ -765,6 +1099,12 @@ packages:
     cpu: [ppc64]
     os: [linux]
 
+  '@esbuild/linux-ppc64@0.19.2':
+    resolution: {integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+
   '@esbuild/linux-ppc64@0.21.5':
     resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
     engines: {node: '>=12'}
@@ -783,6 +1123,12 @@ packages:
     cpu: [riscv64]
     os: [linux]
 
+  '@esbuild/linux-riscv64@0.19.2':
+    resolution: {integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+
   '@esbuild/linux-riscv64@0.21.5':
     resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
     engines: {node: '>=12'}
@@ -801,6 +1147,12 @@ packages:
     cpu: [s390x]
     os: [linux]
 
+  '@esbuild/linux-s390x@0.19.2':
+    resolution: {integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+
   '@esbuild/linux-s390x@0.21.5':
     resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
     engines: {node: '>=12'}
@@ -819,6 +1171,12 @@ packages:
     cpu: [x64]
     os: [linux]
 
+  '@esbuild/linux-x64@0.19.2':
+    resolution: {integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+
   '@esbuild/linux-x64@0.21.5':
     resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
     engines: {node: '>=12'}
@@ -837,6 +1195,12 @@ packages:
     cpu: [x64]
     os: [netbsd]
 
+  '@esbuild/netbsd-x64@0.19.2':
+    resolution: {integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+
   '@esbuild/netbsd-x64@0.21.5':
     resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
     engines: {node: '>=12'}
@@ -861,6 +1225,12 @@ packages:
     cpu: [x64]
     os: [openbsd]
 
+  '@esbuild/openbsd-x64@0.19.2':
+    resolution: {integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+
   '@esbuild/openbsd-x64@0.21.5':
     resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
     engines: {node: '>=12'}
@@ -879,6 +1249,12 @@ packages:
     cpu: [x64]
     os: [sunos]
 
+  '@esbuild/sunos-x64@0.19.2':
+    resolution: {integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+
   '@esbuild/sunos-x64@0.21.5':
     resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
     engines: {node: '>=12'}
@@ -897,6 +1273,12 @@ packages:
     cpu: [arm64]
     os: [win32]
 
+  '@esbuild/win32-arm64@0.19.2':
+    resolution: {integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+
   '@esbuild/win32-arm64@0.21.5':
     resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
     engines: {node: '>=12'}
@@ -915,6 +1297,12 @@ packages:
     cpu: [ia32]
     os: [win32]
 
+  '@esbuild/win32-ia32@0.19.2':
+    resolution: {integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+
   '@esbuild/win32-ia32@0.21.5':
     resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
     engines: {node: '>=12'}
@@ -933,6 +1321,12 @@ packages:
     cpu: [x64]
     os: [win32]
 
+  '@esbuild/win32-x64@0.19.2':
+    resolution: {integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+
   '@esbuild/win32-x64@0.21.5':
     resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
     engines: {node: '>=12'}
@@ -1301,16 +1695,44 @@ packages:
     cpu: [x64]
     os: [win32]
 
-  '@nodelib/fs.scandir@2.1.5':
-    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
-    engines: {node: '>= 8'}
+  '@noble/ciphers@1.1.3':
+    resolution: {integrity: sha512-Ygv6WnWJHLLiW4fnNDC1z+i13bud+enXOFRBlpxI+NJliPWx5wdR+oWlTjLuBPTqjUjtHXtjkU6w3kuuH6upZA==}
+    engines: {node: ^14.21.3 || >=16}
 
-  '@nodelib/fs.stat@2.0.5':
-    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
-    engines: {node: '>= 8'}
+  '@noble/curves@1.7.0':
+    resolution: {integrity: sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==}
+    engines: {node: ^14.21.3 || >=16}
 
-  '@nodelib/fs.walk@1.2.8':
-    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+  '@noble/hashes@1.6.0':
+    resolution: {integrity: sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==}
+    engines: {node: ^14.21.3 || >=16}
+
+  '@noble/hashes@1.6.1':
+    resolution: {integrity: sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==}
+    engines: {node: ^14.21.3 || >=16}
+
+  '@node-minify/core@8.0.6':
+    resolution: {integrity: sha512-/vxN46ieWDLU67CmgbArEvOb41zlYFOkOtr9QW9CnTrBLuTyGgkyNWC2y5+khvRw3Br58p2B5ZVSx/PxCTru6g==}
+    engines: {node: '>=16.0.0'}
+
+  '@node-minify/terser@8.0.6':
+    resolution: {integrity: sha512-grQ1ipham743ch2c3++C8Isk6toJnxJSyDiwUI/IWUCh4CZFD6aYVw6UAY40IpCnjrq5aXGwiv5OZJn6Pr0hvg==}
+    engines: {node: '>=16.0.0'}
+
+  '@node-minify/utils@8.0.6':
+    resolution: {integrity: sha512-csY4qcR7jUwiZmkreNTJhcypQfts2aY2CK+a+rXgXUImZiZiySh0FvwHjRnlqWKvg+y6ae9lHFzDRjBTmqlTIQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@nodelib/fs.scandir@2.1.5':
+    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+    engines: {node: '>= 8'}
+
+  '@nodelib/fs.stat@2.0.5':
+    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+    engines: {node: '>= 8'}
+
+  '@nodelib/fs.walk@1.2.8':
+    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
     engines: {node: '>= 8'}
 
   '@nolyfill/is-core-module@1.0.39':
@@ -1373,6 +1795,11 @@ packages:
   '@octokit/types@13.6.1':
     resolution: {integrity: sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==}
 
+  '@opennextjs/aws@https://pkg.pr.new/@opennextjs/aws@684':
+    resolution: {tarball: https://pkg.pr.new/@opennextjs/aws@684}
+    version: 3.3.0
+    hasBin: true
+
   '@pkgjs/parseargs@0.11.0':
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
@@ -1499,6 +1926,209 @@ packages:
   '@rushstack/eslint-patch@1.10.4':
     resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==}
 
+  '@smithy/abort-controller@3.1.9':
+    resolution: {integrity: sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/chunked-blob-reader-native@3.0.1':
+    resolution: {integrity: sha512-VEYtPvh5rs/xlyqpm5NRnfYLZn+q0SRPELbvBV+C/G7IQ+ouTuo+NKKa3ShG5OaFR8NYVMXls9hPYLTvIKKDrQ==}
+
+  '@smithy/chunked-blob-reader@4.0.0':
+    resolution: {integrity: sha512-jSqRnZvkT4egkq/7b6/QRCNXmmYVcHwnJldqJ3IhVpQE2atObVJ137xmGeuGFhjFUr8gCEVAOKwSY79OvpbDaQ==}
+
+  '@smithy/config-resolver@3.0.13':
+    resolution: {integrity: sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/core@2.5.5':
+    resolution: {integrity: sha512-G8G/sDDhXA7o0bOvkc7bgai6POuSld/+XhNnWAbpQTpLv2OZPvyqQ58tLPPlz0bSNsXktldDDREIv1LczFeNEw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/credential-provider-imds@3.2.8':
+    resolution: {integrity: sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/eventstream-codec@3.1.10':
+    resolution: {integrity: sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ==}
+
+  '@smithy/eventstream-serde-browser@3.0.14':
+    resolution: {integrity: sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/eventstream-serde-config-resolver@3.0.11':
+    resolution: {integrity: sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/eventstream-serde-node@3.0.13':
+    resolution: {integrity: sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/eventstream-serde-universal@3.0.13':
+    resolution: {integrity: sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/fetch-http-handler@4.1.2':
+    resolution: {integrity: sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==}
+
+  '@smithy/hash-blob-browser@3.1.10':
+    resolution: {integrity: sha512-elwslXOoNunmfS0fh55jHggyhccobFkexLYC1ZeZ1xP2BTSrcIBaHV2b4xUQOdctrSNOpMqOZH1r2XzWTEhyfA==}
+
+  '@smithy/hash-node@3.0.11':
+    resolution: {integrity: sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/hash-stream-node@3.1.10':
+    resolution: {integrity: sha512-olomK/jZQ93OMayW1zfTHwcbwBdhcZOHsyWyiZ9h9IXvc1mCD/VuvzbLb3Gy/qNJwI4MANPLctTp2BucV2oU/Q==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/invalid-dependency@3.0.11':
+    resolution: {integrity: sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ==}
+
+  '@smithy/is-array-buffer@2.2.0':
+    resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
+    engines: {node: '>=14.0.0'}
+
+  '@smithy/is-array-buffer@3.0.0':
+    resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/md5-js@3.0.11':
+    resolution: {integrity: sha512-3NM0L3i2Zm4bbgG6Ymi9NBcxXhryi3uE8fIfHJZIOfZVxOkGdjdgjR9A06SFIZCfnEIWKXZdm6Yq5/aPXFFhsQ==}
+
+  '@smithy/middleware-content-length@3.0.13':
+    resolution: {integrity: sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/middleware-endpoint@3.2.6':
+    resolution: {integrity: sha512-WAqzyulvvSKrT5c6VrQelgNVNNO7BlTQW9Z+s9tcG6G5CaBS1YBpPtT3VuhXLQbewSiGi7oXQROwpw26EG9PLQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/middleware-retry@3.0.31':
+    resolution: {integrity: sha512-yq9wawrJLYHAYFpChLujxRN4My+SiKXvZk9Ml/CvTdRSA8ew+hvuR5LT+mjSlSBv3c4XJrkN8CWegkBaeD0Vrg==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/middleware-serde@3.0.11':
+    resolution: {integrity: sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/middleware-stack@3.0.11':
+    resolution: {integrity: sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/node-config-provider@3.1.12':
+    resolution: {integrity: sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/node-http-handler@3.3.2':
+    resolution: {integrity: sha512-t4ng1DAd527vlxvOfKFYEe6/QFBcsj7WpNlWTyjorwXXcKw3XlltBGbyHfSJ24QT84nF+agDha9tNYpzmSRZPA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/property-provider@3.1.11':
+    resolution: {integrity: sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/protocol-http@4.1.8':
+    resolution: {integrity: sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/querystring-builder@3.0.11':
+    resolution: {integrity: sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/querystring-parser@3.0.11':
+    resolution: {integrity: sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/service-error-classification@3.0.11':
+    resolution: {integrity: sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/shared-ini-file-loader@3.1.12':
+    resolution: {integrity: sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/signature-v4@4.2.4':
+    resolution: {integrity: sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/smithy-client@3.5.1':
+    resolution: {integrity: sha512-PmjskH4Os1Eh3rd5vSsa5uVelZ4DRu+N5CBEgb9AT96hQSJGWSEb6pGxKV/PtKQSIp9ft3+KvnT8ViMKaguzgA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/types@3.7.2':
+    resolution: {integrity: sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/url-parser@3.0.11':
+    resolution: {integrity: sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw==}
+
+  '@smithy/util-base64@3.0.0':
+    resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-body-length-browser@3.0.0':
+    resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==}
+
+  '@smithy/util-body-length-node@3.0.0':
+    resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-buffer-from@2.2.0':
+    resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
+    engines: {node: '>=14.0.0'}
+
+  '@smithy/util-buffer-from@3.0.0':
+    resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-config-provider@3.0.0':
+    resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-defaults-mode-browser@3.0.31':
+    resolution: {integrity: sha512-eO+zkbqrPnmsagqzrmF7IJrCoU2wTQXWVYxMPqA9Oue55kw9WEvhyuw2XQzTVTCRcYsg6KgmV3YYhLlWQJfK1A==}
+    engines: {node: '>= 10.0.0'}
+
+  '@smithy/util-defaults-mode-node@3.0.31':
+    resolution: {integrity: sha512-0/nJfpSpbGZOs6qs42wCe2TdjobbnnD4a3YUUlvTXSQqLy4qa63luDaV04hGvqSHP7wQ7/WGehbvHkDhMZd1MQ==}
+    engines: {node: '>= 10.0.0'}
+
+  '@smithy/util-endpoints@2.1.7':
+    resolution: {integrity: sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-hex-encoding@3.0.0':
+    resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-middleware@3.0.11':
+    resolution: {integrity: sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-retry@3.0.11':
+    resolution: {integrity: sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-stream@3.3.2':
+    resolution: {integrity: sha512-sInAqdiVeisUGYAv/FrXpmJ0b4WTFmciTRqzhb7wVuem9BHvhIG7tpiYHLDWrl2stOokNZpTTGqz3mzB2qFwXg==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-uri-escape@3.0.0':
+    resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-utf8@2.3.0':
+    resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
+    engines: {node: '>=14.0.0'}
+
+  '@smithy/util-utf8@3.0.0':
+    resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==}
+    engines: {node: '>=16.0.0'}
+
+  '@smithy/util-waiter@3.2.0':
+    resolution: {integrity: sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg==}
+    engines: {node: '>=16.0.0'}
+
   '@swc/counter@0.1.3':
     resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
 
@@ -1530,6 +2160,9 @@ packages:
   '@ts-morph/common@0.24.0':
     resolution: {integrity: sha512-c1xMmNHWpNselmpIqursHeOHHBTIsJLbB+NuovbTTRCNiTLEr/U9dbJ8qy0jd/O2x5pc3seWuOUN5R2IoOTp8A==}
 
+  '@tsconfig/node18@1.0.3':
+    resolution: {integrity: sha512-RbwvSJQsuN9TB04AQbGULYfOGE/RnSFk/FLQ5b0NmDf5Kx2q/lABZbHQPKCO1vZ6Fiwkplu+yb9pGdLy1iGseQ==}
+
   '@tsconfig/strictest@2.0.5':
     resolution: {integrity: sha512-ec4tjL2Rr0pkZ5hww65c+EEPYwxOi4Ryv+0MtjeaSQRJyq322Q27eOQiFbuNgw2hpL4hB1/W/HBGk3VKS43osg==}
 
@@ -1554,6 +2187,9 @@ packages:
   '@types/mdast@4.0.4':
     resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
 
+  '@types/mock-fs@4.13.4':
+    resolution: {integrity: sha512-mXmM0o6lULPI8z3XNnQCpL0BGxPwx1Ul1wXYEPBGl4efShyxW2Rln0JOPEWGyZaYZMM6OVXM/15zUuFMY52ljg==}
+
   '@types/ms@0.7.34':
     resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
 
@@ -1581,9 +2217,15 @@ packages:
   '@types/react@18.3.3':
     resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
 
+  '@types/resolve@1.20.6':
+    resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+
   '@types/unist@3.0.3':
     resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
 
+  '@types/uuid@9.0.8':
+    resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
+
   '@typescript-eslint/eslint-plugin@8.7.0':
     resolution: {integrity: sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1791,6 +2433,9 @@ packages:
     resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
     engines: {node: '>= 0.4'}
 
+  aws4fetch@1.0.20:
+    resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==}
+
   axe-core@4.10.0:
     resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==}
     engines: {node: '>=4'}
@@ -1819,6 +2464,9 @@ packages:
   blake3-wasm@2.1.5:
     resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
 
+  bowser@2.11.0:
+    resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==}
+
   brace-expansion@1.1.11:
     resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
 
@@ -1841,12 +2489,6 @@ packages:
     resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
     engines: {node: '>=6'}
 
-  bundle-require@5.0.0:
-    resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    peerDependencies:
-      esbuild: '>=0.18'
-
   busboy@1.6.0:
     resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
     engines: {node: '>=10.16.0'}
@@ -1915,6 +2557,10 @@ packages:
     resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
     engines: {node: '>= 8.10.0'}
 
+  chokidar@4.0.1:
+    resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==}
+    engines: {node: '>= 14.16.0'}
+
   ci-info@3.9.0:
     resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
     engines: {node: '>=8'}
@@ -1971,6 +2617,10 @@ packages:
   comma-separated-tokens@2.0.3:
     resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
 
+  commander@11.1.0:
+    resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+    engines: {node: '>=16'}
+
   commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
 
@@ -1984,10 +2634,6 @@ packages:
   confbox@0.1.7:
     resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==}
 
-  consola@3.2.3:
-    resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
-    engines: {node: ^14.18.0 || >=16.10.0}
-
   cookie@0.5.0:
     resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
     engines: {node: '>= 0.6'}
@@ -2031,6 +2677,9 @@ packages:
   date-fns@3.6.0:
     resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
 
+  date-fns@4.1.0:
+    resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
+
   debug@3.2.7:
     resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
     peerDependencies:
@@ -2113,9 +2762,20 @@ packages:
     resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
     engines: {node: '>=6.0.0'}
 
+  dotenv@16.4.7:
+    resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
+    engines: {node: '>=12'}
+
+  duplexer@0.1.2:
+    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+
   eastasianwidth@0.2.0:
     resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
 
+  eciesjs@0.4.12:
+    resolution: {integrity: sha512-DGejvMCihsRAmKRFQiL6KZDE34vWVd0gvXlykFq1aEzJy/rD65AVyAIUZKZOvgvaP9ATQRcHGEZV5DfgrgjA4w==}
+    engines: {bun: '>=1', deno: '>=2', node: '>=16'}
+
   electron-to-chromium@1.5.29:
     resolution: {integrity: sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==}
 
@@ -2178,6 +2838,11 @@ packages:
     engines: {node: '>=12'}
     hasBin: true
 
+  esbuild@0.19.2:
+    resolution: {integrity: sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==}
+    engines: {node: '>=12'}
+    hasBin: true
+
   esbuild@0.21.5:
     resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
     engines: {node: '>=12'}
@@ -2267,16 +2932,6 @@ packages:
       eslint-import-resolver-webpack:
         optional: true
 
-  eslint-plugin-import@2.30.0:
-    resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-
   eslint-plugin-import@2.31.0:
     resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
     engines: {node: '>=4'}
@@ -2418,6 +3073,10 @@ packages:
   fast-levenshtein@2.0.6:
     resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
 
+  fast-xml-parser@4.4.1:
+    resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==}
+    hasBin: true
+
   fastq@1.17.1:
     resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
 
@@ -2564,6 +3223,10 @@ packages:
     resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
     deprecated: Glob versions prior to v9 are no longer supported
 
+  glob@9.3.5:
+    resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
   globals@13.24.0:
     resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
     engines: {node: '>=8'}
@@ -2597,6 +3260,10 @@ packages:
     resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
     engines: {node: '>=6.0'}
 
+  gzip-size@6.0.0:
+    resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
+    engines: {node: '>=10'}
+
   has-bigints@1.0.2:
     resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
 
@@ -2848,9 +3515,16 @@ packages:
   isexe@2.0.0:
     resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
 
+  isexe@3.1.1:
+    resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
+    engines: {node: '>=16'}
+
   iterator.prototype@1.1.2:
     resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
 
+  itty-time@1.0.6:
+    resolution: {integrity: sha512-+P8IZaLLBtFv8hCkIjcymZOp4UJ+xW6bSlQsXGqrkmJh7vSiMFSlNne0mCYagEE0N7HDNR5jJBRxwN0oYv61Rw==}
+
   jackspeak@2.3.6:
     resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
     engines: {node: '>=14'}
@@ -2866,10 +3540,6 @@ packages:
     resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==}
     hasBin: true
 
-  joycon@3.1.1:
-    resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
-    engines: {node: '>=10'}
-
   js-tokens@4.0.0:
     resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
 
@@ -2942,10 +3612,6 @@ packages:
   lines-and-columns@1.2.4:
     resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
 
-  load-tsconfig@0.2.5:
-    resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
   locate-path@5.0.0:
     resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
     engines: {node: '>=8'}
@@ -2963,9 +3629,6 @@ packages:
   lodash.merge@4.6.2:
     resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
 
-  lodash.sortby@4.7.0:
-    resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
-
   lodash.startcase@4.4.0:
     resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
 
@@ -3105,13 +3768,13 @@ packages:
     resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
     engines: {node: '>=4'}
 
-  miniflare@3.20240925.0:
-    resolution: {integrity: sha512-2LmQbKHf0n6ertUKhT+Iltixi53giqDH7P71+wCir3OnGyXIODqYwOECx1mSDNhYThpxM2dav8UdPn6SQiMoXw==}
+  miniflare@3.20241004.0:
+    resolution: {integrity: sha512-QSSmCR2V1AJnnpYwlyLXobKLSGiY1FlAiZYULMdGgOUThV7HJeSysDxsmPmrH+D4GQbmUERnmDdB6M6Rrz7uPg==}
     engines: {node: '>=16.13'}
     hasBin: true
 
-  miniflare@3.20241004.0:
-    resolution: {integrity: sha512-QSSmCR2V1AJnnpYwlyLXobKLSGiY1FlAiZYULMdGgOUThV7HJeSysDxsmPmrH+D4GQbmUERnmDdB6M6Rrz7uPg==}
+  miniflare@3.20241218.0:
+    resolution: {integrity: sha512-spYFDArH0wd+wJSTrzBrWrXJrbyJhRMJa35mat947y1jYhVV8I5V8vnD3LwjfpLr0SaEilojz1OIW7ekmnRe+w==}
     engines: {node: '>=16.13'}
     hasBin: true
 
@@ -3122,6 +3785,10 @@ packages:
   minimatch@3.1.2:
     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
 
+  minimatch@8.0.4:
+    resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
   minimatch@9.0.5:
     resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
     engines: {node: '>=16 || 14 >=14.17'}
@@ -3129,10 +3796,19 @@ packages:
   minimist@1.2.8:
     resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
 
+  minipass@4.2.8:
+    resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
+    engines: {node: '>=8'}
+
   minipass@7.1.2:
     resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
     engines: {node: '>=16 || 14 >=14.17'}
 
+  mkdirp@1.0.4:
+    resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+    engines: {node: '>=10'}
+    hasBin: true
+
   mkdirp@3.0.1:
     resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
     engines: {node: '>=10'}
@@ -3141,6 +3817,13 @@ packages:
   mlly@1.7.1:
     resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
 
+  mnemonist@0.38.3:
+    resolution: {integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==}
+
+  mock-fs@5.4.1:
+    resolution: {integrity: sha512-sz/Q8K1gXXXHR+qr0GZg2ysxCRr323kuN10O7CtQjraJsFDJ4SJ+0I5MzALz7aRp9lHk8Cc/YdsT95h9Ka1aFw==}
+    engines: {node: '>=12.0.0'}
+
   mri@1.2.0:
     resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
     engines: {node: '>=4'}
@@ -3244,6 +3927,10 @@ packages:
     resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
     engines: {node: '>= 0.4'}
 
+  object-treeify@1.1.33:
+    resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==}
+    engines: {node: '>= 10'}
+
   object.assign@4.1.5:
     resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
     engines: {node: '>= 0.4'}
@@ -3264,6 +3951,9 @@ packages:
     resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
     engines: {node: '>= 0.4'}
 
+  obliterator@1.6.1:
+    resolution: {integrity: sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig==}
+
   ohash@1.1.4:
     resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==}
 
@@ -3453,24 +4143,6 @@ packages:
       ts-node:
         optional: true
 
-  postcss-load-config@6.0.1:
-    resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
-    engines: {node: '>= 18'}
-    peerDependencies:
-      jiti: '>=1.21.0'
-      postcss: '>=8.0.9'
-      tsx: ^4.8.1
-      yaml: ^2.4.2
-    peerDependenciesMeta:
-      jiti:
-        optional: true
-      postcss:
-        optional: true
-      tsx:
-        optional: true
-      yaml:
-        optional: true
-
   postcss-nested@6.2.0:
     resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
     engines: {node: '>=12.0'}
@@ -3568,6 +4240,10 @@ packages:
   printable-characters@1.0.42:
     resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==}
 
+  promise.series@0.2.0:
+    resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==}
+    engines: {node: '>=0.12'}
+
   prop-types@15.8.1:
     resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
 
@@ -3636,6 +4312,10 @@ packages:
     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
     engines: {node: '>=8.10.0'}
 
+  readdirp@4.0.2:
+    resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==}
+    engines: {node: '>= 14.16.0'}
+
   reflect.getprototypeof@1.0.6:
     resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
     engines: {node: '>= 0.4'}
@@ -3703,6 +4383,11 @@ packages:
     deprecated: Rimraf versions prior to v4 are no longer supported
     hasBin: true
 
+  rimraf@6.0.1:
+    resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
+    engines: {node: 20 || >=22}
+    hasBin: true
+
   rollup-plugin-inject@3.0.2:
     resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==}
     deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.
@@ -3829,10 +4514,6 @@ packages:
     resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
     engines: {node: '>=0.10.0'}
 
-  source-map@0.8.0-beta.0:
-    resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
-    engines: {node: '>= 8'}
-
   sourcemap-codec@1.4.8:
     resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
     deprecated: Please use @jridgewell/sourcemap-codec instead
@@ -3955,6 +4636,9 @@ packages:
     resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
     engines: {node: '>=8'}
 
+  strnum@1.0.5:
+    resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
+
   styled-jsx@5.1.1:
     resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
     engines: {node: '>= 12.0.0'}
@@ -4059,13 +4743,6 @@ packages:
     resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
     engines: {node: '>=8.0'}
 
-  tr46@1.0.1:
-    resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
-
-  tree-kill@1.2.2:
-    resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
-    hasBin: true
-
   trim-lines@3.0.1:
     resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
 
@@ -4090,25 +4767,6 @@ packages:
   tslib@2.6.3:
     resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
 
-  tsup@8.2.4:
-    resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==}
-    engines: {node: '>=18'}
-    hasBin: true
-    peerDependencies:
-      '@microsoft/api-extractor': ^7.36.0
-      '@swc/core': ^1
-      postcss: ^8.4.12
-      typescript: '>=4.5.0'
-    peerDependenciesMeta:
-      '@microsoft/api-extractor':
-        optional: true
-      '@swc/core':
-        optional: true
-      postcss:
-        optional: true
-      typescript:
-        optional: true
-
   tsx@4.19.2:
     resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==}
     engines: {node: '>=18.0.0'}
@@ -4184,12 +4842,12 @@ packages:
     resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==}
     engines: {node: '>=18.17'}
 
-  unenv-nightly@2.0.0-20240919-125358-9a64854:
-    resolution: {integrity: sha512-XjsgUTrTHR7iw+k/SRTNjh6EQgwpC9voygnoCJo5kh4hKqsSDHUW84MhL9EsHTNfLctvVBHaSw8e2k3R2fKXsQ==}
-
   unenv-nightly@2.0.0-20241009-125958-e8ea22f:
     resolution: {integrity: sha512-hRxmKz1iSVRmuFx/vBdPsx7rX4o7Cas9vdjDNeUeWpQTK2LzU3Xy3Jz0zbo7MJX0bpqo/LEFCA+GPwsbl6zKEQ==}
 
+  unenv-nightly@2.0.0-20241204-140205-a5d5190:
+    resolution: {integrity: sha512-jpmAytLeiiW01pl5bhVn9wYJ4vtiLdhGe10oXlJBuQEX8mxjxO8BlEXGHU4vr4yEikjFP1wsomTHt/CLU8kUwg==}
+
   unified@11.0.5:
     resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
 
@@ -4228,9 +4886,16 @@ packages:
     resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 
+  urlpattern-polyfill@10.0.0:
+    resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==}
+
   util-deprecate@1.0.2:
     resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
 
+  uuid@9.0.1:
+    resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+    hasBin: true
+
   validate-npm-package-license@3.0.4:
     resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
 
@@ -4305,12 +4970,6 @@ packages:
       jsdom:
         optional: true
 
-  webidl-conversions@4.0.2:
-    resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
-
-  whatwg-url@7.1.0:
-    resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
-
   which-boxed-primitive@1.0.2:
     resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
 
@@ -4335,6 +4994,11 @@ packages:
     engines: {node: '>= 8'}
     hasBin: true
 
+  which@4.0.0:
+    resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
+    engines: {node: ^16.13.0 || >=18.0.0}
+    hasBin: true
+
   why-is-node-running@2.3.0:
     resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
     engines: {node: '>=8'}
@@ -4344,32 +5008,32 @@ packages:
     resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
     engines: {node: '>=0.10.0'}
 
-  workerd@1.20240925.0:
-    resolution: {integrity: sha512-/Jj6+yLwfieZGEt3Kx4+5MoufuC3g/8iFaIh4MPBNGJOGYmdSKXvgCqz09m2+tVCYnysRfbq2zcbVxJRBfOCqQ==}
+  workerd@1.20241004.0:
+    resolution: {integrity: sha512-TCFJ7Zw7svR3adg1fnlPWj/yXhjBnQloLEIJqdu57hli/GsgwlbomwrbM3mdMgbS+K9zYeaYqknXiBN0EXk3QQ==}
     engines: {node: '>=16'}
     hasBin: true
 
-  workerd@1.20241004.0:
-    resolution: {integrity: sha512-TCFJ7Zw7svR3adg1fnlPWj/yXhjBnQloLEIJqdu57hli/GsgwlbomwrbM3mdMgbS+K9zYeaYqknXiBN0EXk3QQ==}
+  workerd@1.20241218.0:
+    resolution: {integrity: sha512-7Z3D4vOVChMz9mWDffE299oQxUWm/pbkeAWx1btVamPcAK/2IuoNBhwflWo3jyuKuxvYuFAdIucgYxc8ICqXiA==}
     engines: {node: '>=16'}
     hasBin: true
 
-  wrangler@3.78.10:
-    resolution: {integrity: sha512-Q8Ia0xz0RCzj5X7TMIEQ/EbADSG2cWPmTDRaulGSWnYqfIlFyKoxl7Zx1XXCo1EkDcKfSpX6TZa22pCDmtl4LA==}
+  wrangler@3.80.4:
+    resolution: {integrity: sha512-DyNvShtVH3k7ZyBndlIiwyRDXqtHr3g01hxwn4FfwKlAaT6EL0wb3KL3UGbsdpeM/xbJiUQxFQ4WuFBWgZS18Q==}
     engines: {node: '>=16.17.0'}
     hasBin: true
     peerDependencies:
-      '@cloudflare/workers-types': ^4.20240925.0
+      '@cloudflare/workers-types': ^4.20241004.0
     peerDependenciesMeta:
       '@cloudflare/workers-types':
         optional: true
 
-  wrangler@3.80.4:
-    resolution: {integrity: sha512-DyNvShtVH3k7ZyBndlIiwyRDXqtHr3g01hxwn4FfwKlAaT6EL0wb3KL3UGbsdpeM/xbJiUQxFQ4WuFBWgZS18Q==}
+  wrangler@3.99.0:
+    resolution: {integrity: sha512-k0x4rT3G/QCbxcoZY7CHRVlAIS8WMmKdga6lf4d2c3gXFqssh44vwlTDuARA9QANBxKJTcA7JPTJRfUDhd9QBA==}
     engines: {node: '>=16.17.0'}
     hasBin: true
     peerDependencies:
-      '@cloudflare/workers-types': ^4.20241004.0
+      '@cloudflare/workers-types': ^4.20241218.0
     peerDependenciesMeta:
       '@cloudflare/workers-types':
         optional: true
@@ -4429,38 +5093,717 @@ snapshots:
 
   '@alloc/quick-lru@5.2.0': {}
 
-  '@babel/code-frame@7.24.7':
+  '@aws-crypto/crc32@5.2.0':
     dependencies:
-      '@babel/highlight': 7.24.7
-      picocolors: 1.1.0
+      '@aws-crypto/util': 5.2.0
+      '@aws-sdk/types': 3.714.0
+      tslib: 2.6.3
 
-  '@babel/helper-validator-identifier@7.24.7': {}
+  '@aws-crypto/crc32c@5.2.0':
+    dependencies:
+      '@aws-crypto/util': 5.2.0
+      '@aws-sdk/types': 3.714.0
+      tslib: 2.6.3
 
-  '@babel/highlight@7.24.7':
+  '@aws-crypto/sha1-browser@5.2.0':
     dependencies:
-      '@babel/helper-validator-identifier': 7.24.7
-      chalk: 2.4.2
-      js-tokens: 4.0.0
-      picocolors: 1.1.0
+      '@aws-crypto/supports-web-crypto': 5.2.0
+      '@aws-crypto/util': 5.2.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-locate-window': 3.693.0
+      '@smithy/util-utf8': 2.3.0
+      tslib: 2.6.3
 
-  '@babel/runtime@7.25.7':
+  '@aws-crypto/sha256-browser@5.2.0':
     dependencies:
-      regenerator-runtime: 0.14.1
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-crypto/supports-web-crypto': 5.2.0
+      '@aws-crypto/util': 5.2.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-locate-window': 3.693.0
+      '@smithy/util-utf8': 2.3.0
+      tslib: 2.6.3
 
-  '@changesets/apply-release-plan@7.0.5':
+  '@aws-crypto/sha256-js@5.2.0':
     dependencies:
-      '@changesets/config': 3.0.3
-      '@changesets/get-version-range-type': 0.4.0
-      '@changesets/git': 3.0.1
-      '@changesets/should-skip-package': 0.1.1
-      '@changesets/types': 6.0.0
-      '@manypkg/get-packages': 1.1.3
-      detect-indent: 6.1.0
-      fs-extra: 7.0.1
-      lodash.startcase: 4.4.0
-      outdent: 0.5.0
-      prettier: 2.8.8
-      resolve-from: 5.0.0
+      '@aws-crypto/util': 5.2.0
+      '@aws-sdk/types': 3.714.0
+      tslib: 2.6.3
+
+  '@aws-crypto/supports-web-crypto@5.2.0':
+    dependencies:
+      tslib: 2.6.3
+
+  '@aws-crypto/util@5.2.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/util-utf8': 2.3.0
+      tslib: 2.6.3
+
+  '@aws-sdk/client-dynamodb@3.716.0':
+    dependencies:
+      '@aws-crypto/sha256-browser': 5.2.0
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/client-sts': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/middleware-endpoint-discovery': 3.714.0
+      '@aws-sdk/middleware-host-header': 3.714.0
+      '@aws-sdk/middleware-logger': 3.714.0
+      '@aws-sdk/middleware-recursion-detection': 3.714.0
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/region-config-resolver': 3.714.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@aws-sdk/util-user-agent-browser': 3.714.0
+      '@aws-sdk/util-user-agent-node': 3.716.0
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/core': 2.5.5
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/hash-node': 3.0.11
+      '@smithy/invalid-dependency': 3.0.11
+      '@smithy/middleware-content-length': 3.0.13
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-retry': 3.0.31
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-body-length-node': 3.0.0
+      '@smithy/util-defaults-mode-browser': 3.0.31
+      '@smithy/util-defaults-mode-node': 3.0.31
+      '@smithy/util-endpoints': 2.1.7
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      '@smithy/util-utf8': 3.0.0
+      '@smithy/util-waiter': 3.2.0
+      '@types/uuid': 9.0.8
+      tslib: 2.6.3
+      uuid: 9.0.1
+    transitivePeerDependencies:
+      - aws-crt
+
+  '@aws-sdk/client-lambda@3.716.0':
+    dependencies:
+      '@aws-crypto/sha256-browser': 5.2.0
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/client-sts': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/middleware-host-header': 3.714.0
+      '@aws-sdk/middleware-logger': 3.714.0
+      '@aws-sdk/middleware-recursion-detection': 3.714.0
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/region-config-resolver': 3.714.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@aws-sdk/util-user-agent-browser': 3.714.0
+      '@aws-sdk/util-user-agent-node': 3.716.0
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/core': 2.5.5
+      '@smithy/eventstream-serde-browser': 3.0.14
+      '@smithy/eventstream-serde-config-resolver': 3.0.11
+      '@smithy/eventstream-serde-node': 3.0.13
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/hash-node': 3.0.11
+      '@smithy/invalid-dependency': 3.0.11
+      '@smithy/middleware-content-length': 3.0.13
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-retry': 3.0.31
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-body-length-node': 3.0.0
+      '@smithy/util-defaults-mode-browser': 3.0.31
+      '@smithy/util-defaults-mode-node': 3.0.31
+      '@smithy/util-endpoints': 2.1.7
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      '@smithy/util-stream': 3.3.2
+      '@smithy/util-utf8': 3.0.0
+      '@smithy/util-waiter': 3.2.0
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - aws-crt
+
+  '@aws-sdk/client-s3@3.716.0':
+    dependencies:
+      '@aws-crypto/sha1-browser': 5.2.0
+      '@aws-crypto/sha256-browser': 5.2.0
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/client-sts': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/middleware-bucket-endpoint': 3.714.0
+      '@aws-sdk/middleware-expect-continue': 3.714.0
+      '@aws-sdk/middleware-flexible-checksums': 3.716.0
+      '@aws-sdk/middleware-host-header': 3.714.0
+      '@aws-sdk/middleware-location-constraint': 3.714.0
+      '@aws-sdk/middleware-logger': 3.714.0
+      '@aws-sdk/middleware-recursion-detection': 3.714.0
+      '@aws-sdk/middleware-sdk-s3': 3.716.0
+      '@aws-sdk/middleware-ssec': 3.714.0
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/region-config-resolver': 3.714.0
+      '@aws-sdk/signature-v4-multi-region': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@aws-sdk/util-user-agent-browser': 3.714.0
+      '@aws-sdk/util-user-agent-node': 3.716.0
+      '@aws-sdk/xml-builder': 3.709.0
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/core': 2.5.5
+      '@smithy/eventstream-serde-browser': 3.0.14
+      '@smithy/eventstream-serde-config-resolver': 3.0.11
+      '@smithy/eventstream-serde-node': 3.0.13
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/hash-blob-browser': 3.1.10
+      '@smithy/hash-node': 3.0.11
+      '@smithy/hash-stream-node': 3.1.10
+      '@smithy/invalid-dependency': 3.0.11
+      '@smithy/md5-js': 3.0.11
+      '@smithy/middleware-content-length': 3.0.13
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-retry': 3.0.31
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-body-length-node': 3.0.0
+      '@smithy/util-defaults-mode-browser': 3.0.31
+      '@smithy/util-defaults-mode-node': 3.0.31
+      '@smithy/util-endpoints': 2.1.7
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      '@smithy/util-stream': 3.3.2
+      '@smithy/util-utf8': 3.0.0
+      '@smithy/util-waiter': 3.2.0
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - aws-crt
+
+  '@aws-sdk/client-sqs@3.716.0':
+    dependencies:
+      '@aws-crypto/sha256-browser': 5.2.0
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/client-sts': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/middleware-host-header': 3.714.0
+      '@aws-sdk/middleware-logger': 3.714.0
+      '@aws-sdk/middleware-recursion-detection': 3.714.0
+      '@aws-sdk/middleware-sdk-sqs': 3.716.0
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/region-config-resolver': 3.714.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@aws-sdk/util-user-agent-browser': 3.714.0
+      '@aws-sdk/util-user-agent-node': 3.716.0
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/core': 2.5.5
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/hash-node': 3.0.11
+      '@smithy/invalid-dependency': 3.0.11
+      '@smithy/md5-js': 3.0.11
+      '@smithy/middleware-content-length': 3.0.13
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-retry': 3.0.31
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-body-length-node': 3.0.0
+      '@smithy/util-defaults-mode-browser': 3.0.31
+      '@smithy/util-defaults-mode-node': 3.0.31
+      '@smithy/util-endpoints': 2.1.7
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - aws-crt
+
+  '@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0)':
+    dependencies:
+      '@aws-crypto/sha256-browser': 5.2.0
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-sdk/client-sts': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/middleware-host-header': 3.714.0
+      '@aws-sdk/middleware-logger': 3.714.0
+      '@aws-sdk/middleware-recursion-detection': 3.714.0
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/region-config-resolver': 3.714.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@aws-sdk/util-user-agent-browser': 3.714.0
+      '@aws-sdk/util-user-agent-node': 3.716.0
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/core': 2.5.5
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/hash-node': 3.0.11
+      '@smithy/invalid-dependency': 3.0.11
+      '@smithy/middleware-content-length': 3.0.13
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-retry': 3.0.31
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-body-length-node': 3.0.0
+      '@smithy/util-defaults-mode-browser': 3.0.31
+      '@smithy/util-defaults-mode-node': 3.0.31
+      '@smithy/util-endpoints': 2.1.7
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - aws-crt
+
+  '@aws-sdk/client-sso@3.716.0':
+    dependencies:
+      '@aws-crypto/sha256-browser': 5.2.0
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/middleware-host-header': 3.714.0
+      '@aws-sdk/middleware-logger': 3.714.0
+      '@aws-sdk/middleware-recursion-detection': 3.714.0
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/region-config-resolver': 3.714.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@aws-sdk/util-user-agent-browser': 3.714.0
+      '@aws-sdk/util-user-agent-node': 3.716.0
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/core': 2.5.5
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/hash-node': 3.0.11
+      '@smithy/invalid-dependency': 3.0.11
+      '@smithy/middleware-content-length': 3.0.13
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-retry': 3.0.31
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-body-length-node': 3.0.0
+      '@smithy/util-defaults-mode-browser': 3.0.31
+      '@smithy/util-defaults-mode-node': 3.0.31
+      '@smithy/util-endpoints': 2.1.7
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - aws-crt
+
+  '@aws-sdk/client-sts@3.716.0':
+    dependencies:
+      '@aws-crypto/sha256-browser': 5.2.0
+      '@aws-crypto/sha256-js': 5.2.0
+      '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/credential-provider-node': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/middleware-host-header': 3.714.0
+      '@aws-sdk/middleware-logger': 3.714.0
+      '@aws-sdk/middleware-recursion-detection': 3.714.0
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/region-config-resolver': 3.714.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@aws-sdk/util-user-agent-browser': 3.714.0
+      '@aws-sdk/util-user-agent-node': 3.716.0
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/core': 2.5.5
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/hash-node': 3.0.11
+      '@smithy/invalid-dependency': 3.0.11
+      '@smithy/middleware-content-length': 3.0.13
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-retry': 3.0.31
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-body-length-node': 3.0.0
+      '@smithy/util-defaults-mode-browser': 3.0.31
+      '@smithy/util-defaults-mode-node': 3.0.31
+      '@smithy/util-endpoints': 2.1.7
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - aws-crt
+
+  '@aws-sdk/core@3.716.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/core': 2.5.5
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/property-provider': 3.1.11
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/signature-v4': 4.2.4
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/util-middleware': 3.0.11
+      fast-xml-parser: 4.4.1
+      tslib: 2.6.3
+
+  '@aws-sdk/credential-provider-env@3.716.0':
+    dependencies:
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/property-provider': 3.1.11
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/credential-provider-http@3.716.0':
+    dependencies:
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/property-provider': 3.1.11
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/util-stream': 3.3.2
+      tslib: 2.6.3
+
+  '@aws-sdk/credential-provider-ini@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)':
+    dependencies:
+      '@aws-sdk/client-sts': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/credential-provider-env': 3.716.0
+      '@aws-sdk/credential-provider-http': 3.716.0
+      '@aws-sdk/credential-provider-process': 3.716.0
+      '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))
+      '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/types': 3.714.0
+      '@smithy/credential-provider-imds': 3.2.8
+      '@smithy/property-provider': 3.1.11
+      '@smithy/shared-ini-file-loader': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - '@aws-sdk/client-sso-oidc'
+      - aws-crt
+
+  '@aws-sdk/credential-provider-node@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)':
+    dependencies:
+      '@aws-sdk/credential-provider-env': 3.716.0
+      '@aws-sdk/credential-provider-http': 3.716.0
+      '@aws-sdk/credential-provider-ini': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/credential-provider-process': 3.716.0
+      '@aws-sdk/credential-provider-sso': 3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))
+      '@aws-sdk/credential-provider-web-identity': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/types': 3.714.0
+      '@smithy/credential-provider-imds': 3.2.8
+      '@smithy/property-provider': 3.1.11
+      '@smithy/shared-ini-file-loader': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - '@aws-sdk/client-sso-oidc'
+      - '@aws-sdk/client-sts'
+      - aws-crt
+
+  '@aws-sdk/credential-provider-process@3.716.0':
+    dependencies:
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/property-provider': 3.1.11
+      '@smithy/shared-ini-file-loader': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/credential-provider-sso@3.716.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))':
+    dependencies:
+      '@aws-sdk/client-sso': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/token-providers': 3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))
+      '@aws-sdk/types': 3.714.0
+      '@smithy/property-provider': 3.1.11
+      '@smithy/shared-ini-file-loader': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+    transitivePeerDependencies:
+      - '@aws-sdk/client-sso-oidc'
+      - aws-crt
+
+  '@aws-sdk/credential-provider-web-identity@3.716.0(@aws-sdk/client-sts@3.716.0)':
+    dependencies:
+      '@aws-sdk/client-sts': 3.716.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/property-provider': 3.1.11
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/endpoint-cache@3.693.0':
+    dependencies:
+      mnemonist: 0.38.3
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-bucket-endpoint@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-arn-parser': 3.693.0
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      '@smithy/util-config-provider': 3.0.0
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-endpoint-discovery@3.714.0':
+    dependencies:
+      '@aws-sdk/endpoint-cache': 3.693.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-expect-continue@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-flexible-checksums@3.716.0':
+    dependencies:
+      '@aws-crypto/crc32': 5.2.0
+      '@aws-crypto/crc32c': 5.2.0
+      '@aws-crypto/util': 5.2.0
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/is-array-buffer': 3.0.0
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-stream': 3.3.2
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-host-header@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-location-constraint@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-logger@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-recursion-detection@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-sdk-s3@3.716.0':
+    dependencies:
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-arn-parser': 3.693.0
+      '@smithy/core': 2.5.5
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/signature-v4': 4.2.4
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/util-config-provider': 3.0.0
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-stream': 3.3.2
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-sdk-sqs@3.716.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/util-hex-encoding': 3.0.0
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-ssec@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/middleware-user-agent@3.716.0':
+    dependencies:
+      '@aws-sdk/core': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@aws-sdk/util-endpoints': 3.714.0
+      '@smithy/core': 2.5.5
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/region-config-resolver@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/types': 3.7.2
+      '@smithy/util-config-provider': 3.0.0
+      '@smithy/util-middleware': 3.0.11
+      tslib: 2.6.3
+
+  '@aws-sdk/signature-v4-multi-region@3.716.0':
+    dependencies:
+      '@aws-sdk/middleware-sdk-s3': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/signature-v4': 4.2.4
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/token-providers@3.714.0(@aws-sdk/client-sso-oidc@3.716.0(@aws-sdk/client-sts@3.716.0))':
+    dependencies:
+      '@aws-sdk/client-sso-oidc': 3.716.0(@aws-sdk/client-sts@3.716.0)
+      '@aws-sdk/types': 3.714.0
+      '@smithy/property-provider': 3.1.11
+      '@smithy/shared-ini-file-loader': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/types@3.714.0':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/util-arn-parser@3.693.0':
+    dependencies:
+      tslib: 2.6.3
+
+  '@aws-sdk/util-endpoints@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/types': 3.7.2
+      '@smithy/util-endpoints': 2.1.7
+      tslib: 2.6.3
+
+  '@aws-sdk/util-locate-window@3.693.0':
+    dependencies:
+      tslib: 2.6.3
+
+  '@aws-sdk/util-user-agent-browser@3.714.0':
+    dependencies:
+      '@aws-sdk/types': 3.714.0
+      '@smithy/types': 3.7.2
+      bowser: 2.11.0
+      tslib: 2.6.3
+
+  '@aws-sdk/util-user-agent-node@3.716.0':
+    dependencies:
+      '@aws-sdk/middleware-user-agent': 3.716.0
+      '@aws-sdk/types': 3.714.0
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@aws-sdk/xml-builder@3.709.0':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@babel/code-frame@7.24.7':
+    dependencies:
+      '@babel/highlight': 7.24.7
+      picocolors: 1.1.0
+
+  '@babel/helper-validator-identifier@7.24.7': {}
+
+  '@babel/highlight@7.24.7':
+    dependencies:
+      '@babel/helper-validator-identifier': 7.24.7
+      chalk: 2.4.2
+      js-tokens: 4.0.0
+      picocolors: 1.1.0
+
+  '@babel/runtime@7.25.7':
+    dependencies:
+      regenerator-runtime: 0.14.1
+
+  '@changesets/apply-release-plan@7.0.5':
+    dependencies:
+      '@changesets/config': 3.0.3
+      '@changesets/get-version-range-type': 0.4.0
+      '@changesets/git': 3.0.1
+      '@changesets/should-skip-package': 0.1.1
+      '@changesets/types': 6.0.0
+      '@manypkg/get-packages': 1.1.3
+      detect-indent: 6.1.0
+      fs-extra: 7.0.1
+      lodash.startcase: 4.4.0
+      outdent: 0.5.0
+      prettier: 2.8.8
+      resolve-from: 5.0.0
       semver: 7.6.3
 
   '@changesets/assemble-release-plan@6.0.4':
@@ -4593,40 +5936,35 @@ snapshots:
     dependencies:
       mime: 3.0.0
 
-  '@cloudflare/workerd-darwin-64@1.20240925.0':
-    optional: true
-
   '@cloudflare/workerd-darwin-64@1.20241004.0':
     optional: true
 
-  '@cloudflare/workerd-darwin-arm64@1.20240925.0':
+  '@cloudflare/workerd-darwin-64@1.20241218.0':
     optional: true
 
   '@cloudflare/workerd-darwin-arm64@1.20241004.0':
     optional: true
 
-  '@cloudflare/workerd-linux-64@1.20240925.0':
+  '@cloudflare/workerd-darwin-arm64@1.20241218.0':
     optional: true
 
   '@cloudflare/workerd-linux-64@1.20241004.0':
     optional: true
 
-  '@cloudflare/workerd-linux-arm64@1.20240925.0':
+  '@cloudflare/workerd-linux-64@1.20241218.0':
     optional: true
 
   '@cloudflare/workerd-linux-arm64@1.20241004.0':
     optional: true
 
-  '@cloudflare/workerd-windows-64@1.20240925.0':
+  '@cloudflare/workerd-linux-arm64@1.20241218.0':
     optional: true
 
   '@cloudflare/workerd-windows-64@1.20241004.0':
     optional: true
 
-  '@cloudflare/workers-shared@0.5.4':
-    dependencies:
-      mime: 3.0.0
-      zod: 3.23.8
+  '@cloudflare/workerd-windows-64@1.20241218.0':
+    optional: true
 
   '@cloudflare/workers-shared@0.6.0':
     dependencies:
@@ -4639,6 +5977,22 @@ snapshots:
     dependencies:
       '@jridgewell/trace-mapping': 0.3.9
 
+  '@dotenvx/dotenvx@1.31.0':
+    dependencies:
+      commander: 11.1.0
+      dotenv: 16.4.7
+      eciesjs: 0.4.12
+      execa: 5.1.1
+      fdir: 6.4.0(picomatch@4.0.2)
+      ignore: 5.3.2
+      object-treeify: 1.1.33
+      picomatch: 4.0.2
+      which: 4.0.0
+
+  '@ecies/ciphers@0.2.2(@noble/ciphers@1.1.3)':
+    dependencies:
+      '@noble/ciphers': 1.1.3
+
   '@emnapi/runtime@1.2.0':
     dependencies:
       tslib: 2.6.3
@@ -4654,6 +6008,16 @@ snapshots:
       escape-string-regexp: 4.0.0
       rollup-plugin-node-polyfills: 0.2.1
 
+  '@esbuild-plugins/node-resolve@0.2.2(esbuild@0.19.2)':
+    dependencies:
+      '@types/resolve': 1.20.6
+      debug: 4.3.6
+      esbuild: 0.19.2
+      escape-string-regexp: 4.0.0
+      resolve: 1.22.8
+    transitivePeerDependencies:
+      - supports-color
+
   '@esbuild/aix-ppc64@0.21.5':
     optional: true
 
@@ -4663,6 +6027,9 @@ snapshots:
   '@esbuild/android-arm64@0.17.19':
     optional: true
 
+  '@esbuild/android-arm64@0.19.2':
+    optional: true
+
   '@esbuild/android-arm64@0.21.5':
     optional: true
 
@@ -4672,6 +6039,9 @@ snapshots:
   '@esbuild/android-arm@0.17.19':
     optional: true
 
+  '@esbuild/android-arm@0.19.2':
+    optional: true
+
   '@esbuild/android-arm@0.21.5':
     optional: true
 
@@ -4681,6 +6051,9 @@ snapshots:
   '@esbuild/android-x64@0.17.19':
     optional: true
 
+  '@esbuild/android-x64@0.19.2':
+    optional: true
+
   '@esbuild/android-x64@0.21.5':
     optional: true
 
@@ -4690,6 +6063,9 @@ snapshots:
   '@esbuild/darwin-arm64@0.17.19':
     optional: true
 
+  '@esbuild/darwin-arm64@0.19.2':
+    optional: true
+
   '@esbuild/darwin-arm64@0.21.5':
     optional: true
 
@@ -4699,6 +6075,9 @@ snapshots:
   '@esbuild/darwin-x64@0.17.19':
     optional: true
 
+  '@esbuild/darwin-x64@0.19.2':
+    optional: true
+
   '@esbuild/darwin-x64@0.21.5':
     optional: true
 
@@ -4708,6 +6087,9 @@ snapshots:
   '@esbuild/freebsd-arm64@0.17.19':
     optional: true
 
+  '@esbuild/freebsd-arm64@0.19.2':
+    optional: true
+
   '@esbuild/freebsd-arm64@0.21.5':
     optional: true
 
@@ -4717,6 +6099,9 @@ snapshots:
   '@esbuild/freebsd-x64@0.17.19':
     optional: true
 
+  '@esbuild/freebsd-x64@0.19.2':
+    optional: true
+
   '@esbuild/freebsd-x64@0.21.5':
     optional: true
 
@@ -4726,6 +6111,9 @@ snapshots:
   '@esbuild/linux-arm64@0.17.19':
     optional: true
 
+  '@esbuild/linux-arm64@0.19.2':
+    optional: true
+
   '@esbuild/linux-arm64@0.21.5':
     optional: true
 
@@ -4735,6 +6123,9 @@ snapshots:
   '@esbuild/linux-arm@0.17.19':
     optional: true
 
+  '@esbuild/linux-arm@0.19.2':
+    optional: true
+
   '@esbuild/linux-arm@0.21.5':
     optional: true
 
@@ -4744,6 +6135,9 @@ snapshots:
   '@esbuild/linux-ia32@0.17.19':
     optional: true
 
+  '@esbuild/linux-ia32@0.19.2':
+    optional: true
+
   '@esbuild/linux-ia32@0.21.5':
     optional: true
 
@@ -4753,6 +6147,9 @@ snapshots:
   '@esbuild/linux-loong64@0.17.19':
     optional: true
 
+  '@esbuild/linux-loong64@0.19.2':
+    optional: true
+
   '@esbuild/linux-loong64@0.21.5':
     optional: true
 
@@ -4762,6 +6159,9 @@ snapshots:
   '@esbuild/linux-mips64el@0.17.19':
     optional: true
 
+  '@esbuild/linux-mips64el@0.19.2':
+    optional: true
+
   '@esbuild/linux-mips64el@0.21.5':
     optional: true
 
@@ -4771,6 +6171,9 @@ snapshots:
   '@esbuild/linux-ppc64@0.17.19':
     optional: true
 
+  '@esbuild/linux-ppc64@0.19.2':
+    optional: true
+
   '@esbuild/linux-ppc64@0.21.5':
     optional: true
 
@@ -4780,6 +6183,9 @@ snapshots:
   '@esbuild/linux-riscv64@0.17.19':
     optional: true
 
+  '@esbuild/linux-riscv64@0.19.2':
+    optional: true
+
   '@esbuild/linux-riscv64@0.21.5':
     optional: true
 
@@ -4789,6 +6195,9 @@ snapshots:
   '@esbuild/linux-s390x@0.17.19':
     optional: true
 
+  '@esbuild/linux-s390x@0.19.2':
+    optional: true
+
   '@esbuild/linux-s390x@0.21.5':
     optional: true
 
@@ -4798,6 +6207,9 @@ snapshots:
   '@esbuild/linux-x64@0.17.19':
     optional: true
 
+  '@esbuild/linux-x64@0.19.2':
+    optional: true
+
   '@esbuild/linux-x64@0.21.5':
     optional: true
 
@@ -4807,6 +6219,9 @@ snapshots:
   '@esbuild/netbsd-x64@0.17.19':
     optional: true
 
+  '@esbuild/netbsd-x64@0.19.2':
+    optional: true
+
   '@esbuild/netbsd-x64@0.21.5':
     optional: true
 
@@ -4819,6 +6234,9 @@ snapshots:
   '@esbuild/openbsd-x64@0.17.19':
     optional: true
 
+  '@esbuild/openbsd-x64@0.19.2':
+    optional: true
+
   '@esbuild/openbsd-x64@0.21.5':
     optional: true
 
@@ -4828,6 +6246,9 @@ snapshots:
   '@esbuild/sunos-x64@0.17.19':
     optional: true
 
+  '@esbuild/sunos-x64@0.19.2':
+    optional: true
+
   '@esbuild/sunos-x64@0.21.5':
     optional: true
 
@@ -4837,6 +6258,9 @@ snapshots:
   '@esbuild/win32-arm64@0.17.19':
     optional: true
 
+  '@esbuild/win32-arm64@0.19.2':
+    optional: true
+
   '@esbuild/win32-arm64@0.21.5':
     optional: true
 
@@ -4846,6 +6270,9 @@ snapshots:
   '@esbuild/win32-ia32@0.17.19':
     optional: true
 
+  '@esbuild/win32-ia32@0.19.2':
+    optional: true
+
   '@esbuild/win32-ia32@0.21.5':
     optional: true
 
@@ -4855,6 +6282,9 @@ snapshots:
   '@esbuild/win32-x64@0.17.19':
     optional: true
 
+  '@esbuild/win32-x64@0.19.2':
+    optional: true
+
   '@esbuild/win32-x64@0.21.5':
     optional: true
 
@@ -5073,7 +6503,6 @@ snapshots:
     dependencies:
       '@jridgewell/gen-mapping': 0.3.5
       '@jridgewell/trace-mapping': 0.3.25
-    optional: true
 
   '@jridgewell/sourcemap-codec@1.5.0': {}
 
@@ -5172,6 +6601,31 @@ snapshots:
   '@next/swc-win32-x64-msvc@15.0.0-canary.113':
     optional: true
 
+  '@noble/ciphers@1.1.3': {}
+
+  '@noble/curves@1.7.0':
+    dependencies:
+      '@noble/hashes': 1.6.0
+
+  '@noble/hashes@1.6.0': {}
+
+  '@noble/hashes@1.6.1': {}
+
+  '@node-minify/core@8.0.6':
+    dependencies:
+      '@node-minify/utils': 8.0.6
+      glob: 9.3.5
+      mkdirp: 1.0.4
+
+  '@node-minify/terser@8.0.6':
+    dependencies:
+      '@node-minify/utils': 8.0.6
+      terser: 5.16.9
+
+  '@node-minify/utils@8.0.6':
+    dependencies:
+      gzip-size: 6.0.0
+
   '@nodelib/fs.scandir@2.1.5':
     dependencies:
       '@nodelib/fs.stat': 2.0.5
@@ -5237,125 +6691,476 @@ snapshots:
       '@octokit/core': 5.2.0
       '@octokit/types': 12.6.0
 
-  '@octokit/request-error@5.1.0':
+  '@octokit/request-error@5.1.0':
+    dependencies:
+      '@octokit/types': 13.6.1
+      deprecation: 2.3.1
+      once: 1.4.0
+
+  '@octokit/request@8.4.0':
+    dependencies:
+      '@octokit/endpoint': 9.0.5
+      '@octokit/request-error': 5.1.0
+      '@octokit/types': 13.6.1
+      universal-user-agent: 6.0.1
+
+  '@octokit/types@12.6.0':
+    dependencies:
+      '@octokit/openapi-types': 20.0.0
+
+  '@octokit/types@13.6.1':
+    dependencies:
+      '@octokit/openapi-types': 22.2.0
+
+  '@opennextjs/aws@https://pkg.pr.new/@opennextjs/aws@684':
+    dependencies:
+      '@aws-sdk/client-dynamodb': 3.716.0
+      '@aws-sdk/client-lambda': 3.716.0
+      '@aws-sdk/client-s3': 3.716.0
+      '@aws-sdk/client-sqs': 3.716.0
+      '@esbuild-plugins/node-resolve': 0.2.2(esbuild@0.19.2)
+      '@node-minify/core': 8.0.6
+      '@node-minify/terser': 8.0.6
+      '@tsconfig/node18': 1.0.3
+      aws4fetch: 1.0.20
+      chalk: 5.3.0
+      esbuild: 0.19.2
+      path-to-regexp: 6.3.0
+      promise.series: 0.2.0
+      urlpattern-polyfill: 10.0.0
+    transitivePeerDependencies:
+      - aws-crt
+      - supports-color
+
+  '@pkgjs/parseargs@0.11.0':
+    optional: true
+
+  '@playwright/test@1.47.0':
+    dependencies:
+      playwright: 1.47.0
+
+  '@react-aria/focus@3.18.2(react@19.0.0-rc-3208e73e-20240730)':
+    dependencies:
+      '@react-aria/interactions': 3.22.2(react@19.0.0-rc-3208e73e-20240730)
+      '@react-aria/utils': 3.25.2(react@19.0.0-rc-3208e73e-20240730)
+      '@react-types/shared': 3.24.1(react@19.0.0-rc-3208e73e-20240730)
+      '@swc/helpers': 0.5.12
+      clsx: 2.1.1
+      react: 19.0.0-rc-3208e73e-20240730
+
+  '@react-aria/interactions@3.22.2(react@19.0.0-rc-3208e73e-20240730)':
+    dependencies:
+      '@react-aria/ssr': 3.9.5(react@19.0.0-rc-3208e73e-20240730)
+      '@react-aria/utils': 3.25.2(react@19.0.0-rc-3208e73e-20240730)
+      '@react-types/shared': 3.24.1(react@19.0.0-rc-3208e73e-20240730)
+      '@swc/helpers': 0.5.12
+      react: 19.0.0-rc-3208e73e-20240730
+
+  '@react-aria/ssr@3.9.5(react@19.0.0-rc-3208e73e-20240730)':
+    dependencies:
+      '@swc/helpers': 0.5.12
+      react: 19.0.0-rc-3208e73e-20240730
+
+  '@react-aria/utils@3.25.2(react@19.0.0-rc-3208e73e-20240730)':
+    dependencies:
+      '@react-aria/ssr': 3.9.5(react@19.0.0-rc-3208e73e-20240730)
+      '@react-stately/utils': 3.10.3(react@19.0.0-rc-3208e73e-20240730)
+      '@react-types/shared': 3.24.1(react@19.0.0-rc-3208e73e-20240730)
+      '@swc/helpers': 0.5.12
+      clsx: 2.1.1
+      react: 19.0.0-rc-3208e73e-20240730
+
+  '@react-stately/utils@3.10.3(react@19.0.0-rc-3208e73e-20240730)':
+    dependencies:
+      '@swc/helpers': 0.5.12
+      react: 19.0.0-rc-3208e73e-20240730
+
+  '@react-types/shared@3.24.1(react@19.0.0-rc-3208e73e-20240730)':
+    dependencies:
+      react: 19.0.0-rc-3208e73e-20240730
+
+  '@rollup/rollup-android-arm-eabi@4.21.0':
+    optional: true
+
+  '@rollup/rollup-android-arm64@4.21.0':
+    optional: true
+
+  '@rollup/rollup-darwin-arm64@4.21.0':
+    optional: true
+
+  '@rollup/rollup-darwin-x64@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm-gnueabihf@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm-musleabihf@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-gnu@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-musl@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-powerpc64le-gnu@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-riscv64-gnu@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-s390x-gnu@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-x64-gnu@4.21.0':
+    optional: true
+
+  '@rollup/rollup-linux-x64-musl@4.21.0':
+    optional: true
+
+  '@rollup/rollup-win32-arm64-msvc@4.21.0':
+    optional: true
+
+  '@rollup/rollup-win32-ia32-msvc@4.21.0':
+    optional: true
+
+  '@rollup/rollup-win32-x64-msvc@4.21.0':
+    optional: true
+
+  '@rtsao/scc@1.1.0': {}
+
+  '@rushstack/eslint-patch@1.10.4': {}
+
+  '@smithy/abort-controller@3.1.9':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/chunked-blob-reader-native@3.0.1':
+    dependencies:
+      '@smithy/util-base64': 3.0.0
+      tslib: 2.6.3
+
+  '@smithy/chunked-blob-reader@4.0.0':
+    dependencies:
+      tslib: 2.6.3
+
+  '@smithy/config-resolver@3.0.13':
+    dependencies:
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/types': 3.7.2
+      '@smithy/util-config-provider': 3.0.0
+      '@smithy/util-middleware': 3.0.11
+      tslib: 2.6.3
+
+  '@smithy/core@2.5.5':
+    dependencies:
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      '@smithy/util-body-length-browser': 3.0.0
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-stream': 3.3.2
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+
+  '@smithy/credential-provider-imds@3.2.8':
+    dependencies:
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/property-provider': 3.1.11
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      tslib: 2.6.3
+
+  '@smithy/eventstream-codec@3.1.10':
+    dependencies:
+      '@aws-crypto/crc32': 5.2.0
+      '@smithy/types': 3.7.2
+      '@smithy/util-hex-encoding': 3.0.0
+      tslib: 2.6.3
+
+  '@smithy/eventstream-serde-browser@3.0.14':
+    dependencies:
+      '@smithy/eventstream-serde-universal': 3.0.13
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/eventstream-serde-config-resolver@3.0.11':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/eventstream-serde-node@3.0.13':
+    dependencies:
+      '@smithy/eventstream-serde-universal': 3.0.13
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/eventstream-serde-universal@3.0.13':
+    dependencies:
+      '@smithy/eventstream-codec': 3.1.10
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/fetch-http-handler@4.1.2':
+    dependencies:
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/querystring-builder': 3.0.11
+      '@smithy/types': 3.7.2
+      '@smithy/util-base64': 3.0.0
+      tslib: 2.6.3
+
+  '@smithy/hash-blob-browser@3.1.10':
+    dependencies:
+      '@smithy/chunked-blob-reader': 4.0.0
+      '@smithy/chunked-blob-reader-native': 3.0.1
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/hash-node@3.0.11':
+    dependencies:
+      '@smithy/types': 3.7.2
+      '@smithy/util-buffer-from': 3.0.0
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+
+  '@smithy/hash-stream-node@3.1.10':
+    dependencies:
+      '@smithy/types': 3.7.2
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+
+  '@smithy/invalid-dependency@3.0.11':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/is-array-buffer@2.2.0':
+    dependencies:
+      tslib: 2.6.3
+
+  '@smithy/is-array-buffer@3.0.0':
+    dependencies:
+      tslib: 2.6.3
+
+  '@smithy/md5-js@3.0.11':
+    dependencies:
+      '@smithy/types': 3.7.2
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
+
+  '@smithy/middleware-content-length@3.0.13':
+    dependencies:
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/middleware-endpoint@3.2.6':
+    dependencies:
+      '@smithy/core': 2.5.5
+      '@smithy/middleware-serde': 3.0.11
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/shared-ini-file-loader': 3.1.12
+      '@smithy/types': 3.7.2
+      '@smithy/url-parser': 3.0.11
+      '@smithy/util-middleware': 3.0.11
+      tslib: 2.6.3
+
+  '@smithy/middleware-retry@3.0.31':
+    dependencies:
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/service-error-classification': 3.0.11
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-retry': 3.0.11
+      tslib: 2.6.3
+      uuid: 9.0.1
+
+  '@smithy/middleware-serde@3.0.11':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
+
+  '@smithy/middleware-stack@3.0.11':
     dependencies:
-      '@octokit/types': 13.6.1
-      deprecation: 2.3.1
-      once: 1.4.0
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@octokit/request@8.4.0':
+  '@smithy/node-config-provider@3.1.12':
     dependencies:
-      '@octokit/endpoint': 9.0.5
-      '@octokit/request-error': 5.1.0
-      '@octokit/types': 13.6.1
-      universal-user-agent: 6.0.1
+      '@smithy/property-provider': 3.1.11
+      '@smithy/shared-ini-file-loader': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@octokit/types@12.6.0':
+  '@smithy/node-http-handler@3.3.2':
     dependencies:
-      '@octokit/openapi-types': 20.0.0
+      '@smithy/abort-controller': 3.1.9
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/querystring-builder': 3.0.11
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@octokit/types@13.6.1':
+  '@smithy/property-provider@3.1.11':
     dependencies:
-      '@octokit/openapi-types': 22.2.0
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@pkgjs/parseargs@0.11.0':
-    optional: true
+  '@smithy/protocol-http@4.1.8':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@playwright/test@1.47.0':
+  '@smithy/querystring-builder@3.0.11':
     dependencies:
-      playwright: 1.47.0
+      '@smithy/types': 3.7.2
+      '@smithy/util-uri-escape': 3.0.0
+      tslib: 2.6.3
 
-  '@react-aria/focus@3.18.2(react@19.0.0-rc-3208e73e-20240730)':
+  '@smithy/querystring-parser@3.0.11':
     dependencies:
-      '@react-aria/interactions': 3.22.2(react@19.0.0-rc-3208e73e-20240730)
-      '@react-aria/utils': 3.25.2(react@19.0.0-rc-3208e73e-20240730)
-      '@react-types/shared': 3.24.1(react@19.0.0-rc-3208e73e-20240730)
-      '@swc/helpers': 0.5.12
-      clsx: 2.1.1
-      react: 19.0.0-rc-3208e73e-20240730
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@react-aria/interactions@3.22.2(react@19.0.0-rc-3208e73e-20240730)':
+  '@smithy/service-error-classification@3.0.11':
     dependencies:
-      '@react-aria/ssr': 3.9.5(react@19.0.0-rc-3208e73e-20240730)
-      '@react-aria/utils': 3.25.2(react@19.0.0-rc-3208e73e-20240730)
-      '@react-types/shared': 3.24.1(react@19.0.0-rc-3208e73e-20240730)
-      '@swc/helpers': 0.5.12
-      react: 19.0.0-rc-3208e73e-20240730
+      '@smithy/types': 3.7.2
 
-  '@react-aria/ssr@3.9.5(react@19.0.0-rc-3208e73e-20240730)':
+  '@smithy/shared-ini-file-loader@3.1.12':
     dependencies:
-      '@swc/helpers': 0.5.12
-      react: 19.0.0-rc-3208e73e-20240730
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@react-aria/utils@3.25.2(react@19.0.0-rc-3208e73e-20240730)':
+  '@smithy/signature-v4@4.2.4':
     dependencies:
-      '@react-aria/ssr': 3.9.5(react@19.0.0-rc-3208e73e-20240730)
-      '@react-stately/utils': 3.10.3(react@19.0.0-rc-3208e73e-20240730)
-      '@react-types/shared': 3.24.1(react@19.0.0-rc-3208e73e-20240730)
-      '@swc/helpers': 0.5.12
-      clsx: 2.1.1
-      react: 19.0.0-rc-3208e73e-20240730
+      '@smithy/is-array-buffer': 3.0.0
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      '@smithy/util-hex-encoding': 3.0.0
+      '@smithy/util-middleware': 3.0.11
+      '@smithy/util-uri-escape': 3.0.0
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
 
-  '@react-stately/utils@3.10.3(react@19.0.0-rc-3208e73e-20240730)':
+  '@smithy/smithy-client@3.5.1':
     dependencies:
-      '@swc/helpers': 0.5.12
-      react: 19.0.0-rc-3208e73e-20240730
+      '@smithy/core': 2.5.5
+      '@smithy/middleware-endpoint': 3.2.6
+      '@smithy/middleware-stack': 3.0.11
+      '@smithy/protocol-http': 4.1.8
+      '@smithy/types': 3.7.2
+      '@smithy/util-stream': 3.3.2
+      tslib: 2.6.3
 
-  '@react-types/shared@3.24.1(react@19.0.0-rc-3208e73e-20240730)':
+  '@smithy/types@3.7.2':
     dependencies:
-      react: 19.0.0-rc-3208e73e-20240730
+      tslib: 2.6.3
 
-  '@rollup/rollup-android-arm-eabi@4.21.0':
-    optional: true
+  '@smithy/url-parser@3.0.11':
+    dependencies:
+      '@smithy/querystring-parser': 3.0.11
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@rollup/rollup-android-arm64@4.21.0':
-    optional: true
+  '@smithy/util-base64@3.0.0':
+    dependencies:
+      '@smithy/util-buffer-from': 3.0.0
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
 
-  '@rollup/rollup-darwin-arm64@4.21.0':
-    optional: true
+  '@smithy/util-body-length-browser@3.0.0':
+    dependencies:
+      tslib: 2.6.3
 
-  '@rollup/rollup-darwin-x64@4.21.0':
-    optional: true
+  '@smithy/util-body-length-node@3.0.0':
+    dependencies:
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-arm-gnueabihf@4.21.0':
-    optional: true
+  '@smithy/util-buffer-from@2.2.0':
+    dependencies:
+      '@smithy/is-array-buffer': 2.2.0
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-arm-musleabihf@4.21.0':
-    optional: true
+  '@smithy/util-buffer-from@3.0.0':
+    dependencies:
+      '@smithy/is-array-buffer': 3.0.0
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-arm64-gnu@4.21.0':
-    optional: true
+  '@smithy/util-config-provider@3.0.0':
+    dependencies:
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-arm64-musl@4.21.0':
-    optional: true
+  '@smithy/util-defaults-mode-browser@3.0.31':
+    dependencies:
+      '@smithy/property-provider': 3.1.11
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      bowser: 2.11.0
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-powerpc64le-gnu@4.21.0':
-    optional: true
+  '@smithy/util-defaults-mode-node@3.0.31':
+    dependencies:
+      '@smithy/config-resolver': 3.0.13
+      '@smithy/credential-provider-imds': 3.2.8
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/property-provider': 3.1.11
+      '@smithy/smithy-client': 3.5.1
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-riscv64-gnu@4.21.0':
-    optional: true
+  '@smithy/util-endpoints@2.1.7':
+    dependencies:
+      '@smithy/node-config-provider': 3.1.12
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-s390x-gnu@4.21.0':
-    optional: true
+  '@smithy/util-hex-encoding@3.0.0':
+    dependencies:
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-x64-gnu@4.21.0':
-    optional: true
+  '@smithy/util-middleware@3.0.11':
+    dependencies:
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@rollup/rollup-linux-x64-musl@4.21.0':
-    optional: true
+  '@smithy/util-retry@3.0.11':
+    dependencies:
+      '@smithy/service-error-classification': 3.0.11
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
-  '@rollup/rollup-win32-arm64-msvc@4.21.0':
-    optional: true
+  '@smithy/util-stream@3.3.2':
+    dependencies:
+      '@smithy/fetch-http-handler': 4.1.2
+      '@smithy/node-http-handler': 3.3.2
+      '@smithy/types': 3.7.2
+      '@smithy/util-base64': 3.0.0
+      '@smithy/util-buffer-from': 3.0.0
+      '@smithy/util-hex-encoding': 3.0.0
+      '@smithy/util-utf8': 3.0.0
+      tslib: 2.6.3
 
-  '@rollup/rollup-win32-ia32-msvc@4.21.0':
-    optional: true
+  '@smithy/util-uri-escape@3.0.0':
+    dependencies:
+      tslib: 2.6.3
 
-  '@rollup/rollup-win32-x64-msvc@4.21.0':
-    optional: true
+  '@smithy/util-utf8@2.3.0':
+    dependencies:
+      '@smithy/util-buffer-from': 2.2.0
+      tslib: 2.6.3
 
-  '@rtsao/scc@1.1.0': {}
+  '@smithy/util-utf8@3.0.0':
+    dependencies:
+      '@smithy/util-buffer-from': 3.0.0
+      tslib: 2.6.3
 
-  '@rushstack/eslint-patch@1.10.4': {}
+  '@smithy/util-waiter@3.2.0':
+    dependencies:
+      '@smithy/abort-controller': 3.1.9
+      '@smithy/types': 3.7.2
+      tslib: 2.6.3
 
   '@swc/counter@0.1.3': {}
 
@@ -5395,6 +7200,8 @@ snapshots:
       mkdirp: 3.0.1
       path-browserify: 1.0.1
 
+  '@tsconfig/node18@1.0.3': {}
+
   '@tsconfig/strictest@2.0.5': {}
 
   '@types/debug@4.1.12':
@@ -5417,6 +7224,10 @@ snapshots:
     dependencies:
       '@types/unist': 3.0.3
 
+  '@types/mock-fs@4.13.4':
+    dependencies:
+      '@types/node': 20.14.12
+
   '@types/ms@0.7.34': {}
 
   '@types/node-forge@1.3.11':
@@ -5446,8 +7257,12 @@ snapshots:
       '@types/prop-types': 15.7.12
       csstype: 3.1.3
 
+  '@types/resolve@1.20.6': {}
+
   '@types/unist@3.0.3': {}
 
+  '@types/uuid@9.0.8': {}
+
   '@typescript-eslint/eslint-plugin@8.7.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)':
     dependencies:
       '@eslint-community/regexpp': 4.11.0
@@ -5766,6 +7581,8 @@ snapshots:
     dependencies:
       possible-typed-array-names: 1.0.0
 
+  aws4fetch@1.0.20: {}
+
   axe-core@4.10.0: {}
 
   axobject-query@4.1.0: {}
@@ -5784,6 +7601,8 @@ snapshots:
 
   blake3-wasm@2.1.5: {}
 
+  bowser@2.11.0: {}
+
   brace-expansion@1.1.11:
     dependencies:
       balanced-match: 1.0.2
@@ -5804,16 +7623,10 @@ snapshots:
       node-releases: 2.0.18
       update-browserslist-db: 1.1.1(browserslist@4.24.0)
 
-  buffer-from@1.1.2:
-    optional: true
+  buffer-from@1.1.2: {}
 
   builtin-modules@3.3.0: {}
 
-  bundle-require@5.0.0(esbuild@0.23.1):
-    dependencies:
-      esbuild: 0.23.1
-      load-tsconfig: 0.2.5
-
   busboy@1.6.0:
     dependencies:
       streamsearch: 1.1.0
@@ -5888,6 +7701,10 @@ snapshots:
     optionalDependencies:
       fsevents: 2.3.3
 
+  chokidar@4.0.1:
+    dependencies:
+      readdirp: 4.0.2
+
   ci-info@3.9.0: {}
 
   ci-info@4.0.0: {}
@@ -5936,8 +7753,9 @@ snapshots:
 
   comma-separated-tokens@2.0.3: {}
 
-  commander@2.20.3:
-    optional: true
+  commander@11.1.0: {}
+
+  commander@2.20.3: {}
 
   commander@4.1.1: {}
 
@@ -5945,8 +7763,6 @@ snapshots:
 
   confbox@0.1.7: {}
 
-  consola@3.2.3: {}
-
   cookie@0.5.0: {}
 
   core-js-compat@3.38.1:
@@ -5993,6 +7809,8 @@ snapshots:
 
   date-fns@3.6.0: {}
 
+  date-fns@4.1.0: {}
+
   debug@3.2.7:
     dependencies:
       ms: 2.1.2
@@ -6075,8 +7893,19 @@ snapshots:
     dependencies:
       esutils: 2.0.3
 
+  dotenv@16.4.7: {}
+
+  duplexer@0.1.2: {}
+
   eastasianwidth@0.2.0: {}
 
+  eciesjs@0.4.12:
+    dependencies:
+      '@ecies/ciphers': 0.2.2(@noble/ciphers@1.1.3)
+      '@noble/ciphers': 1.1.3
+      '@noble/curves': 1.7.0
+      '@noble/hashes': 1.6.1
+
   electron-to-chromium@1.5.29: {}
 
   emoji-regex@10.4.0: {}
@@ -6228,6 +8057,31 @@ snapshots:
       '@esbuild/win32-ia32': 0.17.19
       '@esbuild/win32-x64': 0.17.19
 
+  esbuild@0.19.2:
+    optionalDependencies:
+      '@esbuild/android-arm': 0.19.2
+      '@esbuild/android-arm64': 0.19.2
+      '@esbuild/android-x64': 0.19.2
+      '@esbuild/darwin-arm64': 0.19.2
+      '@esbuild/darwin-x64': 0.19.2
+      '@esbuild/freebsd-arm64': 0.19.2
+      '@esbuild/freebsd-x64': 0.19.2
+      '@esbuild/linux-arm': 0.19.2
+      '@esbuild/linux-arm64': 0.19.2
+      '@esbuild/linux-ia32': 0.19.2
+      '@esbuild/linux-loong64': 0.19.2
+      '@esbuild/linux-mips64el': 0.19.2
+      '@esbuild/linux-ppc64': 0.19.2
+      '@esbuild/linux-riscv64': 0.19.2
+      '@esbuild/linux-s390x': 0.19.2
+      '@esbuild/linux-x64': 0.19.2
+      '@esbuild/netbsd-x64': 0.19.2
+      '@esbuild/openbsd-x64': 0.19.2
+      '@esbuild/sunos-x64': 0.19.2
+      '@esbuild/win32-arm64': 0.19.2
+      '@esbuild/win32-ia32': 0.19.2
+      '@esbuild/win32-x64': 0.19.2
+
   esbuild@0.21.5:
     optionalDependencies:
       '@esbuild/aix-ppc64': 0.21.5
@@ -6295,8 +8149,8 @@ snapshots:
       '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.5.4)
       eslint: 8.57.1
       eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1)
-      eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+      eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
       eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1)
       eslint-plugin-react: 7.36.1(eslint@8.57.1)
       eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1)
@@ -6315,33 +8169,44 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1):
+  eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1):
     dependencies:
       '@nolyfill/is-core-module': 1.0.39
       debug: 4.3.6
       enhanced-resolve: 5.17.1
       eslint: 8.57.1
-      eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+      eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
       fast-glob: 3.3.2
       get-tsconfig: 4.8.0
       is-bun-module: 1.2.1
       is-glob: 4.0.3
     optionalDependencies:
-      eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
     transitivePeerDependencies:
       - '@typescript-eslint/parser'
       - eslint-import-resolver-node
       - eslint-import-resolver-webpack
       - supports-color
 
-  eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1):
+  eslint-module-utils@2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
+    dependencies:
+      debug: 3.2.7
+    optionalDependencies:
+      '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.5.4)
+      eslint: 8.57.1
+      eslint-import-resolver-node: 0.3.9
+      eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
+    transitivePeerDependencies:
+      - supports-color
+
+  eslint-module-utils@2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
     dependencies:
       debug: 3.2.7
     optionalDependencies:
       '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.5.4)
       eslint: 8.57.1
       eslint-import-resolver-node: 0.3.9
-      eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1)
+      eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.57.1)
     transitivePeerDependencies:
       - supports-color
 
@@ -6355,7 +8220,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1):
+  eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1):
     dependencies:
       '@rtsao/scc': 1.1.0
       array-includes: 3.1.8
@@ -6366,7 +8231,7 @@ snapshots:
       doctrine: 2.1.0
       eslint: 8.57.1
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.11.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1)
+      eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.7.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)
       hasown: 2.0.2
       is-core-module: 2.15.1
       is-glob: 4.0.3
@@ -6375,6 +8240,7 @@ snapshots:
       object.groupby: 1.0.3
       object.values: 1.2.0
       semver: 6.3.1
+      string.prototype.trimend: 1.0.8
       tsconfig-paths: 3.15.0
     optionalDependencies:
       '@typescript-eslint/parser': 8.7.0(eslint@8.57.1)(typescript@5.5.4)
@@ -6657,6 +8523,10 @@ snapshots:
 
   fast-levenshtein@2.0.6: {}
 
+  fast-xml-parser@4.4.1:
+    dependencies:
+      strnum: 1.0.5
+
   fastq@1.17.1:
     dependencies:
       reusify: 1.0.4
@@ -6822,6 +8692,13 @@ snapshots:
       once: 1.4.0
       path-is-absolute: 1.0.1
 
+  glob@9.3.5:
+    dependencies:
+      fs.realpath: 1.0.0
+      minimatch: 8.0.4
+      minipass: 4.2.8
+      path-scurry: 1.11.1
+
   globals@13.24.0:
     dependencies:
       type-fest: 0.20.2
@@ -6859,6 +8736,10 @@ snapshots:
       section-matter: 1.0.0
       strip-bom-string: 1.0.0
 
+  gzip-size@6.0.0:
+    dependencies:
+      duplexer: 0.1.2
+
   has-bigints@1.0.2: {}
 
   has-flag@3.0.0: {}
@@ -7081,6 +8962,8 @@ snapshots:
 
   isexe@2.0.0: {}
 
+  isexe@3.1.1: {}
+
   iterator.prototype@1.1.2:
     dependencies:
       define-properties: 1.2.1
@@ -7089,6 +8972,8 @@ snapshots:
       reflect.getprototypeof: 1.0.6
       set-function-name: 2.0.2
 
+  itty-time@1.0.6: {}
+
   jackspeak@2.3.6:
     dependencies:
       '@isaacs/cliui': 8.0.2
@@ -7109,8 +8994,6 @@ snapshots:
 
   jiti@1.21.6: {}
 
-  joycon@3.1.1: {}
-
   js-tokens@4.0.0: {}
 
   js-yaml@3.14.1:
@@ -7172,8 +9055,6 @@ snapshots:
 
   lines-and-columns@1.2.4: {}
 
-  load-tsconfig@0.2.5: {}
-
   locate-path@5.0.0:
     dependencies:
       p-locate: 4.1.0
@@ -7188,8 +9069,6 @@ snapshots:
 
   lodash.merge@4.6.2: {}
 
-  lodash.sortby@4.7.0: {}
-
   lodash.startcase@4.4.0: {}
 
   log-symbols@6.0.0:
@@ -7423,7 +9302,7 @@ snapshots:
 
   min-indent@1.0.1: {}
 
-  miniflare@3.20240925.0:
+  miniflare@3.20241004.0:
     dependencies:
       '@cspotcode/source-map-support': 0.8.1
       acorn: 8.12.1
@@ -7433,7 +9312,7 @@ snapshots:
       glob-to-regexp: 0.4.1
       stoppable: 1.1.0
       undici: 5.28.4
-      workerd: 1.20240925.0
+      workerd: 1.20241004.0
       ws: 8.18.0
       youch: 3.3.3
       zod: 3.23.8
@@ -7442,7 +9321,7 @@ snapshots:
       - supports-color
       - utf-8-validate
 
-  miniflare@3.20241004.0:
+  miniflare@3.20241218.0:
     dependencies:
       '@cspotcode/source-map-support': 0.8.1
       acorn: 8.12.1
@@ -7452,7 +9331,7 @@ snapshots:
       glob-to-regexp: 0.4.1
       stoppable: 1.1.0
       undici: 5.28.4
-      workerd: 1.20241004.0
+      workerd: 1.20241218.0
       ws: 8.18.0
       youch: 3.3.3
       zod: 3.23.8
@@ -7469,14 +9348,22 @@ snapshots:
     dependencies:
       brace-expansion: 1.1.11
 
+  minimatch@8.0.4:
+    dependencies:
+      brace-expansion: 2.0.1
+
   minimatch@9.0.5:
     dependencies:
       brace-expansion: 2.0.1
 
   minimist@1.2.8: {}
 
+  minipass@4.2.8: {}
+
   minipass@7.1.2: {}
 
+  mkdirp@1.0.4: {}
+
   mkdirp@3.0.1: {}
 
   mlly@1.7.1:
@@ -7486,6 +9373,12 @@ snapshots:
       pkg-types: 1.2.0
       ufo: 1.5.4
 
+  mnemonist@0.38.3:
+    dependencies:
+      obliterator: 1.6.1
+
+  mock-fs@5.4.1: {}
+
   mri@1.2.0: {}
 
   ms@2.1.2: {}
@@ -7614,6 +9507,8 @@ snapshots:
 
   object-keys@1.1.1: {}
 
+  object-treeify@1.1.33: {}
+
   object.assign@4.1.5:
     dependencies:
       call-bind: 1.0.7
@@ -7646,6 +9541,8 @@ snapshots:
       define-properties: 1.2.1
       es-object-atoms: 1.0.0
 
+  obliterator@1.6.1: {}
+
   ohash@1.1.4: {}
 
   once@1.4.0:
@@ -7816,15 +9713,6 @@ snapshots:
     optionalDependencies:
       postcss: 8.4.31
 
-  postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(yaml@2.5.1):
-    dependencies:
-      lilconfig: 3.1.2
-    optionalDependencies:
-      jiti: 1.21.6
-      postcss: 8.4.47
-      tsx: 4.19.2
-      yaml: 2.5.1
-
   postcss-nested@6.2.0(postcss@8.4.31):
     dependencies:
       postcss: 8.4.31
@@ -7866,6 +9754,8 @@ snapshots:
 
   printable-characters@1.0.42: {}
 
+  promise.series@0.2.0: {}
+
   prop-types@15.8.1:
     dependencies:
       loose-envify: 1.4.0
@@ -7944,6 +9834,8 @@ snapshots:
     dependencies:
       picomatch: 2.3.1
 
+  readdirp@4.0.2: {}
+
   reflect.getprototypeof@1.0.6:
     dependencies:
       call-bind: 1.0.7
@@ -8032,6 +9924,11 @@ snapshots:
     dependencies:
       glob: 7.2.3
 
+  rimraf@6.0.1:
+    dependencies:
+      glob: 11.0.0
+      package-json-from-dist: 1.0.0
+
   rollup-plugin-inject@3.0.2:
     dependencies:
       estree-walker: 0.6.1
@@ -8197,14 +10094,9 @@ snapshots:
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
-    optional: true
 
   source-map@0.6.1: {}
 
-  source-map@0.8.0-beta.0:
-    dependencies:
-      whatwg-url: 7.1.0
-
   sourcemap-codec@1.4.8: {}
 
   space-separated-tokens@2.0.2: {}
@@ -8340,6 +10232,8 @@ snapshots:
 
   strip-json-comments@3.1.1: {}
 
+  strnum@1.0.5: {}
+
   styled-jsx@5.1.1(react@18.3.1):
     dependencies:
       client-only: 0.0.1
@@ -8414,7 +10308,6 @@ snapshots:
       acorn: 8.12.1
       commander: 2.20.3
       source-map-support: 0.5.21
-    optional: true
 
   text-table@0.2.0: {}
 
@@ -8449,12 +10342,6 @@ snapshots:
     dependencies:
       is-number: 7.0.0
 
-  tr46@1.0.1:
-    dependencies:
-      punycode: 2.3.1
-
-  tree-kill@1.2.2: {}
-
   trim-lines@3.0.1: {}
 
   trough@2.2.0: {}
@@ -8479,33 +10366,6 @@ snapshots:
 
   tslib@2.6.3: {}
 
-  tsup@8.2.4(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(typescript@5.5.4)(yaml@2.5.1):
-    dependencies:
-      bundle-require: 5.0.0(esbuild@0.23.1)
-      cac: 6.7.14
-      chokidar: 3.6.0
-      consola: 3.2.3
-      debug: 4.3.6
-      esbuild: 0.23.1
-      execa: 5.1.1
-      globby: 11.1.0
-      joycon: 3.1.1
-      picocolors: 1.1.0
-      postcss-load-config: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(tsx@4.19.2)(yaml@2.5.1)
-      resolve-from: 5.0.0
-      rollup: 4.21.0
-      source-map: 0.8.0-beta.0
-      sucrase: 3.35.0
-      tree-kill: 1.2.2
-    optionalDependencies:
-      postcss: 8.4.47
-      typescript: 5.5.4
-    transitivePeerDependencies:
-      - jiti
-      - supports-color
-      - tsx
-      - yaml
-
   tsx@4.19.2:
     dependencies:
       esbuild: 0.23.1
@@ -8589,14 +10449,14 @@ snapshots:
 
   undici@6.19.8: {}
 
-  unenv-nightly@2.0.0-20240919-125358-9a64854:
+  unenv-nightly@2.0.0-20241009-125958-e8ea22f:
     dependencies:
       defu: 6.1.4
       ohash: 1.1.4
       pathe: 1.1.2
       ufo: 1.5.4
 
-  unenv-nightly@2.0.0-20241009-125958-e8ea22f:
+  unenv-nightly@2.0.0-20241204-140205-a5d5190:
     dependencies:
       defu: 6.1.4
       ohash: 1.1.4
@@ -8652,8 +10512,12 @@ snapshots:
 
   url-join@5.0.0: {}
 
+  urlpattern-polyfill@10.0.0: {}
+
   util-deprecate@1.0.2: {}
 
+  uuid@9.0.1: {}
+
   validate-npm-package-license@3.0.4:
     dependencies:
       spdx-correct: 3.2.0
@@ -8732,14 +10596,6 @@ snapshots:
       - supports-color
       - terser
 
-  webidl-conversions@4.0.2: {}
-
-  whatwg-url@7.1.0:
-    dependencies:
-      lodash.sortby: 4.7.0
-      tr46: 1.0.1
-      webidl-conversions: 4.0.2
-
   which-boxed-primitive@1.0.2:
     dependencies:
       is-bigint: 1.0.4
@@ -8786,6 +10642,10 @@ snapshots:
     dependencies:
       isexe: 2.0.0
 
+  which@4.0.0:
+    dependencies:
+      isexe: 3.1.1
+
   why-is-node-running@2.3.0:
     dependencies:
       siginfo: 2.0.0
@@ -8793,14 +10653,6 @@ snapshots:
 
   word-wrap@1.2.5: {}
 
-  workerd@1.20240925.0:
-    optionalDependencies:
-      '@cloudflare/workerd-darwin-64': 1.20240925.0
-      '@cloudflare/workerd-darwin-arm64': 1.20240925.0
-      '@cloudflare/workerd-linux-64': 1.20240925.0
-      '@cloudflare/workerd-linux-arm64': 1.20240925.0
-      '@cloudflare/workerd-windows-64': 1.20240925.0
-
   workerd@1.20241004.0:
     optionalDependencies:
       '@cloudflare/workerd-darwin-64': 1.20241004.0
@@ -8809,53 +10661,61 @@ snapshots:
       '@cloudflare/workerd-linux-arm64': 1.20241004.0
       '@cloudflare/workerd-windows-64': 1.20241004.0
 
-  wrangler@3.78.10(@cloudflare/workers-types@4.20240925.0):
+  workerd@1.20241218.0:
+    optionalDependencies:
+      '@cloudflare/workerd-darwin-64': 1.20241218.0
+      '@cloudflare/workerd-darwin-arm64': 1.20241218.0
+      '@cloudflare/workerd-linux-64': 1.20241218.0
+      '@cloudflare/workerd-linux-arm64': 1.20241218.0
+      '@cloudflare/workerd-windows-64': 1.20241218.0
+
+  wrangler@3.80.4:
     dependencies:
       '@cloudflare/kv-asset-handler': 0.3.4
-      '@cloudflare/workers-shared': 0.5.4
+      '@cloudflare/workers-shared': 0.6.0
       '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
       '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
       blake3-wasm: 2.1.5
       chokidar: 3.6.0
       esbuild: 0.17.19
-      miniflare: 3.20240925.0
+      miniflare: 3.20241004.0
       nanoid: 3.3.7
       path-to-regexp: 6.3.0
       resolve: 1.22.8
       resolve.exports: 2.0.2
       selfsigned: 2.4.1
       source-map: 0.6.1
-      unenv: unenv-nightly@2.0.0-20240919-125358-9a64854
-      workerd: 1.20240925.0
+      unenv: unenv-nightly@2.0.0-20241009-125958-e8ea22f
+      workerd: 1.20241004.0
       xxhash-wasm: 1.0.2
     optionalDependencies:
-      '@cloudflare/workers-types': 4.20240925.0
       fsevents: 2.3.3
     transitivePeerDependencies:
       - bufferutil
       - supports-color
       - utf-8-validate
 
-  wrangler@3.80.4:
+  wrangler@3.99.0(@cloudflare/workers-types@4.20240925.0):
     dependencies:
       '@cloudflare/kv-asset-handler': 0.3.4
-      '@cloudflare/workers-shared': 0.6.0
       '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
       '@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
       blake3-wasm: 2.1.5
-      chokidar: 3.6.0
+      chokidar: 4.0.1
+      date-fns: 4.1.0
       esbuild: 0.17.19
-      miniflare: 3.20241004.0
+      itty-time: 1.0.6
+      miniflare: 3.20241218.0
       nanoid: 3.3.7
       path-to-regexp: 6.3.0
       resolve: 1.22.8
-      resolve.exports: 2.0.2
       selfsigned: 2.4.1
       source-map: 0.6.1
-      unenv: unenv-nightly@2.0.0-20241009-125958-e8ea22f
-      workerd: 1.20241004.0
+      unenv: unenv-nightly@2.0.0-20241204-140205-a5d5190
+      workerd: 1.20241218.0
       xxhash-wasm: 1.0.2
     optionalDependencies:
+      '@cloudflare/workers-types': 4.20240925.0
       fsevents: 2.3.3
     transitivePeerDependencies:
       - bufferutil
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 64e0443e5..54474c44e 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -5,25 +5,31 @@ packages:
 
 catalog:
   "@cloudflare/workers-types": ^4.20240925.0
+  "@dotenvx/dotenvx": 1.31.0
   "@eslint/js": ^9.11.1
   "@playwright/test": 1.47.0
   "@tsconfig/strictest": "^2.0.5"
+  "@types/mock-fs": ^4.13.4
   "@types/node": ^22.2.0
-  "@types/react": ^18
   "@types/react-dom": ^18
+  "@types/react": ^18
   "esbuild": ^0.23.0
-  "eslint": ^9.11.1
+  "eslint-plugin-import": "^2.31.0"
+  "eslint-plugin-simple-import-sort": "^12.1.1"
   "eslint-plugin-unicorn": ^55.0.0
+  "eslint": ^9.11.1
   "glob": ^11.0.0
   "globals": ^15.9.0
+  "mock-fs": ^5.4.1
   "next": 14.2.11
   "package-manager-detector": ^0.2.0
-  "react": ^18
   "react-dom": ^18
+  "react": ^18
+  "rimraf": "^6.0.1"
   "ts-morph": ^23.0.0
   "tsup": ^8.2.4
-  "typescript": ^5.5.4
   "tsx": ^4.19.2
   "typescript-eslint": ^8.7.0
+  "typescript": ^5.5.4
   "vitest": ^2.1.1
-  "wrangler": ^3.78.10
+  "wrangler": ^3.99.0
