@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
@@ -1,22 +1,29 @@
1
- import * as plugins from './plugins.js';
1
+ import * as plugins from '../../plugins.js';
2
+ import type { IReverseProxyConfig } from '../../proxies/network-proxy/models/types.js';
2
3
 
3
4
  /**
4
5
  * Optional path pattern configuration that can be added to proxy configs
5
6
  */
6
- export interface IPathPatternConfig {
7
+ export interface PathPatternConfig {
7
8
  pathPattern?: string;
8
9
  }
9
10
 
11
+ // Backward compatibility
12
+ export type IPathPatternConfig = PathPatternConfig;
13
+
10
14
  /**
11
15
  * Interface for router result with additional metadata
12
16
  */
13
- export interface IRouterResult {
14
- config: plugins.tsclass.network.IReverseProxyConfig;
17
+ export interface RouterResult {
18
+ config: IReverseProxyConfig;
15
19
  pathMatch?: string;
16
20
  pathParams?: Record<string, string>;
17
21
  pathRemainder?: string;
18
22
  }
19
23
 
24
+ // Backward compatibility
25
+ export type IRouterResult = RouterResult;
26
+
20
27
  /**
21
28
  * Router for HTTP reverse proxy requests
22
29
  *
@@ -34,13 +41,13 @@ export interface IRouterResult {
34
41
  */
35
42
  export class ProxyRouter {
36
43
  // Store original configs for reference
37
- private reverseProxyConfigs: plugins.tsclass.network.IReverseProxyConfig[] = [];
44
+ private reverseProxyConfigs: IReverseProxyConfig[] = [];
38
45
  // Default config to use when no match is found (optional)
39
- private defaultConfig?: plugins.tsclass.network.IReverseProxyConfig;
46
+ private defaultConfig?: IReverseProxyConfig;
40
47
  // Store path patterns separately since they're not in the original interface
41
- private pathPatterns: Map<plugins.tsclass.network.IReverseProxyConfig, string> = new Map();
48
+ private pathPatterns: Map<IReverseProxyConfig, string> = new Map();
42
49
  // Logger interface
43
- private logger: {
50
+ private logger: {
44
51
  error: (message: string, data?: any) => void;
45
52
  warn: (message: string, data?: any) => void;
46
53
  info: (message: string, data?: any) => void;
@@ -48,8 +55,8 @@ export class ProxyRouter {
48
55
  };
49
56
 
50
57
  constructor(
51
- configs?: plugins.tsclass.network.IReverseProxyConfig[],
52
- logger?: {
58
+ configs?: IReverseProxyConfig[],
59
+ logger?: {
53
60
  error: (message: string, data?: any) => void;
54
61
  warn: (message: string, data?: any) => void;
55
62
  info: (message: string, data?: any) => void;
@@ -66,12 +73,12 @@ export class ProxyRouter {
66
73
  * Sets a new set of reverse configs to be routed to
67
74
  * @param reverseCandidatesArg Array of reverse proxy configurations
68
75
  */
69
- public setNewProxyConfigs(reverseCandidatesArg: plugins.tsclass.network.IReverseProxyConfig[]): void {
76
+ public setNewProxyConfigs(reverseCandidatesArg: IReverseProxyConfig[]): void {
70
77
  this.reverseProxyConfigs = [...reverseCandidatesArg];
71
-
78
+
72
79
  // Find default config if any (config with "*" as hostname)
73
80
  this.defaultConfig = this.reverseProxyConfigs.find(config => config.hostName === '*');
74
-
81
+
75
82
  this.logger.info(`Router initialized with ${this.reverseProxyConfigs.length} configs (${this.getHostnames().length} unique hosts)`);
76
83
  }
77
84
 
@@ -80,17 +87,17 @@ export class ProxyRouter {
80
87
  * @param req The incoming HTTP request
81
88
  * @returns The matching proxy config or undefined if no match found
82
89
  */
83
- public routeReq(req: plugins.http.IncomingMessage): plugins.tsclass.network.IReverseProxyConfig {
90
+ public routeReq(req: plugins.http.IncomingMessage): IReverseProxyConfig {
84
91
  const result = this.routeReqWithDetails(req);
85
92
  return result ? result.config : undefined;
86
93
  }
87
-
94
+
88
95
  /**
89
96
  * Routes a request with detailed matching information
90
97
  * @param req The incoming HTTP request
91
98
  * @returns Detailed routing result including matched config and path information
92
99
  */
93
- public routeReqWithDetails(req: plugins.http.IncomingMessage): IRouterResult | undefined {
100
+ public routeReqWithDetails(req: plugins.http.IncomingMessage): RouterResult | undefined {
94
101
  // Extract and validate host header
95
102
  const originalHost = req.headers.host;
96
103
  if (!originalHost) {
@@ -202,7 +209,7 @@ export class ProxyRouter {
202
209
  /**
203
210
  * Find a config for a specific host and path
204
211
  */
205
- private findConfigForHost(hostname: string, path: string): IRouterResult | undefined {
212
+ private findConfigForHost(hostname: string, path: string): RouterResult | undefined {
206
213
  // Find all configs for this hostname
207
214
  const configs = this.reverseProxyConfigs.filter(
208
215
  config => config.hostName.toLowerCase() === hostname.toLowerCase()
@@ -349,7 +356,7 @@ export class ProxyRouter {
349
356
  * Gets all currently active proxy configurations
350
357
  * @returns Array of all active configurations
351
358
  */
352
- public getProxyConfigs(): plugins.tsclass.network.IReverseProxyConfig[] {
359
+ public getProxyConfigs(): IReverseProxyConfig[] {
353
360
  return [...this.reverseProxyConfigs];
354
361
  }
355
362
 
@@ -373,7 +380,7 @@ export class ProxyRouter {
373
380
  * @param pathPattern Optional path pattern for route matching
374
381
  */
375
382
  public addProxyConfig(
376
- config: plugins.tsclass.network.IReverseProxyConfig,
383
+ config: IReverseProxyConfig,
377
384
  pathPattern?: string
378
385
  ): void {
379
386
  this.reverseProxyConfigs.push(config);
@@ -391,7 +398,7 @@ export class ProxyRouter {
391
398
  * @returns Boolean indicating if the config was found and updated
392
399
  */
393
400
  public setPathPattern(
394
- config: plugins.tsclass.network.IReverseProxyConfig,
401
+ config: IReverseProxyConfig,
395
402
  pathPattern: string
396
403
  ): boolean {
397
404
  const exists = this.reverseProxyConfigs.includes(config);
package/ts/index.ts CHANGED
@@ -1,12 +1,35 @@
1
- export * from './nfttablesproxy/classes.nftablesproxy.js';
2
- export * from './networkproxy/index.js';
3
- export * from './port80handler/classes.port80handler.js';
1
+ /**
2
+ * SmartProxy main module exports
3
+ */
4
+
5
+ // Legacy exports (to maintain backward compatibility)
6
+ // Migrated to the new proxies structure
7
+ export * from './proxies/nftables-proxy/index.js';
8
+ export * from './proxies/network-proxy/index.js';
9
+ // Export port80handler elements selectively to avoid conflicts
10
+ export {
11
+ Port80Handler,
12
+ Port80HandlerError as HttpError,
13
+ ServerError,
14
+ CertificateError
15
+ } from './http/port80/port80-handler.js';
16
+ // Use re-export to control the names
17
+ export { Port80HandlerEvents } from './certificate/events/certificate-events.js';
18
+
4
19
  export * from './redirect/classes.redirect.js';
5
- export * from './smartproxy/classes.smartproxy.js';
6
- export * from './smartproxy/classes.pp.snihandler.js';
7
- export * from './smartproxy/classes.pp.interfaces.js';
20
+ export * from './proxies/smart-proxy/index.js';
21
+ // Original: export * from './smartproxy/classes.pp.snihandler.js'
22
+ // Now we export from the new module
23
+ export { SniHandler } from './tls/sni/sni-handler.js';
24
+ // Original: export * from './smartproxy/classes.pp.interfaces.js'
25
+ // Now we export from the new module
26
+ export * from './proxies/smart-proxy/models/interfaces.js';
8
27
 
9
- export * from './common/types.js';
28
+ // Core types and utilities
29
+ export * from './core/models/common-types.js';
10
30
 
11
- // Export forwarding system
12
- export * as forwarding from './smartproxy/forwarding/index.js';
31
+ // Modular exports for new architecture
32
+ export * as forwarding from './forwarding/index.js';
33
+ export * as certificate from './certificate/index.js';
34
+ export * as tls from './tls/index.js';
35
+ export * as http from './http/index.js';
package/ts/plugins.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  // node native scope
2
2
  import { EventEmitter } from 'events';
3
+ import * as fs from 'fs';
3
4
  import * as http from 'http';
4
5
  import * as https from 'https';
5
6
  import * as net from 'net';
@@ -7,7 +8,7 @@ import * as tls from 'tls';
7
8
  import * as url from 'url';
8
9
  import * as http2 from 'http2';
9
10
 
10
- export { EventEmitter, http, https, net, tls, url, http2 };
11
+ export { EventEmitter, fs, http, https, net, tls, url, http2 };
11
12
 
12
13
  // tsclass scope
13
14
  import * as tsclass from '@tsclass/tsclass';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Proxy implementations module
3
+ */
4
+
5
+ // Export submodules
6
+ export * from './smart-proxy/index.js';
7
+ export * from './network-proxy/index.js';
8
+ export * from './nftables-proxy/index.js';
@@ -1,13 +1,13 @@
1
- import * as plugins from '../plugins.js';
1
+ import * as plugins from '../../plugins.js';
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { fileURLToPath } from 'url';
5
- import { type INetworkProxyOptions, type ICertificateEntry, type ILogger, createLogger } from './classes.np.types.js';
6
- import { Port80Handler } from '../port80handler/classes.port80handler.js';
7
- import { Port80HandlerEvents } from '../common/types.js';
8
- import { buildPort80Handler } from '../common/acmeFactory.js';
9
- import { subscribeToPort80Handler } from '../common/eventUtils.js';
10
- import type { IDomainOptions } from '../common/types.js';
5
+ import { type INetworkProxyOptions, type ICertificateEntry, type ILogger, createLogger } from './models/types.js';
6
+ import { Port80Handler } from '../../http/port80/port80-handler.js';
7
+ import { CertificateEvents } from '../../certificate/events/certificate-events.js';
8
+ import { buildPort80Handler } from '../../certificate/acme/acme-factory.js';
9
+ import { subscribeToPort80Handler } from '../../core/utils/event-utils.js';
10
+ import type { IDomainOptions } from '../../certificate/models/certificate-types.js';
11
11
 
12
12
  /**
13
13
  * Manages SSL certificates for NetworkProxy including ACME integration
@@ -20,7 +20,7 @@ export class CertificateManager {
20
20
  private certificateStoreDir: string;
21
21
  private logger: ILogger;
22
22
  private httpsServer: plugins.https.Server | null = null;
23
-
23
+
24
24
  constructor(private options: INetworkProxyOptions) {
25
25
  this.certificateStoreDir = path.resolve(options.acme?.certificateStore || './certs');
26
26
  this.logger = createLogger(options.logLevel || 'info');
@@ -43,8 +43,9 @@ export class CertificateManager {
43
43
  */
44
44
  public loadDefaultCertificates(): void {
45
45
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
46
- const certPath = path.join(__dirname, '..', '..', 'assets', 'certs');
47
-
46
+ // Fix the path to look for certificates at the project root instead of inside ts directory
47
+ const certPath = path.join(__dirname, '..', '..', '..', 'assets', 'certs');
48
+
48
49
  try {
49
50
  this.defaultCertificates = {
50
51
  key: fs.readFileSync(path.join(certPath, 'key.pem'), 'utf8'),
@@ -53,7 +54,7 @@ export class CertificateManager {
53
54
  this.logger.info('Default certificates loaded successfully');
54
55
  } catch (error) {
55
56
  this.logger.error('Error loading default certificates', error);
56
-
57
+
57
58
  // Generate self-signed fallback certificates
58
59
  try {
59
60
  // This is a placeholder for actual certificate generation code
@@ -94,10 +95,10 @@ export class CertificateManager {
94
95
  // Clean up existing handler if needed
95
96
  if (this.port80Handler !== handler) {
96
97
  // Unregister event handlers to avoid memory leaks
97
- this.port80Handler.removeAllListeners(Port80HandlerEvents.CERTIFICATE_ISSUED);
98
- this.port80Handler.removeAllListeners(Port80HandlerEvents.CERTIFICATE_RENEWED);
99
- this.port80Handler.removeAllListeners(Port80HandlerEvents.CERTIFICATE_FAILED);
100
- this.port80Handler.removeAllListeners(Port80HandlerEvents.CERTIFICATE_EXPIRING);
98
+ this.port80Handler.removeAllListeners(CertificateEvents.CERTIFICATE_ISSUED);
99
+ this.port80Handler.removeAllListeners(CertificateEvents.CERTIFICATE_RENEWED);
100
+ this.port80Handler.removeAllListeners(CertificateEvents.CERTIFICATE_FAILED);
101
+ this.port80Handler.removeAllListeners(CertificateEvents.CERTIFICATE_EXPIRING);
101
102
  }
102
103
  }
103
104
 
@@ -218,7 +219,7 @@ export class CertificateManager {
218
219
 
219
220
  if (!certData) {
220
221
  this.logger.info(`No certificate found for ${domain}, registering for issuance`);
221
-
222
+
222
223
  // Register with new domain options format
223
224
  const domainOptions: IDomainOptions = {
224
225
  domainName: domain,
@@ -1,5 +1,5 @@
1
- import * as plugins from '../plugins.js';
2
- import { type INetworkProxyOptions, type IConnectionEntry, type ILogger, createLogger } from './classes.np.types.js';
1
+ import * as plugins from '../../plugins.js';
2
+ import { type INetworkProxyOptions, type IConnectionEntry, type ILogger, createLogger } from './models/types.js';
3
3
 
4
4
  /**
5
5
  * Manages a pool of backend connections for efficient reuse
@@ -8,7 +8,7 @@ export class ConnectionPool {
8
8
  private connectionPool: Map<string, Array<IConnectionEntry>> = new Map();
9
9
  private roundRobinPositions: Map<string, number> = new Map();
10
10
  private logger: ILogger;
11
-
11
+
12
12
  constructor(private options: INetworkProxyOptions) {
13
13
  this.logger = createLogger(options.logLevel || 'info');
14
14
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * NetworkProxy implementation
3
+ */
4
+ // Re-export models
5
+ export * from './models/index.js';
6
+
7
+ // Export NetworkProxy and supporting classes
8
+ export { NetworkProxy } from './network-proxy.js';
9
+ export { CertificateManager } from './certificate-manager.js';
10
+ export { ConnectionPool } from './connection-pool.js';
11
+ export { RequestHandler } from './request-handler.js';
12
+ export type { IMetricsTracker, MetricsTracker } from './request-handler.js';
13
+ export { WebSocketHandler } from './websocket-handler.js';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * NetworkProxy models
3
+ */
4
+ export * from './types.js';
@@ -1,9 +1,5 @@
1
- import * as plugins from '../plugins.js';
2
-
3
- /**
4
- * Configuration options for NetworkProxy
5
- */
6
- import type { IAcmeOptions } from '../common/types.js';
1
+ import * as plugins from '../../../plugins.js';
2
+ import type { IAcmeOptions } from '../../../certificate/models/certificate-types.js';
7
3
 
8
4
  /**
9
5
  * Configuration options for NetworkProxy
@@ -20,14 +16,14 @@ export interface INetworkProxyOptions {
20
16
  allowHeaders?: string;
21
17
  maxAge?: number;
22
18
  };
23
-
24
- // Settings for PortProxy integration
19
+
20
+ // Settings for SmartProxy integration
25
21
  connectionPoolSize?: number; // Maximum connections to maintain in the pool to each backend
26
- portProxyIntegration?: boolean; // Flag to indicate this proxy is used by PortProxy
22
+ portProxyIntegration?: boolean; // Flag to indicate this proxy is used by SmartProxy
27
23
  useExternalPort80Handler?: boolean; // Flag to indicate using external Port80Handler
28
24
  // Protocol to use when proxying to backends: HTTP/1.x or HTTP/2
29
25
  backendProtocol?: 'http1' | 'http2';
30
-
26
+
31
27
  // ACME certificate management options
32
28
  acme?: IAcmeOptions;
33
29
  }
@@ -100,7 +96,7 @@ export function createLogger(logLevel: string = 'info'): ILogger {
100
96
  info: 2,
101
97
  debug: 3
102
98
  };
103
-
99
+
104
100
  return {
105
101
  debug: (message: string, data?: any) => {
106
102
  if (logLevels[logLevel] >= logLevels.debug) {
@@ -1,11 +1,18 @@
1
- import * as plugins from '../plugins.js';
2
- import { type INetworkProxyOptions, type ILogger, createLogger, type IReverseProxyConfig } from './classes.np.types.js';
3
- import { CertificateManager } from './classes.np.certificatemanager.js';
4
- import { ConnectionPool } from './classes.np.connectionpool.js';
5
- import { RequestHandler, type IMetricsTracker } from './classes.np.requesthandler.js';
6
- import { WebSocketHandler } from './classes.np.websockethandler.js';
7
- import { ProxyRouter } from '../classes.router.js';
8
- import { Port80Handler } from '../port80handler/classes.port80handler.js';
1
+ import * as plugins from '../../plugins.js';
2
+ import {
3
+ createLogger
4
+ } from './models/types.js';
5
+ import type {
6
+ INetworkProxyOptions,
7
+ ILogger,
8
+ IReverseProxyConfig
9
+ } from './models/types.js';
10
+ import { CertificateManager } from './certificate-manager.js';
11
+ import { ConnectionPool } from './connection-pool.js';
12
+ import { RequestHandler, type IMetricsTracker } from './request-handler.js';
13
+ import { WebSocketHandler } from './websocket-handler.js';
14
+ import { ProxyRouter } from '../../http/router/index.js';
15
+ import { Port80Handler } from '../../http/port80/port80-handler.js';
9
16
 
10
17
  /**
11
18
  * NetworkProxy provides a reverse proxy with TLS termination, WebSocket support,
@@ -38,7 +45,7 @@ export class NetworkProxy implements IMetricsTracker {
38
45
  public requestsServed: number = 0;
39
46
  public failedRequests: number = 0;
40
47
 
41
- // Tracking for PortProxy integration
48
+ // Tracking for SmartProxy integration
42
49
  private portProxyConnections: number = 0;
43
50
  private tlsTerminatedConnections: number = 0;
44
51
 
@@ -66,7 +73,7 @@ export class NetworkProxy implements IMetricsTracker {
66
73
  allowHeaders: 'Content-Type, Authorization',
67
74
  maxAge: 86400
68
75
  },
69
- // Defaults for PortProxy integration
76
+ // Defaults for SmartProxy integration
70
77
  connectionPoolSize: optionsArg.connectionPoolSize || 50,
71
78
  portProxyIntegration: optionsArg.portProxyIntegration || false,
72
79
  useExternalPort80Handler: optionsArg.useExternalPort80Handler || false,
@@ -114,7 +121,7 @@ export class NetworkProxy implements IMetricsTracker {
114
121
 
115
122
  /**
116
123
  * Returns the port number this NetworkProxy is listening on
117
- * Useful for PortProxy to determine where to forward connections
124
+ * Useful for SmartProxy to determine where to forward connections
118
125
  */
119
126
  public getListeningPort(): number {
120
127
  return this.options.port;
@@ -152,7 +159,7 @@ export class NetworkProxy implements IMetricsTracker {
152
159
 
153
160
  /**
154
161
  * Returns current server metrics
155
- * Useful for PortProxy to determine which NetworkProxy to use for load balancing
162
+ * Useful for SmartProxy to determine which NetworkProxy to use for load balancing
156
163
  */
157
164
  public getMetrics(): any {
158
165
  return {
@@ -247,14 +254,14 @@ export class NetworkProxy implements IMetricsTracker {
247
254
  this.socketMap.add(connection);
248
255
  this.connectedClients = this.socketMap.getArray().length;
249
256
 
250
- // Check for connection from PortProxy by inspecting the source port
257
+ // Check for connection from SmartProxy by inspecting the source port
251
258
  const localPort = connection.localPort || 0;
252
259
  const remotePort = connection.remotePort || 0;
253
260
 
254
- // If this connection is from a PortProxy (usually indicated by it coming from localhost)
261
+ // If this connection is from a SmartProxy (usually indicated by it coming from localhost)
255
262
  if (this.options.portProxyIntegration && connection.remoteAddress?.includes('127.0.0.1')) {
256
263
  this.portProxyConnections++;
257
- this.logger.debug(`New connection from PortProxy (local: ${localPort}, remote: ${remotePort})`);
264
+ this.logger.debug(`New connection from SmartProxy (local: ${localPort}, remote: ${remotePort})`);
258
265
  } else {
259
266
  this.logger.debug(`New direct connection (local: ${localPort}, remote: ${remotePort})`);
260
267
  }
@@ -265,7 +272,7 @@ export class NetworkProxy implements IMetricsTracker {
265
272
  this.socketMap.remove(connection);
266
273
  this.connectedClients = this.socketMap.getArray().length;
267
274
 
268
- // If this was a PortProxy connection, decrement the counter
275
+ // If this was a SmartProxy connection, decrement the counter
269
276
  if (this.options.portProxyIntegration && connection.remoteAddress?.includes('127.0.0.1')) {
270
277
  this.portProxyConnections--;
271
278
  }
@@ -321,7 +328,7 @@ export class NetworkProxy implements IMetricsTracker {
321
328
  * Updates proxy configurations
322
329
  */
323
330
  public async updateProxyConfigs(
324
- proxyConfigsArg: plugins.tsclass.network.IReverseProxyConfig[]
331
+ proxyConfigsArg: IReverseProxyConfig[]
325
332
  ): Promise<void> {
326
333
  this.logger.info(`Updating proxy configurations (${proxyConfigsArg.length} configs)`);
327
334
 
@@ -366,20 +373,20 @@ export class NetworkProxy implements IMetricsTracker {
366
373
  }
367
374
 
368
375
  /**
369
- * Converts PortProxy domain configurations to NetworkProxy configs
370
- * @param domainConfigs PortProxy domain configs
376
+ * Converts SmartProxy domain configurations to NetworkProxy configs
377
+ * @param domainConfigs SmartProxy domain configs
371
378
  * @param sslKeyPair Default SSL key pair to use if not specified
372
379
  * @returns Array of NetworkProxy configs
373
380
  */
374
- public convertPortProxyConfigs(
381
+ public convertSmartProxyConfigs(
375
382
  domainConfigs: Array<{
376
383
  domains: string[];
377
384
  targetIPs?: string[];
378
385
  allowedIPs?: string[];
379
386
  }>,
380
387
  sslKeyPair?: { key: string; cert: string }
381
- ): plugins.tsclass.network.IReverseProxyConfig[] {
382
- const proxyConfigs: plugins.tsclass.network.IReverseProxyConfig[] = [];
388
+ ): IReverseProxyConfig[] {
389
+ const proxyConfigs: IReverseProxyConfig[] = [];
383
390
 
384
391
  // Use default certificates if not provided
385
392
  const defaultCerts = this.certificateManager.getDefaultCertificates();
@@ -404,7 +411,7 @@ export class NetworkProxy implements IMetricsTracker {
404
411
  }
405
412
  }
406
413
 
407
- this.logger.info(`Converted ${domainConfigs.length} PortProxy configs to ${proxyConfigs.length} NetworkProxy configs`);
414
+ this.logger.info(`Converted ${domainConfigs.length} SmartProxy configs to ${proxyConfigs.length} NetworkProxy configs`);
408
415
  return proxyConfigs;
409
416
  }
410
417
 
@@ -471,7 +478,7 @@ export class NetworkProxy implements IMetricsTracker {
471
478
  /**
472
479
  * Gets all proxy configurations currently in use
473
480
  */
474
- public getProxyConfigs(): plugins.tsclass.network.IReverseProxyConfig[] {
481
+ public getProxyConfigs(): IReverseProxyConfig[] {
475
482
  return [...this.proxyConfigs];
476
483
  }
477
484
  }
@@ -1,7 +1,7 @@
1
- import * as plugins from '../plugins.js';
2
- import { type INetworkProxyOptions, type ILogger, createLogger, type IReverseProxyConfig } from './classes.np.types.js';
3
- import { ConnectionPool } from './classes.np.connectionpool.js';
4
- import { ProxyRouter } from '../classes.router.js';
1
+ import * as plugins from '../../plugins.js';
2
+ import { type INetworkProxyOptions, type ILogger, createLogger, type IReverseProxyConfig } from './models/types.js';
3
+ import { ConnectionPool } from './connection-pool.js';
4
+ import { ProxyRouter } from '../../http/router/index.js';
5
5
 
6
6
  /**
7
7
  * Interface for tracking metrics
@@ -11,6 +11,9 @@ export interface IMetricsTracker {
11
11
  incrementFailedRequests(): void;
12
12
  }
13
13
 
14
+ // Backward compatibility
15
+ export type MetricsTracker = IMetricsTracker;
16
+
14
17
  /**
15
18
  * Handles HTTP request processing and proxying
16
19
  */
@@ -20,7 +23,7 @@ export class RequestHandler {
20
23
  private metricsTracker: IMetricsTracker | null = null;
21
24
  // HTTP/2 client sessions for backend proxying
22
25
  private h2Sessions: Map<string, plugins.http2.ClientHttp2Session> = new Map();
23
-
26
+
24
27
  constructor(
25
28
  private options: INetworkProxyOptions,
26
29
  private connectionPool: ConnectionPool,
@@ -423,7 +426,7 @@ export class RequestHandler {
423
426
  outboundHeaders[key] = value;
424
427
  }
425
428
  }
426
- if (outboundHeaders.host && (proxyConfig as any).rewriteHostHeader) {
429
+ if (outboundHeaders.host && (proxyConfig as IReverseProxyConfig).rewriteHostHeader) {
427
430
  outboundHeaders.host = `${destination.host}:${destination.port}`;
428
431
  }
429
432
  // Create HTTP/1 proxy request
@@ -433,7 +436,9 @@ export class RequestHandler {
433
436
  // Map status and headers back to HTTP/2
434
437
  const responseHeaders: Record<string, number|string|string[]> = {};
435
438
  for (const [k, v] of Object.entries(proxyRes.headers)) {
436
- if (v !== undefined) responseHeaders[k] = v;
439
+ if (v !== undefined) {
440
+ responseHeaders[k] = v as string | string[];
441
+ }
437
442
  }
438
443
  stream.respond({ ':status': proxyRes.statusCode || 500, ...responseHeaders });
439
444
  proxyRes.pipe(stream);
@@ -1,7 +1,7 @@
1
- import * as plugins from '../plugins.js';
2
- import { type INetworkProxyOptions, type IWebSocketWithHeartbeat, type ILogger, createLogger, type IReverseProxyConfig } from './classes.np.types.js';
3
- import { ConnectionPool } from './classes.np.connectionpool.js';
4
- import { ProxyRouter } from '../classes.router.js';
1
+ import * as plugins from '../../plugins.js';
2
+ import { type INetworkProxyOptions, type IWebSocketWithHeartbeat, type ILogger, createLogger, type IReverseProxyConfig } from './models/types.js';
3
+ import { ConnectionPool } from './connection-pool.js';
4
+ import { ProxyRouter } from '../../http/router/index.js';
5
5
 
6
6
  /**
7
7
  * Handles WebSocket connections and proxying
@@ -10,7 +10,7 @@ export class WebSocketHandler {
10
10
  private heartbeatInterval: NodeJS.Timeout | null = null;
11
11
  private wsServer: plugins.ws.WebSocketServer | null = null;
12
12
  private logger: ILogger;
13
-
13
+
14
14
  constructor(
15
15
  private options: INetworkProxyOptions,
16
16
  private connectionPool: ConnectionPool,
@@ -56,7 +56,7 @@ export class WebSocketHandler {
56
56
  }
57
57
 
58
58
  this.logger.debug(`WebSocket heartbeat check for ${this.wsServer.clients.size} clients`);
59
-
59
+
60
60
  this.wsServer.clients.forEach((ws: plugins.wsDefault) => {
61
61
  const wsWithHeartbeat = ws as IWebSocketWithHeartbeat;
62
62
 
@@ -0,0 +1,5 @@
1
+ /**
2
+ * NfTablesProxy implementation
3
+ */
4
+ export * from './nftables-proxy.js';
5
+ export * from './models/index.js';
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Custom error classes for better error handling
3
+ */
4
+ export class NftBaseError extends Error {
5
+ constructor(message: string) {
6
+ super(message);
7
+ this.name = 'NftBaseError';
8
+ }
9
+ }
10
+
11
+ export class NftValidationError extends NftBaseError {
12
+ constructor(message: string) {
13
+ super(message);
14
+ this.name = 'NftValidationError';
15
+ }
16
+ }
17
+
18
+ export class NftExecutionError extends NftBaseError {
19
+ constructor(message: string) {
20
+ super(message);
21
+ this.name = 'NftExecutionError';
22
+ }
23
+ }
24
+
25
+ export class NftResourceError extends NftBaseError {
26
+ constructor(message: string) {
27
+ super(message);
28
+ this.name = 'NftResourceError';
29
+ }
30
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Export all models
3
+ */
4
+ export * from './interfaces.js';
5
+ export * from './errors.js';