@push.rocks/smartproxy 22.6.0 → 23.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/changelog.md +18 -0
  2. package/dist_rust/{rustproxy → rustproxy_linux_amd64} +0 -0
  3. package/dist_rust/rustproxy_linux_arm64 +0 -0
  4. package/dist_ts/00_commitinfo_data.js +1 -1
  5. package/dist_ts/index.d.ts +0 -1
  6. package/dist_ts/index.js +1 -3
  7. package/dist_ts/plugins.d.ts +2 -1
  8. package/dist_ts/plugins.js +3 -2
  9. package/dist_ts/proxies/index.d.ts +0 -1
  10. package/dist_ts/proxies/index.js +1 -3
  11. package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
  12. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
  13. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +83 -212
  14. package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
  15. package/npmextra.json +3 -0
  16. package/package.json +13 -11
  17. package/readme.md +35 -31
  18. package/ts/00_commitinfo_data.ts +1 -1
  19. package/ts/index.ts +0 -3
  20. package/ts/plugins.ts +2 -0
  21. package/ts/proxies/index.ts +0 -3
  22. package/ts/proxies/smart-proxy/models/route-types.ts +0 -2
  23. package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +102 -233
  24. package/ts/proxies/smart-proxy/smart-proxy.ts +1 -2
  25. package/dist_ts/common/eventUtils.d.ts +0 -14
  26. package/dist_ts/common/eventUtils.js +0 -20
  27. package/dist_ts/common/types.d.ts +0 -82
  28. package/dist_ts/common/types.js +0 -15
  29. package/dist_ts/core/utils/event-system.d.ts +0 -200
  30. package/dist_ts/core/utils/event-system.js +0 -224
  31. package/dist_ts/core/utils/event-utils.d.ts +0 -15
  32. package/dist_ts/core/utils/event-utils.js +0 -11
  33. package/dist_ts/core/utils/route-manager.d.ts +0 -88
  34. package/dist_ts/core/utils/route-manager.js +0 -342
  35. package/dist_ts/core/utils/route-utils.d.ts +0 -28
  36. package/dist_ts/core/utils/route-utils.js +0 -67
  37. package/dist_ts/detection/detectors/http-detector-v2.d.ts +0 -33
  38. package/dist_ts/detection/detectors/http-detector-v2.js +0 -87
  39. package/dist_ts/detection/detectors/tls-detector-v2.d.ts +0 -33
  40. package/dist_ts/detection/detectors/tls-detector-v2.js +0 -80
  41. package/dist_ts/detection/protocol-detector-v2.d.ts +0 -46
  42. package/dist_ts/detection/protocol-detector-v2.js +0 -116
  43. package/dist_ts/forwarding/config/forwarding-types.d.ts +0 -42
  44. package/dist_ts/forwarding/config/forwarding-types.js +0 -18
  45. package/dist_ts/forwarding/config/index.d.ts +0 -9
  46. package/dist_ts/forwarding/config/index.js +0 -10
  47. package/dist_ts/forwarding/factory/forwarding-factory.d.ts +0 -25
  48. package/dist_ts/forwarding/factory/forwarding-factory.js +0 -172
  49. package/dist_ts/forwarding/factory/index.d.ts +0 -4
  50. package/dist_ts/forwarding/factory/index.js +0 -5
  51. package/dist_ts/forwarding/handlers/base-handler.d.ts +0 -62
  52. package/dist_ts/forwarding/handlers/base-handler.js +0 -121
  53. package/dist_ts/forwarding/handlers/http-handler.d.ts +0 -30
  54. package/dist_ts/forwarding/handlers/http-handler.js +0 -143
  55. package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +0 -29
  56. package/dist_ts/forwarding/handlers/https-passthrough-handler.js +0 -156
  57. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +0 -36
  58. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +0 -276
  59. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +0 -35
  60. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +0 -261
  61. package/dist_ts/forwarding/handlers/index.d.ts +0 -8
  62. package/dist_ts/forwarding/handlers/index.js +0 -9
  63. package/dist_ts/forwarding/index.d.ts +0 -13
  64. package/dist_ts/forwarding/index.js +0 -16
  65. package/dist_ts/http/index.d.ts +0 -5
  66. package/dist_ts/http/index.js +0 -8
  67. package/dist_ts/http/models/http-types.d.ts +0 -6
  68. package/dist_ts/http/models/http-types.js +0 -7
  69. package/dist_ts/http/router/index.d.ts +0 -8
  70. package/dist_ts/http/router/index.js +0 -7
  71. package/dist_ts/http/router/proxy-router.d.ts +0 -115
  72. package/dist_ts/http/router/proxy-router.js +0 -325
  73. package/dist_ts/http/router/route-router.d.ts +0 -108
  74. package/dist_ts/http/router/route-router.js +0 -393
  75. package/dist_ts/protocols/tls/constants.d.ts +0 -122
  76. package/dist_ts/protocols/tls/constants.js +0 -135
  77. package/dist_ts/protocols/tls/parser.d.ts +0 -53
  78. package/dist_ts/protocols/tls/parser.js +0 -294
  79. package/dist_ts/protocols/tls/types.d.ts +0 -65
  80. package/dist_ts/protocols/tls/types.js +0 -5
  81. package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +0 -95
  82. package/dist_ts/proxies/http-proxy/certificate-manager.js +0 -214
  83. package/dist_ts/proxies/http-proxy/connection-pool.d.ts +0 -47
  84. package/dist_ts/proxies/http-proxy/connection-pool.js +0 -195
  85. package/dist_ts/proxies/http-proxy/context-creator.d.ts +0 -34
  86. package/dist_ts/proxies/http-proxy/context-creator.js +0 -108
  87. package/dist_ts/proxies/http-proxy/default-certificates.d.ts +0 -54
  88. package/dist_ts/proxies/http-proxy/default-certificates.js +0 -127
  89. package/dist_ts/proxies/http-proxy/function-cache.d.ts +0 -95
  90. package/dist_ts/proxies/http-proxy/function-cache.js +0 -215
  91. package/dist_ts/proxies/http-proxy/handlers/index.d.ts +0 -4
  92. package/dist_ts/proxies/http-proxy/handlers/index.js +0 -6
  93. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +0 -18
  94. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +0 -78
  95. package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +0 -19
  96. package/dist_ts/proxies/http-proxy/handlers/static-handler.js +0 -211
  97. package/dist_ts/proxies/http-proxy/http-proxy.d.ts +0 -117
  98. package/dist_ts/proxies/http-proxy/http-proxy.js +0 -521
  99. package/dist_ts/proxies/http-proxy/http-request-handler.d.ts +0 -40
  100. package/dist_ts/proxies/http-proxy/http-request-handler.js +0 -257
  101. package/dist_ts/proxies/http-proxy/http2-request-handler.d.ts +0 -24
  102. package/dist_ts/proxies/http-proxy/http2-request-handler.js +0 -201
  103. package/dist_ts/proxies/http-proxy/index.d.ts +0 -14
  104. package/dist_ts/proxies/http-proxy/index.js +0 -16
  105. package/dist_ts/proxies/http-proxy/models/http-types.d.ts +0 -117
  106. package/dist_ts/proxies/http-proxy/models/http-types.js +0 -92
  107. package/dist_ts/proxies/http-proxy/models/index.d.ts +0 -5
  108. package/dist_ts/proxies/http-proxy/models/index.js +0 -6
  109. package/dist_ts/proxies/http-proxy/models/types.d.ts +0 -75
  110. package/dist_ts/proxies/http-proxy/models/types.js +0 -35
  111. package/dist_ts/proxies/http-proxy/request-handler.d.ts +0 -97
  112. package/dist_ts/proxies/http-proxy/request-handler.js +0 -737
  113. package/dist_ts/proxies/http-proxy/security-manager.d.ts +0 -98
  114. package/dist_ts/proxies/http-proxy/security-manager.js +0 -341
  115. package/dist_ts/proxies/http-proxy/websocket-handler.d.ts +0 -50
  116. package/dist_ts/proxies/http-proxy/websocket-handler.js +0 -505
  117. package/dist_ts/proxies/nftables-proxy/index.d.ts +0 -6
  118. package/dist_ts/proxies/nftables-proxy/index.js +0 -7
  119. package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +0 -15
  120. package/dist_ts/proxies/nftables-proxy/models/errors.js +0 -28
  121. package/dist_ts/proxies/nftables-proxy/models/index.d.ts +0 -5
  122. package/dist_ts/proxies/nftables-proxy/models/index.js +0 -6
  123. package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +0 -75
  124. package/dist_ts/proxies/nftables-proxy/models/interfaces.js +0 -5
  125. package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +0 -124
  126. package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +0 -1374
  127. package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +0 -9
  128. package/dist_ts/proxies/nftables-proxy/utils/index.js +0 -12
  129. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +0 -66
  130. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +0 -131
  131. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +0 -39
  132. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +0 -112
  133. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +0 -59
  134. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +0 -130
  135. package/dist_ts/proxies/smart-proxy/acme-state-manager.d.ts +0 -42
  136. package/dist_ts/proxies/smart-proxy/acme-state-manager.js +0 -101
  137. package/dist_ts/proxies/smart-proxy/cert-store.d.ts +0 -10
  138. package/dist_ts/proxies/smart-proxy/cert-store.js +0 -72
  139. package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +0 -164
  140. package/dist_ts/proxies/smart-proxy/certificate-manager.js +0 -745
  141. package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +0 -128
  142. package/dist_ts/proxies/smart-proxy/connection-manager.js +0 -689
  143. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +0 -43
  144. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +0 -180
  145. package/dist_ts/proxies/smart-proxy/metrics-collector.d.ts +0 -98
  146. package/dist_ts/proxies/smart-proxy/metrics-collector.js +0 -355
  147. package/dist_ts/proxies/smart-proxy/nftables-manager.d.ts +0 -82
  148. package/dist_ts/proxies/smart-proxy/nftables-manager.js +0 -237
  149. package/dist_ts/proxies/smart-proxy/port-manager.d.ts +0 -117
  150. package/dist_ts/proxies/smart-proxy/port-manager.js +0 -318
  151. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -60
  152. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +0 -1407
  153. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +0 -112
  154. package/dist_ts/proxies/smart-proxy/route-manager.js +0 -453
  155. package/dist_ts/proxies/smart-proxy/route-orchestrator.d.ts +0 -56
  156. package/dist_ts/proxies/smart-proxy/route-orchestrator.js +0 -204
  157. package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +0 -23
  158. package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +0 -104
  159. package/dist_ts/proxies/smart-proxy/security-manager.d.ts +0 -74
  160. package/dist_ts/proxies/smart-proxy/security-manager.js +0 -227
  161. package/dist_ts/proxies/smart-proxy/throughput-tracker.d.ts +0 -36
  162. package/dist_ts/proxies/smart-proxy/throughput-tracker.js +0 -115
  163. package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +0 -48
  164. package/dist_ts/proxies/smart-proxy/timeout-manager.js +0 -158
  165. package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +0 -50
  166. package/dist_ts/proxies/smart-proxy/tls-manager.js +0 -110
  167. package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +0 -161
  168. package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +0 -282
  169. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +0 -73
  170. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +0 -259
  171. package/dist_ts/routing/router/proxy-router.d.ts +0 -115
  172. package/dist_ts/routing/router/proxy-router.js +0 -325
  173. package/dist_ts/routing/router/route-router.d.ts +0 -108
  174. package/dist_ts/routing/router/route-router.js +0 -393
  175. package/dist_ts/tls/alerts/index.d.ts +0 -4
  176. package/dist_ts/tls/alerts/index.js +0 -5
  177. package/dist_ts/tls/alerts/tls-alert.d.ts +0 -150
  178. package/dist_ts/tls/alerts/tls-alert.js +0 -226
  179. package/dist_ts/tls/sni/client-hello-parser.d.ts +0 -100
  180. package/dist_ts/tls/sni/client-hello-parser.js +0 -464
  181. package/dist_ts/tls/sni/sni-extraction.d.ts +0 -58
  182. package/dist_ts/tls/sni/sni-extraction.js +0 -275
  183. package/dist_ts/tls/utils/index.d.ts +0 -4
  184. package/dist_ts/tls/utils/index.js +0 -5
  185. package/dist_ts/tls/utils/tls-utils.d.ts +0 -49
  186. package/dist_ts/tls/utils/tls-utils.js +0 -75
  187. package/ts/proxies/nftables-proxy/index.ts +0 -6
  188. package/ts/proxies/nftables-proxy/models/errors.ts +0 -30
  189. package/ts/proxies/nftables-proxy/models/index.ts +0 -5
  190. package/ts/proxies/nftables-proxy/models/interfaces.ts +0 -94
  191. package/ts/proxies/nftables-proxy/nftables-proxy.ts +0 -1754
  192. package/ts/proxies/nftables-proxy/utils/index.ts +0 -38
  193. package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +0 -162
  194. package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +0 -125
  195. package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +0 -156
  196. package/ts/proxies/smart-proxy/rust-binary-locator.ts +0 -112
