diff --git a/src/lib/supabase.ts b/src/lib/supabase.ts index b2b303a..eefb1f8 100644 --- a/src/lib/supabase.ts +++ b/src/lib/supabase.ts @@ -1,5 +1,12 @@ const SUPABASE_URL = 'https://hwithddwaapyhnfwcesj.supabase.co'; -const SUPABASE_KEY = 'sb_publishable_fGXkh0bSrAOqSk2jWKAzSg_NJD9YPCv'; +const SUPABASE_ANON_KEY = 'sb_publishable_fGXkh0bSrAOqSk2jWKAzSg_NJD9YPCv'; + +function authHeaders(token?: string): Record { + return { + 'apikey': SUPABASE_ANON_KEY, + 'Authorization': `Bearer ${token ?? SUPABASE_ANON_KEY}`, + }; +} export interface ExcelRow extends Array {} @@ -14,17 +21,14 @@ export async function getAllSyncedRows(token?: string): Promise = {}; @@ -46,9 +50,8 @@ export async function saveRowToSupabase(articleNo: string, rowData: ExcelRow, to method: 'POST', headers: { 'Content-Type': 'application/json', - 'apikey': SUPABASE_KEY, - 'Authorization': `Bearer ${SUPABASE_KEY}`, - 'Prefer': 'resolution=merge-duplicates' + ...authHeaders(token), + 'Prefer': 'resolution=merge-duplicates', }, body: JSON.stringify({ product_id: articleNo, @@ -61,12 +64,12 @@ export async function saveRowToSupabase(articleNo: string, rowData: ExcelRow, to if (!response.ok) { const err = await response.json().catch(() => ({})); - return { - success: false, - error: `${response.status} ${response.statusText}: ${err.message || err.error_description || 'Unknown error'}` + return { + success: false, + error: `${response.status} ${response.statusText}: ${err.message || err.error_description || 'Unknown error'}` }; } - + return { success: true }; } catch (error: any) { console.error('Error saving to Supabase:', error); @@ -99,9 +102,8 @@ export async function saveHistoryEntry( method: 'POST', headers: { 'Content-Type': 'application/json', - 'apikey': SUPABASE_KEY, - 'Authorization': `Bearer ${SUPABASE_KEY}`, - 'Prefer': 'return=minimal' + ...authHeaders(token), + 'Prefer': 'return=minimal', }, body: JSON.stringify({ product_id: productId, @@ -116,12 +118,12 @@ export async function saveHistoryEntry( if (!response.ok) { const err = await response.json().catch(() => ({})); - return { - success: false, - error: `History ${response.status}: ${err.message || 'Unknown error'}` + return { + success: false, + error: `History ${response.status}: ${err.message || 'Unknown error'}` }; } - + return { success: true }; } catch (error: any) { console.error('Error saving history to Supabase:', error); @@ -135,18 +137,14 @@ export async function getHistory(token?: string): Promise { `${SUPABASE_URL}/rest/v1/products_history?select=*&order=changed_at.desc&limit=100`, { cache: 'no-store', - headers: { - 'apikey': SUPABASE_KEY, - // Try using only the ANON key just in case RLS or token expiry is failing silently - 'Authorization': `Bearer ${SUPABASE_KEY}` - } + headers: authHeaders(token), } ); if (!response.ok) { const err = await response.text(); return [{ - id: 'error-' + Date.now(), + id: -1, product_id: 'ERROR', article_name: `Failed: ${response.status} ${err}`, old_data: [], @@ -159,13 +157,13 @@ export async function getHistory(token?: string): Promise { } catch (error: any) { console.error('Error fetching history:', error); return [{ - id: 'error-' + Date.now(), - product_id: 'EXCEPTION', - article_name: `Message: ${error.message}`, - old_data: [], - new_data: [], - changed_at: new Date().toISOString(), - changed_by: 'system' + id: -2, + product_id: 'EXCEPTION', + article_name: `Message: ${error.message}`, + old_data: [], + new_data: [], + changed_at: new Date().toISOString(), + changed_by: 'system' }]; } } @@ -176,10 +174,7 @@ export async function deleteHistoryEntry(id: string, token?: string): Promise { method: 'PATCH', headers: { 'Content-Type': 'application/json', - 'apikey': SUPABASE_KEY, - 'Authorization': `Bearer ${SUPABASE_KEY}`, - 'Prefer': 'return=minimal' + ...authHeaders(token), + 'Prefer': 'return=minimal', }, body: JSON.stringify({ status: 'synced' }) } @@ -211,4 +205,4 @@ export async function resetAllPendingRows(token?: string): Promise { console.error('Error resetting pending rows in Supabase:', error); return false; } -} \ No newline at end of file +}