refactor: migrate authentication from Supabase to Better Auth and update project configuration

This commit is contained in:
Jose Selesan
2026-04-17 08:35:54 -03:00
parent aabd9a8266
commit b3f1b72da4
14 changed files with 87 additions and 332 deletions

View File

@@ -2,14 +2,12 @@ import { createHash, randomInt } from 'node:crypto';
import { auth } from '@/lib/auth';
import { sendMail } from '@/lib/mailer';
import { db } from '@/lib/prisma';
import { getSupabaseAdminClient } from '@/lib/supabase-admin';
import type {
OnboardingCompleteInput,
OnboardingResendOtpInput,
OnboardingStartInput,
OnboardingVerifyOtpInput,
} from '@repo/api-contract';
import type { User as SupabaseAuthUser } from '@supabase/supabase-js';
import { v7 as uuidv7 } from 'uuid';
const OTP_LENGTH = 6;
@@ -126,77 +124,6 @@ async function sendOtpEmail(email: string, otpCode: string) {
});
}
async function findSupabaseUserByEmail(email: string): Promise<SupabaseAuthUser | null> {
let page = 1;
const perPage = 100;
while (page <= 10) {
const { data, error } = await getSupabaseAdminClient().auth.admin.listUsers({
page,
perPage,
});
if (error) {
throw new Error(`No se pudo consultar usuarios en Supabase: ${error.message}`);
}
const found = data.users.find((user) => user.email?.toLowerCase() === email.toLowerCase());
if (found) {
return found;
}
if (data.users.length < perPage) {
return null;
}
page += 1;
}
return null;
}
async function ensureSupabaseUser(params: {
email: string;
fullName: string;
password: string;
}): Promise<string> {
const existingUser = await findSupabaseUserByEmail(params.email);
if (existingUser) {
const { error } = await getSupabaseAdminClient().auth.admin.updateUserById(existingUser.id, {
password: params.password,
email_confirm: true,
user_metadata: {
full_name: params.fullName,
name: params.fullName,
},
});
if (error) {
throw new Error(`No se pudo actualizar usuario existente en Supabase: ${error.message}`);
}
return existingUser.id;
}
const { data, error } = await getSupabaseAdminClient().auth.admin.createUser({
email: params.email,
password: params.password,
email_confirm: true,
user_metadata: {
full_name: params.fullName,
name: params.fullName,
},
});
if (error || !data.user) {
throw new Error(`No se pudo crear usuario en Supabase: ${error?.message ?? 'unknown error'}`);
}
return data.user.id;
}
export async function startOnboarding(input: OnboardingStartInput): Promise<StartOnboardingResult> {
const email = normalizeEmail(input.email);
const otpCode = createOtpCode();