@push.rocks/smartproxy 16.0.2 → 16.0.3

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 (115) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/core/models/index.d.ts +2 -0
  3. package/dist_ts/core/models/index.js +3 -1
  4. package/dist_ts/core/models/route-context.d.ts +62 -0
  5. package/dist_ts/core/models/route-context.js +43 -0
  6. package/dist_ts/core/models/socket-augmentation.d.ts +12 -0
  7. package/dist_ts/core/models/socket-augmentation.js +18 -0
  8. package/dist_ts/core/utils/event-system.d.ts +200 -0
  9. package/dist_ts/core/utils/event-system.js +224 -0
  10. package/dist_ts/core/utils/index.d.ts +7 -0
  11. package/dist_ts/core/utils/index.js +8 -1
  12. package/dist_ts/core/utils/route-manager.d.ts +118 -0
  13. package/dist_ts/core/utils/route-manager.js +383 -0
  14. package/dist_ts/core/utils/route-utils.d.ts +94 -0
  15. package/dist_ts/core/utils/route-utils.js +264 -0
  16. package/dist_ts/core/utils/security-utils.d.ts +111 -0
  17. package/dist_ts/core/utils/security-utils.js +212 -0
  18. package/dist_ts/core/utils/shared-security-manager.d.ts +110 -0
  19. package/dist_ts/core/utils/shared-security-manager.js +252 -0
  20. package/dist_ts/core/utils/template-utils.d.ts +37 -0
  21. package/dist_ts/core/utils/template-utils.js +104 -0
  22. package/dist_ts/core/utils/websocket-utils.d.ts +23 -0
  23. package/dist_ts/core/utils/websocket-utils.js +86 -0
  24. package/dist_ts/http/router/index.d.ts +5 -1
  25. package/dist_ts/http/router/index.js +4 -2
  26. package/dist_ts/http/router/route-router.d.ts +108 -0
  27. package/dist_ts/http/router/route-router.js +393 -0
  28. package/dist_ts/index.d.ts +8 -2
  29. package/dist_ts/index.js +10 -3
  30. package/dist_ts/proxies/index.d.ts +7 -2
  31. package/dist_ts/proxies/index.js +10 -4
  32. package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +21 -0
  33. package/dist_ts/proxies/network-proxy/certificate-manager.js +92 -1
  34. package/dist_ts/proxies/network-proxy/context-creator.d.ts +34 -0
  35. package/dist_ts/proxies/network-proxy/context-creator.js +108 -0
  36. package/dist_ts/proxies/network-proxy/function-cache.d.ts +90 -0
  37. package/dist_ts/proxies/network-proxy/function-cache.js +198 -0
  38. package/dist_ts/proxies/network-proxy/http-request-handler.d.ts +40 -0
  39. package/dist_ts/proxies/network-proxy/http-request-handler.js +256 -0
  40. package/dist_ts/proxies/network-proxy/http2-request-handler.d.ts +24 -0
  41. package/dist_ts/proxies/network-proxy/http2-request-handler.js +201 -0
  42. package/dist_ts/proxies/network-proxy/models/types.d.ts +73 -1
  43. package/dist_ts/proxies/network-proxy/models/types.js +242 -1
  44. package/dist_ts/proxies/network-proxy/network-proxy.d.ts +23 -20
  45. package/dist_ts/proxies/network-proxy/network-proxy.js +147 -60
  46. package/dist_ts/proxies/network-proxy/request-handler.d.ts +38 -5
  47. package/dist_ts/proxies/network-proxy/request-handler.js +584 -198
  48. package/dist_ts/proxies/network-proxy/security-manager.d.ts +65 -0
  49. package/dist_ts/proxies/network-proxy/security-manager.js +255 -0
  50. package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +13 -2
  51. package/dist_ts/proxies/network-proxy/websocket-handler.js +238 -20
  52. package/dist_ts/proxies/smart-proxy/index.d.ts +1 -1
  53. package/dist_ts/proxies/smart-proxy/index.js +3 -3
  54. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +3 -5
  55. package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +56 -3
  56. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +4 -57
  57. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +19 -228
  58. package/dist_ts/proxies/smart-proxy/port-manager.d.ts +81 -0
  59. package/dist_ts/proxies/smart-proxy/port-manager.js +166 -0
  60. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +5 -0
  61. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +131 -15
  62. package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +3 -1
  63. package/dist_ts/proxies/smart-proxy/route-helpers/index.js +5 -3
  64. package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +5 -178
  65. package/dist_ts/proxies/smart-proxy/route-helpers.js +8 -296
  66. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +11 -2
  67. package/dist_ts/proxies/smart-proxy/route-manager.js +79 -10
  68. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +29 -2
  69. package/dist_ts/proxies/smart-proxy/smart-proxy.js +48 -43
  70. package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +67 -1
  71. package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +120 -1
  72. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +3 -3
  73. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +27 -5
  74. package/package.json +1 -1
  75. package/readme.md +102 -14
  76. package/readme.plan.md +103 -168
  77. package/ts/00_commitinfo_data.ts +1 -1
  78. package/ts/core/models/index.ts +2 -0
  79. package/ts/core/models/route-context.ts +113 -0
  80. package/ts/core/models/socket-augmentation.ts +33 -0
  81. package/ts/core/utils/event-system.ts +376 -0
  82. package/ts/core/utils/index.ts +7 -0
  83. package/ts/core/utils/route-manager.ts +489 -0
  84. package/ts/core/utils/route-utils.ts +312 -0
  85. package/ts/core/utils/security-utils.ts +309 -0
  86. package/ts/core/utils/shared-security-manager.ts +333 -0
  87. package/ts/core/utils/template-utils.ts +124 -0
  88. package/ts/core/utils/websocket-utils.ts +81 -0
  89. package/ts/http/router/index.ts +8 -1
  90. package/ts/http/router/route-router.ts +482 -0
  91. package/ts/index.ts +14 -2
  92. package/ts/proxies/index.ts +12 -3
  93. package/ts/proxies/network-proxy/certificate-manager.ts +114 -10
  94. package/ts/proxies/network-proxy/context-creator.ts +145 -0
  95. package/ts/proxies/network-proxy/function-cache.ts +259 -0
  96. package/ts/proxies/network-proxy/http-request-handler.ts +330 -0
  97. package/ts/proxies/network-proxy/http2-request-handler.ts +255 -0
  98. package/ts/proxies/network-proxy/models/types.ts +312 -1
  99. package/ts/proxies/network-proxy/network-proxy.ts +195 -86
  100. package/ts/proxies/network-proxy/request-handler.ts +698 -246
  101. package/ts/proxies/network-proxy/security-manager.ts +298 -0
  102. package/ts/proxies/network-proxy/websocket-handler.ts +276 -33
  103. package/ts/proxies/smart-proxy/index.ts +2 -12
  104. package/ts/proxies/smart-proxy/models/interfaces.ts +7 -4
  105. package/ts/proxies/smart-proxy/models/route-types.ts +78 -10
  106. package/ts/proxies/smart-proxy/network-proxy-bridge.ts +20 -257
  107. package/ts/proxies/smart-proxy/port-manager.ts +195 -0
  108. package/ts/proxies/smart-proxy/route-connection-handler.ts +156 -21
  109. package/ts/proxies/smart-proxy/route-manager.ts +98 -14
  110. package/ts/proxies/smart-proxy/smart-proxy.ts +56 -55
  111. package/ts/proxies/smart-proxy/utils/route-helpers.ts +167 -1
  112. package/ts/proxies/smart-proxy/utils/route-validators.ts +24 -5
  113. package/ts/proxies/smart-proxy/domain-config-manager.ts.bak +0 -441
  114. package/ts/proxies/smart-proxy/route-helpers/index.ts +0 -9
  115. package/ts/proxies/smart-proxy/route-helpers.ts +0 -498
