From d89fed7eecfa151c18b0a8cf95dae1dfe83dfec2 Mon Sep 17 00:00:00 2001 From: James Talmage Date: Mon, 21 Jul 2025 01:55:46 -0400 Subject: [PATCH] feat(auth-js): Support async ConfigHandler (#1324) * feat(auth-js): Support async ConfigHandler * add changeset * format --- .changeset/good-otters-press.md | 5 +++++ packages/auth-js/src/index.test.ts | 21 +++++++++++++++++++++ packages/auth-js/src/index.ts | 4 ++-- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 .changeset/good-otters-press.md diff --git a/.changeset/good-otters-press.md b/.changeset/good-otters-press.md new file mode 100644 index 00000000..27f94160 --- /dev/null +++ b/.changeset/good-otters-press.md @@ -0,0 +1,5 @@ +--- +'@hono/auth-js': minor +--- + +Allow async authjs Config diff --git a/packages/auth-js/src/index.test.ts b/packages/auth-js/src/index.test.ts index 71eac417..1828a11c 100644 --- a/packages/auth-js/src/index.test.ts +++ b/packages/auth-js/src/index.test.ts @@ -47,6 +47,27 @@ describe('Config', () => { expect(res.status).toBe(200) }) + it('Should allow async ConfigHandler', async () => { + globalThis.process.env = { AUTH_SECRET: 'secret' } + const app = new Hono() + + app.use( + '/*', + initAuthConfig(async () => { + await new Promise((resolve) => setTimeout(resolve, 1)) + return { + basePath: '/api/auth', + providers: [], + } + }) + ) + + app.use('/api/auth/*', authHandler()) + const req = new Request('http://localhost/api/auth/signin') + const res = await app.request(req) + expect(res.status).toBe(200) + }) + it('Should return 401 is if auth cookie is invalid or missing', async () => { const app = new Hono() diff --git a/packages/auth-js/src/index.ts b/packages/auth-js/src/index.ts index 97d2e182..b2b9d97f 100644 --- a/packages/auth-js/src/index.ts +++ b/packages/auth-js/src/index.ts @@ -29,7 +29,7 @@ export type AuthUser = { export interface AuthConfig extends Omit {} -export type ConfigHandler = (c: Context) => AuthConfig +export type ConfigHandler = (c: Context) => AuthConfig | Promise export function setEnvDefaults(env: AuthEnv, config: AuthConfig): void { config.secret ??= env.AUTH_SECRET @@ -118,7 +118,7 @@ export function verifyAuth(): MiddlewareHandler { export function initAuthConfig(cb: ConfigHandler): MiddlewareHandler { return async (c, next) => { - const config = cb(c) + const config = await cb(c) c.set('authConfig', config) await next() }