@push.rocks/smartproxy 16.0.4 → 17.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 (42) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/common/port80-adapter.js +29 -3
  3. package/dist_ts/forwarding/config/forwarding-types.d.ts +3 -29
  4. package/dist_ts/forwarding/config/forwarding-types.js +3 -36
  5. package/dist_ts/forwarding/config/index.d.ts +3 -2
  6. package/dist_ts/forwarding/config/index.js +4 -3
  7. package/dist_ts/forwarding/factory/forwarding-factory.js +9 -3
  8. package/dist_ts/forwarding/handlers/base-handler.d.ts +4 -0
  9. package/dist_ts/forwarding/handlers/base-handler.js +25 -3
  10. package/dist_ts/forwarding/index.d.ts +3 -8
  11. package/dist_ts/forwarding/index.js +4 -13
  12. package/dist_ts/proxies/smart-proxy/models/index.d.ts +0 -1
  13. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +0 -9
  14. package/dist_ts/proxies/smart-proxy/models/interfaces.js +1 -12
  15. package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +0 -42
  16. package/dist_ts/proxies/smart-proxy/models/route-types.js +2 -1
  17. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -3
  18. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +5 -10
  19. package/dist_ts/proxies/smart-proxy/route-manager.js +2 -3
  20. package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
  21. package/dist_ts/proxies/smart-proxy/utils/index.d.ts +0 -2
  22. package/dist_ts/proxies/smart-proxy/utils/index.js +3 -6
  23. package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +48 -0
  24. package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +106 -2
  25. package/package.json +1 -1
  26. package/readme.plan.md +175 -77
  27. package/ts/00_commitinfo_data.ts +1 -1
  28. package/ts/common/port80-adapter.ts +26 -2
  29. package/ts/forwarding/config/forwarding-types.ts +12 -70
  30. package/ts/forwarding/config/index.ts +19 -2
  31. package/ts/forwarding/factory/forwarding-factory.ts +7 -2
  32. package/ts/forwarding/handlers/base-handler.ts +22 -2
  33. package/ts/forwarding/index.ts +17 -17
  34. package/ts/proxies/smart-proxy/models/index.ts +0 -3
  35. package/ts/proxies/smart-proxy/models/interfaces.ts +1 -17
  36. package/ts/proxies/smart-proxy/models/route-types.ts +1 -58
  37. package/ts/proxies/smart-proxy/route-connection-handler.ts +1 -11
  38. package/ts/proxies/smart-proxy/route-manager.ts +3 -8
  39. package/ts/proxies/smart-proxy/smart-proxy.ts +2 -4
  40. package/ts/proxies/smart-proxy/utils/index.ts +2 -5
  41. package/ts/proxies/smart-proxy/utils/route-patterns.ts +146 -2
  42. package/ts/proxies/smart-proxy/utils/route-migration-utils.ts +0 -165
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartproxy',
6
- version: '16.0.4',
6
+ version: '17.0.0',
7
7
  description: 'A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHFQQUFxUDtDQUNuUSxDQUFBIn0=
@@ -8,9 +8,22 @@ export function convertToLegacyForwardConfig(forwardConfig) {
8
8
  const host = Array.isArray(forwardConfig.target.host)
9
9
  ? forwardConfig.target.host[0] // Use the first host in the array
10
10
  : forwardConfig.target.host;
11
+ // Extract port number, handling different port formats
12
+ let port;
13
+ if (typeof forwardConfig.target.port === 'function') {
14
+ // Use a default port for function-based ports in adapter context
15
+ port = 80;
16
+ }
17
+ else if (forwardConfig.target.port === 'preserve') {
18
+ // For 'preserve', use the default port 80 in this adapter context
19
+ port = 80;
20
+ }
21
+ else {
22
+ port = forwardConfig.target.port;
23
+ }
11
24
  return {
12
25
  ip: host,
13
- port: forwardConfig.target.port
26
+ port: port
14
27
  };
15
28
  }
