@push.rocks/smartproxy 16.0.2 → 16.0.3

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 (115) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/core/models/index.d.ts +2 -0
  3. package/dist_ts/core/models/index.js +3 -1
  4. package/dist_ts/core/models/route-context.d.ts +62 -0
  5. package/dist_ts/core/models/route-context.js +43 -0
  6. package/dist_ts/core/models/socket-augmentation.d.ts +12 -0
  7. package/dist_ts/core/models/socket-augmentation.js +18 -0
  8. package/dist_ts/core/utils/event-system.d.ts +200 -0
  9. package/dist_ts/core/utils/event-system.js +224 -0
  10. package/dist_ts/core/utils/index.d.ts +7 -0
  11. package/dist_ts/core/utils/index.js +8 -1
  12. package/dist_ts/core/utils/route-manager.d.ts +118 -0
  13. package/dist_ts/core/utils/route-manager.js +383 -0
  14. package/dist_ts/core/utils/route-utils.d.ts +94 -0
  15. package/dist_ts/core/utils/route-utils.js +264 -0
  16. package/dist_ts/core/utils/security-utils.d.ts +111 -0
  17. package/dist_ts/core/utils/security-utils.js +212 -0
  18. package/dist_ts/core/utils/shared-security-manager.d.ts +110 -0
  19. package/dist_ts/core/utils/shared-security-manager.js +252 -0
  20. package/dist_ts/core/utils/template-utils.d.ts +37 -0
  21. package/dist_ts/core/utils/template-utils.js +104 -0
  22. package/dist_ts/core/utils/websocket-utils.d.ts +23 -0
  23. package/dist_ts/core/utils/websocket-utils.js +86 -0
  24. package/dist_ts/http/router/index.d.ts +5 -1
  25. package/dist_ts/http/router/index.js +4 -2
  26. package/dist_ts/http/router/route-router.d.ts +108 -0
  27. package/dist_ts/http/router/route-router.js +393 -0
  28. package/dist_ts/index.d.ts +8 -2
  29. package/dist_ts/index.js +10 -3
  30. package/dist_ts/proxies/index.d.ts +7 -2
  31. package/dist_ts/proxies/index.js +10 -4
  32. package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +21 -0
  33. package/dist_ts/proxies/network-proxy/certificate-manager.js +92 -1
  34. package/dist_ts/proxies/network-proxy/context-creator.d.ts +34 -0
  35. package/dist_ts/proxies/network-proxy/context-creator.js +108 -0
  36. package/dist_ts/proxies/network-proxy/function-cache.d.ts +90 -0
  37. package/dist_ts/proxies/network-proxy/function-cache.js +198 -0
  38. package/dist_ts/proxies/network-proxy/http-request-handler.d.ts +40 -0
  39. package/dist_ts/proxies/network-proxy/http-request-handler.js +256 -0
  40. package/dist_ts/proxies/network-proxy/http2-request-handler.d.ts +24 -0
  41. package/dist_ts/proxies/network-proxy/http2-request-handler.js +201 -0
  42. package/dist_ts/proxies/network-proxy/models/types.d.ts +73 -1
  43. package/dist_ts/proxies/network-proxy/models/types.js +242 -1
  44. package/dist_ts/proxies/network-proxy/network-proxy.d.ts +23 -20
  45. package/dist_ts/proxies/network-proxy/network-proxy.js +147 -60
  46. package/dist_ts/proxies/network-proxy/request-handler.d.ts +38 -5
  47. package/dist_ts/proxies/network-proxy/request-handler.js +584 -198
  48. package/dist_ts/proxies/network-proxy/security-manager.d.ts +65 -0
  49. package/dist_ts/proxies/network-proxy/security-manager.js +255 -0
  50. package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +13 -2
  51. package/dist_ts/proxies/network-proxy/websocket-handler.js +238 -20
  52. package/dist_ts/proxies/smart-proxy/index.d.ts +1 -1
  53. package/dist_ts/proxies/smart-proxy/index.js +3 -3
  54. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +3 -5
  55. package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +56 -3
  56. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +4 -57
  57. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +19 -228
  58. package/dist_ts/proxies/smart-proxy/port-manager.d.ts +81 -0
  59. package/dist_ts/proxies/smart-proxy/port-manager.js +166 -0
  60. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +5 -0
  61. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +131 -15
  62. package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +3 -1
  63. package/dist_ts/proxies/smart-proxy/route-helpers/index.js +5 -3
  64. package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +5 -178
  65. package/dist_ts/proxies/smart-proxy/route-helpers.js +8 -296
  66. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +11 -2
  67. package/dist_ts/proxies/smart-proxy/route-manager.js +79 -10
  68. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +29 -2
  69. package/dist_ts/proxies/smart-proxy/smart-proxy.js +48 -43
  70. package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +67 -1
  71. package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +120 -1
  72. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +3 -3
  73. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +27 -5
  74. package/package.json +1 -1
  75. package/readme.md +102 -14
  76. package/readme.plan.md +103 -168
  77. package/ts/00_commitinfo_data.ts +1 -1
  78. package/ts/core/models/index.ts +2 -0
  79. package/ts/core/models/route-context.ts +113 -0
  80. package/ts/core/models/socket-augmentation.ts +33 -0
  81. package/ts/core/utils/event-system.ts +376 -0
  82. package/ts/core/utils/index.ts +7 -0
  83. package/ts/core/utils/route-manager.ts +489 -0
  84. package/ts/core/utils/route-utils.ts +312 -0
  85. package/ts/core/utils/security-utils.ts +309 -0
  86. package/ts/core/utils/shared-security-manager.ts +333 -0
  87. package/ts/core/utils/template-utils.ts +124 -0
  88. package/ts/core/utils/websocket-utils.ts +81 -0
  89. package/ts/http/router/index.ts +8 -1
  90. package/ts/http/router/route-router.ts +482 -0
  91. package/ts/index.ts +14 -2
  92. package/ts/proxies/index.ts +12 -3
  93. package/ts/proxies/network-proxy/certificate-manager.ts +114 -10
  94. package/ts/proxies/network-proxy/context-creator.ts +145 -0
  95. package/ts/proxies/network-proxy/function-cache.ts +259 -0
  96. package/ts/proxies/network-proxy/http-request-handler.ts +330 -0
  97. package/ts/proxies/network-proxy/http2-request-handler.ts +255 -0
  98. package/ts/proxies/network-proxy/models/types.ts +312 -1
  99. package/ts/proxies/network-proxy/network-proxy.ts +195 -86
  100. package/ts/proxies/network-proxy/request-handler.ts +698 -246
  101. package/ts/proxies/network-proxy/security-manager.ts +298 -0
  102. package/ts/proxies/network-proxy/websocket-handler.ts +276 -33
  103. package/ts/proxies/smart-proxy/index.ts +2 -12
  104. package/ts/proxies/smart-proxy/models/interfaces.ts +7 -4
  105. package/ts/proxies/smart-proxy/models/route-types.ts +78 -10
  106. package/ts/proxies/smart-proxy/network-proxy-bridge.ts +20 -257
  107. package/ts/proxies/smart-proxy/port-manager.ts +195 -0
  108. package/ts/proxies/smart-proxy/route-connection-handler.ts +156 -21
  109. package/ts/proxies/smart-proxy/route-manager.ts +98 -14
  110. package/ts/proxies/smart-proxy/smart-proxy.ts +56 -55
  111. package/ts/proxies/smart-proxy/utils/route-helpers.ts +167 -1
  112. package/ts/proxies/smart-proxy/utils/route-validators.ts +24 -5
  113. package/ts/proxies/smart-proxy/domain-config-manager.ts.bak +0 -441
  114. package/ts/proxies/smart-proxy/route-helpers/index.ts +0 -9
  115. package/ts/proxies/smart-proxy/route-helpers.ts +0 -498
