import { EventEmitter } from 'node:events'; import type { IEmailRoute, IEmailContext } from './interfaces.js'; /** * Email router that evaluates routes and determines actions */ export declare class EmailRouter extends EventEmitter { private routes; private patternCache; private storageManager?; private persistChanges; /** * Create a new email router * @param routes Array of email routes * @param options Router options */ constructor(routes: IEmailRoute[], options?: { storageManager?: any; persistChanges?: boolean; }); /** * Sort routes by priority (higher priority first) * @param routes Routes to sort * @returns Sorted routes */ private sortRoutesByPriority; /** * Get all configured routes * @returns Array of routes */ getRoutes(): IEmailRoute[]; /** * Update routes * @param routes New routes * @param persist Whether to persist changes (defaults to persistChanges setting) */ updateRoutes(routes: IEmailRoute[], persist?: boolean): Promise; /** * Set routes (alias for updateRoutes) * @param routes New routes * @param persist Whether to persist changes */ setRoutes(routes: IEmailRoute[], persist?: boolean): Promise; /** * Clear the pattern cache */ clearCache(): void; /** * Evaluate routes and find the first match * @param context Email context * @returns Matched route or null */ evaluateRoutes(context: IEmailContext): Promise; /** * Check if a route matches the context * @param route Route to check * @param context Email context * @returns True if route matches */ private matchesRoute; /** * Check if email recipients match patterns * @param email Email to check * @param patterns Patterns to match * @returns True if any recipient matches */ private matchesRecipients; /** * Check if email sender matches patterns * @param email Email to check * @param patterns Patterns to match * @returns True if sender matches */ private matchesSenders; /** * Check if client IP matches patterns * @param context Email context * @param patterns IP patterns to match * @returns True if IP matches */ private matchesClientIp; /** * Check if email headers match patterns * @param email Email to check * @param headerPatterns Header patterns to match * @returns True if headers match */ private matchesHeaders; /** * Check if email size matches range * @param email Email to check * @param sizeRange Size range to match * @returns True if size is in range */ private matchesSize; /** * Check if email subject matches pattern * @param email Email to check * @param pattern Pattern to match * @returns True if subject matches */ private matchesSubject; /** * Check if a string matches a glob pattern * @param str String to check * @param pattern Glob pattern * @returns True if matches */ private matchesPattern; /** * Convert glob pattern to RegExp * @param pattern Glob pattern * @returns Regular expression */ private globToRegExp; /** * Check if IP is in CIDR range * @param ip IP address to check * @param cidr CIDR notation (e.g., '192.168.0.0/16') * @returns True if IP is in range */ private ipInCidr; /** * Convert IP address to number * @param ip IP address * @returns Number representation */ private ipToNumber; /** * Calculate approximate email size in bytes * @param email Email to measure * @returns Size in bytes */ private calculateEmailSize; /** * Save current routes to storage */ saveRoutes(): Promise; /** * Load routes from storage * @param options Load options */ loadRoutes(options?: { merge?: boolean; replace?: boolean; }): Promise; /** * Add a route * @param route Route to add * @param persist Whether to persist changes */ addRoute(route: IEmailRoute, persist?: boolean): Promise; /** * Remove a route by name * @param name Route name * @param persist Whether to persist changes */ removeRoute(name: string, persist?: boolean): Promise; /** * Update a route * @param name Route name * @param route Updated route data * @param persist Whether to persist changes */ updateRoute(name: string, route: IEmailRoute, persist?: boolean): Promise; /** * Get a route by name * @param name Route name * @returns Route or undefined */ getRoute(name: string): IEmailRoute | undefined; }