Files
worklenz/worklenz-backend/src/shared/email-templates.ts
chamikaJ 8825b0410a init
2025-04-17 18:28:54 +05:30

109 lines
4.2 KiB
TypeScript

import {IEmailTemplateType} from "../interfaces/email-template-type";
import {IPassportSession} from "../interfaces/passport-session";
import {sendEmail} from "./email";
import {sanitize} from "./utils";
import FileConstants from "./file-constants";
const FRONTEND_URL = process.env.FRONTEND_URL || "worklenz.com";
export function sendWelcomeEmail(email: string, name: string) {
let content = FileConstants.getEmailTemplate(IEmailTemplateType.Welcome) as string;
if (!content) return;
content = content.replace("[VAR_USER_NAME]", sanitize(name));
content = content.replace("[VAR_HOSTNAME]", sanitize(FRONTEND_URL));
sendEmail({
to: [email],
subject: "Welcome to Worklenz.",
html: content
});
}
export function sendNewSubscriberNotification(subscriberEmail: string) {
let content = FileConstants.getEmailTemplate(IEmailTemplateType.NewSubscriber) as string;
if (!content) return;
content = content.replace("[VAR_EMAIL]", sanitize(subscriberEmail));
sendEmail({
subject: "Worklenz - New Subscriber.",
html: content
});
}
export function sendJoinTeamInvitation(myName: string, teamName: string, teamId: string, userName: string, toEmail: string, userId: string, projectId?: string) {
let content = FileConstants.getEmailTemplate(IEmailTemplateType.TeamMemberInvitation) as string;
if (!content) return;
content = content.replace("[VAR_USER_NAME]", sanitize(userName));
content = content.replace("[VAR_TEAM_NAME]", sanitize(teamName));
content = content.replace("[VAR_HOSTNAME]", sanitize(FRONTEND_URL));
content = content.replace("[VAR_TEAM_ID]", sanitize(teamId));
content = content.replace("[VAR_USER_ID]", sanitize(userId));
content = content.replace("[PROJECT_ID]", projectId ? sanitize(projectId as string) : "");
sendEmail({
to: [toEmail],
subject: `${myName} has invited you to work with ${teamName} in Worklenz`,
html: content
});
}
export function sendRegisterAndJoinTeamInvitation(myName: string, userName: string, teamName: string, teamId: string, userId: string, toEmail: string, projectId?: string) {
let content = FileConstants.getEmailTemplate(IEmailTemplateType.UnregisteredTeamMemberInvitation) as string;
if (!content) return;
content = content.replace("[VAR_EMAIL]", sanitize(toEmail));
content = content.replace("[VAR_USER_ID]", sanitize(userId));
content = content.replace("[VAR_USER_NAME]", sanitize(userName));
content = content.replace("[VAR_TEAM_NAME]", sanitize(teamName));
content = content.replace("[VAR_HOSTNAME]", sanitize(FRONTEND_URL));
content = content.replace("[VAR_TEAM_ID]", sanitize(teamId));
content = content.replace("[PROJECT_ID]", projectId ? sanitize(projectId as string) : "");
sendEmail({
to: [toEmail],
subject: `${myName} has invited you to work with ${teamName} in Worklenz`,
html: content
});
}
export function sendResetEmail(toEmail: string, user_id: string, hash: string) {
let content = FileConstants.getEmailTemplate(IEmailTemplateType.ResetPassword) as string;
if (!content) return;
content = content.replace("[VAR_HOSTNAME]", sanitize(FRONTEND_URL));
content = content.replace("[VAR_USER_ID]", sanitize(user_id));
content = content.replace("[VAR_HASH]", hash);
sendEmail({
to: [toEmail],
subject: "Reset your password on Worklenz.",
html: content
});
}
export function sendResetSuccessEmail(toEmail: string) {
const content = FileConstants.getEmailTemplate(IEmailTemplateType.PasswordChange) as string;
if (!content) return;
sendEmail({
to: [toEmail],
subject: "Your password was reset.",
html: content
});
}
// * This implementation should be improved
export function sendInvitationEmail(isNewMember: boolean, user: IPassportSession, userNameOrId: string, email: string, userId: string, userName?: string, projectId?: string) {
if (isNewMember) {
// userNameOrId = userName
sendJoinTeamInvitation(user?.name as string, user?.team_name as string, user.team_id as string, userNameOrId, email, userId, projectId);
} else {
// userNameOrId = userId
sendRegisterAndJoinTeamInvitation(user?.name as string, userName as string, user?.team_name as string, user.team_id as string, userNameOrId, email, projectId);
}
}