Files
drive/packages/convex/auth.ts

66 lines
1.8 KiB
TypeScript
Raw Permalink Normal View History

import { createClient, type GenericCtx } from "@convex-dev/better-auth"
import { convex, crossDomain } from "@convex-dev/better-auth/plugins"
import { components } from "@fileone/convex/api"
import type { DataModel } from "@fileone/convex/dataModel"
2025-10-20 00:17:41 +00:00
import { betterAuth } from "better-auth"
import authSchema from "./betterauth/schema"
const siteUrl = process.env.SITE_URL!
// The component client has methods needed for integrating Convex with Better Auth,
// as well as helper methods for general use.
export const authComponent = createClient<DataModel, typeof authSchema>(
components.betterAuth,
{
local: {
schema: authSchema,
},
triggers: {
user: {
onCreate: async (ctx, user) => {
const now = Date.now()
2025-11-02 18:12:33 +00:00
await Promise.all([
ctx.db.insert("userInfo", {
userId: user._id,
storageUsageBytes: 0,
storageQuotaBytes: 1024 * 1024 * 1024 * 5, // 5GB
}),
ctx.db.insert("directories", {
name: "",
userId: user._id,
createdAt: now,
updatedAt: now,
}),
])
},
},
},
},
)
export const createAuth = (
ctx: GenericCtx<DataModel>,
{ optionsOnly } = { optionsOnly: false },
) => {
return betterAuth({
// disable logging when createAuth is called just to generate options.
// this is not required, but there's a lot of noise in logs without it.
logger: {
disabled: optionsOnly,
},
trustedOrigins: [siteUrl],
database: authComponent.adapter(ctx),
// Configure simple, non-verified email/password to get started
emailAndPassword: {
enabled: true,
requireEmailVerification: false,
},
plugins: [
// The cross domain plugin is required for client side frameworks
crossDomain({ siteUrl }),
// The Convex plugin is required for Convex compatibility
convex(),
],
})
}