@@ -0,0 +1,108 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { IRouteConfig } from '../../proxies/smart-proxy/models/route-types.js';
3
+ import type { ILogger } from '../../proxies/network-proxy/models/types.js';
4
+ /**
5
+ * Optional path pattern configuration that can be added to proxy configs
6
+ */
7
+ export interface PathPatternConfig {
8
+ pathPattern?: string;
9
+ }
10
+ /**
11
+ * Interface for router result with additional metadata
12
+ */
13
+ export interface RouterResult {
14
+ route: IRouteConfig;
15
+ pathMatch?: string;
16
+ pathParams?: Record<string, string>;
17
+ pathRemainder?: string;
18
+ }
19
+ /**
20
+ * Router for HTTP reverse proxy requests based on route configurations
21
+ *
22
+ * Supports the following domain matching patterns:
23
+ * - Exact matches: "example.com"
24
+ * - Wildcard subdomains: "*.example.com" (matches any subdomain of example.com)
25
+ * - TLD wildcards: "example.*" (matches example.com, example.org, etc.)
26
+ * - Complex wildcards: "*.lossless*" (matches any subdomain of any lossless domain)
27
+ * - Default fallback: "*" (matches any unmatched domain)
28
+ *
29
+ * Also supports path pattern matching for each domain:
30
+ * - Exact path: "/api/users"
31
+ * - Wildcard paths: "/api/*"
32
+ * - Path parameters: "/users/:id/profile"
33
+ */
34
+ export declare class RouteRouter {
35
+ private routes;
36
+ private defaultRoute?;
37
+ private pathPatterns;
38
+ private logger;
39
+ constructor(routes?: IRouteConfig[], logger?: ILogger);
40
+ /**
41
+ * Sets a new set of routes to be routed to
42
+ * @param routes Array of route configurations
43
+ */
44
+ setRoutes(routes: IRouteConfig[]): void;
45
+ /**
46
+ * Routes a request based on hostname and path
47
+ * @param req The incoming HTTP request
48
+ * @returns The matching route or undefined if no match found
49
+ */
50
+ routeReq(req: plugins.http.IncomingMessage): IRouteConfig | undefined;
51
+ /**
52
+ * Routes a request with detailed matching information
53
+ * @param req The incoming HTTP request
54
+ * @returns Detailed routing result including matched route and path information
55
+ */
56
+ routeReqWithDetails(req: plugins.http.IncomingMessage): RouterResult | undefined;
57
+ /**
58
+ * Find potential wildcard patterns that could match a given hostname
59
+ * Handles complex patterns like "*.lossless*" or other partial matches
60
+ * @param hostname The hostname to find wildcard matches for
61
+ * @returns Array of potential wildcard patterns that could match
62
+ */
63
+ private findWildcardMatches;
64
+ /**
65
+ * Find a route for a specific host and path
66
+ */
67
+ private findRouteForHost;
68
+ /**
69
+ * Matches a URL path against a pattern
70
+ * Supports:
71
+ * - Exact matches: /users/profile
72
+ * - Wildcards: /api/* (matches any path starting with /api/)
73
+ * - Path parameters: /users/:id (captures id as a parameter)
74
+ *
75
+ * @param path The URL path to match
76
+ * @param pattern The pattern to match against
77
+ * @returns Match result with params and remainder, or null if no match
78
+ */
79
+ private matchPath;
80
+ /**
81
+ * Gets all currently active route configurations
82
+ * @returns Array of all active routes
83
+ */
84
+ getRoutes(): IRouteConfig[];
85
+ /**
86
+ * Gets all hostnames that this router is configured to handle
87
+ * @returns Array of hostnames
88
+ */
89
+ getHostnames(): string[];
90
+ /**
91
+ * Adds a single new route configuration
92
+ * @param route The route configuration to add
93
+ */
94
+ addRoute(route: IRouteConfig): void;
95
+ /**
96
+ * Removes routes by domain pattern
97
+ * @param domain The domain pattern to remove routes for
98
+ * @returns Boolean indicating whether any routes were removed
99
+ */
100
+ removeRoutesByDomain(domain: string): boolean;
101
+ /**
102
+ * Legacy method for compatibility with ProxyRouter
103
+ * Converts IReverseProxyConfig to IRouteConfig and calls setRoutes
104
+ *
105
+ * @param configs Array of legacy proxy configurations
106
+ */
107
+ setNewProxyConfigs(configs: any[]): void;
108
+ }
@@ -0,0 +1,393 @@
1
+ import * as plugins from '../../plugins.js';
2
+ /**
3
+ * Router for HTTP reverse proxy requests based on route configurations
4
+ *
5
+ * Supports the following domain matching patterns:
6
+ * - Exact matches: "example.com"
7
+ * - Wildcard subdomains: "*.example.com" (matches any subdomain of example.com)
8
+ * - TLD wildcards: "example.*" (matches example.com, example.org, etc.)
9
+ * - Complex wildcards: "*.lossless*" (matches any subdomain of any lossless domain)
10
+ * - Default fallback: "*" (matches any unmatched domain)
11
+ *
12
+ * Also supports path pattern matching for each domain:
13
+ * - Exact path: "/api/users"
14
+ * - Wildcard paths: "/api/*"
15
+ * - Path parameters: "/users/:id/profile"
16
+ */
17
+ export class RouteRouter {
18
+ constructor(routes, logger) {
19
+ // Store original routes for reference
20
+ this.routes = [];
21
+ // Store path patterns separately since they're not in the original interface
22
+ this.pathPatterns = new Map();
23
+ this.logger = logger || {
24
+ error: console.error,
25
+ warn: console.warn,
26
+ info: console.info,
27
+ debug: console.debug
28
+ };
29
+ if (routes) {
30
+ this.setRoutes(routes);
31
+ }
32
+ }
33
+ /**
34
+ * Sets a new set of routes to be routed to
35
+ * @param routes Array of route configurations
36
+ */
37
+ setRoutes(routes) {
38
+ this.routes = [...routes];
39
+ // Sort routes by priority
40
+ this.routes.sort((a, b) => {
41
+ const priorityA = a.priority ?? 0;
42
+ const priorityB = b.priority ?? 0;
43
+ return priorityB - priorityA;
44
+ });
45
+ // Find default route if any (route with "*" as domain)
46
+ this.defaultRoute = this.routes.find(route => {
47
+ const domains = Array.isArray(route.match.domains)
48
+ ? route.match.domains
49
+ : [route.match.domains];
50
+ return domains.includes('*');
51
+ });
52
+ // Extract path patterns from route match.path
53
+ for (const route of this.routes) {
54
+ if (route.match.path) {
55
+ this.pathPatterns.set(route, route.match.path);
56
+ }
57
+ }
58
+ const uniqueDomains = this.getHostnames();
59
+ this.logger.info(`Router initialized with ${this.routes.length} routes (${uniqueDomains.length} unique hosts)`);
60
+ }
61
+ /**
62
+ * Routes a request based on hostname and path
63
+ * @param req The incoming HTTP request
64
+ * @returns The matching route or undefined if no match found
65
+ */
66
+ routeReq(req) {
67
+ const result = this.routeReqWithDetails(req);
68
+ return result ? result.route : undefined;
69
+ }
70
+ /**
71
+ * Routes a request with detailed matching information
72
+ * @param req The incoming HTTP request
73
+ * @returns Detailed routing result including matched route and path information
74
+ */
75
+ routeReqWithDetails(req) {
76
+ // Extract and validate host header
77
+ const originalHost = req.headers.host;
78
+ if (!originalHost) {
79
+ this.logger.error('No host header found in request');
80
+ return this.defaultRoute ? { route: this.defaultRoute } : undefined;
81
+ }
82
+ // Parse URL for path matching
83
+ const parsedUrl = plugins.url.parse(req.url || '/');
84
+ const urlPath = parsedUrl.pathname || '/';
85
+ // Extract hostname without port
86
+ const hostWithoutPort = originalHost.split(':')[0].toLowerCase();
87
+ // First try exact hostname match
88
+ const exactRoute = this.findRouteForHost(hostWithoutPort, urlPath);
89
+ if (exactRoute) {
90
+ return exactRoute;
91
+ }
92
+ // Try various wildcard patterns
93
+ if (hostWithoutPort.includes('.')) {
94
+ const domainParts = hostWithoutPort.split('.');
95
+ // Try wildcard subdomain (*.example.com)
96
+ if (domainParts.length > 2) {
97
+ const wildcardDomain = `*.${domainParts.slice(1).join('.')}`;
98
+ const wildcardRoute = this.findRouteForHost(wildcardDomain, urlPath);
99
+ if (wildcardRoute) {
100
+ return wildcardRoute;
101
+ }
102
+ }
103
+ // Try TLD wildcard (example.*)
104
+ const baseDomain = domainParts.slice(0, -1).join('.');
105
+ const tldWildcardDomain = `${baseDomain}.*`;
106
+ const tldWildcardRoute = this.findRouteForHost(tldWildcardDomain, urlPath);
107
+ if (tldWildcardRoute) {
108
+ return tldWildcardRoute;
109
+ }
110
+ // Try complex wildcard patterns
111
+ const wildcardPatterns = this.findWildcardMatches(hostWithoutPort);
112
+ for (const pattern of wildcardPatterns) {
113
+ const wildcardRoute = this.findRouteForHost(pattern, urlPath);
114
+ if (wildcardRoute) {
115
+ return wildcardRoute;
116
+ }
117
+ }
118
+ }
119
+ // Fall back to default route if available
120
+ if (this.defaultRoute) {
121
+ this.logger.warn(`No specific route found for host: ${hostWithoutPort}, using default`);
122
+ return { route: this.defaultRoute };
123
+ }
124
+ this.logger.error(`No route found for host: ${hostWithoutPort}`);
125
+ return undefined;
126
+ }
127
+ /**
128
+ * Find potential wildcard patterns that could match a given hostname
129
+ * Handles complex patterns like "*.lossless*" or other partial matches
130
+ * @param hostname The hostname to find wildcard matches for
131
+ * @returns Array of potential wildcard patterns that could match
132
+ */
133
+ findWildcardMatches(hostname) {
134
+ const patterns = [];
135
+ // Find all routes with wildcard domains
136
+ for (const route of this.routes) {
137
+ if (!route.match.domains)
138
+ continue;
139
+ const domains = Array.isArray(route.match.domains)
140
+ ? route.match.domains
141
+ : [route.match.domains];
142
+ // Filter to only wildcard domains
143
+ const wildcardDomains = domains.filter(domain => domain.includes('*'));
144
+ // Convert each wildcard domain to a regex pattern and check if it matches
145
+ for (const domain of wildcardDomains) {
146
+ // Skip the default wildcard '*'
147
+ if (domain === '*')
148
+ continue;
149
+ // Skip already checked patterns (*.domain.com and domain.*)
150
+ if (domain.startsWith('*.') && domain.indexOf('*', 2) === -1)
151
+ continue;
152
+ if (domain.endsWith('.*') && domain.indexOf('*') === domain.length - 1)
153
+ continue;
154
+ // Convert wildcard pattern to regex
155
+ const regexPattern = domain
156
+ .replace(/\./g, '\\.') // Escape dots
157
+ .replace(/\*/g, '.*'); // Convert * to .* for regex
158
+ // Create regex object with case insensitive flag
159
+ const regex = new RegExp(`^${regexPattern}$`, 'i');
160
+ // If hostname matches this complex pattern, add it to the list
161
+ if (regex.test(hostname)) {
162
+ patterns.push(domain);
163
+ }
164
+ }
165
+ }
166
+ return patterns;
167
+ }
168
+ /**
169
+ * Find a route for a specific host and path
170
+ */
171
+ findRouteForHost(hostname, path) {
172
+ // Find all routes for this hostname
173
+ const matchingRoutes = this.routes.filter(route => {
174
+ if (!route.match.domains)
175
+ return false;
176
+ const domains = Array.isArray(route.match.domains)
177
+ ? route.match.domains
178
+ : [route.match.domains];
179
+ return domains.some(domain => domain.toLowerCase() === hostname.toLowerCase());
180
+ });
181
+ if (matchingRoutes.length === 0) {
182
+ return undefined;
183
+ }
184
+ // First try routes with path patterns
185
+ const routesWithPaths = matchingRoutes.filter(route => this.pathPatterns.has(route));
186
+ // Already sorted by priority during setRoutes
187
+ // Check each route with path pattern
188
+ for (const route of routesWithPaths) {
189
+ const pathPattern = this.pathPatterns.get(route);
190
+ if (pathPattern) {
191
+ const pathMatch = this.matchPath(path, pathPattern);
192
+ if (pathMatch) {
193
+ return {
194
+ route,
195
+ pathMatch: pathMatch.matched,
196
+ pathParams: pathMatch.params,
197
+ pathRemainder: pathMatch.remainder
198
+ };
199
+ }
200
+ }
201
+ }
202
+ // If no path pattern matched, use the first route without a path pattern
203
+ const routeWithoutPath = matchingRoutes.find(route => !this.pathPatterns.has(route));
204
+ if (routeWithoutPath) {
205
+ return { route: routeWithoutPath };
206
+ }
207
+ return undefined;
208
+ }
209
+ /**
210
+ * Matches a URL path against a pattern
211
+ * Supports:
212
+ * - Exact matches: /users/profile
213
+ * - Wildcards: /api/* (matches any path starting with /api/)
214
+ * - Path parameters: /users/:id (captures id as a parameter)
215
+ *
216
+ * @param path The URL path to match
217
+ * @param pattern The pattern to match against
218
+ * @returns Match result with params and remainder, or null if no match
219
+ */
220
+ matchPath(path, pattern) {
221
+ // Handle exact match
222
+ if (path === pattern) {
223
+ return {
224
+ matched: pattern,
225
+ params: {},
226
+ remainder: ''
227
+ };
228
+ }
229
+ // Handle wildcard match
230
+ if (pattern.endsWith('/*')) {
231
+ const prefix = pattern.slice(0, -2);
232
+ if (path === prefix || path.startsWith(`${prefix}/`)) {
233
+ return {
234
+ matched: prefix,
235
+ params: {},
236
+ remainder: path.slice(prefix.length)
237
+ };
238
+ }
239
+ return null;
240
+ }
241
+ // Handle path parameters
242
+ const patternParts = pattern.split('/').filter(p => p);
243
+ const pathParts = path.split('/').filter(p => p);
244
+ // Too few path parts to match
245
+ if (pathParts.length < patternParts.length) {
246
+ return null;
247
+ }
248
+ const params = {};
249
+ // Compare each part
250
+ for (let i = 0; i < patternParts.length; i++) {
251
+ const patternPart = patternParts[i];
252
+ const pathPart = pathParts[i];
253
+ // Handle parameter
254
+ if (patternPart.startsWith(':')) {
255
+ const paramName = patternPart.slice(1);
256
+ params[paramName] = pathPart;
257
+ continue;
258
+ }
259
+ // Handle wildcard at the end
260
+ if (patternPart === '*' && i === patternParts.length - 1) {
261
+ break;
262
+ }
263
+ // Handle exact match for this part
264
+ if (patternPart !== pathPart) {
265
+ return null;
266
+ }
267
+ }
268
+ // Calculate the remainder - the unmatched path parts
269
+ const remainderParts = pathParts.slice(patternParts.length);
270
+ const remainder = remainderParts.length ? '/' + remainderParts.join('/') : '';
271
+ // Calculate the matched path
272
+ const matchedParts = patternParts.map((part, i) => {
273
+ return part.startsWith(':') ? pathParts[i] : part;
274
+ });
275
+ const matched = '/' + matchedParts.join('/');
276
+ return {
277
+ matched,
278
+ params,
279
+ remainder
280
+ };
281
+ }
282
+ /**
283
+ * Gets all currently active route configurations
284
+ * @returns Array of all active routes
285
+ */
286
+ getRoutes() {
287
+ return [...this.routes];
288
+ }
289
+ /**
290
+ * Gets all hostnames that this router is configured to handle
291
+ * @returns Array of hostnames
292
+ */
293
+ getHostnames() {
294
+ const hostnames = new Set();
295
+ for (const route of this.routes) {
296
+ if (!route.match.domains)
297
+ continue;
298
+ const domains = Array.isArray(route.match.domains)
299
+ ? route.match.domains
300
+ : [route.match.domains];
301
+ for (const domain of domains) {
302
+ if (domain !== '*') {
303
+ hostnames.add(domain.toLowerCase());
304
+ }
305
+ }
306
+ }
307
+ return Array.from(hostnames);
308
+ }
309
+ /**
310
+ * Adds a single new route configuration
311
+ * @param route The route configuration to add
312
+ */
313
+ addRoute(route) {
314
+ this.routes.push(route);
315
+ // Store path pattern if present
316
+ if (route.match.path) {
317
+ this.pathPatterns.set(route, route.match.path);
318
+ }
319
+ // Re-sort routes by priority
320
+ this.routes.sort((a, b) => {
321
+ const priorityA = a.priority ?? 0;
322
+ const priorityB = b.priority ?? 0;
323
+ return priorityB - priorityA;
324
+ });
325
+ }
326
+ /**
327
+ * Removes routes by domain pattern
328
+ * @param domain The domain pattern to remove routes for
329
+ * @returns Boolean indicating whether any routes were removed
330
+ */
331
+ removeRoutesByDomain(domain) {
332
+ const initialCount = this.routes.length;
333
+ // Find routes to remove
334
+ const routesToRemove = this.routes.filter(route => {
335
+ if (!route.match.domains)
336
+ return false;
337
+ const domains = Array.isArray(route.match.domains)
338
+ ? route.match.domains
339
+ : [route.match.domains];
340
+ return domains.includes(domain);
341
+ });
342
+ // Remove them from the patterns map
343
+ for (const route of routesToRemove) {
344
+ this.pathPatterns.delete(route);
345
+ }
346
+ // Filter them out of the routes array
347
+ this.routes = this.routes.filter(route => {
348
+ if (!route.match.domains)
349
+ return true;
350
+ const domains = Array.isArray(route.match.domains)
351
+ ? route.match.domains
352
+ : [route.match.domains];
353
+ return !domains.includes(domain);
354
+ });
355
+ return this.routes.length !== initialCount;
356
+ }
357
+ /**
358
+ * Legacy method for compatibility with ProxyRouter
359
+ * Converts IReverseProxyConfig to IRouteConfig and calls setRoutes
360
+ *
361
+ * @param configs Array of legacy proxy configurations
362
+ */
363
+ setNewProxyConfigs(configs) {
364
+ // Convert legacy configs to routes and add them
365
+ const routes = configs.map(config => {
366
+ // Create a basic route configuration from the legacy config
367
+ return {
368
+ match: {
369
+ ports: config.destinationPorts[0], // Just use the first port
370
+ domains: config.hostName
371
+ },
372
+ action: {
373
+ type: 'forward',
374
+ target: {
375
+ host: config.destinationIps,
376
+ port: config.destinationPorts[0]
377
+ },
378
+ tls: {
379
+ mode: 'terminate',
380
+ certificate: {
381
+ key: config.privateKey,
382
+ cert: config.publicKey
383
+ }
384
+ }
385
+ },
386
+ name: `Legacy Config - ${config.hostName}`,
387
+ enabled: true
388
+ };
389
+ });
390
+ this.setRoutes(routes);
391
+ }
392
+ }
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvaHR0cC9yb3V0ZXIvcm91dGUtcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFxQjVDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFVdEIsWUFDRSxNQUF1QixFQUN2QixNQUFnQjtRQVhsQixzQ0FBc0M7UUFDOUIsV0FBTSxHQUFtQixFQUFFLENBQUM7UUFHcEMsNkVBQTZFO1FBQ3JFLGlCQUFZLEdBQThCLElBQUksR0FBRyxFQUFFLENBQUM7UUFRMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUk7WUFDdEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1NBQ3JCLENBQUM7UUFFRixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVMsQ0FBQyxNQUFzQjtRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUUxQiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDbEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDbEMsT0FBTyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQy9CLENBQUMsQ0FB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
@@ -2,11 +2,17 @@
2
2
  * SmartProxy main module exports
