From 950ab2bc5174815a30ffa28e49a5f898c5dbdc71 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 7 Aug 2026 04:15:08 +0000 Subject: [PATCH] Modified by www.SourceFiles.app --- src/integrations/supabase/client.ts | 68 +++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/integrations/supabase/client.ts diff --git a/src/integrations/supabase/client.ts b/src/integrations/supabase/client.ts new file mode 100644 index 0000000..8bd3a40 --- /dev/null +++ b/src/integrations/supabase/client.ts @@ -0,0 +1,68 @@ +// This file is automatically generated. Do not edit it directly. +import { createClient } from '@supabase/supabase-js'; +import type { Database } from './types'; + +function isNewSupabaseApiKey(value: string): boolean { + return value.startsWith('sb_publishable_') || value.startsWith('sb_secret_'); +} + +function createSupabaseFetch(supabaseKey: string): typeof fetch { + return (input, init) => { + const headers = new Headers( + typeof Request !== 'undefined' && input instanceof Request ? input.headers : undefined, + ); + + if (init?.headers) { + new Headers(init.headers).forEach((value, key) => headers.set(key, value)); + } + + // New Supabase API keys are opaque strings, not bearer JWTs. + if (isNewSupabaseApiKey(supabaseKey) && headers.get('Authorization') === `Bearer ${supabaseKey}`) { + headers.delete('Authorization'); + } + + headers.set('apikey', supabaseKey); + return fetch(input, { ...init, headers }); + }; +} + + +function createSupabaseClient() { + // Use import.meta.env for client-side (Vite build-time replacement) + // Fall back to process.env for SSR (server-side rendering) + const SUPABASE_URL = import.meta.env.VITE_SUPABASE_URL || process.env.SUPABASE_URL; + const SUPABASE_PUBLISHABLE_KEY = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_PUBLISHABLE_KEY; + + if (!SUPABASE_URL || !SUPABASE_PUBLISHABLE_KEY) { + const missing = [ + ...(!SUPABASE_URL ? ['SUPABASE_URL'] : []), + ...(!SUPABASE_PUBLISHABLE_KEY ? ['SUPABASE_PUBLISHABLE_KEY'] : []), + ]; + const message = `Missing Supabase environment variable(s): ${missing.join(', ')}. Connect Supabase in Lovable Cloud.`; + console.error(`[Supabase] ${message}`); + throw new Error(message); + } + + return createClient(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, { + global: { + fetch: createSupabaseFetch(SUPABASE_PUBLISHABLE_KEY), + }, + auth: { + storage: typeof window !== 'undefined' ? localStorage : undefined, + persistSession: true, + autoRefreshToken: true, + } + }); +} + +let _supabase: ReturnType | undefined; + +// Import the supabase client like this: +// import { supabase } from "@/integrations/supabase/client"; +export const supabase = new Proxy({} as ReturnType, { + get(_, prop, receiver) { + if (!_supabase) _supabase = createSupabaseClient(); + return Reflect.get(_supabase, prop, receiver); + }, +}); +