UNPKG

@restnfeel/agentc-starter-kit

Version:

한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템

99 lines (89 loc) 2.6 kB
import { User } from "../../types"; import { SignInOptions } from "../AuthProvider"; // Simplified Supabase types interface SupabaseUser { id: string; email?: string; user_metadata?: { full_name?: string; avatar_url?: string; name?: string; }; created_at?: string; updated_at?: string; } interface SupabaseSession { user: SupabaseUser | null; } interface SupabaseClient { auth: { getSession: () => Promise<{ data: { session: SupabaseSession | null } }>; signInWithOAuth: (options: { provider: string; options?: SignInOptions; }) => Promise<void>; signInWithPassword: (credentials: { email: string; password: string; }) => Promise<void>; signOut: () => Promise<void>; onAuthStateChange: ( callback: (event: string, session: SupabaseSession | null) => void ) => void; }; } // Helper function to convert Supabase user to our User type const convertSupabaseUser = ( supabaseUser: SupabaseUser | null ): User | null => { if (!supabaseUser) return null; return { id: supabaseUser.id, email: supabaseUser.email || "", name: supabaseUser.user_metadata?.full_name || supabaseUser.user_metadata?.name || "", avatar_url: supabaseUser.user_metadata?.avatar_url, role: "customer", // Default role, can be customized created_at: supabaseUser.created_at || new Date().toISOString(), updated_at: supabaseUser.updated_at || new Date().toISOString(), }; }; // Supabase adapter for AuthProvider export const createSupabaseAdapter = (supabase?: SupabaseClient) => { if (!supabase) { console.warn("Supabase client not provided to adapter"); return {}; } return { getSession: async () => { const { data: { session }, } = await supabase.auth.getSession(); return { user: convertSupabaseUser(session?.user || null), }; }, signInAdapter: async (provider?: string, options?: SignInOptions) => { if (provider && provider !== "password") { // OAuth provider await supabase.auth.signInWithOAuth({ provider, options, }); } else if (options && "email" in options && "password" in options) { // Email/password sign in await supabase.auth.signInWithPassword({ email: options.email as string, password: options.password as string, }); } else { throw new Error("Invalid sign in options for Supabase"); } }, signOutAdapter: async () => { await supabase.auth.signOut(); }, }; };