3
3
  */
4
4
  export * from './proxies/nftables-proxy/index.js';
5
- export * from './proxies/network-proxy/index.js';
5
+ export { NetworkProxy, CertificateManager, ConnectionPool, RequestHandler, WebSocketHandler } from './proxies/network-proxy/index.js';
6
+ export type { IMetricsTracker, MetricsTracker } from './proxies/network-proxy/index.js';
7
+ export * from './proxies/network-proxy/models/index.js';
8
+ export { RouteManager as NetworkProxyRouteManager } from './proxies/network-proxy/models/types.js';
6
9
  export { Port80Handler, Port80HandlerError as HttpError, ServerError, CertificateError } from './http/port80/port80-handler.js';
7
10
  export { Port80HandlerEvents } from './certificate/events/certificate-events.js';
8
11
  export * from './redirect/classes.redirect.js';
9
- export * from './proxies/smart-proxy/index.js';
12
+ export { SmartProxy, ConnectionManager, SecurityManager, TimeoutManager, TlsManager, NetworkProxyBridge, RouteConnectionHandler } from './proxies/smart-proxy/index.js';
13
+ export { RouteManager } from './proxies/smart-proxy/route-manager.js';
14
+ export * from './proxies/smart-proxy/models/index.js';
15
+ export * from './proxies/smart-proxy/utils/index.js';
10
16
  export { SniHandler } from './tls/sni/sni-handler.js';