16
29
  /**
@@ -49,13 +62,26 @@ export function createPort80HandlerOptions(domain, forwardConfig) {
49
62
  (forwardConfig.type === 'https-terminate-to-http' ||
50
63
  forwardConfig.type === 'https-terminate-to-https'));
51
64
  if (supportsHttp) {
65
+ // Determine port value handling different formats
66
+ let port;
67
+ if (typeof forwardConfig.target.port === 'function') {
68
+ // Use a default port for function-based ports
69
+ port = 80;
70
+ }
71
+ else if (forwardConfig.target.port === 'preserve') {
72
+ // For 'preserve', use 80 in this adapter context
73
+ port = 80;
74
+ }
75
+ else {
76
+ port = forwardConfig.target.port;
77
+ }
52
78
  options.forward = {
53
79
  ip: Array.isArray(forwardConfig.target.host)
54
80
  ? forwardConfig.target.host[0]
55
81
  : forwardConfig.target.host,
56
- port: forwardConfig.target.port
82
+ port: port
57
83
  };
58
84
  }
59
85
  return options;
60
86
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydDgwLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb21tb24vcG9ydDgwLWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFXekM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxhQUE2QjtJQUU3QiwrQ0FBK0M7SUFDL0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuRCxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUUsa0NBQWtDO1FBQ2xFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUU5QixPQUFPO1FBQ0wsRUFBRSxFQUFFLElBQUk7UUFDUixJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJO0tBQ2hDLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE1BQWMsRUFDZCxhQUE2QjtJQUU3QixnREFBZ0Q7SUFDaEQsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUN4QyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsc0VBQXNFO0lBQ3RFLE1BQU0sV0FBVyxHQUNmLGFBQWEsQ0FBQyxJQUFJLEtBQUsseUJBQXlCO1FBQ2hELGFBQWEsQ0FBQyxJQUFJLEtBQUssMEJBQTBCLENBQUM7SUFFcEQsTUFBTSxlQUFlLEdBQ25CLFdBQVc7UUFDWCxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxLQUFLLENBQUM7SUFFeEMsa0NBQWtDO0lBQ2xDLE1BQU0sT0FBTyxHQUFtQjtRQUM5QixVQUFVLEVBQUUsTUFBTTtRQUNsQixXQUFXO1FBQ1gsZUFBZTtLQUNoQixDQUFDO0lBRUYsOENBQThDO0lBQzlDLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxXQUFXLEdBQUc7WUFDcEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUk7WUFDN0MsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSTtTQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxNQUFNLFlBQVksR0FDaEIsYUFBYSxDQUFDLElBQUksS0FBSyxXQUFXO1FBQ2xDLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssS0FBSztZQUNyQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUsseUJBQXlCO2dCQUNoRCxhQUFhLENBQUMsSUFBSSxLQUFLLDBCQUEwQixDQUFDLENBQUMsQ0FBQztJQUV4RCxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxPQUFPLEdBQUc7WUFDaEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDN0IsSUFBSSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMifQ==
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydDgwLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb21tb24vcG9ydDgwLWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFXekM7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUMxQyxhQUE2QjtJQUU3QiwrQ0FBK0M7SUFDL0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuRCxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUUsa0NBQWtDO1FBQ2xFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUU5Qix1REFBdUQ7SUFDdkQsSUFBSSxJQUFZLENBQUM7SUFDakIsSUFBSSxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3BELGlFQUFpRTtRQUNqRSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ1osQ0FBQztTQUFNLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDcEQsa0VBQWtFO1FBQ2xFLElBQUksR0FBRyxFQUFFLENBQUM7SUFDWixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTztRQUNMLEVBQUUsRUFBRSxJQUFJO1FBQ1IsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxNQUFjLEVBQ2QsYUFBNkI7SUFFN0IsZ0RBQWdEO0lBQ2hELElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztJQUN4QixJQUFJ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
@@ -1,9 +1,7 @@
1
1
  import type * as plugins from '../../plugins.js';
2
2
  /**
3
- * @deprecated The legacy forwarding types are being replaced by the route-based configuration system.
4
- * See /ts/proxies/smart-proxy/models/route-types.ts for the new route-based configuration.
5
- *
6
3
  * The primary forwarding types supported by SmartProxy
4
+ * Used for configuration compatibility
7
5
  */
