import { User as FirebaseUser } from 'firebase/auth'; export interface AuthConfig { firebaseConfig: FirebaseConfig; enabledProviders?: AuthProvider[]; customClaims?: string[]; inviteStrategy?: 'immediate' | 'deferred' | 'hybrid'; onUserCreated?: (user: AuthUser) => Promise; onInviteAccepted?: (user: AuthUser, invite: UserInvite) => Promise; } export interface FirebaseConfig { apiKey: string; authDomain: string; projectId: string; storageBucket: string; messagingSenderId: string; appId: string; measurementId?: string; } export type AuthProvider = | 'email' | 'google' | 'github' | 'microsoft' | 'apple' | 'twitter' | 'facebook'; export interface AuthUser extends FirebaseUser { customClaims?: Record; role?: string; roles?: string[]; department?: string; departments?: string[]; isAdmin?: boolean; isSuperAdmin?: boolean; permissions?: string[]; } export interface AuthError { code: string; message: string; originalError?: any; } export interface SignInOptions { email: string; password: string; rememberMe?: boolean; } export interface SignUpOptions extends SignInOptions { displayName?: string; photoURL?: string; metadata?: Record; } export interface AuthState { user: AuthUser | null; loading: boolean; error: AuthError | null; isAuthenticated: boolean; }