@push.rocks/smartproxy 25.17.10 → 26.1.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 (184) hide show
  1. package/changelog.md +15 -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/models/metrics-types.d.ts +20 -0
  18. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.d.ts +2 -1
  19. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.js +4 -1
  20. package/dist_ts/proxies/smart-proxy/socket-handler-server.js +6 -1
  21. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.d.ts +0 -7
  22. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.js +50 -51
  23. package/dist_ts/routing/index.d.ts +0 -1
  24. package/dist_ts/routing/index.js +1 -3
  25. package/package.json +1 -1
  26. package/ts/00_commitinfo_data.ts +1 -1
  27. package/ts/core/index.ts +0 -1
  28. package/ts/core/models/index.ts +0 -1
  29. package/ts/core/utils/index.ts +0 -12
  30. package/ts/index.ts +1 -7
  31. package/ts/protocols/http/index.ts +1 -2
  32. package/ts/protocols/index.ts +0 -7
  33. package/ts/proxies/smart-proxy/models/metrics-types.ts +21 -0
  34. package/ts/proxies/smart-proxy/rust-metrics-adapter.ts +4 -1
  35. package/ts/proxies/smart-proxy/socket-handler-server.ts +6 -0
  36. package/ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.ts +60 -59
  37. package/ts/routing/index.ts +0 -3
  38. package/dist_ts/core/events/index.d.ts +0 -4
  39. package/dist_ts/core/events/index.js +0 -5
  40. package/dist_ts/core/models/socket-augmentation.d.ts +0 -15
  41. package/dist_ts/core/models/socket-augmentation.js +0 -18
  42. package/dist_ts/core/utils/async-utils.d.ts +0 -81
  43. package/dist_ts/core/utils/async-utils.js +0 -216
  44. package/dist_ts/core/utils/binary-heap.d.ts +0 -73
  45. package/dist_ts/core/utils/binary-heap.js +0 -193
  46. package/dist_ts/core/utils/enhanced-connection-pool.d.ts +0 -110
  47. package/dist_ts/core/utils/enhanced-connection-pool.js +0 -325
  48. package/dist_ts/core/utils/fs-utils.d.ts +0 -144
  49. package/dist_ts/core/utils/fs-utils.js +0 -252
  50. package/dist_ts/core/utils/ip-utils.d.ts +0 -69
  51. package/dist_ts/core/utils/ip-utils.js +0 -270
  52. package/dist_ts/core/utils/lifecycle-component.d.ts +0 -59
  53. package/dist_ts/core/utils/lifecycle-component.js +0 -211
  54. package/dist_ts/core/utils/log-deduplicator.d.ts +0 -39
  55. package/dist_ts/core/utils/log-deduplicator.js +0 -305
  56. package/dist_ts/core/utils/security-utils.d.ts +0 -111
  57. package/dist_ts/core/utils/security-utils.js +0 -212
  58. package/dist_ts/core/utils/shared-security-manager.d.ts +0 -128
  59. package/dist_ts/core/utils/shared-security-manager.js +0 -362
  60. package/dist_ts/core/utils/socket-utils.d.ts +0 -63
  61. package/dist_ts/core/utils/socket-utils.js +0 -249
  62. package/dist_ts/core/utils/template-utils.d.ts +0 -37
  63. package/dist_ts/core/utils/template-utils.js +0 -104
  64. package/dist_ts/core/utils/validation-utils.d.ts +0 -61
  65. package/dist_ts/core/utils/validation-utils.js +0 -149
  66. package/dist_ts/core/utils/websocket-utils.d.ts +0 -22
  67. package/dist_ts/core/utils/websocket-utils.js +0 -30
  68. package/dist_ts/detection/detectors/http-detector.d.ts +0 -33
  69. package/dist_ts/detection/detectors/http-detector.js +0 -101
  70. package/dist_ts/detection/detectors/quick-detector.d.ts +0 -28
  71. package/dist_ts/detection/detectors/quick-detector.js +0 -131
  72. package/dist_ts/detection/detectors/routing-extractor.d.ts +0 -28
  73. package/dist_ts/detection/detectors/routing-extractor.js +0 -122
  74. package/dist_ts/detection/detectors/tls-detector.d.ts +0 -47
  75. package/dist_ts/detection/detectors/tls-detector.js +0 -183
  76. package/dist_ts/detection/index.d.ts +0 -17
  77. package/dist_ts/detection/index.js +0 -22
  78. package/dist_ts/detection/models/detection-types.d.ts +0 -87
  79. package/dist_ts/detection/models/detection-types.js +0 -5
  80. package/dist_ts/detection/models/interfaces.d.ts +0 -97
  81. package/dist_ts/detection/models/interfaces.js +0 -5
  82. package/dist_ts/detection/protocol-detector.d.ts +0 -79
  83. package/dist_ts/detection/protocol-detector.js +0 -253
  84. package/dist_ts/detection/utils/buffer-utils.d.ts +0 -61
  85. package/dist_ts/detection/utils/buffer-utils.js +0 -127
  86. package/dist_ts/detection/utils/fragment-manager.d.ts +0 -31
  87. package/dist_ts/detection/utils/fragment-manager.js +0 -53
  88. package/dist_ts/detection/utils/parser-utils.d.ts +0 -42
  89. package/dist_ts/detection/utils/parser-utils.js +0 -63
  90. package/dist_ts/protocols/common/fragment-handler.d.ts +0 -73
  91. package/dist_ts/protocols/common/fragment-handler.js +0 -121
  92. package/dist_ts/protocols/common/index.d.ts +0 -7
  93. package/dist_ts/protocols/common/index.js +0 -8
  94. package/dist_ts/protocols/common/types.d.ts +0 -68
  95. package/dist_ts/protocols/common/types.js +0 -7
  96. package/dist_ts/protocols/http/parser.d.ts +0 -58
  97. package/dist_ts/protocols/http/parser.js +0 -184
  98. package/dist_ts/protocols/proxy/index.d.ts +0 -5
  99. package/dist_ts/protocols/proxy/index.js +0 -6
  100. package/dist_ts/protocols/proxy/types.d.ts +0 -47
  101. package/dist_ts/protocols/proxy/types.js +0 -6
  102. package/dist_ts/protocols/tls/alerts/index.d.ts +0 -4
  103. package/dist_ts/protocols/tls/alerts/index.js +0 -5
  104. package/dist_ts/protocols/tls/alerts/tls-alert.d.ts +0 -150
  105. package/dist_ts/protocols/tls/alerts/tls-alert.js +0 -226
  106. package/dist_ts/protocols/tls/index.d.ts +0 -12
  107. package/dist_ts/protocols/tls/index.js +0 -27
  108. package/dist_ts/protocols/tls/sni/client-hello-parser.d.ts +0 -100
  109. package/dist_ts/protocols/tls/sni/client-hello-parser.js +0 -463
  110. package/dist_ts/protocols/tls/sni/index.d.ts +0 -5
  111. package/dist_ts/protocols/tls/sni/index.js +0 -6
  112. package/dist_ts/protocols/tls/sni/sni-extraction.d.ts +0 -58
  113. package/dist_ts/protocols/tls/sni/sni-extraction.js +0 -275
  114. package/dist_ts/protocols/tls/utils/index.d.ts +0 -4
  115. package/dist_ts/protocols/tls/utils/index.js +0 -5
  116. package/dist_ts/protocols/tls/utils/tls-utils.d.ts +0 -158
  117. package/dist_ts/protocols/tls/utils/tls-utils.js +0 -187
  118. package/dist_ts/protocols/websocket/constants.d.ts +0 -55
  119. package/dist_ts/protocols/websocket/constants.js +0 -58
  120. package/dist_ts/protocols/websocket/index.d.ts +0 -7
  121. package/dist_ts/protocols/websocket/index.js +0 -8
  122. package/dist_ts/protocols/websocket/types.d.ts +0 -47
  123. package/dist_ts/protocols/websocket/types.js +0 -5
  124. package/dist_ts/protocols/websocket/utils.d.ts +0 -25
  125. package/dist_ts/protocols/websocket/utils.js +0 -103
  126. package/dist_ts/routing/router/http-router.d.ts +0 -89
  127. package/dist_ts/routing/router/http-router.js +0 -205
  128. package/dist_ts/routing/router/index.d.ts +0 -5
  129. package/dist_ts/routing/router/index.js +0 -6
  130. package/dist_ts/tls/index.d.ts +0 -16
  131. package/dist_ts/tls/index.js +0 -24
  132. package/dist_ts/tls/sni/index.d.ts +0 -4
  133. package/dist_ts/tls/sni/index.js +0 -5
  134. package/dist_ts/tls/sni/sni-handler.d.ts +0 -154
  135. package/dist_ts/tls/sni/sni-handler.js +0 -191
  136. package/ts/core/events/index.ts +0 -3
  137. package/ts/core/models/socket-augmentation.ts +0 -38
  138. package/ts/core/utils/async-utils.ts +0 -275
  139. package/ts/core/utils/binary-heap.ts +0 -225
  140. package/ts/core/utils/enhanced-connection-pool.ts +0 -425
  141. package/ts/core/utils/fs-utils.ts +0 -270
  142. package/ts/core/utils/ip-utils.ts +0 -303
  143. package/ts/core/utils/lifecycle-component.ts +0 -251
  144. package/ts/core/utils/log-deduplicator.ts +0 -370
  145. package/ts/core/utils/security-utils.ts +0 -305
  146. package/ts/core/utils/shared-security-manager.ts +0 -470
  147. package/ts/core/utils/socket-utils.ts +0 -322
  148. package/ts/core/utils/template-utils.ts +0 -124
  149. package/ts/core/utils/validation-utils.ts +0 -177
  150. package/ts/core/utils/websocket-utils.ts +0 -33
  151. package/ts/detection/detectors/http-detector.ts +0 -127
  152. package/ts/detection/detectors/quick-detector.ts +0 -148
  153. package/ts/detection/detectors/routing-extractor.ts +0 -147
  154. package/ts/detection/detectors/tls-detector.ts +0 -223
  155. package/ts/detection/index.ts +0 -25
  156. package/ts/detection/models/detection-types.ts +0 -102
  157. package/ts/detection/models/interfaces.ts +0 -115
  158. package/ts/detection/protocol-detector.ts +0 -319
  159. package/ts/detection/utils/buffer-utils.ts +0 -141
  160. package/ts/detection/utils/fragment-manager.ts +0 -64
  161. package/ts/detection/utils/parser-utils.ts +0 -77
  162. package/ts/protocols/common/fragment-handler.ts +0 -167
  163. package/ts/protocols/common/index.ts +0 -8
  164. package/ts/protocols/common/types.ts +0 -76
  165. package/ts/protocols/http/parser.ts +0 -219
  166. package/ts/protocols/proxy/index.ts +0 -6
  167. package/ts/protocols/proxy/types.ts +0 -53
  168. package/ts/protocols/tls/alerts/index.ts +0 -3
  169. package/ts/protocols/tls/alerts/tls-alert.ts +0 -259
  170. package/ts/protocols/tls/index.ts +0 -37
  171. package/ts/protocols/tls/sni/client-hello-parser.ts +0 -629
  172. package/ts/protocols/tls/sni/index.ts +0 -6
  173. package/ts/protocols/tls/sni/sni-extraction.ts +0 -353
  174. package/ts/protocols/tls/utils/index.ts +0 -3
  175. package/ts/protocols/tls/utils/tls-utils.ts +0 -201
  176. package/ts/protocols/websocket/constants.ts +0 -60
  177. package/ts/protocols/websocket/index.ts +0 -8
  178. package/ts/protocols/websocket/types.ts +0 -53
  179. package/ts/protocols/websocket/utils.ts +0 -98
  180. package/ts/routing/router/http-router.ts +0 -266
  181. package/ts/routing/router/index.ts +0 -7
  182. package/ts/tls/index.ts +0 -29
  183. package/ts/tls/sni/index.ts +0 -3
  184. 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
- }