8
6
  export type TForwardingType = 'http-only' | 'https-passthrough' | 'https-terminate-to-http' | 'https-terminate-to-https';
9
7
  /**
@@ -27,13 +25,13 @@ export interface IForwardingHandler extends plugins.EventEmitter {
27
25
  handleConnection(socket: plugins.net.Socket): void;
28
26
  handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
29
27
  }
30
- import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-helpers.js';
28
+ import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
31
29
  export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute };
32
30
  export interface IForwardConfig {
33
31
  type: TForwardingType;
34
32
  target: {
35
33
  host: string | string[];
36
- port: number;
34
+ port: number | 'preserve' | ((ctx: any) => number);
37
35
  };
38
36
  http?: any;
39
37
  https?: any;
@@ -42,27 +40,3 @@ export interface IForwardConfig {
42
40
  advanced?: any;
43
41
  [key: string]: any;
44
42
  }
45
- export interface IDeprecatedForwardConfig {
46
- type: TForwardingType;
47
- target: {
48
- host: string | string[];
49
- port: number;
50
- };
51
- [key: string]: any;
52
- }
53
- /**
54
- * @deprecated Use createHttpRoute instead
55
- */
56
- export declare const httpOnly: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
57
- /**
58
- * @deprecated Use createHttpsTerminateRoute instead
59
- */
60
- export declare const tlsTerminateToHttp: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
61
- /**
62
- * @deprecated Use createHttpsTerminateRoute with reencrypt option instead
63
- */
64
- export declare const tlsTerminateToHttps: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
65
- /**
66
- * @deprecated Use createHttpsPassthroughRoute instead
67
- */
68
- export declare const httpsPassthrough: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
@@ -12,40 +12,7 @@ export var ForwardingHandlerEvents;
12
12
  ForwardingHandlerEvents["CERTIFICATE_NEEDED"] = "certificate-needed";
13
13
  ForwardingHandlerEvents["CERTIFICATE_LOADED"] = "certificate-loaded";
14
14
  })(ForwardingHandlerEvents || (ForwardingHandlerEvents = {}));
15
- // Import and re-export the route-based helpers for seamless transition
16
- import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-helpers.js';
15
+ // Route-based helpers are now available directly from route-patterns.ts
16
+ import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
17
17
  export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute };
