From 762e3f0f9a01e4434320fa880299d21f7c66c307 Mon Sep 17 00:00:00 2001 From: onmax Date: Tue, 23 Jun 2026 15:10:39 +0200 Subject: [PATCH] fix: pass runtime config to schema auth factory --- src/module/schema.ts | 2 +- src/schema-generator.ts | 3 ++- test/cases/auth-schema-export/nuxt.config.ts | 5 ++++- test/cases/auth-schema-export/server/auth.config.ts | 6 +++--- test/schema-generator.test.ts | 11 +++++++++++ 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/module/schema.ts b/src/module/schema.ts index a16ccb33..08c71a3c 100644 --- a/src/module/schema.ts +++ b/src/module/schema.ts @@ -73,7 +73,7 @@ async function loadAuthOptions(context: SchemaContext) { .filter(([, value]) => typeof value === 'string') .map(([key, value]) => [key, value as string]), ) - const userConfig = await loadUserAuthConfig(configFile, isProduction, alias) + const userConfig = await loadUserAuthConfig(configFile, isProduction, alias, context.nuxt.options.runtimeConfig) const extendedConfig: { plugins?: BetterAuthPlugin[] } = {} await context.nuxt.callHook('better-auth:config:extend', extendedConfig) diff --git a/src/schema-generator.ts b/src/schema-generator.ts index d7517e1b..45b1c78e 100644 --- a/src/schema-generator.ts +++ b/src/schema-generator.ts @@ -68,6 +68,7 @@ export async function loadUserAuthConfig( configPath: string, throwOnError = false, alias?: Record, + runtimeConfig: unknown = {}, ): Promise> { const { createJiti } = await import('jiti') const { defineServerAuth: runtimeDefineServerAuth } = await import('./runtime/config') @@ -87,7 +88,7 @@ export async function loadUserAuthConfig( const mod = await jiti.import(configPath) as { default?: unknown } const configFn = mod.default if (typeof configFn === 'function') { - return configFn({ runtimeConfig: {}, db: null }) + return configFn({ runtimeConfig, db: null }) } consola.warn('[@onmax/nuxt-better-auth] auth.config.ts does not export default. Expected: export default defineServerAuth(...)') if (throwOnError) { diff --git a/test/cases/auth-schema-export/nuxt.config.ts b/test/cases/auth-schema-export/nuxt.config.ts index a60a66d0..1dc86ae4 100644 --- a/test/cases/auth-schema-export/nuxt.config.ts +++ b/test/cases/auth-schema-export/nuxt.config.ts @@ -5,6 +5,9 @@ export default defineNuxtConfig({ runtimeConfig: { betterAuthSecret: 'test-secret-for-testing-only-32chars!', - public: { siteUrl: 'http://localhost:3000' }, + public: { + app: { routes: { signUp: '/auth/sign-up' } }, + siteUrl: 'http://localhost:3000', + }, }, }) diff --git a/test/cases/auth-schema-export/server/auth.config.ts b/test/cases/auth-schema-export/server/auth.config.ts index b2590c36..9707e0cf 100644 --- a/test/cases/auth-schema-export/server/auth.config.ts +++ b/test/cases/auth-schema-export/server/auth.config.ts @@ -1,6 +1,6 @@ import { defineServerAuth } from '../../../../src/runtime/config' -export default defineServerAuth({ - appName: 'Auth Schema Export Test', +export default defineServerAuth(({ runtimeConfig }) => ({ + appName: runtimeConfig.public.app.routes.signUp, emailAndPassword: { enabled: true }, -}) +})) diff --git a/test/schema-generator.test.ts b/test/schema-generator.test.ts index 1ae3a930..89ef4e53 100644 --- a/test/schema-generator.test.ts +++ b/test/schema-generator.test.ts @@ -149,6 +149,17 @@ describe('loadUserAuthConfig', () => { expect(result).toEqual({ plugins: [] }) }) + + it('passes runtime config to function syntax during schema generation', async () => { + const configPath = join(TEST_DIR, 'runtime-config.ts') + writeFileSync(configPath, `export default defineServerAuth(({ runtimeConfig }) => ({ appName: runtimeConfig.public.app.routes.signUp }))`) + + const result = await loadUserAuthConfig(configPath, false, undefined, { + public: { app: { routes: { signUp: '/auth/sign-up' } } }, + }) + + expect(result).toEqual({ appName: '/auth/sign-up' }) + }) }) describe('defineServerAuth', () => {