diff --git a/chatdesk-ui/lib/supabase/browser-client.ts b/chatdesk-ui/lib/supabase/browser-client.ts index 78cc796..2bb252a 100644 --- a/chatdesk-ui/lib/supabase/browser-client.ts +++ b/chatdesk-ui/lib/supabase/browser-client.ts @@ -1,11 +1,11 @@ -import { createBrowserClient } from "@supabase/ssr" -import { getRuntimeEnv } from "@/lib/ipconfig" -import { Database } from "@/supabase/types" +// import { createBrowserClient } from "@supabase/ssr" +// import { getRuntimeEnv } from "@/lib/ipconfig" +// import { Database } from "@/supabase/types" -export const supabase = createBrowserClient( - getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", - process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! // ✅ 编译时写死,照你意图 -) +// export const supabase = createBrowserClient( +// getRuntimeEnv("SUPABASE_URL") ?? "http://localhost:8000", +// process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! // ✅ 编译时写死,照你意图 +// ) @@ -39,3 +39,36 @@ export const supabase = createBrowserClient( // } // throw new Error("RUNTIME_ENV.SUPABASE_URL not ready") // } + + +import { createBrowserClient } from "@supabase/ssr"; +import { Database } from "@/supabase/types"; + +// 保存懒加载的 Supabase 客户端实例 +let _supabase: ReturnType> | null = null; + +// 创建 Supabase 客户端的工厂方法 +export async function createClient() { + if (_supabase) return _supabase; // 如果已经创建过客户端,直接返回 + + const url = await getRuntimeSupabaseUrl(); // 获取动态的 SUPABASE_URL + const key = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!; // 写死的 anon key + + _supabase = createBrowserClient(url, key); // 创建并缓存 Supabase 客户端实例 + return _supabase; +} + +// 获取动态注入的 SUPABASE_URL +async function getRuntimeSupabaseUrl(retry = 30, interval = 50): Promise { + for (let i = 0; i < retry; i++) { + const url = window?.RUNTIME_ENV?.SUPABASE_URL; + if (url) return url; + await new Promise((r) => setTimeout(r, interval)); + } + throw new Error("RUNTIME_ENV.SUPABASE_URL not ready"); +} + +// 返回客户端实例 +export const supabase = async () => { + return await createClient(); // 返回创建好的 Supabase 客户端 +}; \ No newline at end of file