import * as plugins from '../../plugins.js'; import { EventEmitter } from 'node:events'; import type { IEmailRoute, IEmailMatch, IEmailAction, IEmailContext } from './interfaces.js'; import type { Email } from '../core/classes.email.js'; /** * Email router that evaluates routes and determines actions */ export class EmailRouter extends EventEmitter { private routes: IEmailRoute[]; private patternCache: Map = new Map(); /** * Create a new email router * @param routes Array of email routes */ constructor(routes: IEmailRoute[]) { super(); this.routes = this.sortRoutesByPriority(routes); } /** * Sort routes by priority (higher priority first) * @param routes Routes to sort * @returns Sorted routes */ private sortRoutesByPriority(routes: IEmailRoute[]): IEmailRoute[] { return [...routes].sort((a, b) => { const priorityA = a.priority ?? 0; const priorityB = b.priority ?? 0; return priorityB - priorityA; // Higher priority first }); } /** * Get all configured routes * @returns Array of routes */ public getRoutes(): IEmailRoute[] { return [...this.routes]; } /** * Update routes * @param routes New routes */ public updateRoutes(routes: IEmailRoute[]): void { this.routes = this.sortRoutesByPriority(routes); this.clearCache(); this.emit('routesUpdated', this.routes); } /** * Clear the pattern cache */ public clearCache(): void { this.patternCache.clear(); this.emit('cacheCleared'); } }