11
17
  export * from './proxies/smart-proxy/models/interfaces.js';
12
18
  export * from './core/models/common-types.js';
package/dist_ts/index.js CHANGED
@@ -4,13 +4,20 @@
4
4
  // Legacy exports (to maintain backward compatibility)
5
5
  // Migrated to the new proxies structure
6
6
  export * from './proxies/nftables-proxy/index.js';
7
- export * from './proxies/network-proxy/index.js';
7
+ // Export NetworkProxy elements selectively to avoid RouteManager ambiguity
8
+ export { NetworkProxy, CertificateManager, ConnectionPool, RequestHandler, WebSocketHandler } from './proxies/network-proxy/index.js';
9
+ export * from './proxies/network-proxy/models/index.js';
10
+ export { RouteManager as NetworkProxyRouteManager } from './proxies/network-proxy/models/types.js';
8
11
  // Export port80handler elements selectively to avoid conflicts
9
12
  export { Port80Handler, Port80HandlerError as HttpError, ServerError, CertificateError } from './http/port80/port80-handler.js';
10
13
  // Use re-export to control the names
11
14
  export { Port80HandlerEvents } from './certificate/events/certificate-events.js';
12
15
  export * from './redirect/classes.redirect.js';
13
- export * from './proxies/smart-proxy/index.js';
16
+ // Export SmartProxy elements selectively to avoid RouteManager ambiguity
17
+ export { SmartProxy, ConnectionManager, SecurityManager, TimeoutManager, TlsManager, NetworkProxyBridge, RouteConnectionHandler } from './proxies/smart-proxy/index.js';
18
+ export { RouteManager } from './proxies/smart-proxy/route-manager.js';
19
+ export * from './proxies/smart-proxy/models/index.js';
20
+ export * from './proxies/smart-proxy/utils/index.js';
14
21
  // Original: export * from './smartproxy/classes.pp.snihandler.js'