18
- import { domainConfigToRouteConfig } from '../../proxies/smart-proxy/utils/route-migration-utils.js';
19
- /**
20
- * @deprecated Use createHttpRoute instead
21
- */
22
- export const httpOnly = (partialConfig) => ({
23
- type: 'http-only',
24
- target: partialConfig.target,
25
- ...(partialConfig)
26
- });
27
- /**
28
- * @deprecated Use createHttpsTerminateRoute instead
29
- */
30
- export const tlsTerminateToHttp = (partialConfig) => ({
31
- type: 'https-terminate-to-http',
32
- target: partialConfig.target,
33
- ...(partialConfig)
34
- });
35
- /**
36
- * @deprecated Use createHttpsTerminateRoute with reencrypt option instead
37
- */
38
- export const tlsTerminateToHttps = (partialConfig) => ({
39
- type: 'https-terminate-to-https',
40
- target: partialConfig.target,
41
- ...(partialConfig)
42
- });
43
- /**
44
- * @deprecated Use createHttpsPassthroughRoute instead
45
- */
46
- export const httpsPassthrough = (partialConfig) => ({
47
- type: 'https-passthrough',
48
- target: partialConfig.target,
49
- ...(partialConfig)
50
- });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvY29uZmlnL2ZvcndhcmRpbmctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0E7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSx1QkFTWDtBQVRELFdBQVksdUJBQXVCO0lBQ2pDLGtEQUF1QixDQUFBO0lBQ3ZCLHdEQUE2QixDQUFBO0lBQzdCLDBDQUFlLENBQUE7SUFDZiw0REFBaUMsQ0FBQTtJQUNqQyx3REFBNkIsQ0FBQTtJQUM3QiwwREFBK0IsQ0FBQTtJQUMvQixvRUFBeUMsQ0FBQTtJQUN6QyxvRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBVFcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQVNsQztBQVdELHVFQUF1RTtBQUN2RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsTUFBTSxrREFBa0QsQ0FBQztBQUUxRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsQ0FBQztBQVdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBMEJyRzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUN0QixhQUEyRixFQUNqRSxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLEVBQUUsV0FBVztJQUNqQixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07SUFDNUIsR0FBRyxDQUFDLGFBQWEsQ0FBQztDQUNuQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLGFBQTJGLEVBQ2pFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNO0lBQzVCLEdBQUcsQ0FBQyxhQUFhLENBQUM7Q0FDbkIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxhQUEyRixFQUNqRSxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLEVBQUUsMEJBQTBCO0lBQ2hDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtJQUM1QixHQUFHLENBQUMsYUFBYSxDQUFDO0NBQ25CLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsYUFBMkYsRUFDakUsRUFBRSxDQUFDLENBQUM7SUFDOUIsSUFBSSxFQUFFLG1CQUFtQjtJQUN6QixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07SUFDNUIsR0FBRyxDQUFDLGFBQWEsQ0FBQztDQUNuQixDQUFDLENBQUMifQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvY29uZmlnL2ZvcndhcmRpbmctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSx1QkFTWDtBQVRELFdBQVksdUJBQXVCO0lBQ2pDLGtEQUF1QixDQUFBO0lBQ3ZCLHdEQUE2QixDQUFBO0lBQzdCLDBDQUFlLENBQUE7SUFDZiw0REFBaUMsQ0FBQTtJQUNqQyx3REFBNkIsQ0FBQTtJQUM3QiwwREFBK0IsQ0FBQTtJQUMvQixvRUFBeUMsQ0FBQTtJQUN6QyxvRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBVFcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQVNsQztBQVdELHdFQUF3RTtBQUN4RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsTUFBTSxtREFBbUQsQ0FBQztBQUUzRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsQ0FBQyJ9
@@ -4,5 +4,6 @@
4
4
  * Note: The legacy domain-based configuration has been replaced by route-based configuration.
5
5
  * See /ts/proxies/smart-proxy/models/route-types.ts for the new route-based configuration.
6
6
  */
7
- export * from './forwarding-types.js';
8
- export * from '../../proxies/smart-proxy/utils/route-helpers.js';
7
+ export type { TForwardingType, IForwardConfig, IForwardingHandler } from './forwarding-types.js';
8
+ export { ForwardingHandlerEvents } from './forwarding-types.js';
9
+ export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
@@ -4,6 +4,7 @@
4
4
  * Note: The legacy domain-based configuration has been replaced by route-based configuration.
5
5
  * See /ts/proxies/smart-proxy/models/route-types.ts for the new route-based configuration.
6
6
  */
