@push.rocks/smartproxy 22.4.2 → 23.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/changelog.md +36 -0
  2. package/dist_rust/rustproxy +0 -0
  3. package/dist_ts/00_commitinfo_data.js +1 -1
  4. package/dist_ts/index.d.ts +1 -6
  5. package/dist_ts/index.js +3 -11
  6. package/dist_ts/protocols/common/fragment-handler.js +5 -1
  7. package/dist_ts/proxies/index.d.ts +1 -6
  8. package/dist_ts/proxies/index.js +2 -8
  9. package/dist_ts/proxies/smart-proxy/index.d.ts +5 -10
  10. package/dist_ts/proxies/smart-proxy/index.js +7 -13
  11. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +5 -2
  12. package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
  13. package/dist_ts/proxies/smart-proxy/route-preprocessor.d.ts +37 -0
  14. package/dist_ts/proxies/smart-proxy/route-preprocessor.js +103 -0
  15. package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +23 -0
  16. package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +104 -0
  17. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.d.ts +74 -0
  18. package/dist_ts/proxies/smart-proxy/rust-metrics-adapter.js +146 -0
  19. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +49 -0
  20. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +259 -0
  21. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +39 -157
  22. package/dist_ts/proxies/smart-proxy/smart-proxy.js +224 -621
  23. package/dist_ts/proxies/smart-proxy/socket-handler-server.d.ts +45 -0
  24. package/dist_ts/proxies/smart-proxy/socket-handler-server.js +253 -0
  25. package/dist_ts/routing/index.d.ts +1 -1
  26. package/dist_ts/routing/index.js +3 -3
  27. package/dist_ts/routing/models/http-types.d.ts +119 -4
  28. package/dist_ts/routing/models/http-types.js +93 -5
  29. package/package.json +1 -1
  30. package/readme.md +444 -219
  31. package/ts/00_commitinfo_data.ts +1 -1
  32. package/ts/index.ts +4 -15
  33. package/ts/protocols/common/fragment-handler.ts +4 -0
  34. package/ts/proxies/index.ts +1 -12
  35. package/ts/proxies/smart-proxy/index.ts +6 -13
  36. package/ts/proxies/smart-proxy/models/interfaces.ts +6 -4
  37. package/ts/proxies/smart-proxy/models/route-types.ts +0 -2
  38. package/ts/proxies/smart-proxy/route-preprocessor.ts +122 -0
  39. package/ts/proxies/smart-proxy/rust-binary-locator.ts +112 -0
  40. package/ts/proxies/smart-proxy/rust-metrics-adapter.ts +161 -0
  41. package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +310 -0
  42. package/ts/proxies/smart-proxy/smart-proxy.ts +282 -798
  43. package/ts/proxies/smart-proxy/socket-handler-server.ts +279 -0
  44. package/ts/routing/index.ts +2 -2
  45. package/ts/routing/models/http-types.ts +147 -4
  46. package/dist_ts/proxies/nftables-proxy/index.d.ts +0 -6
  47. package/dist_ts/proxies/nftables-proxy/index.js +0 -7
  48. package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +0 -15
  49. package/dist_ts/proxies/nftables-proxy/models/errors.js +0 -28
  50. package/dist_ts/proxies/nftables-proxy/models/index.d.ts +0 -5
  51. package/dist_ts/proxies/nftables-proxy/models/index.js +0 -6
  52. package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +0 -75
  53. package/dist_ts/proxies/nftables-proxy/models/interfaces.js +0 -5
  54. package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +0 -124
  55. package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +0 -1374
  56. package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +0 -9
  57. package/dist_ts/proxies/nftables-proxy/utils/index.js +0 -12
  58. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +0 -66
  59. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +0 -131
  60. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +0 -39
  61. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +0 -112
  62. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +0 -59
  63. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +0 -130
  64. package/ts/proxies/http-proxy/connection-pool.ts +0 -228
  65. package/ts/proxies/http-proxy/context-creator.ts +0 -145
  66. package/ts/proxies/http-proxy/default-certificates.ts +0 -150
  67. package/ts/proxies/http-proxy/function-cache.ts +0 -279
  68. package/ts/proxies/http-proxy/handlers/index.ts +0 -5
  69. package/ts/proxies/http-proxy/http-proxy.ts +0 -669
  70. package/ts/proxies/http-proxy/http-request-handler.ts +0 -331
  71. package/ts/proxies/http-proxy/http2-request-handler.ts +0 -255
  72. package/ts/proxies/http-proxy/index.ts +0 -18
  73. package/ts/proxies/http-proxy/models/http-types.ts +0 -148
  74. package/ts/proxies/http-proxy/models/index.ts +0 -5
  75. package/ts/proxies/http-proxy/models/types.ts +0 -125
  76. package/ts/proxies/http-proxy/request-handler.ts +0 -878
  77. package/ts/proxies/http-proxy/security-manager.ts +0 -413
  78. package/ts/proxies/http-proxy/websocket-handler.ts +0 -581
  79. package/ts/proxies/nftables-proxy/index.ts +0 -6
  80. package/ts/proxies/nftables-proxy/models/errors.ts +0 -30
  81. package/ts/proxies/nftables-proxy/models/index.ts +0 -5
  82. package/ts/proxies/nftables-proxy/models/interfaces.ts +0 -94
  83. package/ts/proxies/nftables-proxy/nftables-proxy.ts +0 -1754
  84. package/ts/proxies/nftables-proxy/utils/index.ts +0 -38
  85. package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +0 -162
  86. package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +0 -125
  87. package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +0 -156
  88. package/ts/proxies/smart-proxy/acme-state-manager.ts +0 -112
  89. package/ts/proxies/smart-proxy/cert-store.ts +0 -92
  90. package/ts/proxies/smart-proxy/certificate-manager.ts +0 -895
  91. package/ts/proxies/smart-proxy/connection-manager.ts +0 -809
  92. package/ts/proxies/smart-proxy/http-proxy-bridge.ts +0 -213
  93. package/ts/proxies/smart-proxy/metrics-collector.ts +0 -453
  94. package/ts/proxies/smart-proxy/nftables-manager.ts +0 -271
  95. package/ts/proxies/smart-proxy/port-manager.ts +0 -358
  96. package/ts/proxies/smart-proxy/route-connection-handler.ts +0 -1712
  97. package/ts/proxies/smart-proxy/route-orchestrator.ts +0 -297
  98. package/ts/proxies/smart-proxy/security-manager.ts +0 -269
  99. package/ts/proxies/smart-proxy/throughput-tracker.ts +0 -138
  100. package/ts/proxies/smart-proxy/timeout-manager.ts +0 -196
  101. package/ts/proxies/smart-proxy/tls-manager.ts +0 -171
