fix: make Supabase client lazy to avoid errors when credentials missing
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user