From 16f7af7df3d5d6a22963d17cb0b564c73c4f09d1 Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Fri, 20 Feb 2026 13:23:29 +0100 Subject: [PATCH] fix: lazy-init Supabase client to prevent crash when env vars missing Co-Authored-By: Claude Opus 4.6 --- services/supabase.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/services/supabase.ts b/services/supabase.ts index 0fed02e..21b51ab 100644 --- a/services/supabase.ts +++ b/services/supabase.ts @@ -1,10 +1,20 @@ -import { createClient } from '@supabase/supabase-js'; +import { createClient, SupabaseClient } from '@supabase/supabase-js'; const supabaseUrl = process.env.SUPABASE_URL || ''; const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || ''; -export const supabase = createClient(supabaseUrl, supabaseAnonKey); +let _client: SupabaseClient | null = null; + +const getClient = (): SupabaseClient => { + if (!_client) { + if (!supabaseUrl || !supabaseAnonKey) { + throw new Error('Supabase credentials not configured. Add SUPABASE_URL and SUPABASE_ANON_KEY to environment variables.'); + } + _client = createClient(supabaseUrl, supabaseAnonKey); + } + return _client; +}; export interface VendorDailyRow { id?: number; @@ -40,7 +50,7 @@ export const fetchVendorData = async (filters: VendorFilters): Promise => { - const { data: marketData } = await supabase + const client = getClient(); + + const { data: marketData } = await client .from('vendor_daily_data') .select('market'); - const { data: tagData } = await supabase + const { data: tagData } = await client .from('vendor_daily_data') .select('tags'); - const { data: dateMin } = await supabase + const { data: dateMin } = await client .from('vendor_daily_data') .select('date') .order('date', { ascending: true }) .limit(1); - const { data: dateMax } = await supabase + const { data: dateMax } = await client .from('vendor_daily_data') .select('date') .order('date', { ascending: false })