diff --git a/shop/lib/utils.ts b/shop/lib/utils.ts index c3e0acb..b2566c1 100644 --- a/shop/lib/utils.ts +++ b/shop/lib/utils.ts @@ -14,16 +14,31 @@ export const hasEnvVars = export function resolveSupabaseUrl(url: string | undefined): string | undefined { if (!url) return url; + + // Bestimme die externe Basis-URL aus Umgebungsvariablen (falls vorhanden und extern) + let extBase = process.env.NEXT_PUBLIC_SUPABASE_URL_EXTERNAL || process.env.NEXT_PUBLIC_SUPABASE_URL || ''; + if (extBase.includes('kong') || extBase.includes('supabase-kong')) { + extBase = ''; // ignorieren, da intern + } + if (typeof window !== 'undefined') { try { const parsed = new URL(url); if (parsed.hostname === 'supabase-kong' || parsed.hostname === 'kong') { - parsed.hostname = window.location.hostname; - parsed.protocol = window.location.protocol; - if (window.location.hostname === 'localhost' && parsed.port === '8000') { - parsed.port = '8000'; + if (extBase) { + const extUrl = new URL(extBase); + parsed.hostname = extUrl.hostname; + parsed.port = extUrl.port; + parsed.protocol = extUrl.protocol; } else { - parsed.port = ''; // Port entfernen für Produktion hinter Reverse Proxy + // Fallback auf die aktuelle Browser-Domain + parsed.hostname = window.location.hostname; + parsed.protocol = window.location.protocol; + if (window.location.hostname === 'localhost' && parsed.port === '8000') { + parsed.port = '8000'; + } else { + parsed.port = ''; // Port entfernen für Produktion hinter Reverse Proxy + } } return parsed.toString().replace(/\/$/, ''); } @@ -34,11 +49,21 @@ export function resolveSupabaseUrl(url: string | undefined): string | undefined return parsed.toString().replace(/\/$/, ''); } } catch { - let resolved = url - .replace('//supabase-kong:8000', `//${window.location.hostname}`) - .replace('//kong:8000', `//${window.location.hostname}`) - .replace('//supabase-kong', `//${window.location.hostname}`) - .replace('//kong', `//${window.location.hostname}`); + let resolved = url; + if (extBase) { + const extUrl = new URL(extBase); + resolved = resolved + .replace('//supabase-kong:8000', `//${extUrl.host}`) + .replace('//kong:8000', `//${extUrl.host}`) + .replace('//supabase-kong', `//${extUrl.host}`) + .replace('//kong', `//${extUrl.host}`); + } else { + resolved = resolved + .replace('//supabase-kong:8000', `//${window.location.hostname}`) + .replace('//kong:8000', `//${window.location.hostname}`) + .replace('//supabase-kong', `//${window.location.hostname}`) + .replace('//kong', `//${window.location.hostname}`); + } if (window.location.protocol === 'https:') { resolved = resolved.replace('http://', 'https://'); } @@ -49,20 +74,15 @@ export function resolveSupabaseUrl(url: string | undefined): string | undefined try { const parsed = new URL(url); if (parsed.hostname === 'supabase-kong' || parsed.hostname === 'kong') { - if (process.env.NEXT_PUBLIC_SUPABASE_URL_EXTERNAL) { - const extUrl = new URL(process.env.NEXT_PUBLIC_SUPABASE_URL_EXTERNAL); - parsed.hostname = extUrl.hostname; - parsed.port = extUrl.port; - parsed.protocol = extUrl.protocol; - } else { - parsed.hostname = 'localhost'; - parsed.port = '8000'; - parsed.protocol = 'http:'; - } + const ext = extBase || 'http://localhost:8000'; + const extUrl = new URL(ext); + parsed.hostname = extUrl.hostname; + parsed.port = extUrl.port; + parsed.protocol = extUrl.protocol; return parsed.toString().replace(/\/$/, ''); } } catch { - const target = process.env.NEXT_PUBLIC_SUPABASE_URL_EXTERNAL || 'http://localhost:8000'; + const target = extBase || 'http://localhost:8000'; const targetUrl = new URL(target); return url .replace('//supabase-kong:8000', `//${targetUrl.host}`)