isle.pizza/server/src/auth.ts

52 lines
1.4 KiB
TypeScript

import { betterAuth } from "better-auth";
import { anonymous } from "better-auth/plugins";
export type Variables = {
session: { user: { id: string } };
};
export type Env = {
DB: D1Database;
API_URL: string;
BETTER_AUTH_SECRET: string;
DISCORD_CLIENT_ID?: string;
DISCORD_CLIENT_SECRET?: string;
};
export function createAuth(env: Env) {
return betterAuth({
database: env.DB,
baseURL: env.API_URL,
secret: env.BETTER_AUTH_SECRET,
plugins: [
anonymous({
onLinkAccount: async ({ anonymousUser, newUser }) => {
// Transfer all data from anonymous to linked account
await env.DB.batch([
env.DB.prepare(
"UPDATE memory_completions SET user_id = ? WHERE user_id = ?"
).bind(newUser.user.id, anonymousUser.user.id),
env.DB.prepare(
"UPDATE user_saves SET user_id = ? WHERE user_id = ?"
).bind(newUser.user.id, anonymousUser.user.id),
env.DB.prepare(
"UPDATE user_config SET user_id = ? WHERE user_id = ?"
).bind(newUser.user.id, anonymousUser.user.id),
]);
},
}),
],
socialProviders: {
...(env.DISCORD_CLIENT_ID && env.DISCORD_CLIENT_SECRET
? {
discord: {
clientId: env.DISCORD_CLIENT_ID,
clientSecret: env.DISCORD_CLIENT_SECRET,
},
}
: {}),
},
trustedOrigins: ["http://localhost:5173", "http://localhost:3000", "https://isle.pizza", "https://dev.isle.pizza"],
});
}