'use server'; import 'server-only'; import { createServerClient } from '@/utils/supabase'; import { type EmailOtpType } from '@supabase/supabase-js'; import { type NextRequest } from 'next/server'; import { redirect } from 'next/navigation'; export const GET = async (request: NextRequest) => { const { searchParams, origin } = new URL(request.url); const code = searchParams.get('code'); const token_hash = searchParams.get('token'); const type = searchParams.get('type') as EmailOtpType | null; const redirectTo = searchParams.get('redirect_to') ?? '/'; const supabase = await createServerClient(); if (code) { const { error } = await supabase.auth.exchangeCodeForSession(code); if (error) { console.error('OAuth error:', error); return redirect(`/sign-in?error=${encodeURIComponent(error.message)}`); } return redirect(redirectTo); } if (token_hash && type) { const { error } = await supabase.auth.verifyOtp({ type, token_hash, }); if (!error) { if (type === 'signup' || type === 'magiclink' || type === 'email') return redirect('/'); if (type === 'recovery' || type === 'email_change') return redirect('/profile'); if (type === 'invite') return redirect('/sign-up'); } return redirect( `/?error=${encodeURIComponent(error?.message ?? 'Unknown error')}`, ); } return redirect('/'); };