51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import type { Database } from './db'
|
|
import type { Env } from './env'
|
|
|
|
import { betterAuth } from 'better-auth'
|
|
import { drizzleAdapter } from 'better-auth/adapters/drizzle'
|
|
import { bearer } from 'better-auth/plugins'
|
|
|
|
import * as authSchema from '../schemas/accounts'
|
|
|
|
export function createAuth(db: Database, env: Env) {
|
|
return betterAuth({
|
|
database: drizzleAdapter(db, {
|
|
provider: 'pg',
|
|
schema: {
|
|
...authSchema,
|
|
},
|
|
}),
|
|
|
|
plugins: [
|
|
bearer(),
|
|
],
|
|
|
|
emailAndPassword: {
|
|
enabled: true,
|
|
},
|
|
|
|
baseURL: env.API_SERVER_URL,
|
|
trustedOrigins: ['*'],
|
|
|
|
// To skip state-mismatch errors
|
|
// https://github.com/better-auth/better-auth/issues/4969#issuecomment-3397804378
|
|
advanced: {
|
|
defaultCookieAttributes: {
|
|
sameSite: 'None', // this enables cross-site cookies
|
|
secure: true, // required for SameSite=None
|
|
},
|
|
},
|
|
|
|
socialProviders: {
|
|
google: {
|
|
clientId: env.AUTH_GOOGLE_CLIENT_ID,
|
|
clientSecret: env.AUTH_GOOGLE_CLIENT_SECRET,
|
|
},
|
|
github: {
|
|
clientId: env.AUTH_GITHUB_CLIENT_ID,
|
|
clientSecret: env.AUTH_GITHUB_CLIENT_SECRET,
|
|
},
|
|
},
|
|
})
|
|
}
|