@push.rocks/smartproxy 25.17.9 → 26.0.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 (179) hide show
  1. package/changelog.md +16 -0
  2. package/dist_rust/rustproxy_linux_amd64 +0 -0
  3. package/dist_rust/rustproxy_linux_arm64 +0 -0
  4. package/dist_ts/00_commitinfo_data.js +2 -2
  5. package/dist_ts/core/index.d.ts +0 -1
  6. package/dist_ts/core/index.js +1 -2
  7. package/dist_ts/core/models/index.d.ts +0 -1
  8. package/dist_ts/core/models/index.js +1 -2
  9. package/dist_ts/core/utils/index.d.ts +0 -12
  10. package/dist_ts/core/utils/index.js +1 -13
  11. package/dist_ts/index.d.ts +0 -3
  12. package/dist_ts/index.js +2 -7
  13. package/dist_ts/protocols/http/index.d.ts +0 -1
  14. package/dist_ts/protocols/http/index.js +1 -2
  15. package/dist_ts/protocols/index.d.ts +0 -7
  16. package/dist_ts/protocols/index.js +1 -8
  17. package/dist_ts/proxies/smart-proxy/socket-handler-server.js +6 -1
  18. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.d.ts +0 -7
  19. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.js +50 -51
  20. package/dist_ts/routing/index.d.ts +0 -1
  21. package/dist_ts/routing/index.js +1 -3
  22. package/package.json +1 -1
  23. package/ts/00_commitinfo_data.ts +1 -1
  24. package/ts/core/index.ts +0 -1
  25. package/ts/core/models/index.ts +0 -1
  26. package/ts/core/utils/index.ts +0 -12
  27. package/ts/index.ts +1 -7
  28. package/ts/protocols/http/index.ts +1 -2
  29. package/ts/protocols/index.ts +0 -7
  30. package/ts/proxies/smart-proxy/socket-handler-server.ts +6 -0
  31. package/ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.ts +60 -59
  32. package/ts/routing/index.ts +0 -3
  33. package/dist_ts/core/events/index.d.ts +0 -4
  34. package/dist_ts/core/events/index.js +0 -5
  35. package/dist_ts/core/models/socket-augmentation.d.ts +0 -15
  36. package/dist_ts/core/models/socket-augmentation.js +0 -18
  37. package/dist_ts/core/utils/async-utils.d.ts +0 -81
  38. package/dist_ts/core/utils/async-utils.js +0 -216
  39. package/dist_ts/core/utils/binary-heap.d.ts +0 -73
  40. package/dist_ts/core/utils/binary-heap.js +0 -193
  41. package/dist_ts/core/utils/enhanced-connection-pool.d.ts +0 -110
  42. package/dist_ts/core/utils/enhanced-connection-pool.js +0 -325
  43. package/dist_ts/core/utils/fs-utils.d.ts +0 -144
  44. package/dist_ts/core/utils/fs-utils.js +0 -252
  45. package/dist_ts/core/utils/ip-utils.d.ts +0 -69
  46. package/dist_ts/core/utils/ip-utils.js +0 -270
  47. package/dist_ts/core/utils/lifecycle-component.d.ts +0 -59
  48. package/dist_ts/core/utils/lifecycle-component.js +0 -211
  49. package/dist_ts/core/utils/log-deduplicator.d.ts +0 -39
  50. package/dist_ts/core/utils/log-deduplicator.js +0 -305
  51. package/dist_ts/core/utils/security-utils.d.ts +0 -111
  52. package/dist_ts/core/utils/security-utils.js +0 -212
  53. package/dist_ts/core/utils/shared-security-manager.d.ts +0 -128
  54. package/dist_ts/core/utils/shared-security-manager.js +0 -362
  55. package/dist_ts/core/utils/socket-utils.d.ts +0 -63
  56. package/dist_ts/core/utils/socket-utils.js +0 -249
  57. package/dist_ts/core/utils/template-utils.d.ts +0 -37
  58. package/dist_ts/core/utils/template-utils.js +0 -104
  59. package/dist_ts/core/utils/validation-utils.d.ts +0 -61
  60. package/dist_ts/core/utils/validation-utils.js +0 -149
  61. package/dist_ts/core/utils/websocket-utils.d.ts +0 -22
  62. package/dist_ts/core/utils/websocket-utils.js +0 -30
  63. package/dist_ts/detection/detectors/http-detector.d.ts +0 -33
  64. package/dist_ts/detection/detectors/http-detector.js +0 -101
  65. package/dist_ts/detection/detectors/quick-detector.d.ts +0 -28
  66. package/dist_ts/detection/detectors/quick-detector.js +0 -131
  67. package/dist_ts/detection/detectors/routing-extractor.d.ts +0 -28
  68. package/dist_ts/detection/detectors/routing-extractor.js +0 -122
  69. package/dist_ts/detection/detectors/tls-detector.d.ts +0 -47
  70. package/dist_ts/detection/detectors/tls-detector.js +0 -183
  71. package/dist_ts/detection/index.d.ts +0 -17
  72. package/dist_ts/detection/index.js +0 -22
  73. package/dist_ts/detection/models/detection-types.d.ts +0 -87
  74. package/dist_ts/detection/models/detection-types.js +0 -5
  75. package/dist_ts/detection/models/interfaces.d.ts +0 -97
  76. package/dist_ts/detection/models/interfaces.js +0 -5
  77. package/dist_ts/detection/protocol-detector.d.ts +0 -79
  78. package/dist_ts/detection/protocol-detector.js +0 -253
  79. package/dist_ts/detection/utils/buffer-utils.d.ts +0 -61
  80. package/dist_ts/detection/utils/buffer-utils.js +0 -127
  81. package/dist_ts/detection/utils/fragment-manager.d.ts +0 -31
  82. package/dist_ts/detection/utils/fragment-manager.js +0 -53
  83. package/dist_ts/detection/utils/parser-utils.d.ts +0 -42
  84. package/dist_ts/detection/utils/parser-utils.js +0 -63
  85. package/dist_ts/protocols/common/fragment-handler.d.ts +0 -73
  86. package/dist_ts/protocols/common/fragment-handler.js +0 -121
  87. package/dist_ts/protocols/common/index.d.ts +0 -7
  88. package/dist_ts/protocols/common/index.js +0 -8
  89. package/dist_ts/protocols/common/types.d.ts +0 -68
  90. package/dist_ts/protocols/common/types.js +0 -7
  91. package/dist_ts/protocols/http/parser.d.ts +0 -58
  92. package/dist_ts/protocols/http/parser.js +0 -184
  93. package/dist_ts/protocols/proxy/index.d.ts +0 -5
  94. package/dist_ts/protocols/proxy/index.js +0 -6
  95. package/dist_ts/protocols/proxy/types.d.ts +0 -47
  96. package/dist_ts/protocols/proxy/types.js +0 -6
  97. package/dist_ts/protocols/tls/alerts/index.d.ts +0 -4
  98. package/dist_ts/protocols/tls/alerts/index.js +0 -5
  99. package/dist_ts/protocols/tls/alerts/tls-alert.d.ts +0 -150
  100. package/dist_ts/protocols/tls/alerts/tls-alert.js +0 -226
  101. package/dist_ts/protocols/tls/index.d.ts +0 -12
  102. package/dist_ts/protocols/tls/index.js +0 -27
  103. package/dist_ts/protocols/tls/sni/client-hello-parser.d.ts +0 -100
  104. package/dist_ts/protocols/tls/sni/client-hello-parser.js +0 -463
  105. package/dist_ts/protocols/tls/sni/index.d.ts +0 -5
  106. package/dist_ts/protocols/tls/sni/index.js +0 -6
  107. package/dist_ts/protocols/tls/sni/sni-extraction.d.ts +0 -58
  108. package/dist_ts/protocols/tls/sni/sni-extraction.js +0 -275
  109. package/dist_ts/protocols/tls/utils/index.d.ts +0 -4
  110. package/dist_ts/protocols/tls/utils/index.js +0 -5
  111. package/dist_ts/protocols/tls/utils/tls-utils.d.ts +0 -158
  112. package/dist_ts/protocols/tls/utils/tls-utils.js +0 -187
  113. package/dist_ts/protocols/websocket/constants.d.ts +0 -55
  114. package/dist_ts/protocols/websocket/constants.js +0 -58
  115. package/dist_ts/protocols/websocket/index.d.ts +0 -7
  116. package/dist_ts/protocols/websocket/index.js +0 -8
  117. package/dist_ts/protocols/websocket/types.d.ts +0 -47
  118. package/dist_ts/protocols/websocket/types.js +0 -5
  119. package/dist_ts/protocols/websocket/utils.d.ts +0 -25
  120. package/dist_ts/protocols/websocket/utils.js +0 -103
  121. package/dist_ts/routing/router/http-router.d.ts +0 -89
  122. package/dist_ts/routing/router/http-router.js +0 -205
  123. package/dist_ts/routing/router/index.d.ts +0 -5
  124. package/dist_ts/routing/router/index.js +0 -6
  125. package/dist_ts/tls/index.d.ts +0 -16
  126. package/dist_ts/tls/index.js +0 -24
  127. package/dist_ts/tls/sni/index.d.ts +0 -4
  128. package/dist_ts/tls/sni/index.js +0 -5
  129. package/dist_ts/tls/sni/sni-handler.d.ts +0 -154
  130. package/dist_ts/tls/sni/sni-handler.js +0 -191
  131. package/ts/core/events/index.ts +0 -3
  132. package/ts/core/models/socket-augmentation.ts +0 -38
  133. package/ts/core/utils/async-utils.ts +0 -275
  134. package/ts/core/utils/binary-heap.ts +0 -225
  135. package/ts/core/utils/enhanced-connection-pool.ts +0 -425
  136. package/ts/core/utils/fs-utils.ts +0 -270
  137. package/ts/core/utils/ip-utils.ts +0 -303
  138. package/ts/core/utils/lifecycle-component.ts +0 -251
  139. package/ts/core/utils/log-deduplicator.ts +0 -370
  140. package/ts/core/utils/security-utils.ts +0 -305
  141. package/ts/core/utils/shared-security-manager.ts +0 -470
  142. package/ts/core/utils/socket-utils.ts +0 -322
  143. package/ts/core/utils/template-utils.ts +0 -124
  144. package/ts/core/utils/validation-utils.ts +0 -177
  145. package/ts/core/utils/websocket-utils.ts +0 -33
  146. package/ts/detection/detectors/http-detector.ts +0 -127
  147. package/ts/detection/detectors/quick-detector.ts +0 -148
  148. package/ts/detection/detectors/routing-extractor.ts +0 -147
  149. package/ts/detection/detectors/tls-detector.ts +0 -223
  150. package/ts/detection/index.ts +0 -25
  151. package/ts/detection/models/detection-types.ts +0 -102
  152. package/ts/detection/models/interfaces.ts +0 -115
  153. package/ts/detection/protocol-detector.ts +0 -319
  154. package/ts/detection/utils/buffer-utils.ts +0 -141
  155. package/ts/detection/utils/fragment-manager.ts +0 -64
  156. package/ts/detection/utils/parser-utils.ts +0 -77
  157. package/ts/protocols/common/fragment-handler.ts +0 -167
  158. package/ts/protocols/common/index.ts +0 -8
  159. package/ts/protocols/common/types.ts +0 -76
  160. package/ts/protocols/http/parser.ts +0 -219
  161. package/ts/protocols/proxy/index.ts +0 -6
  162. package/ts/protocols/proxy/types.ts +0 -53
  163. package/ts/protocols/tls/alerts/index.ts +0 -3
  164. package/ts/protocols/tls/alerts/tls-alert.ts +0 -259
  165. package/ts/protocols/tls/index.ts +0 -37
  166. package/ts/protocols/tls/sni/client-hello-parser.ts +0 -629
  167. package/ts/protocols/tls/sni/index.ts +0 -6
  168. package/ts/protocols/tls/sni/sni-extraction.ts +0 -353
  169. package/ts/protocols/tls/utils/index.ts +0 -3
  170. package/ts/protocols/tls/utils/tls-utils.ts +0 -201
  171. package/ts/protocols/websocket/constants.ts +0 -60
  172. package/ts/protocols/websocket/index.ts +0 -8
  173. package/ts/protocols/websocket/types.ts +0 -53
  174. package/ts/protocols/websocket/utils.ts +0 -98
  175. package/ts/routing/router/http-router.ts +0 -266
  176. package/ts/routing/router/index.ts +0 -7
  177. package/ts/tls/index.ts +0 -29
  178. package/ts/tls/sni/index.ts +0 -3
  179. package/ts/tls/sni/sni-handler.ts +0 -264
