@push.rocks/smartproxy 18.0.2 → 18.2.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 (53) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/certificate/certificate-manager.d.ts +150 -0
  3. package/dist_ts/certificate/certificate-manager.js +505 -0
  4. package/dist_ts/certificate/events/simplified-events.d.ts +56 -0
  5. package/dist_ts/certificate/events/simplified-events.js +13 -0
  6. package/dist_ts/certificate/models/certificate-errors.d.ts +69 -0
  7. package/dist_ts/certificate/models/certificate-errors.js +141 -0
  8. package/dist_ts/certificate/models/certificate-strategy.d.ts +60 -0
  9. package/dist_ts/certificate/models/certificate-strategy.js +73 -0
  10. package/dist_ts/certificate/simplified-certificate-manager.d.ts +150 -0
  11. package/dist_ts/certificate/simplified-certificate-manager.js +501 -0
  12. package/dist_ts/http/index.d.ts +1 -9
  13. package/dist_ts/http/index.js +5 -11
  14. package/dist_ts/plugins.d.ts +3 -1
  15. package/dist_ts/plugins.js +4 -2
  16. package/dist_ts/proxies/network-proxy/network-proxy.js +3 -1
  17. package/dist_ts/proxies/network-proxy/simplified-certificate-bridge.d.ts +48 -0
  18. package/dist_ts/proxies/network-proxy/simplified-certificate-bridge.js +76 -0
  19. package/dist_ts/proxies/network-proxy/websocket-handler.js +41 -4
  20. package/dist_ts/proxies/smart-proxy/cert-store.d.ts +10 -0
  21. package/dist_ts/proxies/smart-proxy/cert-store.js +70 -0
  22. package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +116 -0
  23. package/dist_ts/proxies/smart-proxy/certificate-manager.js +401 -0
  24. package/dist_ts/proxies/smart-proxy/legacy-smart-proxy.d.ts +168 -0
  25. package/dist_ts/proxies/smart-proxy/legacy-smart-proxy.js +642 -0
  26. package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +26 -0
  27. package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
  28. package/dist_ts/proxies/smart-proxy/models/simplified-smartproxy-config.d.ts +65 -0
  29. package/dist_ts/proxies/smart-proxy/models/simplified-smartproxy-config.js +31 -0
  30. package/dist_ts/proxies/smart-proxy/models/smartproxy-options.d.ts +102 -0
  31. package/dist_ts/proxies/smart-proxy/models/smartproxy-options.js +73 -0
  32. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +10 -44
  33. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +66 -202
  34. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +4 -0
  35. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +62 -2
  36. package/dist_ts/proxies/smart-proxy/simplified-smart-proxy.d.ts +41 -0
  37. package/dist_ts/proxies/smart-proxy/simplified-smart-proxy.js +132 -0
  38. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +18 -13
  39. package/dist_ts/proxies/smart-proxy/smart-proxy.js +79 -196
  40. package/package.json +7 -5
  41. package/readme.md +224 -10
  42. package/readme.plan.md +1405 -617
  43. package/ts/00_commitinfo_data.ts +1 -1
  44. package/ts/http/index.ts +5 -12
  45. package/ts/plugins.ts +4 -1
  46. package/ts/proxies/network-proxy/network-proxy.ts +3 -0
  47. package/ts/proxies/network-proxy/websocket-handler.ts +38 -3
  48. package/ts/proxies/smart-proxy/cert-store.ts +86 -0
  49. package/ts/proxies/smart-proxy/certificate-manager.ts +506 -0
  50. package/ts/proxies/smart-proxy/models/route-types.ts +33 -3
  51. package/ts/proxies/smart-proxy/network-proxy-bridge.ts +86 -239
  52. package/ts/proxies/smart-proxy/route-connection-handler.ts +74 -1
  53. package/ts/proxies/smart-proxy/smart-proxy.ts +105 -222
