fix: make Supabase client lazy to avoid errors when credentials missing

This commit is contained in:
maulanasdqn
2026-01-21 20:41:28 +07:00
parent 951db0f28a
commit 3f30fbe89c
+35 -16
View File
@@ -1,24 +1,39 @@
import { createClient } from '@supabase/supabase-js'; import { createClient, SupabaseClient } from '@supabase/supabase-js';
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY; const supabaseAnonKey = import.meta.env.VITE_SUPABASE_ANON_KEY;
if (!supabaseUrl || !supabaseAnonKey) { // Lazy initialization - only create client when credentials are available
throw new Error('Missing Supabase environment variables'); let _supabase: SupabaseClient | null = null;
}
// Create Supabase client with proper session management enabled const getSupabaseClient = (): SupabaseClient => {
export const supabase = createClient(supabaseUrl, supabaseAnonKey, { if (!supabaseUrl || !supabaseAnonKey) {
auth: { throw new Error('Missing Supabase environment variables. Please set VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY.');
autoRefreshToken: true, // ✅ Auto-refresh expired tokens }
persistSession: true, // ✅ Persist session in storage
detectSessionInUrl: true, // ✅ Auto-detect OAuth callback if (!_supabase) {
storage: typeof window !== 'undefined' ? window.localStorage : undefined, _supabase = createClient(supabaseUrl, supabaseAnonKey, {
}, auth: {
global: { autoRefreshToken: true,
headers: { persistSession: true,
'X-Client-Info': 'supabase-js-web', detectSessionInUrl: true,
}, storage: typeof window !== 'undefined' ? window.localStorage : undefined,
},
global: {
headers: {
'X-Client-Info': 'supabase-js-web',
},
},
});
}
return _supabase;
};
// Export a proxy that lazily initializes the client
export const supabase = new Proxy({} as SupabaseClient, {
get(_, prop) {
return getSupabaseClient()[prop as keyof SupabaseClient];
}, },
}); });
@@ -26,6 +41,10 @@ export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
// NOTE: With proper session management, this should no longer be needed // NOTE: With proper session management, this should no longer be needed
// Once session is set via supabase.auth.setSession(), the base client will have auth context // Once session is set via supabase.auth.setSession(), the base client will have auth context
export const getAuthenticatedClient = (accessToken: string) => { export const getAuthenticatedClient = (accessToken: string) => {
if (!supabaseUrl || !supabaseAnonKey) {
throw new Error('Missing Supabase environment variables. Please set VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY.');
}
return createClient(supabaseUrl, supabaseAnonKey, { return createClient(supabaseUrl, supabaseAnonKey, {
auth: { auth: {
autoRefreshToken: false, autoRefreshToken: false,