@serve.zone/dcrouter 2.12.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +1 -0
- package/.gitea/workflows/docker_nottags.yaml +71 -0
- package/.gitea/workflows/docker_tags.yaml +106 -0
- package/.vscode/launch.json +11 -0
- package/.vscode/settings.json +26 -0
- package/Dockerfile +46 -0
- package/changelog.md +247 -0
- package/cli.child.js +4 -0
- package/cli.child.ts +4 -0
- package/cli.js +4 -0
- package/cli.ts.js +5 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.dcrouter.d.ts +238 -0
- package/dist_ts/classes.dcrouter.js +1008 -0
- package/dist_ts/config/index.d.ts +1 -0
- package/dist_ts/config/index.js +3 -0
- package/dist_ts/config/validator.d.ts +104 -0
- package/dist_ts/config/validator.js +152 -0
- package/dist_ts/deliverability/classes.ipwarmupmanager.d.ts +253 -0
- package/dist_ts/deliverability/classes.ipwarmupmanager.js +639 -0
- package/dist_ts/deliverability/classes.senderreputationmonitor.d.ts +300 -0
- package/dist_ts/deliverability/classes.senderreputationmonitor.js +961 -0
- package/dist_ts/deliverability/index.d.ts +2 -0
- package/dist_ts/deliverability/index.js +3 -0
- package/dist_ts/errors/base.errors.d.ts +224 -0
- package/dist_ts/errors/base.errors.js +310 -0
- package/dist_ts/errors/email.errors.d.ts +175 -0
- package/dist_ts/errors/email.errors.js +265 -0
- package/dist_ts/errors/error-handler.d.ts +98 -0
- package/dist_ts/errors/error-handler.js +282 -0
- package/dist_ts/errors/error.codes.d.ts +115 -0
- package/dist_ts/errors/error.codes.js +136 -0
- package/dist_ts/errors/index.d.ts +56 -0
- package/dist_ts/errors/index.js +138 -0
- package/dist_ts/errors/mta.errors.d.ts +259 -0
- package/dist_ts/errors/mta.errors.js +472 -0
- package/dist_ts/errors/reputation.errors.d.ts +183 -0
- package/dist_ts/errors/reputation.errors.js +292 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +6 -0
- package/dist_ts/logger.d.ts +17 -0
- package/dist_ts/logger.js +77 -0
- package/dist_ts/mail/core/classes.bouncemanager.d.ts +200 -0
- package/dist_ts/mail/core/classes.bouncemanager.js +778 -0
- package/dist_ts/mail/core/classes.email.d.ts +291 -0
- package/dist_ts/mail/core/classes.email.js +780 -0
- package/dist_ts/mail/core/classes.emailvalidator.d.ts +61 -0
- package/dist_ts/mail/core/classes.emailvalidator.js +182 -0
- package/dist_ts/mail/core/classes.templatemanager.d.ts +95 -0
- package/dist_ts/mail/core/classes.templatemanager.js +239 -0
- package/dist_ts/mail/core/index.d.ts +4 -0
- package/dist_ts/mail/core/index.js +6 -0
- package/dist_ts/mail/delivery/classes.delivery.queue.d.ts +163 -0
- package/dist_ts/mail/delivery/classes.delivery.queue.js +485 -0
- package/dist_ts/mail/delivery/classes.delivery.system.d.ts +186 -0
- package/dist_ts/mail/delivery/classes.delivery.system.js +846 -0
- package/dist_ts/mail/delivery/classes.emailsendjob.d.ts +84 -0
- package/dist_ts/mail/delivery/classes.emailsendjob.js +362 -0
- package/dist_ts/mail/delivery/classes.emailsignjob.d.ts +18 -0
- package/dist_ts/mail/delivery/classes.emailsignjob.js +44 -0
- package/dist_ts/mail/delivery/classes.mta.config.d.ts +22 -0
- package/dist_ts/mail/delivery/classes.mta.config.js +51 -0
- package/dist_ts/mail/delivery/classes.ratelimiter.d.ts +98 -0
- package/dist_ts/mail/delivery/classes.ratelimiter.js +205 -0
- package/dist_ts/mail/delivery/classes.smtp.client.legacy.d.ts +275 -0
- package/dist_ts/mail/delivery/classes.smtp.client.legacy.js +973 -0
- package/dist_ts/mail/delivery/classes.unified.rate.limiter.d.ts +200 -0
- package/dist_ts/mail/delivery/classes.unified.rate.limiter.js +817 -0
- package/dist_ts/mail/delivery/index.d.ts +12 -0
- package/dist_ts/mail/delivery/index.js +18 -0
- package/dist_ts/mail/delivery/interfaces.d.ts +243 -0
- package/dist_ts/mail/delivery/interfaces.js +17 -0
- package/dist_ts/mail/delivery/smtpclient/auth-handler.d.ts +43 -0
- package/dist_ts/mail/delivery/smtpclient/auth-handler.js +188 -0
- package/dist_ts/mail/delivery/smtpclient/command-handler.d.ts +67 -0
- package/dist_ts/mail/delivery/smtpclient/command-handler.js +276 -0
- package/dist_ts/mail/delivery/smtpclient/connection-manager.d.ts +48 -0
- package/dist_ts/mail/delivery/smtpclient/connection-manager.js +238 -0
- package/dist_ts/mail/delivery/smtpclient/constants.d.ts +129 -0
- package/dist_ts/mail/delivery/smtpclient/constants.js +135 -0
- package/dist_ts/mail/delivery/smtpclient/create-client.d.ts +22 -0
- package/dist_ts/mail/delivery/smtpclient/create-client.js +86 -0
- package/dist_ts/mail/delivery/smtpclient/error-handler.d.ts +28 -0
- package/dist_ts/mail/delivery/smtpclient/error-handler.js +110 -0
- package/dist_ts/mail/delivery/smtpclient/index.d.ts +16 -0
- package/dist_ts/mail/delivery/smtpclient/index.js +21 -0
- package/dist_ts/mail/delivery/smtpclient/interfaces.d.ts +183 -0
- package/dist_ts/mail/delivery/smtpclient/interfaces.js +19 -0
- package/dist_ts/mail/delivery/smtpclient/smtp-client.d.ts +58 -0
- package/dist_ts/mail/delivery/smtpclient/smtp-client.js +279 -0
- package/dist_ts/mail/delivery/smtpclient/tls-handler.d.ts +33 -0
- package/dist_ts/mail/delivery/smtpclient/tls-handler.js +202 -0
- package/dist_ts/mail/delivery/smtpclient/utils/helpers.d.ts +77 -0
- package/dist_ts/mail/delivery/smtpclient/utils/helpers.js +196 -0
- package/dist_ts/mail/delivery/smtpclient/utils/logging.d.ts +46 -0
- package/dist_ts/mail/delivery/smtpclient/utils/logging.js +153 -0
- package/dist_ts/mail/delivery/smtpclient/utils/validation.d.ts +38 -0
- package/dist_ts/mail/delivery/smtpclient/utils/validation.js +139 -0
- package/dist_ts/mail/delivery/smtpserver/certificate-utils.d.ts +45 -0
- package/dist_ts/mail/delivery/smtpserver/certificate-utils.js +345 -0
- package/dist_ts/mail/delivery/smtpserver/command-handler.d.ts +156 -0
- package/dist_ts/mail/delivery/smtpserver/command-handler.js +1159 -0
- package/dist_ts/mail/delivery/smtpserver/connection-manager.d.ts +159 -0
- package/dist_ts/mail/delivery/smtpserver/connection-manager.js +894 -0
- package/dist_ts/mail/delivery/smtpserver/constants.d.ts +130 -0
- package/dist_ts/mail/delivery/smtpserver/constants.js +162 -0
- package/dist_ts/mail/delivery/smtpserver/create-server.d.ts +14 -0
- package/dist_ts/mail/delivery/smtpserver/create-server.js +28 -0
- package/dist_ts/mail/delivery/smtpserver/data-handler.d.ts +123 -0
- package/dist_ts/mail/delivery/smtpserver/data-handler.js +1148 -0
- package/dist_ts/mail/delivery/smtpserver/index.d.ts +20 -0
- package/dist_ts/mail/delivery/smtpserver/index.js +27 -0
- package/dist_ts/mail/delivery/smtpserver/interfaces.d.ts +530 -0
- package/dist_ts/mail/delivery/smtpserver/interfaces.js +10 -0
- package/dist_ts/mail/delivery/smtpserver/secure-server.d.ts +15 -0
- package/dist_ts/mail/delivery/smtpserver/secure-server.js +79 -0
- package/dist_ts/mail/delivery/smtpserver/security-handler.d.ts +86 -0
- package/dist_ts/mail/delivery/smtpserver/security-handler.js +234 -0
- package/dist_ts/mail/delivery/smtpserver/session-manager.d.ts +140 -0
- package/dist_ts/mail/delivery/smtpserver/session-manager.js +469 -0
- package/dist_ts/mail/delivery/smtpserver/smtp-server.d.ts +137 -0
- package/dist_ts/mail/delivery/smtpserver/smtp-server.js +666 -0
- package/dist_ts/mail/delivery/smtpserver/starttls-handler.d.ts +21 -0
- package/dist_ts/mail/delivery/smtpserver/starttls-handler.js +207 -0
- package/dist_ts/mail/delivery/smtpserver/tls-handler.d.ts +66 -0
- package/dist_ts/mail/delivery/smtpserver/tls-handler.js +261 -0
- package/dist_ts/mail/delivery/smtpserver/utils/adaptive-logging.d.ts +117 -0
- package/dist_ts/mail/delivery/smtpserver/utils/adaptive-logging.js +411 -0
- package/dist_ts/mail/delivery/smtpserver/utils/helpers.d.ts +78 -0
- package/dist_ts/mail/delivery/smtpserver/utils/helpers.js +208 -0
- package/dist_ts/mail/delivery/smtpserver/utils/logging.d.ts +106 -0
- package/dist_ts/mail/delivery/smtpserver/utils/logging.js +181 -0
- package/dist_ts/mail/delivery/smtpserver/utils/validation.d.ts +69 -0
- package/dist_ts/mail/delivery/smtpserver/utils/validation.js +360 -0
- package/dist_ts/mail/index.d.ts +8 -0
- package/dist_ts/mail/index.js +13 -0
- package/dist_ts/mail/routing/classes.dns.manager.d.ts +65 -0
- package/dist_ts/mail/routing/classes.dns.manager.js +413 -0
- package/dist_ts/mail/routing/classes.dnsmanager.d.ts +165 -0
- package/dist_ts/mail/routing/classes.dnsmanager.js +430 -0
- package/dist_ts/mail/routing/classes.domain.registry.d.ts +54 -0
- package/dist_ts/mail/routing/classes.domain.registry.js +118 -0
- package/dist_ts/mail/routing/classes.email.config.d.ts +64 -0
- package/dist_ts/mail/routing/classes.email.config.js +2 -0
- package/dist_ts/mail/routing/classes.email.router.d.ts +171 -0
- package/dist_ts/mail/routing/classes.email.router.js +491 -0
- package/dist_ts/mail/routing/classes.unified.email.server.d.ts +426 -0
- package/dist_ts/mail/routing/classes.unified.email.server.js +1454 -0
- package/dist_ts/mail/routing/index.d.ts +5 -0
- package/dist_ts/mail/routing/index.js +7 -0
- package/dist_ts/mail/routing/interfaces.d.ts +187 -0
- package/dist_ts/mail/routing/interfaces.js +2 -0
- package/dist_ts/mail/security/classes.dkimcreator.d.ts +68 -0
- package/dist_ts/mail/security/classes.dkimcreator.js +346 -0
- package/dist_ts/mail/security/classes.dkimverifier.d.ts +46 -0
- package/dist_ts/mail/security/classes.dkimverifier.js +317 -0
- package/dist_ts/mail/security/classes.dmarcverifier.d.ts +123 -0
- package/dist_ts/mail/security/classes.dmarcverifier.js +365 -0
- package/dist_ts/mail/security/classes.spfverifier.d.ts +103 -0
- package/dist_ts/mail/security/classes.spfverifier.js +492 -0
- package/dist_ts/mail/security/index.d.ts +4 -0
- package/dist_ts/mail/security/index.js +6 -0
- package/dist_ts/opsserver/classes.opsserver.d.ts +14 -0
- package/dist_ts/opsserver/classes.opsserver.js +37 -0
- package/dist_ts/opsserver/index.d.ts +1 -0
- package/dist_ts/opsserver/index.js +2 -0
- package/dist_ts/paths.d.ts +14 -0
- package/dist_ts/paths.js +39 -0
- package/dist_ts/plugins.d.ts +43 -0
- package/dist_ts/plugins.js +50 -0
- package/dist_ts/security/classes.contentscanner.d.ts +160 -0
- package/dist_ts/security/classes.contentscanner.js +634 -0
- package/dist_ts/security/classes.ipreputationchecker.d.ts +150 -0
- package/dist_ts/security/classes.ipreputationchecker.js +508 -0
- package/dist_ts/security/classes.securitylogger.d.ts +140 -0
- package/dist_ts/security/classes.securitylogger.js +232 -0
- package/dist_ts/security/index.d.ts +3 -0
- package/dist_ts/security/index.js +4 -0
- package/dist_ts/sms/classes.smsservice.d.ts +15 -0
- package/dist_ts/sms/classes.smsservice.js +72 -0
- package/dist_ts/sms/config/sms.config.d.ts +93 -0
- package/dist_ts/sms/config/sms.config.js +2 -0
- package/dist_ts/sms/config/sms.schema.d.ts +5 -0
- package/dist_ts/sms/config/sms.schema.js +121 -0
- package/dist_ts/sms/index.d.ts +1 -0
- package/dist_ts/sms/index.js +2 -0
- package/dist_ts/storage/classes.storagemanager.d.ts +82 -0
- package/dist_ts/storage/classes.storagemanager.js +341 -0
- package/dist_ts/storage/index.d.ts +1 -0
- package/dist_ts/storage/index.js +3 -0
- package/dist_ts/ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/ts/00_commitinfo_data.js +9 -0
- package/dist_ts/ts/classes.dcrouter.d.ts +238 -0
- package/dist_ts/ts/classes.dcrouter.js +1008 -0
- package/dist_ts/ts/config/index.d.ts +1 -0
- package/dist_ts/ts/config/index.js +3 -0
- package/dist_ts/ts/config/validator.d.ts +104 -0
- package/dist_ts/ts/config/validator.js +152 -0
- package/dist_ts/ts/deliverability/classes.ipwarmupmanager.d.ts +253 -0
- package/dist_ts/ts/deliverability/classes.ipwarmupmanager.js +639 -0
- package/dist_ts/ts/deliverability/classes.senderreputationmonitor.d.ts +300 -0
- package/dist_ts/ts/deliverability/classes.senderreputationmonitor.js +961 -0
- package/dist_ts/ts/deliverability/index.d.ts +2 -0
- package/dist_ts/ts/deliverability/index.js +3 -0
- package/dist_ts/ts/errors/base.errors.d.ts +224 -0
- package/dist_ts/ts/errors/base.errors.js +310 -0
- package/dist_ts/ts/errors/email.errors.d.ts +175 -0
- package/dist_ts/ts/errors/email.errors.js +265 -0
- package/dist_ts/ts/errors/error-handler.d.ts +98 -0
- package/dist_ts/ts/errors/error-handler.js +282 -0
- package/dist_ts/ts/errors/error.codes.d.ts +115 -0
- package/dist_ts/ts/errors/error.codes.js +136 -0
- package/dist_ts/ts/errors/index.d.ts +56 -0
- package/dist_ts/ts/errors/index.js +138 -0
- package/dist_ts/ts/errors/mta.errors.d.ts +259 -0
- package/dist_ts/ts/errors/mta.errors.js +472 -0
- package/dist_ts/ts/errors/reputation.errors.d.ts +183 -0
- package/dist_ts/ts/errors/reputation.errors.js +292 -0
- package/dist_ts/ts/index.d.ts +4 -0
- package/dist_ts/ts/index.js +6 -0
- package/dist_ts/ts/logger.d.ts +17 -0
- package/dist_ts/ts/logger.js +77 -0
- package/dist_ts/ts/mail/core/classes.bouncemanager.d.ts +200 -0
- package/dist_ts/ts/mail/core/classes.bouncemanager.js +778 -0
- package/dist_ts/ts/mail/core/classes.email.d.ts +291 -0
- package/dist_ts/ts/mail/core/classes.email.js +780 -0
- package/dist_ts/ts/mail/core/classes.emailvalidator.d.ts +61 -0
- package/dist_ts/ts/mail/core/classes.emailvalidator.js +182 -0
- package/dist_ts/ts/mail/core/classes.templatemanager.d.ts +95 -0
- package/dist_ts/ts/mail/core/classes.templatemanager.js +239 -0
- package/dist_ts/ts/mail/core/index.d.ts +4 -0
- package/dist_ts/ts/mail/core/index.js +6 -0
- package/dist_ts/ts/mail/delivery/classes.delivery.queue.d.ts +163 -0
- package/dist_ts/ts/mail/delivery/classes.delivery.queue.js +485 -0
- package/dist_ts/ts/mail/delivery/classes.delivery.system.d.ts +186 -0
- package/dist_ts/ts/mail/delivery/classes.delivery.system.js +846 -0
- package/dist_ts/ts/mail/delivery/classes.emailsendjob.d.ts +84 -0
- package/dist_ts/ts/mail/delivery/classes.emailsendjob.js +362 -0
- package/dist_ts/ts/mail/delivery/classes.emailsignjob.d.ts +18 -0
- package/dist_ts/ts/mail/delivery/classes.emailsignjob.js +44 -0
- package/dist_ts/ts/mail/delivery/classes.mta.config.d.ts +22 -0
- package/dist_ts/ts/mail/delivery/classes.mta.config.js +51 -0
- package/dist_ts/ts/mail/delivery/classes.ratelimiter.d.ts +98 -0
- package/dist_ts/ts/mail/delivery/classes.ratelimiter.js +205 -0
- package/dist_ts/ts/mail/delivery/classes.smtp.client.legacy.d.ts +275 -0
- package/dist_ts/ts/mail/delivery/classes.smtp.client.legacy.js +973 -0
- package/dist_ts/ts/mail/delivery/classes.unified.rate.limiter.d.ts +200 -0
- package/dist_ts/ts/mail/delivery/classes.unified.rate.limiter.js +817 -0
- package/dist_ts/ts/mail/delivery/index.d.ts +12 -0
- package/dist_ts/ts/mail/delivery/index.js +18 -0
- package/dist_ts/ts/mail/delivery/interfaces.d.ts +243 -0
- package/dist_ts/ts/mail/delivery/interfaces.js +17 -0
- package/dist_ts/ts/mail/delivery/smtpclient/auth-handler.d.ts +43 -0
- package/dist_ts/ts/mail/delivery/smtpclient/auth-handler.js +188 -0
- package/dist_ts/ts/mail/delivery/smtpclient/command-handler.d.ts +67 -0
- package/dist_ts/ts/mail/delivery/smtpclient/command-handler.js +276 -0
- package/dist_ts/ts/mail/delivery/smtpclient/connection-manager.d.ts +48 -0
- package/dist_ts/ts/mail/delivery/smtpclient/connection-manager.js +238 -0
- package/dist_ts/ts/mail/delivery/smtpclient/constants.d.ts +129 -0
- package/dist_ts/ts/mail/delivery/smtpclient/constants.js +135 -0
- package/dist_ts/ts/mail/delivery/smtpclient/create-client.d.ts +22 -0
- package/dist_ts/ts/mail/delivery/smtpclient/create-client.js +86 -0
- package/dist_ts/ts/mail/delivery/smtpclient/error-handler.d.ts +28 -0
- package/dist_ts/ts/mail/delivery/smtpclient/error-handler.js +110 -0
- package/dist_ts/ts/mail/delivery/smtpclient/index.d.ts +16 -0
- package/dist_ts/ts/mail/delivery/smtpclient/index.js +21 -0
- package/dist_ts/ts/mail/delivery/smtpclient/interfaces.d.ts +183 -0
- package/dist_ts/ts/mail/delivery/smtpclient/interfaces.js +19 -0
- package/dist_ts/ts/mail/delivery/smtpclient/smtp-client.d.ts +58 -0
- package/dist_ts/ts/mail/delivery/smtpclient/smtp-client.js +279 -0
- package/dist_ts/ts/mail/delivery/smtpclient/tls-handler.d.ts +33 -0
- package/dist_ts/ts/mail/delivery/smtpclient/tls-handler.js +202 -0
- package/dist_ts/ts/mail/delivery/smtpclient/utils/helpers.d.ts +77 -0
- package/dist_ts/ts/mail/delivery/smtpclient/utils/helpers.js +196 -0
- package/dist_ts/ts/mail/delivery/smtpclient/utils/logging.d.ts +46 -0
- package/dist_ts/ts/mail/delivery/smtpclient/utils/logging.js +153 -0
- package/dist_ts/ts/mail/delivery/smtpclient/utils/validation.d.ts +38 -0
- package/dist_ts/ts/mail/delivery/smtpclient/utils/validation.js +139 -0
- package/dist_ts/ts/mail/delivery/smtpserver/certificate-utils.d.ts +45 -0
- package/dist_ts/ts/mail/delivery/smtpserver/certificate-utils.js +345 -0
- package/dist_ts/ts/mail/delivery/smtpserver/command-handler.d.ts +156 -0
- package/dist_ts/ts/mail/delivery/smtpserver/command-handler.js +1159 -0
- package/dist_ts/ts/mail/delivery/smtpserver/connection-manager.d.ts +159 -0
- package/dist_ts/ts/mail/delivery/smtpserver/connection-manager.js +894 -0
- package/dist_ts/ts/mail/delivery/smtpserver/constants.d.ts +130 -0
- package/dist_ts/ts/mail/delivery/smtpserver/constants.js +162 -0
- package/dist_ts/ts/mail/delivery/smtpserver/create-server.d.ts +14 -0
- package/dist_ts/ts/mail/delivery/smtpserver/create-server.js +28 -0
- package/dist_ts/ts/mail/delivery/smtpserver/data-handler.d.ts +123 -0
- package/dist_ts/ts/mail/delivery/smtpserver/data-handler.js +1148 -0
- package/dist_ts/ts/mail/delivery/smtpserver/index.d.ts +20 -0
- package/dist_ts/ts/mail/delivery/smtpserver/index.js +27 -0
- package/dist_ts/ts/mail/delivery/smtpserver/interfaces.d.ts +530 -0
- package/dist_ts/ts/mail/delivery/smtpserver/interfaces.js +10 -0
- package/dist_ts/ts/mail/delivery/smtpserver/secure-server.d.ts +15 -0
- package/dist_ts/ts/mail/delivery/smtpserver/secure-server.js +79 -0
- package/dist_ts/ts/mail/delivery/smtpserver/security-handler.d.ts +86 -0
- package/dist_ts/ts/mail/delivery/smtpserver/security-handler.js +234 -0
- package/dist_ts/ts/mail/delivery/smtpserver/session-manager.d.ts +140 -0
- package/dist_ts/ts/mail/delivery/smtpserver/session-manager.js +469 -0
- package/dist_ts/ts/mail/delivery/smtpserver/smtp-server.d.ts +137 -0
- package/dist_ts/ts/mail/delivery/smtpserver/smtp-server.js +666 -0
- package/dist_ts/ts/mail/delivery/smtpserver/starttls-handler.d.ts +21 -0
- package/dist_ts/ts/mail/delivery/smtpserver/starttls-handler.js +207 -0
- package/dist_ts/ts/mail/delivery/smtpserver/tls-handler.d.ts +66 -0
- package/dist_ts/ts/mail/delivery/smtpserver/tls-handler.js +261 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/adaptive-logging.d.ts +117 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/adaptive-logging.js +411 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/helpers.d.ts +78 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/helpers.js +208 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/logging.d.ts +106 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/logging.js +181 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/validation.d.ts +69 -0
- package/dist_ts/ts/mail/delivery/smtpserver/utils/validation.js +360 -0
- package/dist_ts/ts/mail/index.d.ts +8 -0
- package/dist_ts/ts/mail/index.js +13 -0
- package/dist_ts/ts/mail/routing/classes.dns.manager.d.ts +65 -0
- package/dist_ts/ts/mail/routing/classes.dns.manager.js +413 -0
- package/dist_ts/ts/mail/routing/classes.dnsmanager.d.ts +165 -0
- package/dist_ts/ts/mail/routing/classes.dnsmanager.js +430 -0
- package/dist_ts/ts/mail/routing/classes.domain.registry.d.ts +54 -0
- package/dist_ts/ts/mail/routing/classes.domain.registry.js +118 -0
- package/dist_ts/ts/mail/routing/classes.email.config.d.ts +64 -0
- package/dist_ts/ts/mail/routing/classes.email.config.js +2 -0
- package/dist_ts/ts/mail/routing/classes.email.router.d.ts +171 -0
- package/dist_ts/ts/mail/routing/classes.email.router.js +491 -0
- package/dist_ts/ts/mail/routing/classes.unified.email.server.d.ts +426 -0
- package/dist_ts/ts/mail/routing/classes.unified.email.server.js +1454 -0
- package/dist_ts/ts/mail/routing/index.d.ts +5 -0
- package/dist_ts/ts/mail/routing/index.js +7 -0
- package/dist_ts/ts/mail/routing/interfaces.d.ts +187 -0
- package/dist_ts/ts/mail/routing/interfaces.js +2 -0
- package/dist_ts/ts/mail/security/classes.dkimcreator.d.ts +68 -0
- package/dist_ts/ts/mail/security/classes.dkimcreator.js +346 -0
- package/dist_ts/ts/mail/security/classes.dkimverifier.d.ts +46 -0
- package/dist_ts/ts/mail/security/classes.dkimverifier.js +317 -0
- package/dist_ts/ts/mail/security/classes.dmarcverifier.d.ts +123 -0
- package/dist_ts/ts/mail/security/classes.dmarcverifier.js +365 -0
- package/dist_ts/ts/mail/security/classes.spfverifier.d.ts +103 -0
- package/dist_ts/ts/mail/security/classes.spfverifier.js +492 -0
- package/dist_ts/ts/mail/security/index.d.ts +4 -0
- package/dist_ts/ts/mail/security/index.js +6 -0
- package/dist_ts/ts/opsserver/classes.opsserver.d.ts +20 -0
- package/dist_ts/ts/opsserver/classes.opsserver.js +44 -0
- package/dist_ts/ts/opsserver/handlers/admin.handler.d.ts +31 -0
- package/dist_ts/ts/opsserver/handlers/admin.handler.js +177 -0
- package/dist_ts/ts/opsserver/handlers/config.handler.d.ts +10 -0
- package/dist_ts/ts/opsserver/handlers/config.handler.js +100 -0
- package/dist_ts/ts/opsserver/handlers/index.d.ts +5 -0
- package/dist_ts/ts/opsserver/handlers/index.js +6 -0
- package/dist_ts/ts/opsserver/handlers/logs.handler.d.ts +10 -0
- package/dist_ts/ts/opsserver/handlers/logs.handler.js +121 -0
- package/dist_ts/ts/opsserver/handlers/security.handler.d.ts +11 -0
- package/dist_ts/ts/opsserver/handlers/security.handler.js +118 -0
- package/dist_ts/ts/opsserver/handlers/stats.handler.d.ts +13 -0
- package/dist_ts/ts/opsserver/handlers/stats.handler.js +233 -0
- package/dist_ts/ts/opsserver/helpers/guards.d.ts +25 -0
- package/dist_ts/ts/opsserver/helpers/guards.js +41 -0
- package/dist_ts/ts/opsserver/index.d.ts +1 -0
- package/dist_ts/ts/opsserver/index.js +2 -0
- package/dist_ts/ts/paths.d.ts +14 -0
- package/dist_ts/ts/paths.js +39 -0
- package/dist_ts/ts/plugins.d.ts +46 -0
- package/dist_ts/ts/plugins.js +53 -0
- package/dist_ts/ts/security/classes.contentscanner.d.ts +160 -0
- package/dist_ts/ts/security/classes.contentscanner.js +634 -0
- package/dist_ts/ts/security/classes.ipreputationchecker.d.ts +150 -0
- package/dist_ts/ts/security/classes.ipreputationchecker.js +508 -0
- package/dist_ts/ts/security/classes.securitylogger.d.ts +140 -0
- package/dist_ts/ts/security/classes.securitylogger.js +232 -0
- package/dist_ts/ts/security/index.d.ts +3 -0
- package/dist_ts/ts/security/index.js +4 -0
- package/dist_ts/ts/sms/classes.smsservice.d.ts +15 -0
- package/dist_ts/ts/sms/classes.smsservice.js +72 -0
- package/dist_ts/ts/sms/config/sms.config.d.ts +93 -0
- package/dist_ts/ts/sms/config/sms.config.js +2 -0
- package/dist_ts/ts/sms/config/sms.schema.d.ts +5 -0
- package/dist_ts/ts/sms/config/sms.schema.js +121 -0
- package/dist_ts/ts/sms/index.d.ts +1 -0
- package/dist_ts/ts/sms/index.js +2 -0
- package/dist_ts/ts/storage/classes.storagemanager.d.ts +82 -0
- package/dist_ts/ts/storage/classes.storagemanager.js +341 -0
- package/dist_ts/ts/storage/index.d.ts +1 -0
- package/dist_ts/ts/storage/index.js +3 -0
- package/dist_ts/ts_interfaces/data/auth.d.ts +8 -0
- package/dist_ts/ts_interfaces/data/auth.js +2 -0
- package/dist_ts/ts_interfaces/data/index.d.ts +2 -0
- package/dist_ts/ts_interfaces/data/index.js +3 -0
- package/dist_ts/ts_interfaces/data/stats.d.ts +93 -0
- package/dist_ts/ts_interfaces/data/stats.js +2 -0
- package/dist_ts/ts_interfaces/index.d.ts +5 -0
- package/dist_ts/ts_interfaces/index.js +8 -0
- package/dist_ts/ts_interfaces/plugins.d.ts +2 -0
- package/dist_ts/ts_interfaces/plugins.js +4 -0
- package/dist_ts/ts_interfaces/requests/admin.d.ts +31 -0
- package/dist_ts/ts_interfaces/requests/admin.js +3 -0
- package/dist_ts/ts_interfaces/requests/config.d.ts +25 -0
- package/dist_ts/ts_interfaces/requests/config.js +3 -0
- package/dist_ts/ts_interfaces/requests/index.d.ts +4 -0
- package/dist_ts/ts_interfaces/requests/index.js +5 -0
- package/dist_ts/ts_interfaces/requests/logs.d.ts +34 -0
- package/dist_ts/ts_interfaces/requests/logs.js +4 -0
- package/dist_ts/ts_interfaces/requests/stats.d.ts +131 -0
- package/dist_ts/ts_interfaces/requests/stats.js +4 -0
- package/html/index.html +121 -0
- package/npmextra.json +45 -0
- package/package.json +83 -0
- package/readme.hints.md +906 -0
- package/readme.md +1253 -0
- package/readme.opsserver.md +351 -0
- package/test/helpers/server.loader.ts +347 -0
- package/test/helpers/smtp.client.ts +209 -0
- package/test/helpers/utils.ts +311 -0
- package/test/readme.md +443 -0
- package/test/suite/smtpclient_commands/test.ccmd-01.ehlo-helo-sending.ts +168 -0
- package/test/suite/smtpclient_commands/test.ccmd-02.mail-from-parameters.ts +277 -0
- package/test/suite/smtpclient_commands/test.ccmd-03.rcpt-to-multiple.ts +283 -0
- package/test/suite/smtpclient_commands/test.ccmd-04.data-transmission.ts +274 -0
- package/test/suite/smtpclient_commands/test.ccmd-05.auth-mechanisms.ts +306 -0
- package/test/suite/smtpclient_commands/test.ccmd-06.command-pipelining.ts +233 -0
- package/test/suite/smtpclient_commands/test.ccmd-07.response-parsing.ts +243 -0
- package/test/suite/smtpclient_commands/test.ccmd-08.rset-command.ts +333 -0
- package/test/suite/smtpclient_commands/test.ccmd-09.noop-command.ts +339 -0
- package/test/suite/smtpclient_commands/test.ccmd-10.vrfy-expn.ts +457 -0
- package/test/suite/smtpclient_commands/test.ccmd-11.help-command.ts +409 -0
- package/test/suite/smtpclient_connection/test.ccm-01.basic-tcp-connection.ts +150 -0
- package/test/suite/smtpclient_connection/test.ccm-02.tls-connection.ts +140 -0
- package/test/suite/smtpclient_connection/test.ccm-03.starttls-upgrade.ts +208 -0
- package/test/suite/smtpclient_connection/test.ccm-04.connection-pooling.ts +250 -0
- package/test/suite/smtpclient_connection/test.ccm-05.connection-reuse.ts +288 -0
- package/test/suite/smtpclient_connection/test.ccm-06.connection-timeout.ts +267 -0
- package/test/suite/smtpclient_connection/test.ccm-07.automatic-reconnection.ts +324 -0
- package/test/suite/smtpclient_connection/test.ccm-08.dns-resolution.ts +139 -0
- package/test/suite/smtpclient_connection/test.ccm-09.ipv6-dual-stack.ts +167 -0
- package/test/suite/smtpclient_connection/test.ccm-10.proxy-support.ts +305 -0
- package/test/suite/smtpclient_connection/test.ccm-11.keepalive.ts +299 -0
- package/test/suite/smtpclient_edge-cases/test.cedge-01.unusual-server-responses.ts +529 -0
- package/test/suite/smtpclient_edge-cases/test.cedge-02.malformed-commands.ts +438 -0
- package/test/suite/smtpclient_edge-cases/test.cedge-03.protocol-violations.ts +446 -0
- package/test/suite/smtpclient_edge-cases/test.cedge-04.resource-constraints.ts +530 -0
- package/test/suite/smtpclient_edge-cases/test.cedge-05.encoding-issues.ts +145 -0
- package/test/suite/smtpclient_edge-cases/test.cedge-06.large-headers.ts +180 -0
- package/test/suite/smtpclient_edge-cases/test.cedge-07.concurrent-operations.ts +204 -0
- package/test/suite/smtpclient_email-composition/test.cep-01.basic-headers.ts +245 -0
- package/test/suite/smtpclient_email-composition/test.cep-02.mime-multipart.ts +321 -0
- package/test/suite/smtpclient_email-composition/test.cep-03.attachment-encoding.ts +334 -0
- package/test/suite/smtpclient_email-composition/test.cep-04.bcc-handling.ts +187 -0
- package/test/suite/smtpclient_email-composition/test.cep-05.reply-to-return-path.ts +277 -0
- package/test/suite/smtpclient_email-composition/test.cep-06.utf8-international.ts +235 -0
- package/test/suite/smtpclient_email-composition/test.cep-07.html-inline-images.ts +489 -0
- package/test/suite/smtpclient_email-composition/test.cep-08.custom-headers.ts +293 -0
- package/test/suite/smtpclient_email-composition/test.cep-09.priority-importance.ts +314 -0
- package/test/suite/smtpclient_email-composition/test.cep-10.receipts-dsn.ts +411 -0
- package/test/suite/smtpclient_error-handling/test.cerr-01.4xx-errors.ts +232 -0
- package/test/suite/smtpclient_error-handling/test.cerr-02.5xx-errors.ts +309 -0
- package/test/suite/smtpclient_error-handling/test.cerr-03.network-failures.ts +299 -0
- package/test/suite/smtpclient_error-handling/test.cerr-04.greylisting-handling.ts +255 -0
- package/test/suite/smtpclient_error-handling/test.cerr-05.quota-exceeded.ts +273 -0
- package/test/suite/smtpclient_error-handling/test.cerr-06.invalid-recipients.ts +320 -0
- package/test/suite/smtpclient_error-handling/test.cerr-07.message-size-limits.ts +320 -0
- package/test/suite/smtpclient_error-handling/test.cerr-08.rate-limiting.ts +261 -0
- package/test/suite/smtpclient_error-handling/test.cerr-09.connection-pool-errors.ts +299 -0
- package/test/suite/smtpclient_error-handling/test.cerr-10.partial-failure.ts +373 -0
- package/test/suite/smtpclient_performance/test.cperf-01.bulk-sending.ts +332 -0
- package/test/suite/smtpclient_performance/test.cperf-02.message-throughput.ts +304 -0
- package/test/suite/smtpclient_performance/test.cperf-03.memory-usage.ts +332 -0
- package/test/suite/smtpclient_performance/test.cperf-04.cpu-utilization.ts +373 -0
- package/test/suite/smtpclient_performance/test.cperf-05.network-efficiency.ts +181 -0
- package/test/suite/smtpclient_performance/test.cperf-06.caching-strategies.ts +190 -0
- package/test/suite/smtpclient_performance/test.cperf-07.queue-management.ts +171 -0
- package/test/suite/smtpclient_performance/test.cperf-08.dns-caching.ts +50 -0
- package/test/suite/smtpclient_reliability/test.crel-01.reconnection-logic.ts +305 -0
- package/test/suite/smtpclient_reliability/test.crel-02.network-interruption.ts +207 -0
- package/test/suite/smtpclient_reliability/test.crel-03.queue-persistence.ts +469 -0
- package/test/suite/smtpclient_reliability/test.crel-04.crash-recovery.ts +520 -0
- package/test/suite/smtpclient_reliability/test.crel-05.memory-leaks.ts +503 -0
- package/test/suite/smtpclient_reliability/test.crel-06.concurrency-safety.ts +558 -0
- package/test/suite/smtpclient_reliability/test.crel-07.resource-cleanup.ts +52 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-01.rfc5321-client.ts +283 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-02.esmtp-compliance.ts +77 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-03.command-syntax.ts +67 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-04.response-codes.ts +54 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-05.state-machine.ts +703 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-06.protocol-negotiation.ts +688 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-07.interoperability.ts +728 -0
- package/test/suite/smtpclient_rfc-compliance/test.crfc-08.smtp-extensions.ts +656 -0
- package/test/suite/smtpclient_security/test.csec-01.tls-verification.ts +88 -0
- package/test/suite/smtpclient_security/test.csec-02.oauth2-authentication.ts +132 -0
- package/test/suite/smtpclient_security/test.csec-03.dkim-signing.ts +138 -0
- package/test/suite/smtpclient_security/test.csec-04.spf-compliance.ts +163 -0
- package/test/suite/smtpclient_security/test.csec-05.dmarc-policy.ts +200 -0
- package/test/suite/smtpclient_security/test.csec-06.certificate-validation.ts +145 -0
- package/test/suite/smtpclient_security/test.csec-07.cipher-suites.ts +153 -0
- package/test/suite/smtpclient_security/test.csec-08.authentication-fallback.ts +154 -0
- package/test/suite/smtpclient_security/test.csec-09.relay-restrictions.ts +166 -0
- package/test/suite/smtpclient_security/test.csec-10.anti-spam-measures.ts +196 -0
- package/test/suite/smtpserver_commands/test.cmd-01.ehlo-command.ts +193 -0
- package/test/suite/smtpserver_commands/test.cmd-02.mail-from.ts +330 -0
- package/test/suite/smtpserver_commands/test.cmd-03.rcpt-to.ts +296 -0
- package/test/suite/smtpserver_commands/test.cmd-04.data-command.ts +395 -0
- package/test/suite/smtpserver_commands/test.cmd-05.noop-command.ts +320 -0
- package/test/suite/smtpserver_commands/test.cmd-06.rset-command.ts +399 -0
- package/test/suite/smtpserver_commands/test.cmd-07.vrfy-command.ts +391 -0
- package/test/suite/smtpserver_commands/test.cmd-08.expn-command.ts +450 -0
- package/test/suite/smtpserver_commands/test.cmd-09.size-extension.ts +465 -0
- package/test/suite/smtpserver_commands/test.cmd-10.help-command.ts +454 -0
- package/test/suite/smtpserver_commands/test.cmd-11.command-pipelining.ts +334 -0
- package/test/suite/smtpserver_commands/test.cmd-12.helo-command.ts +420 -0
- package/test/suite/smtpserver_commands/test.cmd-13.quit-command.ts +384 -0
- package/test/suite/smtpserver_connection/test.cm-01.tls-connection.ts +61 -0
- package/test/suite/smtpserver_connection/test.cm-02.multiple-connections.ts +112 -0
- package/test/suite/smtpserver_connection/test.cm-03.connection-timeout.ts +134 -0
- package/test/suite/smtpserver_connection/test.cm-04.connection-limits.ts +374 -0
- package/test/suite/smtpserver_connection/test.cm-05.connection-rejection.ts +296 -0
- package/test/suite/smtpserver_connection/test.cm-06.starttls-upgrade.ts +468 -0
- package/test/suite/smtpserver_connection/test.cm-07.abrupt-disconnection.ts +321 -0
- package/test/suite/smtpserver_connection/test.cm-08.tls-versions.ts +361 -0
- package/test/suite/smtpserver_connection/test.cm-09.tls-ciphers.ts +556 -0
- package/test/suite/smtpserver_connection/test.cm-10.plain-connection.ts +293 -0
- package/test/suite/smtpserver_connection/test.cm-11.keepalive.ts +382 -0
- package/test/suite/smtpserver_edge-cases/test.edge-01.very-large-email.ts +239 -0
- package/test/suite/smtpserver_edge-cases/test.edge-02.very-small-email.ts +389 -0
- package/test/suite/smtpserver_edge-cases/test.edge-03.invalid-character-handling.ts +479 -0
- package/test/suite/smtpserver_edge-cases/test.edge-04.empty-commands.ts +430 -0
- package/test/suite/smtpserver_edge-cases/test.edge-05.extremely-long-lines.ts +425 -0
- package/test/suite/smtpserver_edge-cases/test.edge-06.extremely-long-headers.ts +404 -0
- package/test/suite/smtpserver_edge-cases/test.edge-07.unusual-mime-types.ts +333 -0
- package/test/suite/smtpserver_edge-cases/test.edge-08.nested-mime-structures.ts +379 -0
- package/test/suite/smtpserver_email-processing/test.ep-01.basic-email-sending.ts +338 -0
- package/test/suite/smtpserver_email-processing/test.ep-02.invalid-email-addresses.ts +315 -0
- package/test/suite/smtpserver_email-processing/test.ep-03.multiple-recipients.ts +493 -0
- package/test/suite/smtpserver_email-processing/test.ep-04.large-email.ts +528 -0
- package/test/suite/smtpserver_email-processing/test.ep-05.mime-handling.ts +515 -0
- package/test/suite/smtpserver_email-processing/test.ep-06.attachment-handling.ts +629 -0
- package/test/suite/smtpserver_email-processing/test.ep-07.special-character-handling.ts +462 -0
- package/test/suite/smtpserver_email-processing/test.ep-08.email-routing.ts +527 -0
- package/test/suite/smtpserver_email-processing/test.ep-09.delivery-status-notifications.ts +486 -0
- package/test/suite/smtpserver_error-handling/test.err-01.syntax-errors.ts +475 -0
- package/test/suite/smtpserver_error-handling/test.err-02.invalid-sequence.ts +450 -0
- package/test/suite/smtpserver_error-handling/test.err-03.temporary-failures.ts +453 -0
- package/test/suite/smtpserver_error-handling/test.err-04.permanent-failures.ts +325 -0
- package/test/suite/smtpserver_error-handling/test.err-05.resource-exhaustion.ts +302 -0
- package/test/suite/smtpserver_error-handling/test.err-06.malformed-mime.ts +374 -0
- package/test/suite/smtpserver_error-handling/test.err-07.exception-handling.ts +333 -0
- package/test/suite/smtpserver_error-handling/test.err-08.error-logging.ts +324 -0
- package/test/suite/smtpserver_performance/test.perf-01.throughput.ts +183 -0
- package/test/suite/smtpserver_performance/test.perf-02.concurrency.ts +388 -0
- package/test/suite/smtpserver_performance/test.perf-03.cpu-utilization.ts +245 -0
- package/test/suite/smtpserver_performance/test.perf-04.memory-usage.ts +238 -0
- package/test/suite/smtpserver_performance/test.perf-05.connection-processing-time.ts +363 -0
- package/test/suite/smtpserver_performance/test.perf-06.message-processing-time.ts +252 -0
- package/test/suite/smtpserver_performance/test.perf-07.resource-cleanup.ts +317 -0
- package/test/suite/smtpserver_reliability/test.rel-01.long-running-operation.ts +344 -0
- package/test/suite/smtpserver_reliability/test.rel-02.restart-recovery.ts +328 -0
- package/test/suite/smtpserver_reliability/test.rel-03.resource-leak-detection.ts +394 -0
- package/test/suite/smtpserver_reliability/test.rel-04.error-recovery.ts +401 -0
- package/test/suite/smtpserver_reliability/test.rel-05.dns-resolution-failure.ts +335 -0
- package/test/suite/smtpserver_reliability/test.rel-06.network-interruption.ts +410 -0
- package/test/suite/smtpserver_rfc-compliance/test.rfc-01.rfc5321-compliance.ts +382 -0
- package/test/suite/smtpserver_rfc-compliance/test.rfc-02.rfc5322-compliance.ts +428 -0
- package/test/suite/smtpserver_rfc-compliance/test.rfc-03.rfc7208-spf-compliance.ts +330 -0
- package/test/suite/smtpserver_rfc-compliance/test.rfc-04.rfc6376-dkim-compliance.ts +450 -0
- package/test/suite/smtpserver_rfc-compliance/test.rfc-05.rfc7489-dmarc-compliance.ts +408 -0
- package/test/suite/smtpserver_rfc-compliance/test.rfc-06.rfc8314-tls-compliance.ts +366 -0
- package/test/suite/smtpserver_rfc-compliance/test.rfc-07.rfc3461-dsn-compliance.ts +399 -0
- package/test/suite/smtpserver_security/test.sec-01.authentication.ts +218 -0
- package/test/suite/smtpserver_security/test.sec-02.authorization.ts +286 -0
- package/test/suite/smtpserver_security/test.sec-03.dkim-processing.ts +414 -0
- package/test/suite/smtpserver_security/test.sec-04.spf-checking.ts +280 -0
- package/test/suite/smtpserver_security/test.sec-05.dmarc-policy.ts +374 -0
- package/test/suite/smtpserver_security/test.sec-06.ip-reputation.ts +303 -0
- package/test/suite/smtpserver_security/test.sec-07.content-scanning.ts +409 -0
- package/test/suite/smtpserver_security/test.sec-08.rate-limiting.ts +324 -0
- package/test/suite/smtpserver_security/test.sec-09.tls-certificate-validation.ts +312 -0
- package/test/suite/smtpserver_security/test.sec-10.header-injection-prevention.ts +332 -0
- package/test/suite/smtpserver_security/test.sec-11.bounce-management.ts +363 -0
- package/test/test.base.ts +65 -0
- package/test/test.bouncemanager.ts +196 -0
- package/test/test.config.md +175 -0
- package/test/test.contentscanner.ts +265 -0
- package/test/test.dcrouter.email.ts +201 -0
- package/test/test.deliverability.ts +55 -0
- package/test/test.dns-manager-creation.ts +141 -0
- package/test/test.dns-mode-switching.ts +257 -0
- package/test/test.dns-server-config.ts +140 -0
- package/test/test.dns-socket-handler.ts +169 -0
- package/test/test.dns-validation.ts +283 -0
- package/test/test.email-socket-handler.ts +228 -0
- package/test/test.email.integration.ts +377 -0
- package/test/test.email.router.ts +283 -0
- package/test/test.emailauth.ts +195 -0
- package/test/test.errors.ts +408 -0
- package/test/test.integration.storage.ts +313 -0
- package/test/test.integration.ts +75 -0
- package/test/test.ipreputationchecker.ts +179 -0
- package/test/test.ipwarmupmanager.ts +323 -0
- package/test/test.jwt-auth.ts +130 -0
- package/test/test.minimal.ts +66 -0
- package/test/test.opsserver-api.ts +83 -0
- package/test/test.protected-endpoint.ts +115 -0
- package/test/test.rate-limiting-integration.ts +236 -0
- package/test/test.ratelimiter.ts +141 -0
- package/test/test.reputationmonitor.ts +262 -0
- package/test/test.smartmail.ts +248 -0
- package/test/test.smtp.client.compatibility.ts +154 -0
- package/test/test.smtp.client.ts +191 -0
- package/test/test.smtp.server.ts +180 -0
- package/test/test.socket-handler-integration.ts +240 -0
- package/test/test.socket-handler-unit.ts +198 -0
- package/test/test.storagemanager.ts +289 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.dcrouter.ts +1310 -0
- package/ts/config/index.ts +2 -0
- package/ts/config/validator.ts +266 -0
- package/ts/deliverability/classes.ipwarmupmanager.ts +896 -0
- package/ts/deliverability/classes.senderreputationmonitor.ts +1244 -0
- package/ts/deliverability/index.ts +13 -0
- package/ts/errors/base.errors.ts +525 -0
- package/ts/errors/email.errors.ts +383 -0
- package/ts/errors/error-handler.ts +412 -0
- package/ts/errors/error.codes.ts +165 -0
- package/ts/errors/index.ts +195 -0
- package/ts/errors/mta.errors.ts +681 -0
- package/ts/errors/reputation.errors.ts +422 -0
- package/ts/index.ts +7 -0
- package/ts/logger.ts +91 -0
- package/ts/mail/core/classes.bouncemanager.ts +965 -0
- package/ts/mail/core/classes.email.ts +941 -0
- package/ts/mail/core/classes.emailvalidator.ts +239 -0
- package/ts/mail/core/classes.templatemanager.ts +320 -0
- package/ts/mail/core/index.ts +5 -0
- package/ts/mail/delivery/classes.delivery.queue.ts +645 -0
- package/ts/mail/delivery/classes.delivery.system.ts +1089 -0
- package/ts/mail/delivery/classes.emailsendjob.ts +447 -0
- package/ts/mail/delivery/classes.emailsendjob.ts.backup +691 -0
- package/ts/mail/delivery/classes.emailsignjob.ts +67 -0
- package/ts/mail/delivery/classes.mta.config.ts +73 -0
- package/ts/mail/delivery/classes.ratelimiter.ts +281 -0
- package/ts/mail/delivery/classes.smtp.client.legacy.ts +1422 -0
- package/ts/mail/delivery/classes.unified.rate.limiter.ts +1053 -0
- package/ts/mail/delivery/index.ts +24 -0
- package/ts/mail/delivery/interfaces.ts +291 -0
- package/ts/mail/delivery/smtpclient/auth-handler.ts +232 -0
- package/ts/mail/delivery/smtpclient/command-handler.ts +343 -0
- package/ts/mail/delivery/smtpclient/connection-manager.ts +289 -0
- package/ts/mail/delivery/smtpclient/constants.ts +145 -0
- package/ts/mail/delivery/smtpclient/create-client.ts +94 -0
- package/ts/mail/delivery/smtpclient/error-handler.ts +141 -0
- package/ts/mail/delivery/smtpclient/index.ts +24 -0
- package/ts/mail/delivery/smtpclient/interfaces.ts +242 -0
- package/ts/mail/delivery/smtpclient/smtp-client.ts +357 -0
- package/ts/mail/delivery/smtpclient/tls-handler.ts +254 -0
- package/ts/mail/delivery/smtpclient/utils/helpers.ts +224 -0
- package/ts/mail/delivery/smtpclient/utils/logging.ts +212 -0
- package/ts/mail/delivery/smtpclient/utils/validation.ts +170 -0
- package/ts/mail/delivery/smtpserver/certificate-utils.ts +398 -0
- package/ts/mail/delivery/smtpserver/command-handler.ts +1340 -0
- package/ts/mail/delivery/smtpserver/connection-manager.ts +1045 -0
- package/ts/mail/delivery/smtpserver/constants.ts +181 -0
- package/ts/mail/delivery/smtpserver/create-server.ts +31 -0
- package/ts/mail/delivery/smtpserver/data-handler.ts +1283 -0
- package/ts/mail/delivery/smtpserver/index.ts +32 -0
- package/ts/mail/delivery/smtpserver/interfaces.ts +655 -0
- package/ts/mail/delivery/smtpserver/secure-server.ts +97 -0
- package/ts/mail/delivery/smtpserver/security-handler.ts +345 -0
- package/ts/mail/delivery/smtpserver/session-manager.ts +557 -0
- package/ts/mail/delivery/smtpserver/smtp-server.ts +804 -0
- package/ts/mail/delivery/smtpserver/starttls-handler.ts +262 -0
- package/ts/mail/delivery/smtpserver/tls-handler.ts +346 -0
- package/ts/mail/delivery/smtpserver/utils/adaptive-logging.ts +514 -0
- package/ts/mail/delivery/smtpserver/utils/helpers.ts +246 -0
- package/ts/mail/delivery/smtpserver/utils/logging.ts +246 -0
- package/ts/mail/delivery/smtpserver/utils/validation.ts +436 -0
- package/ts/mail/index.ts +19 -0
- package/ts/mail/routing/classes.dns.manager.ts +563 -0
- package/ts/mail/routing/classes.dnsmanager.ts +559 -0
- package/ts/mail/routing/classes.domain.registry.ts +139 -0
- package/ts/mail/routing/classes.email.config.ts +82 -0
- package/ts/mail/routing/classes.email.router.ts +575 -0
- package/ts/mail/routing/classes.unified.email.server.ts +1873 -0
- package/ts/mail/routing/index.ts +6 -0
- package/ts/mail/routing/interfaces.ts +202 -0
- package/ts/mail/security/classes.dkimcreator.ts +431 -0
- package/ts/mail/security/classes.dkimverifier.ts +382 -0
- package/ts/mail/security/classes.dmarcverifier.ts +478 -0
- package/ts/mail/security/classes.spfverifier.ts +606 -0
- package/ts/mail/security/index.ts +5 -0
- package/ts/opsserver/classes.opsserver.ts +65 -0
- package/ts/opsserver/handlers/admin.handler.ts +240 -0
- package/ts/opsserver/handlers/config.handler.ts +150 -0
- package/ts/opsserver/handlers/index.ts +5 -0
- package/ts/opsserver/handlers/logs.handler.ts +195 -0
- package/ts/opsserver/handlers/security.handler.ts +208 -0
- package/ts/opsserver/handlers/stats.handler.ts +344 -0
- package/ts/opsserver/helpers/guards.ts +56 -0
- package/ts/opsserver/index.ts +1 -0
- package/ts/paths.ts +48 -0
- package/ts/plugins.ts +94 -0
- package/ts/security/classes.contentscanner.ts +739 -0
- package/ts/security/classes.ipreputationchecker.ts +592 -0
- package/ts/security/classes.securitylogger.ts +299 -0
- package/ts/security/index.ts +21 -0
- package/ts/sms/classes.smsservice.ts +98 -0
- package/ts/sms/config/sms.config.ts +109 -0
- package/ts/sms/config/sms.schema.ts +122 -0
- package/ts/sms/index.ts +1 -0
- package/ts/storage/classes.storagemanager.ts +400 -0
- package/ts/storage/index.ts +2 -0
- package/ts/tspublish.json +3 -0
- package/ts_interfaces/data/auth.ts +8 -0
- package/ts_interfaces/data/index.ts +2 -0
- package/ts_interfaces/data/stats.ts +101 -0
- package/ts_interfaces/index.ts +9 -0
- package/ts_interfaces/plugins.ts +6 -0
- package/ts_interfaces/requests/admin.ts +46 -0
- package/ts_interfaces/requests/config.ts +35 -0
- package/ts_interfaces/requests/index.ts +4 -0
- package/ts_interfaces/requests/logs.ts +44 -0
- package/ts_interfaces/requests/stats.ts +162 -0
- package/ts_interfaces/tspublish.json +3 -0
- package/ts_web/00_commitinfo_data.ts +8 -0
- package/ts_web/appstate.ts +361 -0
- package/ts_web/elements/index.ts +7 -0
- package/ts_web/elements/ops-dashboard.ts +165 -0
- package/ts_web/elements/ops-view-config.ts +268 -0
- package/ts_web/elements/ops-view-logs.ts +207 -0
- package/ts_web/elements/ops-view-overview.ts +222 -0
- package/ts_web/elements/ops-view-security.ts +471 -0
- package/ts_web/elements/ops-view-stats.ts +299 -0
- package/ts_web/elements/shared/css.ts +10 -0
- package/ts_web/elements/shared/index.ts +2 -0
- package/ts_web/elements/shared/ops-sectionheading.ts +42 -0
- package/ts_web/index.ts +9 -0
- package/ts_web/plugins.ts +11 -0
- package/ts_web/tspublish.json +3 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|
2
|
+
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
|
3
|
+
import { createSmtpClient } from '../../../ts/mail/delivery/smtpclient/index.js';
|
|
4
|
+
import { Email } from '../../../ts/mail/core/classes.email.js';
|
|
5
|
+
|
|
6
|
+
tap.test('setup - start SMTP server for caching tests', async () => {
|
|
7
|
+
// Just a placeholder to ensure server starts properly
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
tap.test('CPERF-06: caching strategies - connection caching', async () => {
|
|
11
|
+
const testServer = await startTestServer({
|
|
12
|
+
port: 2525,
|
|
13
|
+
tlsEnabled: false,
|
|
14
|
+
authRequired: false
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
console.log('Testing connection caching strategies...');
|
|
18
|
+
|
|
19
|
+
// Create client for testing connection reuse
|
|
20
|
+
const client = createSmtpClient({
|
|
21
|
+
host: 'localhost',
|
|
22
|
+
port: 2525,
|
|
23
|
+
secure: false
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// First batch - establish connections
|
|
27
|
+
console.log('Sending first batch to establish connections...');
|
|
28
|
+
const firstBatchStart = Date.now();
|
|
29
|
+
|
|
30
|
+
const firstBatch = Array(3).fill(null).map((_, i) =>
|
|
31
|
+
new Email({
|
|
32
|
+
from: 'sender@example.com',
|
|
33
|
+
to: [`cached${i}@example.com`],
|
|
34
|
+
subject: `Cache test ${i}`,
|
|
35
|
+
text: `Testing connection caching - message ${i}`,
|
|
36
|
+
})
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
// Send emails sequentially
|
|
40
|
+
for (const email of firstBatch) {
|
|
41
|
+
const result = await client.sendMail(email);
|
|
42
|
+
expect(result.success).toBeTrue();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const firstBatchTime = Date.now() - firstBatchStart;
|
|
46
|
+
|
|
47
|
+
// Second batch - should reuse connection
|
|
48
|
+
console.log('Sending second batch using same connection...');
|
|
49
|
+
const secondBatchStart = Date.now();
|
|
50
|
+
|
|
51
|
+
const secondBatch = Array(3).fill(null).map((_, i) =>
|
|
52
|
+
new Email({
|
|
53
|
+
from: 'sender@example.com',
|
|
54
|
+
to: [`cached2-${i}@example.com`],
|
|
55
|
+
subject: `Cache test 2-${i}`,
|
|
56
|
+
text: `Testing cached connections - message ${i}`,
|
|
57
|
+
})
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
// Send emails sequentially
|
|
61
|
+
for (const email of secondBatch) {
|
|
62
|
+
const result = await client.sendMail(email);
|
|
63
|
+
expect(result.success).toBeTrue();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const secondBatchTime = Date.now() - secondBatchStart;
|
|
67
|
+
|
|
68
|
+
console.log(`First batch: ${firstBatchTime}ms`);
|
|
69
|
+
console.log(`Second batch: ${secondBatchTime}ms`);
|
|
70
|
+
|
|
71
|
+
// Both batches should complete successfully
|
|
72
|
+
expect(firstBatchTime).toBeGreaterThan(0);
|
|
73
|
+
expect(secondBatchTime).toBeGreaterThan(0);
|
|
74
|
+
|
|
75
|
+
await client.close();
|
|
76
|
+
await stopTestServer(testServer);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
tap.test('CPERF-06: caching strategies - server capability caching', async () => {
|
|
80
|
+
const testServer = await startTestServer({
|
|
81
|
+
port: 2526,
|
|
82
|
+
tlsEnabled: false,
|
|
83
|
+
authRequired: false
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
console.log('Testing server capability caching...');
|
|
87
|
+
|
|
88
|
+
const client = createSmtpClient({
|
|
89
|
+
host: 'localhost',
|
|
90
|
+
port: 2526,
|
|
91
|
+
secure: false
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// First email - discovers capabilities
|
|
95
|
+
console.log('First email - discovering server capabilities...');
|
|
96
|
+
const firstStart = Date.now();
|
|
97
|
+
|
|
98
|
+
const email1 = new Email({
|
|
99
|
+
from: 'sender@example.com',
|
|
100
|
+
to: ['recipient1@example.com'],
|
|
101
|
+
subject: 'Capability test 1',
|
|
102
|
+
text: 'Testing capability discovery',
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const result1 = await client.sendMail(email1);
|
|
106
|
+
expect(result1.success).toBeTrue();
|
|
107
|
+
const firstTime = Date.now() - firstStart;
|
|
108
|
+
|
|
109
|
+
// Second email - uses cached capabilities
|
|
110
|
+
console.log('Second email - using cached capabilities...');
|
|
111
|
+
const secondStart = Date.now();
|
|
112
|
+
|
|
113
|
+
const email2 = new Email({
|
|
114
|
+
from: 'sender@example.com',
|
|
115
|
+
to: ['recipient2@example.com'],
|
|
116
|
+
subject: 'Capability test 2',
|
|
117
|
+
text: 'Testing cached capabilities',
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const result2 = await client.sendMail(email2);
|
|
121
|
+
expect(result2.success).toBeTrue();
|
|
122
|
+
const secondTime = Date.now() - secondStart;
|
|
123
|
+
|
|
124
|
+
console.log(`First email (capability discovery): ${firstTime}ms`);
|
|
125
|
+
console.log(`Second email (cached capabilities): ${secondTime}ms`);
|
|
126
|
+
|
|
127
|
+
// Both should complete quickly
|
|
128
|
+
expect(firstTime).toBeLessThan(1000);
|
|
129
|
+
expect(secondTime).toBeLessThan(1000);
|
|
130
|
+
|
|
131
|
+
await client.close();
|
|
132
|
+
await stopTestServer(testServer);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
tap.test('CPERF-06: caching strategies - message batching', async () => {
|
|
136
|
+
const testServer = await startTestServer({
|
|
137
|
+
port: 2527,
|
|
138
|
+
tlsEnabled: false,
|
|
139
|
+
authRequired: false
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
console.log('Testing message batching for cache efficiency...');
|
|
143
|
+
|
|
144
|
+
const client = createSmtpClient({
|
|
145
|
+
host: 'localhost',
|
|
146
|
+
port: 2527,
|
|
147
|
+
secure: false
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Test sending messages in batches
|
|
151
|
+
const batchSizes = [2, 3, 4];
|
|
152
|
+
|
|
153
|
+
for (const batchSize of batchSizes) {
|
|
154
|
+
console.log(`\nTesting batch size: ${batchSize}`);
|
|
155
|
+
const batchStart = Date.now();
|
|
156
|
+
|
|
157
|
+
const emails = Array(batchSize).fill(null).map((_, i) =>
|
|
158
|
+
new Email({
|
|
159
|
+
from: 'sender@example.com',
|
|
160
|
+
to: [`batch${batchSize}-${i}@example.com`],
|
|
161
|
+
subject: `Batch ${batchSize} message ${i}`,
|
|
162
|
+
text: `Testing batching strategies - batch size ${batchSize}`,
|
|
163
|
+
})
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
// Send emails sequentially
|
|
167
|
+
for (const email of emails) {
|
|
168
|
+
const result = await client.sendMail(email);
|
|
169
|
+
expect(result.success).toBeTrue();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const batchTime = Date.now() - batchStart;
|
|
173
|
+
const avgTime = batchTime / batchSize;
|
|
174
|
+
|
|
175
|
+
console.log(` Batch completed in ${batchTime}ms`);
|
|
176
|
+
console.log(` Average time per message: ${avgTime.toFixed(1)}ms`);
|
|
177
|
+
|
|
178
|
+
// All batches should complete efficiently
|
|
179
|
+
expect(avgTime).toBeLessThan(1000);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
await client.close();
|
|
183
|
+
await stopTestServer(testServer);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
tap.test('cleanup - stop SMTP server', async () => {
|
|
187
|
+
// Cleanup is handled in individual tests
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
tap.start();
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|
2
|
+
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
|
3
|
+
import { createSmtpClient } from '../../../ts/mail/delivery/smtpclient/index.js';
|
|
4
|
+
import { Email } from '../../../ts/mail/core/classes.email.js';
|
|
5
|
+
|
|
6
|
+
tap.test('setup - start SMTP server for queue management tests', async () => {
|
|
7
|
+
// Just a placeholder to ensure server starts properly
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
tap.test('CPERF-07: queue management - basic queue processing', async () => {
|
|
11
|
+
const testServer = await startTestServer({
|
|
12
|
+
port: 2525,
|
|
13
|
+
tlsEnabled: false,
|
|
14
|
+
authRequired: false
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
console.log('Testing basic queue processing...');
|
|
18
|
+
|
|
19
|
+
const client = createSmtpClient({
|
|
20
|
+
host: 'localhost',
|
|
21
|
+
port: 2525,
|
|
22
|
+
secure: false
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Queue up 5 emails (reduced from 10)
|
|
26
|
+
const emailCount = 5;
|
|
27
|
+
const emails = Array(emailCount).fill(null).map((_, i) =>
|
|
28
|
+
new Email({
|
|
29
|
+
from: 'sender@example.com',
|
|
30
|
+
to: [`queue${i}@example.com`],
|
|
31
|
+
subject: `Queue test ${i}`,
|
|
32
|
+
text: `Testing queue management - message ${i}`,
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
console.log(`Sending ${emailCount} emails...`);
|
|
37
|
+
const queueStart = Date.now();
|
|
38
|
+
|
|
39
|
+
// Send all emails sequentially
|
|
40
|
+
const results = [];
|
|
41
|
+
for (let i = 0; i < emails.length; i++) {
|
|
42
|
+
const result = await client.sendMail(emails[i]);
|
|
43
|
+
console.log(` Email ${i} sent`);
|
|
44
|
+
results.push(result);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const queueTime = Date.now() - queueStart;
|
|
48
|
+
|
|
49
|
+
// Verify all succeeded
|
|
50
|
+
results.forEach((result, index) => {
|
|
51
|
+
expect(result.success).toBeTrue();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
console.log(`All ${emailCount} emails processed in ${queueTime}ms`);
|
|
55
|
+
console.log(`Average time per email: ${(queueTime / emailCount).toFixed(1)}ms`);
|
|
56
|
+
|
|
57
|
+
// Should complete within reasonable time
|
|
58
|
+
expect(queueTime).toBeLessThan(10000); // Less than 10 seconds for 5 emails
|
|
59
|
+
|
|
60
|
+
await client.close();
|
|
61
|
+
await stopTestServer(testServer);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
tap.test('CPERF-07: queue management - queue with rate limiting', async () => {
|
|
65
|
+
const testServer = await startTestServer({
|
|
66
|
+
port: 2526,
|
|
67
|
+
tlsEnabled: false,
|
|
68
|
+
authRequired: false
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
console.log('Testing queue with rate limiting...');
|
|
72
|
+
|
|
73
|
+
const client = createSmtpClient({
|
|
74
|
+
host: 'localhost',
|
|
75
|
+
port: 2526,
|
|
76
|
+
secure: false
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// Send 5 emails sequentially (simulating rate limiting)
|
|
80
|
+
const emailCount = 5;
|
|
81
|
+
const rateLimitDelay = 200; // 200ms between emails
|
|
82
|
+
|
|
83
|
+
console.log(`Sending ${emailCount} emails with ${rateLimitDelay}ms rate limit...`);
|
|
84
|
+
const rateStart = Date.now();
|
|
85
|
+
|
|
86
|
+
for (let i = 0; i < emailCount; i++) {
|
|
87
|
+
const email = new Email({
|
|
88
|
+
from: 'sender@example.com',
|
|
89
|
+
to: [`ratelimit${i}@example.com`],
|
|
90
|
+
subject: `Rate limit test ${i}`,
|
|
91
|
+
text: `Testing rate limited queue - message ${i}`,
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const result = await client.sendMail(email);
|
|
95
|
+
expect(result.success).toBeTrue();
|
|
96
|
+
|
|
97
|
+
console.log(` Email ${i} sent`);
|
|
98
|
+
|
|
99
|
+
// Simulate rate limiting delay
|
|
100
|
+
if (i < emailCount - 1) {
|
|
101
|
+
await new Promise(resolve => setTimeout(resolve, rateLimitDelay));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const rateTime = Date.now() - rateStart;
|
|
106
|
+
const expectedMinTime = (emailCount - 1) * rateLimitDelay;
|
|
107
|
+
|
|
108
|
+
console.log(`Rate limited emails sent in ${rateTime}ms`);
|
|
109
|
+
console.log(`Expected minimum time: ${expectedMinTime}ms`);
|
|
110
|
+
|
|
111
|
+
// Should respect rate limiting
|
|
112
|
+
expect(rateTime).toBeGreaterThanOrEqual(expectedMinTime);
|
|
113
|
+
|
|
114
|
+
await client.close();
|
|
115
|
+
await stopTestServer(testServer);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
tap.test('CPERF-07: queue management - sequential processing', async () => {
|
|
119
|
+
const testServer = await startTestServer({
|
|
120
|
+
port: 2527,
|
|
121
|
+
tlsEnabled: false,
|
|
122
|
+
authRequired: false
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
console.log('Testing sequential email processing...');
|
|
126
|
+
|
|
127
|
+
const client = createSmtpClient({
|
|
128
|
+
host: 'localhost',
|
|
129
|
+
port: 2527,
|
|
130
|
+
secure: false
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// Send multiple emails sequentially
|
|
134
|
+
const emails = Array(3).fill(null).map((_, i) =>
|
|
135
|
+
new Email({
|
|
136
|
+
from: 'sender@example.com',
|
|
137
|
+
to: [`sequential${i}@example.com`],
|
|
138
|
+
subject: `Sequential test ${i}`,
|
|
139
|
+
text: `Testing sequential processing - message ${i}`,
|
|
140
|
+
})
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
console.log('Sending 3 emails sequentially...');
|
|
144
|
+
const sequentialStart = Date.now();
|
|
145
|
+
|
|
146
|
+
const results = [];
|
|
147
|
+
for (const email of emails) {
|
|
148
|
+
const result = await client.sendMail(email);
|
|
149
|
+
results.push(result);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const sequentialTime = Date.now() - sequentialStart;
|
|
153
|
+
|
|
154
|
+
// All should succeed
|
|
155
|
+
results.forEach((result, index) => {
|
|
156
|
+
expect(result.success).toBeTrue();
|
|
157
|
+
console.log(` Email ${index} processed`);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
console.log(`Sequential processing completed in ${sequentialTime}ms`);
|
|
161
|
+
console.log(`Average time per email: ${(sequentialTime / 3).toFixed(1)}ms`);
|
|
162
|
+
|
|
163
|
+
await client.close();
|
|
164
|
+
await stopTestServer(testServer);
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
tap.test('cleanup - stop SMTP server', async () => {
|
|
168
|
+
// Cleanup is handled in individual tests
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
tap.start();
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|
2
|
+
import { createTestServer } from '../../helpers/server.loader.js';
|
|
3
|
+
import { createTestSmtpClient } from '../../helpers/smtp.client.js';
|
|
4
|
+
import { Email } from '../../../ts/mail/core/classes.email.js';
|
|
5
|
+
|
|
6
|
+
tap.test('CPERF-08: DNS Caching Tests', async () => {
|
|
7
|
+
console.log('\n🌐 Testing SMTP Client DNS Caching');
|
|
8
|
+
console.log('=' .repeat(60));
|
|
9
|
+
|
|
10
|
+
const testServer = await createTestServer({});
|
|
11
|
+
|
|
12
|
+
try {
|
|
13
|
+
console.log('\nTest: DNS caching with multiple connections');
|
|
14
|
+
|
|
15
|
+
// Create multiple clients to test DNS caching
|
|
16
|
+
const clients = [];
|
|
17
|
+
|
|
18
|
+
for (let i = 0; i < 3; i++) {
|
|
19
|
+
const smtpClient = createTestSmtpClient({
|
|
20
|
+
host: testServer.hostname,
|
|
21
|
+
port: testServer.port
|
|
22
|
+
});
|
|
23
|
+
clients.push(smtpClient);
|
|
24
|
+
console.log(` ✓ Client ${i + 1} created (DNS should be cached)`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Send email with first client
|
|
28
|
+
const email = new Email({
|
|
29
|
+
from: 'sender@example.com',
|
|
30
|
+
to: 'recipient@example.com',
|
|
31
|
+
subject: 'DNS Caching Test',
|
|
32
|
+
text: 'Testing DNS caching efficiency'
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
const result = await clients[0].sendMail(email);
|
|
36
|
+
console.log(' ✓ Email sent successfully');
|
|
37
|
+
expect(result).toBeDefined();
|
|
38
|
+
|
|
39
|
+
// Clean up all clients
|
|
40
|
+
clients.forEach(client => client.close());
|
|
41
|
+
console.log(' ✓ All clients closed');
|
|
42
|
+
|
|
43
|
+
console.log('\n✅ CPERF-08: DNS caching tests completed');
|
|
44
|
+
|
|
45
|
+
} finally {
|
|
46
|
+
testServer.server.close();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
tap.start();
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|
2
|
+
import { startTestServer, stopTestServer, type ITestServer } from '../../helpers/server.loader.js';
|
|
3
|
+
import { createSmtpClient } from '../../../ts/mail/delivery/smtpclient/index.js';
|
|
4
|
+
import { Email } from '../../../ts/mail/core/classes.email.js';
|
|
5
|
+
|
|
6
|
+
let testServer: ITestServer;
|
|
7
|
+
|
|
8
|
+
tap.test('setup test SMTP server', async () => {
|
|
9
|
+
testServer = await startTestServer({
|
|
10
|
+
port: 2600,
|
|
11
|
+
tlsEnabled: false,
|
|
12
|
+
authRequired: false
|
|
13
|
+
});
|
|
14
|
+
expect(testServer).toBeTruthy();
|
|
15
|
+
expect(testServer.port).toEqual(2600);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
tap.test('CREL-01: Basic reconnection after close', async () => {
|
|
19
|
+
const smtpClient = createSmtpClient({
|
|
20
|
+
host: testServer.hostname,
|
|
21
|
+
port: testServer.port,
|
|
22
|
+
secure: false,
|
|
23
|
+
connectionTimeout: 5000,
|
|
24
|
+
debug: true
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// First verify connection works
|
|
28
|
+
const result1 = await smtpClient.verify();
|
|
29
|
+
expect(result1).toBeTrue();
|
|
30
|
+
console.log('Initial connection verified');
|
|
31
|
+
|
|
32
|
+
// Close connection
|
|
33
|
+
await smtpClient.close();
|
|
34
|
+
console.log('Connection closed');
|
|
35
|
+
|
|
36
|
+
// Verify again - should reconnect automatically
|
|
37
|
+
const result2 = await smtpClient.verify();
|
|
38
|
+
expect(result2).toBeTrue();
|
|
39
|
+
console.log('Reconnection successful');
|
|
40
|
+
|
|
41
|
+
await smtpClient.close();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
tap.test('CREL-01: Multiple sequential connections', async () => {
|
|
45
|
+
const smtpClient = createSmtpClient({
|
|
46
|
+
host: testServer.hostname,
|
|
47
|
+
port: testServer.port,
|
|
48
|
+
secure: false,
|
|
49
|
+
connectionTimeout: 5000,
|
|
50
|
+
debug: true
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Send multiple emails with closes in between
|
|
54
|
+
for (let i = 0; i < 3; i++) {
|
|
55
|
+
const email = new Email({
|
|
56
|
+
from: 'sender@example.com',
|
|
57
|
+
to: ['recipient@example.com'],
|
|
58
|
+
subject: `Sequential Test ${i + 1}`,
|
|
59
|
+
text: 'Testing sequential connections'
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const result = await smtpClient.sendMail(email);
|
|
63
|
+
expect(result.success).toBeTrue();
|
|
64
|
+
console.log(`Email ${i + 1} sent successfully`);
|
|
65
|
+
|
|
66
|
+
// Close connection after each send
|
|
67
|
+
await smtpClient.close();
|
|
68
|
+
console.log(`Connection closed after email ${i + 1}`);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
tap.test('CREL-01: Recovery from server restart', async () => {
|
|
73
|
+
const smtpClient = createSmtpClient({
|
|
74
|
+
host: testServer.hostname,
|
|
75
|
+
port: testServer.port,
|
|
76
|
+
secure: false,
|
|
77
|
+
connectionTimeout: 5000,
|
|
78
|
+
debug: true
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
// Send first email
|
|
82
|
+
const email1 = new Email({
|
|
83
|
+
from: 'sender@example.com',
|
|
84
|
+
to: ['recipient@example.com'],
|
|
85
|
+
subject: 'Before Server Restart',
|
|
86
|
+
text: 'Testing server restart recovery'
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const result1 = await smtpClient.sendMail(email1);
|
|
90
|
+
expect(result1.success).toBeTrue();
|
|
91
|
+
console.log('First email sent successfully');
|
|
92
|
+
|
|
93
|
+
// Simulate server restart by creating a brief interruption
|
|
94
|
+
console.log('Simulating server restart...');
|
|
95
|
+
|
|
96
|
+
// The SMTP client should handle the disconnection gracefully
|
|
97
|
+
// and reconnect for the next operation
|
|
98
|
+
|
|
99
|
+
// Wait a moment
|
|
100
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
101
|
+
|
|
102
|
+
// Try to send another email
|
|
103
|
+
const email2 = new Email({
|
|
104
|
+
from: 'sender@example.com',
|
|
105
|
+
to: ['recipient@example.com'],
|
|
106
|
+
subject: 'After Server Restart',
|
|
107
|
+
text: 'Testing recovery after restart'
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const result2 = await smtpClient.sendMail(email2);
|
|
111
|
+
expect(result2.success).toBeTrue();
|
|
112
|
+
console.log('Second email sent successfully after simulated restart');
|
|
113
|
+
|
|
114
|
+
await smtpClient.close();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
tap.test('CREL-01: Connection pool reliability', async () => {
|
|
118
|
+
const pooledClient = createSmtpClient({
|
|
119
|
+
host: testServer.hostname,
|
|
120
|
+
port: testServer.port,
|
|
121
|
+
secure: false,
|
|
122
|
+
pool: true,
|
|
123
|
+
maxConnections: 3,
|
|
124
|
+
maxMessages: 10,
|
|
125
|
+
connectionTimeout: 5000,
|
|
126
|
+
debug: true
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Send multiple emails concurrently
|
|
130
|
+
const emails = Array.from({ length: 10 }, (_, i) => new Email({
|
|
131
|
+
from: 'sender@example.com',
|
|
132
|
+
to: [`recipient${i}@example.com`],
|
|
133
|
+
subject: `Pool Test ${i}`,
|
|
134
|
+
text: 'Testing connection pool'
|
|
135
|
+
}));
|
|
136
|
+
|
|
137
|
+
console.log('Sending 10 emails through connection pool...');
|
|
138
|
+
|
|
139
|
+
const results = await Promise.allSettled(
|
|
140
|
+
emails.map(email => pooledClient.sendMail(email))
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
const successful = results.filter(r => r.status === 'fulfilled').length;
|
|
144
|
+
const failed = results.filter(r => r.status === 'rejected').length;
|
|
145
|
+
|
|
146
|
+
console.log(`Pool results: ${successful} successful, ${failed} failed`);
|
|
147
|
+
expect(successful).toBeGreaterThan(0);
|
|
148
|
+
|
|
149
|
+
// Most should succeed
|
|
150
|
+
expect(successful).toBeGreaterThanOrEqual(8);
|
|
151
|
+
|
|
152
|
+
await pooledClient.close();
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
tap.test('CREL-01: Rapid connection cycling', async () => {
|
|
156
|
+
const smtpClient = createSmtpClient({
|
|
157
|
+
host: testServer.hostname,
|
|
158
|
+
port: testServer.port,
|
|
159
|
+
secure: false,
|
|
160
|
+
connectionTimeout: 5000,
|
|
161
|
+
debug: true
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// Rapidly open and close connections
|
|
165
|
+
console.log('Testing rapid connection cycling...');
|
|
166
|
+
|
|
167
|
+
for (let i = 0; i < 5; i++) {
|
|
168
|
+
const result = await smtpClient.verify();
|
|
169
|
+
expect(result).toBeTrue();
|
|
170
|
+
await smtpClient.close();
|
|
171
|
+
console.log(`Cycle ${i + 1} completed`);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
console.log('Rapid cycling completed successfully');
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
tap.test('CREL-01: Error recovery', async () => {
|
|
178
|
+
// Test with invalid server first
|
|
179
|
+
const smtpClient = createSmtpClient({
|
|
180
|
+
host: 'invalid.host.local',
|
|
181
|
+
port: 9999,
|
|
182
|
+
secure: false,
|
|
183
|
+
connectionTimeout: 1000,
|
|
184
|
+
debug: true
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// First attempt should fail
|
|
188
|
+
const result1 = await smtpClient.verify();
|
|
189
|
+
expect(result1).toBeFalse();
|
|
190
|
+
console.log('Connection to invalid host failed as expected');
|
|
191
|
+
|
|
192
|
+
// Now update to valid server (simulating failover)
|
|
193
|
+
// Since we can't update options, create a new client
|
|
194
|
+
const recoveredClient = createSmtpClient({
|
|
195
|
+
host: testServer.hostname,
|
|
196
|
+
port: testServer.port,
|
|
197
|
+
secure: false,
|
|
198
|
+
connectionTimeout: 5000,
|
|
199
|
+
debug: true
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// Should connect successfully
|
|
203
|
+
const result2 = await recoveredClient.verify();
|
|
204
|
+
expect(result2).toBeTrue();
|
|
205
|
+
console.log('Connection to valid host succeeded');
|
|
206
|
+
|
|
207
|
+
// Send email to verify full functionality
|
|
208
|
+
const email = new Email({
|
|
209
|
+
from: 'sender@example.com',
|
|
210
|
+
to: ['recipient@example.com'],
|
|
211
|
+
subject: 'Recovery Test',
|
|
212
|
+
text: 'Testing error recovery'
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
const sendResult = await recoveredClient.sendMail(email);
|
|
216
|
+
expect(sendResult.success).toBeTrue();
|
|
217
|
+
console.log('Email sent successfully after recovery');
|
|
218
|
+
|
|
219
|
+
await recoveredClient.close();
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
tap.test('CREL-01: Long-lived connection', async () => {
|
|
223
|
+
const smtpClient = createSmtpClient({
|
|
224
|
+
host: testServer.hostname,
|
|
225
|
+
port: testServer.port,
|
|
226
|
+
secure: false,
|
|
227
|
+
connectionTimeout: 30000, // 30 second timeout
|
|
228
|
+
socketTimeout: 30000,
|
|
229
|
+
debug: true
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
console.log('Testing long-lived connection...');
|
|
233
|
+
|
|
234
|
+
// Send emails over time
|
|
235
|
+
for (let i = 0; i < 3; i++) {
|
|
236
|
+
const email = new Email({
|
|
237
|
+
from: 'sender@example.com',
|
|
238
|
+
to: ['recipient@example.com'],
|
|
239
|
+
subject: `Long-lived Test ${i + 1}`,
|
|
240
|
+
text: `Email ${i + 1} over long-lived connection`
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
const result = await smtpClient.sendMail(email);
|
|
244
|
+
expect(result.success).toBeTrue();
|
|
245
|
+
console.log(`Email ${i + 1} sent at ${new Date().toISOString()}`);
|
|
246
|
+
|
|
247
|
+
// Wait between sends
|
|
248
|
+
if (i < 2) {
|
|
249
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
console.log('Long-lived connection test completed');
|
|
254
|
+
await smtpClient.close();
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
tap.test('CREL-01: Concurrent operations', async () => {
|
|
258
|
+
const smtpClient = createSmtpClient({
|
|
259
|
+
host: testServer.hostname,
|
|
260
|
+
port: testServer.port,
|
|
261
|
+
secure: false,
|
|
262
|
+
pool: true,
|
|
263
|
+
maxConnections: 5,
|
|
264
|
+
connectionTimeout: 5000,
|
|
265
|
+
debug: true
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
console.log('Testing concurrent operations...');
|
|
269
|
+
|
|
270
|
+
// Mix verify and send operations
|
|
271
|
+
const operations = [
|
|
272
|
+
smtpClient.verify(),
|
|
273
|
+
smtpClient.sendMail(new Email({
|
|
274
|
+
from: 'sender@example.com',
|
|
275
|
+
to: ['recipient1@example.com'],
|
|
276
|
+
subject: 'Concurrent 1',
|
|
277
|
+
text: 'First concurrent email'
|
|
278
|
+
})),
|
|
279
|
+
smtpClient.verify(),
|
|
280
|
+
smtpClient.sendMail(new Email({
|
|
281
|
+
from: 'sender@example.com',
|
|
282
|
+
to: ['recipient2@example.com'],
|
|
283
|
+
subject: 'Concurrent 2',
|
|
284
|
+
text: 'Second concurrent email'
|
|
285
|
+
})),
|
|
286
|
+
smtpClient.verify()
|
|
287
|
+
];
|
|
288
|
+
|
|
289
|
+
const results = await Promise.allSettled(operations);
|
|
290
|
+
|
|
291
|
+
const successful = results.filter(r => r.status === 'fulfilled').length;
|
|
292
|
+
console.log(`Concurrent operations: ${successful}/${results.length} successful`);
|
|
293
|
+
|
|
294
|
+
expect(successful).toEqual(results.length);
|
|
295
|
+
|
|
296
|
+
await smtpClient.close();
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
tap.test('cleanup test SMTP server', async () => {
|
|
300
|
+
if (testServer) {
|
|
301
|
+
await stopTestServer(testServer);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
export default tap.start();
|