7
- export * from './forwarding-types.js';
8
- export * from '../../proxies/smart-proxy/utils/route-helpers.js';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxrREFBa0QsQ0FBQyJ9
7
+ export { ForwardingHandlerEvents } from './forwarding-types.js';
8
+ // Import route helpers from route-patterns instead of deleted route-helpers
9
+ export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-patterns.js';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQVFILE9BQU8sRUFDTCx1QkFBdUIsRUFDeEIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQiw0RUFBNEU7QUFDNUUsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3hCLE1BQU0sbURBQW1ELENBQUMifQ==
@@ -107,8 +107,14 @@ export class ForwardingHandlerFactory {
107
107
  if (!config.target.host || (Array.isArray(config.target.host) && config.target.host.length === 0)) {
108
108
  throw new Error('Target must include a host or array of hosts');
109
109
  }
110
- if (!config.target.port || config.target.port <= 0 || config.target.port > 65535) {
111
- throw new Error('Target must include a valid port (1-65535)');
110
+ // Validate port if it's a number
111
+ if (typeof config.target.port === 'number') {
112
+ if (config.target.port <= 0 || config.target.port > 65535) {
113
+ throw new Error('Target must include a valid port (1-65535)');
114
+ }
115
+ }
116
+ else if (config.target.port !== 'preserve' && typeof config.target.port !== 'function') {
117
+ throw new Error('Target port must be a number, "preserve", or a function');
112
118
  }
113
119
  // Type-specific validation
114
120
  switch (config.type) {
@@ -135,4 +141,4 @@ export class ForwardingHandlerFactory {
135
141
  }
136
142
  }
137
143
  }
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9mYWN0b3J5L2ZvcndhcmRpbmctZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUUvRjs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBc0I7UUFDaEQsOERBQThEO1FBQzlELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLEtBQUssV0FBVztnQkFDZCxPQUFPLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFM0MsS0FBSyxtQkFBbUI7Z0JBQ3RCLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QyxLQUFLLHlCQUF5QjtnQkFDNUIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELEtBQUssMEJBQTBCO2dCQUM3QixPQUFPLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEQ7Z0JBQ0UscURBQXFEO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE2QixNQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXNCO1FBQ2hE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
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9mYWN0b3J5L2ZvcndhcmRpbmctZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUUvRjs7R0FFRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBc0I7UUFDaEQsOERBQThEO1FBQzlELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BCLEtBQUssV0FBVztnQkFDZCxPQUFPLElBQUkscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFM0MsS0FBSyxtQkFBbUI7Z0JBQ3RCLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QyxLQUFLLHlCQUF5QjtnQkFDNUIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELEtBQUssMEJBQTBCO2dCQUM3QixPQUFPLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFbEQ7Z0JBQ0UscURBQXFEO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE2QixNQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQXNCO1FBQ2hE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
@@ -34,6 +34,10 @@ export declare abstract class ForwardingHandler extends plugins.EventEmitter imp
34
34
  host: string;
35
35
  port: number;
36
36
  };
