109 lines
4.2 KiB
TypeScript
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);
|
|
}
|
|
}
|