From c5b22420ac8815a4a7f3251a2136ad23843271d7 Mon Sep 17 00:00:00 2001 From: Michele Date: Sat, 31 Jan 2026 03:32:14 +0100 Subject: [PATCH] feat(01-01): create dual Supabase client pattern for App Router - src/lib/supabase/client.ts: Browser client for Client Components - Uses createBrowserClient from @supabase/ssr - Reads NEXT_PUBLIC_* env vars - src/lib/supabase/server.ts: Server client for SSR/Actions - Uses createServerClient from @supabase/ssr - Async cookies() for Next.js 15+ compatibility - Cookie handlers for session management - Try/catch in setAll for Server Component safety Co-Authored-By: Claude Opus 4.5 --- src/lib/supabase/client.ts | 8 ++++++++ src/lib/supabase/server.ts | 28 ++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/lib/supabase/client.ts create mode 100644 src/lib/supabase/server.ts diff --git a/src/lib/supabase/client.ts b/src/lib/supabase/client.ts new file mode 100644 index 0000000..792b457 --- /dev/null +++ b/src/lib/supabase/client.ts @@ -0,0 +1,8 @@ +import { createBrowserClient } from '@supabase/ssr' + +export function createClient() { + return createBrowserClient( + process.env.NEXT_PUBLIC_SUPABASE_URL!, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! + ) +} diff --git a/src/lib/supabase/server.ts b/src/lib/supabase/server.ts new file mode 100644 index 0000000..8cfe5ba --- /dev/null +++ b/src/lib/supabase/server.ts @@ -0,0 +1,28 @@ +import { createServerClient } from '@supabase/ssr' +import { cookies } from 'next/headers' + +export async function createClient() { + const cookieStore = await cookies() + + return createServerClient( + process.env.NEXT_PUBLIC_SUPABASE_URL!, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, + { + cookies: { + getAll() { + return cookieStore.getAll() + }, + setAll(cookiesToSet) { + try { + cookiesToSet.forEach(({ name, value, options }) => + cookieStore.set(name, value, options) + ) + } catch { + // The `setAll` method was called from a Server Component. + // This can be ignored if you have middleware refreshing user sessions. + } + }, + }, + } + ) +}