@push.rocks/smartproxy 12.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 (258) 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/tls/alerts/index.d.ts +4 -0
  152. package/dist_ts/tls/alerts/index.js +5 -0
  153. package/dist_ts/tls/alerts/tls-alert.d.ts +150 -0
  154. package/dist_ts/tls/alerts/tls-alert.js +226 -0
  155. package/dist_ts/tls/index.d.ts +18 -0
  156. package/dist_ts/tls/index.js +27 -0
  157. package/dist_ts/tls/sni/client-hello-parser.d.ts +100 -0
  158. package/dist_ts/tls/sni/client-hello-parser.js +463 -0
  159. package/dist_ts/tls/sni/index.d.ts +4 -0
  160. package/dist_ts/tls/sni/index.js +5 -0
  161. package/dist_ts/tls/sni/sni-extraction.d.ts +58 -0
  162. package/dist_ts/tls/sni/sni-extraction.js +275 -0
  163. package/dist_ts/tls/sni/sni-handler.d.ts +154 -0
  164. package/dist_ts/tls/sni/sni-handler.js +191 -0
  165. package/dist_ts/tls/utils/index.d.ts +4 -0
  166. package/dist_ts/tls/utils/index.js +5 -0
  167. package/dist_ts/tls/utils/tls-utils.d.ts +158 -0
  168. package/dist_ts/tls/utils/tls-utils.js +187 -0
  169. package/package.json +1 -1
  170. package/readme.md +89 -21
  171. package/readme.plan.md +253 -469
  172. package/ts/00_commitinfo_data.ts +1 -1
  173. package/ts/certificate/acme/acme-factory.ts +48 -0
  174. package/ts/certificate/acme/challenge-handler.ts +110 -0
  175. package/ts/certificate/acme/index.ts +3 -0
  176. package/ts/certificate/events/certificate-events.ts +36 -0
  177. package/ts/certificate/index.ts +67 -0
  178. package/ts/certificate/models/certificate-types.ts +88 -0
  179. package/ts/certificate/providers/cert-provisioner.ts +326 -0
  180. package/ts/certificate/providers/index.ts +3 -0
  181. package/ts/certificate/storage/file-storage.ts +234 -0
  182. package/ts/certificate/storage/index.ts +3 -0
  183. package/ts/certificate/utils/certificate-helpers.ts +50 -0
  184. package/ts/common/eventUtils.ts +1 -1
  185. package/ts/common/port80-adapter.ts +1 -1
  186. package/ts/core/events/index.ts +3 -0
  187. package/ts/core/index.ts +8 -0
  188. package/ts/core/models/common-types.ts +91 -0
  189. package/ts/core/models/index.ts +5 -0
  190. package/ts/core/utils/event-utils.ts +34 -0
  191. package/ts/core/utils/index.ts +7 -0
  192. package/ts/core/utils/ip-utils.ts +175 -0
  193. package/ts/core/utils/validation-utils.ts +177 -0
  194. package/ts/{smartproxy/forwarding → forwarding/config}/domain-config.ts +1 -1
  195. package/ts/{smartproxy/forwarding → forwarding/config}/domain-manager.ts +8 -8
  196. package/ts/{smartproxy/types/forwarding.types.ts → forwarding/config/forwarding-types.ts} +6 -6
  197. package/ts/forwarding/config/index.ts +7 -0
  198. package/ts/{smartproxy/forwarding/forwarding.factory.ts → forwarding/factory/forwarding-factory.ts} +12 -11
  199. package/ts/forwarding/factory/index.ts +5 -0
  200. package/ts/{smartproxy/forwarding/forwarding.handler.ts → forwarding/handlers/base-handler.ts} +2 -2
  201. package/ts/{smartproxy/forwarding/http.handler.ts → forwarding/handlers/http-handler.ts} +13 -4
  202. package/ts/{smartproxy/forwarding/https-passthrough.handler.ts → forwarding/handlers/https-passthrough-handler.ts} +13 -4
  203. package/ts/{smartproxy/forwarding/https-terminate-to-http.handler.ts → forwarding/handlers/https-terminate-to-http-handler.ts} +3 -3
  204. package/ts/{smartproxy/forwarding/https-terminate-to-https.handler.ts → forwarding/handlers/https-terminate-to-https-handler.ts} +3 -3
  205. package/ts/forwarding/handlers/index.ts +9 -0
  206. package/ts/forwarding/index.ts +34 -0
  207. package/ts/http/index.ts +23 -0
  208. package/ts/http/models/http-types.ts +105 -0
  209. package/ts/http/port80/acme-interfaces.ts +85 -0
  210. package/ts/http/port80/challenge-responder.ts +246 -0
  211. package/ts/http/port80/index.ts +13 -0
  212. package/ts/{port80handler/classes.port80handler.ts → http/port80/port80-handler.ts} +164 -161
  213. package/ts/http/redirects/index.ts +3 -0
  214. package/ts/http/router/index.ts +5 -0
  215. package/ts/{classes.router.ts → http/router/proxy-router.ts} +27 -20
  216. package/ts/index.ts +32 -9
  217. package/ts/plugins.ts +2 -1
  218. package/ts/proxies/index.ts +8 -0
  219. package/ts/{networkproxy/classes.np.certificatemanager.ts → proxies/network-proxy/certificate-manager.ts} +17 -16
  220. package/ts/{networkproxy/classes.np.connectionpool.ts → proxies/network-proxy/connection-pool.ts} +3 -3
  221. package/ts/proxies/network-proxy/index.ts +13 -0
  222. package/ts/proxies/network-proxy/models/index.ts +4 -0
  223. package/ts/{networkproxy/classes.np.types.ts → proxies/network-proxy/models/types.ts} +7 -11
  224. package/ts/{networkproxy/classes.np.networkproxy.ts → proxies/network-proxy/network-proxy.ts} +31 -24
  225. package/ts/{networkproxy/classes.np.requesthandler.ts → proxies/network-proxy/request-handler.ts} +12 -7
  226. package/ts/{networkproxy/classes.np.websockethandler.ts → proxies/network-proxy/websocket-handler.ts} +6 -6
  227. package/ts/proxies/nftables-proxy/index.ts +5 -0
  228. package/ts/proxies/nftables-proxy/models/errors.ts +30 -0
  229. package/ts/proxies/nftables-proxy/models/index.ts +5 -0
  230. package/ts/proxies/nftables-proxy/models/interfaces.ts +94 -0
  231. package/ts/{nfttablesproxy/classes.nftablesproxy.ts → proxies/nftables-proxy/nftables-proxy.ts} +24 -126
  232. package/ts/{smartproxy/classes.pp.connectionhandler.ts → proxies/smart-proxy/connection-handler.ts} +12 -12
  233. package/ts/{smartproxy/classes.pp.connectionmanager.ts → proxies/smart-proxy/connection-manager.ts} +8 -8
  234. package/ts/{smartproxy/classes.pp.domainconfigmanager.ts → proxies/smart-proxy/domain-config-manager.ts} +15 -14
  235. package/ts/proxies/smart-proxy/index.ts +18 -0
  236. package/ts/proxies/smart-proxy/models/index.ts +4 -0
  237. package/ts/{smartproxy/classes.pp.interfaces.ts → proxies/smart-proxy/models/interfaces.ts} +12 -8
  238. package/ts/{smartproxy/classes.pp.networkproxybridge.ts → proxies/smart-proxy/network-proxy-bridge.ts} +14 -14
  239. package/ts/{smartproxy/classes.pp.portrangemanager.ts → proxies/smart-proxy/port-range-manager.ts} +1 -1
  240. package/ts/{smartproxy/classes.pp.securitymanager.ts → proxies/smart-proxy/security-manager.ts} +3 -3
  241. package/ts/{smartproxy/classes.smartproxy.ts → proxies/smart-proxy/smart-proxy.ts} +29 -24
  242. package/ts/{smartproxy/classes.pp.timeoutmanager.ts → proxies/smart-proxy/timeout-manager.ts} +3 -3
  243. package/ts/{smartproxy/classes.pp.tlsmanager.ts → proxies/smart-proxy/tls-manager.ts} +3 -3
  244. package/ts/tls/alerts/index.ts +3 -0
  245. package/ts/{smartproxy/classes.pp.tlsalert.ts → tls/alerts/tls-alert.ts} +44 -43
  246. package/ts/tls/index.ts +33 -0
  247. package/ts/tls/sni/client-hello-parser.ts +629 -0
  248. package/ts/tls/sni/index.ts +3 -0
  249. package/ts/tls/sni/sni-extraction.ts +353 -0
  250. package/ts/tls/sni/sni-handler.ts +264 -0
  251. package/ts/tls/utils/index.ts +3 -0
  252. package/ts/tls/utils/tls-utils.ts +201 -0
  253. package/ts/common/acmeFactory.ts +0 -23
  254. package/ts/helpers.certificates.ts +0 -30
  255. package/ts/networkproxy/index.ts +0 -7
  256. package/ts/smartproxy/classes.pp.certprovisioner.ts +0 -200
  257. package/ts/smartproxy/classes.pp.snihandler.ts +0 -1281
  258. package/ts/smartproxy/forwarding/index.ts +0 -52