15
22
  // Now we export from the new module
16
23
  export { SniHandler } from './tls/sni/sni-handler.js';
@@ -24,4 +31,4 @@ export * as forwarding from './forwarding/index.js';
24
31
  export * as certificate from './certificate/index.js';
25
32
  export * as tls from './tls/index.js';
26
33
  export * as http from './http/index.js';
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILHNEQUFzRDtBQUN0RCx3Q0FBd0M7QUFDeEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELCtEQUErRDtBQUMvRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLGtCQUFrQixJQUFJLFNBQVMsRUFDL0IsV0FBVyxFQUNYLGdCQUFnQixFQUNqQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLHFDQUFxQztBQUNyQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVqRixjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0Msa0VBQWtFO0FBQ2xFLG9DQUFvQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsa0VBQWtFO0FBQ2xFLG9DQUFvQztBQUNwQyxjQUFjLDRDQUE0QyxDQUFDO0FBRTNELDJCQUEyQjtBQUMzQixjQUFjLCtCQUErQixDQUFDO0FBRTlDLHVDQUF1QztBQUN2QyxPQUFPLEtBQUssVUFBVSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sS0FBSyxXQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDIn0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILHNEQUFzRDtBQUN0RCx3Q0FBd0M7QUFDeEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUVsRCwyRUFBMkU7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEksY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxJQUFJLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbkcsK0RBQStEO0FBQy9ELE9BQU8sRUFDTCxhQUFhLEVBQ2Isa0JBQWtCLElBQUksU0FBUyxFQUMvQixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2pCLE1BQU0saUNBQWlDLENBQUM7QUFDekMscUNBQXFDO0FBQ3JDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRWpGLGNBQWMsZ0NBQWdDLENBQUM7QUFFL0MseUVBQXlFO0FBQ3pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4SyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEUsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHNDQUFzQyxDQUFDO0FBRXJELGtFQUFrRTtBQUNsRSxvQ0FBb0M7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELGtFQUFrRTtBQUNsRSxvQ0FBb0M7QUFDcEMsY0FBYyw0Q0FBNEMsQ0FBQztBQUUzRCwyQkFBMkI7QUFDM0IsY0FBYywrQkFBK0IsQ0FBQztBQUU5Qyx1Q0FBdUM7QUFDdkMsT0FBTyxLQUFLLFVBQVUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEtBQUssV0FBVyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsQ0FBQyJ9
@@ -1,6 +1,11 @@
1
1
  /**
2
2
  * Proxy implementations module
3
3
  */
