@push.rocks/smartproxy 22.6.0 → 23.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 +18 -0
- package/dist_rust/{rustproxy → rustproxy_linux_amd64} +0 -0
- package/dist_rust/rustproxy_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/index.d.ts +0 -1
- package/dist_ts/index.js +1 -3
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/proxies/index.d.ts +0 -1
- package/dist_ts/proxies/index.js +1 -3
- package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +83 -212
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
- package/npmextra.json +3 -0
- package/package.json +13 -11
- package/readme.md +35 -31
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +0 -3
- package/ts/plugins.ts +2 -0
- package/ts/proxies/index.ts +0 -3
- package/ts/proxies/smart-proxy/models/route-types.ts +0 -2
- package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +102 -233
- package/ts/proxies/smart-proxy/smart-proxy.ts +1 -2
- package/dist_ts/common/eventUtils.d.ts +0 -14
- package/dist_ts/common/eventUtils.js +0 -20
- package/dist_ts/common/types.d.ts +0 -82
- package/dist_ts/common/types.js +0 -15
- package/dist_ts/core/utils/event-system.d.ts +0 -200
- package/dist_ts/core/utils/event-system.js +0 -224
- package/dist_ts/core/utils/event-utils.d.ts +0 -15
- package/dist_ts/core/utils/event-utils.js +0 -11
- package/dist_ts/core/utils/route-manager.d.ts +0 -88
- package/dist_ts/core/utils/route-manager.js +0 -342
- package/dist_ts/core/utils/route-utils.d.ts +0 -28
- package/dist_ts/core/utils/route-utils.js +0 -67
- package/dist_ts/detection/detectors/http-detector-v2.d.ts +0 -33
- package/dist_ts/detection/detectors/http-detector-v2.js +0 -87
- package/dist_ts/detection/detectors/tls-detector-v2.d.ts +0 -33
- package/dist_ts/detection/detectors/tls-detector-v2.js +0 -80
- package/dist_ts/detection/protocol-detector-v2.d.ts +0 -46
- package/dist_ts/detection/protocol-detector-v2.js +0 -116
- package/dist_ts/forwarding/config/forwarding-types.d.ts +0 -42
- package/dist_ts/forwarding/config/forwarding-types.js +0 -18
- package/dist_ts/forwarding/config/index.d.ts +0 -9
- package/dist_ts/forwarding/config/index.js +0 -10
- package/dist_ts/forwarding/factory/forwarding-factory.d.ts +0 -25
- package/dist_ts/forwarding/factory/forwarding-factory.js +0 -172
- package/dist_ts/forwarding/factory/index.d.ts +0 -4
- package/dist_ts/forwarding/factory/index.js +0 -5
- package/dist_ts/forwarding/handlers/base-handler.d.ts +0 -62
- package/dist_ts/forwarding/handlers/base-handler.js +0 -121
- package/dist_ts/forwarding/handlers/http-handler.d.ts +0 -30
- package/dist_ts/forwarding/handlers/http-handler.js +0 -143
- package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +0 -29
- package/dist_ts/forwarding/handlers/https-passthrough-handler.js +0 -156
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +0 -36
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +0 -276
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +0 -35
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +0 -261
- package/dist_ts/forwarding/handlers/index.d.ts +0 -8
- package/dist_ts/forwarding/handlers/index.js +0 -9
- package/dist_ts/forwarding/index.d.ts +0 -13
- package/dist_ts/forwarding/index.js +0 -16
- package/dist_ts/http/index.d.ts +0 -5
- package/dist_ts/http/index.js +0 -8
- package/dist_ts/http/models/http-types.d.ts +0 -6
- package/dist_ts/http/models/http-types.js +0 -7
- package/dist_ts/http/router/index.d.ts +0 -8
- package/dist_ts/http/router/index.js +0 -7
- package/dist_ts/http/router/proxy-router.d.ts +0 -115
- package/dist_ts/http/router/proxy-router.js +0 -325
- package/dist_ts/http/router/route-router.d.ts +0 -108
- package/dist_ts/http/router/route-router.js +0 -393
- package/dist_ts/protocols/tls/constants.d.ts +0 -122
- package/dist_ts/protocols/tls/constants.js +0 -135
- package/dist_ts/protocols/tls/parser.d.ts +0 -53
- package/dist_ts/protocols/tls/parser.js +0 -294
- package/dist_ts/protocols/tls/types.d.ts +0 -65
- package/dist_ts/protocols/tls/types.js +0 -5
- package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +0 -95
- package/dist_ts/proxies/http-proxy/certificate-manager.js +0 -214
- package/dist_ts/proxies/http-proxy/connection-pool.d.ts +0 -47
- package/dist_ts/proxies/http-proxy/connection-pool.js +0 -195
- package/dist_ts/proxies/http-proxy/context-creator.d.ts +0 -34
- package/dist_ts/proxies/http-proxy/context-creator.js +0 -108
- package/dist_ts/proxies/http-proxy/default-certificates.d.ts +0 -54
- package/dist_ts/proxies/http-proxy/default-certificates.js +0 -127
- package/dist_ts/proxies/http-proxy/function-cache.d.ts +0 -95
- package/dist_ts/proxies/http-proxy/function-cache.js +0 -215
- package/dist_ts/proxies/http-proxy/handlers/index.d.ts +0 -4
- package/dist_ts/proxies/http-proxy/handlers/index.js +0 -6
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +0 -18
- package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +0 -78
- package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +0 -19
- package/dist_ts/proxies/http-proxy/handlers/static-handler.js +0 -211
- package/dist_ts/proxies/http-proxy/http-proxy.d.ts +0 -117
- package/dist_ts/proxies/http-proxy/http-proxy.js +0 -521
- package/dist_ts/proxies/http-proxy/http-request-handler.d.ts +0 -40
- package/dist_ts/proxies/http-proxy/http-request-handler.js +0 -257
- package/dist_ts/proxies/http-proxy/http2-request-handler.d.ts +0 -24
- package/dist_ts/proxies/http-proxy/http2-request-handler.js +0 -201
- package/dist_ts/proxies/http-proxy/index.d.ts +0 -14
- package/dist_ts/proxies/http-proxy/index.js +0 -16
- package/dist_ts/proxies/http-proxy/models/http-types.d.ts +0 -117
- package/dist_ts/proxies/http-proxy/models/http-types.js +0 -92
- package/dist_ts/proxies/http-proxy/models/index.d.ts +0 -5
- package/dist_ts/proxies/http-proxy/models/index.js +0 -6
- package/dist_ts/proxies/http-proxy/models/types.d.ts +0 -75
- package/dist_ts/proxies/http-proxy/models/types.js +0 -35
- package/dist_ts/proxies/http-proxy/request-handler.d.ts +0 -97
- package/dist_ts/proxies/http-proxy/request-handler.js +0 -737
- package/dist_ts/proxies/http-proxy/security-manager.d.ts +0 -98
- package/dist_ts/proxies/http-proxy/security-manager.js +0 -341
- package/dist_ts/proxies/http-proxy/websocket-handler.d.ts +0 -50
- package/dist_ts/proxies/http-proxy/websocket-handler.js +0 -505
- package/dist_ts/proxies/nftables-proxy/index.d.ts +0 -6
- package/dist_ts/proxies/nftables-proxy/index.js +0 -7
- package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +0 -15
- package/dist_ts/proxies/nftables-proxy/models/errors.js +0 -28
- package/dist_ts/proxies/nftables-proxy/models/index.d.ts +0 -5
- package/dist_ts/proxies/nftables-proxy/models/index.js +0 -6
- package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +0 -75
- package/dist_ts/proxies/nftables-proxy/models/interfaces.js +0 -5
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +0 -124
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +0 -1374
- package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +0 -9
- package/dist_ts/proxies/nftables-proxy/utils/index.js +0 -12
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +0 -66
- package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +0 -131
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +0 -39
- package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +0 -112
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +0 -59
- package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +0 -130
- package/dist_ts/proxies/smart-proxy/acme-state-manager.d.ts +0 -42
- package/dist_ts/proxies/smart-proxy/acme-state-manager.js +0 -101
- package/dist_ts/proxies/smart-proxy/cert-store.d.ts +0 -10
- package/dist_ts/proxies/smart-proxy/cert-store.js +0 -72
- package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +0 -164
- package/dist_ts/proxies/smart-proxy/certificate-manager.js +0 -745
- package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +0 -128
- package/dist_ts/proxies/smart-proxy/connection-manager.js +0 -689
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +0 -43
- package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +0 -180
- package/dist_ts/proxies/smart-proxy/metrics-collector.d.ts +0 -98
- package/dist_ts/proxies/smart-proxy/metrics-collector.js +0 -355
- package/dist_ts/proxies/smart-proxy/nftables-manager.d.ts +0 -82
- package/dist_ts/proxies/smart-proxy/nftables-manager.js +0 -237
- package/dist_ts/proxies/smart-proxy/port-manager.d.ts +0 -117
- package/dist_ts/proxies/smart-proxy/port-manager.js +0 -318
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -60
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +0 -1407
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +0 -112
- package/dist_ts/proxies/smart-proxy/route-manager.js +0 -453
- package/dist_ts/proxies/smart-proxy/route-orchestrator.d.ts +0 -56
- package/dist_ts/proxies/smart-proxy/route-orchestrator.js +0 -204
- package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +0 -23
- package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +0 -104
- package/dist_ts/proxies/smart-proxy/security-manager.d.ts +0 -74
- package/dist_ts/proxies/smart-proxy/security-manager.js +0 -227
- package/dist_ts/proxies/smart-proxy/throughput-tracker.d.ts +0 -36
- package/dist_ts/proxies/smart-proxy/throughput-tracker.js +0 -115
- package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +0 -48
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +0 -158
- package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +0 -50
- package/dist_ts/proxies/smart-proxy/tls-manager.js +0 -110
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +0 -161
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +0 -282
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +0 -73
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +0 -259
- package/dist_ts/routing/router/proxy-router.d.ts +0 -115
- package/dist_ts/routing/router/proxy-router.js +0 -325
- package/dist_ts/routing/router/route-router.d.ts +0 -108
- package/dist_ts/routing/router/route-router.js +0 -393
- package/dist_ts/tls/alerts/index.d.ts +0 -4
- package/dist_ts/tls/alerts/index.js +0 -5
- package/dist_ts/tls/alerts/tls-alert.d.ts +0 -150
- package/dist_ts/tls/alerts/tls-alert.js +0 -226
- package/dist_ts/tls/sni/client-hello-parser.d.ts +0 -100
- package/dist_ts/tls/sni/client-hello-parser.js +0 -464
- package/dist_ts/tls/sni/sni-extraction.d.ts +0 -58
- package/dist_ts/tls/sni/sni-extraction.js +0 -275
- package/dist_ts/tls/utils/index.d.ts +0 -4
- package/dist_ts/tls/utils/index.js +0 -5
- package/dist_ts/tls/utils/tls-utils.d.ts +0 -49
- package/dist_ts/tls/utils/tls-utils.js +0 -75
- package/ts/proxies/nftables-proxy/index.ts +0 -6
- package/ts/proxies/nftables-proxy/models/errors.ts +0 -30
- package/ts/proxies/nftables-proxy/models/index.ts +0 -5
- package/ts/proxies/nftables-proxy/models/interfaces.ts +0 -94
- package/ts/proxies/nftables-proxy/nftables-proxy.ts +0 -1754
- package/ts/proxies/nftables-proxy/utils/index.ts +0 -38
- package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +0 -162
- package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +0 -125
- package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +0 -156
- package/ts/proxies/smart-proxy/rust-binary-locator.ts +0 -112
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { ILogger, ICertificateEntry } from './models/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Interface for default certificate data
|
|
4
|
-
*/
|
|
5
|
-
export interface IDefaultCertificates {
|
|
6
|
-
key: string;
|
|
7
|
-
cert: string;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Provides default SSL certificates for HttpProxy.
|
|
11
|
-
* This is a minimal replacement for the deprecated CertificateManager.
|
|
12
|
-
*
|
|
13
|
-
* For production certificate management, use SmartCertManager instead.
|
|
14
|
-
*/
|
|
15
|
-
export declare class DefaultCertificateProvider {
|
|
16
|
-
private logger?;
|
|
17
|
-
private defaultCertificates;
|
|
18
|
-
private certificateCache;
|
|
19
|
-
private initialized;
|
|
20
|
-
constructor(logger?: ILogger);
|
|
21
|
-
/**
|
|
22
|
-
* Load default certificates asynchronously (preferred)
|
|
23
|
-
*/
|
|
24
|
-
loadDefaultCertificatesAsync(): Promise<IDefaultCertificates>;
|
|
25
|
-
/**
|
|
26
|
-
* Load default certificates synchronously (for backward compatibility)
|
|
27
|
-
* @deprecated Use loadDefaultCertificatesAsync instead
|
|
28
|
-
*/
|
|
29
|
-
loadDefaultCertificatesSync(): IDefaultCertificates;
|
|
30
|
-
/**
|
|
31
|
-
* Gets the default certificates (loads synchronously if not already loaded)
|
|
32
|
-
*/
|
|
33
|
-
getDefaultCertificates(): IDefaultCertificates;
|
|
34
|
-
/**
|
|
35
|
-
* Updates a certificate in the cache
|
|
36
|
-
*/
|
|
37
|
-
updateCertificate(domain: string, cert: string, key: string): void;
|
|
38
|
-
/**
|
|
39
|
-
* Gets a cached certificate
|
|
40
|
-
*/
|
|
41
|
-
getCachedCertificate(domain: string): ICertificateEntry | null;
|
|
42
|
-
/**
|
|
43
|
-
* Gets statistics for metrics
|
|
44
|
-
*/
|
|
45
|
-
getStats(): {
|
|
46
|
-
cachedCertificates: number;
|
|
47
|
-
defaultCertEnabled: boolean;
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* Generate a fallback self-signed certificate placeholder
|
|
51
|
-
* Note: This is just a placeholder - real apps should provide proper certificates
|
|
52
|
-
*/
|
|
53
|
-
private generateFallbackCertificate;
|
|
54
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../plugins.js';
|
|
2
|
-
import * as fs from 'fs';
|
|
3
|
-
import * as path from 'path';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
|
-
import { AsyncFileSystem } from '../../core/utils/fs-utils.js';
|
|
6
|
-
/**
|
|
7
|
-
* Provides default SSL certificates for HttpProxy.
|
|
8
|
-
* This is a minimal replacement for the deprecated CertificateManager.
|
|
9
|
-
*
|
|
10
|
-
* For production certificate management, use SmartCertManager instead.
|
|
11
|
-
*/
|
|
12
|
-
export class DefaultCertificateProvider {
|
|
13
|
-
constructor(logger) {
|
|
14
|
-
this.logger = logger;
|
|
15
|
-
this.defaultCertificates = null;
|
|
16
|
-
this.certificateCache = new Map();
|
|
17
|
-
this.initialized = false;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Load default certificates asynchronously (preferred)
|
|
21
|
-
*/
|
|
22
|
-
async loadDefaultCertificatesAsync() {
|
|
23
|
-
if (this.defaultCertificates) {
|
|
24
|
-
return this.defaultCertificates;
|
|
25
|
-
}
|
|
26
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
27
|
-
const certPath = path.join(__dirname, '..', '..', '..', 'assets', 'certs');
|
|
28
|
-
try {
|
|
29
|
-
const [key, cert] = await Promise.all([
|
|
30
|
-
AsyncFileSystem.readFile(path.join(certPath, 'key.pem')),
|
|
31
|
-
AsyncFileSystem.readFile(path.join(certPath, 'cert.pem'))
|
|
32
|
-
]);
|
|
33
|
-
this.defaultCertificates = { key, cert };
|
|
34
|
-
this.logger?.info?.('Loaded default certificates from filesystem');
|
|
35
|
-
this.initialized = true;
|
|
36
|
-
return this.defaultCertificates;
|
|
37
|
-
}
|
|
38
|
-
catch (error) {
|
|
39
|
-
this.logger?.warn?.(`Failed to load default certificates: ${error}`);
|
|
40
|
-
this.defaultCertificates = this.generateFallbackCertificate();
|
|
41
|
-
this.initialized = true;
|
|
42
|
-
return this.defaultCertificates;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Load default certificates synchronously (for backward compatibility)
|
|
47
|
-
* @deprecated Use loadDefaultCertificatesAsync instead
|
|
48
|
-
*/
|
|
49
|
-
loadDefaultCertificatesSync() {
|
|
50
|
-
if (this.defaultCertificates) {
|
|
51
|
-
return this.defaultCertificates;
|
|
52
|
-
}
|
|
53
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
54
|
-
const certPath = path.join(__dirname, '..', '..', '..', 'assets', 'certs');
|
|
55
|
-
try {
|
|
56
|
-
this.defaultCertificates = {
|
|
57
|
-
key: fs.readFileSync(path.join(certPath, 'key.pem'), 'utf8'),
|
|
58
|
-
cert: fs.readFileSync(path.join(certPath, 'cert.pem'), 'utf8')
|
|
59
|
-
};
|
|
60
|
-
this.logger?.info?.('Loaded default certificates from filesystem (sync)');
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
this.logger?.warn?.(`Failed to load default certificates: ${error}`);
|
|
64
|
-
this.defaultCertificates = this.generateFallbackCertificate();
|
|
65
|
-
}
|
|
66
|
-
this.initialized = true;
|
|
67
|
-
return this.defaultCertificates;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Gets the default certificates (loads synchronously if not already loaded)
|
|
71
|
-
*/
|
|
72
|
-
getDefaultCertificates() {
|
|
73
|
-
if (!this.defaultCertificates) {
|
|
74
|
-
return this.loadDefaultCertificatesSync();
|
|
75
|
-
}
|
|
76
|
-
return this.defaultCertificates;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Updates a certificate in the cache
|
|
80
|
-
*/
|
|
81
|
-
updateCertificate(domain, cert, key) {
|
|
82
|
-
this.certificateCache.set(domain, {
|
|
83
|
-
cert,
|
|
84
|
-
key,
|
|
85
|
-
expires: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000) // 90 days
|
|
86
|
-
});
|
|
87
|
-
this.logger?.info?.(`Certificate updated for ${domain}`);
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Gets a cached certificate
|
|
91
|
-
*/
|
|
92
|
-
getCachedCertificate(domain) {
|
|
93
|
-
return this.certificateCache.get(domain) || null;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Gets statistics for metrics
|
|
97
|
-
*/
|
|
98
|
-
getStats() {
|
|
99
|
-
return {
|
|
100
|
-
cachedCertificates: this.certificateCache.size,
|
|
101
|
-
defaultCertEnabled: this.defaultCertificates !== null
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Generate a fallback self-signed certificate placeholder
|
|
106
|
-
* Note: This is just a placeholder - real apps should provide proper certificates
|
|
107
|
-
*/
|
|
108
|
-
generateFallbackCertificate() {
|
|
109
|
-
this.logger?.warn?.('Using fallback self-signed certificate placeholder');
|
|
110
|
-
// Minimal self-signed certificate for fallback only
|
|
111
|
-
// In production, proper certificates should be provided via SmartCertManager
|
|
112
|
-
const selfSignedCert = `-----BEGIN CERTIFICATE-----
|
|
113
|
-
MIIBkTCB+wIJAKHHIgIIA0/cMA0GCSqGSIb3DQEBBQUAMA0xCzAJBgNVBAYTAlVT
|
|
114
|
-
MB4XDTE0MDEwMTAwMDAwMFoXDTI0MDEwMTAwMDAwMFowDTELMAkGA1UEBhMCVVMw
|
|
115
|
-
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMRiH0VwnOH3jCV7c6JFZWYrvuqy
|
|
116
|
-
-----END CERTIFICATE-----`;
|
|
117
|
-
const selfSignedKey = `-----BEGIN PRIVATE KEY-----
|
|
118
|
-
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMRiH0VwnOH3jCV7
|
|
119
|
-
c6JFZWYrvuqyALCLXj0pcr1iqNdHjegNXnkl5zjdaUjq4edNOKl7M1AlFiYjG2xk
|
|
120
|
-
-----END PRIVATE KEY-----`;
|
|
121
|
-
return {
|
|
122
|
-
key: selfSignedKey,
|
|
123
|
-
cert: selfSignedCert
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jZXJ0aWZpY2F0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL2h0dHAtcHJveHkvZGVmYXVsdC1jZXJ0aWZpY2F0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQVcvRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTywwQkFBMEI7SUFLckMsWUFBb0IsTUFBZ0I7UUFBaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVTtRQUo1Qix3QkFBbUIsR0FBZ0MsSUFBSSxDQUFDO1FBQ3hELHFCQUFnQixHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzdELGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBRVcsQ0FBQztJQUV4Qzs7T0FFRztJQUNJLEtBQUssQ0FBQyw0QkFBNEI7UUFDdkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUUzRSxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFH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
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import type { IRouteContext } from '../../core/models/route-context.js';
|
|
2
|
-
import type { ILogger } from './models/types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Function cache for NetworkProxy function-based targets
|
|
5
|
-
*
|
|
6
|
-
* This cache improves performance for function-based targets by storing
|
|
7
|
-
* the results of function evaluations and reusing them for similar contexts.
|
|
8
|
-
*/
|
|
9
|
-
export declare class FunctionCache {
|
|
10
|
-
private hostCache;
|
|
11
|
-
private portCache;
|
|
12
|
-
private maxCacheSize;
|
|
13
|
-
private defaultTtl;
|
|
14
|
-
private logger;
|
|
15
|
-
private cleanupInterval;
|
|
16
|
-
/**
|
|
17
|
-
* Creates a new function cache
|
|
18
|
-
*
|
|
19
|
-
* @param logger Logger for debug output
|
|
20
|
-
* @param options Cache options
|
|
21
|
-
*/
|
|
22
|
-
constructor(logger: ILogger, options?: {
|
|
23
|
-
maxCacheSize?: number;
|
|
24
|
-
defaultTtl?: number;
|
|
25
|
-
});
|
|
26
|
-
/**
|
|
27
|
-
* Compute a hash for a context object
|
|
28
|
-
* This is used to identify similar contexts for caching
|
|
29
|
-
*
|
|
30
|
-
* @param context The route context to hash
|
|
31
|
-
* @param functionId Identifier for the function (usually route name or ID)
|
|
32
|
-
* @returns A string hash
|
|
33
|
-
*/
|
|
34
|
-
private computeContextHash;
|
|
35
|
-
/**
|
|
36
|
-
* Get cached host result for a function and context
|
|
37
|
-
*
|
|
38
|
-
* @param context Route context
|
|
39
|
-
* @param functionId Identifier for the function
|
|
40
|
-
* @returns Cached host value or undefined if not found
|
|
41
|
-
*/
|
|
42
|
-
getCachedHost(context: IRouteContext, functionId: string): string | string[] | undefined;
|
|
43
|
-
/**
|
|
44
|
-
* Get cached port result for a function and context
|
|
45
|
-
*
|
|
46
|
-
* @param context Route context
|
|
47
|
-
* @param functionId Identifier for the function
|
|
48
|
-
* @returns Cached port value or undefined if not found
|
|
49
|
-
*/
|
|
50
|
-
getCachedPort(context: IRouteContext, functionId: string): number | undefined;
|
|
51
|
-
/**
|
|
52
|
-
* Store a host function result in the cache
|
|
53
|
-
*
|
|
54
|
-
* @param context Route context
|
|
55
|
-
* @param functionId Identifier for the function
|
|
56
|
-
* @param value Host value to cache
|
|
57
|
-
* @param ttl Optional TTL in milliseconds
|
|
58
|
-
*/
|
|
59
|
-
cacheHost(context: IRouteContext, functionId: string, value: string | string[], ttl?: number): void;
|
|
60
|
-
/**
|
|
61
|
-
* Store a port function result in the cache
|
|
62
|
-
*
|
|
63
|
-
* @param context Route context
|
|
64
|
-
* @param functionId Identifier for the function
|
|
65
|
-
* @param value Port value to cache
|
|
66
|
-
* @param ttl Optional TTL in milliseconds
|
|
67
|
-
*/
|
|
68
|
-
cachePort(context: IRouteContext, functionId: string, value: number, ttl?: number): void;
|
|
69
|
-
/**
|
|
70
|
-
* Remove expired entries from the cache
|
|
71
|
-
*/
|
|
72
|
-
private cleanupCache;
|
|
73
|
-
/**
|
|
74
|
-
* Prune oldest entries from a cache map
|
|
75
|
-
* Used when the cache exceeds the maximum size
|
|
76
|
-
*
|
|
77
|
-
* @param cache The cache map to prune
|
|
78
|
-
*/
|
|
79
|
-
private pruneOldestEntries;
|
|
80
|
-
/**
|
|
81
|
-
* Get current cache stats
|
|
82
|
-
*/
|
|
83
|
-
getStats(): {
|
|
84
|
-
hostCacheSize: number;
|
|
85
|
-
portCacheSize: number;
|
|
86
|
-
};
|
|
87
|
-
/**
|
|
88
|
-
* Clear all cached entries
|
|
89
|
-
*/
|
|
90
|
-
clearCache(): void;
|
|
91
|
-
/**
|
|
92
|
-
* Destroy the cache and cleanup resources
|
|
93
|
-
*/
|
|
94
|
-
destroy(): void;
|
|
95
|
-
}
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Function cache for NetworkProxy function-based targets
|
|
3
|
-
*
|
|
4
|
-
* This cache improves performance for function-based targets by storing
|
|
5
|
-
* the results of function evaluations and reusing them for similar contexts.
|
|
6
|
-
*/
|
|
7
|
-
export class FunctionCache {
|
|
8
|
-
/**
|
|
9
|
-
* Creates a new function cache
|
|
10
|
-
*
|
|
11
|
-
* @param logger Logger for debug output
|
|
12
|
-
* @param options Cache options
|
|
13
|
-
*/
|
|
14
|
-
constructor(logger, options = {}) {
|
|
15
|
-
// Cache storage
|
|
16
|
-
this.hostCache = new Map();
|
|
17
|
-
this.portCache = new Map();
|
|
18
|
-
// Cleanup interval timer
|
|
19
|
-
this.cleanupInterval = null;
|
|
20
|
-
this.logger = logger;
|
|
21
|
-
this.maxCacheSize = options.maxCacheSize || 1000;
|
|
22
|
-
this.defaultTtl = options.defaultTtl || 5000; // 5 seconds default
|
|
23
|
-
// Start the cache cleanup timer
|
|
24
|
-
this.cleanupInterval = setInterval(() => this.cleanupCache(), 30000); // Cleanup every 30 seconds
|
|
25
|
-
// Make sure the interval doesn't keep the process alive
|
|
26
|
-
if (this.cleanupInterval.unref) {
|
|
27
|
-
this.cleanupInterval.unref();
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Compute a hash for a context object
|
|
32
|
-
* This is used to identify similar contexts for caching
|
|
33
|
-
*
|
|
34
|
-
* @param context The route context to hash
|
|
35
|
-
* @param functionId Identifier for the function (usually route name or ID)
|
|
36
|
-
* @returns A string hash
|
|
37
|
-
*/
|
|
38
|
-
computeContextHash(context, functionId) {
|
|
39
|
-
// Extract relevant properties for the hash
|
|
40
|
-
const hashBase = {
|
|
41
|
-
functionId,
|
|
42
|
-
port: context.port,
|
|
43
|
-
domain: context.domain,
|
|
44
|
-
clientIp: context.clientIp,
|
|
45
|
-
path: context.path,
|
|
46
|
-
query: context.query,
|
|
47
|
-
isTls: context.isTls,
|
|
48
|
-
tlsVersion: context.tlsVersion
|
|
49
|
-
};
|
|
50
|
-
// Generate a hash string
|
|
51
|
-
return JSON.stringify(hashBase);
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Get cached host result for a function and context
|
|
55
|
-
*
|
|
56
|
-
* @param context Route context
|
|
57
|
-
* @param functionId Identifier for the function
|
|
58
|
-
* @returns Cached host value or undefined if not found
|
|
59
|
-
*/
|
|
60
|
-
getCachedHost(context, functionId) {
|
|
61
|
-
const hash = this.computeContextHash(context, functionId);
|
|
62
|
-
const cached = this.hostCache.get(hash);
|
|
63
|
-
// Return if no cached value or expired
|
|
64
|
-
if (!cached || cached.expiry < Date.now()) {
|
|
65
|
-
if (cached) {
|
|
66
|
-
// If expired, remove from cache
|
|
67
|
-
this.hostCache.delete(hash);
|
|
68
|
-
this.logger.debug(`Cache miss (expired) for host function: ${functionId}`);
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
this.logger.debug(`Cache miss for host function: ${functionId}`);
|
|
72
|
-
}
|
|
73
|
-
return undefined;
|
|
74
|
-
}
|
|
75
|
-
this.logger.debug(`Cache hit for host function: ${functionId}`);
|
|
76
|
-
return cached.value;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Get cached port result for a function and context
|
|
80
|
-
*
|
|
81
|
-
* @param context Route context
|
|
82
|
-
* @param functionId Identifier for the function
|
|
83
|
-
* @returns Cached port value or undefined if not found
|
|
84
|
-
*/
|
|
85
|
-
getCachedPort(context, functionId) {
|
|
86
|
-
const hash = this.computeContextHash(context, functionId);
|
|
87
|
-
const cached = this.portCache.get(hash);
|
|
88
|
-
// Return if no cached value or expired
|
|
89
|
-
if (!cached || cached.expiry < Date.now()) {
|
|
90
|
-
if (cached) {
|
|
91
|
-
// If expired, remove from cache
|
|
92
|
-
this.portCache.delete(hash);
|
|
93
|
-
this.logger.debug(`Cache miss (expired) for port function: ${functionId}`);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
this.logger.debug(`Cache miss for port function: ${functionId}`);
|
|
97
|
-
}
|
|
98
|
-
return undefined;
|
|
99
|
-
}
|
|
100
|
-
this.logger.debug(`Cache hit for port function: ${functionId}`);
|
|
101
|
-
return cached.value;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Store a host function result in the cache
|
|
105
|
-
*
|
|
106
|
-
* @param context Route context
|
|
107
|
-
* @param functionId Identifier for the function
|
|
108
|
-
* @param value Host value to cache
|
|
109
|
-
* @param ttl Optional TTL in milliseconds
|
|
110
|
-
*/
|
|
111
|
-
cacheHost(context, functionId, value, ttl) {
|
|
112
|
-
const hash = this.computeContextHash(context, functionId);
|
|
113
|
-
const expiry = Date.now() + (ttl || this.defaultTtl);
|
|
114
|
-
// Check if we need to prune the cache before adding
|
|
115
|
-
if (this.hostCache.size >= this.maxCacheSize) {
|
|
116
|
-
this.pruneOldestEntries(this.hostCache);
|
|
117
|
-
}
|
|
118
|
-
// Store the result
|
|
119
|
-
this.hostCache.set(hash, { value, expiry, hash });
|
|
120
|
-
this.logger.debug(`Cached host function result for: ${functionId}`);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Store a port function result in the cache
|
|
124
|
-
*
|
|
125
|
-
* @param context Route context
|
|
126
|
-
* @param functionId Identifier for the function
|
|
127
|
-
* @param value Port value to cache
|
|
128
|
-
* @param ttl Optional TTL in milliseconds
|
|
129
|
-
*/
|
|
130
|
-
cachePort(context, functionId, value, ttl) {
|
|
131
|
-
const hash = this.computeContextHash(context, functionId);
|
|
132
|
-
const expiry = Date.now() + (ttl || this.defaultTtl);
|
|
133
|
-
// Check if we need to prune the cache before adding
|
|
134
|
-
if (this.portCache.size >= this.maxCacheSize) {
|
|
135
|
-
this.pruneOldestEntries(this.portCache);
|
|
136
|
-
}
|
|
137
|
-
// Store the result
|
|
138
|
-
this.portCache.set(hash, { value, expiry, hash });
|
|
139
|
-
this.logger.debug(`Cached port function result for: ${functionId}`);
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Remove expired entries from the cache
|
|
143
|
-
*/
|
|
144
|
-
cleanupCache() {
|
|
145
|
-
const now = Date.now();
|
|
146
|
-
let expiredCount = 0;
|
|
147
|
-
// Clean up host cache
|
|
148
|
-
for (const [hash, cached] of this.hostCache.entries()) {
|
|
149
|
-
if (cached.expiry < now) {
|
|
150
|
-
this.hostCache.delete(hash);
|
|
151
|
-
expiredCount++;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
// Clean up port cache
|
|
155
|
-
for (const [hash, cached] of this.portCache.entries()) {
|
|
156
|
-
if (cached.expiry < now) {
|
|
157
|
-
this.portCache.delete(hash);
|
|
158
|
-
expiredCount++;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (expiredCount > 0) {
|
|
162
|
-
this.logger.debug(`Cleaned up ${expiredCount} expired cache entries`);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Prune oldest entries from a cache map
|
|
167
|
-
* Used when the cache exceeds the maximum size
|
|
168
|
-
*
|
|
169
|
-
* @param cache The cache map to prune
|
|
170
|
-
*/
|
|
171
|
-
pruneOldestEntries(cache) {
|
|
172
|
-
// Find the oldest entries
|
|
173
|
-
const now = Date.now();
|
|
174
|
-
const itemsToRemove = Math.floor(this.maxCacheSize * 0.2); // Remove 20% of the cache
|
|
175
|
-
// Convert to array for sorting
|
|
176
|
-
const entries = Array.from(cache.entries());
|
|
177
|
-
// Sort by expiry (oldest first)
|
|
178
|
-
entries.sort((a, b) => a[1].expiry - b[1].expiry);
|
|
179
|
-
// Remove oldest entries
|
|
180
|
-
const toRemove = entries.slice(0, itemsToRemove);
|
|
181
|
-
for (const [hash] of toRemove) {
|
|
182
|
-
cache.delete(hash);
|
|
183
|
-
}
|
|
184
|
-
this.logger.debug(`Pruned ${toRemove.length} oldest cache entries`);
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Get current cache stats
|
|
188
|
-
*/
|
|
189
|
-
getStats() {
|
|
190
|
-
return {
|
|
191
|
-
hostCacheSize: this.hostCache.size,
|
|
192
|
-
portCacheSize: this.portCache.size
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Clear all cached entries
|
|
197
|
-
*/
|
|
198
|
-
clearCache() {
|
|
199
|
-
this.hostCache.clear();
|
|
200
|
-
this.portCache.clear();
|
|
201
|
-
this.logger.info('Function cache cleared');
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Destroy the cache and cleanup resources
|
|
205
|
-
*/
|
|
206
|
-
destroy() {
|
|
207
|
-
if (this.cleanupInterval) {
|
|
208
|
-
clearInterval(this.cleanupInterval);
|
|
209
|
-
this.cleanupInterval = null;
|
|
210
|
-
}
|
|
211
|
-
this.clearCache();
|
|
212
|
-
this.logger.debug('Function cache destroyed');
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL2h0dHAtcHJveHkvZnVuY3Rpb24tY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUE7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQWlCeEI7Ozs7O09BS0c7SUFDSCxZQUNFLE1BQWUsRUFDZixVQUdJLEVBQUU7UUEzQlIsZ0JBQWdCO1FBQ1IsY0FBUyxHQUFrRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3JFLGNBQVMsR0FBdUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQVdsRSx5QkFBeUI7UUFDakIsb0JBQWUsR0FBMEIsSUFBSSxDQUFDO1FBZXBELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxDQUFDLG9CQUFvQjtRQUVsRSxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1FBRWpHLHdEQUF3RDtRQUN4RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxrQkFBa0IsQ0FBQyxPQUFzQixFQUFFLFVBQWtCO1FBQ25FLDJDQUEyQztRQUMzQyxNQUFNLFFBQVEsR0FBRztZQUNmLFVBQVU7WUFDVixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztZQUNwQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDL0IsQ0FBQztRQUVGLHlCQUF5QjtRQUN6QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWEsQ0FBQyxPQUFzQixFQUFFLFVBQWtCO1FBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFeEMsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLGdDQUFnQztnQkFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYSxDQUFDLE9BQXNCLEVBQUUsVUFBa0I7UUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV4Qyx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzFDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsZ0NBQWdDO2dCQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDN0UsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDaEUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksU0FBUyxDQUNkLE9BQXNCLEVBQ3RCLFVBQWtCLEVBQ2xCLEtBQXdCLEVBQ3hCLEdBQVk7UUFFWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckQsb0RBQW9EO1FBQ3BELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxTQUFTLENBQ2QsT0FBc0IsRUFDdEIsVUFBa0IsRUFDbEIsS0FBYSxFQUNiLEdBQVk7UUFFWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFckQsb0RBQW9EO1FBQ3BELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWTtRQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRXJCLHNCQUFzQjtRQUN0QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3RELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLFlBQVksRUFBRSxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDdEQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUIsWUFBWSxFQUFFLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLFlBQVksd0JBQXdCLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssa0JBQWtCLENBQUksS0FBb0M7UUFDaEUsMEJBQTBCO1FBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7UUFFckYsK0JBQStCO1FBQy9CLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFNUMsZ0NBQWdDO1FBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsRCx3QkFBd0I7UUFDeEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDakQsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxRQUFRLENBQUMsTUFBTSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixPQUFPO1lBQ0wsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUNsQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDRiJ9
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP handlers for various route types
|
|
3
|
-
*/
|
|
4
|
-
export {};
|
|
5
|
-
// Empty - all handlers have been removed
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL2h0dHAtcHJveHkvaGFuZGxlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7O0FBRUgseUNBQXlDIn0=
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../../plugins.js';
|
|
2
|
-
import type { IRouteConfig } from '../../smart-proxy/models/route-types.js';
|
|
3
|
-
import type { ILogger } from '../models/types.js';
|
|
4
|
-
export interface IRedirectHandlerContext {
|
|
5
|
-
connectionId: string;
|
|
6
|
-
connectionManager: any;
|
|
7
|
-
settings: any;
|
|
8
|
-
logger?: ILogger;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Handles HTTP redirect routes
|
|
12
|
-
*/
|
|
13
|
-
export declare class RedirectHandler {
|
|
14
|
-
/**
|
|
15
|
-
* Handle redirect routes
|
|
16
|
-
*/
|
|
17
|
-
static handleRedirect(socket: plugins.net.Socket, route: IRouteConfig, context: IRedirectHandlerContext): Promise<void>;
|
|
18
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../../plugins.js';
|
|
2
|
-
import { createLogger } from '../models/types.js';
|
|
3
|
-
import { HttpStatus, getStatusText } from '../models/http-types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Handles HTTP redirect routes
|
|
6
|
-
*/
|
|
7
|
-
export class RedirectHandler {
|
|
8
|
-
/**
|
|
9
|
-
* Handle redirect routes
|
|
10
|
-
*/
|
|
11
|
-
static async handleRedirect(socket, route, context) {
|
|
12
|
-
const { connectionId, connectionManager, settings } = context;
|
|
13
|
-
const logger = context.logger || createLogger(settings.logLevel || 'info');
|
|
14
|
-
const action = route.action;
|
|
15
|
-
// We should have a redirect configuration
|
|
16
|
-
if (!action.redirect) {
|
|
17
|
-
logger.error(`[${connectionId}] Redirect action missing redirect configuration`);
|
|
18
|
-
socket.end();
|
|
19
|
-
connectionManager.cleanupConnection({ id: connectionId }, 'missing_redirect');
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
// For TLS connections, we can't do redirects at the TCP level
|
|
23
|
-
// This check should be done before calling this handler
|
|
24
|
-
// Wait for the first HTTP request to perform the redirect
|
|
25
|
-
const dataListeners = [];
|
|
26
|
-
const httpDataHandler = (chunk) => {
|
|
27
|
-
// Remove all data listeners to avoid duplicated processing
|
|
28
|
-
for (const listener of dataListeners) {
|
|
29
|
-
socket.removeListener('data', listener);
|
|
30
|
-
}
|
|
31
|
-
// Parse HTTP request to get path
|
|
32
|
-
try {
|
|
33
|
-
const headersEnd = chunk.indexOf('\r\n\r\n');
|
|
34
|
-
if (headersEnd === -1) {
|
|
35
|
-
// Not a complete HTTP request, need more data
|
|
36
|
-
socket.once('data', httpDataHandler);
|
|
37
|
-
dataListeners.push(httpDataHandler);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const httpHeaders = chunk.slice(0, headersEnd).toString();
|
|
41
|
-
const requestLine = httpHeaders.split('\r\n')[0];
|
|
42
|
-
const [method, path] = requestLine.split(' ');
|
|
43
|
-
// Extract Host header
|
|
44
|
-
const hostMatch = httpHeaders.match(/Host: (.+?)(\r\n|\r|\n|$)/i);
|
|
45
|
-
const host = hostMatch ? hostMatch[1].trim() : '';
|
|
46
|
-
// Process the redirect URL with template variables
|
|
47
|
-
let redirectUrl = action.redirect.to;
|
|
48
|
-
redirectUrl = redirectUrl.replace(/\{domain\}/g, host);
|
|
49
|
-
redirectUrl = redirectUrl.replace(/\{path\}/g, path || '');
|
|
50
|
-
redirectUrl = redirectUrl.replace(/\{port\}/g, socket.localPort?.toString() || '80');
|
|
51
|
-
// Prepare the HTTP redirect response
|
|
52
|
-
const redirectResponse = [
|
|
53
|
-
`HTTP/1.1 ${action.redirect.status} Moved`,
|
|
54
|
-
`Location: ${redirectUrl}`,
|
|
55
|
-
'Connection: close',
|
|
56
|
-
'Content-Length: 0',
|
|
57
|
-
'',
|
|
58
|
-
'',
|
|
59
|
-
].join('\r\n');
|
|
60
|
-
if (settings.enableDetailedLogging) {
|
|
61
|
-
logger.info(`[${connectionId}] Redirecting to ${redirectUrl} with status ${action.redirect.status}`);
|
|
62
|
-
}
|
|
63
|
-
// Send the redirect response
|
|
64
|
-
socket.end(redirectResponse);
|
|
65
|
-
connectionManager.initiateCleanupOnce({ id: connectionId }, 'redirect_complete');
|
|
66
|
-
}
|
|
67
|
-
catch (err) {
|
|
68
|
-
logger.error(`[${connectionId}] Error processing HTTP redirect: ${err}`);
|
|
69
|
-
socket.end();
|
|
70
|
-
connectionManager.initiateCleanupOnce({ id: connectionId }, 'redirect_error');
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
// Setup the HTTP data handler
|
|
74
|
-
socket.once('data', httpDataHandler);
|
|
75
|
-
dataListeners.push(httpDataHandler);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXJlY3QtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvaHR0cC1wcm94eS9oYW5kbGVycy9yZWRpcmVjdC1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFJL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFTcEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUNoQyxNQUEwQixFQUMxQixLQUFtQixFQUNuQixPQUFnQztRQUVoQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM5RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFNUIsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksa0RBQWtELENBQUMsQ0FBQztZQUNqRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDYixpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQzlFLE9BQU87UUFDVCxDQUFDO1FBRUQsOERBQThEO1FBQzlELHdEQUF3RDtRQUV4RCwwREFBMEQ7UUFDMUQsTUFBTSxhQUFhLEdBQWdDLEVBQUUsQ0FBQztRQUV0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
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../../../plugins.js';
|
|
2
|
-
import type { IRouteConfig } from '../../smart-proxy/models/route-types.js';
|
|
3
|
-
import type { IConnectionRecord } from '../../smart-proxy/models/interfaces.js';
|
|
4
|
-
import type { ILogger } from '../models/types.js';
|
|
5
|
-
export interface IStaticHandlerContext {
|
|
6
|
-
connectionId: string;
|
|
7
|
-
connectionManager: any;
|
|
8
|
-
settings: any;
|
|
9
|
-
logger?: ILogger;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Handles static routes including ACME challenges
|
|
13
|
-
*/
|
|
14
|
-
export declare class StaticHandler {
|
|
15
|
-
/**
|
|
16
|
-
* Handle static routes
|
|
17
|
-
*/
|
|
18
|
-
static handleStatic(socket: plugins.net.Socket, route: IRouteConfig, context: IStaticHandlerContext, record: IConnectionRecord, initialChunk?: Buffer): Promise<void>;
|
|
19
|
-
}
|