cli not generating migration files due to cf bindings usage

im trying to set up better auth on cf workers (currently with hono, but would switch once this i would find a fix for this).

i have the following betterauth config:
// auth.ts
import { betterAuth } from "better-auth";
import { z } from "zod";

export const createAuth = (env: Env) =>
  betterAuth({
    basePath: "/api/auth",
    database: env.AUTH_DB,
    socialProviders: {
      google: {
        clientId: env.GOOGLE_CLIENT_ID,
        clientSecret: env.GOOGLE_CLIENT_SECRET,
      },
    },
    user: {
      additionalFields: {
        role: {
          type: "string",
          validator: {
            input: z.enum(["guest", "user", "admin"]).default("guest"),
          },
        },
        active: {
          type: "boolean",
          validator: {
            input: z.boolean(),
          },
          defaultValue: false,
        },
      },
    },
  });


it has to be a function as i need to pass the cf env in somehow.

this is where the client is created:
// index.ts
import { Hono } from "hono";
import { cors } from "hono/cors";
import { createAuth } from "./auth";

const app = new Hono<{ Bindings: Env }>();

app.use("/api/auth/*", async (c, next) => {
  const corsMiddlewareHandler = cors({
    origin: c.env.ALLOWED_ORIGIN,
    allowHeaders: ["Content-Type", "Authorization"],
    allowMethods: ["POST", "GET", "OPTIONS"],
    exposeHeaders: ["Content-Length"],
    maxAge: 600,
    credentials: true,
  });
  return corsMiddlewareHandler(c, next);
});

app.on(["POST", "GET"], "/api/auth/*", (c) => {
  return createAuth(c.env).handler(c.req.raw);
});

export default app satisfies ExportedHandler<Env>;


has anyone experienced this aswell before?
im aware that the cli is trying to look for a config exported under the name
auth
, but under my circumstances it's simply just not possible
Solution
I recommend making a fake auth file and a real auth file.
The fake one is just your better-auth config except for any fields which require ENV vars.
^ This file will be the one you would then use for the better-auth cli to read.

The real one would be the one you currently have.
Was this page helpful?