import * as plugins from '../plugins.js'; import * as paths from '../paths.js'; import { MailgunConnector } from './email.classes.connector.mailgun.js'; import { RuleManager } from './email.classes.rulemanager.js'; import { ApiManager } from './email.classes.apimanager.js'; import { logger } from '../logger.js'; import type { SzPlatformService } from '../classes.platformservice.js'; export interface IEmailConstructorOptions { mailgunApiKey: string; } export class EmailService { public platformServiceRef: SzPlatformService; // typedrouter public typedrouter = new plugins.typedrequest.TypedRouter(); // connectors public mailgunConnector: MailgunConnector; public qenv = new plugins.qenv.Qenv('./', '.nogit/'); // server public apiManager = new ApiManager(this); public ruleManager: RuleManager; constructor(platformServiceRefArg: SzPlatformService) { this.platformServiceRef = platformServiceRefArg; this.platformServiceRef.typedrouter.addTypedRouter(this.typedrouter); this.mailgunConnector = new MailgunConnector(this); this.ruleManager = new RuleManager(this); this.platformServiceRef.typedserver.server.addRoute( '/mailgun-notify', new plugins.typedserver.servertools.Handler('POST', async (req, res) => { console.log('Got a mailgun email notification'); res.status(200); res.end(); this.ruleManager.handleNotification(req.body); }) ); } public async start() { await this.ruleManager.init(); logger.log('success', `Started email service`); } public async stop() { } }