@push.rocks/smartproxy 3.41.8 → 4.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 (43) hide show
  1. package/dist_ts/00_commitinfo_data.js +2 -2
  2. package/dist_ts/classes.pp.acmemanager.d.ts +34 -0
  3. package/dist_ts/classes.pp.acmemanager.js +123 -0
  4. package/dist_ts/classes.pp.connectionhandler.d.ts +39 -0
  5. package/dist_ts/classes.pp.connectionhandler.js +693 -0
  6. package/dist_ts/classes.pp.connectionmanager.d.ts +78 -0
  7. package/dist_ts/classes.pp.connectionmanager.js +378 -0
  8. package/dist_ts/classes.pp.domainconfigmanager.d.ts +55 -0
  9. package/dist_ts/classes.pp.domainconfigmanager.js +103 -0
  10. package/dist_ts/classes.pp.interfaces.d.ts +109 -0
  11. package/dist_ts/classes.pp.interfaces.js +2 -0
  12. package/dist_ts/classes.pp.networkproxybridge.d.ts +43 -0
  13. package/dist_ts/classes.pp.networkproxybridge.js +211 -0
  14. package/dist_ts/classes.pp.portproxy.d.ts +48 -0
  15. package/dist_ts/classes.pp.portproxy.js +268 -0
  16. package/dist_ts/classes.pp.portrangemanager.d.ts +56 -0
  17. package/dist_ts/classes.pp.portrangemanager.js +179 -0
  18. package/dist_ts/classes.pp.securitymanager.d.ts +47 -0
  19. package/dist_ts/classes.pp.securitymanager.js +126 -0
  20. package/dist_ts/classes.pp.snihandler.d.ts +160 -0
  21. package/dist_ts/classes.pp.snihandler.js +1073 -0
  22. package/dist_ts/classes.pp.timeoutmanager.d.ts +47 -0
  23. package/dist_ts/classes.pp.timeoutmanager.js +154 -0
  24. package/dist_ts/classes.pp.tlsmanager.d.ts +57 -0
  25. package/dist_ts/classes.pp.tlsmanager.js +132 -0
  26. package/dist_ts/index.d.ts +2 -2
  27. package/dist_ts/index.js +3 -3
  28. package/package.json +1 -1
  29. package/ts/00_commitinfo_data.ts +1 -1
  30. package/ts/classes.pp.acmemanager.ts +149 -0
  31. package/ts/classes.pp.connectionhandler.ts +982 -0
  32. package/ts/classes.pp.connectionmanager.ts +446 -0
  33. package/ts/classes.pp.domainconfigmanager.ts +123 -0
  34. package/ts/classes.pp.interfaces.ts +136 -0
  35. package/ts/classes.pp.networkproxybridge.ts +258 -0
  36. package/ts/classes.pp.portproxy.ts +344 -0
  37. package/ts/classes.pp.portrangemanager.ts +214 -0
  38. package/ts/classes.pp.securitymanager.ts +147 -0
  39. package/ts/{classes.snihandler.ts → classes.pp.snihandler.ts} +2 -169
  40. package/ts/classes.pp.timeoutmanager.ts +190 -0
  41. package/ts/classes.pp.tlsmanager.ts +206 -0
  42. package/ts/index.ts +2 -2
  43. package/ts/classes.portproxy.ts +0 -2503