4
- export * from './smart-proxy/index.js';
5
- export * from './network-proxy/index.js';
4
+ export { NetworkProxy, CertificateManager, ConnectionPool, RequestHandler, WebSocketHandler } from './network-proxy/index.js';
5
+ export type { IMetricsTracker, MetricsTracker } from './network-proxy/index.js';
6
+ export * from './network-proxy/models/index.js';
7
+ export { SmartProxy, ConnectionManager, SecurityManager, TimeoutManager, TlsManager, NetworkProxyBridge, RouteConnectionHandler } from './smart-proxy/index.js';
8
+ export { RouteManager as SmartProxyRouteManager } from './smart-proxy/route-manager.js';
9
+ export * from './smart-proxy/utils/index.js';
10
+ export * from './smart-proxy/models/index.js';
6
11
  export * from './nftables-proxy/index.js';
@@ -1,8 +1,14 @@
1
1
  /**
2
2
  * Proxy implementations module
3
3
  */
4
- // Export submodules
5
- export * from './smart-proxy/index.js';
6
- export * from './network-proxy/index.js';
4
+ // Export NetworkProxy with selective imports to avoid RouteManager ambiguity
5
+ export { NetworkProxy, CertificateManager, ConnectionPool, RequestHandler, WebSocketHandler } from './network-proxy/index.js';
6
+ export * from './network-proxy/models/index.js';
7
+ // Export SmartProxy with selective imports to avoid RouteManager ambiguity
8
+ export { SmartProxy, ConnectionManager, SecurityManager, TimeoutManager, TlsManager, NetworkProxyBridge, RouteConnectionHandler } from './smart-proxy/index.js';
9
+ export { RouteManager as SmartProxyRouteManager } from './smart-proxy/route-manager.js';
10
+ export * from './smart-proxy/utils/index.js';
11
+ export * from './smart-proxy/models/index.js';
12
+ // Export NFTables proxy (no conflicts)
7
13
  export * from './nftables-proxy/index.js';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wcm94aWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsb0JBQW9CO0FBQ3BCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDIn0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wcm94aWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsNkVBQTZFO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTlILGNBQWMsaUNBQWlDLENBQUM7QUFFaEQsMkVBQTJFO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoSyxPQUFPLEVBQUUsWUFBWSxJQUFJLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEYsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLCtCQUErQixDQUFDO0FBRTlDLHVDQUF1QztBQUN2QyxjQUFjLDJCQUEyQixDQUFDIn0=