37
+ /**
38
+ * Resolves a port value, handling 'preserve' and function ports
39
+ */
40
+ protected resolvePort(port: number | 'preserve' | ((ctx: any) => number)): number;
37
41
  /**
38
42
  * Redirect an HTTP request to HTTPS
39
43
  * @param req The HTTP request
@@ -34,15 +34,37 @@ export class ForwardingHandler extends plugins.EventEmitter {
34
34
  const randomIndex = Math.floor(Math.random() * target.host.length);
35
35
  return {
36
36
  host: target.host[randomIndex],
37
- port: target.port
37
+ port: this.resolvePort(target.port)
38
38
  };
39
39
  }
40
40
  // Single host
41
41
  return {
42
42
  host: target.host,
43
- port: target.port
43
+ port: this.resolvePort(target.port)
44
44
  };
45
45
  }
46
+ /**
47
+ * Resolves a port value, handling 'preserve' and function ports
48
+ */
49
+ resolvePort(port) {
50
+ if (typeof port === 'function') {
51
+ try {
52
+ // Create a minimal context for the function
53
+ const ctx = { port: 80 }; // Default port for minimal context
54
+ return port(ctx);
55
+ }
56
+ catch (err) {
57
+ console.error('Error resolving port function:', err);
58
+ return 80; // Default fallback port
59
+ }
60
+ }
61
+ else if (port === 'preserve') {
62
+ return 80; // Default port for 'preserve' in base handler
63
+ }
64
+ else {
65
+ return port;
66
+ }
67
+ }
46
68
  /**
47
69
  * Redirect an HTTP request to HTTPS
48
70
  * @param req The HTTP request
@@ -93,4 +115,4 @@ export class ForwardingHandler extends plugins.EventEmitter {
93
115
  return this.config.advanced?.timeout || 60000; // Default: 60 seconds
94
116
  }
95
117
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9oYW5kbGVycy9iYXNlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUs1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sT0FBZ0IsaUJBQWtCLFNBQVEsT0FBTyxDQUFDLFlBQVk7SUFDbEU7OztPQUdHO0lBQ0gsWUFBc0IsTUFBc0I7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFEWSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtJQUU1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsaURBQWlEO0lBQ25ELENBQUM7SUFlRDs7O09BR0c7SUFDTyxtQkFBbUI7UUFDM0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFL0Isb0NBQW9DO1FBQ3BDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELCtCQUErQjtZQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM5QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDbEIsQ0FBQztRQUNKLENBQUM7UUFFRCxjQUFjO1FBQ2QsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sZUFBZSxDQUFDLEdBQWlDLEVBQUUsR0FBZ0M7UUFDM0YsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO1FBQzVCLE1BQU0sV0FBVyxHQUFHLFdBQVcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBRTdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pCLFVBQVUsRUFBRSxXQUFXO1lBQ3ZCLGVBQWUsRUFBRSxVQUFVO1NBQzVCLENBQUMsQ0FBQztRQUNILEdBQUcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUU7WUFDL0MsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFO1lBQ3BDLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sa0JBQWtCLENBQzFCLE9BQXNELEVBQ3RELFNBQWlDO1FBRWpDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDMUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBRTlCLGtEQUFrRDtRQUNsRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxTQUFTO1lBRXhDLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztZQUUzQix3Q0FBd0M7WUFDeEMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDNUQsY0FBYyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwRSxDQUFDO1lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsc0JBQXNCO0lBQ3ZFLENBQUM7Q0FDRiJ9
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZm9yd2FyZGluZy9oYW5kbGVycy9iYXNlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUs1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sT0FBZ0IsaUJBQWtCLFNBQVEsT0FBTyxDQUFDLFlBQVk7SUFDbEU7OztPQUdHO0lBQ0gsWUFBc0IsTUFBc0I7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFEWSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtJQUU1QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsaURBQWlEO0lBQ25ELENBQUM7SUFlRDs7O09BR0c7SUFDTyxtQkFBbUI7UUFDM0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFL0Isb0NBQW9DO1FBQ3BDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUVELCtCQUErQjtZQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFB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
@@ -2,17 +2,12 @@
2
2
  * Forwarding system module
3
3
  * Provides a flexible and type-safe way to configure and manage various forwarding strategies
4
4
  */
5
- export * from './config/forwarding-types.js';
6
5
  export { ForwardingHandler } from './handlers/base-handler.js';
7
6
  export * from './handlers/http-handler.js';
8
7
  export * from './handlers/https-passthrough-handler.js';
9
8
  export * from './handlers/https-terminate-to-http-handler.js';
10
9
  export * from './handlers/https-terminate-to-https-handler.js';
11
10
  export * from './factory/forwarding-factory.js';
