import { createServerClient, type CookieOptions } from '@supabase/ssr' import { createClient } from '@supabase/supabase-js' import { cookies } from 'next/headers' import { NextResponse } from 'next/server' export async function GET(request: Request) { console.log("\n=== AUTH CALLBACK START ==="); const { searchParams, origin } = new URL(request.url) const code = searchParams.get('code') const next = searchParams.get('next') ?? '/' console.log("Code present:", !!code); console.log("Redirect target:", next); if (code) { const cookieStore = await cookies() const supabase = createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { cookies: { getAll() { return cookieStore.getAll() }, setAll(cookiesToSet) { cookiesToSet.forEach(({ name, value, options }) => { cookieStore.set(name, value, options) }) }, }, } ) console.log("Exchanging code for session..."); const { data: { session }, error } = await supabase.auth.exchangeCodeForSession(code) if (error) { console.error('❌ Auth exchange error:', error) return NextResponse.redirect(`${origin}/auth/error?error=${encodeURIComponent(error.message)}`) } if (session?.user) { console.log("✅ Auth successful. User ID:", session.user.id); console.log("User email:", session.user.email); // SYNC USER TO DATABASE console.log("Checking if user exists in DB..."); // Use the authenticated supabase client (has the session) const { data: existingUser, error: fetchError } = await supabase .from('users') .select('id') .eq('id', session.user.id) .single(); console.log("Fetch result:", { existingUser, fetchError }); if (fetchError && fetchError.code !== 'PGRST116') { console.error("❌ Error checking user existence:", fetchError); } if (!existingUser) { console.log("🔄 User not found in DB. Attempting insert..."); const insertData = { id: session.user.id, email: session.user.email, full_name: session.user.user_metadata.full_name || null, avatar_url: session.user.user_metadata.avatar_url || null, credits: 5 }; console.log("Insert data:", insertData); const { data: insertResult, error: insertError } = await supabase .from('users') .insert(insertData) .select(); if (insertError) { console.error("❌ INSERT FAILED:", insertError); console.error("Error code:", insertError.code); console.error("Error message:", insertError.message); console.error("Error details:", insertError.details); console.error("Error hint:", insertError.hint); } else { console.log("✅ Successfully inserted user:", insertResult); } } else { console.log("✅ User already exists in DB"); } } } console.log("Redirecting to:", `${origin}${next}`); console.log("=== AUTH CALLBACK END ===\n"); return NextResponse.redirect(`${origin}${next}`) }