@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,254 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import { ForwardingHandler } from './base-handler.js';
3
+ import { ForwardingHandlerEvents } from '../config/forwarding-types.js';
4
+ /**
5
+ * Handler for HTTPS termination with HTTPS backend
6
+ */
7
+ export class HttpsTerminateToHttpsHandler extends ForwardingHandler {
8
+ /**
9
+ * Create a new HTTPS termination with HTTPS backend handler
10
+ * @param config The forwarding configuration
11
+ */
12
+ constructor(config) {
13
+ super(config);
14
+ this.secureContext = null;
15
+ // Validate that this is an HTTPS terminate to HTTPS configuration
16
+ if (config.type !== 'https-terminate-to-https') {
17
+ throw new Error(`Invalid configuration type for HttpsTerminateToHttpsHandler: ${config.type}`);
18
+ }
19
+ }
20
+ /**
21
+ * Initialize the handler, setting up TLS context
22
+ */
23
+ async initialize() {
24
+ // We need to load or create TLS certificates for termination
25
+ if (this.config.https?.customCert) {
26
+ // Use custom certificate from configuration
27
+ this.secureContext = plugins.tls.createSecureContext({
28
+ key: this.config.https.customCert.key,
29
+ cert: this.config.https.customCert.cert
30
+ });
31
+ this.emit(ForwardingHandlerEvents.CERTIFICATE_LOADED, {
32
+ source: 'config',
33
+ domain: this.config.target.host
34
+ });
35
+ }
36
+ else if (this.config.acme?.enabled) {
37
+ // Request certificate through ACME if needed
38
+ this.emit(ForwardingHandlerEvents.CERTIFICATE_NEEDED, {
39
+ domain: Array.isArray(this.config.target.host)
40
+ ? this.config.target.host[0]
41
+ : this.config.target.host,
42
+ useProduction: this.config.acme.production || false
43
+ });
44
+ // In a real implementation, we would wait for the certificate to be issued
45
+ // For now, we'll use a dummy context
46
+ this.secureContext = plugins.tls.createSecureContext({
47
+ key: '-----BEGIN PRIVATE KEY-----\nDummy key\n-----END PRIVATE KEY-----',
48
+ cert: '-----BEGIN CERTIFICATE-----\nDummy cert\n-----END CERTIFICATE-----'
49
+ });
50
+ }
51
+ else {
52
+ throw new Error('HTTPS termination requires either a custom certificate or ACME enabled');
53
+ }
54
+ }
55
+ /**
56
+ * Set the secure context for TLS termination
57
+ * Called when a certificate is available
58
+ * @param context The secure context
59
+ */
60
+ setSecureContext(context) {
61
+ this.secureContext = context;
62
+ }
63
+ /**
64
+ * Handle a TLS/SSL socket connection by terminating TLS and creating a new TLS connection to backend
65
+ * @param clientSocket The incoming socket from the client
66
+ */
67
+ handleConnection(clientSocket) {
68
+ // Make sure we have a secure context
69
+ if (!this.secureContext) {
70
+ clientSocket.destroy(new Error('TLS secure context not initialized'));
71
+ return;
72
+ }
73
+ const remoteAddress = clientSocket.remoteAddress || 'unknown';
74
+ const remotePort = clientSocket.remotePort || 0;
75
+ // Create a TLS socket using our secure context
76
+ const tlsSocket = new plugins.tls.TLSSocket(clientSocket, {
77
+ secureContext: this.secureContext,
78
+ isServer: true
79
+ });
80
+ this.emit(ForwardingHandlerEvents.CONNECTED, {
81
+ remoteAddress,
82
+ remotePort,
83
+ tls: true
84
+ });
85
+ // Handle TLS errors
86
+ tlsSocket.on('error', (error) => {
87
+ this.emit(ForwardingHandlerEvents.ERROR, {
88
+ remoteAddress,
89
+ error: `TLS error: ${error.message}`
90
+ });
91
+ if (!tlsSocket.destroyed) {
92
+ tlsSocket.destroy();
93
+ }
94
+ });
95
+ // The TLS socket will now emit HTTP traffic that can be processed
96
+ // In a real implementation, we would create an HTTP parser and handle
97
+ // the requests here, but for simplicity, we'll just forward the data
98
+ // Get the target from configuration
99
+ const target = this.getTargetFromConfig();
100
+ // Set up the connection to the HTTPS backend
101
+ const connectToBackend = () => {
102
+ const backendSocket = plugins.tls.connect({
103
+ host: target.host,
104
+ port: target.port,
105
+ // In a real implementation, we would configure TLS options
106
+ rejectUnauthorized: false // For testing only, never use in production
107
+ }, () => {
108
+ this.emit(ForwardingHandlerEvents.DATA_FORWARDED, {
109
+ direction: 'outbound',
110
+ target: `${target.host}:${target.port}`,
111
+ tls: true
112
+ });
113
+ // Set up bidirectional data flow
114
+ tlsSocket.pipe(backendSocket);
115
+ backendSocket.pipe(tlsSocket);
116
+ });
117
+ backendSocket.on('error', (error) => {
118
+ this.emit(ForwardingHandlerEvents.ERROR, {
119
+ remoteAddress,
120
+ error: `Backend connection error: ${error.message}`
121
+ });
122
+ if (!tlsSocket.destroyed) {
123
+ tlsSocket.destroy();
124
+ }
125
+ });
126
+ // Handle close
127
+ backendSocket.on('close', () => {
128
+ if (!tlsSocket.destroyed) {
129
+ tlsSocket.destroy();
130
+ }
131
+ });
132
+ // Set timeout
133
+ const timeout = this.getTimeout();
134
+ backendSocket.setTimeout(timeout);
135
+ backendSocket.on('timeout', () => {
136
+ this.emit(ForwardingHandlerEvents.ERROR, {
137
+ remoteAddress,
138
+ error: 'Backend connection timeout'
139
+ });
140
+ if (!backendSocket.destroyed) {
141
+ backendSocket.destroy();
142
+ }
143
+ });
144
+ };
145
+ // Wait for the TLS handshake to complete before connecting to backend
146
+ tlsSocket.on('secure', () => {
147
+ connectToBackend();
148
+ });
149
+ // Handle close
150
+ tlsSocket.on('close', () => {
151
+ this.emit(ForwardingHandlerEvents.DISCONNECTED, {
152
+ remoteAddress
153
+ });
154
+ });
155
+ // Set timeout
156
+ const timeout = this.getTimeout();
157
+ tlsSocket.setTimeout(timeout);
158
+ tlsSocket.on('timeout', () => {
159
+ this.emit(ForwardingHandlerEvents.ERROR, {
160
+ remoteAddress,
161
+ error: 'TLS connection timeout'
162
+ });
163
+ if (!tlsSocket.destroyed) {
164
+ tlsSocket.destroy();
165
+ }
166
+ });
167
+ }
168
+ /**
169
+ * Handle an HTTP request by forwarding to the HTTPS backend
170
+ * @param req The HTTP request
171
+ * @param res The HTTP response
172
+ */
173
+ handleHttpRequest(req, res) {
174
+ // Check if we should redirect to HTTPS
175
+ if (this.config.http?.redirectToHttps) {
176
+ this.redirectToHttps(req, res);
177
+ return;
178
+ }
179
+ // Get the target from configuration
180
+ const target = this.getTargetFromConfig();
181
+ // Create custom headers with variable substitution
182
+ const variables = {
183
+ clientIp: req.socket.remoteAddress || 'unknown'
184
+ };
185
+ // Prepare headers, merging with any custom headers from config
186
+ const headers = this.applyCustomHeaders(req.headers, variables);
187
+ // Create the proxy request options
188
+ const options = {
189
+ hostname: target.host,
190
+ port: target.port,
191
+ path: req.url,
192
+ method: req.method,
193
+ headers,
194
+ // In a real implementation, we would configure TLS options
195
+ rejectUnauthorized: false // For testing only, never use in production
196
+ };
197
+ // Create the proxy request using HTTPS
198
+ const proxyReq = plugins.https.request(options, (proxyRes) => {
199
+ // Copy status code and headers from the proxied response
200
+ res.writeHead(proxyRes.statusCode || 500, proxyRes.headers);
201
+ // Pipe the proxy response to the client response
202
+ proxyRes.pipe(res);
203
+ // Track response size for logging
204
+ let responseSize = 0;
205
+ proxyRes.on('data', (chunk) => {
206
+ responseSize += chunk.length;
207
+ });
208
+ proxyRes.on('end', () => {
209
+ this.emit(ForwardingHandlerEvents.HTTP_RESPONSE, {
210
+ statusCode: proxyRes.statusCode,
211
+ headers: proxyRes.headers,
212
+ size: responseSize
213
+ });
214
+ });
215
+ });
216
+ // Handle errors in the proxy request
217
+ proxyReq.on('error', (error) => {
218
+ this.emit(ForwardingHandlerEvents.ERROR, {
219
+ remoteAddress: req.socket.remoteAddress,
220
+ error: `Proxy request error: ${error.message}`
221
+ });
222
+ // Send an error response if headers haven't been sent yet
223
+ if (!res.headersSent) {
224
+ res.writeHead(502, { 'Content-Type': 'text/plain' });
225
+ res.end(`Error forwarding request: ${error.message}`);
226
+ }
227
+ else {
228
+ // Just end the response if headers have already been sent
229
+ res.end();
230
+ }
231
+ });
232
+ // Track request details for logging
233
+ let requestSize = 0;
234
+ req.on('data', (chunk) => {
235
+ requestSize += chunk.length;
236
+ });
237
+ // Log the request
238
+ this.emit(ForwardingHandlerEvents.HTTP_REQUEST, {
239
+ method: req.method,
240
+ url: req.url,
241
+ headers: req.headers,
242
+ remoteAddress: req.socket.remoteAddress,
243
+ target: `${target.host}:${target.port}`
244
+ });
245
+ // Pipe the client request to the proxy request
246
+ if (req.readable) {
247
+ req.pipe(proxyReq);
248
+ }
249
+ else {
250
+ proxyReq.end();
251
+ }
252
+ }
253
+ }
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHMtdGVybWluYXRlLXRvLWh0dHBzLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2hhbmRsZXJzL2h0dHBzLXRlcm1pbmF0ZS10by1odHRwcy1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFeEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsaUJBQWlCO0lBR2pFOzs7T0FHRztJQUNILFlBQVksTUFBc0I7UUFDaEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBUFIsa0JBQWEsR0FBcUMsSUFBSSxDQUFDO1FBUzdELGtFQUFrRTtRQUNsRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssMEJBQTBCLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDbEMsNENBQTRDO1lBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbkQsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUNyQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUk7YUFDeEMsQ0FBQyxDQUFDO1lBRUgs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
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Forwarding handler implementations
3
+ */
4
+ export { ForwardingHandler } from './base-handler.js';
5
+ export { HttpForwardingHandler } from './http-handler.js';
6
+ export { HttpsPassthroughHandler } from './https-passthrough-handler.js';
7
+ export { HttpsTerminateToHttpHandler } from './https-terminate-to-http-handler.js';
8
+ export { HttpsTerminateToHttpsHandler } from './https-terminate-to-https-handler.js';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Forwarding handler implementations
3
+ */
4
+ export { ForwardingHandler } from './base-handler.js';
5
+ export { HttpForwardingHandler } from './http-handler.js';
6
+ export { HttpsPassthroughHandler } from './https-passthrough-handler.js';
7
+ export { HttpsTerminateToHttpHandler } from './https-terminate-to-http-handler.js';
8
+ export { HttpsTerminateToHttpsHandler } from './https-terminate-to-https-handler.js';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9mb3J3YXJkaW5nL2hhbmRsZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdUNBQXVDLENBQUMifQ==
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Forwarding system module
3
+ * Provides a flexible and type-safe way to configure and manage various forwarding strategies
4
+ */
5
+ export * from './config/forwarding-types.js';
6
+ export * from './config/domain-config.js';
7
+ export * from './config/domain-manager.js';
8
+ export { ForwardingHandler } from './handlers/base-handler.js';
9
+ export * from './handlers/http-handler.js';
10
+ export * from './handlers/https-passthrough-handler.js';
11
+ export * from './handlers/https-terminate-to-http-handler.js';
12
+ export * from './handlers/https-terminate-to-https-handler.js';
13
+ export * from './factory/forwarding-factory.js';
14
+ export declare const helpers: {
15
+ httpOnly: (partialConfig: Partial<import("./config/forwarding-types.js").IForwardConfig> & Pick<import("./config/forwarding-types.js").IForwardConfig, "target">) => import("./config/forwarding-types.js").IForwardConfig;
16
+ tlsTerminateToHttp: (partialConfig: Partial<import("./config/forwarding-types.js").IForwardConfig> & Pick<import("./config/forwarding-types.js").IForwardConfig, "target">) => import("./config/forwarding-types.js").IForwardConfig;
17
+ tlsTerminateToHttps: (partialConfig: Partial<import("./config/forwarding-types.js").IForwardConfig> & Pick<import("./config/forwarding-types.js").IForwardConfig, "target">) => import("./config/forwarding-types.js").IForwardConfig;
18
+ httpsPassthrough: (partialConfig: Partial<import("./config/forwarding-types.js").IForwardConfig> & Pick<import("./config/forwarding-types.js").IForwardConfig, "target">) => import("./config/forwarding-types.js").IForwardConfig;
19
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Forwarding system module
3
+ * Provides a flexible and type-safe way to configure and manage various forwarding strategies
4
+ */
5
+ // Export types and configuration
6
+ export * from './config/forwarding-types.js';
7
+ export * from './config/domain-config.js';
8
+ export * from './config/domain-manager.js';
9
+ // Export handlers
10
+ export { ForwardingHandler } from './handlers/base-handler.js';
11
+ export * from './handlers/http-handler.js';
12
+ export * from './handlers/https-passthrough-handler.js';
13
+ export * from './handlers/https-terminate-to-http-handler.js';
14
+ export * from './handlers/https-terminate-to-https-handler.js';
15
+ // Export factory
16
+ export * from './factory/forwarding-factory.js';
17
+ // Helper functions as a convenience object
18
+ import { httpOnly, tlsTerminateToHttp, tlsTerminateToHttps, httpsPassthrough } from './config/forwarding-types.js';
19
+ export const helpers = {
20
+ httpOnly,
21
+ tlsTerminateToHttp,
22
+ tlsTerminateToHttps,
23
+ httpsPassthrough
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9mb3J3YXJkaW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILGlDQUFpQztBQUNqQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxrQkFBa0I7QUFDbEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxnREFBZ0QsQ0FBQztBQUUvRCxpQkFBaUI7QUFDakIsY0FBYyxpQ0FBaUMsQ0FBQztBQUVoRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNMLFFBQVEsRUFDUixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNqQixNQUFNLDhCQUE4QixDQUFDO0FBRXRDLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixnQkFBZ0I7Q0FDakIsQ0FBQyJ9
@@ -0,0 +1,15 @@
1
+ /**
2
+ * HTTP functionality module
3
+ */
4
+ export * from './models/http-types.js';
5
+ export * from './port80/index.js';
6
+ export * from './router/index.js';
7
+ export * from './redirects/index.js';
8
+ import { Port80Handler } from './port80/port80-handler.js';
9
+ import { ChallengeResponder } from './port80/challenge-responder.js';
10
+ export declare const Http: {
11
+ Port80: {
12
+ Handler: typeof Port80Handler;
13
+ ChallengeResponder: typeof ChallengeResponder;
14
+ };
15
+ };
@@ -0,0 +1,20 @@
1
+ /**
2
+ * HTTP functionality module
3
+ */
4
+ // Export types and models
5
+ export * from './models/http-types.js';
6
+ // Export submodules
7
+ export * from './port80/index.js';
8
+ export * from './router/index.js';
9
+ export * from './redirects/index.js';
10
+ // Import the components we need for the namespace
11
+ import { Port80Handler } from './port80/port80-handler.js';
12
+ import { ChallengeResponder } from './port80/challenge-responder.js';
13
+ // Convenience namespace exports
14
+ export const Http = {
15
+ Port80: {
16
+ Handler: Port80Handler,
17
+ ChallengeResponder: ChallengeResponder
18
+ }
19
+ };
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9odHRwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsMEJBQTBCO0FBQzFCLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsb0JBQW9CO0FBQ3BCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBRXJDLGtEQUFrRDtBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsZ0NBQWdDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRztJQUNsQixNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUUsYUFBYTtRQUN0QixrQkFBa0IsRUFBRSxrQkFBa0I7S0FDdkM7Q0FDRixDQUFDIn0=
@@ -0,0 +1,81 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { IDomainOptions } from '../../certificate/models/certificate-types.js';
3
+ /**
4
+ * HTTP-specific event types
5
+ */
6
+ export declare enum HttpEvents {
7
+ REQUEST_RECEIVED = "request-received",
8
+ REQUEST_FORWARDED = "request-forwarded",
9
+ REQUEST_HANDLED = "request-handled",
10
+ REQUEST_ERROR = "request-error"
11
+ }
12
+ /**
13
+ * HTTP status codes as an enum for better type safety
14
+ */
15
+ export declare enum HttpStatus {
16
+ OK = 200,
17
+ MOVED_PERMANENTLY = 301,
18
+ FOUND = 302,
19
+ TEMPORARY_REDIRECT = 307,
20
+ PERMANENT_REDIRECT = 308,
21
+ BAD_REQUEST = 400,
22
+ NOT_FOUND = 404,
23
+ METHOD_NOT_ALLOWED = 405,
24
+ INTERNAL_SERVER_ERROR = 500,
25
+ NOT_IMPLEMENTED = 501,
26
+ SERVICE_UNAVAILABLE = 503
27
+ }
28
+ /**
29
+ * Represents a domain configuration with certificate status information
30
+ */
31
+ export interface IDomainCertificate {
32
+ options: IDomainOptions;
33
+ certObtained: boolean;
34
+ obtainingInProgress: boolean;
35
+ certificate?: string;
36
+ privateKey?: string;
37
+ expiryDate?: Date;
38
+ lastRenewalAttempt?: Date;
39
+ }
40
+ /**
41
+ * Base error class for HTTP-related errors
42
+ */
43
+ export declare class HttpError extends Error {
44
+ constructor(message: string);
45
+ }
46
+ /**
47
+ * Error related to certificate operations
48
+ */
49
+ export declare class CertificateError extends HttpError {
50
+ readonly domain: string;
51
+ readonly isRenewal: boolean;
52
+ constructor(message: string, domain: string, isRenewal?: boolean);
53
+ }
54
+ /**
55
+ * Error related to server operations
56
+ */
57
+ export declare class ServerError extends HttpError {
58
+ readonly code?: string;
59
+ constructor(message: string, code?: string);
60
+ }
61
+ /**
62
+ * Redirect configuration for HTTP requests
63
+ */
64
+ export interface IRedirectConfig {
65
+ source: string;
66
+ destination: string;
67
+ type: HttpStatus;
68
+ preserveQuery?: boolean;
69
+ }
70
+ /**
71
+ * HTTP router configuration
72
+ */
73
+ export interface IRouterConfig {
74
+ routes: Array<{
75
+ path: string;
76
+ handler: (req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse) => void;
77
+ }>;
78
+ notFoundHandler?: (req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse) => void;
79
+ }
80
+ export { HttpError as Port80HandlerError };
81
+ export { CertificateError as CertError };
@@ -0,0 +1,62 @@
1
+ import * as plugins from '../../plugins.js';
2
+ /**
3
+ * HTTP-specific event types
4
+ */
5
+ export var HttpEvents;
6
+ (function (HttpEvents) {
7
+ HttpEvents["REQUEST_RECEIVED"] = "request-received";
8
+ HttpEvents["REQUEST_FORWARDED"] = "request-forwarded";
9
+ HttpEvents["REQUEST_HANDLED"] = "request-handled";
10
+ HttpEvents["REQUEST_ERROR"] = "request-error";
11
+ })(HttpEvents || (HttpEvents = {}));
12
+ /**
13
+ * HTTP status codes as an enum for better type safety
14
+ */
15
+ export var HttpStatus;
16
+ (function (HttpStatus) {
17
+ HttpStatus[HttpStatus["OK"] = 200] = "OK";
18
+ HttpStatus[HttpStatus["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY";
19
+ HttpStatus[HttpStatus["FOUND"] = 302] = "FOUND";
20
+ HttpStatus[HttpStatus["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT";
21
+ HttpStatus[HttpStatus["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT";
22
+ HttpStatus[HttpStatus["BAD_REQUEST"] = 400] = "BAD_REQUEST";
23
+ HttpStatus[HttpStatus["NOT_FOUND"] = 404] = "NOT_FOUND";
24
+ HttpStatus[HttpStatus["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED";
25
+ HttpStatus[HttpStatus["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
26
+ HttpStatus[HttpStatus["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
27
+ HttpStatus[HttpStatus["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
28
+ })(HttpStatus || (HttpStatus = {}));
29
+ /**
30
+ * Base error class for HTTP-related errors
31
+ */
32
+ export class HttpError extends Error {
33
+ constructor(message) {
34
+ super(message);
35
+ this.name = 'HttpError';
36
+ }
37
+ }
38
+ /**
39
+ * Error related to certificate operations
40
+ */
41
+ export class CertificateError extends HttpError {
42
+ constructor(message, domain, isRenewal = false) {
43
+ super(`${message} for domain ${domain}${isRenewal ? ' (renewal)' : ''}`);
44
+ this.domain = domain;
45
+ this.isRenewal = isRenewal;
46
+ this.name = 'CertificateError';
47
+ }
48
+ }
49
+ /**
50
+ * Error related to server operations
51
+ */
52
+ export class ServerError extends HttpError {
53
+ constructor(message, code) {
54
+ super(message);
55
+ this.code = code;
56
+ this.name = 'ServerError';
57
+ }
58
+ }
59
+ // Backward compatibility interfaces
60
+ export { HttpError as Port80HandlerError };
61
+ export { CertificateError as CertError };
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2h0dHAvbW9kZWxzL2h0dHAtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQU81Qzs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFVBS1g7QUFMRCxXQUFZLFVBQVU7SUFDcEIsbURBQXFDLENBQUE7SUFDckMscURBQXVDLENBQUE7SUFDdkMsaURBQW1DLENBQUE7SUFDbkMsNkNBQStCLENBQUE7QUFDakMsQ0FBQyxFQUxXLFVBQVUsS0FBVixVQUFVLFFBS3JCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxVQVlYO0FBWkQsV0FBWSxVQUFVO0lBQ3BCLHlDQUFRLENBQUE7SUFDUix1RUFBdUIsQ0FBQTtJQUN2QiwrQ0FBVyxDQUFBO0lBQ1gseUVBQXdCLENBQUE7SUFDeEIseUVBQXdCLENBQUE7SUFDeEIsMkRBQWlCLENBQUE7SUFDakIsdURBQWUsQ0FBQTtJQUNmLHlFQUF3QixDQUFBO0lBQ3hCLCtFQUEyQixDQUFBO0lBQzNCLG1FQUFxQixDQUFBO0lBQ3JCLDJFQUF5QixDQUFBO0FBQzNCLENBQUMsRUFaVyxVQUFVLEtBQVYsVUFBVSxRQVlyQjtBQWVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVUsU0FBUSxLQUFLO0lBQ2xDLFlBQVksT0FBZTtRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxTQUFTO0lBQzdDLFlBQ0UsT0FBZSxFQUNDLE1BQWMsRUFDZCxZQUFxQixLQUFLO1FBRTFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sZUFBZSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFIekQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBRzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLFNBQVM7SUFDeEMsWUFBWSxPQUFlLEVBQWtCLElBQWE7UUFDeEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRDRCLFNBQUksR0FBSixJQUFJLENBQVM7UUFFeEQsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBdUJELG9DQUFvQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxJQUFJLGtCQUFrQixFQUFFLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixJQUFJLFNBQVMsRUFBRSxDQUFDIn0=
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Type definitions for SmartAcme interfaces used by ChallengeResponder
3
+ * These reflect the actual SmartAcme API based on the documentation
4
+ */
5
+ import * as plugins from '../../plugins.js';
6
+ /**
7
+ * Structure for SmartAcme certificate result
8
+ */
9
+ export interface ISmartAcmeCert {
10
+ id?: string;
11
+ domainName: string;
12
+ created?: number | Date | string;
13
+ privateKey: string;
14
+ publicKey: string;
15
+ csr?: string;
16
+ validUntil: number | Date | string;
17
+ }
18
+ /**
19
+ * Structure for SmartAcme options
20
+ */
21
+ export interface ISmartAcmeOptions {
22
+ accountEmail: string;
23
+ certManager: ICertManager;
24
+ environment: 'production' | 'integration';
25
+ challengeHandlers: IChallengeHandler<any>[];
26
+ challengePriority?: string[];
27
+ retryOptions?: {
28
+ retries?: number;
29
+ factor?: number;
30
+ minTimeoutMs?: number;
31
+ maxTimeoutMs?: number;
32
+ };
33
+ }
34
+ /**
35
+ * Interface for certificate manager
36
+ */
37
+ export interface ICertManager {
38
+ init(): Promise<void>;
39
+ get(domainName: string): Promise<ISmartAcmeCert | null>;
40
+ put(cert: ISmartAcmeCert): Promise<ISmartAcmeCert>;
41
+ delete(domainName: string): Promise<void>;
42
+ close?(): Promise<void>;
43
+ }
44
+ /**
45
+ * Interface for challenge handler
46
+ */
47
+ export interface IChallengeHandler<T> {
48
+ getSupportedTypes(): string[];
49
+ prepare(ch: T): Promise<void>;
50
+ verify?(ch: T): Promise<void>;
51
+ cleanup(ch: T): Promise<void>;
52
+ checkWetherDomainIsSupported(domain: string): Promise<boolean>;
53
+ }
54
+ /**
55
+ * HTTP-01 challenge type
56
+ */
57
+ export interface IHttp01Challenge {
58
+ type: string;
59
+ token: string;
60
+ keyAuthorization: string;
61
+ webPath: string;
62
+ }
63
+ /**
64
+ * HTTP-01 Memory Handler Interface
65
+ */
66
+ export interface IHttp01MemoryHandler extends IChallengeHandler<IHttp01Challenge> {
67
+ handleRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse, next?: () => void): void;
68
+ }
69
+ /**
70
+ * SmartAcme main class interface
71
+ */
72
+ export interface ISmartAcme {
73
+ start(): Promise<void>;
74
+ stop(): Promise<void>;
75
+ getCertificateForDomain(domain: string): Promise<ISmartAcmeCert>;
76
+ on?(event: string, listener: (data: any) => void): void;
77
+ eventEmitter?: plugins.EventEmitter;
78
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Type definitions for SmartAcme interfaces used by ChallengeResponder
3
+ * These reflect the actual SmartAcme API based on the documentation
4
+ */
5
+ import * as plugins from '../../plugins.js';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNtZS1pbnRlcmZhY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvaHR0cC9wb3J0ODAvYWNtZS1pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUMifQ==
@@ -0,0 +1,53 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import { IncomingMessage, ServerResponse } from 'http';
3
+ import type { ICertificateData } from '../../certificate/models/certificate-types.js';
4
+ /**
5
+ * ChallengeResponder handles ACME HTTP-01 challenges by leveraging SmartAcme
6
+ * It acts as a bridge between the HTTP server and the ACME challenge verification process
7
+ */
8
+ export declare class ChallengeResponder extends plugins.EventEmitter {
9
+ private readonly useProduction;
10
+ private readonly email;
11
+ private readonly certificateStore;
12
+ private smartAcme;
13
+ private http01Handler;
14
+ /**
15
+ * Creates a new challenge responder
16
+ * @param useProduction Whether to use production ACME servers
17
+ * @param email Account email for ACME
18
+ * @param certificateStore Directory to store certificates
19
+ */
20
+ constructor(useProduction?: boolean, email?: string, certificateStore?: string);
21
+ /**
22
+ * Initialize the ACME client
23
+ */
24
+ initialize(): Promise<void>;
25
+ /**
26
+ * Ensure the certificate store directory exists
27
+ */
28
+ private ensureCertificateStore;
29
+ /**
30
+ * Setup event listeners to forward SmartACME events to our own event emitter
31
+ */
32
+ private setupEventListeners;
33
+ /**
34
+ * Handle HTTP request by checking if it's an ACME challenge
35
+ * @param req HTTP request object
36
+ * @param res HTTP response object
37
+ * @returns true if the request was handled, false otherwise
38
+ */
39
+ handleRequest(req: IncomingMessage, res: ServerResponse): boolean;
40
+ /**
41
+ * Request a certificate for a domain
42
+ * @param domain Domain name to request a certificate for
43
+ * @param isRenewal Whether this is a renewal request
44
+ */
45
+ requestCertificate(domain: string, isRenewal?: boolean): Promise<ICertificateData>;
46
+ /**
47
+ * Check if a certificate is expiring soon and trigger renewal if needed
48
+ * @param domain Domain name
49
+ * @param certificate Certificate data
50
+ * @param thresholdDays Days before expiry to trigger renewal
51
+ */
52
+ checkCertificateExpiry(domain: string, certificate: ICertificateData, thresholdDays?: number): void;
53
+ }