59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { createClient, SupabaseClient } from "@supabase/supabase-js";
|
||
import type { Database } from "@/types/supabase";
|
||
|
||
let supabase: SupabaseClient<Database> | null = null;
|
||
|
||
// 简单的存储适配器,使用localStorage
|
||
const storageAdapter = {
|
||
getItem: async (key: string) => {
|
||
try {
|
||
const item = localStorage.getItem(key);
|
||
return item;
|
||
} catch (error) {
|
||
console.error("Storage get error:", error);
|
||
return null;
|
||
}
|
||
},
|
||
|
||
setItem: async (key: string, value: string) => {
|
||
try {
|
||
localStorage.setItem(key, value);
|
||
} catch (error) {
|
||
console.error("Storage set error:", error);
|
||
}
|
||
},
|
||
|
||
removeItem: async (key: string) => {
|
||
try {
|
||
localStorage.removeItem(key);
|
||
} catch (error) {
|
||
console.error("Storage remove error:", error);
|
||
}
|
||
},
|
||
};
|
||
|
||
export const getSupabaseClient = (): SupabaseClient<Database> => {
|
||
if (!supabase) {
|
||
if (!process.env.NEXT_PUBLIC_SUPABASE_URL || !process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY) {
|
||
throw new Error('Missing Supabase environment variables');
|
||
}
|
||
|
||
supabase = createClient<Database>(
|
||
process.env.NEXT_PUBLIC_SUPABASE_URL,
|
||
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,
|
||
{
|
||
db: { schema: "limq" },
|
||
auth: {
|
||
storage: storageAdapter,
|
||
persistSession: true,
|
||
autoRefreshToken: true,
|
||
},
|
||
}
|
||
);
|
||
}
|
||
return supabase;
|
||
};
|
||
|
||
export const clearSupabaseInstance = () => {
|
||
supabase = null;
|
||
};
|