import * as plugins from '../plugins.js'; import { EmailService } from './email.classes.emailservice.js'; import { logger } from '../logger.js'; export class ApiManager { public emailRef: EmailService; public typedRouter = new plugins.typedrequest.TypedRouter(); constructor(emailRefArg: EmailService) { this.emailRef = emailRefArg; this.emailRef.typedrouter.addTypedRouter(this.typedRouter); // Register API endpoints this.registerApiEndpoints(); } /** * Register API endpoints for email functionality */ private registerApiEndpoints() { // Register the SendEmail endpoint this.typedRouter.addTypedHandler( new plugins.typedrequest.TypedHandler('sendEmail', async (requestData) => { const mailToSend = new plugins.smartmail.Smartmail({ body: requestData.body, from: requestData.from, subject: requestData.title, }); if (requestData.attachments) { for (const attachment of requestData.attachments) { mailToSend.addAttachment( await plugins.smartfile.SmartFile.fromString( attachment.name, attachment.binaryAttachmentString, 'binary' ) ); } } // Send email through the service which will route to the appropriate connector const emailId = await this.emailRef.sendEmail(mailToSend, requestData.to, {}); logger.log( 'info', `sent an email to ${requestData.to} with subject '${mailToSend.getSubject()}'`, { eventType: 'sentEmail', email: { to: requestData.to, subject: mailToSend.getSubject(), }, } ); return { responseId: emailId, }; }) ); // Add endpoint to check email status this.typedRouter.addTypedHandler<{ emailId: string }>( new plugins.typedrequest.TypedHandler('checkEmailStatus', async (requestData) => { // If MTA is enabled, use it to check status if (this.emailRef.mtaConnector) { const status = await this.emailRef.mtaConnector.checkEmailStatus(requestData.emailId); return status; } // For Mailgun, we don't have a status check implementation currently return { status: 'unknown', details: { message: 'Status tracking not available for current provider' } }; }) ); // Add statistics endpoint this.typedRouter.addTypedHandler( new plugins.typedrequest.TypedHandler('getEmailStats', async () => { return this.emailRef.getStats(); }) ); } }