@@ -1,111 +0,0 @@
1
- /**
2
- * Security utilities for IP validation, rate limiting,
3
- * authentication, and other security features
4
- */
5
- /**
6
- * Result of IP validation
7
- */
8
- export interface IIpValidationResult {
9
- allowed: boolean;
10
- reason?: string;
11
- }
12
- /**
13
- * IP connection tracking information
14
- */
15
- export interface IIpConnectionInfo {
16
- connections: Set<string>;
17
- timestamps: number[];
18
- ipVariants: string[];
19
- }
20
- /**
21
- * Rate limit tracking
22
- */
23
- export interface IRateLimitInfo {
24
- count: number;
25
- expiry: number;
26
- }
27
- /**
28
- * Logger interface for security utilities
29
- */
30
- export interface ISecurityLogger {
31
- info: (message: string, ...args: any[]) => void;
32
- warn: (message: string, ...args: any[]) => void;
33
- error: (message: string, ...args: any[]) => void;
34
- debug?: (message: string, ...args: any[]) => void;
35
- }
36
- /**
37
- * Normalize IP addresses for comparison
38
- * Handles IPv4-mapped IPv6 addresses (::ffff:127.0.0.1)
39
- *
40
- * @param ip IP address to normalize
41
- * @returns Array of equivalent IP representations
42
- */
43
- export declare function normalizeIP(ip: string): string[];
44
- /**
45
- * Check if an IP is authorized based on allow and block lists
46
- *
47
- * @param ip - The IP address to check
48
- * @param allowedIPs - Array of allowed IP patterns
49
- * @param blockedIPs - Array of blocked IP patterns
50
- * @returns Whether the IP is authorized
51
- */
52
- export declare function isIPAuthorized(ip: string, allowedIPs?: string[], blockedIPs?: string[]): boolean;
53
- /**
54
- * Check if an IP exceeds maximum connections
55
- *
56
- * @param ip - The IP address to check
57
- * @param ipConnectionsMap - Map of IPs to connection info
58
- * @param maxConnectionsPerIP - Maximum allowed connections per IP
59
- * @returns Result with allowed status and reason if blocked
60
- */
61
- export declare function checkMaxConnections(ip: string, ipConnectionsMap: Map<string, IIpConnectionInfo>, maxConnectionsPerIP: number): IIpValidationResult;
62
- /**
63
- * Check if an IP exceeds connection rate limit
64
- *
65
- * @param ip - The IP address to check
66
- * @param ipConnectionsMap - Map of IPs to connection info
67
- * @param rateLimit - Maximum connections per minute
68
- * @returns Result with allowed status and reason if blocked
69
- */
70
- export declare function checkConnectionRate(ip: string, ipConnectionsMap: Map<string, IIpConnectionInfo>, rateLimit: number): IIpValidationResult;
71
- /**
72
- * Track a connection for an IP
73
- *
74
- * @param ip - The IP address
75
- * @param connectionId - The connection ID to track
76
- * @param ipConnectionsMap - Map of IPs to connection info
77
- */
78
- export declare function trackConnection(ip: string, connectionId: string, ipConnectionsMap: Map<string, IIpConnectionInfo>): void;
79
- /**
80
- * Remove connection tracking for an IP
81
- *
82
- * @param ip - The IP address
83
- * @param connectionId - The connection ID to remove
84
- * @param ipConnectionsMap - Map of IPs to connection info
85
- */
86
- export declare function removeConnection(ip: string, connectionId: string, ipConnectionsMap: Map<string, IIpConnectionInfo>): void;
87
- /**
88
- * Clean up expired rate limits
89
- *
90
- * @param rateLimits - Map of rate limits to clean up
91
- * @param logger - Logger for debug messages
92
- */
93
- export declare function cleanupExpiredRateLimits(rateLimits: Map<string, Map<string, IRateLimitInfo>>, logger?: ISecurityLogger): void;
94
- /**
95
- * Generate basic auth header value from username and password
96
- *
97
- * @param username - The username
98
- * @param password - The password
99
- * @returns Base64 encoded basic auth string
100
- */
101
- export declare function generateBasicAuthHeader(username: string, password: string): string;
102
- /**
103
- * Parse basic auth header
104
- *
105
- * @param authHeader - The Authorization header value
106
- * @returns Username and password, or null if invalid
107
- */
108
- export declare function parseBasicAuthHeader(authHeader: string): {
109
- username: string;
110
- password: string;
111
- } | null;
@@ -1,212 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import { IpMatcher } from '../routing/matchers/ip.js';
3
- /**
4
- * Normalize IP addresses for comparison
5
- * Handles IPv4-mapped IPv6 addresses (::ffff:127.0.0.1)
6
- *
7
- * @param ip IP address to normalize
8
- * @returns Array of equivalent IP representations
9
- */
10
- export function normalizeIP(ip) {
11
- if (!ip)
12
- return [];
13
- // Handle IPv4-mapped IPv6 addresses (::ffff:127.0.0.1)
14
- if (ip.startsWith('::ffff:')) {
15
- const ipv4 = ip.slice(7);
16
- return [ip, ipv4];
17
- }
18
- // Handle IPv4 addresses by also checking IPv4-mapped form
19
- if (/^\d{1,3}(\.\d{1,3}){3}$/.test(ip)) {
20
- return [ip, `::ffff:${ip}`];
21
- }
22
- return [ip];
23
- }
24
- /**
25
- * Check if an IP is authorized based on allow and block lists
26
- *
27
- * @param ip - The IP address to check
28
- * @param allowedIPs - Array of allowed IP patterns
29
- * @param blockedIPs - Array of blocked IP patterns
30
- * @returns Whether the IP is authorized
31
- */
32
- export function isIPAuthorized(ip, allowedIPs = ['*'], blockedIPs = []) {
33
- // Skip IP validation if no rules
34
- if (!ip || (allowedIPs.length === 0 && blockedIPs.length === 0)) {
35
- return true;
36
- }
37
- // First check if IP is blocked - blocked IPs take precedence
38
- if (blockedIPs.length > 0) {
39
- for (const pattern of blockedIPs) {
40
- if (IpMatcher.match(pattern, ip)) {
41
- return false;
42
- }
43
- }
44
- }
45
- // If allowed IPs list has wildcard, all non-blocked IPs are allowed
46
- if (allowedIPs.includes('*')) {
47
- return true;
48
- }
49
- // Then check if IP is allowed in the explicit allow list
50
- if (allowedIPs.length > 0) {
51
- for (const pattern of allowedIPs) {
52
- if (IpMatcher.match(pattern, ip)) {
53
- return true;
54
- }
55
- }
56
- // If allowedIPs is specified but no match, deny access
57
- return false;
58
- }
59
- // Default allow if no explicit allow list
60
- return true;
61
- }
62
- /**
63
- * Check if an IP exceeds maximum connections
64
- *
65
- * @param ip - The IP address to check
66
- * @param ipConnectionsMap - Map of IPs to connection info
67
- * @param maxConnectionsPerIP - Maximum allowed connections per IP
68
- * @returns Result with allowed status and reason if blocked
69
- */
70
- export function checkMaxConnections(ip, ipConnectionsMap, maxConnectionsPerIP) {
71
- if (!ipConnectionsMap.has(ip)) {
72
- return { allowed: true };
73
- }
74
- const connectionCount = ipConnectionsMap.get(ip).connections.size;
75
- if (connectionCount >= maxConnectionsPerIP) {
76
- return {
77
- allowed: false,
78
- reason: `Maximum connections per IP (${maxConnectionsPerIP}) exceeded`
79
- };
80
- }
81
- return { allowed: true };
82
- }
83
- /**
84
- * Check if an IP exceeds connection rate limit
85
- *
86
- * @param ip - The IP address to check
87
- * @param ipConnectionsMap - Map of IPs to connection info
88
- * @param rateLimit - Maximum connections per minute
89
- * @returns Result with allowed status and reason if blocked
90
- */
91
- export function checkConnectionRate(ip, ipConnectionsMap, rateLimit) {
92
- const now = Date.now();
93
- const minute = 60 * 1000;
94
- // Get or create connection info
95
- if (!ipConnectionsMap.has(ip)) {
96
- const info = {
97
- connections: new Set(),
98
- timestamps: [now],
99
- ipVariants: normalizeIP(ip)
100
- };
101
- ipConnectionsMap.set(ip, info);
102
- return { allowed: true };
103
- }
104
- // Get timestamps and filter out entries older than 1 minute
105
- const info = ipConnectionsMap.get(ip);
106
- const timestamps = info.timestamps.filter(time => now - time < minute);
107
- timestamps.push(now);
108
- info.timestamps = timestamps;
109
- // Check if rate exceeds limit
110
- if (timestamps.length > rateLimit) {
111
- return {
112
- allowed: false,
113
- reason: `Connection rate limit (${rateLimit}/min) exceeded`
114
- };
115
- }
116
- return { allowed: true };
117
- }
118
- /**
119
- * Track a connection for an IP
120
- *
121
- * @param ip - The IP address
122
- * @param connectionId - The connection ID to track
123
- * @param ipConnectionsMap - Map of IPs to connection info
124
- */
125
- export function trackConnection(ip, connectionId, ipConnectionsMap) {
126
- if (!ipConnectionsMap.has(ip)) {
127
- ipConnectionsMap.set(ip, {
128
- connections: new Set([connectionId]),
129
- timestamps: [Date.now()],
130
- ipVariants: normalizeIP(ip)
131
- });
132
- return;
133
- }
134
- const info = ipConnectionsMap.get(ip);
135
- info.connections.add(connectionId);
136
- }
137
- /**
138
- * Remove connection tracking for an IP
139
- *
140
- * @param ip - The IP address
141
- * @param connectionId - The connection ID to remove
142
- * @param ipConnectionsMap - Map of IPs to connection info
143
- */
144
- export function removeConnection(ip, connectionId, ipConnectionsMap) {
145
- if (!ipConnectionsMap.has(ip))
146
- return;
147
- const info = ipConnectionsMap.get(ip);
148
- info.connections.delete(connectionId);
149
- if (info.connections.size === 0) {
150
- ipConnectionsMap.delete(ip);
151
- }
152
- }
153
- /**
154
- * Clean up expired rate limits
155
- *
156
- * @param rateLimits - Map of rate limits to clean up
157
- * @param logger - Logger for debug messages
158
- */
159
- export function cleanupExpiredRateLimits(rateLimits, logger) {
160
- const now = Date.now();
161
- let totalRemoved = 0;
162
- for (const [routeId, routeLimits] of rateLimits.entries()) {
163
- let removed = 0;
164
- for (const [key, limit] of routeLimits.entries()) {
165
- if (limit.expiry < now) {
166
- routeLimits.delete(key);
167
- removed++;
168
- totalRemoved++;
169
- }
170
- }
171
- if (removed > 0 && logger?.debug) {
172
- logger.debug(`Cleaned up ${removed} expired rate limits for route ${routeId}`);
173
- }
174
- }
175
- if (totalRemoved > 0 && logger?.info) {
176
- logger.info(`Cleaned up ${totalRemoved} expired rate limits total`);
177
- }
178
- }
179
- /**
180
- * Generate basic auth header value from username and password
181
- *
182
- * @param username - The username
183
- * @param password - The password
184
- * @returns Base64 encoded basic auth string
185
- */
186
- export function generateBasicAuthHeader(username, password) {
187
- return `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`;
188
- }
189
- /**
190
- * Parse basic auth header
191
- *
192
- * @param authHeader - The Authorization header value
193
- * @returns Username and password, or null if invalid
194
- */
195
- export function parseBasicAuthHeader(authHeader) {
196
- if (!authHeader || !authHeader.startsWith('Basic ')) {
197
- return null;
198
- }
199
- try {
200
- const base64 = authHeader.slice(6); // Remove 'Basic '
201
- const decoded = Buffer.from(base64, 'base64').toString();
202
- const [username, password] = decoded.split(':');
203
- if (!username || !password) {
204
- return null;
205
- }
206
- return { username, password };
207
- }
208
- catch (err) {
209
- return null;
210
- }
211
- }
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL3V0aWxzL3NlY3VyaXR5LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBMEN0RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEVBQVU7SUFDcEMsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUVuQix1REFBdUQ7SUFDdkQsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsSUFBSSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixFQUFVLEVBQ1YsYUFBdUIsQ0FBQyxHQUFHLENBQUMsRUFDNUIsYUFBdUIsRUFBRTtJQUV6QixpQ0FBaUM7SUFDakMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsSUFBSSxV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
@@ -1,128 +0,0 @@
1
- import type { IRouteConfig, IRouteContext } from '../../proxies/smart-proxy/models/route-types.js';
2
- import type { IIpValidationResult, ISecurityLogger } from './security-utils.js';
3
- /**
4
- * Shared SecurityManager for use across proxy components
5
- * Handles IP tracking, rate limiting, and authentication
6
- */
7
- export declare class SharedSecurityManager {
8
- private logger?;
9
- private connectionsByIP;
10
- private rateLimits;
11
- private ipFilterCache;
12
- private maxConnectionsPerIP;
13
- private connectionRateLimitPerMinute;
14
- private cleanupInterval;
15
- /**
16
- * Create a new SharedSecurityManager
17
- *
18
- * @param options - Configuration options
19
- * @param logger - Logger instance
20
- */
21
- constructor(options: {
22
- maxConnectionsPerIP?: number;
23
- connectionRateLimitPerMinute?: number;
24
- cleanupIntervalMs?: number;
25
- routes?: IRouteConfig[];
26
- }, logger?: ISecurityLogger);
27
- /**
28
- * Get connections count by IP
29
- *
30
- * @param ip - The IP address to check
31
- * @returns Number of connections from this IP
32
- */
33
- getConnectionCountByIP(ip: string): number;
34
- /**
35
- * Track connection by IP
36
- *
37
- * @param ip - The IP address to track
38
- * @param connectionId - The connection ID to associate
39
- */
40
- trackConnectionByIP(ip: string, connectionId: string): void;
41
- /**
42
- * Remove connection tracking for an IP
43
- *
44
- * @param ip - The IP address to update
45
- * @param connectionId - The connection ID to remove
46
- */
47
- removeConnectionByIP(ip: string, connectionId: string): void;
48
- /**
49
- * Check if IP is authorized based on route security settings
50
- *
51
- * @param ip - The IP address to check
52
- * @param allowedIPs - List of allowed IP patterns
53
- * @param blockedIPs - List of blocked IP patterns
54
- * @returns Whether the IP is authorized
55
- */
56
- isIPAuthorized(ip: string, allowedIPs?: string[], blockedIPs?: string[]): boolean;
57
- /**
58
- * Validate IP against rate limits and connection limits
59
- *
60
- * @param ip - The IP address to validate
61
- * @returns Result with allowed status and reason if blocked
62
- */
63
- validateIP(ip: string): IIpValidationResult;
64
- /**
65
- * Atomically validate an IP and track the connection if allowed.
66
- * This prevents race conditions where concurrent connections could bypass per-IP limits.
67
- *
68
- * @param ip - The IP address to validate
69
- * @param connectionId - The connection ID to track if validation passes
70
- * @returns Object with validation result and reason
71
- */
72
- validateAndTrackIP(ip: string, connectionId: string): IIpValidationResult;
73
- /**
74
- * Check if a client is allowed to access a specific route
75
- *
76
- * @param route - The route to check
77
- * @param context - The request context
78
- * @param routeConnectionCount - Current connection count for this route (optional)
79
- * @returns Whether access is allowed
80
- */
81
- isAllowed(route: IRouteConfig, context: IRouteContext, routeConnectionCount?: number): boolean;
82
- /**
83
- * Check if a client IP is allowed for a route
84
- *
85
- * @param route - The route to check
86
- * @param clientIp - The client IP
87
- * @returns Whether the IP is allowed
88
- */
89
- private isClientIpAllowed;
90
- /**
91
- * Check if request is within rate limit
92
- *
93
- * @param route - The route to check
94
- * @param context - The request context
95
- * @returns Whether the request is within rate limit
96
- */
97
- private isWithinRateLimit;
98
- /**
99
- * Validate HTTP Basic Authentication
100
- *
101
- * @param route - The route to check
102
- * @param authHeader - The Authorization header
103
- * @returns Whether authentication is valid
104
- */
105
- validateBasicAuth(route: IRouteConfig, authHeader?: string): boolean;
106
- /**
107
- * Verify a JWT token against route configuration
108
- *
109
- * @param route - The route to verify the token for
110
- * @param token - The JWT token to verify
111
- * @returns True if the token is valid, false otherwise
112
- */
113
- verifyJwtToken(route: IRouteConfig, token: string): boolean;
114
- /**
115
- * Clean up caches to prevent memory leaks
116
- */
117
- private cleanupCaches;
118
- /**
119
- * Clear all IP tracking data (for shutdown)
120
- */
121
- clearIPTracking(): void;
122
- /**
123
- * Update routes for security checking
124
- *
125
- * @param routes - New routes to use
126
- */
127
- setRoutes(routes: IRouteConfig[]): void;
128
- }