@push.rocks/smartproxy 15.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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/certificate/index.d.ts +10 -4
- package/dist_ts/certificate/index.js +5 -7
- package/dist_ts/certificate/models/certificate-types.d.ts +35 -15
- package/dist_ts/certificate/providers/cert-provisioner.d.ts +41 -15
- package/dist_ts/certificate/providers/cert-provisioner.js +201 -41
- package/dist_ts/core/models/index.d.ts +2 -0
- package/dist_ts/core/models/index.js +3 -1
- package/dist_ts/core/models/route-context.d.ts +62 -0
- package/dist_ts/core/models/route-context.js +43 -0
- package/dist_ts/core/models/socket-augmentation.d.ts +12 -0
- package/dist_ts/core/models/socket-augmentation.js +18 -0
- package/dist_ts/core/utils/event-system.d.ts +200 -0
- package/dist_ts/core/utils/event-system.js +224 -0
- package/dist_ts/core/utils/index.d.ts +7 -0
- package/dist_ts/core/utils/index.js +8 -1
- package/dist_ts/core/utils/route-manager.d.ts +118 -0
- package/dist_ts/core/utils/route-manager.js +383 -0
- package/dist_ts/core/utils/route-utils.d.ts +94 -0
- package/dist_ts/core/utils/route-utils.js +264 -0
- package/dist_ts/core/utils/security-utils.d.ts +111 -0
- package/dist_ts/core/utils/security-utils.js +212 -0
- package/dist_ts/core/utils/shared-security-manager.d.ts +110 -0
- package/dist_ts/core/utils/shared-security-manager.js +252 -0
- package/dist_ts/core/utils/template-utils.d.ts +37 -0
- package/dist_ts/core/utils/template-utils.js +104 -0
- package/dist_ts/core/utils/websocket-utils.d.ts +23 -0
- package/dist_ts/core/utils/websocket-utils.js +86 -0
- package/dist_ts/forwarding/config/forwarding-types.d.ts +40 -76
- package/dist_ts/forwarding/config/forwarding-types.js +19 -18
- package/dist_ts/forwarding/config/index.d.ts +4 -2
- package/dist_ts/forwarding/config/index.js +5 -3
- package/dist_ts/forwarding/handlers/base-handler.js +3 -1
- package/dist_ts/forwarding/index.d.ts +5 -6
- package/dist_ts/forwarding/index.js +3 -3
- package/dist_ts/http/models/http-types.js +1 -1
- package/dist_ts/http/port80/acme-interfaces.d.ts +30 -0
- package/dist_ts/http/port80/acme-interfaces.js +46 -1
- package/dist_ts/http/port80/port80-handler.d.ts +17 -2
- package/dist_ts/http/port80/port80-handler.js +49 -11
- package/dist_ts/http/router/index.d.ts +5 -1
- package/dist_ts/http/router/index.js +4 -2
- package/dist_ts/http/router/route-router.d.ts +108 -0
- package/dist_ts/http/router/route-router.js +393 -0
- package/dist_ts/index.d.ts +8 -2
- package/dist_ts/index.js +10 -3
- package/dist_ts/proxies/index.d.ts +7 -2
- package/dist_ts/proxies/index.js +10 -4
- package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +21 -0
- package/dist_ts/proxies/network-proxy/certificate-manager.js +92 -1
- package/dist_ts/proxies/network-proxy/context-creator.d.ts +34 -0
- package/dist_ts/proxies/network-proxy/context-creator.js +108 -0
- package/dist_ts/proxies/network-proxy/function-cache.d.ts +90 -0
- package/dist_ts/proxies/network-proxy/function-cache.js +198 -0
- package/dist_ts/proxies/network-proxy/http-request-handler.d.ts +40 -0
- package/dist_ts/proxies/network-proxy/http-request-handler.js +256 -0
- package/dist_ts/proxies/network-proxy/http2-request-handler.d.ts +24 -0
- package/dist_ts/proxies/network-proxy/http2-request-handler.js +201 -0
- package/dist_ts/proxies/network-proxy/models/types.d.ts +73 -1
- package/dist_ts/proxies/network-proxy/models/types.js +242 -1
- package/dist_ts/proxies/network-proxy/network-proxy.d.ts +23 -20
- package/dist_ts/proxies/network-proxy/network-proxy.js +147 -60
- package/dist_ts/proxies/network-proxy/request-handler.d.ts +38 -5
- package/dist_ts/proxies/network-proxy/request-handler.js +584 -198
- package/dist_ts/proxies/network-proxy/security-manager.d.ts +65 -0
- package/dist_ts/proxies/network-proxy/security-manager.js +255 -0
- package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +13 -2
- package/dist_ts/proxies/network-proxy/websocket-handler.js +238 -20
- package/dist_ts/proxies/smart-proxy/index.d.ts +1 -1
- package/dist_ts/proxies/smart-proxy/index.js +3 -3
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +5 -66
- package/dist_ts/proxies/smart-proxy/models/interfaces.js +5 -4
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +173 -6
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +20 -7
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +49 -108
- package/dist_ts/proxies/smart-proxy/port-manager.d.ts +81 -0
- package/dist_ts/proxies/smart-proxy/port-manager.js +166 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +7 -5
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +155 -160
- package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +9 -0
- package/dist_ts/proxies/smart-proxy/route-helpers/index.js +11 -0
- package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +5 -125
- package/dist_ts/proxies/smart-proxy/route-helpers.js +8 -195
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +14 -11
- package/dist_ts/proxies/smart-proxy/route-manager.js +81 -124
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +101 -12
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +178 -306
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +3 -3
- package/dist_ts/proxies/smart-proxy/utils/index.d.ts +12 -0
- package/dist_ts/proxies/smart-proxy/utils/index.js +19 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +240 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +451 -0
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.d.ts +51 -0
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.js +124 -0
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +131 -0
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +217 -0
- package/dist_ts/proxies/smart-proxy/utils/route-utils.d.ts +79 -0
- package/dist_ts/proxies/smart-proxy/utils/route-utils.js +266 -0
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +73 -0
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +264 -0
- package/package.json +1 -1
- package/readme.md +241 -125
- package/readme.plan.md +73 -286
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/certificate/index.ts +17 -9
- package/ts/certificate/models/certificate-types.ts +37 -16
- package/ts/certificate/providers/cert-provisioner.ts +247 -54
- package/ts/core/models/index.ts +2 -0
- package/ts/core/models/route-context.ts +113 -0
- package/ts/core/models/socket-augmentation.ts +33 -0
- package/ts/core/utils/event-system.ts +376 -0
- package/ts/core/utils/index.ts +7 -0
- package/ts/core/utils/route-manager.ts +489 -0
- package/ts/core/utils/route-utils.ts +312 -0
- package/ts/core/utils/security-utils.ts +309 -0
- package/ts/core/utils/shared-security-manager.ts +333 -0
- package/ts/core/utils/template-utils.ts +124 -0
- package/ts/core/utils/websocket-utils.ts +81 -0
- package/ts/forwarding/config/forwarding-types.ts +79 -107
- package/ts/forwarding/config/index.ts +4 -2
- package/ts/forwarding/handlers/base-handler.ts +4 -2
- package/ts/forwarding/index.ts +3 -2
- package/ts/http/models/http-types.ts +0 -1
- package/ts/http/port80/acme-interfaces.ts +84 -0
- package/ts/http/port80/port80-handler.ts +61 -15
- package/ts/http/router/index.ts +8 -1
- package/ts/http/router/route-router.ts +482 -0
- package/ts/index.ts +14 -2
- package/ts/proxies/index.ts +12 -3
- package/ts/proxies/network-proxy/certificate-manager.ts +114 -10
- package/ts/proxies/network-proxy/context-creator.ts +145 -0
- package/ts/proxies/network-proxy/function-cache.ts +259 -0
- package/ts/proxies/network-proxy/http-request-handler.ts +330 -0
- package/ts/proxies/network-proxy/http2-request-handler.ts +255 -0
- package/ts/proxies/network-proxy/models/types.ts +312 -1
- package/ts/proxies/network-proxy/network-proxy.ts +195 -86
- package/ts/proxies/network-proxy/request-handler.ts +698 -246
- package/ts/proxies/network-proxy/security-manager.ts +298 -0
- package/ts/proxies/network-proxy/websocket-handler.ts +276 -33
- package/ts/proxies/smart-proxy/index.ts +2 -12
- package/ts/proxies/smart-proxy/models/interfaces.ts +13 -67
- package/ts/proxies/smart-proxy/models/route-types.ts +223 -25
- package/ts/proxies/smart-proxy/network-proxy-bridge.ts +57 -123
- package/ts/proxies/smart-proxy/port-manager.ts +195 -0
- package/ts/proxies/smart-proxy/route-connection-handler.ts +191 -225
- package/ts/proxies/smart-proxy/route-manager.ts +101 -144
- package/ts/proxies/smart-proxy/smart-proxy.ts +206 -377
- package/ts/proxies/smart-proxy/timeout-manager.ts +2 -2
- package/ts/proxies/smart-proxy/utils/index.ts +40 -0
- package/ts/proxies/smart-proxy/utils/route-helpers.ts +621 -0
- package/ts/proxies/smart-proxy/utils/route-migration-utils.ts +165 -0
- package/ts/proxies/smart-proxy/utils/route-patterns.ts +309 -0
- package/ts/proxies/smart-proxy/utils/route-utils.ts +330 -0
- package/ts/proxies/smart-proxy/utils/route-validators.ts +288 -0
- package/ts/forwarding/config/domain-config.ts +0 -28
- package/ts/forwarding/config/domain-manager.ts +0 -283
- package/ts/proxies/smart-proxy/connection-handler.ts +0 -1240
- package/ts/proxies/smart-proxy/domain-config-manager.ts +0 -441
- package/ts/proxies/smart-proxy/port-range-manager.ts +0 -211
- package/ts/proxies/smart-proxy/route-helpers.ts +0 -344
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { ICertificateData, ICertificateFailure, ICertificateExpiring } from '../models/common-types.js';
|
|
2
|
+
import type { IRouteConfig } from '../../proxies/smart-proxy/models/route-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Standardized event names used throughout the system
|
|
5
|
+
*/
|
|
6
|
+
export declare enum ProxyEvents {
|
|
7
|
+
CERTIFICATE_ISSUED = "certificate:issued",
|
|
8
|
+
CERTIFICATE_RENEWED = "certificate:renewed",
|
|
9
|
+
CERTIFICATE_FAILED = "certificate:failed",
|
|
10
|
+
CERTIFICATE_EXPIRING = "certificate:expiring",
|
|
11
|
+
COMPONENT_STARTED = "component:started",
|
|
12
|
+
COMPONENT_STOPPED = "component:stopped",
|
|
13
|
+
CONNECTION_ESTABLISHED = "connection:established",
|
|
14
|
+
CONNECTION_CLOSED = "connection:closed",
|
|
15
|
+
CONNECTION_ERROR = "connection:error",
|
|
16
|
+
REQUEST_RECEIVED = "request:received",
|
|
17
|
+
REQUEST_COMPLETED = "request:completed",
|
|
18
|
+
REQUEST_ERROR = "request:error",
|
|
19
|
+
ROUTE_MATCHED = "route:matched",
|
|
20
|
+
ROUTE_UPDATED = "route:updated",
|
|
21
|
+
ROUTE_ERROR = "route:error",
|
|
22
|
+
SECURITY_BLOCKED = "security:blocked",
|
|
23
|
+
SECURITY_BREACH_ATTEMPT = "security:breach-attempt",
|
|
24
|
+
TLS_HANDSHAKE_STARTED = "tls:handshake-started",
|
|
25
|
+
TLS_HANDSHAKE_COMPLETED = "tls:handshake-completed",
|
|
26
|
+
TLS_HANDSHAKE_FAILED = "tls:handshake-failed"
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Component types for event metadata
|
|
30
|
+
*/
|
|
31
|
+
export declare enum ComponentType {
|
|
32
|
+
SMART_PROXY = "smart-proxy",
|
|
33
|
+
NETWORK_PROXY = "network-proxy",
|
|
34
|
+
NFTABLES_PROXY = "nftables-proxy",
|
|
35
|
+
PORT80_HANDLER = "port80-handler",
|
|
36
|
+
CERTIFICATE_MANAGER = "certificate-manager",
|
|
37
|
+
ROUTE_MANAGER = "route-manager",
|
|
38
|
+
CONNECTION_MANAGER = "connection-manager",
|
|
39
|
+
TLS_MANAGER = "tls-manager",
|
|
40
|
+
SECURITY_MANAGER = "security-manager"
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Base event data interface
|
|
44
|
+
*/
|
|
45
|
+
export interface IEventData {
|
|
46
|
+
timestamp: number;
|
|
47
|
+
componentType: ComponentType;
|
|
48
|
+
componentId?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Certificate event data
|
|
52
|
+
*/
|
|
53
|
+
export interface ICertificateEventData extends IEventData, ICertificateData {
|
|
54
|
+
isRenewal?: boolean;
|
|
55
|
+
source?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Certificate failure event data
|
|
59
|
+
*/
|
|
60
|
+
export interface ICertificateFailureEventData extends IEventData, ICertificateFailure {
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Certificate expiring event data
|
|
64
|
+
*/
|
|
65
|
+
export interface ICertificateExpiringEventData extends IEventData, ICertificateExpiring {
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Component lifecycle event data
|
|
69
|
+
*/
|
|
70
|
+
export interface IComponentEventData extends IEventData {
|
|
71
|
+
name: string;
|
|
72
|
+
version?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Connection event data
|
|
76
|
+
*/
|
|
77
|
+
export interface IConnectionEventData extends IEventData {
|
|
78
|
+
connectionId: string;
|
|
79
|
+
clientIp: string;
|
|
80
|
+
serverIp?: string;
|
|
81
|
+
port: number;
|
|
82
|
+
isTls?: boolean;
|
|
83
|
+
domain?: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Request event data
|
|
87
|
+
*/
|
|
88
|
+
export interface IRequestEventData extends IEventData {
|
|
89
|
+
connectionId: string;
|
|
90
|
+
requestId: string;
|
|
91
|
+
method?: string;
|
|
92
|
+
path?: string;
|
|
93
|
+
statusCode?: number;
|
|
94
|
+
duration?: number;
|
|
95
|
+
routeId?: string;
|
|
96
|
+
routeName?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Route event data
|
|
100
|
+
*/
|
|
101
|
+
export interface IRouteEventData extends IEventData {
|
|
102
|
+
route: IRouteConfig;
|
|
103
|
+
context?: any;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Security event data
|
|
107
|
+
*/
|
|
108
|
+
export interface ISecurityEventData extends IEventData {
|
|
109
|
+
clientIp: string;
|
|
110
|
+
reason: string;
|
|
111
|
+
routeId?: string;
|
|
112
|
+
routeName?: string;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* TLS event data
|
|
116
|
+
*/
|
|
117
|
+
export interface ITlsEventData extends IEventData {
|
|
118
|
+
connectionId: string;
|
|
119
|
+
domain?: string;
|
|
120
|
+
clientIp: string;
|
|
121
|
+
tlsVersion?: string;
|
|
122
|
+
cipherSuite?: string;
|
|
123
|
+
sniHostname?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Logger interface for event system
|
|
127
|
+
*/
|
|
128
|
+
export interface IEventLogger {
|
|
129
|
+
info: (message: string, ...args: any[]) => void;
|
|
130
|
+
warn: (message: string, ...args: any[]) => void;
|
|
131
|
+
error: (message: string, ...args: any[]) => void;
|
|
132
|
+
debug?: (message: string, ...args: any[]) => void;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Event handler type
|
|
136
|
+
*/
|
|
137
|
+
export type EventHandler<T> = (data: T) => void;
|
|
138
|
+
/**
|
|
139
|
+
* Helper class to standardize event emission and handling
|
|
140
|
+
* across all system components
|
|
141
|
+
*/
|
|
142
|
+
export declare class EventSystem {
|
|
143
|
+
private emitter;
|
|
144
|
+
private componentType;
|
|
145
|
+
private componentId;
|
|
146
|
+
private logger?;
|
|
147
|
+
constructor(componentType: ComponentType, componentId?: string, logger?: IEventLogger);
|
|
148
|
+
/**
|
|
149
|
+
* Emit a certificate issued event
|
|
150
|
+
*/
|
|
151
|
+
emitCertificateIssued(data: Omit<ICertificateEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
|
|
152
|
+
/**
|
|
153
|
+
* Emit a certificate renewed event
|
|
154
|
+
*/
|
|
155
|
+
emitCertificateRenewed(data: Omit<ICertificateEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
|
|
156
|
+
/**
|
|
157
|
+
* Emit a certificate failed event
|
|
158
|
+
*/
|
|
159
|
+
emitCertificateFailed(data: Omit<ICertificateFailureEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
|
|
160
|
+
/**
|
|
161
|
+
* Emit a certificate expiring event
|
|
162
|
+
*/
|
|
163
|
+
emitCertificateExpiring(data: Omit<ICertificateExpiringEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
|
|
164
|
+
/**
|
|
165
|
+
* Emit a component started event
|
|
166
|
+
*/
|
|
167
|
+
emitComponentStarted(name: string, version?: string): void;
|
|
168
|
+
/**
|
|
169
|
+
* Emit a component stopped event
|
|
170
|
+
*/
|
|
171
|
+
emitComponentStopped(name: string): void;
|
|
172
|
+
/**
|
|
173
|
+
* Emit a connection established event
|
|
174
|
+
*/
|
|
175
|
+
emitConnectionEstablished(data: Omit<IConnectionEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
|
|
176
|
+
/**
|
|
177
|
+
* Emit a connection closed event
|
|
178
|
+
*/
|
|
179
|
+
emitConnectionClosed(data: Omit<IConnectionEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
|
|
180
|
+
/**
|
|
181
|
+
* Emit a route matched event
|
|
182
|
+
*/
|
|
183
|
+
emitRouteMatched(data: Omit<IRouteEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
|
|
184
|
+
/**
|
|
185
|
+
* Subscribe to an event
|
|
186
|
+
*/
|
|
187
|
+
on<T>(event: ProxyEvents, handler: EventHandler<T>): void;
|
|
188
|
+
/**
|
|
189
|
+
* Subscribe to an event once
|
|
190
|
+
*/
|
|
191
|
+
once<T>(event: ProxyEvents, handler: EventHandler<T>): void;
|
|
192
|
+
/**
|
|
193
|
+
* Unsubscribe from an event
|
|
194
|
+
*/
|
|
195
|
+
off<T>(event: ProxyEvents, handler: EventHandler<T>): void;
|
|
196
|
+
/**
|
|
197
|
+
* Map Port80Handler events to standard proxy events
|
|
198
|
+
*/
|
|
199
|
+
subscribePort80HandlerEvents(handler: any): void;
|
|
200
|
+
}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { Port80HandlerEvents } from '../models/common-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Standardized event names used throughout the system
|
|
5
|
+
*/
|
|
6
|
+
export var ProxyEvents;
|
|
7
|
+
(function (ProxyEvents) {
|
|
8
|
+
// Certificate events
|
|
9
|
+
ProxyEvents["CERTIFICATE_ISSUED"] = "certificate:issued";
|
|
10
|
+
ProxyEvents["CERTIFICATE_RENEWED"] = "certificate:renewed";
|
|
11
|
+
ProxyEvents["CERTIFICATE_FAILED"] = "certificate:failed";
|
|
12
|
+
ProxyEvents["CERTIFICATE_EXPIRING"] = "certificate:expiring";
|
|
13
|
+
// Component lifecycle events
|
|
14
|
+
ProxyEvents["COMPONENT_STARTED"] = "component:started";
|
|
15
|
+
ProxyEvents["COMPONENT_STOPPED"] = "component:stopped";
|
|
16
|
+
// Connection events
|
|
17
|
+
ProxyEvents["CONNECTION_ESTABLISHED"] = "connection:established";
|
|
18
|
+
ProxyEvents["CONNECTION_CLOSED"] = "connection:closed";
|
|
19
|
+
ProxyEvents["CONNECTION_ERROR"] = "connection:error";
|
|
20
|
+
// Request events
|
|
21
|
+
ProxyEvents["REQUEST_RECEIVED"] = "request:received";
|
|
22
|
+
ProxyEvents["REQUEST_COMPLETED"] = "request:completed";
|
|
23
|
+
ProxyEvents["REQUEST_ERROR"] = "request:error";
|
|
24
|
+
// Route events
|
|
25
|
+
ProxyEvents["ROUTE_MATCHED"] = "route:matched";
|
|
26
|
+
ProxyEvents["ROUTE_UPDATED"] = "route:updated";
|
|
27
|
+
ProxyEvents["ROUTE_ERROR"] = "route:error";
|
|
28
|
+
// Security events
|
|
29
|
+
ProxyEvents["SECURITY_BLOCKED"] = "security:blocked";
|
|
30
|
+
ProxyEvents["SECURITY_BREACH_ATTEMPT"] = "security:breach-attempt";
|
|
31
|
+
// TLS events
|
|
32
|
+
ProxyEvents["TLS_HANDSHAKE_STARTED"] = "tls:handshake-started";
|
|
33
|
+
ProxyEvents["TLS_HANDSHAKE_COMPLETED"] = "tls:handshake-completed";
|
|
34
|
+
ProxyEvents["TLS_HANDSHAKE_FAILED"] = "tls:handshake-failed";
|
|
35
|
+
})(ProxyEvents || (ProxyEvents = {}));
|
|
36
|
+
/**
|
|
37
|
+
* Component types for event metadata
|
|
38
|
+
*/
|
|
39
|
+
export var ComponentType;
|
|
40
|
+
(function (ComponentType) {
|
|
41
|
+
ComponentType["SMART_PROXY"] = "smart-proxy";
|
|
42
|
+
ComponentType["NETWORK_PROXY"] = "network-proxy";
|
|
43
|
+
ComponentType["NFTABLES_PROXY"] = "nftables-proxy";
|
|
44
|
+
ComponentType["PORT80_HANDLER"] = "port80-handler";
|
|
45
|
+
ComponentType["CERTIFICATE_MANAGER"] = "certificate-manager";
|
|
46
|
+
ComponentType["ROUTE_MANAGER"] = "route-manager";
|
|
47
|
+
ComponentType["CONNECTION_MANAGER"] = "connection-manager";
|
|
48
|
+
ComponentType["TLS_MANAGER"] = "tls-manager";
|
|
49
|
+
ComponentType["SECURITY_MANAGER"] = "security-manager";
|
|
50
|
+
})(ComponentType || (ComponentType = {}));
|
|
51
|
+
/**
|
|
52
|
+
* Helper class to standardize event emission and handling
|
|
53
|
+
* across all system components
|
|
54
|
+
*/
|
|
55
|
+
export class EventSystem {
|
|
56
|
+
constructor(componentType, componentId = '', logger) {
|
|
57
|
+
this.emitter = new plugins.EventEmitter();
|
|
58
|
+
this.componentType = componentType;
|
|
59
|
+
this.componentId = componentId;
|
|
60
|
+
this.logger = logger;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Emit a certificate issued event
|
|
64
|
+
*/
|
|
65
|
+
emitCertificateIssued(data) {
|
|
66
|
+
const eventData = {
|
|
67
|
+
...data,
|
|
68
|
+
timestamp: Date.now(),
|
|
69
|
+
componentType: this.componentType,
|
|
70
|
+
componentId: this.componentId
|
|
71
|
+
};
|
|
72
|
+
this.logger?.info?.(`Certificate issued for ${data.domain}`);
|
|
73
|
+
this.emitter.emit(ProxyEvents.CERTIFICATE_ISSUED, eventData);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Emit a certificate renewed event
|
|
77
|
+
*/
|
|
78
|
+
emitCertificateRenewed(data) {
|
|
79
|
+
const eventData = {
|
|
80
|
+
...data,
|
|
81
|
+
timestamp: Date.now(),
|
|
82
|
+
componentType: this.componentType,
|
|
83
|
+
componentId: this.componentId
|
|
84
|
+
};
|
|
85
|
+
this.logger?.info?.(`Certificate renewed for ${data.domain}`);
|
|
86
|
+
this.emitter.emit(ProxyEvents.CERTIFICATE_RENEWED, eventData);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Emit a certificate failed event
|
|
90
|
+
*/
|
|
91
|
+
emitCertificateFailed(data) {
|
|
92
|
+
const eventData = {
|
|
93
|
+
...data,
|
|
94
|
+
timestamp: Date.now(),
|
|
95
|
+
componentType: this.componentType,
|
|
96
|
+
componentId: this.componentId
|
|
97
|
+
};
|
|
98
|
+
this.logger?.error?.(`Certificate issuance failed for ${data.domain}: ${data.error}`);
|
|
99
|
+
this.emitter.emit(ProxyEvents.CERTIFICATE_FAILED, eventData);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Emit a certificate expiring event
|
|
103
|
+
*/
|
|
104
|
+
emitCertificateExpiring(data) {
|
|
105
|
+
const eventData = {
|
|
106
|
+
...data,
|
|
107
|
+
timestamp: Date.now(),
|
|
108
|
+
componentType: this.componentType,
|
|
109
|
+
componentId: this.componentId
|
|
110
|
+
};
|
|
111
|
+
this.logger?.warn?.(`Certificate expiring for ${data.domain} in ${data.daysRemaining} days`);
|
|
112
|
+
this.emitter.emit(ProxyEvents.CERTIFICATE_EXPIRING, eventData);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Emit a component started event
|
|
116
|
+
*/
|
|
117
|
+
emitComponentStarted(name, version) {
|
|
118
|
+
const eventData = {
|
|
119
|
+
name,
|
|
120
|
+
version,
|
|
121
|
+
timestamp: Date.now(),
|
|
122
|
+
componentType: this.componentType,
|
|
123
|
+
componentId: this.componentId
|
|
124
|
+
};
|
|
125
|
+
this.logger?.info?.(`Component ${name} started${version ? ` (v${version})` : ''}`);
|
|
126
|
+
this.emitter.emit(ProxyEvents.COMPONENT_STARTED, eventData);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Emit a component stopped event
|
|
130
|
+
*/
|
|
131
|
+
emitComponentStopped(name) {
|
|
132
|
+
const eventData = {
|
|
133
|
+
name,
|
|
134
|
+
timestamp: Date.now(),
|
|
135
|
+
componentType: this.componentType,
|
|
136
|
+
componentId: this.componentId
|
|
137
|
+
};
|
|
138
|
+
this.logger?.info?.(`Component ${name} stopped`);
|
|
139
|
+
this.emitter.emit(ProxyEvents.COMPONENT_STOPPED, eventData);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Emit a connection established event
|
|
143
|
+
*/
|
|
144
|
+
emitConnectionEstablished(data) {
|
|
145
|
+
const eventData = {
|
|
146
|
+
...data,
|
|
147
|
+
timestamp: Date.now(),
|
|
148
|
+
componentType: this.componentType,
|
|
149
|
+
componentId: this.componentId
|
|
150
|
+
};
|
|
151
|
+
this.logger?.debug?.(`Connection ${data.connectionId} established from ${data.clientIp} on port ${data.port}`);
|
|
152
|
+
this.emitter.emit(ProxyEvents.CONNECTION_ESTABLISHED, eventData);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Emit a connection closed event
|
|
156
|
+
*/
|
|
157
|
+
emitConnectionClosed(data) {
|
|
158
|
+
const eventData = {
|
|
159
|
+
...data,
|
|
160
|
+
timestamp: Date.now(),
|
|
161
|
+
componentType: this.componentType,
|
|
162
|
+
componentId: this.componentId
|
|
163
|
+
};
|
|
164
|
+
this.logger?.debug?.(`Connection ${data.connectionId} closed`);
|
|
165
|
+
this.emitter.emit(ProxyEvents.CONNECTION_CLOSED, eventData);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Emit a route matched event
|
|
169
|
+
*/
|
|
170
|
+
emitRouteMatched(data) {
|
|
171
|
+
const eventData = {
|
|
172
|
+
...data,
|
|
173
|
+
timestamp: Date.now(),
|
|
174
|
+
componentType: this.componentType,
|
|
175
|
+
componentId: this.componentId
|
|
176
|
+
};
|
|
177
|
+
this.logger?.debug?.(`Route matched: ${data.route.name || data.route.id || 'unnamed'}`);
|
|
178
|
+
this.emitter.emit(ProxyEvents.ROUTE_MATCHED, eventData);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Subscribe to an event
|
|
182
|
+
*/
|
|
183
|
+
on(event, handler) {
|
|
184
|
+
this.emitter.on(event, handler);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Subscribe to an event once
|
|
188
|
+
*/
|
|
189
|
+
once(event, handler) {
|
|
190
|
+
this.emitter.once(event, handler);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Unsubscribe from an event
|
|
194
|
+
*/
|
|
195
|
+
off(event, handler) {
|
|
196
|
+
this.emitter.off(event, handler);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Map Port80Handler events to standard proxy events
|
|
200
|
+
*/
|
|
201
|
+
subscribePort80HandlerEvents(handler) {
|
|
202
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_ISSUED, (data) => {
|
|
203
|
+
this.emitCertificateIssued({
|
|
204
|
+
...data,
|
|
205
|
+
isRenewal: false,
|
|
206
|
+
source: 'port80handler'
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_RENEWED, (data) => {
|
|
210
|
+
this.emitCertificateRenewed({
|
|
211
|
+
...data,
|
|
212
|
+
isRenewal: true,
|
|
213
|
+
source: 'port80handler'
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_FAILED, (data) => {
|
|
217
|
+
this.emitCertificateFailed(data);
|
|
218
|
+
});
|
|
219
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_EXPIRING, (data) => {
|
|
220
|
+
this.emitCertificateExpiring(data);
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtc3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY29yZS91dGlscy9ldmVudC1zeXN0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQU81QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFdBa0NYO0FBbENELFdBQVksV0FBVztJQUNyQixxQkFBcUI7SUFDckIsd0RBQXlDLENBQUE7SUFDekMsMERBQTJDLENBQUE7SUFDM0Msd0RBQXlDLENBQUE7SUFDekMsNERBQTZDLENBQUE7SUFFN0MsNkJBQTZCO0lBQzdCLHNEQUF1QyxDQUFBO0lBQ3ZDLHNEQUF1QyxDQUFBO0lBRXZDLG9CQUFvQjtJQUNwQixnRUFBaUQsQ0FBQTtJQUNqRCxzREFBdUMsQ0FBQTtJQUN2QyxvREFBcUMsQ0FBQTtJQUVyQyxpQkFBaUI7SUFDakIsb0RBQXFDLENBQUE7SUFDckMsc0RBQXVDLENBQUE7SUFDdkMsOENBQStCLENBQUE7SUFFL0IsZUFBZTtJQUNmLDhDQUErQixDQUFBO0lBQy9CLDhDQUErQixDQUFBO0lBQy9CLDBDQUEyQixDQUFBO0lBRTNCLGtCQUFrQjtJQUNsQixvREFBcUMsQ0FBQTtJQUNyQyxrRUFBbUQsQ0FBQTtJQUVuRCxhQUFhO0lBQ2IsOERBQStDLENBQUE7SUFDL0Msa0VBQW1ELENBQUE7SUFDbkQsNERBQTZDLENBQUE7QUFDL0MsQ0FBQyxFQWxDVyxXQUFXLEtBQVgsV0FBVyxRQWtDdEI7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBVVg7QUFWRCxXQUFZLGFBQWE7SUFDdkIsNENBQTJCLENBQUE7SUFDM0IsZ0RBQStCLENBQUE7SUFDL0Isa0RBQWlDLENBQUE7SUFDakMsa0RBQWlDLENBQUE7SUFDakMsNERBQTJDLENBQUE7SUFDM0MsZ0RB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
|
|
@@ -4,3 +4,10 @@
|
|
|
4
4
|
export * from './event-utils.js';
|
|
5
5
|
export * from './validation-utils.js';
|
|
6
6
|
export * from './ip-utils.js';
|
|
7
|
+
export * from './template-utils.js';
|
|
8
|
+
export * from './route-manager.js';
|
|
9
|
+
export * from './route-utils.js';
|
|
10
|
+
export * from './security-utils.js';
|
|
11
|
+
export * from './shared-security-manager.js';
|
|
12
|
+
export * from './event-system.js';
|
|
13
|
+
export * from './websocket-utils.js';
|
|
@@ -4,4 +4,11 @@
|
|
|
4
4
|
export * from './event-utils.js';
|
|
5
5
|
export * from './validation-utils.js';
|
|
6
6
|
export * from './ip-utils.js';
|
|
7
|
-
|
|
7
|
+
export * from './template-utils.js';
|
|
8
|
+
export * from './route-manager.js';
|
|
9
|
+
export * from './route-utils.js';
|
|
10
|
+
export * from './security-utils.js';
|
|
11
|
+
export * from './shared-security-manager.js';
|
|
12
|
+
export * from './event-system.js';
|
|
13
|
+
export * from './websocket-utils.js';
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsc0JBQXNCLENBQUMifQ==
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import type { IRouteConfig, TPortRange, IRouteContext } from '../../proxies/smart-proxy/models/route-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Result of route matching
|
|
5
|
+
*/
|
|
6
|
+
export interface IRouteMatchResult {
|
|
7
|
+
route: IRouteConfig;
|
|
8
|
+
params?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Logger interface for RouteManager
|
|
12
|
+
*/
|
|
13
|
+
export interface ILogger {
|
|
14
|
+
info: (message: string, ...args: any[]) => void;
|
|
15
|
+
warn: (message: string, ...args: any[]) => void;
|
|
16
|
+
error: (message: string, ...args: any[]) => void;
|
|
17
|
+
debug?: (message: string, ...args: any[]) => void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Shared RouteManager used by both SmartProxy and NetworkProxy
|
|
21
|
+
*
|
|
22
|
+
* This provides a unified implementation for route management,
|
|
23
|
+
* route matching, and port handling.
|
|
24
|
+
*/
|
|
25
|
+
export declare class SharedRouteManager extends plugins.EventEmitter {
|
|
26
|
+
private routes;
|
|
27
|
+
private portMap;
|
|
28
|
+
private logger;
|
|
29
|
+
private enableDetailedLogging;
|
|
30
|
+
/**
|
|
31
|
+
* Memoization cache for expanded port ranges
|
|
32
|
+
*/
|
|
33
|
+
private portRangeCache;
|
|
34
|
+
constructor(options: {
|
|
35
|
+
logger?: ILogger;
|
|
36
|
+
enableDetailedLogging?: boolean;
|
|
37
|
+
routes?: IRouteConfig[];
|
|
38
|
+
});
|
|
39
|
+
/**
|
|
40
|
+
* Update routes with new configuration
|
|
41
|
+
*/
|
|
42
|
+
updateRoutes(routes?: IRouteConfig[]): void;
|
|
43
|
+
/**
|
|
44
|
+
* Get all routes
|
|
45
|
+
*/
|
|
46
|
+
getRoutes(): IRouteConfig[];
|
|
47
|
+
/**
|
|
48
|
+
* Rebuild the port mapping for fast lookups
|
|
49
|
+
* Also logs information about the ports being listened on
|
|
50
|
+
*/
|
|
51
|
+
private rebuildPortMap;
|
|
52
|
+
/**
|
|
53
|
+
* Expand a port range specification into an array of individual ports
|
|
54
|
+
* Uses caching to improve performance for frequently used port ranges
|
|
55
|
+
*
|
|
56
|
+
* @public - Made public to allow external code to interpret port ranges
|
|
57
|
+
*/
|
|
58
|
+
expandPortRange(portRange: TPortRange): number[];
|
|
59
|
+
/**
|
|
60
|
+
* Get all ports that should be listened on
|
|
61
|
+
* This method automatically infers all required ports from route configurations
|
|
62
|
+
*/
|
|
63
|
+
getListeningPorts(): number[];
|
|
64
|
+
/**
|
|
65
|
+
* Get all routes for a given port
|
|
66
|
+
*/
|
|
67
|
+
getRoutesForPort(port: number): IRouteConfig[];
|
|
68
|
+
/**
|
|
69
|
+
* Find the matching route for a connection
|
|
70
|
+
*/
|
|
71
|
+
findMatchingRoute(context: IRouteContext): IRouteMatchResult | null;
|
|
72
|
+
/**
|
|
73
|
+
* Check if a route matches the given context
|
|
74
|
+
*/
|
|
75
|
+
private matchesRoute;
|
|
76
|
+
/**
|
|
77
|
+
* Match a domain pattern against a domain
|
|
78
|
+
* @deprecated Use the matchDomain function from route-utils.js instead
|
|
79
|
+
*/
|
|
80
|
+
matchDomain(pattern: string, domain: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Match a path pattern against a path
|
|
83
|
+
* @deprecated Use the matchPath function from route-utils.js instead
|
|
84
|
+
*/
|
|
85
|
+
matchPath(pattern: string, path: string): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Match an IP pattern against a pattern
|
|
88
|
+
* @deprecated Use the matchIpPattern function from route-utils.js instead
|
|
89
|
+
*/
|
|
90
|
+
matchIpPattern(pattern: string, ip: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Match an IP against a CIDR pattern
|
|
93
|
+
* @deprecated Use the matchIpCidr function from route-utils.js instead
|
|
94
|
+
*/
|
|
95
|
+
matchIpCidr(cidr: string, ip: string): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Convert an IP address to a numeric value
|
|
98
|
+
* @deprecated Use the ipToNumber function from route-utils.js instead
|
|
99
|
+
*/
|
|
100
|
+
private ipToNumber;
|
|
101
|
+
/**
|
|
102
|
+
* Validate the route configuration and return any warnings
|
|
103
|
+
*/
|
|
104
|
+
validateConfiguration(): string[];
|
|
105
|
+
/**
|
|
106
|
+
* Check if two route matches are similar (potential conflict)
|
|
107
|
+
*/
|
|
108
|
+
private areMatchesSimilar;
|
|
109
|
+
/**
|
|
110
|
+
* Check if a route is completely shadowed by a higher priority route
|
|
111
|
+
*/
|
|
112
|
+
private isRouteShadowed;
|
|
113
|
+
/**
|
|
114
|
+
* Check if route1 is more specific than route2
|
|
115
|
+
* @deprecated Use the calculateRouteSpecificity function from route-utils.js instead
|
|
116
|
+
*/
|
|
117
|
+
private isRouteMoreSpecific;
|
|
118
|
+
}
|