@@ -0,0 +1,109 @@
1
+ import * as plugins from './plugins.js';
2
+ /** Domain configuration with per-domain allowed port ranges */
3
+ export interface IDomainConfig {
4
+ domains: string[];
5
+ allowedIPs: string[];
6
+ blockedIPs?: string[];
7
+ targetIPs?: string[];
8
+ portRanges?: Array<{
9
+ from: number;
10
+ to: number;
11
+ }>;
12
+ connectionTimeout?: number;
13
+ useNetworkProxy?: boolean;
14
+ networkProxyPort?: number;
15
+ }
16
+ /** Port proxy settings including global allowed port ranges */
17
+ export interface IPortProxySettings {
18
+ fromPort: number;
19
+ toPort: number;
20
+ targetIP?: string;
21
+ domainConfigs: IDomainConfig[];
22
+ sniEnabled?: boolean;
23
+ defaultAllowedIPs?: string[];
24
+ defaultBlockedIPs?: string[];
25
+ preserveSourceIP?: boolean;
26
+ pfx?: Buffer;
27
+ key?: string | Buffer | Array<Buffer | string>;
28
+ passphrase?: string;
29
+ cert?: string | Buffer | Array<string | Buffer>;
30
+ ca?: string | Buffer | Array<string | Buffer>;
31
+ ciphers?: string;
32
+ honorCipherOrder?: boolean;
33
+ rejectUnauthorized?: boolean;
34
+ secureProtocol?: string;
35
+ servername?: string;
36
+ minVersion?: string;
37
+ maxVersion?: string;
38
+ initialDataTimeout?: number;
39
+ socketTimeout?: number;
40
+ inactivityCheckInterval?: number;
41
+ maxConnectionLifetime?: number;
42
+ inactivityTimeout?: number;
43
+ gracefulShutdownTimeout?: number;
44
+ globalPortRanges: Array<{
45
+ from: number;
46
+ to: number;
47
+ }>;
48
+ forwardAllGlobalRanges?: boolean;
49
+ noDelay?: boolean;
50
+ keepAlive?: boolean;
51
+ keepAliveInitialDelay?: number;
52
+ maxPendingDataSize?: number;
53
+ disableInactivityCheck?: boolean;
54
+ enableKeepAliveProbes?: boolean;
55
+ enableDetailedLogging?: boolean;
56
+ enableTlsDebugLogging?: boolean;
57
+ enableRandomizedTimeouts?: boolean;
58
+ allowSessionTicket?: boolean;
59
+ maxConnectionsPerIP?: number;
60
+ connectionRateLimitPerMinute?: number;
61
+ keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
62
+ keepAliveInactivityMultiplier?: number;
63
+ extendedKeepAliveLifetime?: number;
64
+ useNetworkProxy?: number[];
65
+ networkProxyPort?: number;
66
+ acme?: {
67
+ enabled?: boolean;
68
+ port?: number;
69
+ contactEmail?: string;
70
+ useProduction?: boolean;
71
+ renewThresholdDays?: number;
72
+ autoRenew?: boolean;
73
+ certificateStore?: string;
74
+ skipConfiguredCerts?: boolean;
75
+ };
76
+ }
77
+ /**
78
+ * Enhanced connection record
79
+ */
80
+ export interface IConnectionRecord {
81
+ id: string;
82
+ incoming: plugins.net.Socket;
83
+ outgoing: plugins.net.Socket | null;
84
+ incomingStartTime: number;
85
+ outgoingStartTime?: number;
86
+ outgoingClosedTime?: number;
87
+ lockedDomain?: string;
88
+ connectionClosed: boolean;
89
+ cleanupTimer?: NodeJS.Timeout;
90
+ lastActivity: number;
91
+ pendingData: Buffer[];
92
+ pendingDataSize: number;
93
+ bytesReceived: number;
94
+ bytesSent: number;
95
+ remoteIP: string;
96
+ localPort: number;
97
+ isTLS: boolean;
98
+ tlsHandshakeComplete: boolean;
99
+ hasReceivedInitialData: boolean;
100
+ domainConfig?: IDomainConfig;
101
+ hasKeepAlive: boolean;
102
+ inactivityWarningIssued?: boolean;
103
+ incomingTerminationReason?: string | null;
104
+ outgoingTerminationReason?: string | null;
105
+ usingNetworkProxy?: boolean;
106
+ renegotiationHandler?: (chunk: Buffer) => void;
107
+ isBrowserConnection?: boolean;
108
+ domainSwitches?: number;
109
+ }
@@ -0,0 +1,2 @@
1
+ import * as plugins from './plugins.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcC5pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wcC5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDIn0=
@@ -0,0 +1,43 @@
1
+ import * as plugins from './plugins.js';
2
+ import { NetworkProxy } from './classes.networkproxy.js';
3
+ import type { IConnectionRecord, IPortProxySettings } from './classes.pp.interfaces.js';
4
+ /**
5
+ * Manages NetworkProxy integration for TLS termination
6
+ */
7
+ export declare class NetworkProxyBridge {
8
+ private settings;
9
+ private networkProxy;
10
+ constructor(settings: IPortProxySettings);
11
+ /**
12
+ * Initialize NetworkProxy instance
13
+ */
14
+ initialize(): Promise<void>;
15
+ /**
16
+ * Get the NetworkProxy instance
17
+ */
18
+ getNetworkProxy(): NetworkProxy | null;
19
+ /**
20
+ * Get the NetworkProxy port
21
+ */
22
+ getNetworkProxyPort(): number;
23
+ /**
24
+ * Start NetworkProxy
25
+ */
26
+ start(): Promise<void>;
27
+ /**
28
+ * Stop NetworkProxy
29
+ */
30
+ stop(): Promise<void>;
31
+ /**
32
+ * Forwards a TLS connection to a NetworkProxy for handling
33
+ */
34
+ forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialData: Buffer, customProxyPort?: number, onError?: (reason: string) => void): void;
35
+ /**
36
+ * Synchronizes domain configurations to NetworkProxy
37
+ */
38
+ syncDomainConfigsToNetworkProxy(): Promise<void>;
39
+ /**
40
+ * Request a certificate for a specific domain
41
+ */
42
+ requestCertificate(domain: string): Promise<boolean>;
43
+ }
@@ -0,0 +1,211 @@
1
+ import * as plugins from './plugins.js';
2
+ import { NetworkProxy } from './classes.networkproxy.js';
3
+ /**
4
+ * Manages NetworkProxy integration for TLS termination
5
+ */
6
+ export class NetworkProxyBridge {
7
+ constructor(settings) {
8
+ this.settings = settings;
9
+ this.networkProxy = null;
10
+ }
11
+ /**
12
+ * Initialize NetworkProxy instance
13
+ */
14
+ async initialize() {
15
+ if (!this.networkProxy && this.settings.useNetworkProxy && this.settings.useNetworkProxy.length > 0) {
16
+ // Configure NetworkProxy options based on PortProxy settings
17
+ const networkProxyOptions = {
18
+ port: this.settings.networkProxyPort,
19
+ portProxyIntegration: true,
20
+ logLevel: this.settings.enableDetailedLogging ? 'debug' : 'info',
21
+ };
22
+ // Add ACME settings if configured
23
+ if (this.settings.acme) {
24
+ networkProxyOptions.acme = { ...this.settings.acme };
25
+ }
26
+ this.networkProxy = new NetworkProxy(networkProxyOptions);
27
+ console.log(`Initialized NetworkProxy on port ${this.settings.networkProxyPort}`);
28
+ // Convert and apply domain configurations to NetworkProxy
29
+ await this.syncDomainConfigsToNetworkProxy();
30
+ }
31
+ }
32
+ /**
33
+ * Get the NetworkProxy instance
34
+ */
35
+ getNetworkProxy() {
36
+ return this.networkProxy;
37
+ }
38
+ /**
39
+ * Get the NetworkProxy port
40
+ */
41
+ getNetworkProxyPort() {
42
+ return this.networkProxy ? this.networkProxy.getListeningPort() : this.settings.networkProxyPort || 8443;
43
+ }
44
+ /**
45
+ * Start NetworkProxy
46
+ */
47
+ async start() {
48
+ if (this.networkProxy) {
49
+ await this.networkProxy.start();
50
+ console.log(`NetworkProxy started on port ${this.settings.networkProxyPort}`);
51
+ // Log ACME status
52
+ if (this.settings.acme?.enabled) {
53
+ console.log(`ACME certificate management is enabled (${this.settings.acme.useProduction ? 'Production' : 'Staging'} mode)`);
54
+ console.log(`ACME HTTP challenge server on port ${this.settings.acme.port}`);
55
+ // Register domains for ACME certificates if enabled
56
+ if (this.networkProxy.options.acme?.enabled) {
57
+ console.log('Registering domains with ACME certificate manager...');
58
+ // The NetworkProxy will handle this internally via registerDomainsWithAcmeManager()
59
+ }
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Stop NetworkProxy
65
+ */
66
+ async stop() {
67
+ if (this.networkProxy) {
68
+ try {
69
+ console.log('Stopping NetworkProxy...');
70
+ await this.networkProxy.stop();
71
+ console.log('NetworkProxy stopped successfully');
72
+ // Log ACME shutdown if it was enabled
73
+ if (this.settings.acme?.enabled) {
74
+ console.log('ACME certificate manager stopped');
75
+ }
76
+ }
77
+ catch (err) {
78
+ console.log(`Error stopping NetworkProxy: ${err}`);
79
+ }
80
+ }
81
+ }
82
+ /**
83
+ * Forwards a TLS connection to a NetworkProxy for handling
84
+ */
85
+ forwardToNetworkProxy(connectionId, socket, record, initialData, customProxyPort, onError) {
86
+ // Ensure NetworkProxy is initialized
87
+ if (!this.networkProxy) {
88
+ console.log(`[${connectionId}] NetworkProxy not initialized. Cannot forward connection.`);
89
+ if (onError) {
90
+ onError('network_proxy_not_initialized');
91
+ }
92
+ return;
93
+ }
94
+ // Use the custom port if provided, otherwise use the default NetworkProxy port
95
+ const proxyPort = customProxyPort || this.networkProxy.getListeningPort();
96
+ const proxyHost = 'localhost'; // Assuming NetworkProxy runs locally
97
+ if (this.settings.enableDetailedLogging) {
98
+ console.log(`[${connectionId}] Forwarding TLS connection to NetworkProxy at ${proxyHost}:${proxyPort}`);
99
+ }
100
+ // Create a connection to the NetworkProxy
101
+ const proxySocket = plugins.net.connect({
102
+ host: proxyHost,
103
+ port: proxyPort,
104
+ });
105
+ // Store the outgoing socket in the record
106
+ record.outgoing = proxySocket;
107
+ record.outgoingStartTime = Date.now();
108
+ record.usingNetworkProxy = true;
109
+ // Set up error handlers
110
+ proxySocket.on('error', (err) => {
111
+ console.log(`[${connectionId}] Error connecting to NetworkProxy: ${err.message}`);
112
+ if (onError) {
113
+ onError('network_proxy_connect_error');
114
+ }
115
+ });
116
+ // Handle connection to NetworkProxy
117
+ proxySocket.on('connect', () => {
118
+ if (this.settings.enableDetailedLogging) {
119
+ console.log(`[${connectionId}] Connected to NetworkProxy at ${proxyHost}:${proxyPort}`);
120
+ }
121
+ // First send the initial data that contains the TLS ClientHello
122
+ proxySocket.write(initialData);
123
+ // Now set up bidirectional piping between client and NetworkProxy
124
+ socket.pipe(proxySocket);
125
+ proxySocket.pipe(socket);
126
+ // Update activity on data transfer (caller should handle this)
127
+ if (this.settings.enableDetailedLogging) {
128
+ console.log(`[${connectionId}] TLS connection successfully forwarded to NetworkProxy`);
129
+ }
130
+ });
131
+ }
132
+ /**
133
+ * Synchronizes domain configurations to NetworkProxy
134
+ */
135
+ async syncDomainConfigsToNetworkProxy() {
136
+ if (!this.networkProxy) {
137
+ console.log('Cannot sync configurations - NetworkProxy not initialized');
138
+ return;
139
+ }
140
+ try {
141
+ // Get SSL certificates from assets
142
+ // Import fs directly since it's not in plugins
143
+ const fs = await import('fs');
144
+ let certPair;
145
+ try {
146
+ certPair = {
147
+ key: fs.readFileSync('assets/certs/key.pem', 'utf8'),
148
+ cert: fs.readFileSync('assets/certs/cert.pem', 'utf8'),
149
+ };
150
+ }
151
+ catch (certError) {
152
+ console.log(`Warning: Could not read default certificates: ${certError}`);
153
+ console.log('Using empty certificate placeholders - ACME will generate proper certificates if enabled');
154
+ // Use empty placeholders - NetworkProxy will use its internal defaults
155
+ // or ACME will generate proper ones if enabled
156
+ certPair = {
157
+ key: '',
158
+ cert: '',
159
+ };
160
+ }
161
+ // Convert domain configs to NetworkProxy configs
162
+ const proxyConfigs = this.networkProxy.convertPortProxyConfigs(this.settings.domainConfigs, certPair);
163
+ // Log ACME-eligible domains if ACME is enabled
164
+ if (this.settings.acme?.enabled) {
165
+ const acmeEligibleDomains = proxyConfigs
166
+ .filter((config) => !config.hostName.includes('*')) // Exclude wildcards
167
+ .map((config) => config.hostName);
168
+ if (acmeEligibleDomains.length > 0) {
169
+ console.log(`Domains eligible for ACME certificates: ${acmeEligibleDomains.join(', ')}`);
170
+ }
171
+ else {
172
+ console.log('No domains eligible for ACME certificates found in configuration');
173
+ }
174
+ }
175
+ // Update NetworkProxy with the converted configs
176
+ await this.networkProxy.updateProxyConfigs(proxyConfigs);
177
+ console.log(`Successfully synchronized ${proxyConfigs.length} domain configurations to NetworkProxy`);
178
+ }
179
+ catch (err) {
180
+ console.log(`Failed to sync configurations: ${err}`);
181
+ }
182
+ }
183
+ /**
184
+ * Request a certificate for a specific domain
185
+ */
186
+ async requestCertificate(domain) {
187
+ if (!this.networkProxy) {
188
+ console.log('Cannot request certificate - NetworkProxy not initialized');
189
+ return false;
190
+ }
191
+ if (!this.settings.acme?.enabled) {
192
+ console.log('Cannot request certificate - ACME is not enabled');
193
+ return false;
194
+ }
195
+ try {
196
+ const result = await this.networkProxy.requestCertificate(domain);
197
+ if (result) {
198
+ console.log(`Certificate request for ${domain} submitted successfully`);
199
+ }
200
+ else {
201
+ console.log(`Certificate request for ${domain} failed`);
202
+ }
203
+ return result;
204
+ }
205
+ catch (err) {
206
+ console.log(`Error requesting certificate: ${err}`);
207
+ return false;
208
+ }
209
+ }
210
+ }
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcC5uZXR3b3JrcHJveHlicmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnBwLm5ldHdvcmtwcm94eWJyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLFlBQW9CLFFBQTRCO1FBQTVCLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBRnhDLGlCQUFZLEdBQXdCLElBQUksQ0FBQztJQUVFLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEcsNkRBQTZEO1lBQzdELE1BQU0sbUJBQW1CLEdBQVE7Z0JBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFpQjtnQkFDckMsb0JBQW9CLEVBQUUsSUFBSTtnQkFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTTthQUNqRSxDQUFDO1lBRUYsa0NBQWtDO1lBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsbUJBQW1CLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZELENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFFMUQs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
@@ -0,0 +1,48 @@
1
+ import type { IPortProxySettings, IDomainConfig } from './classes.pp.interfaces.js';
2
+ import { DomainConfigManager } from './classes.pp.domainconfigmanager.js';
3
+ /**
4
+ * PortProxy - Main class that coordinates all components
5
+ */
6
+ export declare class PortProxy {
7
+ private netServers;
8
+ private connectionLogger;
9
+ private isShuttingDown;
10
+ private connectionManager;
11
+ private securityManager;
12
+ domainConfigManager: DomainConfigManager;
13
+ private tlsManager;
14
+ private networkProxyBridge;
15
+ private timeoutManager;
16
+ private acmeManager;
17
+ private portRangeManager;
18
+ private connectionHandler;
19
+ constructor(settingsArg: IPortProxySettings);
20
+ /**
21
+ * The settings for the port proxy
22
+ */
23
+ settings: IPortProxySettings;
24
+ /**
25
+ * Start the proxy server
26
+ */
27
+ start(): Promise<void>;
28
+ /**
29
+ * Stop the proxy server
30
+ */
31
+ stop(): Promise<void>;
32
+ /**
33
+ * Updates the domain configurations for the proxy
34
+ */
35
+ updateDomainConfigs(newDomainConfigs: IDomainConfig[]): Promise<void>;
36
+ /**
37
+ * Updates the ACME certificate settings
38
+ */
39
+ updateAcmeSettings(acmeSettings: IPortProxySettings['acme']): Promise<void>;
40
+ /**
41
+ * Requests a certificate for a specific domain
42
+ */
43
+ requestCertificate(domain: string): Promise<boolean>;
44
+ /**
45
+ * Get statistics about current connections
46
+ */
47
+ getStatistics(): any;
48
+ }