# Changelog ## 2026-02-23 - 8.1.0 - feat(route-management) add programmatic route management API with API tokens and admin UI - Introduce RouteConfigManager to persist and manage programmatic routes and hardcoded-route overrides - Add ApiTokenManager to create, validate, list, toggle and revoke API tokens (stored hashed) - New OpsServer TypedRequest handlers: RouteManagementHandler (getMergedRoutes, create/update/delete/toggle routes, set/remove overrides) and ApiTokenHandler (create/list/revoke/toggle tokens) - DcRouter integration: initialize routeConfigManager and apiTokenManager, expose getConstructorRoutes and re-apply programmatic routes after SmartProxy restarts - Front-end additions: new 'Routes' and 'ApiTokens' views and UI components (ops-view-routes, ops-view-apitokens), router and appstate actions to fetch/manage routes and tokens - New TS interfaces and request types for route-management and API tokens, plus storage schemas for persisted routes, overrides and tokens - Bump dependency @serve.zone/catalog to ^2.3.0 ## 2026-02-22 - 8.0.0 - BREAKING CHANGE(email-ops) migrate email operations to catalog-compatible email model and simplify UI/router - Add @serve.zone/catalog dependency and import (szCatalog) in web plugins - Replace queue-based typedrequest methods with catalog APIs: getQueuedEmails / getSentEmails / getFailedEmails => getAllEmails and getEmailDetail (request/response shapes changed) - Update TypeScript interfaces: IEmailQueueItem/IBounceRecord/ISecurityIncident etc. replaced by IEmail, IEmailDetail, ISmtpLogEntry, IConnectionInfo, IAuthenticationResults (breaking type changes) - Frontend state and actions consolidated: emailOps state now holds emails array; multiple fetch actions removed and replaced by fetchAllEmailsAction and getEmailDetail usage - UI components updated: ops-view-emails switched to list/detail view and now requests email detail via new API; router no longer exposes email folder routes and email-folder navigation removed - Ops server handler refactored to return catalog-style emails and email detail; added status mapping and size formatting helpers ## 2026-02-21 - 7.4.3 - fix(logging) add adaptive rate-limited DNS query logging, flush pending DNS logs on shutdown, and enhance email delivery logging - Introduce adaptive DNS logging: allow up to 2 individual DNS query logs per second, then aggregate further queries and emit a batched summary (dnsLogWindow, dnsBatchCount, dnsBatchTimer) with a 5s flush. - Flush pending DNS batch on stop() and log final DNS batch count during shutdown. - Enhance email observability by logging deliveryStart, deliverySuccess, deliveryFailed and bounceProcessed events alongside existing MetricsManager tracking. - Dependency bump: @design.estate/dees-catalog updated from ^3.43.1 to ^3.43.2. - Non-breaking change; intended as a patch release. ## 2026-02-21 - 7.4.2 - fix(monitoring,remoteingress,web) Prune old metrics buckets periodically, clear metrics caches on shutdown, simplify edge disconnect handling, and optimize network view data updates - Call pruneOldBuckets() each minute to proactively remove stale time-series buckets in MetricsManager - Clear metricsCache, emailMinuteBuckets and dnsMinuteBuckets when MetricsManager stops to avoid stale state on shutdown - On edgeDisconnected remove the edgeStatuses entry instead of mutating an existing record (more explicit cleanup) - Remove unused traffic-timer variables and move requestsPerSec history updates from render() into updateNetworkData() to avoid unnecessary re-renders - Optimize traffic data array updates by shifting in-place then reassigning arrays to preserve Lit reactivity and reduce intermediate allocations ## 2026-02-21 - 7.4.1 - fix(dcrouter) replace console logging with structured logger, improve metrics logging, add terminal-ready wait in ops UI, bump dees-catalog patch - Replace console.log/console.error calls in classes.dcrouter.ts with structured logger.log (info/debug/error) including contextual data and stringified errors - MetricsManager: create a dedicated Smartlog instance (metricsLogger) for SmartMetrics and use shared logger for lifecycle events (start/stop) - SmartProxy/ACME: convert startup/stop/cert events and error logging to structured logs; include generated route and cert metadata where relevant - Shutdown/startup flows: unify service start/stop/error messages through logger to provide consistent, structured output - UI change: ops-view-logs now waits for xterm terminalReady before pushing initial logs to avoid race conditions - Bump dependency @design.estate/dees-catalog from 3.43.0 to 3.43.1 ## 2026-02-21 - 7.4.0 - feat(opsserver) add real-time log push to ops dashboard and recent DNS query tracking - Export baseLogger and add a log destination that pushes log entries to connected ops_dashboard TypedSocket clients (ts/opsserver/handlers/logs.handler.ts, ts/logger.ts). - Introduce a new TypedRequest (pushLogEntry) interface for server→client log pushes (ts_interfaces/requests/logs.ts) and wire client handling in the web UI (ts_web/appstate.ts, ts_web/plugins.ts). - Add TypedSocket client connection lifecycle to the web app, stream pushed log entries into app state and update log views incrementally (ts_web/appstate.ts, ts_web/elements/ops-view-logs.ts). - MetricsManager now records recent DNS queries (timestamp, domain, type, answered, responseTimeMs) and exposes them via stats endpoints for display in the UI (ts/monitoring/classes.metricsmanager.ts, ts/opsserver/handlers/stats.handler.ts, ts_interfaces/data/stats.ts). - UI overview now displays DNS query entries and uses answered flag to set log level (ts_web/elements/ops-view-overview.ts). - Add import/export for typedsocket in web plugins to enable real-time push (ts_web/plugins.ts). - Bump dependency @push.rocks/smartproxy patch version ^25.7.8 → ^25.7.9 (package.json). ## 2026-02-20 - 7.3.0 - feat(dcrouter) Wire DNS server 'query' events to MetricsManager for time-series tracking and bump @push.rocks/smartdns to ^7.9.0 - Add dnsServer 'query' event listener that iterates event.questions and calls metricsManager.trackDnsQuery(question.type, question.name, false, event.responseTimeMs). - Listener is guarded by a metricsManager existence check to avoid runtime errors when metrics are not configured. - Bump dependency @push.rocks/smartdns from ^7.8.1 to ^7.9.0 in package.json. ## 2026-02-20 - 7.2.0 - feat(logs) replace custom logs list with dees-chart-log component and push logs to chart, add log mapping and lifecycle sync, and bump smartlog dependency - Replaced the legacy in-component log list and styling with a dees-chart-log element to render application logs. - Added updated() lifecycle handler to push new logs to the chart and new helper methods pushLogsToChart() and getMappedLogEntries() to map log entries to the chart's expected format. - Removed the streaming toggle, getActiveFilters(), legacy CSS for the log list, and the old per-entry rendering markup. - Added explicit typing for dropdown @selectedOption handlers (e: any). - Bumped dependency @push.rocks/smartlog from ^3.2.0 to ^3.2.1 in package.json. ## 2026-02-19 - 7.1.0 - feat(ops/monitoring) add in-memory log buffer, metrics time-series and ops UI integration - bump @push.rocks/smartlog to ^3.2.0 - introduce SmartlogDestinationBuffer (logBuffer) and wire it into the base logger to provide an in-memory log store for the Ops UI - implement minute-resolution time-series buckets in MetricsManager with increment/prune helpers and new APIs getEmailTimeSeries and getDnsTimeSeries - sync security counters from SecurityLogger and expose recent security events via StatsHandler - wire email delivery lifecycle events and bounce processing to MetricsManager for tracking sent/received/failed metrics - LogsHandler now queries the in-memory log buffer, maps smartlog levels/categories, supports search/level/time-range filtering and pagination - UI updates: ops-view-overview, ops-view-logs and ops-view-security consume time-series and recent events to render charts, tables and filters ## 2026-02-19 - 7.0.1 - fix(monitoring) Use smartMetrics cpuPercentage for cpuUsage.user and update smartmetrics and smartproxy dependencies - Switch cpuUsage.user from parseFloat(smartMetricsData.cpuUsageText) to smartMetricsData.cpuPercentage to align with smartmetrics v3 API - Bump @push.rocks/smartmetrics from ^2.0.10 to ^3.0.1 - Bump @push.rocks/smartproxy from ^25.7.6 to ^25.7.8 ## 2026-02-19 - 7.0.0 - BREAKING CHANGE(deps) bump dependencies: @serve.zone/remoteingress to ^4.0.0 (breaking), @push.rocks/smartproxy to ^25.7.6, @types/node to ^25.3.0 - Updated @serve.zone/remoteingress from ^3.3.0 to ^4.0.0 — major breaking change; may require code changes to adapt to new API. - Updated @push.rocks/smartproxy from ^25.7.3 to ^25.7.6 — patch update (non-breaking). - Updated @types/node from ^25.2.3 to ^25.3.0 — patch update (non-breaking). - Current package version is 6.13.2; recommend bumping to 7.0.0 due to the breaking dependency upgrade. ## 2026-02-19 - 6.13.2 - fix(runtime) prevent memory leaks and improve shutdown/stream handling across services - Add CertProvisionScheduler.clear() to reset in-memory backoff cache and call it during DcRouter shutdown - Stop any existing SmartAcme instance before creating a new one (await stop and log errors) to avoid duplicate running instances - Null out many DcRouter service references and clear certificateStatusMap on shutdown to allow GC of stopped services - Cap emailMetrics.recipients map size and trim to ~80% of MAX_TOP_DOMAINS to prevent unbounded growth - Await virtualStream.sendData in logs follow handler and clear the interval if the stream errors/closes to avoid interval leaks - Limit normalizedMacCache size and evict oldest entries when it exceeds 10000 to prevent unbounded cache growth ## 2026-02-18 - 6.13.1 - fix(dcrouter) enable PROXY protocol v1 handling for SmartProxy when remoteIngress is enabled to preserve client IPs - Set smartProxyConfig.acceptProxyProtocol = true when options.remoteIngressConfig.enabled - Whitelist loopback address by setting smartProxyConfig.proxyIPs = ['127.0.0.1'] - Only applies when remoteIngress is enabled; used to accept tunneled connections forwarded by the hub to preserve original client IPs ## 2026-02-18 - 6.13.0 - feat(remoteingress) include listenPorts for allowed edges sent to the Rust hub and always resync allowed edges when edge properties change - getAllowedEdges now returns listenPorts for each allowed edge (uses getEffectiveListenPorts) - remoteingress handler now calls tunnelManager.syncAllowedEdges() whenever tunnelManager exists so ports/tags/enabled changes are propagated - Improves Rust hub routing by providing per-edge listening ports and ensuring allowed-edge list is kept up-to-date ## 2026-02-18 - 6.12.0 - feat(remote-ingress) add Remote Ingress hub integration, OpsServer UI, APIs, and docs - Integrates RemoteIngress (hub/tunnel) into DcRouter: runtime manager, tunnel manager and Rust data plane references added - Bumps dependency @serve.zone/remoteingress to ^3.3.0 - Adds configuration defaults and IDcRouterOptions.remoteIngressConfig with tunnelPort/hubDomain/tls fields - Introduces OpsServer API endpoints and TypedRequest methods for remote ingress: getRemoteIngresses, createRemoteIngress, updateRemoteIngress, deleteRemoteIngress, regenerateRemoteIngressSecret, getRemoteIngressStatus, getRemoteIngressConnectionToken - UI updates: new Remote Ingress dashboard view, connection token generation & copy (clipboard API + fallback), auto-derived ports display, and toast notifications - State/API rename: newEdgeSecret -> newEdgeId and clearNewEdgeIdAction; appstate fetchConnectionToken usage - Documentation: README, ts/ and ts_web readmes, and ts_interfaces updated with interfaces and examples for Remote Ingress - Minor UI icon updates (search -> fa:magnifyingGlass, clipboard icon casing) and other doc/README improvements ## 2026-02-18 - 6.11.0 - feat(remoteingress) add ability to generate remote ingress connection tokens and UI copy action; add hubDomain config option; update remoteingress dependency to ^3.1.1 - Add server typed handler 'getRemoteIngressConnectionToken' to generate an encoded connection token containing hubHost, hubPort, edgeId and secret. - Add request interface IReq_GetRemoteIngressConnectionToken for typed requests. - Add fetchConnectionToken helper in web appstate and a 'Copy Token' action in ops-view-remoteingress to copy tokens to the clipboard with toast feedback. - Add hubDomain option to remoteIngressConfig in dcrouter options so an external hostname can be embedded in connection tokens. - Bump dependency @serve.zone/remoteingress from ^3.0.4 to ^3.1.1 in package.json. ## 2026-02-17 - 6.10.0 - feat(ops-view-certificates) Make Export and Delete actions available inline (inRow) as well as in the context menu; bump @design.estate/dees-catalog to ^3.43.0 - Added 'inRow' to action types for 'Export' and 'Delete' in ts_web/elements/ops-view-certificates.ts to expose actions inline in the row - Updated dependency @design.estate/dees-catalog from ^3.42.2 to ^3.43.0 in package.json ## 2026-02-17 - 6.9.0 - feat(certificates) add certificate import, export, and deletion support (server handlers, request types, and UI) - Add typed request handlers in opsserver: deleteCertificate, exportCertificate, importCertificate (ts/opsserver/handlers/certificate.handler.ts) - Implement deleteCertificate/exportCertificate/importCertificate functions handling storage paths, in-memory status map updates, backoff clearing, validation, and SmartAcme-compatible /certs/ and /proxy-certs/ formats - Add request interfaces IReq_DeleteCertificate, IReq_ExportCertificate, IReq_ImportCertificate (ts_interfaces/requests/certificate.ts) - Add web app actions deleteCertificateAction, importCertificateAction and fetchCertificateExport to call new typed requests (ts_web/appstate.ts) - Update certificates UI to support Import, Export, and Delete actions and add downloadJsonFile helper (ts_web/elements/ops-view-certificates.ts) ## 2026-02-17 - 6.8.0 - feat(remote-ingress) support auto-deriving ports for remote ingress edges and expose manual/derived port breakdown in API and UI - Add autoDerivePorts flag to IRemoteIngress with default true and migration to set existing stored edges to autoDerivePorts = true - RemoteIngressManager: getEffectiveListenPorts now returns the union of manual + derived ports when autoDerivePorts is enabled; added getPortBreakdown to return manual vs derived lists - API handlers updated: create/update requests accept autoDerivePorts; responses now include effectiveListenPorts, manualPorts, and derivedPorts (secrets still masked) - Web UI updated: create and edit dialogs include an Auto-derive checkbox; port badges now visually distinguish manual vs derived ports; added updateRemoteIngressAction - Non-breaking change: new field defaults to true so existing behavior is preserved ## 2026-02-17 - 6.7.0 - feat(remote-ingress) Support auto-derived effective listen ports, make listenPorts optional, add toggle action and refine remote ingress creation/management UI - Add effectiveListenPorts?: number[] to IRemoteIngress interface (present in API responses) - Make createRemoteIngressAction.listenPorts optional and update creation modal to allow empty ports (auto-derived) - Add toggleRemoteIngressAction to enable/disable remote ingress edges and wire up Enable/Disable row/context-menu actions - Update getPortsHtml to prefer manual listenPorts, fall back to effectiveListenPorts, show '(auto)' when derived and 'none' when no ports - Standardize UI actions to use inRow/contextmenu and actionFunc signatures; update create modal to use explicit Cancel/Create menu options and collect form data programmatically ## 2026-02-17 - 6.6.1 - fix(icons) standardize icon identifiers to lucide-prefixed names across operational views - Replaced legacy/ambiguous icon names with 'lucide:...' identifiers in four UI modules: ts_web/elements/ops-view-certificates.ts, ops-view-network.ts, ops-view-overview.ts, and ops-view-security.ts. - Updated common action/menu icons (e.g. arrowsRotate -> lucide:RefreshCw, magnifyingGlass -> lucide:Search, copy -> lucide:Copy, fileExport -> lucide:FileOutput). - Mapped dashboard/tile icons to lucide equivalents (e.g. server -> lucide:Server, networkWired/sitemap -> lucide:Network, download/upload -> lucide:Download/Upload, microchip/memory -> lucide:Cpu/MemoryStick). - Normalized alert and status icons to lucide names (e.g. triangleExclamation -> lucide:TriangleAlert, shield/userShield -> lucide:Shield/ShieldCheck, clock/clockRotateLeft -> lucide:Clock/History). ## 2026-02-17 - 6.6.0 - feat(remoteingress) derive effective remote ingress listen ports from route configs and expose them via ops API - Derive listen ports from SmartProxy route configs with remoteIngress.enabled; supports optional edgeFilter to target edges by id or tags. - Add RemoteIngressManager.setRoutes(), derivePortsForEdge(), and getEffectiveListenPorts() which falls back to manual listenPorts when present. - dcrouter now supplies route configs to RemoteIngressManager during initialization and when updating SmartProxy configuration to keep derived ports in sync. - Ops API now returns effectiveListenPorts for edges; createRemoteIngress.listenPorts is optional and createEdge defaults listenPorts to an empty array. - Bump dependency @serve.zone/remoteingress to ^3.0.4 to align types/behavior. ## 2026-02-16 - 6.5.0 - feat(ops-view-remoteingress) add 'Create Edge Node' header action to remote ingress table and remove duplicate createNewAction - Add a 'Create Edge Node' header action in dataActions that opens DeesModal to collect name, listenPorts and tags - Parse comma-separated listenPorts into integer array and normalize optional tags - Dispatch appstate.createRemoteIngressAction with the collected payload - Remove the previously duplicated createNewAction prop from the dees-table ## 2026-02-16 - 6.4.5 - fix(remoteingress) mark remote ingress data actions as row actions and bump @design.estate/dees-catalog dependency - Add type:['row'] to 'Regenerate Secret' and 'Delete' dataActions in ts_web/elements/ops-view-remoteingress.ts to ensure they are treated as row actions in the UI - Bump @design.estate/dees-catalog from ^3.42.0 to ^3.42.2 in package.json ## 2026-02-16 - 6.4.4 - fix(deps) bump @push.rocks/smartproxy to ^25.7.3 - Updated @push.rocks/smartproxy from ^25.7.2 to ^25.7.3 in package.json ## 2026-02-16 - 6.4.3 - fix(deps) bump @push.rocks/smartproxy to ^25.7.2 - Updated package.json: @push.rocks/smartproxy ^25.7.1 -> ^25.7.2 (patch dependency update) ## 2026-02-16 - 6.4.2 - fix(smartproxy) bump @push.rocks/smartproxy to ^25.7.1 - Updated dependency @push.rocks/smartproxy from ^25.7.0 to ^25.7.1 in package.json - No other source changes; dependency patch bump only ## 2026-02-16 - 6.4.1 - fix(deps) bump dependencies: @push.rocks/smartproxy to ^25.7.0 and @serve.zone/remoteingress to ^3.0.2 - Bumped @push.rocks/smartproxy from ^25.5.0 to ^25.7.0 - Bumped @serve.zone/remoteingress from ^3.0.1 to ^3.0.2 - Package current version is 6.4.0 — recommended patch release ## 2026-02-16 - 6.4.0 - feat(remoteingress) add Remote Ingress hub and management for edge tunnel nodes, including backend managers, tunnel hub integration, opsserver handlers, typedrequest APIs, and web UI - Introduce RemoteIngressManager for CRUD and persistent storage of edge registrations - Introduce TunnelManager to run the RemoteIngressHub, track connected edge statuses, and sync allowed edges to the hub - Integrate remote ingress into DcRouter (options.remoteIngressConfig, setupRemoteIngress, startup/shutdown handling, and startup summary) - Add OpsServer RemoteIngressHandler exposing typedrequest APIs (create/update/delete/regenerate/get/status) - Add web UI: Remote Ingress view, app state parts, actions and components to manage edges and display runtime statuses - Add typedrequest and data interfaces for remoteingress and export the remoteingress module; add @serve.zone/remoteingress dependency in package.json ## 2026-02-16 - 6.3.0 - feat(dcrouter) add configurable baseDir and centralized path resolution; use resolved data paths for storage, cache and DNS - Introduce IDcRouterOptions.baseDir to allow configuring base directory for dcrouter data (defaults to ~/.serve.zone/dcrouter). - Add DcRouter.resolvedPaths and resolvePaths(baseDir) in ts/paths.ts to centralize computation of dcrouterHomeDir, dataDir, defaultTsmDbPath, defaultStoragePath and dnsRecordsDir. - Use resolvedPaths throughout DcRouter: default filesystem storage fsPath, CacheDb storagePath, and DNS records loading now reference resolved paths. - Replace ensureDirectories() behavior with ensureDataDirectories(resolvedPaths) to only create data-related directories; keep legacy ensureDirectories wrapper delegating to the new function. - Simplify paths module by removing unused legacy path constants and adding a focused API for path resolution and directory creation. - Remove an unused import (paths) in contentscanner, cleaning up imports. ## 2026-02-16 - 6.2.4 - fix(deps) bump @push.rocks/smartproxy to ^25.5.0 - Updated @push.rocks/smartproxy from ^25.4.0 to ^25.5.0 in package.json ## 2026-02-16 - 6.2.3 - fix(dcrouter) persist proxy certificate validity dates and improve certificate status initialization - Bump @push.rocks/smartacme dependency from ^9.0.0 to ^9.1.3 - Store validFrom and validUntil alongside proxy cert entries (/proxy-certs) when saving, extracting values by parsing PEM where possible - Use stored cert entries (domain, publicKey, validUntil, validFrom) to populate certificateStatusMap at startup - Fallback to SmartAcme /certs/ metadata and finally to parsing X.509 from stored PEM to determine expiry/issuedAt when initializing status - Update opsserver certificate handler to parse publicKey PEM from cert-store and set expiry/issuedAt and issuer accordingly - Adjust variable names and logging to reflect stored cert entry usage ## 2026-02-16 - 6.2.2 - fix(certs) Populate certificate status for cert-store-loaded certificates after SmartProxy startup and check proxy-certs in opsserver certificate handler - Track domains loaded from storageManager '/proxy-certs/' and populate certificateStatusMap with status, routeNames, expiryDate and issuedAt (when available) after SmartProxy starts - Opsserver certificate handler now falls back to '/proxy-certs/{domain}' if '/certs/{cleanDomain}' is missing and marks cert-store-only entries as valid with issuer 'cert-store' - Bump @push.rocks/smartproxy dependency from ^25.3.1 to ^25.4.0 ## 2026-02-16 - 6.2.1 - fix(smartacme,storage) Respect wildcard domain requests when retrieving certificates and treat empty/whitespace storage values as null in getJSON - Pass includeWildcard flag to smartAcme.getCertificateForDomain to avoid incorrectly including/excluding wildcard certificates based on whether the requested domain itself is a wildcard - Detect wildcard domains via domain.startsWith('*.') and set includeWildcard to false for wildcard requests - Treat empty or whitespace-only stored values as null in StorageManager.getJSON to avoid parsing empty strings as JSON and potential errors ## 2026-02-16 - 6.2.0 - feat(ts_web) add Certificate Management documentation and ops-view-certificates reference - Adds a new 'Certificate Management' section to ts_web/readme.md describing domain-centric overview, certificate sources (ACME/provision/static), expiry monitoring, per-domain backoff, and one-click reprovisioning - Adds ops-view-certificates.ts entry to the ops UI file list - Documents new route mapping '/certificates' in the readme navigation ## 2026-02-16 - 6.1.0 - feat(certs) integrate smartacme v9 for ACME certificate provisioning and add certificate management features, docs, dashboard views, API endpoints, and per-domain backoff scheduler - Bump dependency: @push.rocks/smartacme -> ^9.0.0 - Add Certificate Management documentation, examples, and a new Certificates view in the OpsServer dashboard (status, source, expiry, backoff, one‑click reprovision) - Integrate smartacme v9 features: per-domain deduplication, global concurrency control, account rate limiting, structured errors, and clean shutdown behavior - Introduce per-domain exponential backoff persisted via StorageManager (CertProvisionScheduler) and remove the older serial stagger queue (smartacme v9 handles concurrency/deduping) - Expose new typedrequest API methods: getCertificateOverview, reprovisionCertificate (legacy), reprovisionCertificateDomain (preferred) - DcRouter now surfaces smartAcme, certProvisionScheduler, and certificateStatusMap; cert provisioning paths call smartAcme directly and clear backoff on success - Docs updated to note parallel shutdown/cleanup of HTTP agents and DNS clients ## 2026-02-15 - 6.0.0 - BREAKING CHANGE(certs) Introduce domain-centric certificate provisioning with per-domain exponential backoff and a staggered serial scheduler; add domain-based reprovision API and UI backoff display; change certificate overview API to be domain-first and include backoff info; bump related deps. - Add CertProvisionScheduler: persistent per-domain exponential backoff, retry calculation, and an in-memory serial stagger queue. - Integrate scheduler with SmartAcme certProvisionFunction: enqueue provisions, clear backoff on success, record failures to drive backoff. - Switch certificate event tracking to be keyed by domain (certificateStatusMap now keyed by domain) and add findRouteNamesForDomain helper. - BREAKING: ICertificateInfo shape changed — replaced routeName/domains with domain and routeNames; added optional backoffInfo (failures, retryAfter, lastError). - Add domain-based reprovision endpoint (reprovisionCertificateDomain) while retaining legacy route-based reprovision for backward compatibility (internal rename to reprovisionCertificateByRoute). - Web UI updated to domain-centric certificate overview, displays route pills, backoff indicator and retry timing, and uses domain-based reprovision action. - Dependency bumps: @push.rocks/smartlog -> ^3.1.11, @push.rocks/smartproxy -> ^25.3.1. ## 2026-02-14 - 5.5.0 - feat(certs) persist ACME certificates in StorageManager, add storage-backed cert manager, default storage to filesystem, and improve certificate status reporting - Add StorageBackedCertManager to persist SmartAcme certificates under /certs/ via StorageManager - Default storage to filesystem path (dcrouterHomeDir/storage) when options.storage is not provided - Wire SmartAcme to use StorageBackedCertManager and provide SmartProxy certStore handlers that load/save/remove certs under /proxy-certs/ - Ops server certificate handler reads persisted cert data to report expiry/issued dates and treats acme/provision-function routes with no cert data as provisioning - Bump @push.rocks/smartproxy dependency to ^25.3.0 ## 2026-02-14 - 5.4.6 - fix(deps) bump @push.rocks/smartproxy dependency to ^25.2.2 - Updated dependency @push.rocks/smartproxy: ^25.2.0 → ^25.2.2 - Change is a dependency-only patch update, no source code modifications - Current package version is 5.4.5; recommend a patch release ## 2026-02-14 - 5.4.5 - fix(dcrouter) bump patch for release pipeline consistency - no code changes - current version: 5.4.4 (from package.json) - git diff: no changes detected - recommend patch bump to trigger release artifacts if required ## 2026-02-14 - 5.4.4 - fix(deps) bump @push.rocks/smartproxy to ^25.2.0 - Updated @push.rocks/smartproxy from ^25.1.0 to ^25.2.0 (patch, non-breaking). - Current package version is 5.4.3; recommend a patch release to 5.4.4. ## 2026-02-14 - 5.4.3 - fix(dependencies) bump @push.rocks/smartproxy to ^25.1.0 - Updated @push.rocks/smartproxy from ^25.0.0 to ^25.1.0 in package.json ## 2026-02-13 - 5.4.2 - fix(dcrouter) improve domain pattern matching to support routing-glob and wildcard patterns and use matching logic when resolving routes - Support routing-glob patterns beginning with '*' (e.g. *example.com) to match base domain, wildcard form, and subdomains - Treat standard wildcard patterns ('*.example.com') as matching both the base domain (example.com) and its subdomains - Use isDomainMatch when resolving routes instead of exact array includes to allow pattern matching - Normalize domain and pattern to lowercase and simplify equality checks ## 2026-02-13 - 5.4.1 - fix(network,dcrouter) Always register SmartProxy certificate event handlers and include total bytes + improved connection metrics in network stats/UI - Always register SmartProxy 'certificate-issued', 'certificate-renewed', and 'certificate-failed' handlers (previously only registered when acmeConfig was present) so certificate events are processed regardless of provisioning path. - Add totalBytes (in/out) to network stats and propagate it through ts_interfaces and app state so total data transferred is available to the UI. - Combine metricsManager.getNetworkStats with collectServerStats to compute activeConnections and adjust connectionDetails/TopEndpoints handling. - Update ops UI to display totalBytes in throughput cards and remove a redundant network-specific auto-refresh fetch. - Type and state updates: ts_interfaces/data/stats.ts and ts_web/appstate.ts updated with totalBytes and initialization/default mapping adjusted. ## 2026-02-13 - 5.4.0 - feat(certificates) include certificate source/issuer and Rust-side status checks; pass eventComms into certProvisionFunction and record expiry information - bump @push.rocks/smartproxy dependency to ^25.0.0 - add optional 'source' field to certificate status and propagate event.source when certificates are issued, renewed, or failed - change smartProxy.certProvisionFunction signature to accept eventComms; use it to log attempts, set source and expiryDate, and fall back to http-01 on DNS-01 failure - make buildCertificateOverview async and query smartProxy.getCertificateStatus for a route when event-based status is unknown - improve logging to include certificate source and more contextual messages ## 2026-02-13 - 5.3.0 - feat(certificates) add certificate overview and reprovisioning in ops UI and API; track SmartProxy certificate events - Add CertificateHandler with typedrequest endpoints: getCertificateOverview and reprovisionCertificate - Introduce ICertificateInfo and request/response interfaces for certificate operations - Frontend: add certificate state part, actions (fetchCertificateOverview, reprovisionCertificate), router view, and ops-view-certificates component - DcRouter: add certificateStatusMap, listen to SmartProxy certificate-issued/renewed/failed events, and add findRouteNameForDomain helper - Bump dependency @push.rocks/smartproxy to ^24.0.0 ## 2026-02-13 - 5.2.0 - feat(monitoring) add throughput metrics and expose them in ops UI - MetricsManager now reports bytesInPerSecond and bytesOutPerSecond as part of throughput - Extended IServerStats with requestsPerSecond and throughput {bytesIn, bytesOut, bytesInPerSecond, bytesOutPerSecond} - Stats handler updated to include requestsPerSecond and throughput; fallback stats initialize throughput fields to zero - Web UI ops overview displays Throughput In/Out (bits/s) and total bytes with new formatting helper - Bumped dependency @push.rocks/smartproxy to ^23.1.6 ## 2026-02-13 - 5.1.0 - feat(acme) Integrate SmartAcme DNS-01 handling and add certificate provisioning for SmartProxy - Add smartAcme property and lifecycle management (start/stop) in DcRouter - Create SmartAcme instance when DNS challenge handlers are present and wire certProvisionFunction to SmartProxy to return certificates for domains - Fall back to http-01 provisioning on SmartAcme errors for a domain - Stop SmartAcme during shutdown sequence to clean up resources - Bump dependency @push.rocks/smartproxy to ^23.1.5 ## 2026-02-13 - 5.0.7 - fix(deps) bump @push.rocks/smartdns to ^7.8.1 and @push.rocks/smartmta to ^5.2.2 - package.json: updated @push.rocks/smartdns from ^7.8.0 to ^7.8.1 (patch) - package.json: updated @push.rocks/smartmta from ^5.2.1 to ^5.2.2 (patch) ## 2026-02-12 - 5.0.6 - fix(deps) bump @push.rocks/smartproxy to ^23.1.4 - package.json: @push.rocks/smartproxy ^23.1.2 → ^23.1.4 - Dependency-only version bump, no source code changes ## 2026-02-12 - 5.0.5 - fix(dcrouter) remove legacy handling of emailConfig.routes that added domain-based routes - Removed loop that added domain-based email routes from emailConfig.routes into emailRoutes - Previously created match.domains by extracting the recipient domain (split on '@') and defaulted forward target port to 25 - Removed creation of TLS passthrough configuration for those forwarded routes - This prevents duplicate or incorrect domain-based routes being appended during email route construction ## 2026-02-12 - 5.0.4 - fix(cache) use user-writable ~/.serve.zone/dcrouter for TsmDB and centralize data path logic - Default TsmDB storage changed from /etc/dcrouter/tsmdb to ~/.serve.zone/dcrouter/tsmdb - Introduced dcrouterHomeDir, dataDir, and defaultTsmDbPath in ts/paths.ts - CacheDb now defaults to defaultTsmDbPath when no storagePath is provided - DcRouter initialization updated to use paths.defaultTsmDbPath; README and readme.hints updated to document the new defaults - Avoids /etc permission issues and prevents starting a real MongoDB process in tests by using a user-writable default path ## 2026-02-12 - 5.0.3 - fix(packaging) add files whitelist to package.json and remove Playwright-generated screenshots - Add a "files" array to package.json to control published package contents (includes ts/, ts_web/, dist/, dist_*/**, dist_ts/, dist_ts_web/, assets/, cli.js, npmextra.json, readme.md). - Remove multiple .playwright-mcp/*.png screenshot files (clean up Playwright test artifacts and reduce repository noise/size). ## 2026-02-12 - 5.0.2 - fix(docs) update documentation and packaging configuration: document smartmta/smartdns integrations, adjust API method names, and add release registry info - README: document SmartDNS as Rust-powered DNS engine and smartmta as TypeScript+Rust MTA; add Rust-powered architecture section and component package table - README: update Node.js requirement from 18+ to 20+; replace embedded cache DB TsmDb with LocalTsmDb and reduce listed cached document types - README & ts_interfaces: rename typedrequest API adminLogin -> adminLoginWithUsernameAndPassword and add/clarify several API methods (logout, suppression management, RADIUS client/VLAN helpers) - README: update test instructions, change test file references and add a test coverage table - npmextra.json: re-key package configs (@git.zone/cli, @ship.zone/szci), tidy watch array formatting, and add release.registries and accessLevel for publishing ## 2026-02-11 - 5.0.1 - fix(deps/tests) bump two dependencies and disable cache in tests - Bumped @api.global/typedrequest from ^3.2.5 to ^3.2.6 - Bumped @push.rocks/smartradius from ^1.1.0 to ^1.1.1 - Disabled cache in tests by adding cacheConfig: { enabled: false } to DcRouter instantiation in test/test.jwt-auth.ts, test/test.opsserver-api.ts, and test/test.protected-endpoint.ts ## 2026-02-11 - 5.0.0 - BREAKING CHANGE(mta) migrate internal MTA to @push.rocks/smartmta and remove legacy mail/deliverability implementation - Replace ~27k LOC custom MTA (ts/mail/, ts/deliverability/) with @push.rocks/smartmta v5.2.1 (TypeScript+Rust hybrid) - Remove many SMTP client/server test suites and test helpers; testing approach and fixtures changed/removed - Upgrade dependencies: @push.rocks/smartproxy -> 23.1.2, @push.rocks/smartdns -> 7.8.0, add @push.rocks/smartmta@5.2.1; bump other minor deps - API differences: updateEmailRoutes() replaces updateRoutes(); UnifiedEmailServer exposes dkimCreator publicly; bounce/suppression APIs moved to emailServer.* helpers; Email class and IAttachment types moved into @push.rocks/smartmta exports - SmartProxy route validation stricter: forward actions must use targets (array) instead of target (singular) — tests/configs updated accordingly - DKIM generation/serving moved to smartmta (dcrouter no longer manages DKIM keys directly) ## 2026-02-10 - 4.1.1 - fix(smartproxy) upgrade @push.rocks/smartproxy to ^23.1.0 and adapt code/tests for its async getStatistics() API - Bumped dependency @push.rocks/smartproxy 22.4.2 → 23.1.0 in package.json - Changed ts/monitoring/classes.metricsmanager.ts to await smartProxy.getStatistics() (was synchronous) - Updated multiple tests to set cacheConfig: { enabled: false } and added socketTimeouts where appropriate - Improved SMTP test servers: handle multi-line input, drop data for packet-loss simulation, and ignore socket errors to make tests more robust - Added migration notes to readme.hints.md documenting SmartProxy v23.1.0 changes (async getStatistics, Rust proxy behavior) ## 2026-02-10 - 4.1.0 - feat(cache) add persistent smartdata-backed cache with LocalTsmDb, cache cleaner, and DcRouter integration - Introduce CacheDb and CacheCleaner using @push.rocks/smartdata and @push.rocks/smartmongo (LocalTsmDb) for persistent caching - Integrate cache initialization, console summary, and graceful shutdown into DcRouter (options.cacheConfig and setupCacheDb()) - Require svDb() decorators on concrete cache document classes; remove decorators from the abstract CachedDocument base class - Switch CacheCleaner to smartdata getInstances() + per-document delete() instead of deleteMany - Adapt to LocalTsmDb API changes (folderPath option and start() returning connectionUri) and initialize SmartdataDb with mongoDbUrl/mongoDbName - Remove experimentalDecorators and emitDecoratorMetadata from tsconfig to use TC39 Stage 3 decorators (smartdata v7+ compatibility) - Add package.json exports mapping (remove main/typings entries) to expose dist entry points - Add README documentation for the Smartdata Cache System and configuration/usage examples ## 2026-02-03 - 4.0.0 - BREAKING CHANGE(config) convert configuration management to read-only; remove updateConfiguration endpoint and client-side editing - Removed server-side 'updateConfiguration' TypedHandler and the private updateConfiguration() method; getConfiguration remains as a read-only handler. - Removed IReq_UpdateConfiguration interface from request typings; IReq_GetConfiguration marked as read-only. - Removed client-side editing functionality: ops-view-config editing state and methods, Edit/Save/Cancel buttons, and updateConfigurationAction; ops-view-config enhanced to display read-only configuration (badges for booleans, array pills, icons, formatted numbers/bytes, empty states, etc.). - Tests updated: replaced configuration update tests with verifyIdentity tests and added a read-only configuration access test. - Documentation updated to reflect configuration is read-only (readme.md, ts_web/readme.md, ts_interfaces/readme.md, readme.hints.md). - Dependencies adjusted: bumped @push.rocks/smartdata to ^7.0.15 and added @push.rocks/smartmongo ^5.1.0; ts/plugins updated to import/export smartmongo. ## 2026-02-02 - 3.1.0 - feat(web) determine initial UI view from URL and wire selected view to appdash; add interface and web README files; bump various dependencies - UI: derive initial active view from window.location.pathname so the dashboard supports deep linking and bookmarks (ts_web/appstate.ts) - UI: pass selectedView to dees-simple-appdash by adding a currentViewTab getter in ops-dashboard (ts_web/elements/ops-dashboard.ts) - Docs: add TypeScript interfaces README for @serve.zone/dcrouter-interfaces (ts_interfaces/readme.md) - Docs: add/update web module README detailing features, routing, and build instructions (ts_web/readme.md) and expand main project README - Deps: bump multiple dependencies in package.json (notable bumps: @api.global/typedrequest -> ^3.2.5, @design.estate/dees-catalog -> ^3.42.0, @design.estate/dees-element -> ^2.1.6, @push.rocks/projectinfo -> ^5.0.2, @push.rocks/smartdata -> ^5.16.7, @push.rocks/smartpromise -> ^4.2.3, @push.rocks/smartradius -> ^1.1.0, @push.rocks/smartstate -> ^2.0.30, mailauth -> ^4.12.1) ## 2026-02-01 - 3.0.0 - BREAKING CHANGE(deps) upgrade major dependencies, migrate action.target to action.targets (array), adapt to SmartRequest API changes, and add RADIUS server support - Bumped many major dependencies: @api.global/typedserver 3.x → 8.3.0, @api.global/typedsocket 3.x → 4.1.0, @apiclient.xyz/cloudflare 6.x → 7.1.0, @design.estate/dees-catalog 1.x → 3.41.4, @push.rocks/smartpath 5.x → 6.x, @push.rocks/smartproxy 19.x → 22.x, @push.rocks/smartrequest 2.x → 5.x, uuid 11.x → 13.x, @types/node 25.1.0 → 25.2.0 ## 2026-02-01 - 2.13.0 - feat(radius) add RADIUS server with MAC authentication (MAB), VLAN assignment, accounting and OpsServer API handlers - Introduce full RADIUS module under ts/radius: classes.radius.server, classes.vlan.manager, classes.accounting.manager (authentication, VLAN mapping, OUI patterns, accounting, persistence). - Integrate RADIUS into DcRouter: add radiusConfig option, setupRadiusServer(), updateRadiusConfig(), start/stop lifecycle handling and startup summary output. - Add OpsServer RadiusHandler (ts/opsserver/handlers/radius.handler.ts) exposing TypedRequest endpoints for client management, VLAN mappings, accounting reports and statistics. - Add typed request interfaces for RADIUS under ts_interfaces/requests/radius.ts and export them from the requests index. - Wire smartradius into plugins (ts/plugins.ts) and export the new module; export RADIUS from ts/index.ts and re-export RADIUS types from classes.dcrouter. - Update package.json & npmextra.json: add tswatch script and dev watcher configuration, add @push.rocks/smartradius dependency and a test_watch/devserver.ts dev server entrypoint. - Refactor several web UI components (ops-dashboard, ops-view-*) to use 'accessor' for @state properties (small UI state API adjustments). - Documentation: update readme.hints.md with RADIUS integration notes and examples. ## 2026-02-01 - 2.12.6 - fix(tests) update tests and test helpers to current email/DNS APIs, use non-privileged ports, and improve robustness and resilience - Email tests: switch to IEmailConfig properties (domains, routes), use router.emailServer (not unifiedEmailServer), change to non-privileged ports (e.g. 2525) and use fs.rmSync for cleanup. - SMTP client helper: add pool and domain options; adjust tests to use STARTTLS (secure: false) and tolerate TLS/cipher negotiation failures with try/catch fallbacks. - DNS tests: replace dnsDomain with dnsNsDomains and dnsScopes; test route generation without starting services, verify route names/domains, and create socket handlers without binding privileged ports. - Socket-handler tests: use high non-standard ports for route/handler tests, verify route naming (email-port--route), ensure handlers are functions and handle errors gracefully without starting full routers. - Integration/storage/rate-limit tests: add waits for async persistence, create/cleanup test directories, return and manage test server instances, relax strict assertions (memory threshold, rate-limiting enforcement) and make tests tolerant of implementation differences. - Misc: use getAvailablePort in perf test setup, export tap.start() where appropriate, and generally make tests less brittle by adding try/catch, fallbacks and clearer logs for expected non-deterministic behavior. ## 2026-02-01 - 2.12.5 - fix(mail) migrate filesystem helpers to fsUtils, update DKIM and mail APIs, harden SMTP client, and bump dependencies - Introduce plugins.fsUtils compatibility layer and replace usages of plugins.smartfile.* with plugins.fsUtils.* across storage, routing, deliverability, and paths to support newer smartfile behaviour - Update DKIM signing/verifying to new mailauth API: use signingDomain/selector/privateKey and read keys from dkimCreator before signing; adjust verifier fields to use signingDomain - Harden SMTP client CommandHandler: add MAX_BUFFER_SIZE, socket close/error handlers, robust cleanup, clear response buffer, and adjust command/data timeouts; reduce default SOCKET_TIMEOUT to 45s - Use SmartFileFactory for creating SmartFile attachments and update saving/loading to use fsUtils async/sync helpers - Switch test runners to export default tap.start(), relax some memory-test thresholds, and add test helper methods (recordAuthFailure, recordError) - Update package.json: simplify bundle script and bump multiple devDependencies/dependencies to compatible versions ## 2025-01-29 - 2.13.0 - feat(socket-handler) Implement socket-handler mode for DNS and email services, enabling direct socket passing from SmartProxy - Add `dnsDomain` configuration option that automatically sets up DNS server with DNS-over-HTTPS (DoH) support - Implement socket-handler mode for email services with `useSocketHandler` flag in email configuration - Update SmartProxy route generation to create socket-handler actions instead of port forwarding - Add automatic route creation for DNS paths `/dns-query` and `/resolve` when dnsDomain is configured - Enhance UnifiedEmailServer with `handleSocket` method for direct socket processing - Configure DnsServer with `manualHttpsMode: true` to prevent HTTPS port binding while enabling DoH - Improve performance by eliminating internal port forwarding overhead - Update documentation with socket-handler mode configuration and benefits ## 2025-05-16 - 2.12.0 - feat(smartproxy) Update documentation and configuration guides to adopt new route-based SmartProxy architecture - Revise SmartProxy implementation hints in readme.hints.md to describe route-based configuration with glob pattern matching - Add migration examples showing transition from old direct configuration to new route-based style - Update DcRouter and SMTP port configuration to generate SmartProxy routes for email handling (ports 25, 587, 465 mapped to internal services) - Enhance integration documentation with examples for HTTP and email services using the new SmartProxy routes ## 2025-05-16 - 2.11.2 - fix(dependencies) Update dependency versions and adjust test imports to use new packages - Upgraded @git.zone/tsbuild from ^2.3.2 to ^2.5.1 - Upgraded @git.zone/tstest/tapbundle from ^1.0.88 to ^1.9.0 and replaced @push.rocks/tapbundle imports in tests - Upgraded @push.rocks/smartlog from ^3.0.3 to ^3.1.2 - Upgraded @push.rocks/smartproxy from ^10.2.0 to ^18.1.0 - Upgraded mailauth from ^4.8.4 to ^4.8.5 ## 2025-05-08 - 2.11.1 - fix(platform) Update commit info with no functional changes; regenerated commit information. ## 2025-05-08 - 2.11.0 - feat(platformservice) Expose DcRouter and update package visibility. Changed package.json 'private' flag from true to false to allow public publication, and added export of DcRouter in ts/index.ts for improved API accessibility. - Changed package.json: set 'private' to false - Added export for DcRouter in ts/index.ts ## 2025-05-08 - 2.10.0 - feat(config): Implement standardized configuration system Create a comprehensive configuration system with validation, defaults, and documentation - Added consistent configuration interfaces across all services - Implemented validation for all configuration objects with detailed error reporting - Added default values for optional configuration parameters - Created an extensive documentation system for configuration options - Added migration helpers for managing configuration format changes - Enhanced platform service to load configuration from multiple sources (file, environment, code) - Updated email and SMS services to use the new configuration system ## 2025-05-08 - 2.9.0 - feat(errors): Implement comprehensive error handling system Enhance error handling with structured errors, consistent patterns, and improved logging - Added domain-specific error classes for better error categorization and handling - Created comprehensive error codes for all service types (email, MTA, security, etc.) - Implemented detailed error context with severity, category, and recoverability classification - Added utilities for error conversion, formatting, and handling with automatic retry mechanisms - Enhanced logging with correlation tracking, context support, and structured data - Created middleware for handling errors in HTTP requests with proper status code mapping - Added retry with exponential backoff for transient failures ## 2025-05-08 - 2.8.9 - fix(types) Fix TypeScript build errors and improve API type safety across platformservice interfaces - Fixed interface placement in EmailService and MtaConnector classes - Aligned DeliveryStatus enum and updated ApiManager handlers with proper type-safe signatures - Added comprehensive TypeScript interfaces for ISendEmailOptions, ITemplateContext, IValidateEmailOptions, IValidationResult, and IEmailServiceStats - Removed circular dependencies in type definitions and added proper type assertions - Improved test stability by handling race conditions in SenderReputationMonitor and IPWarmupManager; external DNS lookups are disabled under test environment ## 2025-05-08 - 2.8.8 - fix(types): Fix TypeScript build errors and improve API interfaces Fix TypeScript build errors caused by interface placement and improve API type alignment - Fixed interface placement in EmailService and MtaConnector classes - Aligned DeliveryStatus enum with EmailSendJob implementation - Added proper method signatures for API endpoint handlers in ApiManager class - Updated getStats and checkEmailStatus methods to conform to API contracts - Implemented type-safe return values for all API methods - Fixed circular dependencies in type definitions - Added proper type assertion where needed to satisfy TypeScript compiler ## 2025-05-08 - 2.8.7 - feat(types): Add comprehensive TypeScript interfaces for API types Improve type safety across the platform by adding detailed TypeScript interfaces for APIs - Added ISendEmailOptions interface with complete documentation for email sending options - Created ITemplateContext interface for email template rendering with full type safety - Added IValidateEmailOptions and IValidationResult interfaces for email validation - Improved IEmailServiceStats interface with detailed statistics types - Added IEmailStatusResponse and IEmailStatusDetails interfaces for MTA status checking - Updated sendEmail and other methods to use these new interfaces instead of 'any' - Removed need for type assertions in various components ## 2025-05-08 - 2.8.6 - fix(tests) fix: Improve test stability by handling race conditions in SenderReputationMonitor and IPWarmupManager. Disable filesystem operations and external DNS lookups during tests by checking NODE_ENV, add proper cleanup of singleton instances and active timeouts to ensure consistent test environment. - Bumped version from 2.8.4 to 2.8.5 in package.json and changelog.md - Improved SenderReputationMonitor to skip filesystem operations and DNS record loading when NODE_ENV is set to test - Added cleanup of singleton instances and active timeouts in test files - Updated readme.plan.md with roadmap items for test stability ## 2025-05-08 - 2.8.5 - fix(tests): Improve test stability by fixing race conditions Enhance the SenderReputationMonitor tests to prevent race conditions and make tests more reliable - Modified SenderReputationMonitor to detect test environment and disable filesystem operations - Added proper cleanup of singleton instances and timeouts between tests - Disabled DNS lookups during tests to prevent external dependencies - Set a consistent test environment using NODE_ENV=test - Made all tests independent of each other to prevent shared state issues ## 2025-05-08 - 2.8.4 - fix(mail) refactor(mail): Remove Mailgun references from PlatformService. Update keywords, error messages, and documentation to use MTA exclusively. - Removed Mailgun integration from keywords in package.json and npmextra.json - Updated EmailService to remove Mailgun API key usage and reference MTA instead - Updated changelog.md and readme.md to reflect removal of Mailgun and update examples - Revised error messages to mention 'MTA not configured' instead of generic provider errors - Updated readme.plan.md to document Mailgun removal ## 2025-05-08 - 2.8.3 - refactor(mail): Remove Mailgun references Remove all Mailgun references from the codebase since it's no longer used as an email provider - Removed "mailgun integration" from keywords in package.json and npmextra.json - Updated comments and documentation in EmailService to remove Mailgun mentions - Updated error messages to reference MTA instead of generic email providers - Updated the readme email example to use PlatformService reference instead of Mailgun API key ## 2025-05-08 - 2.8.2 - fix(tests) Fix outdated import paths in test files for dcrouter and ratelimiter modules - Updated dcrouter import from '../ts/dcrouter/index.js' to '../ts/classes.dcrouter.js' - Updated ratelimiter import from '../ts/mta/classes.ratelimiter.js' to '../ts/mail/delivery/classes.ratelimiter.js' ## 2025-05-08 - 2.8.1 - fix(readme) Update readme with consolidated email system improvements and modular directory structure Clarify that the platform now organizes email functionality into distinct directories (mail/core, mail/delivery, mail/routing, mail/security, mail/services) and update the diagram and key features list accordingly. Adjust code examples to reflect explicit module imports and the use of SzPlatformService. - Changed description of consolidated email configuration to include 'streamlined directory structure'. - Updated mermaid diagram to show 'Mail System Structure' with separate components for core, delivery, routing, security, and services. - Modified key features list to document modular directory structure. - Revised code sample imports to use explicit paths and SzPlatformService. ## 2025-05-08 - 2.8.0 - feat(docs) Update documentation to include consolidated email handling and pattern‑based routing details - Extended MTA section to describe the new unified email processing system with forward, MTA, and process modes - Updated system diagram to reflect DcRouter integration with UnifiedEmailServer, DeliveryQueue, DeliverySystem, and RateLimiter - Revised readme.plan.md checklists to mark completed features in core architecture, multi‑modal processing, unified queue, and DcRouter integration ## 2025-05-08 - 2.7.0 - feat(dcrouter) Implement unified email configuration with pattern‐based routing and consolidated email processing. Migrate SMTP forwarding and store‐and‐forward into a single, configuration-driven system that supports glob pattern matching in domain rules. - Introduced IEmailConfig interface to consolidate MTA, forwarding, and processing settings. - Added pattern-based domain routing with glob patterns (e.g., '*@example.com', '*@*.example.net'). - Reworked DcRouter integration to expose unified email handling and updated readme.plan.md and changelog.md accordingly. - Removed deprecated SMTP forwarding components in favor of the consolidated approach. ## 2025-05-08 - 2.7.0 - feat(dcrouter) Implement consolidated email configuration with pattern-based routing - Added new pattern-based email routing with glob patterns (e.g., `*@task.vc`, `*@*.example.net`) - Consolidated all email functionality (MTA, forwarding, processing) under a unified `emailConfig` interface - Implemented domain router with pattern specificity calculation for most accurate matching - Removed deprecated components (SMTP forwarding, Store-and-Forward) in favor of the unified approach - Updated DcRouter tests to use the new consolidated email configuration pattern - Enhanced inline documentation with detailed interface definitions and configuration examples - Updated implementation plan with comprehensive component designs for the unified email system ## 2025-05-07 - 2.6.0 - feat(dcrouter) Implement integrated DcRouter with comprehensive SmartProxy configuration, enhanced SMTP processing, and robust store‐and‐forward email routing - Marked completion of tasks in readme.plan.md with [x] flags for SMTP server setup, email processing pipeline, queue management, and delivery system. - Reworked DcRouter to use direct SmartProxy configuration, separating smtpConfig and smtpForwarding approaches. - Added new components for delivery queue and delivery system with persistent storage support. - Improved SMTP server implementation with TLS support, event handlers for connection, authentication, sender/recipient validation, and data processing. - Refined domain-based routing and transformation logic in EmailProcessor with metrics and logging. - Updated exported modules in dcrouter index to include SMTP store‐and‐forward components. - Enhanced inline documentation and code comments for configuration interfaces and integration details. ## 2025-05-07 - 2.5.0 - feat(dcrouter) Enhance DcRouter configuration and update documentation - Added new implementation hints (readme.hints.md) and planning documentation (readme.plan.md) outlining removal of SzPlatformService dependency and improvements in SMTP forwarding, domain routing, and certificate management. - Introduced new interfaces: ISmtpForwardingConfig and IDomainRoutingConfig for precise SMTP and HTTP domain routing configuration. - Refactored DcRouter classes to support direct integration with SmartProxy and enhanced MTA functionality, including SMTP port configuration and improved TLS handling. - Updated supporting modules such as SmtpPortConfig and EmailDomainRouter to provide better routing and security options. - Enhanced test coverage across dcrouter, rate limiter, IP warmup manager, and email authentication, ensuring backward compatibility and improved quality. ## 2025-05-07 - 2.4.2 - fix(tests) Update test assertions and singleton instance references in DMARC, integration, and IP warmup manager tests - In test.emailauth.ts, update expected DMARC policy from 'none' to 'reject' and verify actualPolicy and action accordingly - In test.integration.ts, remove deprecated casting and adjust dedicated policy naming (use 'dedicated' instead of 'dedicatedDomain') - In test.ipwarmupmanager.ts and test.reputationmonitor.ts, replace singleton reset from '_instance' to 'instance' for proper instance access - Update round robin allocation tests to verify IP cycle returns one of the available IPs - Enhance daily limit tests by verifying getBestIPForSending returns null when limit is reached - General refactoring across tests for improved clarity and consistency ## 2025-05-07 - 2.4.1 - fix(tests) Update test assertions and refine service interfaces - Converted outdated chai assertions to use tap's toBeTruthy, toEqual, and toBeGreaterThan methods in multiple test files - Appended tap.stopForcefully() tests to ensure proper cleanup in test suites - Added stop() method to PlatformService for graceful shutdown - Exposed certificate property in MtaService from private to public - Refactored dcrouter smartProxy configuration to better handle MTA service integration and certificate provisioning ## 2025-05-07 - 2.4.0 - feat(email) Enhance email integration by updating @push.rocks/smartmail to ^2.1.0 and improving the entire email stack including validation, DKIM verification, templating, MIME conversion, and attachment handling. - Updated smartmail dependency from ^2.0.1 to ^2.1.0 in package.json - Enhanced EmailValidator with comprehensive checks (syntax, MX, disposable and role validations) - Refactored TemplateManager to support dynamic variable substitution and loading templates from directory - Improved conversion between internal Email and smartmail.Smartmail, streamlining MIME handling and attachment mapping - Augmented DKIM verification with caching and custom header injection for improved security reporting - Updated readme.plan.md with detailed roadmap for further performance, security, analytics, and deliverability enhancements - Expanded test suite to cover smartmail integration, validation, templating, and conversion between formats ## 2025-05-04 - 1.0.10 to 1.0.8 - core Applied core fixes across several versions on this day. - Fixed core issues in versions 1.0.10, 1.0.9, and 1.0.8 ## 2024-04-01 - 1.0.7 - core Applied a core fix. - Fixed core functionality for version 1.0.7 ## 2024-03-19 - 1.0.6 - core Applied a core fix. - Fixed core functionality for version 1.0.6 ## 2024-02-16 - 1.0.5 to 1.0.2 - core Applied multiple core fixes in a contiguous range of versions. - Fixed core functionality for versions 1.0.5, 1.0.4, 1.0.3, and 1.0.2 ## 2024-02-15 - 1.0.1 - core Applied a core fix. - Fixed core functionality for version 1.0.1 ––––––––––––––––––––––– Note: Versions that only contained version bumps (for example, 1.0.11 and the plain "1.0.x" commits) have been omitted from individual entries and are implicitly included in the version ranges above.