@push.rocks/smartproxy 11.0.0 → 13.1.2

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 (261) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/certificate/acme/acme-factory.d.ts +17 -0
  3. package/dist_ts/certificate/acme/acme-factory.js +40 -0
  4. package/dist_ts/certificate/acme/challenge-handler.d.ts +44 -0
  5. package/dist_ts/certificate/acme/challenge-handler.js +92 -0
  6. package/dist_ts/certificate/acme/index.d.ts +4 -0
  7. package/dist_ts/certificate/acme/index.js +5 -0
  8. package/dist_ts/certificate/events/certificate-events.d.ts +33 -0
  9. package/dist_ts/certificate/events/certificate-events.js +38 -0
  10. package/dist_ts/certificate/index.d.ts +24 -0
  11. package/dist_ts/certificate/index.js +39 -0
  12. package/dist_ts/certificate/models/certificate-types.d.ts +77 -0
  13. package/dist_ts/certificate/models/certificate-types.js +2 -0
  14. package/dist_ts/certificate/providers/cert-provisioner.d.ts +93 -0
  15. package/dist_ts/certificate/providers/cert-provisioner.js +262 -0
  16. package/dist_ts/certificate/providers/index.d.ts +4 -0
  17. package/dist_ts/certificate/providers/index.js +5 -0
  18. package/dist_ts/certificate/storage/file-storage.d.ts +66 -0
  19. package/dist_ts/certificate/storage/file-storage.js +194 -0
  20. package/dist_ts/certificate/storage/index.d.ts +4 -0
  21. package/dist_ts/certificate/storage/index.js +5 -0
  22. package/dist_ts/certificate/utils/certificate-helpers.d.ts +17 -0
  23. package/dist_ts/certificate/utils/certificate-helpers.js +45 -0
  24. package/dist_ts/common/eventUtils.d.ts +1 -1
  25. package/dist_ts/common/port80-adapter.d.ts +1 -1
  26. package/dist_ts/core/events/index.d.ts +4 -0
  27. package/dist_ts/core/events/index.js +5 -0
  28. package/dist_ts/core/index.d.ts +6 -0
  29. package/dist_ts/core/index.js +8 -0
  30. package/dist_ts/core/models/common-types.d.ts +82 -0
  31. package/dist_ts/core/models/common-types.js +15 -0
  32. package/dist_ts/core/models/index.d.ts +4 -0
  33. package/dist_ts/core/models/index.js +5 -0
  34. package/dist_ts/core/utils/event-utils.d.ts +15 -0
  35. package/dist_ts/core/utils/event-utils.js +19 -0
  36. package/dist_ts/core/utils/index.d.ts +6 -0
  37. package/dist_ts/core/utils/index.js +7 -0
  38. package/dist_ts/core/utils/ip-utils.d.ts +53 -0
  39. package/dist_ts/core/utils/ip-utils.js +153 -0
  40. package/dist_ts/core/utils/validation-utils.d.ts +61 -0
  41. package/dist_ts/core/utils/validation-utils.js +149 -0
  42. package/dist_ts/forwarding/config/domain-config.d.ts +12 -0
  43. package/dist_ts/forwarding/config/domain-config.js +12 -0
  44. package/dist_ts/forwarding/config/domain-manager.d.ts +86 -0
  45. package/dist_ts/forwarding/config/domain-manager.js +242 -0
  46. package/dist_ts/forwarding/config/forwarding-types.d.ts +104 -0
  47. package/dist_ts/forwarding/config/forwarding-types.js +50 -0
  48. package/dist_ts/forwarding/config/index.d.ts +6 -0
  49. package/dist_ts/forwarding/config/index.js +7 -0
  50. package/dist_ts/forwarding/factory/forwarding-factory.d.ts +25 -0
  51. package/dist_ts/forwarding/factory/forwarding-factory.js +138 -0
  52. package/dist_ts/forwarding/factory/index.d.ts +4 -0
  53. package/dist_ts/forwarding/factory/index.js +5 -0
  54. package/dist_ts/forwarding/handlers/base-handler.d.ts +55 -0
  55. package/dist_ts/forwarding/handlers/base-handler.js +94 -0
  56. package/dist_ts/forwarding/handlers/http-handler.d.ts +30 -0
  57. package/dist_ts/forwarding/handlers/http-handler.js +131 -0
  58. package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +29 -0
  59. package/dist_ts/forwarding/handlers/https-passthrough-handler.js +162 -0
  60. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +36 -0
  61. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +229 -0
  62. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +35 -0
  63. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +254 -0
  64. package/dist_ts/forwarding/handlers/index.d.ts +8 -0
  65. package/dist_ts/forwarding/handlers/index.js +9 -0
  66. package/dist_ts/forwarding/index.d.ts +19 -0
  67. package/dist_ts/forwarding/index.js +25 -0
  68. package/dist_ts/http/index.d.ts +15 -0
  69. package/dist_ts/http/index.js +20 -0
  70. package/dist_ts/http/models/http-types.d.ts +81 -0
  71. package/dist_ts/http/models/http-types.js +62 -0
  72. package/dist_ts/http/port80/acme-interfaces.d.ts +78 -0
  73. package/dist_ts/http/port80/acme-interfaces.js +6 -0
  74. package/dist_ts/http/port80/challenge-responder.d.ts +53 -0
  75. package/dist_ts/http/port80/challenge-responder.js +203 -0
  76. package/dist_ts/http/port80/index.d.ts +6 -0
  77. package/dist_ts/http/port80/index.js +9 -0
  78. package/dist_ts/http/port80/port80-handler.d.ts +121 -0
  79. package/dist_ts/http/port80/port80-handler.js +554 -0
  80. package/dist_ts/http/redirects/index.d.ts +4 -0
  81. package/dist_ts/http/redirects/index.js +5 -0
  82. package/dist_ts/http/router/index.d.ts +4 -0
  83. package/dist_ts/http/router/index.js +5 -0
  84. package/dist_ts/http/router/proxy-router.d.ts +115 -0
  85. package/dist_ts/http/router/proxy-router.js +325 -0
  86. package/dist_ts/index.d.ts +15 -8
  87. package/dist_ts/index.js +26 -10
  88. package/dist_ts/networkproxy/classes.np.certificatemanager.js +2 -2
  89. package/dist_ts/networkproxy/index.d.ts +1 -6
  90. package/dist_ts/networkproxy/index.js +4 -8
  91. package/dist_ts/plugins.d.ts +2 -1
  92. package/dist_ts/plugins.js +3 -2
  93. package/dist_ts/port80handler/classes.port80handler.d.ts +8 -136
  94. package/dist_ts/port80handler/classes.port80handler.js +14 -567
  95. package/dist_ts/proxies/index.d.ts +6 -0
  96. package/dist_ts/proxies/index.js +8 -0
  97. package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +77 -0
  98. package/dist_ts/proxies/network-proxy/certificate-manager.js +373 -0
  99. package/dist_ts/proxies/network-proxy/connection-pool.d.ts +47 -0
  100. package/dist_ts/proxies/network-proxy/connection-pool.js +210 -0
  101. package/dist_ts/proxies/network-proxy/index.d.ts +10 -0
  102. package/dist_ts/proxies/network-proxy/index.js +12 -0
  103. package/dist_ts/proxies/network-proxy/models/index.d.ts +4 -0
  104. package/dist_ts/proxies/network-proxy/models/index.js +5 -0
  105. package/dist_ts/proxies/network-proxy/models/types.d.ts +80 -0
  106. package/dist_ts/proxies/network-proxy/models/types.js +35 -0
  107. package/dist_ts/proxies/network-proxy/network-proxy.d.ts +118 -0
  108. package/dist_ts/proxies/network-proxy/network-proxy.js +387 -0
  109. package/dist_ts/proxies/network-proxy/request-handler.d.ts +57 -0
  110. package/dist_ts/proxies/network-proxy/request-handler.js +394 -0
  111. package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +38 -0
  112. package/dist_ts/proxies/network-proxy/websocket-handler.js +188 -0
  113. package/dist_ts/proxies/nftables-proxy/index.d.ts +5 -0
  114. package/dist_ts/proxies/nftables-proxy/index.js +6 -0
  115. package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +15 -0
  116. package/dist_ts/proxies/nftables-proxy/models/errors.js +28 -0
  117. package/dist_ts/proxies/nftables-proxy/models/index.d.ts +5 -0
  118. package/dist_ts/proxies/nftables-proxy/models/index.js +6 -0
  119. package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +75 -0
  120. package/dist_ts/proxies/nftables-proxy/models/interfaces.js +5 -0
  121. package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +136 -0
  122. package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +1516 -0
  123. package/dist_ts/proxies/smart-proxy/connection-handler.d.ts +39 -0
  124. package/dist_ts/proxies/smart-proxy/connection-handler.js +894 -0
  125. package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +78 -0
  126. package/dist_ts/proxies/smart-proxy/connection-manager.js +378 -0
  127. package/dist_ts/proxies/smart-proxy/domain-config-manager.d.ts +95 -0
  128. package/dist_ts/proxies/smart-proxy/domain-config-manager.js +255 -0
  129. package/dist_ts/proxies/smart-proxy/index.d.ts +13 -0
  130. package/dist_ts/proxies/smart-proxy/index.js +17 -0
  131. package/dist_ts/proxies/smart-proxy/models/index.d.ts +4 -0
  132. package/dist_ts/proxies/smart-proxy/models/index.js +5 -0
  133. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +107 -0
  134. package/dist_ts/proxies/smart-proxy/models/interfaces.js +2 -0
  135. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +62 -0
  136. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +316 -0
  137. package/dist_ts/proxies/smart-proxy/port-range-manager.d.ts +56 -0
  138. package/dist_ts/proxies/smart-proxy/port-range-manager.js +176 -0
  139. package/dist_ts/proxies/smart-proxy/security-manager.d.ts +64 -0
  140. package/dist_ts/proxies/smart-proxy/security-manager.js +149 -0
  141. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +63 -0
  142. package/dist_ts/proxies/smart-proxy/smart-proxy.js +523 -0
  143. package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +47 -0
  144. package/dist_ts/proxies/smart-proxy/timeout-manager.js +154 -0
  145. package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +57 -0
  146. package/dist_ts/proxies/smart-proxy/tls-manager.js +132 -0
  147. package/dist_ts/smartproxy/classes.pp.networkproxybridge.d.ts +2 -2
  148. package/dist_ts/smartproxy/classes.pp.networkproxybridge.js +1 -1
  149. package/dist_ts/smartproxy/classes.pp.tlsmanager.js +2 -2
  150. package/dist_ts/smartproxy/classes.smartproxy.js +3 -3
  151. package/dist_ts/smartproxy/forwarding/index.d.ts +1 -1
  152. package/dist_ts/smartproxy/forwarding/index.js +2 -2
  153. package/dist_ts/tls/alerts/index.d.ts +4 -0
  154. package/dist_ts/tls/alerts/index.js +5 -0
  155. package/dist_ts/tls/alerts/tls-alert.d.ts +150 -0
  156. package/dist_ts/tls/alerts/tls-alert.js +226 -0
  157. package/dist_ts/tls/index.d.ts +18 -0
  158. package/dist_ts/tls/index.js +27 -0
  159. package/dist_ts/tls/sni/client-hello-parser.d.ts +100 -0
  160. package/dist_ts/tls/sni/client-hello-parser.js +463 -0
  161. package/dist_ts/tls/sni/index.d.ts +4 -0
  162. package/dist_ts/tls/sni/index.js +5 -0
  163. package/dist_ts/tls/sni/sni-extraction.d.ts +58 -0
  164. package/dist_ts/tls/sni/sni-extraction.js +275 -0
  165. package/dist_ts/tls/sni/sni-handler.d.ts +154 -0
  166. package/dist_ts/tls/sni/sni-handler.js +191 -0
  167. package/dist_ts/tls/utils/index.d.ts +4 -0
  168. package/dist_ts/tls/utils/index.js +5 -0
  169. package/dist_ts/tls/utils/tls-utils.d.ts +158 -0
  170. package/dist_ts/tls/utils/tls-utils.js +187 -0
  171. package/package.json +1 -1
  172. package/readme.md +89 -21
  173. package/readme.plan.md +253 -469
  174. package/ts/00_commitinfo_data.ts +1 -1
  175. package/ts/certificate/acme/acme-factory.ts +48 -0
  176. package/ts/certificate/acme/challenge-handler.ts +110 -0
  177. package/ts/certificate/acme/index.ts +3 -0
  178. package/ts/certificate/events/certificate-events.ts +36 -0
  179. package/ts/certificate/index.ts +67 -0
  180. package/ts/certificate/models/certificate-types.ts +88 -0
  181. package/ts/certificate/providers/cert-provisioner.ts +326 -0
  182. package/ts/certificate/providers/index.ts +3 -0
  183. package/ts/certificate/storage/file-storage.ts +234 -0
  184. package/ts/certificate/storage/index.ts +3 -0
  185. package/ts/certificate/utils/certificate-helpers.ts +50 -0
  186. package/ts/common/eventUtils.ts +1 -1
  187. package/ts/common/port80-adapter.ts +1 -1
  188. package/ts/core/events/index.ts +3 -0
  189. package/ts/core/index.ts +8 -0
  190. package/ts/core/models/common-types.ts +91 -0
  191. package/ts/core/models/index.ts +5 -0
  192. package/ts/core/utils/event-utils.ts +34 -0
  193. package/ts/core/utils/index.ts +7 -0
  194. package/ts/core/utils/ip-utils.ts +175 -0
  195. package/ts/core/utils/validation-utils.ts +177 -0
  196. package/ts/{smartproxy/forwarding → forwarding/config}/domain-config.ts +1 -1
  197. package/ts/{smartproxy/forwarding → forwarding/config}/domain-manager.ts +8 -8
  198. package/ts/{smartproxy/types/forwarding.types.ts → forwarding/config/forwarding-types.ts} +6 -6
  199. package/ts/forwarding/config/index.ts +7 -0
  200. package/ts/{smartproxy/forwarding/forwarding.factory.ts → forwarding/factory/forwarding-factory.ts} +12 -11
  201. package/ts/forwarding/factory/index.ts +5 -0
  202. package/ts/{smartproxy/forwarding/forwarding.handler.ts → forwarding/handlers/base-handler.ts} +2 -2
  203. package/ts/{smartproxy/forwarding/http.handler.ts → forwarding/handlers/http-handler.ts} +13 -4
  204. package/ts/{smartproxy/forwarding/https-passthrough.handler.ts → forwarding/handlers/https-passthrough-handler.ts} +13 -4
  205. package/ts/{smartproxy/forwarding/https-terminate-to-http.handler.ts → forwarding/handlers/https-terminate-to-http-handler.ts} +3 -3
  206. package/ts/{smartproxy/forwarding/https-terminate-to-https.handler.ts → forwarding/handlers/https-terminate-to-https-handler.ts} +3 -3
  207. package/ts/forwarding/handlers/index.ts +9 -0
  208. package/ts/forwarding/index.ts +34 -0
  209. package/ts/http/index.ts +23 -0
  210. package/ts/http/models/http-types.ts +105 -0
  211. package/ts/http/port80/acme-interfaces.ts +85 -0
  212. package/ts/http/port80/challenge-responder.ts +246 -0
  213. package/ts/http/port80/index.ts +13 -0
  214. package/ts/{port80handler/classes.port80handler.ts → http/port80/port80-handler.ts} +164 -161
  215. package/ts/http/redirects/index.ts +3 -0
  216. package/ts/http/router/index.ts +5 -0
  217. package/ts/{classes.router.ts → http/router/proxy-router.ts} +27 -20
  218. package/ts/index.ts +32 -9
  219. package/ts/plugins.ts +2 -1
  220. package/ts/proxies/index.ts +8 -0
  221. package/ts/{networkproxy/classes.np.certificatemanager.ts → proxies/network-proxy/certificate-manager.ts} +17 -16
  222. package/ts/{networkproxy/classes.np.connectionpool.ts → proxies/network-proxy/connection-pool.ts} +3 -3
  223. package/ts/proxies/network-proxy/index.ts +13 -0
  224. package/ts/proxies/network-proxy/models/index.ts +4 -0
  225. package/ts/{networkproxy/classes.np.types.ts → proxies/network-proxy/models/types.ts} +7 -11
  226. package/ts/{networkproxy/classes.np.networkproxy.ts → proxies/network-proxy/network-proxy.ts} +31 -24
  227. package/ts/{networkproxy/classes.np.requesthandler.ts → proxies/network-proxy/request-handler.ts} +12 -7
  228. package/ts/{networkproxy/classes.np.websockethandler.ts → proxies/network-proxy/websocket-handler.ts} +6 -6
  229. package/ts/proxies/nftables-proxy/index.ts +5 -0
  230. package/ts/proxies/nftables-proxy/models/errors.ts +30 -0
  231. package/ts/proxies/nftables-proxy/models/index.ts +5 -0
  232. package/ts/proxies/nftables-proxy/models/interfaces.ts +94 -0
  233. package/ts/{nfttablesproxy/classes.nftablesproxy.ts → proxies/nftables-proxy/nftables-proxy.ts} +24 -126
  234. package/ts/{smartproxy/classes.pp.connectionhandler.ts → proxies/smart-proxy/connection-handler.ts} +12 -12
  235. package/ts/{smartproxy/classes.pp.connectionmanager.ts → proxies/smart-proxy/connection-manager.ts} +8 -8
  236. package/ts/{smartproxy/classes.pp.domainconfigmanager.ts → proxies/smart-proxy/domain-config-manager.ts} +15 -14
  237. package/ts/proxies/smart-proxy/index.ts +18 -0
  238. package/ts/proxies/smart-proxy/models/index.ts +4 -0
  239. package/ts/{smartproxy/classes.pp.interfaces.ts → proxies/smart-proxy/models/interfaces.ts} +12 -8
  240. package/ts/{smartproxy/classes.pp.networkproxybridge.ts → proxies/smart-proxy/network-proxy-bridge.ts} +14 -14
  241. package/ts/{smartproxy/classes.pp.portrangemanager.ts → proxies/smart-proxy/port-range-manager.ts} +1 -1
  242. package/ts/{smartproxy/classes.pp.securitymanager.ts → proxies/smart-proxy/security-manager.ts} +3 -3
  243. package/ts/{smartproxy/classes.smartproxy.ts → proxies/smart-proxy/smart-proxy.ts} +29 -24
  244. package/ts/{smartproxy/classes.pp.timeoutmanager.ts → proxies/smart-proxy/timeout-manager.ts} +3 -3
  245. package/ts/{smartproxy/classes.pp.tlsmanager.ts → proxies/smart-proxy/tls-manager.ts} +3 -3
  246. package/ts/tls/alerts/index.ts +3 -0
  247. package/ts/{smartproxy/classes.pp.tlsalert.ts → tls/alerts/tls-alert.ts} +44 -43
  248. package/ts/tls/index.ts +33 -0
  249. package/ts/tls/sni/client-hello-parser.ts +629 -0
  250. package/ts/tls/sni/index.ts +3 -0
  251. package/ts/tls/sni/sni-extraction.ts +353 -0
  252. package/ts/tls/sni/sni-handler.ts +264 -0
  253. package/ts/tls/utils/index.ts +3 -0
  254. package/ts/tls/utils/tls-utils.ts +201 -0
  255. package/ts/common/acmeFactory.ts +0 -23
  256. package/ts/examples/forwarding-example.ts +0 -128
  257. package/ts/helpers.certificates.ts +0 -30
  258. package/ts/networkproxy/index.ts +0 -7
  259. package/ts/smartproxy/classes.pp.certprovisioner.ts +0 -200
  260. package/ts/smartproxy/classes.pp.snihandler.ts +0 -1281
  261. package/ts/smartproxy/forwarding/index.ts +0 -52