12
- export * from '../proxies/smart-proxy/utils/route-helpers.js';
13
- export declare const helpers: {
14
- httpOnly: (partialConfig: Partial<import("./config/forwarding-types.js").IDeprecatedForwardConfig> & Pick<import("./config/forwarding-types.js").IDeprecatedForwardConfig, "target">) => import("./config/forwarding-types.js").IDeprecatedForwardConfig;
15
- tlsTerminateToHttp: (partialConfig: Partial<import("./config/forwarding-types.js").IDeprecatedForwardConfig> & Pick<import("./config/forwarding-types.js").IDeprecatedForwardConfig, "target">) => import("./config/forwarding-types.js").IDeprecatedForwardConfig;
16
- tlsTerminateToHttps: (partialConfig: Partial<import("./config/forwarding-types.js").IDeprecatedForwardConfig> & Pick<import("./config/forwarding-types.js").IDeprecatedForwardConfig, "target">) => import("./config/forwarding-types.js").IDeprecatedForwardConfig;
17
- httpsPassthrough: (partialConfig: Partial<import("./config/forwarding-types.js").IDeprecatedForwardConfig> & Pick<import("./config/forwarding-types.js").IDeprecatedForwardConfig, "target">) => import("./config/forwarding-types.js").IDeprecatedForwardConfig;
18
- };
11
+ export type { TForwardingType, IForwardConfig, IForwardingHandler } from './config/forwarding-types.js';
12
+ export { ForwardingHandlerEvents } from './config/forwarding-types.js';
13
+ export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../proxies/smart-proxy/utils/route-patterns.js';
@@ -2,8 +2,6 @@
2
2
  * Forwarding system module
3
3
  * Provides a flexible and type-safe way to configure and manage various forwarding strategies
4
4
  */
5
- // Export types and configuration
6
- export * from './config/forwarding-types.js';
7
5
  // Export handlers
8
6
  export { ForwardingHandler } from './handlers/base-handler.js';
9
7
  export * from './handlers/http-handler.js';
@@ -12,14 +10,7 @@ export * from './handlers/https-terminate-to-http-handler.js';
12
10
  export * from './handlers/https-terminate-to-https-handler.js';
13
11
  // Export factory
14
12
  export * from './factory/forwarding-factory.js';
15
- // Helper functions as a convenience object
16
- import { httpOnly, tlsTerminateToHttp, tlsTerminateToHttps, httpsPassthrough } from './config/forwarding-types.js';
17
- // Export route-based helpers from smart-proxy
18
- export * from '../proxies/smart-proxy/utils/route-helpers.js';
19
- export const helpers = {
20
- httpOnly,
21
- tlsTerminateToHttp,
22
- tlsTerminateToHttps,
23
- httpsPassthrough
24
- };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9mb3J3YXJkaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILGlDQUFpQztBQUNqQyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLGtCQUFrQjtBQUNsQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGdEQUFnRCxDQUFDO0FBRS9ELGlCQUFpQjtBQUNqQixjQUFjLGlDQUFpQyxDQUFDO0FBRWhELDJDQUEyQztBQUMzQyxPQUFPLEVBQ0wsUUFBUSxFQUNSLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2pCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsOENBQThDO0FBQzlDLGNBQWMsK0NBQStDLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLFFBQVE7SUFDUixrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGdCQUFnQjtDQUNqQixDQUFDIn0=
13
+ export { ForwardingHandlerEvents } from './config/forwarding-types.js';
14
+ // Export route helpers directly from route-patterns
15
+ export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../proxies/smart-proxy/utils/route-patterns.js';
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9mb3J3YXJkaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILGtCQUFrQjtBQUNsQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGdEQUFnRCxDQUFDO0FBRS9ELGlCQUFpQjtBQUNqQixjQUFjLGlDQUFpQyxDQUFDO0FBU2hELE9BQU8sRUFDTCx1QkFBdUIsRUFDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxvREFBb0Q7QUFDcEQsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3hCLE1BQU0sZ0RBQWdELENBQUMifQ==
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export * from './interfaces.js';
5
5
  export * from './route-types.js';
6
- export type { ISmartProxyOptions as IRoutedSmartProxyOptions } from './interfaces.js';
@@ -5,15 +5,6 @@ import type { IRouteConfig } from './route-types.js';
5
5
  * Provision object for static or HTTP-01 certificate
