import { TransactionalEmailsApi, SendSmtpEmail, ContactsApi } from '@getbrevo/brevo'; import * as TEMPLATE from './templates' export class EmailService { private static apiInstance = new TransactionalEmailsApi(); private static apiContacts = new ContactsApi(); static init(apiKey: string) { this.apiInstance.setApiKey(0, apiKey); this.apiContacts.setApiKey(0, apiKey); } static async sendInviteEmail(target: string, projectName: string, link: string) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "⚡ Invite"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.PROJECT_INVITE_EMAIL .replace(/\[Project Name\]/, projectName) .replace(/\[Link\]/, link) .toString(); await this.apiInstance.sendTransacEmail(sendSmtpEmail); return true; } catch (ex) { console.error('ERROR SENDING EMAIL', ex); return false; } } static async sendInviteEmailNoAccount(target: string, projectName: string, link: string) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "⚡ Invite on a Litlyx project"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.PROJECT_INVITE_EMAIL_NO_ACCOUNT .replace(/\[Project Name\]/, projectName) .replace(/\[Link\]/, link) .toString(); await this.apiInstance.sendTransacEmail(sendSmtpEmail); return true; } catch (ex) { console.error('ERROR SENDING EMAIL', ex); return false; } } static async createContact(email: string) { try { await this.apiContacts.createContact({ email }); await this.apiContacts.addContactToList(12, { emails: [email] }) return true; } catch (ex) { console.error('ERROR ADDING CONTACT', ex); return false; } } static async sendLimitEmail50(target: string) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "⚡ You've reached 50% limit on Litlyx"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_50_EMAIL .toString(); await this.apiInstance.sendTransacEmail(sendSmtpEmail); return true; } catch (ex) { console.error('ERROR SENDING EMAIL', ex); return false; } } static async sendLimitEmail90(target: string) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "⚡ You've reached 90% limit on Litlyx"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_90_EMAIL .toString(); await this.apiInstance.sendTransacEmail(sendSmtpEmail); return true; } catch (ex) { console.error('ERROR SENDING EMAIL', ex); return false; } } static async sendLimitEmailMax(target: string) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "🚨 You've reached your limit on Litlyx!"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_MAX_EMAIL .toString(); await this.apiInstance.sendTransacEmail(sendSmtpEmail); return true; } catch (ex) { console.error('ERROR SENDING EMAIL', ex); return false; } } static async sendWelcomeEmail(target: string) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "Welcome to Litlyx!"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.WELCOME_EMAIL; await this.apiInstance.sendTransacEmail(sendSmtpEmail); return true; } catch (ex) { console.error('ERROR SENDING EMAIL', ex); return false; } } static async sendPurchaseEmail(target: string) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "Thank You for Upgrading Your Litlyx Plan!"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.PURCHASE_EMAIL .toString(); await this.apiInstance.sendTransacEmail(sendSmtpEmail); return true; } catch (ex) { console.error('ERROR SENDING EMAIL', ex); return false; } } static async sendAnomalyVisitsEventsEmail(target: string, projectName: string, data: { visits: { _id: string, count: number }[], events: { _id: string, count: number }[] }) { try { const sendSmtpEmail = new SendSmtpEmail(); sendSmtpEmail.subject = "🔍 Unexpected Activity Detected by our AI"; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.htmlContent = TEMPLATE.ANOMALY_VISITS_EVENTS_EMAIL .replace(/\[Project Name\]/, projectName) .replace(/\[ENTRIES\]/, [ ...data.visits.map(e => (`