@@ -0,0 +1,255 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import { ForwardingHandlerFactory } from '../../forwarding/factory/forwarding-factory.js';
3
+ /**
4
+ * Manages domain configurations and target selection
5
+ */
6
+ export class DomainConfigManager {
7
+ constructor(settings) {
8
+ this.settings = settings;
9
+ // Track round-robin indices for domain configs
10
+ this.domainTargetIndices = new Map();
11
+ // Cache forwarding handlers for each domain config
12
+ this.forwardingHandlers = new Map();
13
+ }
14
+ /**
15
+ * Updates the domain configurations
16
+ */
17
+ updateDomainConfigs(newDomainConfigs) {
18
+ this.settings.domainConfigs = newDomainConfigs;
19
+ // Reset target indices for removed configs
20
+ const currentConfigSet = new Set(newDomainConfigs);
21
+ for (const [config] of this.domainTargetIndices) {
22
+ if (!currentConfigSet.has(config)) {
23
+ this.domainTargetIndices.delete(config);
24
+ }
25
+ }
26
+ // Clear handlers for removed configs and create handlers for new configs
27
+ const handlersToRemove = [];
28
+ for (const [config] of this.forwardingHandlers) {
29
+ if (!currentConfigSet.has(config)) {
30
+ handlersToRemove.push(config);
31
+ }
32
+ }
33
+ // Remove handlers that are no longer needed
34
+ for (const config of handlersToRemove) {
35
+ this.forwardingHandlers.delete(config);
36
+ }
37
+ // Create handlers for new configs
38
+ for (const config of newDomainConfigs) {
39
+ if (!this.forwardingHandlers.has(config)) {
40
+ try {
41
+ const handler = this.createForwardingHandler(config);
42
+ this.forwardingHandlers.set(config, handler);
43
+ }
44
+ catch (err) {
45
+ console.log(`Error creating forwarding handler for domain ${config.domains.join(', ')}: ${err}`);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * Get all domain configurations
52
+ */
53
+ getDomainConfigs() {
54
+ return this.settings.domainConfigs;
55
+ }
56
+ /**
57
+ * Find domain config matching a server name
58
+ */
59
+ findDomainConfig(serverName) {
60
+ if (!serverName)
61
+ return undefined;
62
+ return this.settings.domainConfigs.find((config) => config.domains.some((d) => plugins.minimatch(serverName, d)));
63
+ }
64
+ /**
65
+ * Find domain config for a specific port
66
+ */
67
+ findDomainConfigForPort(port) {
68
+ return this.settings.domainConfigs.find((domain) => {
69
+ const portRanges = domain.forwarding?.advanced?.portRanges;
70
+ return portRanges &&
71
+ portRanges.length > 0 &&
72
+ this.isPortInRanges(port, portRanges);
73
+ });
74
+ }
75
+ /**
76
+ * Check if a port is within any of the given ranges
77
+ */
78
+ isPortInRanges(port, ranges) {
79
+ return ranges.some((range) => port >= range.from && port <= range.to);
80
+ }
81
+ /**
82
+ * Get target IP with round-robin support
83
+ */
84
+ getTargetIP(domainConfig) {
85
+ const targetHosts = Array.isArray(domainConfig.forwarding.target.host)
86
+ ? domainConfig.forwarding.target.host
87
+ : [domainConfig.forwarding.target.host];
88
+ if (targetHosts.length > 0) {
89
+ const currentIndex = this.domainTargetIndices.get(domainConfig) || 0;
90
+ const ip = targetHosts[currentIndex % targetHosts.length];
91
+ this.domainTargetIndices.set(domainConfig, currentIndex + 1);
92
+ return ip;
93
+ }
94
+ return this.settings.targetIP || 'localhost';
95
+ }
96
+ /**
97
+ * Get target host with round-robin support (for tests)
98
+ * This is just an alias for getTargetIP for easier test compatibility
99
+ */
100
+ getTargetHost(domainConfig) {
101
+ return this.getTargetIP(domainConfig);
102
+ }
103
+ /**
104
+ * Get target port from domain config
105
+ */
106
+ getTargetPort(domainConfig, defaultPort) {
107
+ return domainConfig.forwarding.target.port || defaultPort;
108
+ }
109
+ /**
110
+ * Checks if a domain should use NetworkProxy
111
+ */
112
+ shouldUseNetworkProxy(domainConfig) {
113
+ const forwardingType = this.getForwardingType(domainConfig);
114
+ return forwardingType === 'https-terminate-to-http' ||
115
+ forwardingType === 'https-terminate-to-https';
116
+ }
117
+ /**
118
+ * Gets the NetworkProxy port for a domain
119
+ */
120
+ getNetworkProxyPort(domainConfig) {
121
+ // First check if we should use NetworkProxy at all
122
+ if (!this.shouldUseNetworkProxy(domainConfig)) {
123
+ return undefined;
124
+ }
125
+ return domainConfig.forwarding.advanced?.networkProxyPort || this.settings.networkProxyPort;
126
+ }
127
+ /**
128
+ * Get effective allowed and blocked IPs for a domain
129
+ *
130
+ * This method combines domain-specific security rules from the forwarding configuration
131
+ * with global security defaults when necessary.
132
+ */
133
+ getEffectiveIPRules(domainConfig) {
134
+ // Start with empty arrays
135
+ const allowedIPs = [];
136
+ const blockedIPs = [];
137
+ // Add IPs from forwarding security settings if available
138
+ if (domainConfig.forwarding?.security?.allowedIps) {
139
+ allowedIPs.push(...domainConfig.forwarding.security.allowedIps);
140
+ }
141
+ else {
142
+ // If no allowed IPs are specified in forwarding config and global defaults exist, use them
143
+ if (this.settings.defaultAllowedIPs && this.settings.defaultAllowedIPs.length > 0) {
144
+ allowedIPs.push(...this.settings.defaultAllowedIPs);
145
+ }
146
+ else {
147
+ // Default to allow all if no specific rules
148
+ allowedIPs.push('*');
149
+ }
150
+ }
151
+ // Add blocked IPs from forwarding security settings if available
152
+ if (domainConfig.forwarding?.security?.blockedIps) {
153
+ blockedIPs.push(...domainConfig.forwarding.security.blockedIps);
154
+ }
155
+ // Always add global blocked IPs, even if domain has its own rules
156
+ // This ensures that global blocks take precedence
157
+ if (this.settings.defaultBlockedIPs && this.settings.defaultBlockedIPs.length > 0) {
158
+ // Add only unique IPs that aren't already in the list
159
+ for (const ip of this.settings.defaultBlockedIPs) {
160
+ if (!blockedIPs.includes(ip)) {
161
+ blockedIPs.push(ip);
162
+ }
163
+ }
164
+ }
165
+ return {
166
+ allowedIPs,
167
+ blockedIPs
168
+ };
169
+ }
170
+ /**
171
+ * Get connection timeout for a domain
172
+ */
173
+ getConnectionTimeout(domainConfig) {
174
+ if (domainConfig?.forwarding.advanced?.timeout) {
175
+ return domainConfig.forwarding.advanced.timeout;
176
+ }
177
+ return this.settings.maxConnectionLifetime || 86400000; // 24 hours default
178
+ }
179
+ /**
180
+ * Creates a forwarding handler for a domain configuration
181
+ */
182
+ createForwardingHandler(domainConfig) {
183
+ // Create a new handler using the factory
184
+ const handler = ForwardingHandlerFactory.createHandler(domainConfig.forwarding);
185
+ // Initialize the handler
186
+ handler.initialize().catch(err => {
187
+ console.log(`Error initializing forwarding handler for ${domainConfig.domains.join(', ')}: ${err}`);
188
+ });
189
+ return handler;
190
+ }
191
+ /**
192
+ * Gets a forwarding handler for a domain config
193
+ * If no handler exists, creates one
194
+ */
195
+ getForwardingHandler(domainConfig) {
196
+ // If we already have a handler, return it
197
+ if (this.forwardingHandlers.has(domainConfig)) {
198
+ return this.forwardingHandlers.get(domainConfig);
199
+ }
200
+ // Otherwise create a new handler
201
+ const handler = this.createForwardingHandler(domainConfig);
202
+ this.forwardingHandlers.set(domainConfig, handler);
203
+ return handler;
204
+ }
205
+ /**
206
+ * Gets the forwarding type for a domain config
207
+ */
208
+ getForwardingType(domainConfig) {
209
+ if (!domainConfig?.forwarding)
210
+ return undefined;
211
+ return domainConfig.forwarding.type;
212
+ }
213
+ /**
214
+ * Checks if the forwarding type requires TLS termination
215
+ */
216
+ requiresTlsTermination(domainConfig) {
217
+ if (!domainConfig)
218
+ return false;
219
+ const forwardingType = this.getForwardingType(domainConfig);
220
+ return forwardingType === 'https-terminate-to-http' ||
221
+ forwardingType === 'https-terminate-to-https';
222
+ }
223
+ /**
224
+ * Checks if the forwarding type supports HTTP
225
+ */
226
+ supportsHttp(domainConfig) {
227
+ if (!domainConfig)
228
+ return false;
229
+ const forwardingType = this.getForwardingType(domainConfig);
230
+ // HTTP-only always supports HTTP
231
+ if (forwardingType === 'http-only')
232
+ return true;
233
+ // For termination types, check the HTTP settings
234
+ if (forwardingType === 'https-terminate-to-http' ||
235
+ forwardingType === 'https-terminate-to-https') {
236
+ // HTTP is supported by default for termination types
237
+ return domainConfig.forwarding?.http?.enabled !== false;
238
+ }
239
+ // HTTPS-passthrough doesn't support HTTP
240
+ return false;
241
+ }
242
+ /**
243
+ * Checks if HTTP requests should be redirected to HTTPS
244
+ */
245
+ shouldRedirectToHttps(domainConfig) {
246
+ if (!domainConfig?.forwarding)
247
+ return false;
248
+ // Only check for redirect if HTTP is enabled
249
+ if (this.supportsHttp(domainConfig)) {
250
+ return !!domainConfig.forwarding.http?.redirectToHttps;
251
+ }
252
+ return false;
253
+ }
254
+ }
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9kb21haW4tY29uZmlnLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUk1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRjs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFBb0IsUUFBNEI7UUFBNUIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFOaEQsK0NBQStDO1FBQ3ZDLHdCQUFtQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXBFLG1EQUFtRDtRQUMzQyx1QkFBa0IsR0FBMEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzQixDQUFDO0lBRXBEOztPQUVHO0lBQ0ksbUJBQW1CLENBQUMsZ0JBQWlDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO1FBRS9DLDJDQUEyQztRQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkQsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE1BQU0sZ0JBQWdCLEdBQW9CLEVBQUUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQyxJQUFJ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
@@ -0,0 +1,13 @@
1
+ /**
2
+ * SmartProxy implementation
3
+ */
4
+ export * from './models/index.js';
5
+ export { SmartProxy } from './smart-proxy.js';
6
+ export { ConnectionManager } from './connection-manager.js';
7
+ export { SecurityManager } from './security-manager.js';
8
+ export { DomainConfigManager } from './domain-config-manager.js';
9
+ export { TimeoutManager } from './timeout-manager.js';
10
+ export { TlsManager } from './tls-manager.js';
11
+ export { NetworkProxyBridge } from './network-proxy-bridge.js';
12
+ export { PortRangeManager } from './port-range-manager.js';
13
+ export { ConnectionHandler } from './connection-handler.js';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SmartProxy implementation
3
+ */
4
+ // Re-export models
5
+ export * from './models/index.js';
6
+ // Export the main SmartProxy class
7
+ export { SmartProxy } from './smart-proxy.js';
8
+ // Export supporting classes
9
+ export { ConnectionManager } from './connection-manager.js';
10
+ export { SecurityManager } from './security-manager.js';
11
+ export { DomainConfigManager } from './domain-config-manager.js';
12
+ export { TimeoutManager } from './timeout-manager.js';
13
+ export { TlsManager } from './tls-manager.js';
14
+ export { NetworkProxyBridge } from './network-proxy-bridge.js';
15
+ export { PortRangeManager } from './port-range-manager.js';
16
+ export { ConnectionHandler } from './connection-handler.js';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsbUJBQW1CO0FBQ25CLGNBQWMsbUJBQW1CLENBQUM7QUFFbEMsbUNBQW1DO0FBQ25DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5Qyw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUMifQ==
@@ -0,0 +1,4 @@
1
+ /**
2
+ * SmartProxy models
3
+ */
4
+ export * from './interfaces.js';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * SmartProxy models
3
+ */
4
+ export * from './interfaces.js';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUJBQWlCLENBQUMifQ==
@@ -0,0 +1,107 @@
1
+ import * as plugins from '../../../plugins.js';
2
+ import type { IForwardConfig } from '../../../forwarding/config/forwarding-types.js';
3
+ /**
4
+ * Provision object for static or HTTP-01 certificate
5
+ */
6
+ export type TSmartProxyCertProvisionObject = plugins.tsclass.network.ICert | 'http01';
7
+ /**
8
+ * Domain configuration with forwarding configuration
9
+ */
10
+ export interface IDomainConfig {
11
+ domains: string[];
12
+ forwarding: IForwardConfig;
13
+ }
14
+ /**
15
+ * Configuration options for the SmartProxy
16
+ */
17
+ import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
18
+ export interface ISmartProxyOptions {
19
+ fromPort: number;
20
+ toPort: number;
21
+ targetIP?: string;
22
+ domainConfigs: IDomainConfig[];
23
+ sniEnabled?: boolean;
24
+ defaultAllowedIPs?: string[];
25
+ defaultBlockedIPs?: string[];
26
+ preserveSourceIP?: boolean;
27
+ pfx?: Buffer;
28
+ key?: string | Buffer | Array<Buffer | string>;
29
+ passphrase?: string;
30
+ cert?: string | Buffer | Array<string | Buffer>;
31
+ ca?: string | Buffer | Array<string | Buffer>;
32
+ ciphers?: string;
33
+ honorCipherOrder?: boolean;
34
+ rejectUnauthorized?: boolean;
35
+ secureProtocol?: string;
36
+ servername?: string;
37
+ minVersion?: string;
38
+ maxVersion?: string;
39
+ initialDataTimeout?: number;
40
+ socketTimeout?: number;
41
+ inactivityCheckInterval?: number;
42
+ maxConnectionLifetime?: number;
43
+ inactivityTimeout?: number;
44
+ gracefulShutdownTimeout?: number;
45
+ globalPortRanges: Array<{
46
+ from: number;
47
+ to: number;
48
+ }>;
49
+ forwardAllGlobalRanges?: boolean;
50
+ noDelay?: boolean;
51
+ keepAlive?: boolean;
52
+ keepAliveInitialDelay?: number;
53
+ maxPendingDataSize?: number;
54
+ disableInactivityCheck?: boolean;
55
+ enableKeepAliveProbes?: boolean;
56
+ enableDetailedLogging?: boolean;
57
+ enableTlsDebugLogging?: boolean;
58
+ enableRandomizedTimeouts?: boolean;
59
+ allowSessionTicket?: boolean;
60
+ maxConnectionsPerIP?: number;
61
+ connectionRateLimitPerMinute?: number;
62
+ keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
63
+ keepAliveInactivityMultiplier?: number;
64
+ extendedKeepAliveLifetime?: number;
65
+ useNetworkProxy?: number[];
66
+ networkProxyPort?: number;
67
+ acme?: IAcmeOptions;
68
+ /**
69
+ * Optional certificate provider callback. Return 'http01' to use HTTP-01 challenges,
70
+ * or a static certificate object for immediate provisioning.
71
+ */
72
+ certProvisionFunction?: (domain: string) => Promise<TSmartProxyCertProvisionObject>;
73
+ }
74
+ /**
75
+ * Enhanced connection record
76
+ */
77
+ export interface IConnectionRecord {
78
+ id: string;
79
+ incoming: plugins.net.Socket;
80
+ outgoing: plugins.net.Socket | null;
81
+ incomingStartTime: number;
82
+ outgoingStartTime?: number;
83
+ outgoingClosedTime?: number;
84
+ lockedDomain?: string;
85
+ connectionClosed: boolean;
86
+ cleanupTimer?: NodeJS.Timeout;
87
+ alertFallbackTimeout?: NodeJS.Timeout;
88
+ lastActivity: number;
89
+ pendingData: Buffer[];
90
+ pendingDataSize: number;
91
+ bytesReceived: number;
92
+ bytesSent: number;
93
+ remoteIP: string;
94
+ localPort: number;
95
+ isTLS: boolean;
96
+ tlsHandshakeComplete: boolean;
97
+ hasReceivedInitialData: boolean;
98
+ domainConfig?: IDomainConfig;
99
+ hasKeepAlive: boolean;
100
+ inactivityWarningIssued?: boolean;
101
+ incomingTerminationReason?: string | null;
102
+ outgoingTerminationReason?: string | null;
103
+ usingNetworkProxy?: boolean;
104
+ renegotiationHandler?: (chunk: Buffer) => void;
105
+ isBrowserConnection?: boolean;
106
+ domainSwitches?: number;
107
+ }
@@ -0,0 +1,2 @@
1
+ import * as plugins from '../../../plugins.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvbW9kZWxzL2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQyJ9
@@ -0,0 +1,62 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import { NetworkProxy } from '../network-proxy/index.js';
3
+ import { Port80Handler } from '../../http/port80/port80-handler.js';
4
+ import type { ICertificateData } from '../../certificate/models/certificate-types.js';
5
+ import type { IConnectionRecord, ISmartProxyOptions } from './models/interfaces.js';
6
+ /**
7
+ * Manages NetworkProxy integration for TLS termination
8
+ */
9
+ export declare class NetworkProxyBridge {
10
+ private settings;
11
+ private networkProxy;
12
+ private port80Handler;
13
+ constructor(settings: ISmartProxyOptions);
14
+ /**
15
+ * Set the Port80Handler to use for certificate management
16
+ */
17
+ setPort80Handler(handler: Port80Handler): void;
18
+ /**
19
+ * Initialize NetworkProxy instance
20
+ */
21
+ initialize(): Promise<void>;
22
+ /**
23
+ * Handle certificate issuance or renewal events
24
+ */
25
+ private handleCertificateEvent;
26
+ /**
27
+ * Apply an external (static) certificate into NetworkProxy
28
+ */
29
+ applyExternalCertificate(data: ICertificateData): void;
30
+ /**
31
+ * Get the NetworkProxy instance
32
+ */
33
+ getNetworkProxy(): NetworkProxy | null;
34
+ /**
35
+ * Get the NetworkProxy port
36
+ */
37
+ getNetworkProxyPort(): number;
38
+ /**
39
+ * Start NetworkProxy
40
+ */
41
+ start(): Promise<void>;
42
+ /**
43
+ * Stop NetworkProxy
44
+ */
45
+ stop(): Promise<void>;
46
+ /**
47
+ * Register domains with Port80Handler
48
+ */
49
+ registerDomainsWithPort80Handler(domains: string[]): void;
50
+ /**
51
+ * Forwards a TLS connection to a NetworkProxy for handling
52
+ */
53
+ forwardToNetworkProxy(connectionId: string, socket: plugins.net.Socket, record: IConnectionRecord, initialData: Buffer, customProxyPort?: number, onError?: (reason: string) => void): void;
54
+ /**
55
+ * Synchronizes domain configurations to NetworkProxy
56
+ */
57
+ syncDomainConfigsToNetworkProxy(): Promise<void>;
58
+ /**
59
+ * Request a certificate for a specific domain
60
+ */
61
+ requestCertificate(domain: string): Promise<boolean>;
62
+ }