@push.rocks/smartproxy 13.1.2 → 15.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 (29) hide show
  1. package/dist_ts/00_commitinfo_data.js +3 -3
  2. package/dist_ts/proxies/smart-proxy/index.d.ts +5 -3
  3. package/dist_ts/proxies/smart-proxy/index.js +9 -5
  4. package/dist_ts/proxies/smart-proxy/models/index.d.ts +2 -0
  5. package/dist_ts/proxies/smart-proxy/models/index.js +2 -1
  6. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +82 -15
  7. package/dist_ts/proxies/smart-proxy/models/interfaces.js +10 -1
  8. package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +133 -0
  9. package/dist_ts/proxies/smart-proxy/models/route-types.js +2 -0
  10. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +55 -0
  11. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +804 -0
  12. package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +127 -0
  13. package/dist_ts/proxies/smart-proxy/route-helpers.js +196 -0
  14. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +103 -0
  15. package/dist_ts/proxies/smart-proxy/route-manager.js +483 -0
  16. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +19 -8
  17. package/dist_ts/proxies/smart-proxy/smart-proxy.js +239 -46
  18. package/package.json +2 -2
  19. package/readme.md +863 -423
  20. package/readme.plan.md +311 -250
  21. package/ts/00_commitinfo_data.ts +2 -2
  22. package/ts/proxies/smart-proxy/index.ts +20 -4
  23. package/ts/proxies/smart-proxy/models/index.ts +4 -0
  24. package/ts/proxies/smart-proxy/models/interfaces.ts +91 -13
  25. package/ts/proxies/smart-proxy/models/route-types.ts +184 -0
  26. package/ts/proxies/smart-proxy/route-connection-handler.ts +1117 -0
  27. package/ts/proxies/smart-proxy/route-helpers.ts +344 -0
  28. package/ts/proxies/smart-proxy/route-manager.ts +587 -0
  29. package/ts/proxies/smart-proxy/smart-proxy.ts +300 -69
