@push.rocks/smartproxy 5.0.0 → 6.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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.pp.interfaces.d.ts +23 -0
- package/dist_ts/classes.pp.networkproxybridge.d.ts +15 -1
- package/dist_ts/classes.pp.networkproxybridge.js +116 -21
- package/dist_ts/classes.pp.portproxy.d.ts +20 -4
- package/dist_ts/classes.pp.portproxy.js +321 -22
- package/dist_ts/index.d.ts +6 -6
- package/dist_ts/index.js +7 -7
- package/dist_ts/networkproxy/classes.np.certificatemanager.d.ts +77 -0
- package/dist_ts/networkproxy/classes.np.certificatemanager.js +354 -0
- package/dist_ts/networkproxy/classes.np.connectionpool.d.ts +47 -0
- package/dist_ts/networkproxy/classes.np.connectionpool.js +210 -0
- package/dist_ts/networkproxy/classes.np.networkproxy.d.ts +117 -0
- package/dist_ts/networkproxy/classes.np.networkproxy.js +375 -0
- package/dist_ts/networkproxy/classes.np.requesthandler.d.ts +51 -0
- package/dist_ts/networkproxy/classes.np.requesthandler.js +210 -0
- package/dist_ts/networkproxy/classes.np.types.d.ts +82 -0
- package/dist_ts/networkproxy/classes.np.types.js +35 -0
- package/dist_ts/networkproxy/classes.np.websockethandler.d.ts +38 -0
- package/dist_ts/networkproxy/classes.np.websockethandler.js +188 -0
- package/dist_ts/networkproxy/index.d.ts +6 -0
- package/dist_ts/networkproxy/index.js +8 -0
- package/dist_ts/nfttablesproxy/classes.nftablesproxy.d.ts +219 -0
- package/dist_ts/nfttablesproxy/classes.nftablesproxy.js +1542 -0
- package/dist_ts/port80handler/classes.port80handler.d.ts +260 -0
- package/dist_ts/port80handler/classes.port80handler.js +928 -0
- package/dist_ts/smartproxy/classes.pp.connectionhandler.d.ts +39 -0
- package/dist_ts/smartproxy/classes.pp.connectionhandler.js +754 -0
- package/dist_ts/smartproxy/classes.pp.connectionmanager.d.ts +78 -0
- package/dist_ts/smartproxy/classes.pp.connectionmanager.js +378 -0
- package/dist_ts/smartproxy/classes.pp.domainconfigmanager.d.ts +55 -0
- package/dist_ts/smartproxy/classes.pp.domainconfigmanager.js +103 -0
- package/dist_ts/smartproxy/classes.pp.interfaces.d.ts +133 -0
- package/dist_ts/smartproxy/classes.pp.interfaces.js +2 -0
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.d.ts +57 -0
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.js +306 -0
- package/dist_ts/smartproxy/classes.pp.portrangemanager.d.ts +56 -0
- package/dist_ts/smartproxy/classes.pp.portrangemanager.js +179 -0
- package/dist_ts/smartproxy/classes.pp.securitymanager.d.ts +47 -0
- package/dist_ts/smartproxy/classes.pp.securitymanager.js +126 -0
- package/dist_ts/smartproxy/classes.pp.snihandler.d.ts +153 -0
- package/dist_ts/smartproxy/classes.pp.snihandler.js +1053 -0
- package/dist_ts/smartproxy/classes.pp.timeoutmanager.d.ts +47 -0
- package/dist_ts/smartproxy/classes.pp.timeoutmanager.js +154 -0
- package/dist_ts/smartproxy/classes.pp.tlsalert.d.ts +149 -0
- package/dist_ts/smartproxy/classes.pp.tlsalert.js +225 -0
- package/dist_ts/smartproxy/classes.pp.tlsmanager.d.ts +57 -0
- package/dist_ts/smartproxy/classes.pp.tlsmanager.js +132 -0
- package/dist_ts/smartproxy/classes.smartproxy.d.ts +64 -0
- package/dist_ts/smartproxy/classes.smartproxy.js +567 -0
- package/package.json +1 -1
- package/readme.md +77 -27
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +6 -6
- package/ts/networkproxy/classes.np.certificatemanager.ts +398 -0
- package/ts/networkproxy/classes.np.connectionpool.ts +241 -0
- package/ts/networkproxy/classes.np.networkproxy.ts +469 -0
- package/ts/networkproxy/classes.np.requesthandler.ts +278 -0
- package/ts/networkproxy/classes.np.types.ts +123 -0
- package/ts/networkproxy/classes.np.websockethandler.ts +226 -0
- package/ts/networkproxy/index.ts +7 -0
- package/ts/{classes.port80handler.ts → port80handler/classes.port80handler.ts} +249 -1
- package/ts/{classes.pp.connectionhandler.ts → smartproxy/classes.pp.connectionhandler.ts} +1 -1
- package/ts/{classes.pp.connectionmanager.ts → smartproxy/classes.pp.connectionmanager.ts} +1 -1
- package/ts/{classes.pp.domainconfigmanager.ts → smartproxy/classes.pp.domainconfigmanager.ts} +1 -1
- package/ts/{classes.pp.interfaces.ts → smartproxy/classes.pp.interfaces.ts} +31 -5
- package/ts/{classes.pp.networkproxybridge.ts → smartproxy/classes.pp.networkproxybridge.ts} +129 -28
- package/ts/{classes.pp.securitymanager.ts → smartproxy/classes.pp.securitymanager.ts} +1 -1
- package/ts/{classes.pp.tlsmanager.ts → smartproxy/classes.pp.tlsmanager.ts} +1 -1
- package/ts/smartproxy/classes.smartproxy.ts +679 -0
- package/ts/classes.networkproxy.ts +0 -1730
- package/ts/classes.pp.acmemanager.ts +0 -149
- package/ts/classes.pp.portproxy.ts +0 -344
- /package/ts/{classes.nftablesproxy.ts → nfttablesproxy/classes.nftablesproxy.ts} +0 -0
- /package/ts/{classes.pp.portrangemanager.ts → smartproxy/classes.pp.portrangemanager.ts} +0 -0
- /package/ts/{classes.pp.snihandler.ts → smartproxy/classes.pp.snihandler.ts} +0 -0
- /package/ts/{classes.pp.timeoutmanager.ts → smartproxy/classes.pp.timeoutmanager.ts} +0 -0
- /package/ts/{classes.pp.tlsalert.ts → smartproxy/classes.pp.tlsalert.ts} +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { SniHandler } from './classes.pp.snihandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Manages TLS-related operations including SNI extraction and validation
|
|
5
|
+
*/
|
|
6
|
+
export class TlsManager {
|
|
7
|
+
constructor(settings) {
|
|
8
|
+
this.settings = settings;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Check if a data chunk appears to be a TLS handshake
|
|
12
|
+
*/
|
|
13
|
+
isTlsHandshake(chunk) {
|
|
14
|
+
return SniHandler.isTlsHandshake(chunk);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if a data chunk appears to be a TLS ClientHello
|
|
18
|
+
*/
|
|
19
|
+
isClientHello(chunk) {
|
|
20
|
+
return SniHandler.isClientHello(chunk);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Extract Server Name Indication (SNI) from TLS handshake
|
|
24
|
+
*/
|
|
25
|
+
extractSNI(chunk, connInfo, previousDomain) {
|
|
26
|
+
// Use the SniHandler to process the TLS packet
|
|
27
|
+
return SniHandler.processTlsPacket(chunk, connInfo, this.settings.enableTlsDebugLogging || false, previousDomain);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Handle session resumption attempts
|
|
31
|
+
*/
|
|
32
|
+
handleSessionResumption(chunk, connectionId, hasSNI) {
|
|
33
|
+
// Skip if session tickets are allowed
|
|
34
|
+
if (this.settings.allowSessionTicket !== false) {
|
|
35
|
+
return { shouldBlock: false };
|
|
36
|
+
}
|
|
37
|
+
// Check for session resumption attempt
|
|
38
|
+
const resumptionInfo = SniHandler.hasSessionResumption(chunk, this.settings.enableTlsDebugLogging || false);
|
|
39
|
+
// If this is a resumption attempt without SNI, block it
|
|
40
|
+
if (resumptionInfo.isResumption && !hasSNI && !resumptionInfo.hasSNI) {
|
|
41
|
+
if (this.settings.enableTlsDebugLogging) {
|
|
42
|
+
console.log(`[${connectionId}] Session resumption detected without SNI and allowSessionTicket=false. ` +
|
|
43
|
+
`Terminating connection to force new TLS handshake.`);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
shouldBlock: true,
|
|
47
|
+
reason: 'session_ticket_blocked'
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return { shouldBlock: false };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check for SNI mismatch during renegotiation
|
|
54
|
+
*/
|
|
55
|
+
checkRenegotiationSNI(chunk, connInfo, expectedDomain, connectionId) {
|
|
56
|
+
// Only process if this looks like a TLS ClientHello
|
|
57
|
+
if (!this.isClientHello(chunk)) {
|
|
58
|
+
return { hasMismatch: false };
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
// Extract SNI with renegotiation support
|
|
62
|
+
const newSNI = SniHandler.extractSNIWithResumptionSupport(chunk, connInfo, this.settings.enableTlsDebugLogging || false);
|
|
63
|
+
// Skip if no SNI was found
|
|
64
|
+
if (!newSNI)
|
|
65
|
+
return { hasMismatch: false };
|
|
66
|
+
// Check for SNI mismatch
|
|
67
|
+
if (newSNI !== expectedDomain) {
|
|
68
|
+
if (this.settings.enableTlsDebugLogging) {
|
|
69
|
+
console.log(`[${connectionId}] Renegotiation with different SNI: ${expectedDomain} -> ${newSNI}. ` +
|
|
70
|
+
`Terminating connection - SNI domain switching is not allowed.`);
|
|
71
|
+
}
|
|
72
|
+
return { hasMismatch: true, extractedSNI: newSNI };
|
|
73
|
+
}
|
|
74
|
+
else if (this.settings.enableTlsDebugLogging) {
|
|
75
|
+
console.log(`[${connectionId}] Renegotiation detected with same SNI: ${newSNI}. Allowing.`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
console.log(`[${connectionId}] Error processing ClientHello: ${err}. Allowing connection to continue.`);
|
|
80
|
+
}
|
|
81
|
+
return { hasMismatch: false };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create a renegotiation handler function for a connection
|
|
85
|
+
*/
|
|
86
|
+
createRenegotiationHandler(connectionId, lockedDomain, connInfo, onMismatch) {
|
|
87
|
+
return (chunk) => {
|
|
88
|
+
const result = this.checkRenegotiationSNI(chunk, connInfo, lockedDomain, connectionId);
|
|
89
|
+
if (result.hasMismatch) {
|
|
90
|
+
onMismatch(connectionId, 'sni_mismatch');
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Analyze TLS connection for browser fingerprinting
|
|
96
|
+
* This helps identify browser vs non-browser connections
|
|
97
|
+
*/
|
|
98
|
+
analyzeClientHello(chunk) {
|
|
99
|
+
// Default result
|
|
100
|
+
const result = {
|
|
101
|
+
isBrowserConnection: false,
|
|
102
|
+
isRenewal: false,
|
|
103
|
+
hasSNI: false
|
|
104
|
+
};
|
|
105
|
+
try {
|
|
106
|
+
// Check if it's a ClientHello
|
|
107
|
+
if (!this.isClientHello(chunk)) {
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
// Check for session resumption
|
|
111
|
+
const resumptionInfo = SniHandler.hasSessionResumption(chunk, this.settings.enableTlsDebugLogging || false);
|
|
112
|
+
// Extract SNI
|
|
113
|
+
const sni = SniHandler.extractSNI(chunk, this.settings.enableTlsDebugLogging || false);
|
|
114
|
+
// Update result
|
|
115
|
+
result.isRenewal = resumptionInfo.isResumption;
|
|
116
|
+
result.hasSNI = !!sni;
|
|
117
|
+
// Browsers typically:
|
|
118
|
+
// 1. Send SNI extension
|
|
119
|
+
// 2. Have a variety of extensions (ALPN, etc.)
|
|
120
|
+
// 3. Use standard cipher suites
|
|
121
|
+
// ...more complex heuristics could be implemented here
|
|
122
|
+
// Simple heuristic: presence of SNI suggests browser
|
|
123
|
+
result.isBrowserConnection = !!sni;
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.log(`Error analyzing ClientHello: ${err}`);
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcC50bHNtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvc21hcnRwcm94eS9jbGFzc2VzLnBwLnRsc21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBWXhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFDckIsWUFBb0IsUUFBNEI7UUFBNUIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7SUFBRyxDQUFDO0lBRXBEOztPQUVHO0lBQ0ksY0FBYyxDQUFDLEtBQWE7UUFDakMsT0FBTyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxLQUFhO1FBQ2hDLE9BQU8sVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQ2YsS0FBYSxFQUNiLFFBQXlCLEVBQ3pCLGNBQXVCO1FBRXZCLCtDQUErQztRQUMvQyxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FDaEMsS0FBSyxFQUNMLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixJQUFJLEtBQUssRUFDNUMsY0FBYyxDQUNmLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUIsQ0FDNUIsS0FBYSxFQUNiLFlBQW9CLEVBQ3BCLE1BQWU7UUFFZixzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQ3BELEtBQUssRUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixJQUFJLEtBQUssQ0FDN0MsQ0FBQztRQUVGLHdEQUF3RDtRQUN4RCxJQUFJLGNBQWMsQ0FBQyxZQUFZLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsSUFBSSxZQUFZLDBFQUEwRTtvQkFDMUYsb0RBQW9ELENBQ3JELENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTztnQkFDTCxXQUFXLEVBQUUsSUFBSTtnQkFDakIsTUFBTSxFQUFFLHdCQUF3QjthQUNqQyxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0kscUJBQXFCLENBQzFCLEtBQWEsRUFDYixRQUF5QixFQUN6QixjQUFzQixFQUN0QixZQUFvQjtRQUVwQixvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCx5Q0FBeUM7WUFDekMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLCtCQUErQixDQUN2RCxLQUFLLEVBQ0wsUUFBUSxFQUNSLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUM3QyxDQUFDO1lBRUYsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFFM0MseUJBQXlCO1lBQ3pCLElBQUksTUFBTSxLQUFLLGNBQWMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FDVCxJQUFJLFlBQVksdUNBQXVDLGNBQWMsT0FBTyxNQUFNLElBQUk7d0JBQ3RGLCtEQUErRCxDQUNoRSxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3JELENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxHQUFHLENBQ1QsSUFBSSxZQUFZLDJDQUEyQyxNQUFNLGFBQWEsQ0FDL0UsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQ1QsSUFBSSxZQUFZLG1DQUFtQyxHQUFHLG9DQUFvQyxDQUMzRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMEJBQTBCLENBQy9CLFlBQW9CLEVBQ3BCLFlBQW9CLEVBQ3BCLFFBQXlCLEVBQ3pCLFVBQTBEO1FBRTFELE9BQU8sQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDdkYsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3ZCLFVBQVUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxLQUFhO1FBS3JDLGlCQUFpQjtRQUNqQixNQUFNLE1BQU0sR0FBRztZQUNiLG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDO1lBQ0gsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCwrQkFBK0I7WUFDL0IsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUNwRCxLQUFLLEVBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLENBQzdDLENBQUM7WUFFRixjQUFjO1lBQ2QsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FDL0IsS0FBSyxFQUNMLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUM3QyxDQUFDO1lBRUYsZ0JBQWdCO1lBQ2hCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztZQUMvQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFFdEIsc0JBQXNCO1lBQ3RCLHdCQUF3QjtZQUN4QiwrQ0FBK0M7WUFDL0MsZ0NBQWdDO1lBQ2hDLHVEQUF1RDtZQUV2RCxxREFBcUQ7WUFDckQsTUFBTSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFFbkMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { IPortProxySettings, IDomainConfig } from './classes.pp.interfaces.js';
|
|
2
|
+
import { DomainConfigManager } from './classes.pp.domainconfigmanager.js';
|
|
3
|
+
/**
|
|
4
|
+
* SmartProxy - Main class that coordinates all components
|
|
5
|
+
*/
|
|
6
|
+
export declare class SmartProxy {
|
|
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 portRangeManager;
|
|
17
|
+
private connectionHandler;
|
|
18
|
+
private port80Handler;
|
|
19
|
+
constructor(settingsArg: IPortProxySettings);
|
|
20
|
+
/**
|
|
21
|
+
* The settings for the port proxy
|
|
22
|
+
*/
|
|
23
|
+
settings: IPortProxySettings;
|
|
24
|
+
/**
|
|
25
|
+
* Initialize the Port80Handler for ACME certificate management
|
|
26
|
+
*/
|
|
27
|
+
private initializePort80Handler;
|
|
28
|
+
/**
|
|
29
|
+
* Start the proxy server
|
|
30
|
+
*/
|
|
31
|
+
start(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Stop the proxy server
|
|
34
|
+
*/
|
|
35
|
+
stop(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Updates the domain configurations for the proxy
|
|
38
|
+
*/
|
|
39
|
+
updateDomainConfigs(newDomainConfigs: IDomainConfig[]): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Updates the Port80Handler configuration
|
|
42
|
+
*/
|
|
43
|
+
updatePort80HandlerConfig(config: IPortProxySettings['port80HandlerConfig']): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Request a certificate for a specific domain
|
|
46
|
+
*/
|
|
47
|
+
requestCertificate(domain: string): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Validates if a domain name is valid for certificate issuance
|
|
50
|
+
*/
|
|
51
|
+
private isValidDomain;
|
|
52
|
+
/**
|
|
53
|
+
* Get statistics about current connections
|
|
54
|
+
*/
|
|
55
|
+
getStatistics(): any;
|
|
56
|
+
/**
|
|
57
|
+
* Get a list of eligible domains for ACME certificates
|
|
58
|
+
*/
|
|
59
|
+
getEligibleDomainsForCertificates(): string[];
|
|
60
|
+
/**
|
|
61
|
+
* Get status of certificates managed by Port80Handler
|
|
62
|
+
*/
|
|
63
|
+
getCertificateStatus(): any;
|
|
64
|
+
}
|