@@ -0,0 +1,86 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { IDomainConfig } from './domain-config.js';
3
+ import { ForwardingHandler } from '../handlers/base-handler.js';
4
+ /**
5
+ * Events emitted by the DomainManager
6
+ */
7
+ export declare enum DomainManagerEvents {
8
+ DOMAIN_ADDED = "domain-added",
9
+ DOMAIN_REMOVED = "domain-removed",
10
+ DOMAIN_MATCHED = "domain-matched",
11
+ DOMAIN_MATCH_FAILED = "domain-match-failed",
12
+ CERTIFICATE_NEEDED = "certificate-needed",
13
+ CERTIFICATE_LOADED = "certificate-loaded",
14
+ ERROR = "error"
15
+ }
16
+ /**
17
+ * Manages domains and their forwarding handlers
18
+ */
19
+ export declare class DomainManager extends plugins.EventEmitter {
20
+ private domainConfigs;
21
+ private domainHandlers;
22
+ /**
23
+ * Create a new DomainManager
24
+ * @param initialDomains Optional initial domain configurations
25
+ */
26
+ constructor(initialDomains?: IDomainConfig[]);
27
+ /**
28
+ * Set or replace all domain configurations
29
+ * @param configs Array of domain configurations
30
+ */
31
+ setDomainConfigs(configs: IDomainConfig[]): Promise<void>;
32
+ /**
33
+ * Add a new domain configuration
34
+ * @param config The domain configuration to add
35
+ */
36
+ addDomainConfig(config: IDomainConfig): Promise<void>;
37
+ /**
38
+ * Remove a domain configuration
39
+ * @param domain The domain to remove
40
+ * @returns True if the domain was found and removed
41
+ */
42
+ removeDomainConfig(domain: string): boolean;
43
+ /**
44
+ * Find the handler for a domain
45
+ * @param domain The domain to find a handler for
46
+ * @returns The handler or undefined if no match
47
+ */
48
+ findHandlerForDomain(domain: string): ForwardingHandler | undefined;
49
+ /**
50
+ * Handle a connection for a domain
51
+ * @param domain The domain
52
+ * @param socket The client socket
53
+ * @returns True if the connection was handled
54
+ */
55
+ handleConnection(domain: string, socket: plugins.net.Socket): boolean;
56
+ /**
57
+ * Handle an HTTP request for a domain
58
+ * @param domain The domain
59
+ * @param req The HTTP request
60
+ * @param res The HTTP response
61
+ * @returns True if the request was handled
62
+ */
63
+ handleHttpRequest(domain: string, req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): boolean;
64
+ /**
65
+ * Create handlers for a domain configuration
66
+ * @param config The domain configuration
67
+ */
68
+ private createHandlersForDomain;
69
+ /**
70
+ * Set up event forwarding from a handler
71
+ * @param handler The handler
72
+ * @param config The domain configuration for this handler
73
+ */
74
+ private setupHandlerEvents;
75
+ /**
76
+ * Find a handler for a domain using wildcard matching
77
+ * @param domain The domain to find a handler for
78
+ * @returns The handler or undefined if no match
79
+ */
80
+ private findWildcardHandler;
81
+ /**
82
+ * Get all domain configurations
83
+ * @returns Array of domain configurations
84
+ */
85
+ getDomainConfigs(): IDomainConfig[];
86
+ }
@@ -0,0 +1,242 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import { ForwardingHandler } from '../handlers/base-handler.js';
3
+ import { ForwardingHandlerEvents } from './forwarding-types.js';
4
+ import { ForwardingHandlerFactory } from '../factory/forwarding-factory.js';
5
+ /**
6
+ * Events emitted by the DomainManager
7
+ */
8
+ export var DomainManagerEvents;
9
+ (function (DomainManagerEvents) {
10
+ DomainManagerEvents["DOMAIN_ADDED"] = "domain-added";
11
+ DomainManagerEvents["DOMAIN_REMOVED"] = "domain-removed";
12
+ DomainManagerEvents["DOMAIN_MATCHED"] = "domain-matched";
13
+ DomainManagerEvents["DOMAIN_MATCH_FAILED"] = "domain-match-failed";
14
+ DomainManagerEvents["CERTIFICATE_NEEDED"] = "certificate-needed";
15
+ DomainManagerEvents["CERTIFICATE_LOADED"] = "certificate-loaded";
16
+ DomainManagerEvents["ERROR"] = "error";
17
+ })(DomainManagerEvents || (DomainManagerEvents = {}));
18
+ /**
19
+ * Manages domains and their forwarding handlers
20
+ */
21
+ export class DomainManager extends plugins.EventEmitter {
22
+ /**
23
+ * Create a new DomainManager
24
+ * @param initialDomains Optional initial domain configurations
25
+ */
26
+ constructor(initialDomains) {
27
+ super();
28
+ this.domainConfigs = [];
29
+ this.domainHandlers = new Map();
30
+ if (initialDomains) {
31
+ this.setDomainConfigs(initialDomains);
32
+ }
33
+ }
34
+ /**
35
+ * Set or replace all domain configurations
36
+ * @param configs Array of domain configurations
37
+ */
38
+ async setDomainConfigs(configs) {
39
+ // Clear existing handlers
40
+ this.domainHandlers.clear();
41
+ // Store new configurations
42
+ this.domainConfigs = [...configs];
43
+ // Initialize handlers for each domain
44
+ for (const config of this.domainConfigs) {
45
+ await this.createHandlersForDomain(config);
46
+ }
47
+ }
48
+ /**
49
+ * Add a new domain configuration
50
+ * @param config The domain configuration to add
51
+ */
52
+ async addDomainConfig(config) {
53
+ // Check if any of these domains already exist
54
+ for (const domain of config.domains) {
55
+ if (this.domainHandlers.has(domain)) {
56
+ // Remove existing handler for this domain
57
+ this.domainHandlers.delete(domain);
58
+ }
59
+ }
60
+ // Add the new configuration
61
+ this.domainConfigs.push(config);
62
+ // Create handlers for the new domain
63
+ await this.createHandlersForDomain(config);
64
+ this.emit(DomainManagerEvents.DOMAIN_ADDED, {
65
+ domains: config.domains,
66
+ forwardingType: config.forwarding.type
67
+ });
68
+ }
69
+ /**
70
+ * Remove a domain configuration
71
+ * @param domain The domain to remove
72
+ * @returns True if the domain was found and removed
73
+ */
74
+ removeDomainConfig(domain) {
75
+ // Find the config that includes this domain
76
+ const index = this.domainConfigs.findIndex(config => config.domains.includes(domain));
77
+ if (index === -1) {
78
+ return false;
79
+ }
80
+ // Get the config
81
+ const config = this.domainConfigs[index];
82
+ // Remove all handlers for this config
83
+ for (const domainName of config.domains) {
84
+ this.domainHandlers.delete(domainName);
85
+ }
86
+ // Remove the config
87
+ this.domainConfigs.splice(index, 1);
88
+ this.emit(DomainManagerEvents.DOMAIN_REMOVED, {
89
+ domains: config.domains
90
+ });
91
+ return true;
92
+ }
93
+ /**
94
+ * Find the handler for a domain
95
+ * @param domain The domain to find a handler for
96
+ * @returns The handler or undefined if no match
97
+ */
98
+ findHandlerForDomain(domain) {
99
+ // Try exact match
100
+ if (this.domainHandlers.has(domain)) {
101
+ return this.domainHandlers.get(domain);
102
+ }
103
+ // Try wildcard matches
104
+ const wildcardHandler = this.findWildcardHandler(domain);
105
+ if (wildcardHandler) {
106
+ return wildcardHandler;
107
+ }
108
+ // No match found
109
+ return undefined;
110
+ }
111
+ /**
112
+ * Handle a connection for a domain
113
+ * @param domain The domain
114
+ * @param socket The client socket
115
+ * @returns True if the connection was handled
116
+ */
117
+ handleConnection(domain, socket) {
118
+ const handler = this.findHandlerForDomain(domain);
119
+ if (!handler) {
120
+ this.emit(DomainManagerEvents.DOMAIN_MATCH_FAILED, {
121
+ domain,
122
+ remoteAddress: socket.remoteAddress
123
+ });
124
+ return false;
125
+ }
126
+ this.emit(DomainManagerEvents.DOMAIN_MATCHED, {
127
+ domain,
128
+ handlerType: handler.constructor.name,
129
+ remoteAddress: socket.remoteAddress
130
+ });
131
+ // Handle the connection
132
+ handler.handleConnection(socket);
133
+ return true;
134
+ }
135
+ /**
136
+ * Handle an HTTP request for a domain
137
+ * @param domain The domain
138
+ * @param req The HTTP request
139
+ * @param res The HTTP response
140
+ * @returns True if the request was handled
141
+ */
142
+ handleHttpRequest(domain, req, res) {
143
+ const handler = this.findHandlerForDomain(domain);
144
+ if (!handler) {
145
+ this.emit(DomainManagerEvents.DOMAIN_MATCH_FAILED, {
146
+ domain,
147
+ remoteAddress: req.socket.remoteAddress
148
+ });
149
+ return false;
150
+ }
151
+ this.emit(DomainManagerEvents.DOMAIN_MATCHED, {
152
+ domain,
153
+ handlerType: handler.constructor.name,
154
+ remoteAddress: req.socket.remoteAddress
155
+ });
156
+ // Handle the request
157
+ handler.handleHttpRequest(req, res);
158
+ return true;
159
+ }
160
+ /**
161
+ * Create handlers for a domain configuration
162
+ * @param config The domain configuration
163
+ */
164
+ async createHandlersForDomain(config) {
165
+ try {
166
+ // Create a handler for this forwarding configuration
167
+ const handler = ForwardingHandlerFactory.createHandler(config.forwarding);
168
+ // Initialize the handler
169
+ await handler.initialize();
170
+ // Set up event forwarding
171
+ this.setupHandlerEvents(handler, config);
172
+ // Store the handler for each domain in the config
173
+ for (const domain of config.domains) {
174
+ this.domainHandlers.set(domain, handler);
175
+ }
176
+ }
177
+ catch (error) {
178
+ this.emit(DomainManagerEvents.ERROR, {
179
+ domains: config.domains,
180
+ error: error instanceof Error ? error.message : String(error)
181
+ });
182
+ }
183
+ }
184
+ /**
185
+ * Set up event forwarding from a handler
186
+ * @param handler The handler
187
+ * @param config The domain configuration for this handler
188
+ */
189
+ setupHandlerEvents(handler, config) {
190
+ // Forward relevant events
191
+ handler.on(ForwardingHandlerEvents.CERTIFICATE_NEEDED, (data) => {
192
+ this.emit(DomainManagerEvents.CERTIFICATE_NEEDED, {
193
+ ...data,
194
+ domains: config.domains
195
+ });
196
+ });
197
+ handler.on(ForwardingHandlerEvents.CERTIFICATE_LOADED, (data) => {
198
+ this.emit(DomainManagerEvents.CERTIFICATE_LOADED, {
199
+ ...data,
200
+ domains: config.domains
201
+ });
202
+ });
203
+ handler.on(ForwardingHandlerEvents.ERROR, (data) => {
204
+ this.emit(DomainManagerEvents.ERROR, {
205
+ ...data,
206
+ domains: config.domains
207
+ });
208
+ });
209
+ }
210
+ /**
211
+ * Find a handler for a domain using wildcard matching
212
+ * @param domain The domain to find a handler for
213
+ * @returns The handler or undefined if no match
214
+ */
215
+ findWildcardHandler(domain) {
216
+ // Exact match already checked in findHandlerForDomain
217
+ // Try subdomain wildcard (*.example.com)
218
+ if (domain.includes('.')) {
219
+ const parts = domain.split('.');
220
+ if (parts.length > 2) {
221
+ const wildcardDomain = `*.${parts.slice(1).join('.')}`;
222
+ if (this.domainHandlers.has(wildcardDomain)) {
223
+ return this.domainHandlers.get(wildcardDomain);
224
+ }
225
+ }
226
+ }
227
+ // Try full wildcard
228
+ if (this.domainHandlers.has('*')) {
229
+ return this.domainHandlers.get('*');
230
+ }
231
+ // No match found
232
+ return undefined;
233
+ }
234
+ /**
235
+ * Get all domain configurations
236
+ * @returns Array of domain configurations
237
+ */
238
+ getDomainConfigs() {
239
+ return [...this.domainConfigs];
240
+ }
241
+ }
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2NvbmZpZy9kb21haW4tbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTVFOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksbUJBUVg7QUFSRCxXQUFZLG1CQUFtQjtJQUM3QixvREFBNkIsQ0FBQTtJQUM3Qix3REFBaUMsQ0FBQTtJQUNqQyx3REFBaUMsQ0FBQTtJQUNqQyxrRUFBMkMsQ0FBQTtJQUMzQyxnRUFBeUMsQ0FBQTtJQUN6QyxnRUFBeUMsQ0FBQTtJQUN6QyxzQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFSVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBUTlCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBSXJEOzs7T0FHRztJQUNILFlBQVksY0FBZ0M7UUFDMUMsS0FBSyxFQUFFLENBQUM7UUFSRixrQkFBYSxHQUFvQixFQUFFLENBQUM7UUFDcEMsbUJBQWMsR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQVNqRSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUF3QjtRQUNwRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU1QiwyQkFB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
@@ -0,0 +1,104 @@
1
+ import type * as plugins from '../../plugins.js';
2
+ /**
3
+ * The primary forwarding types supported by SmartProxy
4
+ */
5
+ export type TForwardingType = 'http-only' | 'https-passthrough' | 'https-terminate-to-http' | 'https-terminate-to-https';
6
+ /**
7
+ * Target configuration for forwarding
8
+ */
9
+ export interface ITargetConfig {
10
+ host: string | string[];
11
+ port: number;
12
+ }
13
+ /**
14
+ * HTTP-specific options for forwarding
15
+ */
16
+ export interface IHttpOptions {
17
+ enabled?: boolean;
18
+ redirectToHttps?: boolean;
19
+ headers?: Record<string, string>;
20
+ }
21
+ /**
22
+ * HTTPS-specific options for forwarding
23
+ */
24
+ export interface IHttpsOptions {
25
+ customCert?: {
26
+ key: string;
27
+ cert: string;
28
+ };
29
+ forwardSni?: boolean;
30
+ }
31
+ /**
32
+ * ACME certificate handling options
33
+ */
34
+ export interface IAcmeForwardingOptions {
35
+ enabled?: boolean;
36
+ maintenance?: boolean;
37
+ production?: boolean;
38
+ forwardChallenges?: {
39
+ host: string;
40
+ port: number;
41
+ useTls?: boolean;
42
+ };
43
+ }
44
+ /**
45
+ * Security options for forwarding
46
+ */
47
+ export interface ISecurityOptions {
48
+ allowedIps?: string[];
49
+ blockedIps?: string[];
50
+ maxConnections?: number;
51
+ }
52
+ /**
53
+ * Advanced options for forwarding
54
+ */
55
+ export interface IAdvancedOptions {
56
+ portRanges?: Array<{
57
+ from: number;
58
+ to: number;
59
+ }>;
60
+ networkProxyPort?: number;
61
+ keepAlive?: boolean;
62
+ timeout?: number;
63
+ headers?: Record<string, string>;
64
+ }
65
+ /**
66
+ * Unified forwarding configuration interface
67
+ */
68
+ export interface IForwardConfig {
69
+ type: TForwardingType;
70
+ target: ITargetConfig;
71
+ http?: IHttpOptions;
72
+ https?: IHttpsOptions;
73
+ acme?: IAcmeForwardingOptions;
74
+ security?: ISecurityOptions;
75
+ advanced?: IAdvancedOptions;
76
+ }
77
+ /**
78
+ * Event types emitted by forwarding handlers
79
+ */
80
+ export declare enum ForwardingHandlerEvents {
81
+ CONNECTED = "connected",
82
+ DISCONNECTED = "disconnected",
83
+ ERROR = "error",
84
+ DATA_FORWARDED = "data-forwarded",
85
+ HTTP_REQUEST = "http-request",
86
+ HTTP_RESPONSE = "http-response",
87
+ CERTIFICATE_NEEDED = "certificate-needed",
88
+ CERTIFICATE_LOADED = "certificate-loaded"
89
+ }
90
+ /**
91
+ * Base interface for forwarding handlers
92
+ */
93
+ export interface IForwardingHandler extends plugins.EventEmitter {
94
+ initialize(): Promise<void>;
95
+ handleConnection(socket: plugins.net.Socket): void;
96
+ handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
97
+ }
98
+ /**
99
+ * Helper function types for common forwarding patterns
100
+ */
101
+ export declare const httpOnly: (partialConfig: Partial<IForwardConfig> & Pick<IForwardConfig, "target">) => IForwardConfig;
102
+ export declare const tlsTerminateToHttp: (partialConfig: Partial<IForwardConfig> & Pick<IForwardConfig, "target">) => IForwardConfig;
103
+ export declare const tlsTerminateToHttps: (partialConfig: Partial<IForwardConfig> & Pick<IForwardConfig, "target">) => IForwardConfig;
104
+ export declare const httpsPassthrough: (partialConfig: Partial<IForwardConfig> & Pick<IForwardConfig, "target">) => IForwardConfig;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Event types emitted by forwarding handlers
3
+ */
4
+ export var ForwardingHandlerEvents;
5
+ (function (ForwardingHandlerEvents) {
6
+ ForwardingHandlerEvents["CONNECTED"] = "connected";
7
+ ForwardingHandlerEvents["DISCONNECTED"] = "disconnected";
8
+ ForwardingHandlerEvents["ERROR"] = "error";
9
+ ForwardingHandlerEvents["DATA_FORWARDED"] = "data-forwarded";
10
+ ForwardingHandlerEvents["HTTP_REQUEST"] = "http-request";
11
+ ForwardingHandlerEvents["HTTP_RESPONSE"] = "http-response";
12
+ ForwardingHandlerEvents["CERTIFICATE_NEEDED"] = "certificate-needed";
13
+ ForwardingHandlerEvents["CERTIFICATE_LOADED"] = "certificate-loaded";
14
+ })(ForwardingHandlerEvents || (ForwardingHandlerEvents = {}));
15
+ /**
16
+ * Helper function types for common forwarding patterns
17
+ */
18
+ export const httpOnly = (partialConfig) => ({
19
+ type: 'http-only',
20
+ target: partialConfig.target,
21
+ http: { enabled: true, ...(partialConfig.http || {}) },
22
+ ...(partialConfig.security ? { security: partialConfig.security } : {}),
23
+ ...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
24
+ });
25
+ export const tlsTerminateToHttp = (partialConfig) => ({
26
+ type: 'https-terminate-to-http',
27
+ target: partialConfig.target,
28
+ https: { ...(partialConfig.https || {}) },
29
+ acme: { enabled: true, maintenance: true, ...(partialConfig.acme || {}) },
30
+ http: { enabled: true, redirectToHttps: true, ...(partialConfig.http || {}) },
31
+ ...(partialConfig.security ? { security: partialConfig.security } : {}),
32
+ ...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
33
+ });
34
+ export const tlsTerminateToHttps = (partialConfig) => ({
35
+ type: 'https-terminate-to-https',
36
+ target: partialConfig.target,
37
+ https: { ...(partialConfig.https || {}) },
38
+ acme: { enabled: true, maintenance: true, ...(partialConfig.acme || {}) },
39
+ http: { enabled: true, redirectToHttps: true, ...(partialConfig.http || {}) },
40
+ ...(partialConfig.security ? { security: partialConfig.security } : {}),
41
+ ...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
42
+ });
43
+ export const httpsPassthrough = (partialConfig) => ({
44
+ type: 'https-passthrough',
45
+ target: partialConfig.target,
46
+ https: { forwardSni: true, ...(partialConfig.https || {}) },
47
+ ...(partialConfig.security ? { security: partialConfig.security } : {}),
48
+ ...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
49
+ });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvY29uZmlnL2ZvcndhcmRpbmctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkZBOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksdUJBU1g7QUFURCxXQUFZLHVCQUF1QjtJQUNqQyxrREFBdUIsQ0FBQTtJQUN2Qix3REFBNkIsQ0FBQTtJQUM3QiwwQ0FBZSxDQUFBO0lBQ2YsNERBQWlDLENBQUE7SUFDakMsd0RBQTZCLENBQUE7SUFDN0IsMERBQStCLENBQUE7SUFDL0Isb0VBQXlDLENBQUE7SUFDekMsb0VBQXlDLENBQUE7QUFDM0MsQ0FBQyxFQVRXLHVCQUF1QixLQUF2Qix1QkFBdUIsUUFTbEM7QUFXRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUN0QixhQUF1RSxFQUN2RCxFQUFFLENBQUMsQ0FBQztJQUNwQixJQUFJLEVBQUUsV0FBVztJQUNqQixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07SUFDNUIsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN0RCxHQUFHLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0NBQ3hFLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLGFBQXVFLEVBQ3ZELEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLElBQUks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
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Forwarding configuration exports
3
+ */
4
+ export * from './forwarding-types.js';
5
+ export * from './domain-config.js';
6
+ export * from './domain-manager.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Forwarding configuration exports
3
+ */
4
+ export * from './forwarding-types.js';
5
+ export * from './domain-config.js';
6
+ export * from './domain-manager.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2NvbmZpZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHFCQUFxQixDQUFDIn0=
@@ -0,0 +1,25 @@
1
+ import type { IForwardConfig } from '../config/forwarding-types.js';
2
+ import { ForwardingHandler } from '../handlers/base-handler.js';
3
+ /**
4
+ * Factory for creating forwarding handlers based on the configuration type
5
+ */
6
+ export declare class ForwardingHandlerFactory {
7
+ /**
8
+ * Create a forwarding handler based on the configuration
9
+ * @param config The forwarding configuration
10
+ * @returns The appropriate forwarding handler
11
+ */
12
+ static createHandler(config: IForwardConfig): ForwardingHandler;
13
+ /**
14
+ * Apply default values to a forwarding configuration based on its type
15
+ * @param config The original forwarding configuration
16
+ * @returns A configuration with defaults applied
17
+ */
18
+ static applyDefaults(config: IForwardConfig): IForwardConfig;
19
+ /**
20
+ * Validate a forwarding configuration
21
+ * @param config The configuration to validate
22
+ * @throws Error if the configuration is invalid
23
+ */
24
+ static validateConfig(config: IForwardConfig): void;
25
+ }