@@ -0,0 +1,45 @@
1
+ import type { RoutePreprocessor } from './route-preprocessor.js';
2
+ /**
3
+ * Unix domain socket server that receives relayed connections from the Rust proxy.
4
+ *
5
+ * When Rust encounters a route of type `socket-handler`, it connects to this
6
+ * Unix socket, sends a JSON metadata line, then proxies the raw TCP bytes.
7
+ * This server reads the metadata, finds the original JS handler, builds an
8
+ * IRouteContext, and hands the socket to the handler.
9
+ */
10
+ export declare class SocketHandlerServer {
11
+ private server;
12
+ private socketPath;
13
+ private preprocessor;
14
+ private activeSockets;
15
+ constructor(preprocessor: RoutePreprocessor);
16
+ /**
17
+ * The Unix socket path this server listens on.
18
+ */
19
+ getSocketPath(): string;
20
+ /**
21
+ * Start listening for relayed connections from Rust.
22
+ */
23
+ start(): Promise<void>;
24
+ /**
25
+ * Stop the server and clean up.
26
+ */
27
+ stop(): Promise<void>;
28
+ /**
29
+ * Handle an incoming relayed connection from Rust.
30
+ *
31
+ * Protocol: Rust sends a single JSON line with metadata, then raw bytes follow.
32
+ * JSON format: { "routeKey": "my-route", "remoteIP": "1.2.3.4", "remotePort": 12345,
33
+ * "localPort": 443, "isTLS": true, "domain": "example.com" }
34
+ */
35
+ private handleConnection;
36
+ /**
37
+ * Dispatch a relayed connection to the appropriate JS handler.
38
+ */
39
+ private dispatchToHandler;
40
+ /**
41
+ * Forward a connection to a dynamically resolved target.
42
+ * Used for routes with function-based host/port that Rust cannot handle.
43
+ */
44
+ private forwardDynamicRoute;
45
+ }
@@ -0,0 +1,253 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import { logger } from '../../core/utils/logger.js';
3
+ /**
4
+ * Unix domain socket server that receives relayed connections from the Rust proxy.
5
+ *
6
+ * When Rust encounters a route of type `socket-handler`, it connects to this
7
+ * Unix socket, sends a JSON metadata line, then proxies the raw TCP bytes.
8
+ * This server reads the metadata, finds the original JS handler, builds an
9
+ * IRouteContext, and hands the socket to the handler.
10
+ */
11
+ export class SocketHandlerServer {
12
+ constructor(preprocessor) {
13
+ this.server = null;
14
+ this.activeSockets = new Set();
15
+ this.preprocessor = preprocessor;
16
+ this.socketPath = `/tmp/smartproxy-relay-${process.pid}.sock`;
17
+ }
18
+ /**
19
+ * The Unix socket path this server listens on.
20
+ */
21
+ getSocketPath() {
22
+ return this.socketPath;
23
+ }
24
+ /**
25
+ * Start listening for relayed connections from Rust.
26
+ */
27
+ async start() {
28
+ // Clean up stale socket file
29
+ try {
30
+ await plugins.fs.promises.unlink(this.socketPath);
31
+ }
32
+ catch {
33
+ // Ignore if doesn't exist
34
+ }
35
+ return new Promise((resolve, reject) => {
36
+ this.server = plugins.net.createServer((socket) => {
37
+ this.activeSockets.add(socket);
38
+ socket.on('close', () => this.activeSockets.delete(socket));
39
+ this.handleConnection(socket);
40
+ });
41
+ this.server.on('error', (err) => {
42
+ logger.log('error', `SocketHandlerServer error: ${err.message}`, { component: 'socket-handler-server' });
43
+ });
44
+ this.server.listen(this.socketPath, () => {
45
+ logger.log('info', `SocketHandlerServer listening on ${this.socketPath}`, { component: 'socket-handler-server' });
46
+ resolve();
47
+ });
48
+ this.server.on('error', reject);
49
+ });
50
+ }
51
+ /**
52
+ * Stop the server and clean up.
53
+ */
54
+ async stop() {
55
+ // Destroy all active connections first
56
+ for (const socket of this.activeSockets) {
57
+ socket.destroy();
58
+ }
59
+ this.activeSockets.clear();
60
+ if (this.server) {
61
+ return new Promise((resolve) => {
62
+ this.server.close(() => {
63
+ this.server = null;
64
+ // Clean up socket file
65
+ plugins.fs.unlink(this.socketPath, () => resolve());
66
+ });
67
+ });
68
+ }
69
+ }
70
+ /**
71
+ * Handle an incoming relayed connection from Rust.
72
+ *
73
+ * Protocol: Rust sends a single JSON line with metadata, then raw bytes follow.
74
+ * JSON format: { "routeKey": "my-route", "remoteIP": "1.2.3.4", "remotePort": 12345,
75
+ * "localPort": 443, "isTLS": true, "domain": "example.com" }
76
+ */
77
+ handleConnection(socket) {
78
+ let metadataBuffer = '';
79
+ let metadataParsed = false;
80
+ const onData = (chunk) => {
81
+ if (metadataParsed)
82
+ return;
83
+ metadataBuffer += chunk.toString('utf8');
84
+ const newlineIndex = metadataBuffer.indexOf('\n');
85
+ if (newlineIndex === -1) {
86
+ // Haven't received full metadata line yet
87
+ if (metadataBuffer.length > 8192) {
88
+ logger.log('error', 'Socket handler metadata too large, closing', { component: 'socket-handler-server' });
89
+ socket.destroy();
90
+ }
91
+ return;
92
+ }
93
+ metadataParsed = true;
94
+ socket.removeListener('data', onData);
95
+ socket.pause(); // Prevent data loss between handler removal and pipe setup
96
+ const metadataJson = metadataBuffer.slice(0, newlineIndex);
97
+ const remainingData = metadataBuffer.slice(newlineIndex + 1);
98
+ let metadata;
99
+ try {
100
+ metadata = JSON.parse(metadataJson);
101
+ }
102
+ catch {
103
+ logger.log('error', `Invalid socket handler metadata JSON: ${metadataJson.slice(0, 200)}`, { component: 'socket-handler-server' });
104
+ socket.destroy();
105
+ return;
106
+ }
107
+ this.dispatchToHandler(socket, metadata, remainingData);
108
+ };
109
+ socket.on('data', onData);
110
+ socket.on('error', (err) => {
111
+ logger.log('error', `Socket handler relay error: ${err.message}`, { component: 'socket-handler-server' });
112
+ });
113
+ }
114
+ /**
115
+ * Dispatch a relayed connection to the appropriate JS handler.
116
+ */
117
+ dispatchToHandler(socket, metadata, remainingData) {
118
+ const routeKey = metadata.routeKey;
119
+ if (!routeKey) {
120
+ logger.log('error', 'Socket handler relay missing routeKey', { component: 'socket-handler-server' });
121
+ socket.destroy();
122
+ return;
123
+ }
124
+ const originalRoute = this.preprocessor.getOriginalRoute(routeKey);
125
+ if (!originalRoute) {
126
+ logger.log('error', `No handler found for route: ${routeKey}`, { component: 'socket-handler-server' });
127
+ socket.destroy();
128
+ return;
129
+ }
130
+ // Build route context
131
+ const context = {
132
+ port: metadata.localPort || 0,
133
+ domain: metadata.domain,
134
+ clientIp: metadata.remoteIP || 'unknown',
135
+ serverIp: '0.0.0.0',
136
+ path: metadata.path,
137
+ isTls: metadata.isTLS || false,
138
+ tlsVersion: metadata.tlsVersion,
139
+ routeName: originalRoute.name,
140
+ routeId: originalRoute.id,
141
+ timestamp: Date.now(),
142
+ connectionId: metadata.connectionId || `relay-${Date.now()}`,
143
+ };
144
+ // If there was remaining data after the metadata line, push it back
145
+ if (remainingData.length > 0) {
146
+ socket.unshift(Buffer.from(remainingData, 'utf8'));
147
+ }
148
+ const handler = originalRoute.action.socketHandler;
149
+ if (handler) {
150
+ // Route has an explicit socket handler callback
151
+ try {
152
+ const result = handler(socket, context);
153
+ // If the handler is async, wait for it to finish setup before resuming.
154
+ // This prevents data loss when async handlers need to do work before
155
+ // attaching their `data` listeners.
156
+ if (result && typeof result.then === 'function') {
157
+ result.then(() => {
158
+ socket.resume();
159
+ }).catch((err) => {
160
+ logger.log('error', `Async socket handler rejected for route ${routeKey}: ${err.message}`, { component: 'socket-handler-server' });
161
+ socket.destroy();
162
+ });
163
+ }
164
+ else {
165
+ // Synchronous handler — listeners are already attached, safe to resume.
166
+ socket.resume();
167
+ }
168
+ }
169
+ catch (err) {
170
+ logger.log('error', `Socket handler threw for route ${routeKey}: ${err.message}`, { component: 'socket-handler-server' });
171
+ socket.destroy();
172
+ }
173
+ return;
174
+ }
175
+ // Route has dynamic host/port functions - resolve and forward
176
+ if (originalRoute.action.targets && originalRoute.action.targets.length > 0) {
177
+ this.forwardDynamicRoute(socket, originalRoute, context);
178
+ return;
179
+ }
180
+ logger.log('error', `Route ${routeKey} has no socketHandler and no targets`, { component: 'socket-handler-server' });
181
+ socket.destroy();
182
+ }
183
+ /**
184
+ * Forward a connection to a dynamically resolved target.
185
+ * Used for routes with function-based host/port that Rust cannot handle.
186
+ */
187
+ forwardDynamicRoute(socket, route, context) {
188
+ const targets = route.action.targets;
189
+ // Pick a target (round-robin would be ideal, but simple random for now)
190
+ const target = targets[Math.floor(Math.random() * targets.length)];
191
+ // Resolve host
192
+ let host;
193
+ if (typeof target.host === 'function') {
194
+ try {
195
+ const result = target.host(context);
196
+ host = Array.isArray(result) ? result[Math.floor(Math.random() * result.length)] : result;
197
+ }
198
+ catch (err) {
199
+ logger.log('error', `Dynamic host function failed: ${err.message}`, { component: 'socket-handler-server' });
200
+ socket.destroy();
201
+ return;
202
+ }
203
+ }
204
+ else if (typeof target.host === 'string') {
205
+ host = target.host;
206
+ }
207
+ else if (Array.isArray(target.host)) {
208
+ host = target.host[Math.floor(Math.random() * target.host.length)];
209
+ }
210
+ else {
211
+ host = 'localhost';
212
+ }
213
+ // Resolve port
214
+ let port;
215
+ if (typeof target.port === 'function') {
216
+ try {
217
+ port = target.port(context);
218
+ }
219
+ catch (err) {
220
+ logger.log('error', `Dynamic port function failed: ${err.message}`, { component: 'socket-handler-server' });
221
+ socket.destroy();
222
+ return;
223
+ }
224
+ }
225
+ else if (typeof target.port === 'number') {
226
+ port = target.port;
227
+ }
228
+ else {
229
+ port = context.port;
230
+ }
231
+ logger.log('debug', `Dynamic forward: ${context.clientIp} -> ${host}:${port}`, { component: 'socket-handler-server' });
232
+ // Connect to the resolved target
233
+ const backend = plugins.net.connect(port, host, () => {
234
+ // Pipe bidirectionally
235
+ socket.pipe(backend);
236
+ backend.pipe(socket);
237
+ });
238
+ backend.on('error', (err) => {
239
+ logger.log('error', `Dynamic forward backend error: ${err.message}`, { component: 'socket-handler-server' });
240
+ socket.destroy();
241
+ });
242
+ socket.on('error', () => {
243
+ backend.destroy();
244
+ });
245
+ socket.on('close', () => {
246
+ backend.destroy();
247
+ });
248
+ backend.on('close', () => {
249
+ socket.destroy();
250
+ });
251
+ }
252
+ }
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LWhhbmRsZXItc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJveGllcy9zbWFydC1wcm94eS9zb2NrZXQtaGFuZGxlci1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFJcEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFNOUIsWUFBWSxZQUErQjtRQUxuQyxXQUFNLEdBQThCLElBQUksQ0FBQztRQUd6QyxrQkFBYSxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBR3BELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcseUJBQXlCLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUNoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQiw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwwQkFBMEI7UUFDNUIsQ0FBQztRQUVELE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0Is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
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * Routing functionality module
3
3
  */