@@ -51,6 +51,23 @@ export interface IRouteTarget {
51
51
  host: string | string[] | ((context: IRouteContext) => string | string[]);
52
52
  port: number | 'preserve' | ((context: IRouteContext) => number);
53
53
  }
54
+ /**
55
+ * ACME configuration for automatic certificate provisioning
56
+ */
57
+ export interface IRouteAcme {
58
+ email: string;
59
+ useProduction?: boolean;
60
+ challengePort?: number;
61
+ renewBeforeDays?: number;
62
+ }
63
+ /**
64
+ * Static route handler response
65
+ */
66
+ export interface IStaticResponse {
67
+ status: number;
68
+ headers?: Record<string, string>;
69
+ body: string | Buffer;
70
+ }
54
71
  /**
55
72
  * TLS configuration for route actions
56
73
  */
@@ -59,7 +76,15 @@ export interface IRouteTls {
59
76
  certificate?: 'auto' | {
60
77
  key: string;
61
78
  cert: string;
79
+ ca?: string;
80
+ keyFile?: string;
81
+ certFile?: string;
62
82
  };
83
+ acme?: IRouteAcme;
84
+ versions?: string[];
85
+ ciphers?: string;
86
+ honorCipherOrder?: boolean;
87
+ sessionTimeout?: number;
63
88
  }