@@ -0,0 +1,376 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type {
3
+ ICertificateData,
4
+ ICertificateFailure,
5
+ ICertificateExpiring
6
+ } from '../models/common-types.js';
7
+ import type { IRouteConfig } from '../../proxies/smart-proxy/models/route-types.js';
8
+ import { Port80HandlerEvents } from '../models/common-types.js';
9
+
10
+ /**
11
+ * Standardized event names used throughout the system
12
+ */
13
+ export enum ProxyEvents {
14
+ // Certificate events
15
+ CERTIFICATE_ISSUED = 'certificate:issued',
16
+ CERTIFICATE_RENEWED = 'certificate:renewed',
17
+ CERTIFICATE_FAILED = 'certificate:failed',
18
+ CERTIFICATE_EXPIRING = 'certificate:expiring',
19
+
20
+ // Component lifecycle events
21
+ COMPONENT_STARTED = 'component:started',
22
+ COMPONENT_STOPPED = 'component:stopped',
23
+
24
+ // Connection events
25
+ CONNECTION_ESTABLISHED = 'connection:established',
26
+ CONNECTION_CLOSED = 'connection:closed',
27
+ CONNECTION_ERROR = 'connection:error',
28
+
29
+ // Request events
30
+ REQUEST_RECEIVED = 'request:received',
31
+ REQUEST_COMPLETED = 'request:completed',
32
+ REQUEST_ERROR = 'request:error',
33
+
34
+ // Route events
35
+ ROUTE_MATCHED = 'route:matched',
36
+ ROUTE_UPDATED = 'route:updated',
37
+ ROUTE_ERROR = 'route:error',
38
+
39
+ // Security events
40
+ SECURITY_BLOCKED = 'security:blocked',
41
+ SECURITY_BREACH_ATTEMPT = 'security:breach-attempt',
42
+
43
+ // TLS events
44
+ TLS_HANDSHAKE_STARTED = 'tls:handshake-started',
45
+ TLS_HANDSHAKE_COMPLETED = 'tls:handshake-completed',
46
+ TLS_HANDSHAKE_FAILED = 'tls:handshake-failed'
47
+ }
48
+
49
+ /**
50
+ * Component types for event metadata
51
+ */
52
+ export enum ComponentType {
53
+ SMART_PROXY = 'smart-proxy',
54
+ NETWORK_PROXY = 'network-proxy',
55
+ NFTABLES_PROXY = 'nftables-proxy',
56
+ PORT80_HANDLER = 'port80-handler',
57
+ CERTIFICATE_MANAGER = 'certificate-manager',
58
+ ROUTE_MANAGER = 'route-manager',
59
+ CONNECTION_MANAGER = 'connection-manager',
60
+ TLS_MANAGER = 'tls-manager',
61
+ SECURITY_MANAGER = 'security-manager'
62
+ }
63
+
64
+ /**
65
+ * Base event data interface
66
+ */
67
+ export interface IEventData {
68
+ timestamp: number;
69
+ componentType: ComponentType;
70
+ componentId?: string;
71
+ }
72
+
73
+ /**
74
+ * Certificate event data
75
+ */
76
+ export interface ICertificateEventData extends IEventData, ICertificateData {
77
+ isRenewal?: boolean;
78
+ source?: string;
79
+ }
80
+
81
+ /**
82
+ * Certificate failure event data
83
+ */
84
+ export interface ICertificateFailureEventData extends IEventData, ICertificateFailure {}
85
+
86
+ /**
87
+ * Certificate expiring event data
88
+ */
89
+ export interface ICertificateExpiringEventData extends IEventData, ICertificateExpiring {}
90
+
91
+ /**
92
+ * Component lifecycle event data
93
+ */
94
+ export interface IComponentEventData extends IEventData {
95
+ name: string;
96
+ version?: string;
97
+ }
98
+
99
+ /**
100
+ * Connection event data
101
+ */
102
+ export interface IConnectionEventData extends IEventData {
103
+ connectionId: string;
104
+ clientIp: string;
105
+ serverIp?: string;
106
+ port: number;
107
+ isTls?: boolean;
108
+ domain?: string;
109
+ }
110
+
111
+ /**
112
+ * Request event data
113
+ */
114
+ export interface IRequestEventData extends IEventData {
115
+ connectionId: string;
116
+ requestId: string;
117
+ method?: string;
118
+ path?: string;
119
+ statusCode?: number;
120
+ duration?: number;
121
+ routeId?: string;
122
+ routeName?: string;
123
+ }
124
+
125
+ /**
126
+ * Route event data
127
+ */
128
+ export interface IRouteEventData extends IEventData {
129
+ route: IRouteConfig;
130
+ context?: any;
131
+ }
132
+
133
+ /**
134
+ * Security event data
135
+ */
136
+ export interface ISecurityEventData extends IEventData {
137
+ clientIp: string;
138
+ reason: string;
139
+ routeId?: string;
140
+ routeName?: string;
141
+ }
142
+
143
+ /**
144
+ * TLS event data
145
+ */
146
+ export interface ITlsEventData extends IEventData {
147
+ connectionId: string;
148
+ domain?: string;
149
+ clientIp: string;
150
+ tlsVersion?: string;
151
+ cipherSuite?: string;
152
+ sniHostname?: string;
153
+ }
154
+
155
+ /**
156
+ * Logger interface for event system
157
+ */
158
+ export interface IEventLogger {
159
+ info: (message: string, ...args: any[]) => void;
160
+ warn: (message: string, ...args: any[]) => void;
161
+ error: (message: string, ...args: any[]) => void;
162
+ debug?: (message: string, ...args: any[]) => void;
163
+ }
164
+
165
+ /**
166
+ * Event handler type
167
+ */
168
+ export type EventHandler<T> = (data: T) => void;
169
+
170
+ /**
171
+ * Helper class to standardize event emission and handling
172
+ * across all system components
173
+ */
174
+ export class EventSystem {
175
+ private emitter: plugins.EventEmitter;
176
+ private componentType: ComponentType;
177
+ private componentId: string;
178
+ private logger?: IEventLogger;
179
+
180
+ constructor(
181
+ componentType: ComponentType,
182
+ componentId: string = '',
183
+ logger?: IEventLogger
184
+ ) {
185
+ this.emitter = new plugins.EventEmitter();
186
+ this.componentType = componentType;
187
+ this.componentId = componentId;
188
+ this.logger = logger;
189
+ }
190
+
191
+ /**
192
+ * Emit a certificate issued event
193
+ */
194
+ public emitCertificateIssued(data: Omit<ICertificateEventData, 'timestamp' | 'componentType' | 'componentId'>): void {
195
+ const eventData: ICertificateEventData = {
196
+ ...data,
197
+ timestamp: Date.now(),
198
+ componentType: this.componentType,
199
+ componentId: this.componentId
200
+ };
201
+
202
+ this.logger?.info?.(`Certificate issued for ${data.domain}`);
203
+ this.emitter.emit(ProxyEvents.CERTIFICATE_ISSUED, eventData);
204
+ }
205
+
206
+ /**
207
+ * Emit a certificate renewed event
208
+ */
209
+ public emitCertificateRenewed(data: Omit<ICertificateEventData, 'timestamp' | 'componentType' | 'componentId'>): void {
210
+ const eventData: ICertificateEventData = {
211
+ ...data,
212
+ timestamp: Date.now(),
213
+ componentType: this.componentType,
214
+ componentId: this.componentId
215
+ };
216
+
217
+ this.logger?.info?.(`Certificate renewed for ${data.domain}`);
218
+ this.emitter.emit(ProxyEvents.CERTIFICATE_RENEWED, eventData);
219
+ }
220
+
221
+ /**
222
+ * Emit a certificate failed event
223
+ */
224
+ public emitCertificateFailed(data: Omit<ICertificateFailureEventData, 'timestamp' | 'componentType' | 'componentId'>): void {
225
+ const eventData: ICertificateFailureEventData = {
226
+ ...data,
227
+ timestamp: Date.now(),
228
+ componentType: this.componentType,
229
+ componentId: this.componentId
230
+ };
231
+
232
+ this.logger?.error?.(`Certificate issuance failed for ${data.domain}: ${data.error}`);
233
+ this.emitter.emit(ProxyEvents.CERTIFICATE_FAILED, eventData);
234
+ }
235
+
236
+ /**
237
+ * Emit a certificate expiring event
238
+ */
239
+ public emitCertificateExpiring(data: Omit<ICertificateExpiringEventData, 'timestamp' | 'componentType' | 'componentId'>): void {
240
+ const eventData: ICertificateExpiringEventData = {
241
+ ...data,
242
+ timestamp: Date.now(),
243
+ componentType: this.componentType,
244
+ componentId: this.componentId
245
+ };
246
+
247
+ this.logger?.warn?.(`Certificate expiring for ${data.domain} in ${data.daysRemaining} days`);
248
+ this.emitter.emit(ProxyEvents.CERTIFICATE_EXPIRING, eventData);
249
+ }
250
+
251
+ /**
252
+ * Emit a component started event
253
+ */
254
+ public emitComponentStarted(name: string, version?: string): void {
255
+ const eventData: IComponentEventData = {
256
+ name,
257
+ version,
258
+ timestamp: Date.now(),
259
+ componentType: this.componentType,
260
+ componentId: this.componentId
261
+ };
262
+
263
+ this.logger?.info?.(`Component ${name} started${version ? ` (v${version})` : ''}`);
264
+ this.emitter.emit(ProxyEvents.COMPONENT_STARTED, eventData);
265
+ }
266
+
267
+ /**
268
+ * Emit a component stopped event
269
+ */
270
+ public emitComponentStopped(name: string): void {
271
+ const eventData: IComponentEventData = {
272
+ name,
273
+ timestamp: Date.now(),
274
+ componentType: this.componentType,
275
+ componentId: this.componentId
276
+ };
277
+
278
+ this.logger?.info?.(`Component ${name} stopped`);
279
+ this.emitter.emit(ProxyEvents.COMPONENT_STOPPED, eventData);
280
+ }
281
+
282
+ /**
283
+ * Emit a connection established event
284
+ */
285
+ public emitConnectionEstablished(data: Omit<IConnectionEventData, 'timestamp' | 'componentType' | 'componentId'>): void {
286
+ const eventData: IConnectionEventData = {
287
+ ...data,
288
+ timestamp: Date.now(),
289
+ componentType: this.componentType,
290
+ componentId: this.componentId
291
+ };
292
+
293
+ this.logger?.debug?.(`Connection ${data.connectionId} established from ${data.clientIp} on port ${data.port}`);
294
+ this.emitter.emit(ProxyEvents.CONNECTION_ESTABLISHED, eventData);
295
+ }
296
+
297
+ /**
298
+ * Emit a connection closed event
299
+ */
300
+ public emitConnectionClosed(data: Omit<IConnectionEventData, 'timestamp' | 'componentType' | 'componentId'>): void {
301
+ const eventData: IConnectionEventData = {
302
+ ...data,
303
+ timestamp: Date.now(),
304
+ componentType: this.componentType,
305
+ componentId: this.componentId
306
+ };
307
+
308
+ this.logger?.debug?.(`Connection ${data.connectionId} closed`);
309
+ this.emitter.emit(ProxyEvents.CONNECTION_CLOSED, eventData);
310
+ }
311
+
312
+ /**
313
+ * Emit a route matched event
314
+ */
315
+ public emitRouteMatched(data: Omit<IRouteEventData, 'timestamp' | 'componentType' | 'componentId'>): void {
316
+ const eventData: IRouteEventData = {
317
+ ...data,
318
+ timestamp: Date.now(),
319
+ componentType: this.componentType,
320
+ componentId: this.componentId
321
+ };
322
+
323
+ this.logger?.debug?.(`Route matched: ${data.route.name || data.route.id || 'unnamed'}`);
324
+ this.emitter.emit(ProxyEvents.ROUTE_MATCHED, eventData);
325
+ }
326
+
327
+ /**
328
+ * Subscribe to an event
329
+ */
330
+ public on<T>(event: ProxyEvents, handler: EventHandler<T>): void {
331
+ this.emitter.on(event, handler);
332
+ }
333
+
334
+ /**
335
+ * Subscribe to an event once
336
+ */
337
+ public once<T>(event: ProxyEvents, handler: EventHandler<T>): void {
338
+ this.emitter.once(event, handler);
339
+ }
340
+
341
+ /**
342
+ * Unsubscribe from an event
343
+ */
344
+ public off<T>(event: ProxyEvents, handler: EventHandler<T>): void {
345
+ this.emitter.off(event, handler);
346
+ }
347
+
348
+ /**
349
+ * Map Port80Handler events to standard proxy events
350
+ */
351
+ public subscribePort80HandlerEvents(handler: any): void {
352
+ handler.on(Port80HandlerEvents.CERTIFICATE_ISSUED, (data: ICertificateData) => {
353
+ this.emitCertificateIssued({
354
+ ...data,
355
+ isRenewal: false,
356
+ source: 'port80handler'
357
+ });
358
+ });
359
+
360
+ handler.on(Port80HandlerEvents.CERTIFICATE_RENEWED, (data: ICertificateData) => {
361
+ this.emitCertificateRenewed({
362
+ ...data,
363
+ isRenewal: true,
364
+ source: 'port80handler'
365
+ });
366
+ });
367
+
368
+ handler.on(Port80HandlerEvents.CERTIFICATE_FAILED, (data: ICertificateFailure) => {
369
+ this.emitCertificateFailed(data);
370
+ });
371
+
372
+ handler.on(Port80HandlerEvents.CERTIFICATE_EXPIRING, (data: ICertificateExpiring) => {
373
+ this.emitCertificateExpiring(data);
374
+ });
375
+ }
376
+ }
@@ -5,3 +5,10 @@
5
5
  export * from './event-utils.js';
6
6
  export * from './validation-utils.js';
7
7
  export * from './ip-utils.js';
8
+ export * from './template-utils.js';
9
+ export * from './route-manager.js';
10
+ export * from './route-utils.js';
11
+ export * from './security-utils.js';
12
+ export * from './shared-security-manager.js';
13
+ export * from './event-system.js';
14
+ export * from './websocket-utils.js';