4
- export * from '../proxies/http-proxy/models/http-types.js';
4
+ export * from './models/http-types.js';
5
5
  export * from './router/index.js';
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Routing functionality module
3
3
  */
4
- // Export types and models from HttpProxy
5
- export * from '../proxies/http-proxy/models/http-types.js';
4
+ // Export types and models
5
+ export * from './models/http-types.js';
6
6
  // Export router functionality
7
7
  export * from './router/index.js';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yb3V0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgseUNBQXlDO0FBQ3pDLGNBQWMsNENBQTRDLENBQUM7QUFFM0QsOEJBQThCO0FBQzlCLGNBQWMsbUJBQW1CLENBQUMifQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yb3V0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsMEJBQTBCO0FBQzFCLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsOEJBQThCO0FBQzlCLGNBQWMsbUJBQW1CLENBQUMifQ==
@@ -1,6 +1,121 @@
1
1
  /**
2
- * This file re-exports HTTP types from the HttpProxy module
3
- * for backward compatibility. All HTTP types are now consolidated
4
- * in the HttpProxy module.
2
+ * HTTP types for routing module.
3
+ * These were previously in http-proxy and are now self-contained here.
5
4
  */
6
- export * from '../../proxies/http-proxy/models/http-types.js';
5
+ import * as plugins from '../../plugins.js';
6
+ import { HttpStatus as ProtocolHttpStatus } from '../../protocols/http/index.js';
7
+ /**
8
+ * HTTP-specific event types
9
+ */
10
+ export declare enum HttpEvents {
11
+ REQUEST_RECEIVED = "request-received",
12
+ REQUEST_FORWARDED = "request-forwarded",
13
+ REQUEST_HANDLED = "request-handled",
14
+ REQUEST_ERROR = "request-error"
15
+ }
16
+ export declare const HttpStatus: {
17
+ readonly OK: ProtocolHttpStatus.OK;
18
+ readonly MOVED_PERMANENTLY: ProtocolHttpStatus.MOVED_PERMANENTLY;
19
+ readonly FOUND: ProtocolHttpStatus.FOUND;
20
+ readonly TEMPORARY_REDIRECT: ProtocolHttpStatus.TEMPORARY_REDIRECT;
21
+ readonly PERMANENT_REDIRECT: ProtocolHttpStatus.PERMANENT_REDIRECT;
22
+ readonly BAD_REQUEST: ProtocolHttpStatus.BAD_REQUEST;
23
+ readonly UNAUTHORIZED: ProtocolHttpStatus.UNAUTHORIZED;
24
+ readonly FORBIDDEN: ProtocolHttpStatus.FORBIDDEN;
25
+ readonly NOT_FOUND: ProtocolHttpStatus.NOT_FOUND;
26
+ readonly METHOD_NOT_ALLOWED: ProtocolHttpStatus.METHOD_NOT_ALLOWED;
27
+ readonly REQUEST_TIMEOUT: ProtocolHttpStatus.REQUEST_TIMEOUT;
28
+ readonly TOO_MANY_REQUESTS: ProtocolHttpStatus.TOO_MANY_REQUESTS;
29
+ readonly INTERNAL_SERVER_ERROR: ProtocolHttpStatus.INTERNAL_SERVER_ERROR;
30
+ readonly NOT_IMPLEMENTED: ProtocolHttpStatus.NOT_IMPLEMENTED;
31
+ readonly BAD_GATEWAY: ProtocolHttpStatus.BAD_GATEWAY;
32
+ readonly SERVICE_UNAVAILABLE: ProtocolHttpStatus.SERVICE_UNAVAILABLE;
33
+ readonly GATEWAY_TIMEOUT: ProtocolHttpStatus.GATEWAY_TIMEOUT;
34
+ };
35
+ /**
36
+ * Base error class for HTTP-related errors
37
+ */
38
+ export declare class HttpError extends Error {
39
+ readonly statusCode: number;
40
+ constructor(message: string, statusCode?: number);
41
+ }
42
+ /**
43
+ * Error related to certificate operations
44
+ */
45
+ export declare class CertificateError extends HttpError {
46
+ readonly domain: string;
47
+ readonly isRenewal: boolean;
48
+ constructor(message: string, domain: string, isRenewal?: boolean);
49
+ }
50
+ /**
51
+ * Error related to server operations
52
+ */
53
+ export declare class ServerError extends HttpError {
54
+ readonly code?: string;
55
+ constructor(message: string, code?: string, statusCode?: number);
56
+ }
57
+ /**
58
+ * Error for bad requests
59
+ */
60
+ export declare class BadRequestError extends HttpError {
61
+ constructor(message: string);
62
+ }
63
+ /**
64
+ * Error for not found resources
65
+ */
66
+ export declare class NotFoundError extends HttpError {
67
+ constructor(message?: string);
68
+ }
69
+ /**
70
+ * Redirect configuration for HTTP requests
71
+ */
72
+ export interface IRedirectConfig {
73
+ source: string;
74
+ destination: string;
75
+ type: number;
76
+ preserveQuery?: boolean;
77
+ }
78
+ /**
79
+ * HTTP router configuration
80
+ */
81
+ export interface IRouterConfig {
82
+ routes: Array<{
83
+ path: string;
84
+ method?: string;
85
+ handler: (req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse) => void | Promise<void>;
86
+ }>;
87
+ notFoundHandler?: (req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse) => void;
88
+ errorHandler?: (error: Error, req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse) => void;
89
+ }
90
+ /**
91
+ * HTTP request method types
92
+ */
93
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'CONNECT' | 'TRACE';
94
+ /**
95
+ * Helper function to get HTTP status text
96
+ */
97
+ export declare function getStatusText(status: number): string;
98
+ export interface IDomainOptions {
99
+ domainName: string;
100
+ sslRedirect: boolean;
101
+ acmeMaintenance: boolean;
102
+ forward?: {
103
+ ip: string;
104
+ port: number;
105
+ };
106
+ acmeForward?: {
107
+ ip: string;
108
+ port: number;
109
+ };
110
+ }
111
+ export interface IDomainCertificate {
112
+ options: IDomainOptions;
113
+ certObtained: boolean;
114
+ obtainingInProgress: boolean;
115
+ certificate?: string;
116
+ privateKey?: string;
117
+ expiryDate?: Date;
118
+ lastRenewalAttempt?: Date;
119
+ }
120
+ export { HttpError as Port80HandlerError };
121
+ export { CertificateError as CertError };
@@ -1,7 +1,95 @@
1
1
  /**
2
- * This file re-exports HTTP types from the HttpProxy module
3
- * for backward compatibility. All HTTP types are now consolidated
4
- * in the HttpProxy module.
2
+ * HTTP types for routing module.
3
+ * These were previously in http-proxy and are now self-contained here.
5
4
  */
