@push.rocks/smartproxy 21.1.7 → 22.6.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 (155) hide show
  1. package/changelog.md +109 -0
  2. package/dist_rust/rustproxy +0 -0
  3. package/dist_ts/00_commitinfo_data.js +1 -1
  4. package/dist_ts/core/utils/shared-security-manager.d.ts +17 -0
  5. package/dist_ts/core/utils/shared-security-manager.js +66 -1
  6. package/dist_ts/index.d.ts +1 -5
  7. package/dist_ts/index.js +3 -9
  8. package/dist_ts/protocols/common/fragment-handler.js +5 -1
  9. package/dist_ts/proxies/http-proxy/default-certificates.d.ts +54 -0
  10. package/dist_ts/proxies/http-proxy/default-certificates.js +127 -0
  11. package/dist_ts/proxies/http-proxy/http-proxy.d.ts +1 -1
  12. package/dist_ts/proxies/http-proxy/http-proxy.js +9 -14
  13. package/dist_ts/proxies/http-proxy/index.d.ts +5 -1
  14. package/dist_ts/proxies/http-proxy/index.js +6 -2
  15. package/dist_ts/proxies/http-proxy/security-manager.d.ts +4 -12
  16. package/dist_ts/proxies/http-proxy/security-manager.js +66 -99
  17. package/dist_ts/proxies/index.d.ts +1 -5
  18. package/dist_ts/proxies/index.js +2 -6
  19. package/dist_ts/proxies/nftables-proxy/index.d.ts +1 -0
  20. package/dist_ts/proxies/nftables-proxy/index.js +2 -1
  21. package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +4 -26
  22. package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +84 -236
  23. package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +9 -0
  24. package/dist_ts/proxies/nftables-proxy/utils/index.js +12 -0
  25. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +66 -0
  26. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +131 -0
  27. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +39 -0
  28. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +112 -0
  29. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +59 -0
  30. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +130 -0
  31. package/dist_ts/proxies/smart-proxy/certificate-manager.js +4 -3
  32. package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +13 -2
  33. package/dist_ts/proxies/smart-proxy/connection-manager.js +16 -6
  34. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +35 -10
  35. package/dist_ts/proxies/smart-proxy/index.d.ts +5 -10
  36. package/dist_ts/proxies/smart-proxy/index.js +7 -13
  37. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +5 -3
  38. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +17 -0
  39. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +72 -9
  40. package/dist_ts/proxies/smart-proxy/route-preprocessor.d.ts +37 -0
  41. package/dist_ts/proxies/smart-proxy/route-preprocessor.js +103 -0
  42. package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +23 -0
  43. package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +104 -0
  44. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.d.ts +74 -0
  45. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.js +146 -0
  46. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +49 -0
  47. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +259 -0
  48. package/dist_ts/proxies/smart-proxy/security-manager.d.ts +14 -12
  49. package/dist_ts/proxies/smart-proxy/security-manager.js +80 -74
  50. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +39 -157
  51. package/dist_ts/proxies/smart-proxy/smart-proxy.js +224 -622
  52. package/dist_ts/proxies/smart-proxy/socket-handler-server.d.ts +45 -0
  53. package/dist_ts/proxies/smart-proxy/socket-handler-server.js +253 -0
  54. package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +2 -9
  55. package/dist_ts/proxies/smart-proxy/tls-manager.js +3 -26
  56. package/dist_ts/proxies/smart-proxy/utils/index.d.ts +1 -1
  57. package/dist_ts/proxies/smart-proxy/utils/index.js +3 -4
  58. package/dist_ts/proxies/smart-proxy/utils/route-helpers/api-helpers.d.ts +49 -0
  59. package/dist_ts/proxies/smart-proxy/utils/route-helpers/api-helpers.js +108 -0
  60. package/dist_ts/proxies/smart-proxy/utils/route-helpers/dynamic-helpers.d.ts +57 -0
  61. package/dist_ts/proxies/smart-proxy/utils/route-helpers/dynamic-helpers.js +89 -0
  62. package/dist_ts/proxies/smart-proxy/utils/route-helpers/http-helpers.d.ts +17 -0
  63. package/dist_ts/proxies/smart-proxy/utils/route-helpers/http-helpers.js +32 -0
  64. package/dist_ts/proxies/smart-proxy/utils/route-helpers/https-helpers.d.ts +68 -0
  65. package/dist_ts/proxies/smart-proxy/utils/route-helpers/https-helpers.js +117 -0
  66. package/dist_ts/proxies/smart-proxy/utils/route-helpers/index.d.ts +17 -0
  67. package/dist_ts/proxies/smart-proxy/utils/route-helpers/index.js +27 -0
  68. package/dist_ts/proxies/smart-proxy/utils/route-helpers/load-balancer-helpers.d.ts +63 -0
  69. package/dist_ts/proxies/smart-proxy/utils/route-helpers/load-balancer-helpers.js +105 -0
  70. package/dist_ts/proxies/smart-proxy/utils/route-helpers/nftables-helpers.d.ts +83 -0
  71. package/dist_ts/proxies/smart-proxy/utils/route-helpers/nftables-helpers.js +126 -0
  72. package/dist_ts/proxies/smart-proxy/utils/route-helpers/security-helpers.d.ts +47 -0
  73. package/dist_ts/proxies/smart-proxy/utils/route-helpers/security-helpers.js +66 -0
  74. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.d.ts +70 -0
  75. package/dist_ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.js +287 -0
  76. package/dist_ts/proxies/smart-proxy/utils/route-helpers/websocket-helpers.d.ts +46 -0
  77. package/dist_ts/proxies/smart-proxy/utils/route-helpers/websocket-helpers.js +67 -0
  78. package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +4 -457
  79. package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +6 -950
  80. package/dist_ts/proxies/smart-proxy/utils/route-utils.js +2 -2
  81. package/dist_ts/proxies/smart-proxy/utils/route-validator.d.ts +67 -1
  82. package/dist_ts/proxies/smart-proxy/utils/route-validator.js +251 -3
  83. package/dist_ts/routing/index.d.ts +1 -1
  84. package/dist_ts/routing/index.js +3 -3
  85. package/dist_ts/routing/models/http-types.d.ts +119 -4
  86. package/dist_ts/routing/models/http-types.js +93 -5
  87. package/npmextra.json +12 -6
  88. package/package.json +34 -24
  89. package/readme.hints.md +184 -1
  90. package/readme.md +580 -266
  91. package/ts/00_commitinfo_data.ts +1 -1
  92. package/ts/core/utils/shared-security-manager.ts +98 -13
  93. package/ts/index.ts +4 -12
  94. package/ts/protocols/common/fragment-handler.ts +4 -0
  95. package/ts/proxies/index.ts +1 -9
  96. package/ts/proxies/nftables-proxy/index.ts +1 -0
  97. package/ts/proxies/nftables-proxy/nftables-proxy.ts +116 -290
  98. package/ts/proxies/nftables-proxy/utils/index.ts +38 -0
  99. package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +162 -0
  100. package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +125 -0
  101. package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +156 -0
  102. package/ts/proxies/smart-proxy/index.ts +6 -13
  103. package/ts/proxies/smart-proxy/models/interfaces.ts +6 -5
  104. package/ts/proxies/smart-proxy/route-preprocessor.ts +122 -0
  105. package/ts/proxies/smart-proxy/rust-binary-locator.ts +112 -0
  106. package/ts/proxies/smart-proxy/rust-metrics-adapter.ts +161 -0
  107. package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +310 -0
  108. package/ts/proxies/smart-proxy/smart-proxy.ts +282 -800
  109. package/ts/proxies/smart-proxy/socket-handler-server.ts +279 -0
  110. package/ts/proxies/smart-proxy/utils/index.ts +3 -5
  111. package/ts/proxies/smart-proxy/utils/route-helpers/api-helpers.ts +144 -0
  112. package/ts/proxies/smart-proxy/utils/route-helpers/dynamic-helpers.ts +124 -0
  113. package/ts/proxies/smart-proxy/utils/route-helpers/http-helpers.ts +40 -0
  114. package/ts/proxies/smart-proxy/utils/route-helpers/https-helpers.ts +163 -0
  115. package/ts/proxies/smart-proxy/utils/route-helpers/index.ts +62 -0
  116. package/ts/proxies/smart-proxy/utils/route-helpers/load-balancer-helpers.ts +154 -0
  117. package/ts/proxies/smart-proxy/utils/route-helpers/nftables-helpers.ts +202 -0
  118. package/ts/proxies/smart-proxy/utils/route-helpers/security-helpers.ts +96 -0
  119. package/ts/proxies/smart-proxy/utils/route-helpers/socket-handlers.ts +337 -0
  120. package/ts/proxies/smart-proxy/utils/route-helpers/websocket-helpers.ts +98 -0
  121. package/ts/proxies/smart-proxy/utils/route-helpers.ts +5 -1302
  122. package/ts/proxies/smart-proxy/utils/route-utils.ts +1 -1
  123. package/ts/proxies/smart-proxy/utils/route-validator.ts +274 -4
  124. package/ts/routing/index.ts +2 -2
  125. package/ts/routing/models/http-types.ts +147 -4
  126. package/ts/proxies/http-proxy/certificate-manager.ts +0 -244
  127. package/ts/proxies/http-proxy/connection-pool.ts +0 -228
  128. package/ts/proxies/http-proxy/context-creator.ts +0 -145
  129. package/ts/proxies/http-proxy/function-cache.ts +0 -279
  130. package/ts/proxies/http-proxy/handlers/index.ts +0 -5
  131. package/ts/proxies/http-proxy/http-proxy.ts +0 -675
  132. package/ts/proxies/http-proxy/http-request-handler.ts +0 -331
  133. package/ts/proxies/http-proxy/http2-request-handler.ts +0 -255
  134. package/ts/proxies/http-proxy/index.ts +0 -13
  135. package/ts/proxies/http-proxy/models/http-types.ts +0 -148
  136. package/ts/proxies/http-proxy/models/index.ts +0 -5
  137. package/ts/proxies/http-proxy/models/types.ts +0 -125
  138. package/ts/proxies/http-proxy/request-handler.ts +0 -878
  139. package/ts/proxies/http-proxy/security-manager.ts +0 -433
  140. package/ts/proxies/http-proxy/websocket-handler.ts +0 -581
  141. package/ts/proxies/smart-proxy/acme-state-manager.ts +0 -112
  142. package/ts/proxies/smart-proxy/cert-store.ts +0 -92
  143. package/ts/proxies/smart-proxy/certificate-manager.ts +0 -894
  144. package/ts/proxies/smart-proxy/connection-manager.ts +0 -796
  145. package/ts/proxies/smart-proxy/http-proxy-bridge.ts +0 -187
  146. package/ts/proxies/smart-proxy/metrics-collector.ts +0 -453
  147. package/ts/proxies/smart-proxy/nftables-manager.ts +0 -271
  148. package/ts/proxies/smart-proxy/port-manager.ts +0 -358
  149. package/ts/proxies/smart-proxy/route-connection-handler.ts +0 -1640
  150. package/ts/proxies/smart-proxy/route-orchestrator.ts +0 -297
  151. package/ts/proxies/smart-proxy/security-manager.ts +0 -257
  152. package/ts/proxies/smart-proxy/throughput-tracker.ts +0 -138
  153. package/ts/proxies/smart-proxy/timeout-manager.ts +0 -196
  154. package/ts/proxies/smart-proxy/tls-manager.ts +0 -207
  155. package/ts/proxies/smart-proxy/utils/route-validators.ts +0 -283
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Dynamic Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating dynamic routes
5
+ * with context-based host and port mapping.
6
+ */
7
+ /**
8
+ * Create a helper function that applies a port offset
9
+ * @param offset The offset to apply to the matched port
10
+ * @returns A function that adds the offset to the matched port
11
+ */
12
+ export function createPortOffset(offset) {
13
+ return (context) => context.port + offset;
14
+ }
15
+ /**
16
+ * Create a port mapping route with context-based port function
17
+ * @param options Port mapping route options
18
+ * @returns Route configuration object
19
+ */
20
+ export function createPortMappingRoute(options) {
21
+ // Create route match
22
+ const match = {
23
+ ports: options.sourcePortRange,
24
+ domains: options.domains
25
+ };
26
+ // Create route action
27
+ const action = {
28
+ type: 'forward',
29
+ targets: [{
30
+ host: options.targetHost,
31
+ port: options.portMapper
32
+ }]
33
+ };
34
+ // Create the route config
35
+ return {
36
+ match,
37
+ action,
38
+ name: options.name || `Port Mapping Route for ${options.domains || 'all domains'}`,
39
+ priority: options.priority,
40
+ ...options
41
+ };
42
+ }
43
+ /**
44
+ * Create a simple offset port mapping route
45
+ * @param options Offset port mapping route options
46
+ * @returns Route configuration object
47
+ */
48
+ export function createOffsetPortMappingRoute(options) {
49
+ return createPortMappingRoute({
50
+ sourcePortRange: options.ports,
51
+ targetHost: options.targetHost,
52
+ portMapper: (context) => context.port + options.offset,
53
+ name: options.name || `Offset Mapping (${options.offset > 0 ? '+' : ''}${options.offset}) for ${options.domains || 'all domains'}`,
54
+ domains: options.domains,
55
+ priority: options.priority,
56
+ ...options
57
+ });
58
+ }
59
+ /**
60
+ * Create a dynamic route with context-based host and port mapping
61
+ * @param options Dynamic route options
62
+ * @returns Route configuration object
63
+ */
64
+ export function createDynamicRoute(options) {
65
+ // Create route match
66
+ const match = {
67
+ ports: options.ports,
68
+ domains: options.domains,
69
+ path: options.path,
70
+ clientIp: options.clientIp
71
+ };
72
+ // Create route action
73
+ const action = {
74
+ type: 'forward',
75
+ targets: [{
76
+ host: options.targetHost,
77
+ port: options.portMapper
78
+ }]
79
+ };
80
+ // Create the route config
81
+ return {
82
+ match,
83
+ action,
84
+ name: options.name || `Dynamic Route for ${options.domains || 'all domains'}`,
85
+ priority: options.priority,
86
+ ...options
87
+ };
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS91dGlscy9yb3V0ZS1oZWxwZXJzL2R5bmFtaWMtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBYztJQUM3QyxPQUFPLENBQUMsT0FBc0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDM0QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FRdEM7SUFDQyxxQkFBcUI7SUFDckIsTUFBTSxLQUFLLEdBQWdCO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsZUFBZTtRQUM5QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87S0FDekIsQ0FBQztJQUVGLHNCQUFzQjtJQUN0QixNQUFNLE1BQU0sR0FBaUI7UUFDM0IsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTthQUN6QixDQUFDO0tBQ0gsQ0FBQztJQUVGLDBCQUEwQjtJQUMxQixPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU07UUFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSwwQkFBMEIsT0FBTyxDQUFDLE9BQU8sSUFBSSxhQUFhLEVBQUU7UUFDbEYsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLEdBQUcsT0FBTztLQUNYLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxPQVE1QztJQUNDLE9BQU8sc0JBQXNCLENBQUM7UUFDNUIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU07UUFDdEQsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksbUJBQW1CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxTQUFTLE9BQU8sQ0FBQyxPQUFPLElBQUksYUFBYSxFQUFFO1FBQ2xJLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FVbEM7SUFDQyxxQkFBcUI7SUFDckIsTUFBTSxLQUFLLEdBQWdCO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtLQUMzQixDQUFDO0lBRUYsc0JBQXNCO0lBQ3RCLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDeEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2FBQ3pCLENBQUM7S0FDSCxDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTTtRQUNOLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLHFCQUFxQixPQUFPLENBQUMsT0FBTyxJQUFJLGFBQWEsRUFBRTtRQUM3RSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsR0FBRyxPQUFPO0tBQ1gsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,17 @@
1
+ /**
2
+ * HTTP Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating HTTP route configurations.
5
+ */
6
+ import type { IRouteConfig } from '../../models/route-types.js';
7
+ /**
8
+ * Create an HTTP-only route configuration
9
+ * @param domains Domain(s) to match
10
+ * @param target Target host and port
11
+ * @param options Additional route options
12
+ * @returns Route configuration object
13
+ */
14
+ export declare function createHttpRoute(domains: string | string[], target: {
15
+ host: string | string[];
16
+ port: number;
17
+ }, options?: Partial<IRouteConfig>): IRouteConfig;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * HTTP Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating HTTP route configurations.
5
+ */
6
+ /**
7
+ * Create an HTTP-only route configuration
8
+ * @param domains Domain(s) to match
9
+ * @param target Target host and port
10
+ * @param options Additional route options
11
+ * @returns Route configuration object
12
+ */
13
+ export function createHttpRoute(domains, target, options = {}) {
14
+ // Create route match
15
+ const match = {
16
+ ports: options.match?.ports || 80,
17
+ domains
18
+ };
19
+ // Create route action
20
+ const action = {
21
+ type: 'forward',
22
+ targets: [target]
23
+ };
24
+ // Create the route config
25
+ return {
26
+ match,
27
+ action,
28
+ name: options.name || `HTTP Route for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
29
+ ...options
30
+ };
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS91dGlscy9yb3V0ZS1oZWxwZXJzL2h0dHAtaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBSUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsT0FBMEIsRUFDMUIsTUFBaUQsRUFDakQsVUFBaUMsRUFBRTtJQUVuQyxxQkFBcUI7SUFDckIsTUFBTSxLQUFLLEdBQWdCO1FBQ3pCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pDLE9BQU87S0FDUixDQUFDO0lBRUYsc0JBQXNCO0lBQ3RCLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUNsQixDQUFDO0lBRUYsMEJBQTBCO0lBQzFCLE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTTtRQUNOLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLGtCQUFrQixLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7UUFDL0YsR0FBRyxPQUFPO0tBQ1gsQ0FBQztBQUNKLENBQUMifQ==
@@ -0,0 +1,68 @@
1
+ /**
2
+ * HTTPS Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating HTTPS route configurations
5
+ * including TLS termination and passthrough routes.
6
+ */
7
+ import type { IRouteConfig } from '../../models/route-types.js';
8
+ /**
9
+ * Create an HTTPS route with TLS termination
10
+ * @param domains Domain(s) to match
11
+ * @param target Target host and port
12
+ * @param options Additional route options
13
+ * @returns Route configuration object
14
+ */
15
+ export declare function createHttpsTerminateRoute(domains: string | string[], target: {
16
+ host: string | string[];
17
+ port: number;
18
+ }, options?: {
19
+ certificate?: 'auto' | {
20
+ key: string;
21
+ cert: string;
22
+ };
23
+ httpPort?: number | number[];
24
+ httpsPort?: number | number[];
25
+ reencrypt?: boolean;
26
+ name?: string;
27
+ [key: string]: any;
28
+ }): IRouteConfig;
29
+ /**
30
+ * Create an HTTP to HTTPS redirect route
31
+ * @param domains Domain(s) to match
32
+ * @param httpsPort HTTPS port to redirect to (default: 443)
33
+ * @param options Additional route options
34
+ * @returns Route configuration object
35
+ */
36
+ export declare function createHttpToHttpsRedirect(domains: string | string[], httpsPort?: number, options?: Partial<IRouteConfig>): IRouteConfig;
37
+ /**
38
+ * Create an HTTPS passthrough route (SNI-based forwarding without TLS termination)
39
+ * @param domains Domain(s) to match
40
+ * @param target Target host and port
41
+ * @param options Additional route options
42
+ * @returns Route configuration object
43
+ */
44
+ export declare function createHttpsPassthroughRoute(domains: string | string[], target: {
45
+ host: string | string[];
46
+ port: number;
47
+ }, options?: Partial<IRouteConfig>): IRouteConfig;
48
+ /**
49
+ * Create a complete HTTPS server with HTTP to HTTPS redirects
50
+ * @param domains Domain(s) to match
51
+ * @param target Target host and port
52
+ * @param options Additional configuration options
53
+ * @returns Array of two route configurations (HTTPS and HTTP redirect)
54
+ */
55
+ export declare function createCompleteHttpsServer(domains: string | string[], target: {
56
+ host: string | string[];
57
+ port: number;
58
+ }, options?: {
59
+ certificate?: 'auto' | {
60
+ key: string;
61
+ cert: string;
62
+ };
63
+ httpPort?: number | number[];
64
+ httpsPort?: number | number[];
65
+ reencrypt?: boolean;
66
+ name?: string;
67
+ [key: string]: any;
68
+ }): IRouteConfig[];
@@ -0,0 +1,117 @@
1
+ /**
2
+ * HTTPS Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating HTTPS route configurations
5
+ * including TLS termination and passthrough routes.
6
+ */
7
+ import { SocketHandlers } from './socket-handlers.js';
8
+ /**
9
+ * Create an HTTPS route with TLS termination
10
+ * @param domains Domain(s) to match
11
+ * @param target Target host and port
12
+ * @param options Additional route options
13
+ * @returns Route configuration object
14
+ */
15
+ export function createHttpsTerminateRoute(domains, target, options = {}) {
16
+ // Create route match
17
+ const match = {
18
+ ports: options.httpsPort || 443,
19
+ domains
20
+ };
21
+ // Create route action
22
+ const action = {
23
+ type: 'forward',
24
+ targets: [target],
25
+ tls: {
26
+ mode: options.reencrypt ? 'terminate-and-reencrypt' : 'terminate',
27
+ certificate: options.certificate || 'auto'
28
+ }
29
+ };
30
+ // Create the route config
31
+ return {
32
+ match,
33
+ action,
34
+ name: options.name || `HTTPS Route for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
35
+ ...options
36
+ };
37
+ }
38
+ /**
39
+ * Create an HTTP to HTTPS redirect route
40
+ * @param domains Domain(s) to match
41
+ * @param httpsPort HTTPS port to redirect to (default: 443)
42
+ * @param options Additional route options
43
+ * @returns Route configuration object
44
+ */
45
+ export function createHttpToHttpsRedirect(domains, httpsPort = 443, options = {}) {
46
+ // Create route match
47
+ const match = {
48
+ ports: options.match?.ports || 80,
49
+ domains
50
+ };
51
+ // Create route action
52
+ const action = {
53
+ type: 'socket-handler',
54
+ socketHandler: SocketHandlers.httpRedirect(`https://{domain}:${httpsPort}{path}`, 301)
55
+ };
56
+ // Create the route config
57
+ return {
58
+ match,
59
+ action,
60
+ name: options.name || `HTTP to HTTPS Redirect for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
61
+ ...options
62
+ };
63
+ }
64
+ /**
65
+ * Create an HTTPS passthrough route (SNI-based forwarding without TLS termination)
66
+ * @param domains Domain(s) to match
67
+ * @param target Target host and port
68
+ * @param options Additional route options
69
+ * @returns Route configuration object
70
+ */
71
+ export function createHttpsPassthroughRoute(domains, target, options = {}) {
72
+ // Create route match
73
+ const match = {
74
+ ports: options.match?.ports || 443,
75
+ domains
76
+ };
77
+ // Create route action
78
+ const action = {
79
+ type: 'forward',
80
+ targets: [target],
81
+ tls: {
82
+ mode: 'passthrough'
83
+ }
84
+ };
85
+ // Create the route config
86
+ return {
87
+ match,
88
+ action,
89
+ name: options.name || `HTTPS Passthrough for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
90
+ ...options
91
+ };
92
+ }
93
+ /**
94
+ * Create a complete HTTPS server with HTTP to HTTPS redirects
95
+ * @param domains Domain(s) to match
96
+ * @param target Target host and port
97
+ * @param options Additional configuration options
98
+ * @returns Array of two route configurations (HTTPS and HTTP redirect)
99
+ */
100
+ export function createCompleteHttpsServer(domains, target, options = {}) {
101
+ // Create the HTTPS route
102
+ const httpsRoute = createHttpsTerminateRoute(domains, target, options);
103
+ // Create the HTTP redirect route
104
+ const httpRedirectRoute = createHttpToHttpsRedirect(domains,
105
+ // Extract the HTTPS port from the HTTPS route - ensure it's a number
106
+ typeof options.httpsPort === 'number' ? options.httpsPort :
107
+ Array.isArray(options.httpsPort) ? options.httpsPort[0] : 443, {
108
+ // Set the HTTP port
109
+ match: {
110
+ ports: options.httpPort || 80,
111
+ domains
112
+ },
113
+ name: `HTTP to HTTPS Redirect for ${Array.isArray(domains) ? domains.join(', ') : domains}`
114
+ });
115
+ return [httpsRoute, httpRedirectRoute];
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvdXRpbHMvcm91dGUtaGVscGVycy9odHRwcy1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBR0gsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsT0FBMEIsRUFDMUIsTUFBaUQsRUFDakQsVUFPSSxFQUFFO0lBRU4scUJBQXFCO0lBQ3JCLE1BQU0sS0FBSyxHQUFnQjtRQUN6QixLQUFLLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxHQUFHO1FBQy9CLE9BQU87S0FDUixDQUFDO0lBRUYsc0JBQXNCO0lBQ3RCLE1BQU0sTUFBTSxHQUFpQjtRQUMzQixJQUFJLEVBQUUsU0FBUztRQUNmLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqQixHQUFHLEVBQUU7WUFDSCxJQUFJLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDakUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksTUFBTTtTQUMzQztLQUNGLENBQUM7SUFFRiwwQkFBMEI7SUFDMUIsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO1FBQ04sSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksbUJBQW1CLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtRQUNoRyxHQUFHLE9BQU87S0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsT0FBMEIsRUFD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
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating route configurations for common scenarios.
5
+ * These functions aim to simplify the creation of route configurations for typical use cases.
6
+ *
7
+ * This barrel file re-exports all helper functions for backwards compatibility.
8
+ */
9
+ export { createHttpRoute } from './http-helpers.js';
10
+ export { createHttpsTerminateRoute, createHttpToHttpsRedirect, createHttpsPassthroughRoute, createCompleteHttpsServer } from './https-helpers.js';
11
+ export { createWebSocketRoute } from './websocket-helpers.js';
12
+ export { createLoadBalancerRoute, createSmartLoadBalancer } from './load-balancer-helpers.js';
13
+ export { createNfTablesRoute, createNfTablesTerminateRoute, createCompleteNfTablesHttpsServer } from './nftables-helpers.js';
14
+ export { createPortOffset, createPortMappingRoute, createOffsetPortMappingRoute, createDynamicRoute } from './dynamic-helpers.js';
15
+ export { createApiRoute, createApiGatewayRoute } from './api-helpers.js';
16
+ export { addRateLimiting, addBasicAuth, addJwtAuth } from './security-helpers.js';
17
+ export { SocketHandlers, createSocketHandlerRoute } from './socket-handlers.js';
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating route configurations for common scenarios.
5
+ * These functions aim to simplify the creation of route configurations for typical use cases.
6
+ *
7
+ * This barrel file re-exports all helper functions for backwards compatibility.
8
+ */
9
+ // HTTP helpers
10
+ export { createHttpRoute } from './http-helpers.js';
11
+ // HTTPS helpers
12
+ export { createHttpsTerminateRoute, createHttpToHttpsRedirect, createHttpsPassthroughRoute, createCompleteHttpsServer } from './https-helpers.js';
13
+ // WebSocket helpers
14
+ export { createWebSocketRoute } from './websocket-helpers.js';
15
+ // Load balancer helpers
16
+ export { createLoadBalancerRoute, createSmartLoadBalancer } from './load-balancer-helpers.js';
17
+ // NFTables helpers
18
+ export { createNfTablesRoute, createNfTablesTerminateRoute, createCompleteNfTablesHttpsServer } from './nftables-helpers.js';
19
+ // Dynamic routing helpers
20
+ export { createPortOffset, createPortMappingRoute, createOffsetPortMappingRoute, createDynamicRoute } from './dynamic-helpers.js';
21
+ // API helpers
22
+ export { createApiRoute, createApiGatewayRoute } from './api-helpers.js';
23
+ // Security helpers
24
+ export { addRateLimiting, addBasicAuth, addJwtAuth } from './security-helpers.js';
25
+ // Socket handlers
26
+ export { SocketHandlers, createSocketHandlerRoute } from './socket-handlers.js';
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L3V0aWxzL3JvdXRlLWhlbHBlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsZ0JBQWdCO0FBQ2hCLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQix5QkFBeUIsRUFDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsd0JBQXdCO0FBQ3hCLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3hCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsbUJBQW1CO0FBQ25CLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsNEJBQTRCLEVBQzVCLGlDQUFpQyxFQUNsQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLDBCQUEwQjtBQUMxQixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsa0JBQWtCLEVBQ25CLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsY0FBYztBQUNkLE9BQU8sRUFDTCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3RCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsbUJBQW1CO0FBQ25CLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLGtCQUFrQjtBQUNsQixPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN6QixNQUFNLHNCQUFzQixDQUFDIn0=
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Load Balancer Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating load balancer route configurations.
5
+ */
6
+ import type { IRouteConfig, TPortRange, IRouteContext } from '../../models/route-types.js';
7
+ /**
8
+ * Create a load balancer route (round-robin between multiple backend hosts)
9
+ * @param domains Domain(s) to match
10
+ * @param backendsOrHosts Array of backend servers OR array of host strings (legacy)
11
+ * @param portOrOptions Port number (legacy) OR options object
12
+ * @param options Additional route options (legacy)
13
+ * @returns Route configuration object
14
+ */
15
+ export declare function createLoadBalancerRoute(domains: string | string[], backendsOrHosts: Array<{
16
+ host: string;
17
+ port: number;
18
+ }> | string[], portOrOptions?: number | {
19
+ tls?: {
20
+ mode: 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
21
+ certificate?: 'auto' | {
22
+ key: string;
23
+ cert: string;
24
+ };
25
+ };
26
+ useTls?: boolean;
27
+ certificate?: 'auto' | {
28
+ key: string;
29
+ cert: string;
30
+ };
31
+ algorithm?: 'round-robin' | 'least-connections' | 'ip-hash';
32
+ healthCheck?: {
33
+ path: string;
34
+ interval: number;
35
+ timeout: number;
36
+ unhealthyThreshold: number;
37
+ healthyThreshold: number;
38
+ };
39
+ [key: string]: any;
40
+ }, options?: {
41
+ tls?: {
42
+ mode: 'passthrough' | 'terminate' | 'terminate-and-reencrypt';
43
+ certificate?: 'auto' | {
44
+ key: string;
45
+ cert: string;
46
+ };
47
+ };
48
+ [key: string]: any;
49
+ }): IRouteConfig;
50
+ /**
51
+ * Create a smart load balancer with dynamic domain-based backend selection
52
+ * @param options Smart load balancer options
53
+ * @returns Route configuration object
54
+ */
55
+ export declare function createSmartLoadBalancer(options: {
56
+ ports: TPortRange;
57
+ domainTargets: Record<string, string | string[]>;
58
+ portMapper: (context: IRouteContext) => number;
59
+ name?: string;
60
+ defaultTarget?: string | string[];
61
+ priority?: number;
62
+ [key: string]: any;
63
+ }): IRouteConfig;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Load Balancer Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating load balancer route configurations.
5
+ */
6
+ /**
7
+ * Create a load balancer route (round-robin between multiple backend hosts)
8
+ * @param domains Domain(s) to match
9
+ * @param backendsOrHosts Array of backend servers OR array of host strings (legacy)
10
+ * @param portOrOptions Port number (legacy) OR options object
11
+ * @param options Additional route options (legacy)
12
+ * @returns Route configuration object
13
+ */
14
+ export function createLoadBalancerRoute(domains, backendsOrHosts, portOrOptions, options) {
15
+ // Handle legacy signature: (domains, hosts[], port, options)
16
+ let backends;
17
+ let finalOptions;
18
+ if (Array.isArray(backendsOrHosts) && backendsOrHosts.length > 0 && typeof backendsOrHosts[0] === 'string') {
19
+ // Legacy signature
20
+ const hosts = backendsOrHosts;
21
+ const port = portOrOptions;
22
+ backends = hosts.map(host => ({ host, port }));
23
+ finalOptions = options || {};
24
+ }
25
+ else {
26
+ // New signature
27
+ backends = backendsOrHosts;
28
+ finalOptions = portOrOptions || {};
29
+ }
30
+ // Extract hosts and ensure all backends use the same port
31
+ const port = backends[0].port;
32
+ const hosts = backends.map(backend => backend.host);
33
+ // Create route match
34
+ const match = {
35
+ ports: finalOptions.match?.ports || (finalOptions.tls || finalOptions.useTls ? 443 : 80),
36
+ domains
37
+ };
38
+ // Create route target
39
+ const target = {
40
+ host: hosts,
41
+ port
42
+ };
43
+ // Create route action
44
+ const action = {
45
+ type: 'forward',
46
+ targets: [target]
47
+ };
48
+ // Add TLS configuration if provided
49
+ if (finalOptions.tls || finalOptions.useTls) {
50
+ action.tls = {
51
+ mode: finalOptions.tls?.mode || 'terminate',
52
+ certificate: finalOptions.tls?.certificate || finalOptions.certificate || 'auto'
53
+ };
54
+ }
55
+ // Add load balancing options
56
+ if (finalOptions.algorithm || finalOptions.healthCheck) {
57
+ action.loadBalancing = {
58
+ algorithm: finalOptions.algorithm || 'round-robin',
59
+ healthCheck: finalOptions.healthCheck
60
+ };
61
+ }
62
+ // Create the route config
63
+ return {
64
+ match,
65
+ action,
66
+ name: finalOptions.name || `Load Balancer for ${Array.isArray(domains) ? domains.join(', ') : domains}`,
67
+ ...finalOptions
68
+ };
69
+ }
70
+ /**
71
+ * Create a smart load balancer with dynamic domain-based backend selection
72
+ * @param options Smart load balancer options
73
+ * @returns Route configuration object
74
+ */
75
+ export function createSmartLoadBalancer(options) {
76
+ // Extract all domain keys to create the match criteria
77
+ const domains = Object.keys(options.domainTargets);
78
+ // Create the smart host selector function
79
+ const hostSelector = (context) => {
80
+ const domain = context.domain || '';
81
+ return options.domainTargets[domain] || options.defaultTarget || 'localhost';
82
+ };
83
+ // Create route match
84
+ const match = {
85
+ ports: options.ports,
86
+ domains
87
+ };
88
+ // Create route action
89
+ const action = {
90
+ type: 'forward',
91
+ targets: [{
92
+ host: hostSelector,
93
+ port: options.portMapper
94
+ }]
95
+ };
96
+ // Create the route config
97
+ return {
98
+ match,
99
+ action,
100
+ name: options.name || `Smart Load Balancer for ${domains.join(', ')}`,
101
+ priority: options.priority,
102
+ ...options
103
+ };
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1iYWxhbmNlci1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS91dGlscy9yb3V0ZS1oZWxwZXJzL2xvYWQtYmFsYW5jZXItaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBSUg7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsT0FBMEIsRUFDMUIsZUFBaUUsRUFDakUsYUFnQkMsRUFDRCxPQU1DO0lBRUQsNkRBQTZEO0lBQzdELElBQUksUUFBK0MsQ0FBQztJQUNwRCxJQUFJLFlBQWlCLENBQUM7SUFFdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNHLG1CQUFtQjtRQUNuQixNQUFNLEtBQUssR0FBRyxlQUEyQixDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLGFBQXVCLENBQUM7UUFDckMsUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQyxZQUFZLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO1NBQU0sQ0FBQztRQUNOLGdCQUFnQjtRQUNoQixRQUFRLEdBQUcsZUFBd0QsQ0FBQztRQUNwRSxZQUFZLEdBQUksYUFBcUIsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVB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
@@ -0,0 +1,83 @@
1
+ /**
2
+ * NFTables Route Helper Functions
3
+ *
4
+ * This module provides utility functions for creating NFTables-based route configurations
5
+ * for high-performance packet forwarding at the kernel level.
6
+ */
7
+ import type { IRouteConfig, TPortRange } from '../../models/route-types.js';
8
+ /**
9
+ * Create an NFTables-based route for high-performance packet forwarding
10
+ * @param nameOrDomains Name or domain(s) to match
11
+ * @param target Target host and port
12
+ * @param options Additional route options
13
+ * @returns Route configuration object
14
+ */
15
+ export declare function createNfTablesRoute(nameOrDomains: string | string[], target: {
16
+ host: string;
17
+ port: number | 'preserve';
18
+ }, options?: {
19
+ ports?: TPortRange;
20
+ protocol?: 'tcp' | 'udp' | 'all';
21
+ preserveSourceIP?: boolean;
22
+ ipAllowList?: string[];
23
+ ipBlockList?: string[];
24
+ maxRate?: string;
25
+ priority?: number;
26
+ useTls?: boolean;
27
+ tableName?: string;
28
+ useIPSets?: boolean;
29
+ useAdvancedNAT?: boolean;
30
+ }): IRouteConfig;
31
+ /**
32
+ * Create an NFTables-based TLS termination route
33
+ * @param nameOrDomains Name or domain(s) to match
34
+ * @param target Target host and port
35
+ * @param options Additional route options
36
+ * @returns Route configuration object
37
+ */
38
+ export declare function createNfTablesTerminateRoute(nameOrDomains: string | string[], target: {
39
+ host: string;
40
+ port: number | 'preserve';
41
+ }, options?: {
42
+ ports?: TPortRange;
43
+ protocol?: 'tcp' | 'udp' | 'all';
44
+ preserveSourceIP?: boolean;
45
+ ipAllowList?: string[];
46
+ ipBlockList?: string[];
47
+ maxRate?: string;
48
+ priority?: number;
49
+ tableName?: string;
50
+ useIPSets?: boolean;
51
+ useAdvancedNAT?: boolean;
52
+ certificate?: 'auto' | {
53
+ key: string;
54
+ cert: string;
55
+ };
56
+ }): IRouteConfig;
57
+ /**
58
+ * Create a complete NFTables-based HTTPS setup with HTTP redirect
59
+ * @param nameOrDomains Name or domain(s) to match
60
+ * @param target Target host and port
61
+ * @param options Additional route options
62
+ * @returns Array of two route configurations (HTTPS and HTTP redirect)
63
+ */
64
+ export declare function createCompleteNfTablesHttpsServer(nameOrDomains: string | string[], target: {
65
+ host: string;
66
+ port: number | 'preserve';
67
+ }, options?: {
68
+ httpPort?: TPortRange;
69
+ httpsPort?: TPortRange;
70
+ protocol?: 'tcp' | 'udp' | 'all';
71
+ preserveSourceIP?: boolean;
72
+ ipAllowList?: string[];
73
+ ipBlockList?: string[];
74
+ maxRate?: string;
75
+ priority?: number;
76
+ tableName?: string;
77
+ useIPSets?: boolean;
78
+ useAdvancedNAT?: boolean;
79
+ certificate?: 'auto' | {
80
+ key: string;
81
+ cert: string;
82
+ };
83
+ }): IRouteConfig[];