64
89
  /**
65
90
  * Redirect configuration for route actions
@@ -202,6 +227,7 @@ export interface IRouteAction {
202
227
  };
203
228
  forwardingEngine?: 'node' | 'nftables';
204
229
  nftables?: INfTablesOptions;
230
+ handler?: (context: IRouteContext) => Promise<IStaticResponse>;
205
231
  }
206
232
  /**
207
233
  * Rate limiting configuration
@@ -1,3 +1,3 @@
1
1
  import * as plugins from '../../../plugins.js';
2
2
  // Configuration moved to models/interfaces.ts as ISmartProxyOptions
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9yb3V0ZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBMlYvQyxvRUFBb0UifQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9yb3V0ZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBeVgvQyxvRUFBb0UifQ==
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Simplified SmartProxy configuration
3
+ */
4
+ import type { CertProvider } from '../../../certificate/models/certificate-strategy.js';
5
+ import type { IRouteConfig } from './route-types.js';
6
+ /**
7
+ * ACME configuration - all certificate options in one place
8
+ */
9
+ export interface AcmeConfig {
10
+ /**
11
+ * Email address for ACME account (required)
12
+ */
13
+ email: string;
14
+ /**
15
+ * ACME server environment
16
+ */
17
+ server: 'production' | 'staging';
18
+ /**
19
+ * Certificate provider function (required)
20
+ */
21
+ certProvider: CertProvider;
22
+ /**
23
+ * Certificate storage directory
24
+ * @default './certs'
25
+ */
26
+ storageDir?: string;
27
+ /**
28
+ * Days before expiry to renew certificates
29
+ * @default 30
30
+ */
31
+ renewBeforeDays?: number;
32
+ /**
33
+ * Enable ACME certificate management
34
+ * @default true
35
+ */
36
+ enabled?: boolean;
37
+ }
38
+ /**
39
+ * Simplified SmartProxy options
40
+ */
41
+ export interface SimplifiedSmartProxyOptions {
42
+ /**
43
+ * Port to listen on
44
+ * @default 443
45
+ */
46
+ port?: number;
47
+ /**
48
+ * ACME/Certificate configuration
49
+ * Required if you want automatic certificate management
50
+ */
51
+ acme?: AcmeConfig;
52
+ /**
53
+ * Route configurations
54
+ */
55
+ routes: IRouteConfig[];
56
+ /**
57
+ * Log level
58
+ * @default 'info'
59
+ */
60
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
61
+ }
62
+ /**
63
+ * Helper to validate SmartProxy configuration
64
+ */
65
+ export declare function validateSmartProxyConfig(options: SimplifiedSmartProxyOptions): void;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Simplified SmartProxy configuration
3
+ */
4
+ /**
5
+ * Helper to validate SmartProxy configuration
6
+ */
7
+ export function validateSmartProxyConfig(options) {
8
+ // If ACME is enabled, certProvider is required
9
+ if (options.acme?.enabled !== false) {
10
+ if (!options.acme?.certProvider) {
11
+ throw new Error('ACME is enabled but no certProvider configured. Please provide acme.certProvider or disable ACME with acme.enabled = false');
12
+ }
13
+ if (!options.acme?.email) {
14
+ throw new Error('ACME is enabled but no email configured. Please provide acme.email');
15
+ }
16
+ }
17
+ // Validate routes
18
+ if (!options.routes || options.routes.length === 0) {
19
+ throw new Error('At least one route must be configured');
20
+ }
21
+ // Validate routes have required fields
22
+ for (const route of options.routes) {
23
+ if (!route.match) {
24
+ throw new Error('Route must have match criteria');
25
+ }
26
+ if (!route.action) {
27
+ throw new Error('Route must have action configuration');
28
+ }
29
+ }
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxpZmllZC1zbWFydHByb3h5LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbW9kZWxzL3NpbXBsaWZpZWQtc21hcnRwcm94eS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUF1RUg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBb0M7SUFDM0UsK0NBQStDO0lBQy9DLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0SEFBNEgsQ0FBQyxDQUFDO1FBQ2hKLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7UUFDeEYsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Unified SmartProxy configuration options
3
+ */
4
+ import type { CertProvider } from '../../../certificate/models/certificate-strategy.js';
5
+ import type { IRouteConfig } from './route-types.js';
6
+ /**
7
+ * ACME configuration for automatic certificate management
8
+ */
9
+ export interface IAcmeConfig {
10
+ /**
11
+ * Email address for ACME account (required if enabled)
12
+ */
13
+ email: string;
14
+ /**
15
+ * ACME server environment
16
+ * @default 'production'
17
+ */
18
+ server: 'production' | 'staging';
19
+ /**
20
+ * Certificate provider function (required if enabled)
21
+ * Returns strategy for each domain (acme-http, acme-dns, static, skip)
22
+ */
23
+ certProvider: CertProvider;
24
+ /**
25
+ * Certificate storage directory
26
+ * @default './certs'
27
+ */
28
+ storageDir?: string;
29
+ /**
30
+ * Days before expiry to renew certificates
31
+ * @default 30
32
+ */
33
+ renewBeforeDays?: number;
34
+ /**
35
+ * Enable automatic certificate management
36
+ * @default true
37
+ */
38
+ enabled?: boolean;
39
+ /**
40
+ * Port for ACME HTTP-01 challenges
41
+ * @default 80
42
+ */
43
+ port?: number;
44
+ }
45
+ /**
46
+ * Unified SmartProxy options
47
+ */
48
+ export interface ISmartProxyOptions {
49
+ /**
50
+ * HTTPS port to listen on
51
+ * @default 443
52
+ */
53
+ port?: number;
54
+ /**
55
+ * HTTP port to listen on (for redirects and ACME challenges)
56
+ * @default 80
57
+ */
58
+ httpPort?: number;
59
+ /**
60
+ * Route configurations - the core of SmartProxy
61
+ * Each route defines matching criteria and actions
62
+ */
63
+ routes: IRouteConfig[];
64
+ /**
65
+ * ACME/Certificate configuration
66
+ * Required for automatic certificate provisioning
67
+ * If not provided or disabled, only static certificates will work
68
+ */
69
+ acme?: IAcmeConfig;
70
+ /**
71
+ * Certificate provider function for backward compatibility
72
+ * @deprecated Use acme.certProvider instead
73
+ */
74
+ certProviderFunction?: CertProvider;
75
+ /**
76
+ * Log level for debugging
77
+ * @default 'info'
78
+ */
79
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
80
+ /**
81
+ * Enable NFTables integration for advanced networking
82
+ * @default false
83
+ */
84
+ enableNFTables?: boolean;
85
+ /**
86
+ * Preserve client source IP when forwarding
87
+ * @default false
88
+ */
89
+ preserveSourceIP?: boolean;
90
+ /**
91
+ * Default forwarding target when not specified in routes
92
+ * @deprecated Define targets in individual routes
93
+ */
94
+ defaultTarget?: {
95
+ host: string;
96
+ port: number;
97
+ };
98
+ }
99
+ /**
100
+ * Validate SmartProxy configuration
101
+ */
102
+ export declare function validateSmartProxyConfig(options: ISmartProxyOptions): void;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Unified SmartProxy configuration options
3
+ */
4
+ /**
5
+ * Validate SmartProxy configuration
6
+ */
7
+ export function validateSmartProxyConfig(options) {
8
+ // If ACME is enabled, certProvider is required
9
+ if (options.acme?.enabled !== false) {
10
+ if (!options.acme?.certProvider && !options.certProviderFunction) {
11
+ throw new Error('Certificate management is enabled but no certProvider configured. ' +
12
+ 'Please provide acme.certProvider or disable ACME with acme.enabled = false');
13
+ }
14
+ if (!options.acme?.email) {
15
+ throw new Error('Certificate management is enabled but no email configured. ' +
16
+ 'Please provide acme.email for ACME account registration');
17
+ }
18
+ }
19
+ // Validate routes
20
+ if (!options.routes || options.routes.length === 0) {
21
+ throw new Error('At least one route must be configured');
22
+ }
23
+ // Validate each route
24
+ for (const route of options.routes) {
25
+ if (!route.match) {
26
+ throw new Error(`Route '${route.name || 'unnamed'}' must have match criteria`);
27
+ }
28
+ if (!route.action) {
29
+ throw new Error(`Route '${route.name || 'unnamed'}' must have action configuration`);
30
+ }
31
+ // Validate ports if specified
32
+ if (route.match.ports) {
33
+ const validatePort = (port) => {
34
+ if (port < 1 || port > 65535) {
35
+ throw new Error(`Invalid port number ${port} in route '${route.name || 'unnamed'}'`);
36
+ }
37
+ };
38
+ // Handle different port specification formats
39
+ const ports = route.match.ports;
40
+ if (typeof ports === 'number') {
41
+ validatePort(ports);
42
+ }
43
+ else if (Array.isArray(ports)) {
44
+ for (const port of ports) {
45
+ if (typeof port === 'number') {
46
+ validatePort(port);
47
+ }
48
+ else if (typeof port === 'object' && port.from && port.to) {
49
+ validatePort(port.from);
50
+ validatePort(port.to);
51
+ if (port.from > port.to) {
52
+ throw new Error(`Invalid port range ${port.from}-${port.to} in route '${route.name || 'unnamed'}'`);
53
+ }
54
+ }
55
+ else {
56
+ throw new Error(`Invalid port specification in route '${route.name || 'unnamed'}'`);
57
+ }
58
+ }
59
+ }
60
+ else {
61
+ throw new Error(`Invalid ports configuration in route '${route.name || 'unnamed'}'`);
62
+ }
63
+ }
64
+ }
65
+ // Warn about deprecated options
66
+ if (options.certProviderFunction) {
67
+ console.warn('Warning: certProviderFunction is deprecated. Use acme.certProvider instead');
68
+ }
69
+ if (options.defaultTarget) {
70
+ console.warn('Warning: defaultTarget is deprecated. Define targets in individual routes instead');
71
+ }
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRwcm94eS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9tb2RlbHMvc21hcnRwcm94eS1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBa0hIOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQTJCO0lBQ2xFLCtDQUErQztJQUMvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0VBQW9FO2dCQUNwRSw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLDZEQUE2RDtnQkFDN0QseURBQXlELENBQzFELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxJQUFJLFNBQVMsNEJBQTRCLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQs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
@@ -1,49 +1,35 @@
1
1
  import * as plugins from '../../plugins.js';
2
2
  import { NetworkProxy } from '../network-proxy/index.js';
3
- import { Port80Handler } from '../../http/port80/port80-handler.js';
4
- import type { ICertificateData } from '../../certificate/models/certificate-types.js';
5
3
  import type { IConnectionRecord, ISmartProxyOptions } from './models/interfaces.js';
6
4
  import type { IRouteConfig } from './models/route-types.js';
7
- /**
8
- * Manages NetworkProxy integration for TLS termination
9
- *
10
- * NetworkProxyBridge connects SmartProxy with NetworkProxy to handle TLS termination.
11
- * It directly passes route configurations to NetworkProxy and manages the physical
12
- * connection piping between SmartProxy and NetworkProxy for TLS termination.
13
- *
14
- * It is used by SmartProxy for routes that have:
15
- * - TLS mode of 'terminate' or 'terminate-and-reencrypt'
16
- * - Certificate set to 'auto' or custom certificate
17
- */
18
5
  export declare class NetworkProxyBridge {
19
6
  private settings;
20
7
  private networkProxy;
21
- private port80Handler;
22
8
  constructor(settings: ISmartProxyOptions);
23
9
  /**
24
- * Set the Port80Handler to use for certificate management
10
+ * Get the NetworkProxy instance
25
11
  */
26
- setPort80Handler(handler: Port80Handler): void;
12
+ getNetworkProxy(): NetworkProxy | null;
27
13
  /**
28
14
  * Initialize NetworkProxy instance
29
15
  */
30
16
  initialize(): Promise<void>;
31
17
  /**
32
- * Handle certificate issuance or renewal events
18
+ * Sync routes to NetworkProxy
33
19
  */
34
- private handleCertificateEvent;
20
+ syncRoutesToNetworkProxy(routes: IRouteConfig[]): Promise<void>;
35
21
  /**
36
- * Apply an external (static) certificate into NetworkProxy
22
+ * Convert route to NetworkProxy configuration
37
23
  */
38
- applyExternalCertificate(data: ICertificateData): void;
24
+ private routeToNetworkProxyConfig;
39
25
  /**
40
- * Get the NetworkProxy instance
26
+ * Check if connection should use NetworkProxy
41
27
  */
42
- getNetworkProxy(): NetworkProxy | null;
28
+ shouldUseNetworkProxy(connection: IConnectionRecord, routeMatch: any): boolean;
43
29
  /**
44
- * Get the NetworkProxy port
30
+ * Forward connection to NetworkProxy
45
31
  */
46
- getNetworkProxyPort(): number;
32
+ forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialChunk: Buffer, networkProxyPort: number, cleanupCallback: (reason: string) => void): Promise<void>;
47
33
  /**
48
34
  * Start NetworkProxy
49
35
  */
@@ -52,24 +38,4 @@ export declare class NetworkProxyBridge {
52
38
  * Stop NetworkProxy
53
39
  */
54
40
  stop(): Promise<void>;
55
- /**
56
- * Forwards a TLS connection to a NetworkProxy for handling
57
- */
58
- forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialData: Buffer, customProxyPort?: number, onError?: (reason: string) => void): void;
59
- /**
60
- * Synchronizes routes to NetworkProxy
61
- *
62
- * This method directly passes route configurations to NetworkProxy without any
63
- * intermediate conversion. NetworkProxy natively understands route configurations.
64
- *
65
- * @param routes The route configurations to sync to NetworkProxy
66
- */
67
- syncRoutesToNetworkProxy(routes: IRouteConfig[]): Promise<void>;
68
- /**
69
- * Request a certificate for a specific domain
70
- *
71
- * @param domain The domain to request a certificate for
72
- * @param routeName Optional route name to associate with this certificate
73
- */
74
- requestCertificate(domain: string, routeName?: string): Promise<boolean>;
75
41
  }