30 lines
823 B
TypeScript
30 lines
823 B
TypeScript
|
|
import { createBrowserClient } from "@supabase/ssr";
|
||
|
|
import type { SupabaseClient } from "@supabase/supabase-js";
|
||
|
|
|
||
|
|
let cachedClient: SupabaseClient | null = null;
|
||
|
|
|
||
|
|
function readSupabasePublicEnv() {
|
||
|
|
const url = process.env.NEXT_PUBLIC_SUPABASE_URL?.trim();
|
||
|
|
const anonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY?.trim();
|
||
|
|
return { anonKey, url };
|
||
|
|
}
|
||
|
|
|
||
|
|
export function hasSupabasePublicEnv() {
|
||
|
|
const { anonKey, url } = readSupabasePublicEnv();
|
||
|
|
return Boolean(url && anonKey);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function getSupabaseBrowserClient(): SupabaseClient {
|
||
|
|
if (cachedClient) {
|
||
|
|
return cachedClient;
|
||
|
|
}
|
||
|
|
|
||
|
|
const { anonKey, url } = readSupabasePublicEnv();
|
||
|
|
if (!url || !anonKey) {
|
||
|
|
throw new Error("Supabase public env is not configured");
|
||
|
|
}
|
||
|
|
|
||
|
|
cachedClient = createBrowserClient(url, anonKey);
|
||
|
|
return cachedClient;
|
||
|
|
}
|