"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RequestPasswordResetCommandHandler = void 0; const EmailService_1 = require("../../Services/EmailService"); const TokenService_1 = require("../../Services/TokenService"); const Logger_1 = require("../../Services/Logger"); class RequestPasswordResetCommandHandler { constructor(userRepo) { this.userRepo = userRepo; this.emailService = new EmailService_1.EmailService(); } async execute(cmd) { try { if (!cmd.email) { throw new Error('Email is required'); } // Find user by email const user = await this.userRepo.findByEmail(cmd.email); if (!user) { // Don't reveal if user exists or not for security reasons // Still return true but don't send email (0, Logger_1.logAuth)(`Password reset requested for non-existent email: ${cmd.email}`); return true; } // Generate password reset token const resetTokenData = TokenService_1.TokenService.generatePasswordResetToken(); // Update user with reset token user.token = await TokenService_1.TokenService.hashToken(resetTokenData.token); user.TokenExpires = resetTokenData.expiresAt; await this.userRepo.update(user.id, user); // Send password reset email try { const baseUrl = process.env.APP_BASE_URL || 'http://localhost:3000'; const resetUrl = TokenService_1.TokenService.generatePasswordResetUrl(baseUrl, resetTokenData.token); const emailSent = await this.emailService.sendPasswordResetEmail(user.email, `${user.fname} ${user.lname}`, resetTokenData.token, resetUrl); if (!emailSent) { (0, Logger_1.logWarning)(`Failed to send password reset email to ${user.email}`); // Don't throw error - request should still succeed even if email fails } else { (0, Logger_1.logAuth)(`Password reset email sent successfully to ${user.email}`); } } catch (emailError) { (0, Logger_1.logError)('Error sending password reset email', emailError instanceof Error ? emailError : new Error(String(emailError))); // Don't throw error - request should still succeed even if email fails } return true; } catch (error) { (0, Logger_1.logError)('Password reset request error', error instanceof Error ? error : new Error(String(error))); throw error; } } } exports.RequestPasswordResetCommandHandler = RequestPasswordResetCommandHandler; //# sourceMappingURL=RequestPasswordResetCommandHandler.js.map