@push.rocks/smartmta 5.1.3 → 5.2.1
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/changelog.md +15 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/index.d.ts +3 -0
- package/dist_ts/index.js +4 -0
- package/dist_ts/logger.d.ts +17 -0
- package/dist_ts/logger.js +76 -0
- package/dist_ts/mail/core/classes.bouncemanager.d.ts +185 -0
- package/dist_ts/mail/core/classes.bouncemanager.js +569 -0
- package/dist_ts/mail/core/classes.email.d.ts +291 -0
- package/dist_ts/mail/core/classes.email.js +802 -0
- package/dist_ts/mail/core/classes.emailvalidator.d.ts +61 -0
- package/dist_ts/mail/core/classes.emailvalidator.js +184 -0
- package/dist_ts/mail/core/classes.templatemanager.d.ts +95 -0
- package/dist_ts/mail/core/classes.templatemanager.js +240 -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 +488 -0
- package/dist_ts/mail/delivery/classes.delivery.system.d.ts +160 -0
- package/dist_ts/mail/delivery/classes.delivery.system.js +630 -0
- package/dist_ts/mail/delivery/classes.unified.rate.limiter.d.ts +200 -0
- package/dist_ts/mail/delivery/classes.unified.rate.limiter.js +820 -0
- package/dist_ts/mail/delivery/index.d.ts +4 -0
- package/dist_ts/mail/delivery/index.js +6 -0
- package/dist_ts/mail/delivery/interfaces.d.ts +140 -0
- package/dist_ts/mail/delivery/interfaces.js +17 -0
- package/dist_ts/mail/index.d.ts +7 -0
- package/dist_ts/mail/index.js +12 -0
- package/dist_ts/mail/routing/classes.dkim.manager.d.ts +25 -0
- package/dist_ts/mail/routing/classes.dkim.manager.js +127 -0
- package/dist_ts/mail/routing/classes.dns.manager.d.ts +79 -0
- package/dist_ts/mail/routing/classes.dns.manager.js +415 -0
- package/dist_ts/mail/routing/classes.domain.registry.d.ts +54 -0
- package/dist_ts/mail/routing/classes.domain.registry.js +119 -0
- package/dist_ts/mail/routing/classes.email.action.executor.d.ts +33 -0
- package/dist_ts/mail/routing/classes.email.action.executor.js +137 -0
- package/dist_ts/mail/routing/classes.email.router.d.ts +171 -0
- package/dist_ts/mail/routing/classes.email.router.js +494 -0
- package/dist_ts/mail/routing/classes.unified.email.server.d.ts +241 -0
- package/dist_ts/mail/routing/classes.unified.email.server.js +935 -0
- package/dist_ts/mail/routing/index.d.ts +7 -0
- package/dist_ts/mail/routing/index.js +9 -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 +72 -0
- package/dist_ts/mail/security/classes.dkimcreator.js +360 -0
- package/dist_ts/mail/security/classes.spfverifier.d.ts +62 -0
- package/dist_ts/mail/security/classes.spfverifier.js +87 -0
- package/dist_ts/mail/security/index.d.ts +2 -0
- package/dist_ts/mail/security/index.js +4 -0
- package/dist_ts/paths.d.ts +14 -0
- package/dist_ts/paths.js +39 -0
- package/dist_ts/plugins.d.ts +24 -0
- package/dist_ts/plugins.js +28 -0
- package/dist_ts/security/classes.contentscanner.d.ts +130 -0
- package/dist_ts/security/classes.contentscanner.js +338 -0
- package/dist_ts/security/classes.ipreputationchecker.d.ts +73 -0
- package/dist_ts/security/classes.ipreputationchecker.js +263 -0
- package/dist_ts/security/classes.rustsecuritybridge.d.ts +403 -0
- package/dist_ts/security/classes.rustsecuritybridge.js +502 -0
- package/dist_ts/security/classes.securitylogger.d.ts +140 -0
- package/dist_ts/security/classes.securitylogger.js +235 -0
- package/dist_ts/security/index.d.ts +4 -0
- package/dist_ts/security/index.js +5 -0
- package/package.json +6 -1
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/index.ts +3 -0
- package/ts/logger.ts +91 -0
- package/ts/mail/core/classes.bouncemanager.ts +731 -0
- package/ts/mail/core/classes.email.ts +942 -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 +816 -0
- package/ts/mail/delivery/classes.unified.rate.limiter.ts +1053 -0
- package/ts/mail/delivery/index.ts +5 -0
- package/ts/mail/delivery/interfaces.ts +167 -0
- package/ts/mail/index.ts +17 -0
- package/ts/mail/routing/classes.dkim.manager.ts +157 -0
- package/ts/mail/routing/classes.dns.manager.ts +573 -0
- package/ts/mail/routing/classes.domain.registry.ts +139 -0
- package/ts/mail/routing/classes.email.action.executor.ts +175 -0
- package/ts/mail/routing/classes.email.router.ts +575 -0
- package/ts/mail/routing/classes.unified.email.server.ts +1207 -0
- package/ts/mail/routing/index.ts +9 -0
- package/ts/mail/routing/interfaces.ts +202 -0
- package/ts/mail/security/classes.dkimcreator.ts +447 -0
- package/ts/mail/security/classes.spfverifier.ts +126 -0
- package/ts/mail/security/index.ts +3 -0
- package/ts/paths.ts +48 -0
- package/ts/plugins.ts +53 -0
- package/ts/security/classes.contentscanner.ts +400 -0
- package/ts/security/classes.ipreputationchecker.ts +315 -0
- package/ts/security/classes.rustsecuritybridge.ts +964 -0
- package/ts/security/classes.securitylogger.ts +299 -0
- 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
|
+
}
|