import { createClient, SupabaseClient } from '@supabase/supabase-js'
// Environment variables
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!
const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
// Client-side Supabase client
export const supabase: SupabaseClient = createClient(supabaseUrl, supabaseAnonKey, {
auth: {
autoRefreshToken: true,
persistSession: true,
detectSessionInUrl: true
}
})
// Server-side Supabase client (for use in API routes)
export const createServerSupabaseClient = () => {
const serviceRoleKey = process.env.SUPABASE_SERVICE_ROLE_KEY
if (!serviceRoleKey) {
throw new Error('SUPABASE_SERVICE_ROLE_KEY is not set')
}
return createClient(supabaseUrl, serviceRoleKey, {
auth: {
autoRefreshToken: false,
persistSession: false
}
})
}
// Auth helpers
export const signInWithGoogle = async () => {
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'google',
options: {
redirectTo: `${window.location.origin}/auth/callback`
}
})
return { data, error }
}
export const signInWithGitHub = async () => {
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'github',
options: {
redirectTo: `${window.location.origin}/auth/callback`
}
})
return { data, error }
}
export const getCurrentUser = async () => {
const { data: { user }, error } = await supabase.auth.getUser()
return { user, error }
}
export const getSession = async () => {
const { data: { session }, error } = await supabase.auth.getSession()
return { session, error }
}