interface AuthUser { id: string; email: string; username?: string; firstName?: string; lastName?: string; fullName?: string; profilePicture?: string; password: string; createdAt?: Date; emailVerified?: boolean; emailVerifiedAt?: Date; twoFactorEnabled?: boolean; authMethod?: 'password' | 'sso'; authProvider?: string; [key: string]: any; } interface TwoFactorCode { id: string; userId: string; code: string; hashedCode: string; type: "email_verification" | "password_reset" | "login_verification"; expiresAt: Date; createdAt: Date; attempts: number; isUsed: boolean; metadata?: { email?: string; ipAddress?: string; userAgent?: string; }; } interface AuthDbAdapter { findUserByEmail(email: string): Promise; getUserByEmail?(email: string): Promise; findUserById(id: string): Promise; findUserByUsername(username: string): Promise; createUser(data: { email: string; password: string; username?: string; firstName?: string; lastName?: string; fullName?: string; profilePicture?: string; authMethod?: 'password' | 'sso'; authProvider?: string; }): Promise; updateUser?(id: string, data: Partial): Promise; storeTwoFactorCode?(code: TwoFactorCode): Promise; getTwoFactorCode?(codeId: string): Promise; updateTwoFactorCode?(codeId: string, updates: Partial): Promise; getUserTwoFactorCodes?(userId: string, type?: string): Promise; cleanupExpiredTwoFactorCodes?(): Promise; } export type { AuthDbAdapter as A, AuthUser as a };