6
6
  */
7
7
  export type TSmartProxyCertProvisionObject = plugins.tsclass.network.ICert | 'http01';
8
- /**
9
- * Alias for backward compatibility with code that uses IRoutedSmartProxyOptions
10
- */
11
- export type IRoutedSmartProxyOptions = ISmartProxyOptions;
12
- /**
13
- * Helper functions for type checking configuration types
14
- */
15
- export declare function isLegacyOptions(options: any): boolean;
16
- export declare function isRoutedOptions(options: any): boolean;
17
8
  /**
18
9
  * SmartProxy configuration options
19
10
  */
@@ -1,13 +1,2 @@
1
1
  import * as plugins from '../../../plugins.js';
2
- /**
3
- * Helper functions for type checking configuration types
4
- */
5
- export function isLegacyOptions(options) {
6
- // Legacy options are no longer supported
7
- return false;
8
- }
9
- export function isRoutedOptions(options) {
10
- // All configurations are now route-based
11
- return true;
12
- }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbW9kZWxzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQWUvQzs7R0FFRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBWTtJQUMxQyx5Q0FBeUM7SUFDekMsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxPQUFZO0lBQzFDLHlDQUF5QztJQUN6QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbW9kZWxzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQyJ9
@@ -1,4 +1,3 @@
1
- import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
2
1
  /**
3
2
  * Supported action types for route configurations
4
3
  */
@@ -256,44 +255,3 @@ export interface IRouteConfig {
256
255
  tags?: string[];
257
256
  enabled?: boolean;
258
257
  }
259
- /**
260
- * Unified SmartProxy options with routes-based configuration
261
- */
262
- export interface IRoutedSmartProxyOptions {
263
- routes: IRouteConfig[];
264
- defaults?: {
265
- target?: {
266
- host: string;
267
- port: number;
268
- };
269
- security?: IRouteSecurity;
270
- tls?: IRouteTls;
271
- };
272
- acme?: IAcmeOptions;
273
- initialDataTimeout?: number;
274
- socketTimeout?: number;
275
- inactivityCheckInterval?: number;
276
- maxConnectionLifetime?: number;
277
- inactivityTimeout?: number;
278
- gracefulShutdownTimeout?: number;
279
- noDelay?: boolean;
280
- keepAlive?: boolean;
281
- keepAliveInitialDelay?: number;
282
- maxPendingDataSize?: number;
283
- disableInactivityCheck?: boolean;
284
- enableKeepAliveProbes?: boolean;
285
- enableDetailedLogging?: boolean;
286
- enableTlsDebugLogging?: boolean;
287
- enableRandomizedTimeouts?: boolean;
288
- allowSessionTicket?: boolean;
289
- maxConnectionsPerIP?: number;
290
- connectionRateLimitPerMinute?: number;
291
- keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
292
- keepAliveInactivityMultiplier?: number;
293
- extendedKeepAliveLifetime?: number;
294
- /**
295
- * Optional certificate provider callback. Return 'http01' to use HTTP-01 challenges,
296
- * or a static certificate object for immediate provisioning.
297
- */
298
- certProvisionFunction?: (domain: string) => Promise<any>;
299
- }
@@ -1,2 +1,3 @@
1
1
  import * as plugins from '../../../plugins.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9yb3V0ZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDIn0=
2
+ // Configuration moved to models/interfaces.ts as ISmartProxyOptions
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9yb3V0ZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBbVUvQyxvRUFBb0UifQ==
@@ -47,9 +47,6 @@ export declare class RouteConnectionHandler {
47
47
  * Handle a block action for a route
48
48
  */
49
49
  private handleBlockAction;
50
- /**
51
- * Legacy connection handling has been removed in favor of pure route-based approach
52
- */
53
50
  /**
54
51
  * Sets up a direct connection to the target
55
52
  */