UNPKG

@454creative/easy-email

Version:

A framework-agnostic email service library for Node.js with observability and monitoring

156 lines 6.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TemplateManagerService = void 0; const email_options_interface_1 = require("../interfaces/email-options.interface"); const sendgrid_template_service_1 = require("./templates/sendgrid-template.service"); const ses_template_service_1 = require("./templates/ses-template.service"); const logger_1 = require("../utils/logger"); const errors_1 = require("../errors"); class TemplateManagerService { constructor() { this.templateServices = new Map(); this.logger = logger_1.Logger.getInstance(); } /** * Register a template service for a specific provider */ registerTemplateService(provider, service) { this.templateServices.set(provider, service); this.logger.debug(`Template service registered for provider: ${provider}`); } /** * Register SendGrid template service */ registerSendGridService(config) { const service = new sendgrid_template_service_1.SendGridTemplateService(config); this.registerTemplateService(email_options_interface_1.EmailProviderType.SENDGRID, service); } /** * Register SES template service */ registerSesService(config) { const service = new ses_template_service_1.SesTemplateService(config); this.registerTemplateService(email_options_interface_1.EmailProviderType.SES, service); } /** * Check if a template service is available for a provider */ hasTemplateService(provider) { return this.templateServices.has(provider); } /** * Get template service for a specific provider */ getTemplateService(provider) { const service = this.templateServices.get(provider); if (!service) { throw new errors_1.ConfigurationError(`Template service not available for provider: ${provider}`); } return service; } /** * Render template using the appropriate service */ renderTemplate(templateId, data, provider) { return __awaiter(this, void 0, void 0, function* () { const service = this.getTemplateService(provider); return service.renderTemplate(templateId, data, provider); }); } /** * Validate template using the appropriate service */ validateTemplate(templateId, provider) { return __awaiter(this, void 0, void 0, function* () { const service = this.getTemplateService(provider); return service.validateTemplate(templateId, provider); }); } /** * Get template info using the appropriate service */ getTemplateInfo(templateId, provider) { return __awaiter(this, void 0, void 0, function* () { const service = this.getTemplateService(provider); return service.getTemplateInfo(templateId, provider); }); } /** * Validate template with detailed results */ validateTemplateWithDetails(templateId, data, provider) { return __awaiter(this, void 0, void 0, function* () { const service = this.getTemplateService(provider); // Check if the service has the extended validation method if ('validateTemplateWithDetails' in service) { return service.validateTemplateWithDetails(templateId, data); } // Fallback to basic validation const isValid = yield service.validateTemplate(templateId, provider); return { isValid, errors: isValid ? [] : [`Template validation failed: ${templateId}`], warnings: [], variables: [], missingVariables: [] }; }); } /** * List available templates for a provider */ listTemplates(provider) { return __awaiter(this, void 0, void 0, function* () { const service = this.getTemplateService(provider); // Check if the service has the listTemplates method if ('listTemplates' in service) { return service.listTemplates(); } // Fallback: return empty array this.logger.warn(`Provider ${provider} does not support listing templates`); return []; }); } /** * Get all available template services */ getAvailableProviders() { return Array.from(this.templateServices.keys()); } /** * Clear all registered template services */ clearServices() { this.templateServices.clear(); this.logger.debug('All template services cleared'); } /** * Get service statistics */ getServiceStats() { const stats = { totalServices: this.templateServices.size, availableProviders: this.getAvailableProviders(), services: {} }; for (const [provider, service] of this.templateServices.entries()) { stats.services[provider] = { serviceName: service.constructor.name, hasExtendedValidation: 'validateTemplateWithDetails' in service, hasListTemplates: 'listTemplates' in service }; } return stats; } } exports.TemplateManagerService = TemplateManagerService; //# sourceMappingURL=template-manager.service.js.map