@push.rocks/smartmta 5.1.2 → 5.2.0

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.
Files changed (99) hide show
  1. package/changelog.md +14 -0
  2. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  3. package/dist_ts/00_commitinfo_data.js +9 -0
  4. package/dist_ts/index.d.ts +3 -0
  5. package/dist_ts/index.js +4 -0
  6. package/dist_ts/logger.d.ts +17 -0
  7. package/dist_ts/logger.js +76 -0
  8. package/dist_ts/mail/core/classes.bouncemanager.d.ts +185 -0
  9. package/dist_ts/mail/core/classes.bouncemanager.js +569 -0
  10. package/dist_ts/mail/core/classes.email.d.ts +291 -0
  11. package/dist_ts/mail/core/classes.email.js +802 -0
  12. package/dist_ts/mail/core/classes.emailvalidator.d.ts +61 -0
  13. package/dist_ts/mail/core/classes.emailvalidator.js +184 -0
  14. package/dist_ts/mail/core/classes.templatemanager.d.ts +95 -0
  15. package/dist_ts/mail/core/classes.templatemanager.js +240 -0
  16. package/dist_ts/mail/core/index.d.ts +4 -0
  17. package/dist_ts/mail/core/index.js +6 -0
  18. package/dist_ts/mail/delivery/classes.delivery.queue.d.ts +163 -0
  19. package/dist_ts/mail/delivery/classes.delivery.queue.js +488 -0
  20. package/dist_ts/mail/delivery/classes.delivery.system.d.ts +160 -0
  21. package/dist_ts/mail/delivery/classes.delivery.system.js +630 -0
  22. package/dist_ts/mail/delivery/classes.unified.rate.limiter.d.ts +200 -0
  23. package/dist_ts/mail/delivery/classes.unified.rate.limiter.js +820 -0
  24. package/dist_ts/mail/delivery/index.d.ts +4 -0
  25. package/dist_ts/mail/delivery/index.js +6 -0
  26. package/dist_ts/mail/delivery/interfaces.d.ts +140 -0
  27. package/dist_ts/mail/delivery/interfaces.js +17 -0
  28. package/dist_ts/mail/index.d.ts +7 -0
  29. package/dist_ts/mail/index.js +12 -0
  30. package/dist_ts/mail/routing/classes.dkim.manager.d.ts +25 -0
  31. package/dist_ts/mail/routing/classes.dkim.manager.js +127 -0
  32. package/dist_ts/mail/routing/classes.dns.manager.d.ts +79 -0
  33. package/dist_ts/mail/routing/classes.dns.manager.js +415 -0
  34. package/dist_ts/mail/routing/classes.domain.registry.d.ts +54 -0
  35. package/dist_ts/mail/routing/classes.domain.registry.js +119 -0
  36. package/dist_ts/mail/routing/classes.email.action.executor.d.ts +33 -0
  37. package/dist_ts/mail/routing/classes.email.action.executor.js +137 -0
  38. package/dist_ts/mail/routing/classes.email.router.d.ts +171 -0
  39. package/dist_ts/mail/routing/classes.email.router.js +494 -0
  40. package/dist_ts/mail/routing/classes.unified.email.server.d.ts +241 -0
  41. package/dist_ts/mail/routing/classes.unified.email.server.js +935 -0
  42. package/dist_ts/mail/routing/index.d.ts +7 -0
  43. package/dist_ts/mail/routing/index.js +9 -0
  44. package/dist_ts/mail/routing/interfaces.d.ts +187 -0
  45. package/dist_ts/mail/routing/interfaces.js +2 -0
  46. package/dist_ts/mail/security/classes.dkimcreator.d.ts +72 -0
  47. package/dist_ts/mail/security/classes.dkimcreator.js +360 -0
  48. package/dist_ts/mail/security/classes.spfverifier.d.ts +62 -0
  49. package/dist_ts/mail/security/classes.spfverifier.js +87 -0
  50. package/dist_ts/mail/security/index.d.ts +2 -0
  51. package/dist_ts/mail/security/index.js +4 -0
  52. package/dist_ts/paths.d.ts +14 -0
  53. package/dist_ts/paths.js +39 -0
  54. package/dist_ts/plugins.d.ts +24 -0
  55. package/dist_ts/plugins.js +28 -0
  56. package/dist_ts/security/classes.contentscanner.d.ts +130 -0
  57. package/dist_ts/security/classes.contentscanner.js +338 -0
  58. package/dist_ts/security/classes.ipreputationchecker.d.ts +73 -0
  59. package/dist_ts/security/classes.ipreputationchecker.js +263 -0
  60. package/dist_ts/security/classes.rustsecuritybridge.d.ts +398 -0
  61. package/dist_ts/security/classes.rustsecuritybridge.js +484 -0
  62. package/dist_ts/security/classes.securitylogger.d.ts +140 -0
  63. package/dist_ts/security/classes.securitylogger.js +235 -0
  64. package/dist_ts/security/index.d.ts +4 -0
  65. package/dist_ts/security/index.js +5 -0
  66. package/package.json +6 -1
  67. package/readme.md +52 -9
  68. package/ts/00_commitinfo_data.ts +8 -0
  69. package/ts/index.ts +3 -0
  70. package/ts/logger.ts +91 -0
  71. package/ts/mail/core/classes.bouncemanager.ts +731 -0
  72. package/ts/mail/core/classes.email.ts +942 -0
  73. package/ts/mail/core/classes.emailvalidator.ts +239 -0
  74. package/ts/mail/core/classes.templatemanager.ts +320 -0
  75. package/ts/mail/core/index.ts +5 -0
  76. package/ts/mail/delivery/classes.delivery.queue.ts +645 -0
  77. package/ts/mail/delivery/classes.delivery.system.ts +816 -0
  78. package/ts/mail/delivery/classes.unified.rate.limiter.ts +1053 -0
  79. package/ts/mail/delivery/index.ts +5 -0
  80. package/ts/mail/delivery/interfaces.ts +167 -0
  81. package/ts/mail/index.ts +17 -0
  82. package/ts/mail/routing/classes.dkim.manager.ts +157 -0
  83. package/ts/mail/routing/classes.dns.manager.ts +573 -0
  84. package/ts/mail/routing/classes.domain.registry.ts +139 -0
  85. package/ts/mail/routing/classes.email.action.executor.ts +175 -0
  86. package/ts/mail/routing/classes.email.router.ts +575 -0
  87. package/ts/mail/routing/classes.unified.email.server.ts +1207 -0
  88. package/ts/mail/routing/index.ts +9 -0
  89. package/ts/mail/routing/interfaces.ts +202 -0
  90. package/ts/mail/security/classes.dkimcreator.ts +447 -0
  91. package/ts/mail/security/classes.spfverifier.ts +126 -0
  92. package/ts/mail/security/index.ts +3 -0
  93. package/ts/paths.ts +48 -0
  94. package/ts/plugins.ts +53 -0
  95. package/ts/security/classes.contentscanner.ts +400 -0
  96. package/ts/security/classes.ipreputationchecker.ts +315 -0
  97. package/ts/security/classes.rustsecuritybridge.ts +943 -0
  98. package/ts/security/classes.securitylogger.ts +299 -0
  99. package/ts/security/index.ts +40 -0
