@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.
- package/changelog.md +15 -0
- package/dist_rust/rustproxy_linux_amd64 +0 -0
- package/dist_rust/rustproxy_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/core/index.d.ts +0 -1
- package/dist_ts/core/index.js +1 -2
- package/dist_ts/core/models/index.d.ts +0 -1
- package/dist_ts/core/models/index.js +1 -2
- package/dist_ts/core/utils/index.d.ts +0 -12
- package/dist_ts/core/utils/index.js +1 -13
- package/dist_ts/index.d.ts +0 -3
- package/dist_ts/index.js +2 -7
- package/dist_ts/protocols/http/index.d.ts +0 -1
- package/dist_ts/protocols/http/index.js +1 -2
- package/dist_ts/protocols/index.d.ts +0 -7
- package/dist_ts/protocols/index.js +1 -8
- package/dist_ts/proxies/smart-proxy/models/metrics-types.d.ts +20 -0
- package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.d.ts +2 -1
- package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.js +4 -1
- package/dist_ts/proxies/smart-proxy/socket-handler-server.js +6 -1
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.d.ts +0 -7
- package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.js +50 -51
- package/dist_ts/routing/index.d.ts +0 -1
- package/dist_ts/routing/index.js +1 -3
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/core/index.ts +0 -1
- package/ts/core/models/index.ts +0 -1
- package/ts/core/utils/index.ts +0 -12
- package/ts/index.ts +1 -7
- package/ts/protocols/http/index.ts +1 -2
- package/ts/protocols/index.ts +0 -7
- package/ts/proxies/smart-proxy/models/metrics-types.ts +21 -0
- package/ts/proxies/smart-proxy/rust-metrics-adapter.ts +4 -1
- package/ts/proxies/smart-proxy/socket-handler-server.ts +6 -0
- package/ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.ts +60 -59
- package/ts/routing/index.ts +0 -3
- package/dist_ts/core/events/index.d.ts +0 -4
- package/dist_ts/core/events/index.js +0 -5
- package/dist_ts/core/models/socket-augmentation.d.ts +0 -15
- package/dist_ts/core/models/socket-augmentation.js +0 -18
- package/dist_ts/core/utils/async-utils.d.ts +0 -81
- package/dist_ts/core/utils/async-utils.js +0 -216
- package/dist_ts/core/utils/binary-heap.d.ts +0 -73
- package/dist_ts/core/utils/binary-heap.js +0 -193
- package/dist_ts/core/utils/enhanced-connection-pool.d.ts +0 -110
- package/dist_ts/core/utils/enhanced-connection-pool.js +0 -325
- package/dist_ts/core/utils/fs-utils.d.ts +0 -144
- package/dist_ts/core/utils/fs-utils.js +0 -252
- package/dist_ts/core/utils/ip-utils.d.ts +0 -69
- package/dist_ts/core/utils/ip-utils.js +0 -270
- package/dist_ts/core/utils/lifecycle-component.d.ts +0 -59
- package/dist_ts/core/utils/lifecycle-component.js +0 -211
- package/dist_ts/core/utils/log-deduplicator.d.ts +0 -39
- package/dist_ts/core/utils/log-deduplicator.js +0 -305
- package/dist_ts/core/utils/security-utils.d.ts +0 -111
- package/dist_ts/core/utils/security-utils.js +0 -212
- package/dist_ts/core/utils/shared-security-manager.d.ts +0 -128
- package/dist_ts/core/utils/shared-security-manager.js +0 -362
- package/dist_ts/core/utils/socket-utils.d.ts +0 -63
- package/dist_ts/core/utils/socket-utils.js +0 -249
- package/dist_ts/core/utils/template-utils.d.ts +0 -37
- package/dist_ts/core/utils/template-utils.js +0 -104
- package/dist_ts/core/utils/validation-utils.d.ts +0 -61
- package/dist_ts/core/utils/validation-utils.js +0 -149
- package/dist_ts/core/utils/websocket-utils.d.ts +0 -22
- package/dist_ts/core/utils/websocket-utils.js +0 -30
- package/dist_ts/detection/detectors/http-detector.d.ts +0 -33
- package/dist_ts/detection/detectors/http-detector.js +0 -101
- package/dist_ts/detection/detectors/quick-detector.d.ts +0 -28
- package/dist_ts/detection/detectors/quick-detector.js +0 -131
- package/dist_ts/detection/detectors/routing-extractor.d.ts +0 -28
- package/dist_ts/detection/detectors/routing-extractor.js +0 -122
- package/dist_ts/detection/detectors/tls-detector.d.ts +0 -47
- package/dist_ts/detection/detectors/tls-detector.js +0 -183
- package/dist_ts/detection/index.d.ts +0 -17
- package/dist_ts/detection/index.js +0 -22
- package/dist_ts/detection/models/detection-types.d.ts +0 -87
- package/dist_ts/detection/models/detection-types.js +0 -5
- package/dist_ts/detection/models/interfaces.d.ts +0 -97
- package/dist_ts/detection/models/interfaces.js +0 -5
- package/dist_ts/detection/protocol-detector.d.ts +0 -79
- package/dist_ts/detection/protocol-detector.js +0 -253
- package/dist_ts/detection/utils/buffer-utils.d.ts +0 -61
- package/dist_ts/detection/utils/buffer-utils.js +0 -127
- package/dist_ts/detection/utils/fragment-manager.d.ts +0 -31
- package/dist_ts/detection/utils/fragment-manager.js +0 -53
- package/dist_ts/detection/utils/parser-utils.d.ts +0 -42
- package/dist_ts/detection/utils/parser-utils.js +0 -63
- package/dist_ts/protocols/common/fragment-handler.d.ts +0 -73
- package/dist_ts/protocols/common/fragment-handler.js +0 -121
- package/dist_ts/protocols/common/index.d.ts +0 -7
- package/dist_ts/protocols/common/index.js +0 -8
- package/dist_ts/protocols/common/types.d.ts +0 -68
- package/dist_ts/protocols/common/types.js +0 -7
- package/dist_ts/protocols/http/parser.d.ts +0 -58
- package/dist_ts/protocols/http/parser.js +0 -184
- package/dist_ts/protocols/proxy/index.d.ts +0 -5
- package/dist_ts/protocols/proxy/index.js +0 -6
- package/dist_ts/protocols/proxy/types.d.ts +0 -47
- package/dist_ts/protocols/proxy/types.js +0 -6
- package/dist_ts/protocols/tls/alerts/index.d.ts +0 -4
- package/dist_ts/protocols/tls/alerts/index.js +0 -5
- package/dist_ts/protocols/tls/alerts/tls-alert.d.ts +0 -150
- package/dist_ts/protocols/tls/alerts/tls-alert.js +0 -226
- package/dist_ts/protocols/tls/index.d.ts +0 -12
- package/dist_ts/protocols/tls/index.js +0 -27
- package/dist_ts/protocols/tls/sni/client-hello-parser.d.ts +0 -100
- package/dist_ts/protocols/tls/sni/client-hello-parser.js +0 -463
- package/dist_ts/protocols/tls/sni/index.d.ts +0 -5
- package/dist_ts/protocols/tls/sni/index.js +0 -6
- package/dist_ts/protocols/tls/sni/sni-extraction.d.ts +0 -58
- package/dist_ts/protocols/tls/sni/sni-extraction.js +0 -275
- package/dist_ts/protocols/tls/utils/index.d.ts +0 -4
- package/dist_ts/protocols/tls/utils/index.js +0 -5
- package/dist_ts/protocols/tls/utils/tls-utils.d.ts +0 -158
- package/dist_ts/protocols/tls/utils/tls-utils.js +0 -187
- package/dist_ts/protocols/websocket/constants.d.ts +0 -55
- package/dist_ts/protocols/websocket/constants.js +0 -58
- package/dist_ts/protocols/websocket/index.d.ts +0 -7
- package/dist_ts/protocols/websocket/index.js +0 -8
- package/dist_ts/protocols/websocket/types.d.ts +0 -47
- package/dist_ts/protocols/websocket/types.js +0 -5
- package/dist_ts/protocols/websocket/utils.d.ts +0 -25
- package/dist_ts/protocols/websocket/utils.js +0 -103
- package/dist_ts/routing/router/http-router.d.ts +0 -89
- package/dist_ts/routing/router/http-router.js +0 -205
- package/dist_ts/routing/router/index.d.ts +0 -5
- package/dist_ts/routing/router/index.js +0 -6
- package/dist_ts/tls/index.d.ts +0 -16
- package/dist_ts/tls/index.js +0 -24
- package/dist_ts/tls/sni/index.d.ts +0 -4
- package/dist_ts/tls/sni/index.js +0 -5
- package/dist_ts/tls/sni/sni-handler.d.ts +0 -154
- package/dist_ts/tls/sni/sni-handler.js +0 -191
- package/ts/core/events/index.ts +0 -3
- package/ts/core/models/socket-augmentation.ts +0 -38
- package/ts/core/utils/async-utils.ts +0 -275
- package/ts/core/utils/binary-heap.ts +0 -225
- package/ts/core/utils/enhanced-connection-pool.ts +0 -425
- package/ts/core/utils/fs-utils.ts +0 -270
- package/ts/core/utils/ip-utils.ts +0 -303
- package/ts/core/utils/lifecycle-component.ts +0 -251
- package/ts/core/utils/log-deduplicator.ts +0 -370
- package/ts/core/utils/security-utils.ts +0 -305
- package/ts/core/utils/shared-security-manager.ts +0 -470
- package/ts/core/utils/socket-utils.ts +0 -322
- package/ts/core/utils/template-utils.ts +0 -124
- package/ts/core/utils/validation-utils.ts +0 -177
- package/ts/core/utils/websocket-utils.ts +0 -33
- package/ts/detection/detectors/http-detector.ts +0 -127
- package/ts/detection/detectors/quick-detector.ts +0 -148
- package/ts/detection/detectors/routing-extractor.ts +0 -147
- package/ts/detection/detectors/tls-detector.ts +0 -223
- package/ts/detection/index.ts +0 -25
- package/ts/detection/models/detection-types.ts +0 -102
- package/ts/detection/models/interfaces.ts +0 -115
- package/ts/detection/protocol-detector.ts +0 -319
- package/ts/detection/utils/buffer-utils.ts +0 -141
- package/ts/detection/utils/fragment-manager.ts +0 -64
- package/ts/detection/utils/parser-utils.ts +0 -77
- package/ts/protocols/common/fragment-handler.ts +0 -167
- package/ts/protocols/common/index.ts +0 -8
- package/ts/protocols/common/types.ts +0 -76
- package/ts/protocols/http/parser.ts +0 -219
- package/ts/protocols/proxy/index.ts +0 -6
- package/ts/protocols/proxy/types.ts +0 -53
- package/ts/protocols/tls/alerts/index.ts +0 -3
- package/ts/protocols/tls/alerts/tls-alert.ts +0 -259
- package/ts/protocols/tls/index.ts +0 -37
- package/ts/protocols/tls/sni/client-hello-parser.ts +0 -629
- package/ts/protocols/tls/sni/index.ts +0 -6
- package/ts/protocols/tls/sni/sni-extraction.ts +0 -353
- package/ts/protocols/tls/utils/index.ts +0 -3
- package/ts/protocols/tls/utils/tls-utils.ts +0 -201
- package/ts/protocols/websocket/constants.ts +0 -60
- package/ts/protocols/websocket/index.ts +0 -8
- package/ts/protocols/websocket/types.ts +0 -53
- package/ts/protocols/websocket/utils.ts +0 -98
- package/ts/routing/router/http-router.ts +0 -266
- package/ts/routing/router/index.ts +0 -7
- package/ts/tls/index.ts +0 -29
- package/ts/tls/sni/index.ts +0 -3
- 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
|
-
}
|