@@ -1,6 +1,7 @@
1
1
  import * as plugins from '../../plugins.js';
2
2
  import { type INetworkProxyOptions, type ICertificateEntry } from './models/types.js';
3
3
  import { Port80Handler } from '../../http/port80/port80-handler.js';
4
+ import type { IRouteConfig } from '../smart-proxy/models/route-types.js';
4
5
  /**
5
6
  * Manages SSL certificates for NetworkProxy including ACME integration
6
7
  */
@@ -33,6 +34,13 @@ export declare class CertificateManager {
33
34
  * Sets an external Port80Handler for certificate management
34
35
  */
35
36
  setExternalPort80Handler(handler: Port80Handler): void;
37
+ /**
38
+ * Update route configurations managed by this certificate manager
39
+ * This method is called when route configurations change
40
+ *
41
+ * @param routes Array of route configurations
42
+ */
43
+ updateRouteConfigs(routes: IRouteConfig[]): void;
36
44
  /**
37
45
  * Handle newly issued or renewed certificates from Port80Handler
38
46
  */
@@ -64,8 +72,21 @@ export declare class CertificateManager {
64
72
  requestCertificate(domain: string): Promise<boolean>;
65
73
  /**
66
74
  * Registers domains with Port80Handler for ACME certificate management
75
+ * @param domains String array of domains to register
67
76
  */
68
77
  registerDomainsWithPort80Handler(domains: string[]): void;
78
+ /**
79
+ * Extract domains from route configurations and register with Port80Handler
80
+ * This method enables direct integration with route-based configuration
81
+ *
82
+ * @param routes Array of route configurations
83
+ */
84
+ registerRoutesWithPort80Handler(routes: IRouteConfig[]): void;
85
+ /**
86
+ * Process a route config to determine if it requires automatic certificate provisioning
87
+ * @param route Route configuration to process
88
+ */
89
+ processRouteForCertificates(route: IRouteConfig): void;
69
90
  /**
70
91
  * Initialize internal Port80Handler
71
92
  */