@@ -0,0 +1,200 @@
1
+ import { EventEmitter } from 'node:events';
2
+ /**
3
+ * Interface for rate limit configuration
4
+ */
5
+ export interface IRateLimitConfig {
6
+ maxMessagesPerMinute?: number;
7
+ maxRecipientsPerMessage?: number;
8
+ maxConnectionsPerIP?: number;
9
+ maxErrorsPerIP?: number;
10
+ maxAuthFailuresPerIP?: number;
11
+ blockDuration?: number;
12
+ }
13
+ /**
14
+ * Interface for hierarchical rate limits
15
+ */
16
+ export interface IHierarchicalRateLimits {
17
+ global: IRateLimitConfig;
18
+ patterns?: Record<string, IRateLimitConfig>;
19
+ ips?: Record<string, IRateLimitConfig>;
20
+ domains?: Record<string, IRateLimitConfig>;
21
+ blocks?: Record<string, number>;
22
+ }
23
+ /**
24
+ * Rate limiter statistics
25
+ */
26
+ export interface IRateLimiterStats {
27
+ activeCounters: number;
28
+ totalBlocked: number;
29
+ currentlyBlocked: number;
30
+ byPattern: Record<string, {
31
+ messagesPerMinute: number;
32
+ totalMessages: number;
33
+ totalBlocked: number;
34
+ }>;
35
+ byIp: Record<string, {
36
+ messagesPerMinute: number;
37
+ totalMessages: number;
38
+ totalBlocked: number;
39
+ connections: number;
40
+ errors: number;
41
+ authFailures: number;
42
+ blocked: boolean;
43
+ }>;
44
+ }
45
+ /**
46
+ * Result of a rate limit check
47
+ */
48
+ export interface IRateLimitResult {
49
+ allowed: boolean;
50
+ reason?: string;
51
+ limit?: number;
52
+ current?: number;
53
+ resetIn?: number;
54
+ }
55
+ /**
56
+ * Unified rate limiter for all email processing modes
57
+ */
58
+ export declare class UnifiedRateLimiter extends EventEmitter {
59
+ private config;
60
+ private counters;
61
+ private patternCounters;
62
+ private ipCounters;
63
+ private domainCounters;
64
+ private cleanupInterval?;
65
+ private stats;
66
+ /**
67
+ * Create a new unified rate limiter
68
+ * @param config Rate limit configuration
69
+ */
70
+ constructor(config: IHierarchicalRateLimits);
71
+ /**
72
+ * Start the cleanup interval
73
+ */
74
+ private startCleanupInterval;
75
+ /**
76
+ * Stop the cleanup interval
77
+ */
78
+ stop(): void;
79
+ /**
80
+ * Destroy the rate limiter and clean up all resources
81
+ */
82
+ destroy(): void;
83
+ /**
84
+ * Clean up expired counters and blocks
85
+ */
86
+ private cleanup;
87
+ /**
88
+ * Check if a message is allowed by rate limits
89
+ * @param email Email address
90
+ * @param ip IP address
91
+ * @param recipients Number of recipients
92
+ * @param pattern Matched pattern
93
+ * @param domain Domain name for domain-specific limits
94
+ * @returns Result of rate limit check
95
+ */
96
+ checkMessageLimit(email: string, ip: string, recipients: number, pattern?: string, domain?: string): IRateLimitResult;
97
+ /**
98
+ * Check global message rate limit
99
+ * @param email Email address
100
+ */
101
+ private checkGlobalMessageLimit;
102
+ /**
103
+ * Check pattern-specific message rate limit
104
+ * @param pattern Pattern to check
105
+ */
106
+ private checkPatternMessageLimit;
107
+ /**
108
+ * Check domain-specific message rate limit
109
+ * @param domain Domain to check
110
+ */
111
+ private checkDomainMessageLimit;
112
+ /**
113
+ * Check IP-specific message rate limit
114
+ * @param ip IP address
115
+ */
116
+ private checkIpMessageLimit;
117
+ /**
118
+ * Check recipient limit
119
+ * @param email Email address
120
+ * @param recipients Number of recipients
121
+ * @param pattern Matched pattern
122
+ * @param domain Domain name
123
+ */
124
+ private checkRecipientLimit;
125
+ /**
126
+ * Record a connection from an IP
127
+ * @param ip IP address
128
+ * @returns Result of rate limit check
129
+ */
130
+ recordConnection(ip: string): IRateLimitResult;
131
+ /**
132
+ * Record an error from an IP
133
+ * @param ip IP address
134
+ * @returns True if IP should be blocked
135
+ */
136
+ recordError(ip: string): boolean;
137
+ /**
138
+ * Record an authentication failure from an IP
139
+ * @param ip IP address
140
+ * @returns True if IP should be blocked
141
+ */
142
+ recordAuthFailure(ip: string): boolean;
143
+ /**
144
+ * Block an IP address
145
+ * @param ip IP address to block
146
+ * @param duration Override the default block duration (milliseconds)
147
+ */
148
+ blockIp(ip: string, duration?: number): void;
149
+ /**
150
+ * Unblock an IP address
151
+ * @param ip IP address to unblock
152
+ */
153
+ unblockIp(ip: string): void;
154
+ /**
155
+ * Check if an IP is blocked
156
+ * @param ip IP address to check
157
+ */
158
+ isIpBlocked(ip: string): boolean;
159
+ /**
160
+ * Get the time until a block is released
161
+ * @param ip IP address
162
+ * @returns Milliseconds until release or 0 if not blocked
163
+ */
164
+ getBlockReleaseTime(ip: string): number;
165
+ /**
166
+ * Update rate limiter statistics
167
+ */
168
+ private updateStats;
169
+ /**
170
+ * Get rate limiter statistics
171
+ */
172
+ getStats(): IRateLimiterStats;
173
+ /**
174
+ * Update rate limiter configuration
175
+ * @param config New configuration
176
+ */
177
+ updateConfig(config: Partial<IHierarchicalRateLimits>): void;
178
+ /**
179
+ * Get configuration for debugging
180
+ */
181
+ getConfig(): IHierarchicalRateLimits;
182
+ /**
183
+ * Apply domain-specific rate limits
184
+ * Merges domain limits with existing configuration
185
+ * @param domain Domain name
186
+ * @param limits Rate limit configuration for the domain
187
+ */
188
+ applyDomainLimits(domain: string, limits: IRateLimitConfig): void;
189
+ /**
190
+ * Remove domain-specific rate limits
191
+ * @param domain Domain name
192
+ */
193
+ removeDomainLimits(domain: string): void;
194
+ /**
195
+ * Get domain-specific rate limits
196
+ * @param domain Domain name
197
+ * @returns Domain rate limit config or undefined
198
+ */
199
+ getDomainLimits(domain: string): IRateLimitConfig | undefined;
200
+ }