@serve.zone/dcrouter 2.12.4 → 5.0.2
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/.playwright-mcp/dcrouter-scrollbar-issue.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-10-23-737Z.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-11-19-449Z.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-12-03-126Z.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-12-15-576Z.png +0 -0
- package/changelog.md +103 -0
- package/npmextra.json +36 -2
- package/package.json +60 -46
- package/readme.hints.md +537 -670
- package/readme.md +659 -937
- package/test/test.contentscanner.ts +1 -1
- package/test/test.dcrouter.email.ts +70 -112
- package/test/test.dns-socket-handler.ts +75 -96
- package/test/test.errors.ts +3 -137
- package/test/test.jwt-auth.ts +1 -0
- package/test/test.opsserver-api.ts +1 -0
- package/test/test.protected-endpoint.ts +43 -38
- package/test_watch/devserver.ts +35 -0
- package/ts/00_commitinfo_data.ts +3 -3
- package/ts/cache/classes.cache.cleaner.ts +166 -0
- package/ts/cache/classes.cached.document.ts +111 -0
- package/ts/cache/classes.cachedb.ts +154 -0
- package/ts/cache/documents/classes.cached.email.ts +240 -0
- package/ts/cache/documents/classes.cached.ip.reputation.ts +247 -0
- package/ts/cache/documents/index.ts +2 -0
- package/ts/cache/index.ts +7 -0
- package/ts/classes.dcrouter.ts +229 -162
- package/ts/errors/index.ts +0 -2
- package/ts/index.ts +8 -2
- package/ts/monitoring/classes.metricscache.ts +75 -0
- package/ts/monitoring/classes.metricsmanager.ts +522 -0
- package/ts/monitoring/index.ts +1 -0
- package/ts/opsserver/classes.opsserver.ts +5 -1
- package/ts/opsserver/handlers/admin.handler.ts +1 -1
- package/ts/opsserver/handlers/config.handler.ts +16 -58
- package/ts/opsserver/handlers/email-ops.handler.ts +318 -0
- package/ts/opsserver/handlers/index.ts +3 -1
- package/ts/opsserver/handlers/radius.handler.ts +405 -0
- package/ts/opsserver/handlers/security.handler.ts +115 -6
- package/ts/opsserver/handlers/stats.handler.ts +177 -18
- package/ts/paths.ts +9 -9
- package/ts/plugins.ts +73 -11
- package/ts/radius/classes.accounting.manager.ts +607 -0
- package/ts/radius/classes.radius.server.ts +532 -0
- package/ts/radius/classes.vlan.manager.ts +363 -0
- package/ts/radius/index.ts +14 -0
- package/ts/security/classes.contentscanner.ts +2 -2
- package/ts/security/classes.ipreputationchecker.ts +2 -2
- package/ts/sms/classes.smsservice.ts +7 -9
- package/ts/storage/classes.storagemanager.ts +3 -3
- package/ts_interfaces/data/stats.ts +30 -0
- package/ts_interfaces/readme.md +205 -0
- package/ts_interfaces/requests/combined.stats.ts +25 -0
- package/ts_interfaces/requests/config.ts +1 -18
- package/ts_interfaces/requests/email-ops.ts +239 -0
- package/ts_interfaces/requests/index.ts +4 -1
- package/ts_interfaces/requests/radius.ts +329 -0
- package/ts_web/00_commitinfo_data.ts +3 -3
- package/ts_web/appstate.ts +523 -85
- package/ts_web/elements/index.ts +2 -1
- package/ts_web/elements/ops-dashboard.ts +117 -52
- package/ts_web/elements/ops-view-config.ts +236 -118
- package/ts_web/elements/ops-view-emails.ts +818 -0
- package/ts_web/elements/ops-view-logs.ts +14 -14
- package/ts_web/elements/ops-view-network.ts +580 -0
- package/ts_web/elements/ops-view-overview.ts +196 -110
- package/ts_web/elements/ops-view-security.ts +155 -96
- package/ts_web/elements/shared/ops-sectionheading.ts +1 -5
- package/ts_web/index.ts +4 -0
- package/ts_web/readme.md +211 -0
- package/ts_web/router.ts +181 -0
- package/tsconfig.json +0 -3
- package/dist_ts/00_commitinfo_data.d.ts +0 -8
- package/dist_ts/00_commitinfo_data.js +0 -9
- package/dist_ts/classes.dcrouter.d.ts +0 -238
- package/dist_ts/classes.dcrouter.js +0 -1008
- package/dist_ts/config/index.d.ts +0 -1
- package/dist_ts/config/index.js +0 -3
- package/dist_ts/config/validator.d.ts +0 -104
- package/dist_ts/config/validator.js +0 -152
- package/dist_ts/deliverability/classes.ipwarmupmanager.d.ts +0 -253
- package/dist_ts/deliverability/classes.ipwarmupmanager.js +0 -639
- package/dist_ts/deliverability/classes.senderreputationmonitor.d.ts +0 -300
- package/dist_ts/deliverability/classes.senderreputationmonitor.js +0 -961
- package/dist_ts/deliverability/index.d.ts +0 -2
- package/dist_ts/deliverability/index.js +0 -3
- package/dist_ts/errors/base.errors.d.ts +0 -224
- package/dist_ts/errors/base.errors.js +0 -310
- package/dist_ts/errors/email.errors.d.ts +0 -175
- package/dist_ts/errors/email.errors.js +0 -265
- package/dist_ts/errors/error-handler.d.ts +0 -98
- package/dist_ts/errors/error-handler.js +0 -282
- package/dist_ts/errors/error.codes.d.ts +0 -115
- package/dist_ts/errors/error.codes.js +0 -136
- package/dist_ts/errors/index.d.ts +0 -56
- package/dist_ts/errors/index.js +0 -138
- package/dist_ts/errors/mta.errors.d.ts +0 -259
- package/dist_ts/errors/mta.errors.js +0 -472
- package/dist_ts/errors/reputation.errors.d.ts +0 -183
- package/dist_ts/errors/reputation.errors.js +0 -292
- package/dist_ts/index.d.ts +0 -4
- package/dist_ts/index.js +0 -6
- package/dist_ts/logger.d.ts +0 -17
- package/dist_ts/logger.js +0 -77
- package/dist_ts/mail/core/classes.bouncemanager.d.ts +0 -200
- package/dist_ts/mail/core/classes.bouncemanager.js +0 -778
- package/dist_ts/mail/core/classes.email.d.ts +0 -291
- package/dist_ts/mail/core/classes.email.js +0 -780
- package/dist_ts/mail/core/classes.emailvalidator.d.ts +0 -61
- package/dist_ts/mail/core/classes.emailvalidator.js +0 -182
- package/dist_ts/mail/core/classes.templatemanager.d.ts +0 -95
- package/dist_ts/mail/core/classes.templatemanager.js +0 -239
- package/dist_ts/mail/core/index.d.ts +0 -4
- package/dist_ts/mail/core/index.js +0 -6
- package/dist_ts/mail/delivery/classes.delivery.queue.d.ts +0 -163
- package/dist_ts/mail/delivery/classes.delivery.queue.js +0 -485
- package/dist_ts/mail/delivery/classes.delivery.system.d.ts +0 -186
- package/dist_ts/mail/delivery/classes.delivery.system.js +0 -846
- package/dist_ts/mail/delivery/classes.emailsendjob.d.ts +0 -84
- package/dist_ts/mail/delivery/classes.emailsendjob.js +0 -362
- package/dist_ts/mail/delivery/classes.emailsignjob.d.ts +0 -18
- package/dist_ts/mail/delivery/classes.emailsignjob.js +0 -44
- package/dist_ts/mail/delivery/classes.mta.config.d.ts +0 -22
- package/dist_ts/mail/delivery/classes.mta.config.js +0 -51
- package/dist_ts/mail/delivery/classes.ratelimiter.d.ts +0 -98
- package/dist_ts/mail/delivery/classes.ratelimiter.js +0 -205
- package/dist_ts/mail/delivery/classes.smtp.client.legacy.d.ts +0 -275
- package/dist_ts/mail/delivery/classes.smtp.client.legacy.js +0 -973
- package/dist_ts/mail/delivery/classes.unified.rate.limiter.d.ts +0 -200
- package/dist_ts/mail/delivery/classes.unified.rate.limiter.js +0 -817
- package/dist_ts/mail/delivery/index.d.ts +0 -12
- package/dist_ts/mail/delivery/index.js +0 -18
- package/dist_ts/mail/delivery/interfaces.d.ts +0 -243
- package/dist_ts/mail/delivery/interfaces.js +0 -17
- package/dist_ts/mail/delivery/smtpclient/auth-handler.d.ts +0 -43
- package/dist_ts/mail/delivery/smtpclient/auth-handler.js +0 -188
- package/dist_ts/mail/delivery/smtpclient/command-handler.d.ts +0 -67
- package/dist_ts/mail/delivery/smtpclient/command-handler.js +0 -276
- package/dist_ts/mail/delivery/smtpclient/connection-manager.d.ts +0 -48
- package/dist_ts/mail/delivery/smtpclient/connection-manager.js +0 -238
- package/dist_ts/mail/delivery/smtpclient/constants.d.ts +0 -129
- package/dist_ts/mail/delivery/smtpclient/constants.js +0 -135
- package/dist_ts/mail/delivery/smtpclient/create-client.d.ts +0 -22
- package/dist_ts/mail/delivery/smtpclient/create-client.js +0 -86
- package/dist_ts/mail/delivery/smtpclient/error-handler.d.ts +0 -28
- package/dist_ts/mail/delivery/smtpclient/error-handler.js +0 -110
- package/dist_ts/mail/delivery/smtpclient/index.d.ts +0 -16
- package/dist_ts/mail/delivery/smtpclient/index.js +0 -21
- package/dist_ts/mail/delivery/smtpclient/interfaces.d.ts +0 -183
- package/dist_ts/mail/delivery/smtpclient/interfaces.js +0 -19
- package/dist_ts/mail/delivery/smtpclient/smtp-client.d.ts +0 -58
- package/dist_ts/mail/delivery/smtpclient/smtp-client.js +0 -279
- package/dist_ts/mail/delivery/smtpclient/tls-handler.d.ts +0 -33
- package/dist_ts/mail/delivery/smtpclient/tls-handler.js +0 -202
- package/dist_ts/mail/delivery/smtpclient/utils/helpers.d.ts +0 -77
- package/dist_ts/mail/delivery/smtpclient/utils/helpers.js +0 -196
- package/dist_ts/mail/delivery/smtpclient/utils/logging.d.ts +0 -46
- package/dist_ts/mail/delivery/smtpclient/utils/logging.js +0 -153
- package/dist_ts/mail/delivery/smtpclient/utils/validation.d.ts +0 -38
- package/dist_ts/mail/delivery/smtpclient/utils/validation.js +0 -139
- package/dist_ts/mail/delivery/smtpserver/certificate-utils.d.ts +0 -45
- package/dist_ts/mail/delivery/smtpserver/certificate-utils.js +0 -345
- package/dist_ts/mail/delivery/smtpserver/command-handler.d.ts +0 -156
- package/dist_ts/mail/delivery/smtpserver/command-handler.js +0 -1159
- package/dist_ts/mail/delivery/smtpserver/connection-manager.d.ts +0 -159
- package/dist_ts/mail/delivery/smtpserver/connection-manager.js +0 -894
- package/dist_ts/mail/delivery/smtpserver/constants.d.ts +0 -130
- package/dist_ts/mail/delivery/smtpserver/constants.js +0 -162
- package/dist_ts/mail/delivery/smtpserver/create-server.d.ts +0 -14
- package/dist_ts/mail/delivery/smtpserver/create-server.js +0 -28
- package/dist_ts/mail/delivery/smtpserver/data-handler.d.ts +0 -123
- package/dist_ts/mail/delivery/smtpserver/data-handler.js +0 -1148
- package/dist_ts/mail/delivery/smtpserver/index.d.ts +0 -20
- package/dist_ts/mail/delivery/smtpserver/index.js +0 -27
- package/dist_ts/mail/delivery/smtpserver/interfaces.d.ts +0 -530
- package/dist_ts/mail/delivery/smtpserver/interfaces.js +0 -10
- package/dist_ts/mail/delivery/smtpserver/secure-server.d.ts +0 -15
- package/dist_ts/mail/delivery/smtpserver/secure-server.js +0 -79
- package/dist_ts/mail/delivery/smtpserver/security-handler.d.ts +0 -86
- package/dist_ts/mail/delivery/smtpserver/security-handler.js +0 -234
- package/dist_ts/mail/delivery/smtpserver/session-manager.d.ts +0 -140
- package/dist_ts/mail/delivery/smtpserver/session-manager.js +0 -469
- package/dist_ts/mail/delivery/smtpserver/smtp-server.d.ts +0 -137
- package/dist_ts/mail/delivery/smtpserver/smtp-server.js +0 -666
- package/dist_ts/mail/delivery/smtpserver/starttls-handler.d.ts +0 -21
- package/dist_ts/mail/delivery/smtpserver/starttls-handler.js +0 -207
- package/dist_ts/mail/delivery/smtpserver/tls-handler.d.ts +0 -66
- package/dist_ts/mail/delivery/smtpserver/tls-handler.js +0 -261
- package/dist_ts/mail/delivery/smtpserver/utils/adaptive-logging.d.ts +0 -117
- package/dist_ts/mail/delivery/smtpserver/utils/adaptive-logging.js +0 -411
- package/dist_ts/mail/delivery/smtpserver/utils/helpers.d.ts +0 -78
- package/dist_ts/mail/delivery/smtpserver/utils/helpers.js +0 -208
- package/dist_ts/mail/delivery/smtpserver/utils/logging.d.ts +0 -106
- package/dist_ts/mail/delivery/smtpserver/utils/logging.js +0 -181
- package/dist_ts/mail/delivery/smtpserver/utils/validation.d.ts +0 -69
- package/dist_ts/mail/delivery/smtpserver/utils/validation.js +0 -360
- package/dist_ts/mail/index.d.ts +0 -8
- package/dist_ts/mail/index.js +0 -13
- package/dist_ts/mail/routing/classes.dns.manager.d.ts +0 -65
- package/dist_ts/mail/routing/classes.dns.manager.js +0 -413
- package/dist_ts/mail/routing/classes.dnsmanager.d.ts +0 -165
- package/dist_ts/mail/routing/classes.dnsmanager.js +0 -430
- package/dist_ts/mail/routing/classes.domain.registry.d.ts +0 -54
- package/dist_ts/mail/routing/classes.domain.registry.js +0 -118
- package/dist_ts/mail/routing/classes.email.config.d.ts +0 -64
- package/dist_ts/mail/routing/classes.email.config.js +0 -2
- package/dist_ts/mail/routing/classes.email.router.d.ts +0 -171
- package/dist_ts/mail/routing/classes.email.router.js +0 -491
- package/dist_ts/mail/routing/classes.unified.email.server.d.ts +0 -426
- package/dist_ts/mail/routing/classes.unified.email.server.js +0 -1454
- package/dist_ts/mail/routing/index.d.ts +0 -5
- package/dist_ts/mail/routing/index.js +0 -7
- package/dist_ts/mail/routing/interfaces.d.ts +0 -187
- package/dist_ts/mail/routing/interfaces.js +0 -2
- package/dist_ts/mail/security/classes.dkimcreator.d.ts +0 -68
- package/dist_ts/mail/security/classes.dkimcreator.js +0 -346
- package/dist_ts/mail/security/classes.dkimverifier.d.ts +0 -46
- package/dist_ts/mail/security/classes.dkimverifier.js +0 -317
- package/dist_ts/mail/security/classes.dmarcverifier.d.ts +0 -123
- package/dist_ts/mail/security/classes.dmarcverifier.js +0 -365
- package/dist_ts/mail/security/classes.spfverifier.d.ts +0 -103
- package/dist_ts/mail/security/classes.spfverifier.js +0 -492
- package/dist_ts/mail/security/index.d.ts +0 -4
- package/dist_ts/mail/security/index.js +0 -6
- package/dist_ts/opsserver/classes.opsserver.d.ts +0 -14
- package/dist_ts/opsserver/classes.opsserver.js +0 -37
- package/dist_ts/opsserver/index.d.ts +0 -1
- package/dist_ts/opsserver/index.js +0 -2
- package/dist_ts/paths.d.ts +0 -14
- package/dist_ts/paths.js +0 -39
- package/dist_ts/plugins.d.ts +0 -43
- package/dist_ts/plugins.js +0 -50
- package/dist_ts/security/classes.contentscanner.d.ts +0 -160
- package/dist_ts/security/classes.contentscanner.js +0 -634
- package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -150
- package/dist_ts/security/classes.ipreputationchecker.js +0 -508
- package/dist_ts/security/classes.securitylogger.d.ts +0 -140
- package/dist_ts/security/classes.securitylogger.js +0 -232
- package/dist_ts/security/index.d.ts +0 -3
- package/dist_ts/security/index.js +0 -4
- package/dist_ts/sms/classes.smsservice.d.ts +0 -15
- package/dist_ts/sms/classes.smsservice.js +0 -72
- package/dist_ts/sms/config/sms.config.d.ts +0 -93
- package/dist_ts/sms/config/sms.config.js +0 -2
- package/dist_ts/sms/config/sms.schema.d.ts +0 -5
- package/dist_ts/sms/config/sms.schema.js +0 -121
- package/dist_ts/sms/index.d.ts +0 -1
- package/dist_ts/sms/index.js +0 -2
- package/dist_ts/storage/classes.storagemanager.d.ts +0 -82
- package/dist_ts/storage/classes.storagemanager.js +0 -341
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
- package/dist_ts/ts/00_commitinfo_data.d.ts +0 -8
- package/dist_ts/ts/00_commitinfo_data.js +0 -9
- package/dist_ts/ts/classes.dcrouter.d.ts +0 -238
- package/dist_ts/ts/classes.dcrouter.js +0 -1008
- package/dist_ts/ts/config/index.d.ts +0 -1
- package/dist_ts/ts/config/index.js +0 -3
- package/dist_ts/ts/config/validator.d.ts +0 -104
- package/dist_ts/ts/config/validator.js +0 -152
- package/dist_ts/ts/deliverability/classes.ipwarmupmanager.d.ts +0 -253
- package/dist_ts/ts/deliverability/classes.ipwarmupmanager.js +0 -639
- package/dist_ts/ts/deliverability/classes.senderreputationmonitor.d.ts +0 -300
- package/dist_ts/ts/deliverability/classes.senderreputationmonitor.js +0 -961
- package/dist_ts/ts/deliverability/index.d.ts +0 -2
- package/dist_ts/ts/deliverability/index.js +0 -3
- package/dist_ts/ts/errors/base.errors.d.ts +0 -224
- package/dist_ts/ts/errors/base.errors.js +0 -310
- package/dist_ts/ts/errors/email.errors.d.ts +0 -175
- package/dist_ts/ts/errors/email.errors.js +0 -265
- package/dist_ts/ts/errors/error-handler.d.ts +0 -98
- package/dist_ts/ts/errors/error-handler.js +0 -282
- package/dist_ts/ts/errors/error.codes.d.ts +0 -115
- package/dist_ts/ts/errors/error.codes.js +0 -136
- package/dist_ts/ts/errors/index.d.ts +0 -56
- package/dist_ts/ts/errors/index.js +0 -138
- package/dist_ts/ts/errors/mta.errors.d.ts +0 -259
- package/dist_ts/ts/errors/mta.errors.js +0 -472
- package/dist_ts/ts/errors/reputation.errors.d.ts +0 -183
- package/dist_ts/ts/errors/reputation.errors.js +0 -292
- package/dist_ts/ts/index.d.ts +0 -4
- package/dist_ts/ts/index.js +0 -6
- package/dist_ts/ts/logger.d.ts +0 -17
- package/dist_ts/ts/logger.js +0 -77
- package/dist_ts/ts/mail/core/classes.bouncemanager.d.ts +0 -200
- package/dist_ts/ts/mail/core/classes.bouncemanager.js +0 -778
- package/dist_ts/ts/mail/core/classes.email.d.ts +0 -291
- package/dist_ts/ts/mail/core/classes.email.js +0 -780
- package/dist_ts/ts/mail/core/classes.emailvalidator.d.ts +0 -61
- package/dist_ts/ts/mail/core/classes.emailvalidator.js +0 -182
- package/dist_ts/ts/mail/core/classes.templatemanager.d.ts +0 -95
- package/dist_ts/ts/mail/core/classes.templatemanager.js +0 -239
- package/dist_ts/ts/mail/core/index.d.ts +0 -4
- package/dist_ts/ts/mail/core/index.js +0 -6
- package/dist_ts/ts/mail/delivery/classes.delivery.queue.d.ts +0 -163
- package/dist_ts/ts/mail/delivery/classes.delivery.queue.js +0 -485
- package/dist_ts/ts/mail/delivery/classes.delivery.system.d.ts +0 -186
- package/dist_ts/ts/mail/delivery/classes.delivery.system.js +0 -846
- package/dist_ts/ts/mail/delivery/classes.emailsendjob.d.ts +0 -84
- package/dist_ts/ts/mail/delivery/classes.emailsendjob.js +0 -362
- package/dist_ts/ts/mail/delivery/classes.emailsignjob.d.ts +0 -18
- package/dist_ts/ts/mail/delivery/classes.emailsignjob.js +0 -44
- package/dist_ts/ts/mail/delivery/classes.mta.config.d.ts +0 -22
- package/dist_ts/ts/mail/delivery/classes.mta.config.js +0 -51
- package/dist_ts/ts/mail/delivery/classes.ratelimiter.d.ts +0 -98
- package/dist_ts/ts/mail/delivery/classes.ratelimiter.js +0 -205
- package/dist_ts/ts/mail/delivery/classes.smtp.client.legacy.d.ts +0 -275
- package/dist_ts/ts/mail/delivery/classes.smtp.client.legacy.js +0 -973
- package/dist_ts/ts/mail/delivery/classes.unified.rate.limiter.d.ts +0 -200
- package/dist_ts/ts/mail/delivery/classes.unified.rate.limiter.js +0 -817
- package/dist_ts/ts/mail/delivery/index.d.ts +0 -12
- package/dist_ts/ts/mail/delivery/index.js +0 -18
- package/dist_ts/ts/mail/delivery/interfaces.d.ts +0 -243
- package/dist_ts/ts/mail/delivery/interfaces.js +0 -17
- package/dist_ts/ts/mail/delivery/smtpclient/auth-handler.d.ts +0 -43
- package/dist_ts/ts/mail/delivery/smtpclient/auth-handler.js +0 -188
- package/dist_ts/ts/mail/delivery/smtpclient/command-handler.d.ts +0 -67
- package/dist_ts/ts/mail/delivery/smtpclient/command-handler.js +0 -276
- package/dist_ts/ts/mail/delivery/smtpclient/connection-manager.d.ts +0 -48
- package/dist_ts/ts/mail/delivery/smtpclient/connection-manager.js +0 -238
- package/dist_ts/ts/mail/delivery/smtpclient/constants.d.ts +0 -129
- package/dist_ts/ts/mail/delivery/smtpclient/constants.js +0 -135
- package/dist_ts/ts/mail/delivery/smtpclient/create-client.d.ts +0 -22
- package/dist_ts/ts/mail/delivery/smtpclient/create-client.js +0 -86
- package/dist_ts/ts/mail/delivery/smtpclient/error-handler.d.ts +0 -28
- package/dist_ts/ts/mail/delivery/smtpclient/error-handler.js +0 -110
- package/dist_ts/ts/mail/delivery/smtpclient/index.d.ts +0 -16
- package/dist_ts/ts/mail/delivery/smtpclient/index.js +0 -21
- package/dist_ts/ts/mail/delivery/smtpclient/interfaces.d.ts +0 -183
- package/dist_ts/ts/mail/delivery/smtpclient/interfaces.js +0 -19
- package/dist_ts/ts/mail/delivery/smtpclient/smtp-client.d.ts +0 -58
- package/dist_ts/ts/mail/delivery/smtpclient/smtp-client.js +0 -279
- package/dist_ts/ts/mail/delivery/smtpclient/tls-handler.d.ts +0 -33
- package/dist_ts/ts/mail/delivery/smtpclient/tls-handler.js +0 -202
- package/dist_ts/ts/mail/delivery/smtpclient/utils/helpers.d.ts +0 -77
- package/dist_ts/ts/mail/delivery/smtpclient/utils/helpers.js +0 -196
- package/dist_ts/ts/mail/delivery/smtpclient/utils/logging.d.ts +0 -46
- package/dist_ts/ts/mail/delivery/smtpclient/utils/logging.js +0 -153
- package/dist_ts/ts/mail/delivery/smtpclient/utils/validation.d.ts +0 -38
- package/dist_ts/ts/mail/delivery/smtpclient/utils/validation.js +0 -139
- package/dist_ts/ts/mail/delivery/smtpserver/certificate-utils.d.ts +0 -45
- package/dist_ts/ts/mail/delivery/smtpserver/certificate-utils.js +0 -345
- package/dist_ts/ts/mail/delivery/smtpserver/command-handler.d.ts +0 -156
- package/dist_ts/ts/mail/delivery/smtpserver/command-handler.js +0 -1159
- package/dist_ts/ts/mail/delivery/smtpserver/connection-manager.d.ts +0 -159
- package/dist_ts/ts/mail/delivery/smtpserver/connection-manager.js +0 -894
- package/dist_ts/ts/mail/delivery/smtpserver/constants.d.ts +0 -130
- package/dist_ts/ts/mail/delivery/smtpserver/constants.js +0 -162
- package/dist_ts/ts/mail/delivery/smtpserver/create-server.d.ts +0 -14
- package/dist_ts/ts/mail/delivery/smtpserver/create-server.js +0 -28
- package/dist_ts/ts/mail/delivery/smtpserver/data-handler.d.ts +0 -123
- package/dist_ts/ts/mail/delivery/smtpserver/data-handler.js +0 -1148
- package/dist_ts/ts/mail/delivery/smtpserver/index.d.ts +0 -20
- package/dist_ts/ts/mail/delivery/smtpserver/index.js +0 -27
- package/dist_ts/ts/mail/delivery/smtpserver/interfaces.d.ts +0 -530
- package/dist_ts/ts/mail/delivery/smtpserver/interfaces.js +0 -10
- package/dist_ts/ts/mail/delivery/smtpserver/secure-server.d.ts +0 -15
- package/dist_ts/ts/mail/delivery/smtpserver/secure-server.js +0 -79
- package/dist_ts/ts/mail/delivery/smtpserver/security-handler.d.ts +0 -86
- package/dist_ts/ts/mail/delivery/smtpserver/security-handler.js +0 -234
- package/dist_ts/ts/mail/delivery/smtpserver/session-manager.d.ts +0 -140
- package/dist_ts/ts/mail/delivery/smtpserver/session-manager.js +0 -469
- package/dist_ts/ts/mail/delivery/smtpserver/smtp-server.d.ts +0 -137
- package/dist_ts/ts/mail/delivery/smtpserver/smtp-server.js +0 -666
- package/dist_ts/ts/mail/delivery/smtpserver/starttls-handler.d.ts +0 -21
- package/dist_ts/ts/mail/delivery/smtpserver/starttls-handler.js +0 -207
- package/dist_ts/ts/mail/delivery/smtpserver/tls-handler.d.ts +0 -66
- package/dist_ts/ts/mail/delivery/smtpserver/tls-handler.js +0 -261
- package/dist_ts/ts/mail/delivery/smtpserver/utils/adaptive-logging.d.ts +0 -117
- package/dist_ts/ts/mail/delivery/smtpserver/utils/adaptive-logging.js +0 -411
- package/dist_ts/ts/mail/delivery/smtpserver/utils/helpers.d.ts +0 -78
- package/dist_ts/ts/mail/delivery/smtpserver/utils/helpers.js +0 -208
- package/dist_ts/ts/mail/delivery/smtpserver/utils/logging.d.ts +0 -106
- package/dist_ts/ts/mail/delivery/smtpserver/utils/logging.js +0 -181
- package/dist_ts/ts/mail/delivery/smtpserver/utils/validation.d.ts +0 -69
- package/dist_ts/ts/mail/delivery/smtpserver/utils/validation.js +0 -360
- package/dist_ts/ts/mail/index.d.ts +0 -8
- package/dist_ts/ts/mail/index.js +0 -13
- package/dist_ts/ts/mail/routing/classes.dns.manager.d.ts +0 -65
- package/dist_ts/ts/mail/routing/classes.dns.manager.js +0 -413
- package/dist_ts/ts/mail/routing/classes.dnsmanager.d.ts +0 -165
- package/dist_ts/ts/mail/routing/classes.dnsmanager.js +0 -430
- package/dist_ts/ts/mail/routing/classes.domain.registry.d.ts +0 -54
- package/dist_ts/ts/mail/routing/classes.domain.registry.js +0 -118
- package/dist_ts/ts/mail/routing/classes.email.config.d.ts +0 -64
- package/dist_ts/ts/mail/routing/classes.email.config.js +0 -2
- package/dist_ts/ts/mail/routing/classes.email.router.d.ts +0 -171
- package/dist_ts/ts/mail/routing/classes.email.router.js +0 -491
- package/dist_ts/ts/mail/routing/classes.unified.email.server.d.ts +0 -426
- package/dist_ts/ts/mail/routing/classes.unified.email.server.js +0 -1454
- package/dist_ts/ts/mail/routing/index.d.ts +0 -5
- package/dist_ts/ts/mail/routing/index.js +0 -7
- package/dist_ts/ts/mail/routing/interfaces.d.ts +0 -187
- package/dist_ts/ts/mail/routing/interfaces.js +0 -2
- package/dist_ts/ts/mail/security/classes.dkimcreator.d.ts +0 -68
- package/dist_ts/ts/mail/security/classes.dkimcreator.js +0 -346
- package/dist_ts/ts/mail/security/classes.dkimverifier.d.ts +0 -46
- package/dist_ts/ts/mail/security/classes.dkimverifier.js +0 -317
- package/dist_ts/ts/mail/security/classes.dmarcverifier.d.ts +0 -123
- package/dist_ts/ts/mail/security/classes.dmarcverifier.js +0 -365
- package/dist_ts/ts/mail/security/classes.spfverifier.d.ts +0 -103
- package/dist_ts/ts/mail/security/classes.spfverifier.js +0 -492
- package/dist_ts/ts/mail/security/index.d.ts +0 -4
- package/dist_ts/ts/mail/security/index.js +0 -6
- package/dist_ts/ts/opsserver/classes.opsserver.d.ts +0 -20
- package/dist_ts/ts/opsserver/classes.opsserver.js +0 -44
- package/dist_ts/ts/opsserver/handlers/admin.handler.d.ts +0 -31
- package/dist_ts/ts/opsserver/handlers/admin.handler.js +0 -177
- package/dist_ts/ts/opsserver/handlers/config.handler.d.ts +0 -10
- package/dist_ts/ts/opsserver/handlers/config.handler.js +0 -100
- package/dist_ts/ts/opsserver/handlers/index.d.ts +0 -5
- package/dist_ts/ts/opsserver/handlers/index.js +0 -6
- package/dist_ts/ts/opsserver/handlers/logs.handler.d.ts +0 -10
- package/dist_ts/ts/opsserver/handlers/logs.handler.js +0 -121
- package/dist_ts/ts/opsserver/handlers/security.handler.d.ts +0 -11
- package/dist_ts/ts/opsserver/handlers/security.handler.js +0 -118
- package/dist_ts/ts/opsserver/handlers/stats.handler.d.ts +0 -13
- package/dist_ts/ts/opsserver/handlers/stats.handler.js +0 -233
- package/dist_ts/ts/opsserver/helpers/guards.d.ts +0 -25
- package/dist_ts/ts/opsserver/helpers/guards.js +0 -41
- package/dist_ts/ts/opsserver/index.d.ts +0 -1
- package/dist_ts/ts/opsserver/index.js +0 -2
- package/dist_ts/ts/paths.d.ts +0 -14
- package/dist_ts/ts/paths.js +0 -39
- package/dist_ts/ts/plugins.d.ts +0 -46
- package/dist_ts/ts/plugins.js +0 -53
- package/dist_ts/ts/security/classes.contentscanner.d.ts +0 -160
- package/dist_ts/ts/security/classes.contentscanner.js +0 -634
- package/dist_ts/ts/security/classes.ipreputationchecker.d.ts +0 -150
- package/dist_ts/ts/security/classes.ipreputationchecker.js +0 -508
- package/dist_ts/ts/security/classes.securitylogger.d.ts +0 -140
- package/dist_ts/ts/security/classes.securitylogger.js +0 -232
- package/dist_ts/ts/security/index.d.ts +0 -3
- package/dist_ts/ts/security/index.js +0 -4
- package/dist_ts/ts/sms/classes.smsservice.d.ts +0 -15
- package/dist_ts/ts/sms/classes.smsservice.js +0 -72
- package/dist_ts/ts/sms/config/sms.config.d.ts +0 -93
- package/dist_ts/ts/sms/config/sms.config.js +0 -2
- package/dist_ts/ts/sms/config/sms.schema.d.ts +0 -5
- package/dist_ts/ts/sms/config/sms.schema.js +0 -121
- package/dist_ts/ts/sms/index.d.ts +0 -1
- package/dist_ts/ts/sms/index.js +0 -2
- package/dist_ts/ts/storage/classes.storagemanager.d.ts +0 -82
- package/dist_ts/ts/storage/classes.storagemanager.js +0 -341
- package/dist_ts/ts/storage/index.d.ts +0 -1
- package/dist_ts/ts/storage/index.js +0 -3
- package/dist_ts/ts_interfaces/data/auth.d.ts +0 -8
- package/dist_ts/ts_interfaces/data/auth.js +0 -2
- package/dist_ts/ts_interfaces/data/index.d.ts +0 -2
- package/dist_ts/ts_interfaces/data/index.js +0 -3
- package/dist_ts/ts_interfaces/data/stats.d.ts +0 -93
- package/dist_ts/ts_interfaces/data/stats.js +0 -2
- package/dist_ts/ts_interfaces/index.d.ts +0 -5
- package/dist_ts/ts_interfaces/index.js +0 -8
- package/dist_ts/ts_interfaces/plugins.d.ts +0 -2
- package/dist_ts/ts_interfaces/plugins.js +0 -4
- package/dist_ts/ts_interfaces/requests/admin.d.ts +0 -31
- package/dist_ts/ts_interfaces/requests/admin.js +0 -3
- package/dist_ts/ts_interfaces/requests/config.d.ts +0 -25
- package/dist_ts/ts_interfaces/requests/config.js +0 -3
- package/dist_ts/ts_interfaces/requests/index.d.ts +0 -4
- package/dist_ts/ts_interfaces/requests/index.js +0 -5
- package/dist_ts/ts_interfaces/requests/logs.d.ts +0 -34
- package/dist_ts/ts_interfaces/requests/logs.js +0 -4
- package/dist_ts/ts_interfaces/requests/stats.d.ts +0 -131
- package/dist_ts/ts_interfaces/requests/stats.js +0 -4
- package/readme.opsserver.md +0 -351
- package/test/helpers/server.loader.ts +0 -347
- package/test/helpers/smtp.client.ts +0 -209
- package/test/helpers/utils.ts +0 -311
- package/test/suite/smtpclient_commands/test.ccmd-01.ehlo-helo-sending.ts +0 -168
- package/test/suite/smtpclient_commands/test.ccmd-02.mail-from-parameters.ts +0 -277
- package/test/suite/smtpclient_commands/test.ccmd-03.rcpt-to-multiple.ts +0 -283
- package/test/suite/smtpclient_commands/test.ccmd-04.data-transmission.ts +0 -274
- package/test/suite/smtpclient_commands/test.ccmd-05.auth-mechanisms.ts +0 -306
- package/test/suite/smtpclient_commands/test.ccmd-06.command-pipelining.ts +0 -233
- package/test/suite/smtpclient_commands/test.ccmd-07.response-parsing.ts +0 -243
- package/test/suite/smtpclient_commands/test.ccmd-08.rset-command.ts +0 -333
- package/test/suite/smtpclient_commands/test.ccmd-09.noop-command.ts +0 -339
- package/test/suite/smtpclient_commands/test.ccmd-10.vrfy-expn.ts +0 -457
- package/test/suite/smtpclient_commands/test.ccmd-11.help-command.ts +0 -409
- package/test/suite/smtpclient_connection/test.ccm-01.basic-tcp-connection.ts +0 -150
- package/test/suite/smtpclient_connection/test.ccm-02.tls-connection.ts +0 -140
- package/test/suite/smtpclient_connection/test.ccm-03.starttls-upgrade.ts +0 -208
- package/test/suite/smtpclient_connection/test.ccm-04.connection-pooling.ts +0 -250
- package/test/suite/smtpclient_connection/test.ccm-05.connection-reuse.ts +0 -288
- package/test/suite/smtpclient_connection/test.ccm-06.connection-timeout.ts +0 -267
- package/test/suite/smtpclient_connection/test.ccm-07.automatic-reconnection.ts +0 -324
- package/test/suite/smtpclient_connection/test.ccm-08.dns-resolution.ts +0 -139
- package/test/suite/smtpclient_connection/test.ccm-09.ipv6-dual-stack.ts +0 -167
- package/test/suite/smtpclient_connection/test.ccm-10.proxy-support.ts +0 -305
- package/test/suite/smtpclient_connection/test.ccm-11.keepalive.ts +0 -299
- package/test/suite/smtpclient_edge-cases/test.cedge-01.unusual-server-responses.ts +0 -529
- package/test/suite/smtpclient_edge-cases/test.cedge-02.malformed-commands.ts +0 -438
- package/test/suite/smtpclient_edge-cases/test.cedge-03.protocol-violations.ts +0 -446
- package/test/suite/smtpclient_edge-cases/test.cedge-04.resource-constraints.ts +0 -530
- package/test/suite/smtpclient_edge-cases/test.cedge-05.encoding-issues.ts +0 -145
- package/test/suite/smtpclient_edge-cases/test.cedge-06.large-headers.ts +0 -180
- package/test/suite/smtpclient_edge-cases/test.cedge-07.concurrent-operations.ts +0 -204
- package/test/suite/smtpclient_email-composition/test.cep-01.basic-headers.ts +0 -245
- package/test/suite/smtpclient_email-composition/test.cep-02.mime-multipart.ts +0 -321
- package/test/suite/smtpclient_email-composition/test.cep-03.attachment-encoding.ts +0 -334
- package/test/suite/smtpclient_email-composition/test.cep-04.bcc-handling.ts +0 -187
- package/test/suite/smtpclient_email-composition/test.cep-05.reply-to-return-path.ts +0 -277
- package/test/suite/smtpclient_email-composition/test.cep-06.utf8-international.ts +0 -235
- package/test/suite/smtpclient_email-composition/test.cep-07.html-inline-images.ts +0 -489
- package/test/suite/smtpclient_email-composition/test.cep-08.custom-headers.ts +0 -293
- package/test/suite/smtpclient_email-composition/test.cep-09.priority-importance.ts +0 -314
- package/test/suite/smtpclient_email-composition/test.cep-10.receipts-dsn.ts +0 -411
- package/test/suite/smtpclient_error-handling/test.cerr-01.4xx-errors.ts +0 -232
- package/test/suite/smtpclient_error-handling/test.cerr-02.5xx-errors.ts +0 -309
- package/test/suite/smtpclient_error-handling/test.cerr-03.network-failures.ts +0 -299
- package/test/suite/smtpclient_error-handling/test.cerr-04.greylisting-handling.ts +0 -255
- package/test/suite/smtpclient_error-handling/test.cerr-05.quota-exceeded.ts +0 -273
- package/test/suite/smtpclient_error-handling/test.cerr-06.invalid-recipients.ts +0 -320
- package/test/suite/smtpclient_error-handling/test.cerr-07.message-size-limits.ts +0 -320
- package/test/suite/smtpclient_error-handling/test.cerr-08.rate-limiting.ts +0 -261
- package/test/suite/smtpclient_error-handling/test.cerr-09.connection-pool-errors.ts +0 -299
- package/test/suite/smtpclient_error-handling/test.cerr-10.partial-failure.ts +0 -373
- package/test/suite/smtpclient_performance/test.cperf-01.bulk-sending.ts +0 -332
- package/test/suite/smtpclient_performance/test.cperf-02.message-throughput.ts +0 -304
- package/test/suite/smtpclient_performance/test.cperf-03.memory-usage.ts +0 -332
- package/test/suite/smtpclient_performance/test.cperf-04.cpu-utilization.ts +0 -373
- package/test/suite/smtpclient_performance/test.cperf-05.network-efficiency.ts +0 -181
- package/test/suite/smtpclient_performance/test.cperf-06.caching-strategies.ts +0 -190
- package/test/suite/smtpclient_performance/test.cperf-07.queue-management.ts +0 -171
- package/test/suite/smtpclient_performance/test.cperf-08.dns-caching.ts +0 -50
- package/test/suite/smtpclient_reliability/test.crel-01.reconnection-logic.ts +0 -305
- package/test/suite/smtpclient_reliability/test.crel-02.network-interruption.ts +0 -207
- package/test/suite/smtpclient_reliability/test.crel-03.queue-persistence.ts +0 -469
- package/test/suite/smtpclient_reliability/test.crel-04.crash-recovery.ts +0 -520
- package/test/suite/smtpclient_reliability/test.crel-05.memory-leaks.ts +0 -503
- package/test/suite/smtpclient_reliability/test.crel-06.concurrency-safety.ts +0 -558
- package/test/suite/smtpclient_reliability/test.crel-07.resource-cleanup.ts +0 -52
- package/test/suite/smtpclient_rfc-compliance/test.crfc-01.rfc5321-client.ts +0 -283
- package/test/suite/smtpclient_rfc-compliance/test.crfc-02.esmtp-compliance.ts +0 -77
- package/test/suite/smtpclient_rfc-compliance/test.crfc-03.command-syntax.ts +0 -67
- package/test/suite/smtpclient_rfc-compliance/test.crfc-04.response-codes.ts +0 -54
- package/test/suite/smtpclient_rfc-compliance/test.crfc-05.state-machine.ts +0 -703
- package/test/suite/smtpclient_rfc-compliance/test.crfc-06.protocol-negotiation.ts +0 -688
- package/test/suite/smtpclient_rfc-compliance/test.crfc-07.interoperability.ts +0 -728
- package/test/suite/smtpclient_rfc-compliance/test.crfc-08.smtp-extensions.ts +0 -656
- package/test/suite/smtpclient_security/test.csec-01.tls-verification.ts +0 -88
- package/test/suite/smtpclient_security/test.csec-02.oauth2-authentication.ts +0 -132
- package/test/suite/smtpclient_security/test.csec-03.dkim-signing.ts +0 -138
- package/test/suite/smtpclient_security/test.csec-04.spf-compliance.ts +0 -163
- package/test/suite/smtpclient_security/test.csec-05.dmarc-policy.ts +0 -200
- package/test/suite/smtpclient_security/test.csec-06.certificate-validation.ts +0 -145
- package/test/suite/smtpclient_security/test.csec-07.cipher-suites.ts +0 -153
- package/test/suite/smtpclient_security/test.csec-08.authentication-fallback.ts +0 -154
- package/test/suite/smtpclient_security/test.csec-09.relay-restrictions.ts +0 -166
- package/test/suite/smtpclient_security/test.csec-10.anti-spam-measures.ts +0 -196
- package/test/suite/smtpserver_commands/test.cmd-01.ehlo-command.ts +0 -193
- package/test/suite/smtpserver_commands/test.cmd-02.mail-from.ts +0 -330
- package/test/suite/smtpserver_commands/test.cmd-03.rcpt-to.ts +0 -296
- package/test/suite/smtpserver_commands/test.cmd-04.data-command.ts +0 -395
- package/test/suite/smtpserver_commands/test.cmd-05.noop-command.ts +0 -320
- package/test/suite/smtpserver_commands/test.cmd-06.rset-command.ts +0 -399
- package/test/suite/smtpserver_commands/test.cmd-07.vrfy-command.ts +0 -391
- package/test/suite/smtpserver_commands/test.cmd-08.expn-command.ts +0 -450
- package/test/suite/smtpserver_commands/test.cmd-09.size-extension.ts +0 -465
- package/test/suite/smtpserver_commands/test.cmd-10.help-command.ts +0 -454
- package/test/suite/smtpserver_commands/test.cmd-11.command-pipelining.ts +0 -334
- package/test/suite/smtpserver_commands/test.cmd-12.helo-command.ts +0 -420
- package/test/suite/smtpserver_commands/test.cmd-13.quit-command.ts +0 -384
- package/test/suite/smtpserver_connection/test.cm-01.tls-connection.ts +0 -61
- package/test/suite/smtpserver_connection/test.cm-02.multiple-connections.ts +0 -112
- package/test/suite/smtpserver_connection/test.cm-03.connection-timeout.ts +0 -134
- package/test/suite/smtpserver_connection/test.cm-04.connection-limits.ts +0 -374
- package/test/suite/smtpserver_connection/test.cm-05.connection-rejection.ts +0 -296
- package/test/suite/smtpserver_connection/test.cm-06.starttls-upgrade.ts +0 -468
- package/test/suite/smtpserver_connection/test.cm-07.abrupt-disconnection.ts +0 -321
- package/test/suite/smtpserver_connection/test.cm-08.tls-versions.ts +0 -361
- package/test/suite/smtpserver_connection/test.cm-09.tls-ciphers.ts +0 -556
- package/test/suite/smtpserver_connection/test.cm-10.plain-connection.ts +0 -293
- package/test/suite/smtpserver_connection/test.cm-11.keepalive.ts +0 -382
- package/test/suite/smtpserver_edge-cases/test.edge-01.very-large-email.ts +0 -239
- package/test/suite/smtpserver_edge-cases/test.edge-02.very-small-email.ts +0 -389
- package/test/suite/smtpserver_edge-cases/test.edge-03.invalid-character-handling.ts +0 -479
- package/test/suite/smtpserver_edge-cases/test.edge-04.empty-commands.ts +0 -430
- package/test/suite/smtpserver_edge-cases/test.edge-05.extremely-long-lines.ts +0 -425
- package/test/suite/smtpserver_edge-cases/test.edge-06.extremely-long-headers.ts +0 -404
- package/test/suite/smtpserver_edge-cases/test.edge-07.unusual-mime-types.ts +0 -333
- package/test/suite/smtpserver_edge-cases/test.edge-08.nested-mime-structures.ts +0 -379
- package/test/suite/smtpserver_email-processing/test.ep-01.basic-email-sending.ts +0 -338
- package/test/suite/smtpserver_email-processing/test.ep-02.invalid-email-addresses.ts +0 -315
- package/test/suite/smtpserver_email-processing/test.ep-03.multiple-recipients.ts +0 -493
- package/test/suite/smtpserver_email-processing/test.ep-04.large-email.ts +0 -528
- package/test/suite/smtpserver_email-processing/test.ep-05.mime-handling.ts +0 -515
- package/test/suite/smtpserver_email-processing/test.ep-06.attachment-handling.ts +0 -629
- package/test/suite/smtpserver_email-processing/test.ep-07.special-character-handling.ts +0 -462
- package/test/suite/smtpserver_email-processing/test.ep-08.email-routing.ts +0 -527
- package/test/suite/smtpserver_email-processing/test.ep-09.delivery-status-notifications.ts +0 -486
- package/test/suite/smtpserver_error-handling/test.err-01.syntax-errors.ts +0 -475
- package/test/suite/smtpserver_error-handling/test.err-02.invalid-sequence.ts +0 -450
- package/test/suite/smtpserver_error-handling/test.err-03.temporary-failures.ts +0 -453
- package/test/suite/smtpserver_error-handling/test.err-04.permanent-failures.ts +0 -325
- package/test/suite/smtpserver_error-handling/test.err-05.resource-exhaustion.ts +0 -302
- package/test/suite/smtpserver_error-handling/test.err-06.malformed-mime.ts +0 -374
- package/test/suite/smtpserver_error-handling/test.err-07.exception-handling.ts +0 -333
- package/test/suite/smtpserver_error-handling/test.err-08.error-logging.ts +0 -324
- package/test/suite/smtpserver_performance/test.perf-01.throughput.ts +0 -183
- package/test/suite/smtpserver_performance/test.perf-02.concurrency.ts +0 -388
- package/test/suite/smtpserver_performance/test.perf-03.cpu-utilization.ts +0 -245
- package/test/suite/smtpserver_performance/test.perf-04.memory-usage.ts +0 -238
- package/test/suite/smtpserver_performance/test.perf-05.connection-processing-time.ts +0 -363
- package/test/suite/smtpserver_performance/test.perf-06.message-processing-time.ts +0 -252
- package/test/suite/smtpserver_performance/test.perf-07.resource-cleanup.ts +0 -317
- package/test/suite/smtpserver_reliability/test.rel-01.long-running-operation.ts +0 -344
- package/test/suite/smtpserver_reliability/test.rel-02.restart-recovery.ts +0 -328
- package/test/suite/smtpserver_reliability/test.rel-03.resource-leak-detection.ts +0 -394
- package/test/suite/smtpserver_reliability/test.rel-04.error-recovery.ts +0 -401
- package/test/suite/smtpserver_reliability/test.rel-05.dns-resolution-failure.ts +0 -335
- package/test/suite/smtpserver_reliability/test.rel-06.network-interruption.ts +0 -410
- package/test/suite/smtpserver_rfc-compliance/test.rfc-01.rfc5321-compliance.ts +0 -382
- package/test/suite/smtpserver_rfc-compliance/test.rfc-02.rfc5322-compliance.ts +0 -428
- package/test/suite/smtpserver_rfc-compliance/test.rfc-03.rfc7208-spf-compliance.ts +0 -330
- package/test/suite/smtpserver_rfc-compliance/test.rfc-04.rfc6376-dkim-compliance.ts +0 -450
- package/test/suite/smtpserver_rfc-compliance/test.rfc-05.rfc7489-dmarc-compliance.ts +0 -408
- package/test/suite/smtpserver_rfc-compliance/test.rfc-06.rfc8314-tls-compliance.ts +0 -366
- package/test/suite/smtpserver_rfc-compliance/test.rfc-07.rfc3461-dsn-compliance.ts +0 -399
- package/test/suite/smtpserver_security/test.sec-01.authentication.ts +0 -218
- package/test/suite/smtpserver_security/test.sec-02.authorization.ts +0 -286
- package/test/suite/smtpserver_security/test.sec-03.dkim-processing.ts +0 -414
- package/test/suite/smtpserver_security/test.sec-04.spf-checking.ts +0 -280
- package/test/suite/smtpserver_security/test.sec-05.dmarc-policy.ts +0 -374
- package/test/suite/smtpserver_security/test.sec-06.ip-reputation.ts +0 -303
- package/test/suite/smtpserver_security/test.sec-07.content-scanning.ts +0 -409
- package/test/suite/smtpserver_security/test.sec-08.rate-limiting.ts +0 -324
- package/test/suite/smtpserver_security/test.sec-09.tls-certificate-validation.ts +0 -312
- package/test/suite/smtpserver_security/test.sec-10.header-injection-prevention.ts +0 -332
- package/test/suite/smtpserver_security/test.sec-11.bounce-management.ts +0 -363
- package/test/test.base.ts +0 -65
- package/test/test.bouncemanager.ts +0 -196
- package/test/test.deliverability.ts +0 -55
- package/test/test.dns-manager-creation.ts +0 -141
- package/test/test.dns-mode-switching.ts +0 -257
- package/test/test.dns-validation.ts +0 -283
- package/test/test.email-socket-handler.ts +0 -228
- package/test/test.email.integration.ts +0 -377
- package/test/test.email.router.ts +0 -283
- package/test/test.emailauth.ts +0 -195
- package/test/test.integration.storage.ts +0 -313
- package/test/test.integration.ts +0 -75
- package/test/test.ipwarmupmanager.ts +0 -323
- package/test/test.minimal.ts +0 -66
- package/test/test.rate-limiting-integration.ts +0 -236
- package/test/test.ratelimiter.ts +0 -141
- package/test/test.reputationmonitor.ts +0 -262
- package/test/test.smartmail.ts +0 -248
- package/test/test.smtp.client.compatibility.ts +0 -154
- package/test/test.smtp.client.ts +0 -191
- package/test/test.smtp.server.ts +0 -180
- package/test/test.socket-handler-integration.ts +0 -240
- package/test/test.socket-handler-unit.ts +0 -198
- package/ts/deliverability/classes.ipwarmupmanager.ts +0 -896
- package/ts/deliverability/classes.senderreputationmonitor.ts +0 -1244
- package/ts/deliverability/index.ts +0 -13
- package/ts/errors/email.errors.ts +0 -383
- package/ts/errors/mta.errors.ts +0 -681
- package/ts/mail/core/classes.bouncemanager.ts +0 -965
- package/ts/mail/core/classes.email.ts +0 -941
- package/ts/mail/core/classes.emailvalidator.ts +0 -239
- package/ts/mail/core/classes.templatemanager.ts +0 -320
- package/ts/mail/core/index.ts +0 -5
- package/ts/mail/delivery/classes.delivery.queue.ts +0 -645
- package/ts/mail/delivery/classes.delivery.system.ts +0 -1089
- package/ts/mail/delivery/classes.emailsendjob.ts +0 -447
- package/ts/mail/delivery/classes.emailsendjob.ts.backup +0 -691
- package/ts/mail/delivery/classes.emailsignjob.ts +0 -67
- package/ts/mail/delivery/classes.mta.config.ts +0 -73
- package/ts/mail/delivery/classes.ratelimiter.ts +0 -281
- package/ts/mail/delivery/classes.smtp.client.legacy.ts +0 -1422
- package/ts/mail/delivery/classes.unified.rate.limiter.ts +0 -1053
- package/ts/mail/delivery/index.ts +0 -24
- package/ts/mail/delivery/interfaces.ts +0 -291
- package/ts/mail/delivery/smtpclient/auth-handler.ts +0 -232
- package/ts/mail/delivery/smtpclient/command-handler.ts +0 -343
- package/ts/mail/delivery/smtpclient/connection-manager.ts +0 -289
- package/ts/mail/delivery/smtpclient/constants.ts +0 -145
- package/ts/mail/delivery/smtpclient/create-client.ts +0 -94
- package/ts/mail/delivery/smtpclient/error-handler.ts +0 -141
- package/ts/mail/delivery/smtpclient/index.ts +0 -24
- package/ts/mail/delivery/smtpclient/interfaces.ts +0 -242
- package/ts/mail/delivery/smtpclient/smtp-client.ts +0 -357
- package/ts/mail/delivery/smtpclient/tls-handler.ts +0 -254
- package/ts/mail/delivery/smtpclient/utils/helpers.ts +0 -224
- package/ts/mail/delivery/smtpclient/utils/logging.ts +0 -212
- package/ts/mail/delivery/smtpclient/utils/validation.ts +0 -170
- package/ts/mail/delivery/smtpserver/certificate-utils.ts +0 -398
- package/ts/mail/delivery/smtpserver/command-handler.ts +0 -1340
- package/ts/mail/delivery/smtpserver/connection-manager.ts +0 -1045
- package/ts/mail/delivery/smtpserver/constants.ts +0 -181
- package/ts/mail/delivery/smtpserver/create-server.ts +0 -31
- package/ts/mail/delivery/smtpserver/data-handler.ts +0 -1283
- package/ts/mail/delivery/smtpserver/index.ts +0 -32
- package/ts/mail/delivery/smtpserver/interfaces.ts +0 -655
- package/ts/mail/delivery/smtpserver/secure-server.ts +0 -97
- package/ts/mail/delivery/smtpserver/security-handler.ts +0 -345
- package/ts/mail/delivery/smtpserver/session-manager.ts +0 -557
- package/ts/mail/delivery/smtpserver/smtp-server.ts +0 -804
- package/ts/mail/delivery/smtpserver/starttls-handler.ts +0 -262
- package/ts/mail/delivery/smtpserver/tls-handler.ts +0 -346
- package/ts/mail/delivery/smtpserver/utils/adaptive-logging.ts +0 -514
- package/ts/mail/delivery/smtpserver/utils/helpers.ts +0 -246
- package/ts/mail/delivery/smtpserver/utils/logging.ts +0 -246
- package/ts/mail/delivery/smtpserver/utils/validation.ts +0 -436
- package/ts/mail/index.ts +0 -19
- package/ts/mail/routing/classes.dns.manager.ts +0 -563
- package/ts/mail/routing/classes.dnsmanager.ts +0 -559
- package/ts/mail/routing/classes.domain.registry.ts +0 -139
- package/ts/mail/routing/classes.email.config.ts +0 -82
- package/ts/mail/routing/classes.email.router.ts +0 -575
- package/ts/mail/routing/classes.unified.email.server.ts +0 -1873
- package/ts/mail/routing/index.ts +0 -6
- package/ts/mail/routing/interfaces.ts +0 -202
- package/ts/mail/security/classes.dkimcreator.ts +0 -431
- package/ts/mail/security/classes.dkimverifier.ts +0 -382
- package/ts/mail/security/classes.dmarcverifier.ts +0 -478
- package/ts/mail/security/classes.spfverifier.ts +0 -606
- package/ts/mail/security/index.ts +0 -5
- package/ts_web/elements/ops-view-stats.ts +0 -299
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* STARTTLS Implementation
|
|
3
|
-
* Provides an improved implementation for STARTTLS upgrades
|
|
4
|
-
*/
|
|
5
|
-
import * as plugins from '../../../plugins.js';
|
|
6
|
-
import type { ISmtpSession, ISessionManager, IConnectionManager } from './interfaces.js';
|
|
7
|
-
import { SmtpState } from '../interfaces.js';
|
|
8
|
-
/**
|
|
9
|
-
* Enhanced STARTTLS handler for more reliable TLS upgrades
|
|
10
|
-
*/
|
|
11
|
-
export declare function performStartTLS(socket: plugins.net.Socket, options: {
|
|
12
|
-
key: string;
|
|
13
|
-
cert: string;
|
|
14
|
-
ca?: string;
|
|
15
|
-
session?: ISmtpSession;
|
|
16
|
-
sessionManager?: ISessionManager;
|
|
17
|
-
connectionManager?: IConnectionManager;
|
|
18
|
-
onSuccess?: (tlsSocket: plugins.tls.TLSSocket) => void;
|
|
19
|
-
onFailure?: (error: Error) => void;
|
|
20
|
-
updateSessionState?: (session: ISmtpSession, state: SmtpState) => void;
|
|
21
|
-
}): Promise<plugins.tls.TLSSocket | undefined>;
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* STARTTLS Implementation
|
|
3
|
-
* Provides an improved implementation for STARTTLS upgrades
|
|
4
|
-
*/
|
|
5
|
-
import * as plugins from '../../../plugins.js';
|
|
6
|
-
import { SmtpLogger } from './utils/logging.js';
|
|
7
|
-
import { loadCertificatesFromString, createTlsOptions } from './certificate-utils.js';
|
|
8
|
-
import { getSocketDetails } from './utils/helpers.js';
|
|
9
|
-
import { SmtpState } from '../interfaces.js';
|
|
10
|
-
/**
|
|
11
|
-
* Enhanced STARTTLS handler for more reliable TLS upgrades
|
|
12
|
-
*/
|
|
13
|
-
export async function performStartTLS(socket, options) {
|
|
14
|
-
return new Promise((resolve) => {
|
|
15
|
-
try {
|
|
16
|
-
const socketDetails = getSocketDetails(socket);
|
|
17
|
-
SmtpLogger.info('Starting enhanced STARTTLS upgrade process', {
|
|
18
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
19
|
-
remotePort: socketDetails.remotePort
|
|
20
|
-
});
|
|
21
|
-
// Create a proper socket cleanup function
|
|
22
|
-
const cleanupSocket = () => {
|
|
23
|
-
// Remove all listeners to prevent memory leaks
|
|
24
|
-
socket.removeAllListeners('data');
|
|
25
|
-
socket.removeAllListeners('error');
|
|
26
|
-
socket.removeAllListeners('close');
|
|
27
|
-
socket.removeAllListeners('end');
|
|
28
|
-
socket.removeAllListeners('drain');
|
|
29
|
-
};
|
|
30
|
-
// Prepare the socket for TLS upgrade
|
|
31
|
-
socket.setNoDelay(true);
|
|
32
|
-
// Critical: make sure there's no pending data before TLS handshake
|
|
33
|
-
socket.pause();
|
|
34
|
-
// Add error handling for the base socket
|
|
35
|
-
const handleSocketError = (err) => {
|
|
36
|
-
SmtpLogger.error(`Socket error during STARTTLS preparation: ${err.message}`, {
|
|
37
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
38
|
-
remotePort: socketDetails.remotePort,
|
|
39
|
-
error: err,
|
|
40
|
-
stack: err.stack
|
|
41
|
-
});
|
|
42
|
-
if (options.onFailure) {
|
|
43
|
-
options.onFailure(err);
|
|
44
|
-
}
|
|
45
|
-
// Resolve with undefined to indicate failure
|
|
46
|
-
resolve(undefined);
|
|
47
|
-
};
|
|
48
|
-
socket.once('error', handleSocketError);
|
|
49
|
-
// Load certificates
|
|
50
|
-
let certificates;
|
|
51
|
-
try {
|
|
52
|
-
certificates = loadCertificatesFromString({
|
|
53
|
-
key: options.key,
|
|
54
|
-
cert: options.cert,
|
|
55
|
-
ca: options.ca
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
catch (certError) {
|
|
59
|
-
SmtpLogger.error(`Certificate error during STARTTLS: ${certError instanceof Error ? certError.message : String(certError)}`);
|
|
60
|
-
if (options.onFailure) {
|
|
61
|
-
options.onFailure(certError instanceof Error ? certError : new Error(String(certError)));
|
|
62
|
-
}
|
|
63
|
-
resolve(undefined);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
// Create TLS options optimized for STARTTLS
|
|
67
|
-
const tlsOptions = createTlsOptions(certificates, true);
|
|
68
|
-
// Create secure context
|
|
69
|
-
let secureContext;
|
|
70
|
-
try {
|
|
71
|
-
secureContext = plugins.tls.createSecureContext(tlsOptions);
|
|
72
|
-
}
|
|
73
|
-
catch (contextError) {
|
|
74
|
-
SmtpLogger.error(`Failed to create secure context: ${contextError instanceof Error ? contextError.message : String(contextError)}`);
|
|
75
|
-
if (options.onFailure) {
|
|
76
|
-
options.onFailure(contextError instanceof Error ? contextError : new Error(String(contextError)));
|
|
77
|
-
}
|
|
78
|
-
resolve(undefined);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
// Log STARTTLS upgrade attempt
|
|
82
|
-
SmtpLogger.debug('Attempting TLS socket upgrade with options', {
|
|
83
|
-
minVersion: tlsOptions.minVersion,
|
|
84
|
-
maxVersion: tlsOptions.maxVersion,
|
|
85
|
-
handshakeTimeout: tlsOptions.handshakeTimeout
|
|
86
|
-
});
|
|
87
|
-
// Use a safer approach to create the TLS socket
|
|
88
|
-
const handshakeTimeout = 30000; // 30 seconds timeout for TLS handshake
|
|
89
|
-
let handshakeTimeoutId;
|
|
90
|
-
// Create the TLS socket using a conservative approach for STARTTLS
|
|
91
|
-
const tlsSocket = new plugins.tls.TLSSocket(socket, {
|
|
92
|
-
isServer: true,
|
|
93
|
-
secureContext,
|
|
94
|
-
// Server-side options (simpler is more reliable for STARTTLS)
|
|
95
|
-
requestCert: false,
|
|
96
|
-
rejectUnauthorized: false
|
|
97
|
-
});
|
|
98
|
-
// Set up error handling for the TLS socket
|
|
99
|
-
tlsSocket.once('error', (err) => {
|
|
100
|
-
if (handshakeTimeoutId) {
|
|
101
|
-
clearTimeout(handshakeTimeoutId);
|
|
102
|
-
}
|
|
103
|
-
SmtpLogger.error(`TLS error during STARTTLS: ${err.message}`, {
|
|
104
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
105
|
-
remotePort: socketDetails.remotePort,
|
|
106
|
-
error: err,
|
|
107
|
-
stack: err.stack
|
|
108
|
-
});
|
|
109
|
-
// Clean up socket listeners
|
|
110
|
-
cleanupSocket();
|
|
111
|
-
if (options.onFailure) {
|
|
112
|
-
options.onFailure(err);
|
|
113
|
-
}
|
|
114
|
-
// Destroy the socket to ensure we don't have hanging connections
|
|
115
|
-
tlsSocket.destroy();
|
|
116
|
-
resolve(undefined);
|
|
117
|
-
});
|
|
118
|
-
// Set up handshake timeout manually for extra safety
|
|
119
|
-
handshakeTimeoutId = setTimeout(() => {
|
|
120
|
-
SmtpLogger.error('TLS handshake timed out', {
|
|
121
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
122
|
-
remotePort: socketDetails.remotePort
|
|
123
|
-
});
|
|
124
|
-
// Clean up socket listeners
|
|
125
|
-
cleanupSocket();
|
|
126
|
-
if (options.onFailure) {
|
|
127
|
-
options.onFailure(new Error('TLS handshake timed out'));
|
|
128
|
-
}
|
|
129
|
-
// Destroy the socket to ensure we don't have hanging connections
|
|
130
|
-
tlsSocket.destroy();
|
|
131
|
-
resolve(undefined);
|
|
132
|
-
}, handshakeTimeout);
|
|
133
|
-
// Set up handler for successful TLS negotiation
|
|
134
|
-
tlsSocket.once('secure', () => {
|
|
135
|
-
if (handshakeTimeoutId) {
|
|
136
|
-
clearTimeout(handshakeTimeoutId);
|
|
137
|
-
}
|
|
138
|
-
const protocol = tlsSocket.getProtocol();
|
|
139
|
-
const cipher = tlsSocket.getCipher();
|
|
140
|
-
SmtpLogger.info('TLS upgrade successful via STARTTLS', {
|
|
141
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
142
|
-
remotePort: socketDetails.remotePort,
|
|
143
|
-
protocol: protocol || 'unknown',
|
|
144
|
-
cipher: cipher?.name || 'unknown'
|
|
145
|
-
});
|
|
146
|
-
// Update socket mapping in session manager
|
|
147
|
-
if (options.sessionManager) {
|
|
148
|
-
const socketReplaced = options.sessionManager.replaceSocket(socket, tlsSocket);
|
|
149
|
-
if (!socketReplaced) {
|
|
150
|
-
SmtpLogger.error('Failed to replace socket in session manager after STARTTLS', {
|
|
151
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
152
|
-
remotePort: socketDetails.remotePort
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
// Re-attach event handlers from connection manager
|
|
157
|
-
if (options.connectionManager) {
|
|
158
|
-
try {
|
|
159
|
-
options.connectionManager.setupSocketEventHandlers(tlsSocket);
|
|
160
|
-
SmtpLogger.debug('Successfully re-attached connection manager event handlers to TLS socket', {
|
|
161
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
162
|
-
remotePort: socketDetails.remotePort
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
catch (handlerError) {
|
|
166
|
-
SmtpLogger.error('Failed to re-attach event handlers to TLS socket after STARTTLS', {
|
|
167
|
-
remoteAddress: socketDetails.remoteAddress,
|
|
168
|
-
remotePort: socketDetails.remotePort,
|
|
169
|
-
error: handlerError instanceof Error ? handlerError : new Error(String(handlerError))
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Update session if provided
|
|
174
|
-
if (options.session) {
|
|
175
|
-
// Update session properties to indicate TLS is active
|
|
176
|
-
options.session.useTLS = true;
|
|
177
|
-
options.session.secure = true;
|
|
178
|
-
// Reset session state as required by RFC 3207
|
|
179
|
-
// After STARTTLS, client must issue a new EHLO
|
|
180
|
-
if (options.updateSessionState) {
|
|
181
|
-
options.updateSessionState(options.session, SmtpState.GREETING);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
// Call success callback if provided
|
|
185
|
-
if (options.onSuccess) {
|
|
186
|
-
options.onSuccess(tlsSocket);
|
|
187
|
-
}
|
|
188
|
-
// Success - return the TLS socket
|
|
189
|
-
resolve(tlsSocket);
|
|
190
|
-
});
|
|
191
|
-
// Resume the socket after we've set up all handlers
|
|
192
|
-
// This allows the TLS handshake to proceed
|
|
193
|
-
socket.resume();
|
|
194
|
-
}
|
|
195
|
-
catch (error) {
|
|
196
|
-
SmtpLogger.error(`Unexpected error in STARTTLS: ${error instanceof Error ? error.message : String(error)}`, {
|
|
197
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
198
|
-
stack: error instanceof Error ? error.stack : 'No stack trace available'
|
|
199
|
-
});
|
|
200
|
-
if (options.onFailure) {
|
|
201
|
-
options.onFailure(error instanceof Error ? error : new Error(String(error)));
|
|
202
|
-
}
|
|
203
|
-
resolve(undefined);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnR0bHMtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL21haWwvZGVsaXZlcnkvc210cHNlcnZlci9zdGFydHRscy1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBRWpCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLE1BQTBCLEVBQzFCLE9BVUM7SUFFRCxPQUFPLElBQUksT0FBTyxDQUFvQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2hFLElBQUksQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRS9DLFVBQVUsQ0FBQyxJQUFJLENBQUMsNENBQTRDLEVBQUU7Z0JBQzVELGFBQWEsRUFBRSxhQUFhLENBQUMsYUFBYTtnQkFDMUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO2FBQ3JDLENBQUMsQ0FBQztZQUVILDBDQUEwQztZQUMxQyxNQUFNLGFBQWEsR0FBRyxHQUFHLEVBQUU7Z0JBQ3pCLCtDQUErQztnQkFDL0MsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkMsTUFBTSxDQUFDLGtCQUFrQixD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
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMTP TLS Handler
|
|
3
|
-
* Responsible for handling TLS-related SMTP functionality
|
|
4
|
-
*/
|
|
5
|
-
import * as plugins from '../../../plugins.js';
|
|
6
|
-
import type { ITlsHandler, ISmtpServer, ISmtpSession } from './interfaces.js';
|
|
7
|
-
/**
|
|
8
|
-
* Handles TLS functionality for SMTP server
|
|
9
|
-
*/
|
|
10
|
-
export declare class TlsHandler implements ITlsHandler {
|
|
11
|
-
/**
|
|
12
|
-
* Reference to the SMTP server instance
|
|
13
|
-
*/
|
|
14
|
-
private smtpServer;
|
|
15
|
-
/**
|
|
16
|
-
* Certificate data
|
|
17
|
-
*/
|
|
18
|
-
private certificates;
|
|
19
|
-
/**
|
|
20
|
-
* TLS options
|
|
21
|
-
*/
|
|
22
|
-
private options;
|
|
23
|
-
/**
|
|
24
|
-
* Creates a new TLS handler
|
|
25
|
-
* @param smtpServer - SMTP server instance
|
|
26
|
-
*/
|
|
27
|
-
constructor(smtpServer: ISmtpServer);
|
|
28
|
-
/**
|
|
29
|
-
* Handle STARTTLS command
|
|
30
|
-
* @param socket - Client socket
|
|
31
|
-
*/
|
|
32
|
-
handleStartTls(socket: plugins.net.Socket, session: ISmtpSession): Promise<plugins.tls.TLSSocket | null>;
|
|
33
|
-
/**
|
|
34
|
-
* Upgrade a connection to TLS
|
|
35
|
-
* @param socket - Client socket
|
|
36
|
-
*/
|
|
37
|
-
startTLS(socket: plugins.net.Socket): Promise<plugins.tls.TLSSocket>;
|
|
38
|
-
/**
|
|
39
|
-
* Create a secure server
|
|
40
|
-
* @returns TLS server instance or undefined if TLS is not enabled
|
|
41
|
-
*/
|
|
42
|
-
createSecureServer(): plugins.tls.Server | undefined;
|
|
43
|
-
/**
|
|
44
|
-
* Check if TLS is enabled
|
|
45
|
-
* @returns Whether TLS is enabled
|
|
46
|
-
*/
|
|
47
|
-
isTlsEnabled(): boolean;
|
|
48
|
-
/**
|
|
49
|
-
* Send a response to the client
|
|
50
|
-
* @param socket - Client socket
|
|
51
|
-
* @param response - Response message
|
|
52
|
-
*/
|
|
53
|
-
private sendResponse;
|
|
54
|
-
/**
|
|
55
|
-
* Check if TLS is available (interface requirement)
|
|
56
|
-
*/
|
|
57
|
-
isTlsAvailable(): boolean;
|
|
58
|
-
/**
|
|
59
|
-
* Get TLS options (interface requirement)
|
|
60
|
-
*/
|
|
61
|
-
getTlsOptions(): plugins.tls.TlsOptions;
|
|
62
|
-
/**
|
|
63
|
-
* Clean up resources
|
|
64
|
-
*/
|
|
65
|
-
destroy(): void;
|
|
66
|
-
}
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMTP TLS Handler
|
|
3
|
-
* Responsible for handling TLS-related SMTP functionality
|
|
4
|
-
*/
|
|
5
|
-
import * as plugins from '../../../plugins.js';
|
|
6
|
-
import { SmtpResponseCode, SecurityEventType, SecurityLogLevel } from './constants.js';
|
|
7
|
-
import { SmtpLogger } from './utils/logging.js';
|
|
8
|
-
import { getSocketDetails, getTlsDetails } from './utils/helpers.js';
|
|
9
|
-
import { loadCertificatesFromString, generateSelfSignedCertificates, createTlsOptions } from './certificate-utils.js';
|
|
10
|
-
import { SmtpState } from '../interfaces.js';
|
|
11
|
-
/**
|
|
12
|
-
* Handles TLS functionality for SMTP server
|
|
13
|
-
*/
|
|
14
|
-
export class TlsHandler {
|
|
15
|
-
/**
|
|
16
|
-
* Creates a new TLS handler
|
|
17
|
-
* @param smtpServer - SMTP server instance
|
|
18
|
-
*/
|
|
19
|
-
constructor(smtpServer) {
|
|
20
|
-
this.smtpServer = smtpServer;
|
|
21
|
-
// Initialize certificates
|
|
22
|
-
const serverOptions = this.smtpServer.getOptions();
|
|
23
|
-
try {
|
|
24
|
-
// Try to load certificates from provided options
|
|
25
|
-
this.certificates = loadCertificatesFromString({
|
|
26
|
-
key: serverOptions.key,
|
|
27
|
-
cert: serverOptions.cert,
|
|
28
|
-
ca: serverOptions.ca
|
|
29
|
-
});
|
|
30
|
-
SmtpLogger.info('Successfully loaded TLS certificates');
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
SmtpLogger.warn(`Failed to load certificates from options, using self-signed: ${error instanceof Error ? error.message : String(error)}`);
|
|
34
|
-
// Fall back to self-signed certificates for testing
|
|
35
|
-
this.certificates = generateSelfSignedCertificates();
|
|
36
|
-
}
|
|
37
|
-
// Initialize TLS options
|
|
38
|
-
this.options = createTlsOptions(this.certificates);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Handle STARTTLS command
|
|
42
|
-
* @param socket - Client socket
|
|
43
|
-
*/
|
|
44
|
-
async handleStartTls(socket, session) {
|
|
45
|
-
// Check if already using TLS
|
|
46
|
-
if (session.useTLS) {
|
|
47
|
-
this.sendResponse(socket, `${SmtpResponseCode.BAD_SEQUENCE} TLS already active`);
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
// Check if we have the necessary TLS certificates
|
|
51
|
-
if (!this.isTlsEnabled()) {
|
|
52
|
-
this.sendResponse(socket, `${SmtpResponseCode.TLS_UNAVAILABLE_TEMP} TLS not available`);
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
// Send ready for TLS response
|
|
56
|
-
this.sendResponse(socket, `${SmtpResponseCode.SERVICE_READY} Ready to start TLS`);
|
|
57
|
-
// Upgrade the connection to TLS
|
|
58
|
-
try {
|
|
59
|
-
const tlsSocket = await this.startTLS(socket);
|
|
60
|
-
return tlsSocket;
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
SmtpLogger.error(`STARTTLS negotiation failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
64
|
-
sessionId: session.id,
|
|
65
|
-
remoteAddress: session.remoteAddress,
|
|
66
|
-
error: error instanceof Error ? error : new Error(String(error))
|
|
67
|
-
});
|
|
68
|
-
// Log security event
|
|
69
|
-
SmtpLogger.logSecurityEvent(SecurityLogLevel.ERROR, SecurityEventType.TLS_NEGOTIATION, 'STARTTLS negotiation failed', { error: error instanceof Error ? error.message : String(error) }, session.remoteAddress);
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Upgrade a connection to TLS
|
|
75
|
-
* @param socket - Client socket
|
|
76
|
-
*/
|
|
77
|
-
async startTLS(socket) {
|
|
78
|
-
// Get the session for this socket
|
|
79
|
-
const session = this.smtpServer.getSessionManager().getSession(socket);
|
|
80
|
-
try {
|
|
81
|
-
// Import the enhanced STARTTLS handler
|
|
82
|
-
// This uses a more robust approach to TLS upgrades
|
|
83
|
-
const { performStartTLS } = await import('./starttls-handler.js');
|
|
84
|
-
SmtpLogger.info('Using enhanced STARTTLS implementation');
|
|
85
|
-
// Use the enhanced STARTTLS handler with better error handling and socket management
|
|
86
|
-
const serverOptions = this.smtpServer.getOptions();
|
|
87
|
-
const tlsSocket = await performStartTLS(socket, {
|
|
88
|
-
key: serverOptions.key,
|
|
89
|
-
cert: serverOptions.cert,
|
|
90
|
-
ca: serverOptions.ca,
|
|
91
|
-
session: session,
|
|
92
|
-
sessionManager: this.smtpServer.getSessionManager(),
|
|
93
|
-
connectionManager: this.smtpServer.getConnectionManager(),
|
|
94
|
-
// Callback for successful upgrade
|
|
95
|
-
onSuccess: (secureSocket) => {
|
|
96
|
-
SmtpLogger.info('TLS connection successfully established via enhanced STARTTLS', {
|
|
97
|
-
remoteAddress: secureSocket.remoteAddress,
|
|
98
|
-
remotePort: secureSocket.remotePort,
|
|
99
|
-
protocol: secureSocket.getProtocol() || 'unknown',
|
|
100
|
-
cipher: secureSocket.getCipher()?.name || 'unknown'
|
|
101
|
-
});
|
|
102
|
-
// Log security event
|
|
103
|
-
SmtpLogger.logSecurityEvent(SecurityLogLevel.INFO, SecurityEventType.TLS_NEGOTIATION, 'STARTTLS successful with enhanced implementation', {
|
|
104
|
-
protocol: secureSocket.getProtocol(),
|
|
105
|
-
cipher: secureSocket.getCipher()?.name
|
|
106
|
-
}, secureSocket.remoteAddress, undefined, true);
|
|
107
|
-
},
|
|
108
|
-
// Callback for failed upgrade
|
|
109
|
-
onFailure: (error) => {
|
|
110
|
-
SmtpLogger.error(`Enhanced STARTTLS failed: ${error.message}`, {
|
|
111
|
-
sessionId: session?.id,
|
|
112
|
-
remoteAddress: socket.remoteAddress,
|
|
113
|
-
error
|
|
114
|
-
});
|
|
115
|
-
// Log security event
|
|
116
|
-
SmtpLogger.logSecurityEvent(SecurityLogLevel.ERROR, SecurityEventType.TLS_NEGOTIATION, 'Enhanced STARTTLS failed', { error: error.message }, socket.remoteAddress, undefined, false);
|
|
117
|
-
},
|
|
118
|
-
// Function to update session state
|
|
119
|
-
updateSessionState: this.smtpServer.getSessionManager().updateSessionState?.bind(this.smtpServer.getSessionManager())
|
|
120
|
-
});
|
|
121
|
-
// If STARTTLS failed with the enhanced implementation, log the error
|
|
122
|
-
if (!tlsSocket) {
|
|
123
|
-
SmtpLogger.warn('Enhanced STARTTLS implementation failed to create TLS socket', {
|
|
124
|
-
sessionId: session?.id,
|
|
125
|
-
remoteAddress: socket.remoteAddress
|
|
126
|
-
});
|
|
127
|
-
throw new Error('Failed to create TLS socket');
|
|
128
|
-
}
|
|
129
|
-
return tlsSocket;
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
// Log STARTTLS failure
|
|
133
|
-
SmtpLogger.error(`Failed to upgrade connection to TLS: ${error instanceof Error ? error.message : String(error)}`, {
|
|
134
|
-
remoteAddress: socket.remoteAddress,
|
|
135
|
-
remotePort: socket.remotePort,
|
|
136
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
137
|
-
stack: error instanceof Error ? error.stack : 'No stack trace available'
|
|
138
|
-
});
|
|
139
|
-
// Log security event
|
|
140
|
-
SmtpLogger.logSecurityEvent(SecurityLogLevel.ERROR, SecurityEventType.TLS_NEGOTIATION, 'Failed to upgrade connection to TLS', {
|
|
141
|
-
error: error instanceof Error ? error.message : String(error),
|
|
142
|
-
stack: error instanceof Error ? error.stack : 'No stack trace available'
|
|
143
|
-
}, socket.remoteAddress, undefined, false);
|
|
144
|
-
// Destroy the socket on error
|
|
145
|
-
socket.destroy();
|
|
146
|
-
throw error;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Create a secure server
|
|
151
|
-
* @returns TLS server instance or undefined if TLS is not enabled
|
|
152
|
-
*/
|
|
153
|
-
createSecureServer() {
|
|
154
|
-
if (!this.isTlsEnabled()) {
|
|
155
|
-
return undefined;
|
|
156
|
-
}
|
|
157
|
-
try {
|
|
158
|
-
SmtpLogger.info('Creating secure TLS server');
|
|
159
|
-
// Log certificate info
|
|
160
|
-
SmtpLogger.debug('Using certificates for secure server', {
|
|
161
|
-
keyLength: this.certificates.key.length,
|
|
162
|
-
certLength: this.certificates.cert.length,
|
|
163
|
-
caLength: this.certificates.ca ? this.certificates.ca.length : 0
|
|
164
|
-
});
|
|
165
|
-
// Create TLS options using our certificate utilities
|
|
166
|
-
// This ensures proper PEM format handling and protocol negotiation
|
|
167
|
-
const tlsOptions = createTlsOptions(this.certificates, true); // Use server options
|
|
168
|
-
SmtpLogger.info('Creating TLS server with options', {
|
|
169
|
-
minVersion: tlsOptions.minVersion,
|
|
170
|
-
maxVersion: tlsOptions.maxVersion,
|
|
171
|
-
handshakeTimeout: tlsOptions.handshakeTimeout
|
|
172
|
-
});
|
|
173
|
-
// Create a server with wider TLS compatibility
|
|
174
|
-
const server = new plugins.tls.Server(tlsOptions);
|
|
175
|
-
// Add error handling
|
|
176
|
-
server.on('error', (err) => {
|
|
177
|
-
SmtpLogger.error(`TLS server error: ${err.message}`, {
|
|
178
|
-
error: err,
|
|
179
|
-
stack: err.stack
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
// Log TLS details for each connection
|
|
183
|
-
server.on('secureConnection', (socket) => {
|
|
184
|
-
SmtpLogger.info('New secure connection established', {
|
|
185
|
-
protocol: socket.getProtocol(),
|
|
186
|
-
cipher: socket.getCipher()?.name,
|
|
187
|
-
remoteAddress: socket.remoteAddress,
|
|
188
|
-
remotePort: socket.remotePort
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
return server;
|
|
192
|
-
}
|
|
193
|
-
catch (error) {
|
|
194
|
-
SmtpLogger.error(`Failed to create secure server: ${error instanceof Error ? error.message : String(error)}`, {
|
|
195
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
196
|
-
stack: error instanceof Error ? error.stack : 'No stack trace available'
|
|
197
|
-
});
|
|
198
|
-
return undefined;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Check if TLS is enabled
|
|
203
|
-
* @returns Whether TLS is enabled
|
|
204
|
-
*/
|
|
205
|
-
isTlsEnabled() {
|
|
206
|
-
const options = this.smtpServer.getOptions();
|
|
207
|
-
return !!(options.key && options.cert);
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Send a response to the client
|
|
211
|
-
* @param socket - Client socket
|
|
212
|
-
* @param response - Response message
|
|
213
|
-
*/
|
|
214
|
-
sendResponse(socket, response) {
|
|
215
|
-
// Check if socket is still writable before attempting to write
|
|
216
|
-
if (socket.destroyed || socket.readyState !== 'open' || !socket.writable) {
|
|
217
|
-
SmtpLogger.debug(`Skipping response to closed/destroyed socket: ${response}`, {
|
|
218
|
-
remoteAddress: socket.remoteAddress,
|
|
219
|
-
remotePort: socket.remotePort,
|
|
220
|
-
destroyed: socket.destroyed,
|
|
221
|
-
readyState: socket.readyState,
|
|
222
|
-
writable: socket.writable
|
|
223
|
-
});
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
try {
|
|
227
|
-
socket.write(`${response}\r\n`);
|
|
228
|
-
SmtpLogger.logResponse(response, socket);
|
|
229
|
-
}
|
|
230
|
-
catch (error) {
|
|
231
|
-
SmtpLogger.error(`Error sending response: ${error instanceof Error ? error.message : String(error)}`, {
|
|
232
|
-
response,
|
|
233
|
-
remoteAddress: socket.remoteAddress,
|
|
234
|
-
remotePort: socket.remotePort,
|
|
235
|
-
error: error instanceof Error ? error : new Error(String(error))
|
|
236
|
-
});
|
|
237
|
-
socket.destroy();
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Check if TLS is available (interface requirement)
|
|
242
|
-
*/
|
|
243
|
-
isTlsAvailable() {
|
|
244
|
-
return this.isTlsEnabled();
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Get TLS options (interface requirement)
|
|
248
|
-
*/
|
|
249
|
-
getTlsOptions() {
|
|
250
|
-
return this.options;
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Clean up resources
|
|
254
|
-
*/
|
|
255
|
-
destroy() {
|
|
256
|
-
// Clear any cached certificates or TLS contexts
|
|
257
|
-
// TlsHandler doesn't have timers but may have cached resources
|
|
258
|
-
SmtpLogger.debug('TlsHandler destroyed');
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxzLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9tYWlsL2RlbGl2ZXJ5L3NtdHBzZXJ2ZXIvdGxzLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsOEJBQThCLEVBQzlCLGdCQUFnQixFQUVqQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBZ0JyQjs7O09BR0c7SUFDSCxZQUFZLFVBQXVCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBRTdCLDBCQUEwQjtRQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQztZQUNILGlEQUFpRDtZQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLDBCQUEwQixDQUFDO2dCQUM3QyxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUc7Z0JBQ3RCLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSTtnQkFDeEIsRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFO2FBQ3JCLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZ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
|