@@ -0,0 +1,127 @@
1
+ import type { IRouteConfig, IRouteMatch, IRouteAction, IRouteTarget, IRouteSecurity } from './models/route-types.js';
2
+ /**
3
+ * Basic helper function to create a route configuration
4
+ */
5
+ export declare function createRoute(match: IRouteMatch, action: IRouteAction, metadata?: {
6
+ name?: string;
7
+ description?: string;
8
+ priority?: number;
9
+ tags?: string[];
10
+ }): IRouteConfig;
11
+ /**
12
+ * Create a basic HTTP route configuration
13
+ */
14
+ export declare function createHttpRoute(options: {
15
+ ports?: number | number[];
16
+ domains?: string | string[];
17
+ path?: string;
18
+ target: IRouteTarget;
19
+ headers?: Record<string, string>;
20
+ security?: IRouteSecurity;
21
+ name?: string;
22
+ description?: string;
23
+ priority?: number;
24
+ tags?: string[];
25
+ }): IRouteConfig;
26
+ /**
27
+ * Create an HTTPS route configuration with TLS termination
28
+ */
29
+ export declare function createHttpsRoute(options: {
30
+ ports?: number | number[];
31
+ domains: string | string[];
32
+ path?: string;
33
+ target: IRouteTarget;
34
+ tlsMode?: 'terminate' | 'terminate-and-reencrypt';
35
+ certificate?: 'auto' | {
36
+ key: string;
37
+ cert: string;
38
+ };
39
+ headers?: Record<string, string>;
40
+ security?: IRouteSecurity;
41
+ name?: string;
42
+ description?: string;
43
+ priority?: number;
44
+ tags?: string[];
45
+ }): IRouteConfig;
46
+ /**
47
+ * Create an HTTPS passthrough route configuration
48
+ */
49
+ export declare function createPassthroughRoute(options: {
50
+ ports?: number | number[];
51
+ domains?: string | string[];
52
+ target: IRouteTarget;
53
+ security?: IRouteSecurity;
54
+ name?: string;
55
+ description?: string;
56
+ priority?: number;
57
+ tags?: string[];
58
+ }): IRouteConfig;
59
+ /**
60
+ * Create a redirect route configuration
61
+ */
62
+ export declare function createRedirectRoute(options: {
63
+ ports?: number | number[];
64
+ domains?: string | string[];
65
+ path?: string;
66
+ redirectTo: string;
67
+ statusCode?: 301 | 302 | 307 | 308;
68
+ name?: string;
69
+ description?: string;
70
+ priority?: number;
71
+ tags?: string[];
72
+ }): IRouteConfig;
73
+ /**
74
+ * Create an HTTP to HTTPS redirect route configuration
75
+ */
76
+ export declare function createHttpToHttpsRedirect(options: {
77
+ domains: string | string[];
78
+ statusCode?: 301 | 302 | 307 | 308;
79
+ name?: string;
80
+ priority?: number;
81
+ }): IRouteConfig;
82
+ /**
83
+ * Create a block route configuration
84
+ */
85
+ export declare function createBlockRoute(options: {
86
+ ports: number | number[];
87
+ domains?: string | string[];
88
+ clientIp?: string[];
89
+ name?: string;
90
+ description?: string;
91
+ priority?: number;
92
+ tags?: string[];
93
+ }): IRouteConfig;
94
+ /**
95
+ * Create a load balancer route configuration
96
+ */
97
+ export declare function createLoadBalancerRoute(options: {
98
+ ports?: number | number[];
99
+ domains: string | string[];
100
+ path?: string;
101
+ targets: string[];
102
+ targetPort: number;
103
+ tlsMode?: 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
104
+ certificate?: 'auto' | {
105
+ key: string;
106
+ cert: string;
107
+ };
108
+ headers?: Record<string, string>;
109
+ security?: IRouteSecurity;
110
+ name?: string;
111
+ description?: string;
112
+ tags?: string[];
113
+ }): IRouteConfig;
114
+ /**
115
+ * Create a complete HTTPS server configuration with HTTP redirect
116
+ */
117
+ export declare function createHttpsServer(options: {
118
+ domains: string | string[];
119
+ target: IRouteTarget;
120
+ certificate?: 'auto' | {
121
+ key: string;
122
+ cert: string;
123
+ };
124
+ security?: IRouteSecurity;
125
+ addHttpRedirect?: boolean;
126
+ name?: string;
127
+ }): IRouteConfig[];
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Basic helper function to create a route configuration
3
+ */
4
+ export function createRoute(match, action, metadata) {
5
+ return {
6
+ match,
7
+ action,
8
+ ...metadata
9
+ };
10
+ }
11
+ /**
12
+ * Create a basic HTTP route configuration
13
+ */
14
+ export function createHttpRoute(options) {
15
+ return createRoute({
16
+ ports: options.ports || 80,
17
+ ...(options.domains ? { domains: options.domains } : {}),
18
+ ...(options.path ? { path: options.path } : {})
19
+ }, {
20
+ type: 'forward',
21
+ target: options.target,
22
+ ...(options.headers || options.security ? {
23
+ advanced: {
24
+ ...(options.headers ? { headers: options.headers } : {})
25
+ },
26
+ ...(options.security ? { security: options.security } : {})
27
+ } : {})
28
+ }, {
29
+ name: options.name || 'HTTP Route',
30
+ description: options.description,
31
+ priority: options.priority,
32
+ tags: options.tags
33
+ });
34
+ }
35
+ /**
36
+ * Create an HTTPS route configuration with TLS termination
37
+ */
38
+ export function createHttpsRoute(options) {
39
+ return createRoute({
40
+ ports: options.ports || 443,
41
+ domains: options.domains,
42
+ ...(options.path ? { path: options.path } : {})
43
+ }, {
44
+ type: 'forward',
45
+ target: options.target,
46
+ tls: {
47
+ mode: options.tlsMode || 'terminate',
48
+ certificate: options.certificate || 'auto'
49
+ },
50
+ ...(options.headers || options.security ? {
51
+ advanced: {
52
+ ...(options.headers ? { headers: options.headers } : {})
53
+ },
54
+ ...(options.security ? { security: options.security } : {})
55
+ } : {})
56
+ }, {
57
+ name: options.name || 'HTTPS Route',
58
+ description: options.description,
59
+ priority: options.priority,
60
+ tags: options.tags
61
+ });
62
+ }
63
+ /**
64
+ * Create an HTTPS passthrough route configuration
65
+ */
66
+ export function createPassthroughRoute(options) {
67
+ return createRoute({
68
+ ports: options.ports || 443,
69
+ ...(options.domains ? { domains: options.domains } : {})
70
+ }, {
71
+ type: 'forward',
72
+ target: options.target,
73
+ tls: {
74
+ mode: 'passthrough'
75
+ },
76
+ ...(options.security ? { security: options.security } : {})
77
+ }, {
78
+ name: options.name || 'HTTPS Passthrough Route',
79
+ description: options.description,
80
+ priority: options.priority,
81
+ tags: options.tags
82
+ });
83
+ }
84
+ /**
85
+ * Create a redirect route configuration
86
+ */
87
+ export function createRedirectRoute(options) {
88
+ return createRoute({
89
+ ports: options.ports || 80,
90
+ ...(options.domains ? { domains: options.domains } : {}),
91
+ ...(options.path ? { path: options.path } : {})
92
+ }, {
93
+ type: 'redirect',
94
+ redirect: {
95
+ to: options.redirectTo,
96
+ status: options.statusCode || 301
97
+ }
98
+ }, {
99
+ name: options.name || 'Redirect Route',
100
+ description: options.description,
101
+ priority: options.priority,
102
+ tags: options.tags
103
+ });
104
+ }
105
+ /**
106
+ * Create an HTTP to HTTPS redirect route configuration
107
+ */
108
+ export function createHttpToHttpsRedirect(options) {
109
+ const domainArray = Array.isArray(options.domains) ? options.domains : [options.domains];
110
+ return createRedirectRoute({
111
+ ports: 80,
112
+ domains: options.domains,
113
+ redirectTo: 'https://{domain}{path}',
114
+ statusCode: options.statusCode || 301,
115
+ name: options.name || `HTTP to HTTPS Redirect for ${domainArray.join(', ')}`,
116
+ priority: options.priority || 100 // High priority for redirects
117
+ });
118
+ }
119
+ /**
120
+ * Create a block route configuration
121
+ */
122
+ export function createBlockRoute(options) {
123
+ return createRoute({
124
+ ports: options.ports,
125
+ ...(options.domains ? { domains: options.domains } : {}),
126
+ ...(options.clientIp ? { clientIp: options.clientIp } : {})
127
+ }, {
128
+ type: 'block'
129
+ }, {
130
+ name: options.name || 'Block Route',
131
+ description: options.description,
132
+ priority: options.priority || 1000, // Very high priority for blocks
133
+ tags: options.tags
134
+ });
135
+ }
136
+ /**
137
+ * Create a load balancer route configuration
138
+ */
139
+ export function createLoadBalancerRoute(options) {
140
+ const useTls = options.tlsMode !== undefined;
141
+ const defaultPort = useTls ? 443 : 80;
142
+ return createRoute({
143
+ ports: options.ports || defaultPort,
144
+ domains: options.domains,
145
+ ...(options.path ? { path: options.path } : {})
146
+ }, {
147
+ type: 'forward',
148
+ target: {
149
+ host: options.targets,
150
+ port: options.targetPort
151
+ },
152
+ ...(useTls ? {
153
+ tls: {
154
+ mode: options.tlsMode,
155
+ ...(options.tlsMode !== 'passthrough' && options.certificate ? {
156
+ certificate: options.certificate
157
+ } : {})
158
+ }
159
+ } : {}),
160
+ ...(options.headers || options.security ? {
161
+ advanced: {
162
+ ...(options.headers ? { headers: options.headers } : {})
163
+ },
164
+ ...(options.security ? { security: options.security } : {})
165
+ } : {})
166
+ }, {
167
+ name: options.name || 'Load Balanced Route',
168
+ description: options.description || `Load balancing across ${options.targets.length} backends`,
169
+ tags: options.tags
170
+ });
171
+ }
172
+ /**
173
+ * Create a complete HTTPS server configuration with HTTP redirect
174
+ */
175
+ export function createHttpsServer(options) {
176
+ const routes = [];
177
+ const domainArray = Array.isArray(options.domains) ? options.domains : [options.domains];
178
+ // Add HTTPS route
179
+ routes.push(createHttpsRoute({
180
+ domains: options.domains,
181
+ target: options.target,
182
+ certificate: options.certificate || 'auto',
183
+ security: options.security,
184
+ name: options.name || `HTTPS Server for ${domainArray.join(', ')}`
185
+ }));
186
+ // Add HTTP to HTTPS redirect if requested
187
+ if (options.addHttpRedirect !== false) {
188
+ routes.push(createHttpToHttpsRedirect({
189
+ domains: options.domains,
190
+ name: `HTTP to HTTPS Redirect for ${domainArray.join(', ')}`,
191
+ priority: 100
192
+ }));
193
+ }
194
+ return routes;
195
+ }
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvcm91dGUtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQTs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQ3pCLEtBQWtCLEVBQ2xCLE1BQW9CLEVBQ3BCLFFBS0M7SUFFRCxPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU07UUFDTixHQUFHLFFBQVE7S0FDWixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsT0FXQztJQUVELE9BQU8sV0FBVyxDQUNoQjtRQUNFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDMUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNoRCxFQUNEO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDeEMsUUFBUSxFQUFFO2dCQUNSLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUN6RDtZQUNELEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUM1RCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDUixFQUNEO1FBQ0UsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksWUFBWTtRQUNsQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtLQUNuQixDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE9BYUM7SUFFRCxPQUFPLFdBQVcsQ0FDaEI7UUFDRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHO1FBQzNCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDaEQsRUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLEdBQUcsRUFBRTtZQUNILElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLFdBQVc7WUFDcEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTTtTQUMzQztRQUNELEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsRUFBRTtnQkFDUixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekQ7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDNUQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ1IsRUFDRDtRQUNFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLGFBQWE7UUFDbkMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7S0FDbkIsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxPQVNDO0lBRUQsT0FBTyxXQUFXLENBQ2hCO1FBQ0UsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRztRQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDekQsRUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLEdBQUcsRUFBRTtZQUNILElBQUksRUFBRSxhQUFhO1NBQ3BCO1FBQ0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzVELEVBQ0Q7UUFDRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSx5QkFBeUI7UUFDL0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7S0FDbkIsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxPQVVDO0lBRUQsT0FBTyxXQUFXLENBQ2hCO1FBQ0UsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUMxQixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2hELEVBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixRQUFRLEVBQUU7WUFDUixFQUFFLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDdEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksR0FBRztTQUNsQztLQUNGLEVBQ0Q7UUFDRSxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxnQkFBZ0I7UUFDdEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7S0FDbkIsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUN2QyxPQUtDO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpGLE9BQU8sbUJBQW1CLENBQUM7UUFDekIsS0FBSyxFQUFFLEVBQUU7UUFDVCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsVUFBVSxFQUFFLHdCQUF3QjtRQUNwQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxHQUFHO1FBQ3JDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLDhCQUE4QixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzVFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLEdBQUcsQ0FBQyw4QkFBOEI7S0FDakUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQVFDO0lBRUQsT0FBTyxXQUFXLENBQ2hCO1FBQ0UsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDNUQsRUFDRDtRQUNFLElBQUksRUFBRSxPQUFPO0tBQ2QsRUFDRDtRQUNFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLGFBQWE7UUFDbkMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxnQ0FBZ0M7UUFDcEUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsT0FhQztJQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFdEMsT0FBTyxXQUFXLENBQ2hCO1FBQ0UsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLElBQUksV0FBVztRQUNuQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2hELEVBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLE1BQU0sRUFBRTtZQUNOLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTztZQUNyQixJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDekI7UUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNYLEdBQUcsRUFBRTtnQkFDSCxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQVE7Z0JBQ3RCLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxLQUFLLGFBQWEsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztvQkFDN0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO2lCQUNqQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDUjtTQUNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLFFBQVEsRUFBRTtnQkFDUixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDekQ7WUFDRCxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDNUQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ1IsRUFDRDtRQUNFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLHFCQUFxQjtRQUMzQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsSUFBSSx5QkFBeUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLFdBQVc7UUFDOUYsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FPQztJQUVELE1BQU0sTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpGLGtCQUFrQjtJQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzNCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTTtRQUMxQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksb0JBQW9CLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7S0FDbkUsQ0FBQyxDQUFDLENBQUM7SUFFSiwwQ0FBMEM7SUFDMUMsSUFBSSxPQUFPLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFDcEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLElBQUksRUFBRSw4QkFBOEIsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM1RCxRQUFRLEVBQUUsR0FBRztTQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ==
@@ -0,0 +1,103 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { IRouteConfig } from './models/route-types.js';
3
+ import type { ISmartProxyOptions, IDomainConfig } from './models/interfaces.js';
4
+ /**
5
+ * Result of route matching
6
+ */
7
+ export interface IRouteMatchResult {
8
+ route: IRouteConfig;
9
+ params?: Record<string, string>;
10
+ }
11
+ /**
12
+ * The RouteManager handles all routing decisions based on connections and attributes
13
+ */
14
+ export declare class RouteManager extends plugins.EventEmitter {
15
+ private routes;
16
+ private portMap;
17
+ private options;
18
+ constructor(options: ISmartProxyOptions);
19
+ /**
20
+ * Update routes with new configuration
21
+ */
22
+ updateRoutes(routes?: IRouteConfig[]): void;
23
+ /**
24
+ * Rebuild the port mapping for fast lookups
25
+ */
26
+ private rebuildPortMap;
27
+ /**
28
+ * Expand a port range specification into an array of individual ports
29
+ */
30
+ private expandPortRange;
31
+ /**
32
+ * Get all ports that should be listened on
33
+ */
34
+ getListeningPorts(): number[];
35
+ /**
36
+ * Get all routes for a given port
37
+ */
38
+ getRoutesForPort(port: number): IRouteConfig[];
39
+ /**
40
+ * Test if a pattern matches a domain using glob matching
41
+ */
42
+ private matchDomain;
43
+ /**
44
+ * Match a domain against all patterns in a route
45
+ */
46
+ private matchRouteDomain;
47
+ /**
48
+ * Check if a client IP is allowed by a route's security settings
49
+ */
50
+ private isClientIpAllowed;
51
+ /**
52
+ * Match an IP against a pattern
53
+ */
54
+ private matchIpPattern;
55
+ /**
56
+ * Match an IP against a CIDR pattern
57
+ */
58
+ private matchIpCidr;
59
+ /**
60
+ * Convert an IP address to a numeric value
61
+ */
62
+ private ipToNumber;
63
+ /**
64
+ * Find the matching route for a connection
65
+ */
66
+ findMatchingRoute(options: {
67
+ port: number;
68
+ domain?: string;
69
+ clientIp: string;
70
+ path?: string;
71
+ tlsVersion?: string;
72
+ }): IRouteMatchResult | null;
73
+ /**
74
+ * Match a path against a pattern
75
+ */
76
+ private matchPath;
77
+ /**
78
+ * Convert a domain config to routes
79
+ * (For backward compatibility with code that still uses domainConfigs)
80
+ */
81
+ domainConfigToRoutes(domainConfig: IDomainConfig): IRouteConfig[];
82
+ /**
83
+ * Update routes based on domain configs
84
+ * (For backward compatibility with code that still uses domainConfigs)
85
+ */
86
+ updateFromDomainConfigs(domainConfigs: IDomainConfig[]): void;
87
+ /**
88
+ * Validate the route configuration and return any warnings
89
+ */
90
+ validateConfiguration(): string[];
91
+ /**
92
+ * Check if two route matches are similar (potential conflict)
93
+ */
94
+ private areMatchesSimilar;
95
+ /**
96
+ * Check if a route is completely shadowed by a higher priority route
97
+ */
98
+ private isRouteShadowed;
99
+ /**
100
+ * Check if route1 is more specific than route2
101
+ */
102
+ private isRouteMoreSpecific;
103
+ }