@@ -1,393 +0,0 @@
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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
@@ -1,122 +0,0 @@
1
- /**
2
- * TLS Protocol Constants
3
- * Based on various TLS RFCs
4
- */
5
- /**
6
- * TLS record types as defined in various RFCs
7
- */
8
- export declare enum TlsRecordType {
9
- CHANGE_CIPHER_SPEC = 20,
10
- ALERT = 21,
11
- HANDSHAKE = 22,
12
- APPLICATION_DATA = 23,
13
- HEARTBEAT = 24
14
- }
15
- /**
16
- * TLS handshake message types
17
- */
18
- export declare enum TlsHandshakeType {
19
- HELLO_REQUEST = 0,
20
- CLIENT_HELLO = 1,
21
- SERVER_HELLO = 2,
22
- NEW_SESSION_TICKET = 4,
23
- ENCRYPTED_EXTENSIONS = 8,// TLS 1.3
24
- CERTIFICATE = 11,
25
- SERVER_KEY_EXCHANGE = 12,
26
- CERTIFICATE_REQUEST = 13,
27
- SERVER_HELLO_DONE = 14,
28
- CERTIFICATE_VERIFY = 15,
29
- CLIENT_KEY_EXCHANGE = 16,
30
- FINISHED = 20
31
- }
32
- /**
33
- * TLS extension types
34
- */
35
- export declare enum TlsExtensionType {
36
- SERVER_NAME = 0,// SNI
37
- MAX_FRAGMENT_LENGTH = 1,
38
- CLIENT_CERTIFICATE_URL = 2,
39
- TRUSTED_CA_KEYS = 3,
40
- TRUNCATED_HMAC = 4,
41
- STATUS_REQUEST = 5,// OCSP
42
- SUPPORTED_GROUPS = 10,// Previously named "elliptic_curves"
43
- EC_POINT_FORMATS = 11,
44
- SIGNATURE_ALGORITHMS = 13,
45
- APPLICATION_LAYER_PROTOCOL_NEGOTIATION = 16,// ALPN
46
- SIGNED_CERTIFICATE_TIMESTAMP = 18,// Certificate Transparency
47
- PADDING = 21,
48
- SESSION_TICKET = 35,
49
- PRE_SHARED_KEY = 41,// TLS 1.3
50
- EARLY_DATA = 42,// TLS 1.3 0-RTT
51
- SUPPORTED_VERSIONS = 43,// TLS 1.3
52
- COOKIE = 44,// TLS 1.3
53
- PSK_KEY_EXCHANGE_MODES = 45,// TLS 1.3
54
- CERTIFICATE_AUTHORITIES = 47,// TLS 1.3
55
- POST_HANDSHAKE_AUTH = 49,// TLS 1.3
56
- SIGNATURE_ALGORITHMS_CERT = 50,// TLS 1.3
57
- KEY_SHARE = 51
58
- }
59
- /**
60
- * TLS alert levels
61
- */
62
- export declare enum TlsAlertLevel {
63
- WARNING = 1,
64
- FATAL = 2
65
- }
66
- /**
67
- * TLS alert description codes
68
- */
69
- export declare enum TlsAlertDescription {
70
- CLOSE_NOTIFY = 0,
71
- UNEXPECTED_MESSAGE = 10,
72
- BAD_RECORD_MAC = 20,
73
- DECRYPTION_FAILED = 21,// TLS 1.0 only
74
- RECORD_OVERFLOW = 22,
75
- DECOMPRESSION_FAILURE = 30,// TLS 1.2 and below
76
- HANDSHAKE_FAILURE = 40,
77
- NO_CERTIFICATE = 41,// SSLv3 only
78
- BAD_CERTIFICATE = 42,
79
- UNSUPPORTED_CERTIFICATE = 43,
80
- CERTIFICATE_REVOKED = 44,
81
- CERTIFICATE_EXPIRED = 45,
82
- CERTIFICATE_UNKNOWN = 46,
83
- ILLEGAL_PARAMETER = 47,
84
- UNKNOWN_CA = 48,
85
- ACCESS_DENIED = 49,
86
- DECODE_ERROR = 50,
87
- DECRYPT_ERROR = 51,
88
- EXPORT_RESTRICTION = 60,// TLS 1.0 only
89
- PROTOCOL_VERSION = 70,
90
- INSUFFICIENT_SECURITY = 71,
91
- INTERNAL_ERROR = 80,
92
- INAPPROPRIATE_FALLBACK = 86,
93
- USER_CANCELED = 90,
94
- NO_RENEGOTIATION = 100,// TLS 1.2 and below
95
- MISSING_EXTENSION = 109,// TLS 1.3
96
- UNSUPPORTED_EXTENSION = 110,// TLS 1.3
97
- CERTIFICATE_REQUIRED = 111,// TLS 1.3
98
- UNRECOGNIZED_NAME = 112,
99
- BAD_CERTIFICATE_STATUS_RESPONSE = 113,
100
- BAD_CERTIFICATE_HASH_VALUE = 114,// TLS 1.2 and below
101
- UNKNOWN_PSK_IDENTITY = 115,
102
- CERTIFICATE_REQUIRED_1_3 = 116,// TLS 1.3
103
- NO_APPLICATION_PROTOCOL = 120
104
- }
105
- /**
106
- * TLS version codes (major.minor)
107
- */
108
- export declare const TlsVersion: {
109
- readonly SSL3: readonly [3, 0];
110
- readonly TLS1_0: readonly [3, 1];
111
- readonly TLS1_1: readonly [3, 2];
112
- readonly TLS1_2: readonly [3, 3];
113
- readonly TLS1_3: readonly [3, 4];
114
- };
115
- /**
116
- * TLS version strings
117
- */
118
- export type TTlsVersionString = 'SSLv3' | 'TLSv1.0' | 'TLSv1.1' | 'TLSv1.2' | 'TLSv1.3';
119
- /**
120
- * Convert TLS version bytes to version string
121
- */
122
- export declare function tlsVersionToString(major: number, minor: number): TTlsVersionString | null;