import { Decimal } from 'decimal.js-light' import { CONFIG } from '../config' import { decimalSeparatorByLanguage } from '../util/utilities' import { sendEmailTranslated } from './sendEmailTranslated' export interface EmailCommonData { firstName: string lastName: string email: string language: string } export interface ContributionEmailCommonData { senderFirstName: string senderLastName: string contributionMemo: string contributionFrontendLink: string } function getEmailCommonLocales(): Record { return { supportEmail: CONFIG.COMMUNITY_SUPPORT_MAIL, resendLink: CONFIG.EMAIL_LINK_FORGOTPASSWORD, communityURL: CONFIG.COMMUNITY_URL, } } export const sendAddedContributionMessageEmail = ( data: EmailCommonData & ContributionEmailCommonData & { message: string }, ): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>`, }, template: 'addedContributionMessage', locals: { ...data, ...getEmailCommonLocales(), }, }) } export const sendAccountActivationEmail = (data: EmailCommonData & { activationLink: string timeDurationObject: Record logoUrl?: string | null }): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'accountActivation', locals: { ...data, ...getEmailCommonLocales(), }, }) } export const sendAccountMultiRegistrationEmail = (data: EmailCommonData): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'accountMultiRegistration', locals: { ...data, ...getEmailCommonLocales(), }, }) } export const sendContributionConfirmedEmail = ( data: EmailCommonData & ContributionEmailCommonData & { contributionAmount: Decimal }, ): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'contributionConfirmed', locals: { ...data, ...getEmailCommonLocales(), contributionAmount: decimalSeparatorByLanguage(data.contributionAmount, data.language), }, }) } export const sendContributionChangedByModeratorEmail = ( data: EmailCommonData & ContributionEmailCommonData & { contributionMemoUpdated: string }, ): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'contributionChangedByModerator', locals: { ...data, ...getEmailCommonLocales(), contributionMemoUpdated: data.contributionMemoUpdated, }, }) } export const sendContributionDeletedEmail = ( data: EmailCommonData & ContributionEmailCommonData, ): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'contributionDeleted', locals: { ...data, ...getEmailCommonLocales(), }, }) } export const sendContributionDeniedEmail = ( data: EmailCommonData & ContributionEmailCommonData, ): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'contributionDenied', locals: { ...data, ...getEmailCommonLocales(), }, }) } export const sendResetPasswordEmail = (data: EmailCommonData & { resetLink: string timeDurationObject: Record }): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'resetPassword', locals: { ...data, ...getEmailCommonLocales(), }, }) } export const sendTransactionLinkRedeemedEmail = (data: EmailCommonData & { senderFirstName: string senderLastName: string senderEmail: string transactionMemo: string transactionAmount: Decimal }): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'transactionLinkRedeemed', locals: { ...data, transactionAmount: decimalSeparatorByLanguage(data.transactionAmount, data.language), ...getEmailCommonLocales(), }, }) } export const sendTransactionReceivedEmail = (data: EmailCommonData & { senderFirstName: string senderLastName: string senderEmail: string memo: string transactionAmount: Decimal }): Promise | boolean | null | Error> => { return sendEmailTranslated({ receiver: { to: `${data.firstName} ${data.lastName} <${data.email}>` }, template: 'transactionReceived', locals: { ...data, transactionAmount: decimalSeparatorByLanguage(data.transactionAmount, data.language), ...getEmailCommonLocales(), }, }) }