6
- export * from '../../proxies/http-proxy/models/http-types.js';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3JvdXRpbmcvbW9kZWxzL2h0dHAtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILGNBQWMsK0NBQStDLENBQUMifQ==
5
+ import * as plugins from '../../plugins.js';
6
+ import { HttpStatus as ProtocolHttpStatus, getStatusText as getProtocolStatusText } from '../../protocols/http/index.js';
7
+ /**
8
+ * HTTP-specific event types
9
+ */
10
+ export var HttpEvents;
11
+ (function (HttpEvents) {
12
+ HttpEvents["REQUEST_RECEIVED"] = "request-received";
13
+ HttpEvents["REQUEST_FORWARDED"] = "request-forwarded";
14
+ HttpEvents["REQUEST_HANDLED"] = "request-handled";
15
+ HttpEvents["REQUEST_ERROR"] = "request-error";
16
+ })(HttpEvents || (HttpEvents = {}));
17
+ // Re-export for backward compatibility with subset of commonly used codes
18
+ export const HttpStatus = {
19
+ OK: ProtocolHttpStatus.OK,
20
+ MOVED_PERMANENTLY: ProtocolHttpStatus.MOVED_PERMANENTLY,
21
+ FOUND: ProtocolHttpStatus.FOUND,
22
+ TEMPORARY_REDIRECT: ProtocolHttpStatus.TEMPORARY_REDIRECT,
23
+ PERMANENT_REDIRECT: ProtocolHttpStatus.PERMANENT_REDIRECT,
24
+ BAD_REQUEST: ProtocolHttpStatus.BAD_REQUEST,
25
+ UNAUTHORIZED: ProtocolHttpStatus.UNAUTHORIZED,
26
+ FORBIDDEN: ProtocolHttpStatus.FORBIDDEN,
27
+ NOT_FOUND: ProtocolHttpStatus.NOT_FOUND,
28
+ METHOD_NOT_ALLOWED: ProtocolHttpStatus.METHOD_NOT_ALLOWED,
29
+ REQUEST_TIMEOUT: ProtocolHttpStatus.REQUEST_TIMEOUT,
30
+ TOO_MANY_REQUESTS: ProtocolHttpStatus.TOO_MANY_REQUESTS,
31
+ INTERNAL_SERVER_ERROR: ProtocolHttpStatus.INTERNAL_SERVER_ERROR,
32
+ NOT_IMPLEMENTED: ProtocolHttpStatus.NOT_IMPLEMENTED,
33
+ BAD_GATEWAY: ProtocolHttpStatus.BAD_GATEWAY,
34
+ SERVICE_UNAVAILABLE: ProtocolHttpStatus.SERVICE_UNAVAILABLE,
35
+ GATEWAY_TIMEOUT: ProtocolHttpStatus.GATEWAY_TIMEOUT,
36
+ };
37
+ /**
38
+ * Base error class for HTTP-related errors
39
+ */
40
+ export class HttpError extends Error {
41
+ constructor(message, statusCode = HttpStatus.INTERNAL_SERVER_ERROR) {
42
+ super(message);
43
+ this.statusCode = statusCode;
44
+ this.name = 'HttpError';
45
+ }
46
+ }
47
+ /**
48
+ * Error related to certificate operations
49
+ */
50
+ export class CertificateError extends HttpError {
51
+ constructor(message, domain, isRenewal = false) {
52
+ super(`${message} for domain ${domain}${isRenewal ? ' (renewal)' : ''}`, HttpStatus.INTERNAL_SERVER_ERROR);
53
+ this.domain = domain;
54
+ this.isRenewal = isRenewal;
55
+ this.name = 'CertificateError';
56
+ }
57
+ }
58
+ /**
59
+ * Error related to server operations
60
+ */
61
+ export class ServerError extends HttpError {
62
+ constructor(message, code, statusCode = HttpStatus.INTERNAL_SERVER_ERROR) {
63
+ super(message, statusCode);
64
+ this.code = code;
65
+ this.name = 'ServerError';
66
+ }
67
+ }
68
+ /**
69
+ * Error for bad requests
70
+ */
71
+ export class BadRequestError extends HttpError {
72
+ constructor(message) {
73
+ super(message, HttpStatus.BAD_REQUEST);
74
+ this.name = 'BadRequestError';
75
+ }
76
+ }
77
+ /**
78
+ * Error for not found resources
79
+ */
80
+ export class NotFoundError extends HttpError {
81
+ constructor(message = 'Resource not found') {
82
+ super(message, HttpStatus.NOT_FOUND);
83
+ this.name = 'NotFoundError';
84
+ }
85
+ }
86
+ /**
87
+ * Helper function to get HTTP status text
88
+ */
89
+ export function getStatusText(status) {
90
+ return getProtocolStatusText(status);
91
+ }
92
+ // Backward compatibility exports
93
+ export { HttpError as Port80HandlerError };
94
+ export { CertificateError as CertError };
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3JvdXRpbmcvbW9kZWxzL2h0dHAtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxJQUFJLGtCQUFrQixFQUFFLGFBQWEsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXpIOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQixtREFBcUMsQ0FBQTtJQUNyQyxxREFBdUMsQ0FBQTtJQUN2QyxpREFBbUMsQ0FBQTtJQUNuQyw2Q0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFFRCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO0lBQ3pCLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLGlCQUFpQjtJQUN2RCxLQUFLLEVBQUUsa0JBQWtCLENBQUMsS0FBSztJQUMvQixrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0I7SUFDekQsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCO0lBQ3pELFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXO0lBQzNDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxZQUFZO0lBQzdDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTO0lBQ3ZDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTO0lBQ3ZDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLGtCQUFrQjtJQUN6RCxlQUFlLEVBQUUsa0JBQWtCLENBQUMsZUFBZTtJQUNuRCxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQyxpQkFBaUI7SUFDdkQscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMscUJBQXFCO0lBQy9ELGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxlQUFlO0lBQ25ELFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxXQUFXO0lBQzNDLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLG1CQUFtQjtJQUMzRCxlQUFlLEVBQUUsa0JBQWtCLENBQUMsZUFBZTtDQUMzQyxDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBVSxTQUFRLEtBQUs7SUFDbEMsWUFBWSxPQUFlLEVBQWtCLGFBQXFCLFVBQVUsQ0FBQyxxQkFBcUI7UUFDaEcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRDRCLGVBQVUsR0FBVixVQUFVLENBQTJDO1FBRWhHLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFNBQVM7SUFDN0MsWUFDRSxPQUFlLEVBQ0MsTUFBYyxFQUNkLFlBQXFCLEtBQUs7UUFFMUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxlQUFlLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFIM0YsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBRzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLFNBQVM7SUFDeEMsWUFBWSxPQUFlLEVBQWtCLElBQWEsRUFBRSxhQUFxQixVQUFVLENBQUMscUJBQXFCO1FBQy9HLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFEZ0IsU0FBSSxHQUFKLElBQUksQ0FBUztRQUV4RCxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLFNBQVM7SUFDNUMsWUFBWSxPQUFlO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLFNBQVM7SUFDMUMsWUFBWSxVQUFrQixvQkFBb0I7UUFDaEQsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBOEJEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFjO0lBQzFDLE9BQU8scUJBQXFCLENBQUMsTUFBNEIsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFxQkQsaUNBQWlDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLElBQUksa0JBQWtCLEVBQUUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLElBQUksU0FBUyxFQUFFLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@push.rocks/smartproxy",
3
- "version": "22.4.2",
3
+ "version": "23.0.0",
4
4
  "private": false,
5
5
  "description": "A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.",
6
6
  "main": "dist_ts/index.js",