From c0c5240f8dbf267d5230bfb9b39d0b52a6449b4d Mon Sep 17 00:00:00 2001 From: DanielS Date: Tue, 23 Jun 2026 02:42:50 +0200 Subject: [PATCH] fix: resolve internal docker hostnames to client window location hostname in browser context --- shop/lib/supabase/client.ts | 3 ++- shop/lib/supabase/proxy.ts | 4 ++-- shop/lib/supabase/server.ts | 3 ++- shop/lib/utils.ts | 18 ++++++++++++++++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/shop/lib/supabase/client.ts b/shop/lib/supabase/client.ts index 845d293..54c94c2 100644 --- a/shop/lib/supabase/client.ts +++ b/shop/lib/supabase/client.ts @@ -1,11 +1,12 @@ import { createBrowserClient } from "@supabase/ssr"; +import { resolveSupabaseUrl } from "../utils"; export function createClient() { const supabaseUrl = process.env.SUPABASE_URL || process.env.NEXT_PUBLIC_SUPABASE_URL; const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; return createBrowserClient( - supabaseUrl!, + resolveSupabaseUrl(supabaseUrl)!, supabaseAnonKey!, ); } diff --git a/shop/lib/supabase/proxy.ts b/shop/lib/supabase/proxy.ts index d77e8a8..42c69a4 100644 --- a/shop/lib/supabase/proxy.ts +++ b/shop/lib/supabase/proxy.ts @@ -1,6 +1,6 @@ import { createServerClient } from "@supabase/ssr"; import { NextResponse, type NextRequest } from "next/server"; -import { hasEnvVars } from "../utils"; +import { hasEnvVars, resolveSupabaseUrl } from "../utils"; export async function updateSession(request: NextRequest) { let supabaseResponse = NextResponse.next({ @@ -17,7 +17,7 @@ export async function updateSession(request: NextRequest) { const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; const supabase = createServerClient( - supabaseUrl!, + resolveSupabaseUrl(supabaseUrl)!, supabaseAnonKey!, { cookies: { diff --git a/shop/lib/supabase/server.ts b/shop/lib/supabase/server.ts index c6e9e4e..18a4f57 100644 --- a/shop/lib/supabase/server.ts +++ b/shop/lib/supabase/server.ts @@ -1,5 +1,6 @@ import { createServerClient } from "@supabase/ssr"; import { cookies } from "next/headers"; +import { resolveSupabaseUrl } from "../utils"; /** * Especially important if using Fluid compute: Don't put this client in a @@ -13,7 +14,7 @@ export async function createClient() { const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY; return createServerClient( - supabaseUrl!, + resolveSupabaseUrl(supabaseUrl)!, supabaseAnonKey!, { cookies: { diff --git a/shop/lib/utils.ts b/shop/lib/utils.ts index 4fc207f..5edc138 100644 --- a/shop/lib/utils.ts +++ b/shop/lib/utils.ts @@ -11,3 +11,21 @@ export const hasEnvVars = (process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY); + +export function resolveSupabaseUrl(url: string | undefined): string | undefined { + if (!url) return url; + if (typeof window !== 'undefined') { + try { + const parsed = new URL(url); + if (parsed.hostname === 'supabase-kong' || parsed.hostname === 'kong') { + parsed.hostname = window.location.hostname; + return parsed.toString().replace(/\/$/, ''); + } + } catch { + return url + .replace('//supabase-kong', `//${window.location.hostname}`) + .replace('//kong', `//${window.location.hostname}`); + } + } + return url; +}