@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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- 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/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 +3 -5
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +56 -3
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +4 -57
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +19 -228
- 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 +5 -0
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +131 -15
- package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +3 -1
- package/dist_ts/proxies/smart-proxy/route-helpers/index.js +5 -3
- package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +5 -178
- package/dist_ts/proxies/smart-proxy/route-helpers.js +8 -296
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +11 -2
- package/dist_ts/proxies/smart-proxy/route-manager.js +79 -10
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +29 -2
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +48 -43
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +67 -1
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +120 -1
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +3 -3
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +27 -5
- package/package.json +1 -1
- package/readme.md +102 -14
- package/readme.plan.md +103 -168
- package/ts/00_commitinfo_data.ts +1 -1
- 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/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 +7 -4
- package/ts/proxies/smart-proxy/models/route-types.ts +78 -10
- package/ts/proxies/smart-proxy/network-proxy-bridge.ts +20 -257
- package/ts/proxies/smart-proxy/port-manager.ts +195 -0
- package/ts/proxies/smart-proxy/route-connection-handler.ts +156 -21
- package/ts/proxies/smart-proxy/route-manager.ts +98 -14
- package/ts/proxies/smart-proxy/smart-proxy.ts +56 -55
- package/ts/proxies/smart-proxy/utils/route-helpers.ts +167 -1
- package/ts/proxies/smart-proxy/utils/route-validators.ts +24 -5
- package/ts/proxies/smart-proxy/domain-config-manager.ts.bak +0 -441
- package/ts/proxies/smart-proxy/route-helpers/index.ts +0 -9
- package/ts/proxies/smart-proxy/route-helpers.ts +0 -498
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartproxy',
|
|
6
|
-
version: '16.0.
|
|
6
|
+
version: '16.0.3',
|
|
7
7
|
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.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHFQQUFxUDtDQUNuUSxDQUFBIn0=
|
|
@@ -2,4 +2,6 @@
|
|
|
2
2
|
* Core data models and interfaces
|
|
3
3
|
*/
|
|
4
4
|
export * from './common-types.js';
|
|
5
|
-
|
|
5
|
+
export * from './socket-augmentation.js';
|
|
6
|
+
export * from './route-context.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLG9CQUFvQixDQUFDIn0=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Shared Route Context Interface
|
|
4
|
+
*
|
|
5
|
+
* This interface defines the route context object that is used by both
|
|
6
|
+
* SmartProxy and NetworkProxy, ensuring consistent context throughout the system.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Route context for route matching and function-based target resolution
|
|
10
|
+
*/
|
|
11
|
+
export interface IRouteContext {
|
|
12
|
+
port: number;
|
|
13
|
+
domain?: string;
|
|
14
|
+
clientIp: string;
|
|
15
|
+
serverIp: string;
|
|
16
|
+
path?: string;
|
|
17
|
+
query?: string;
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
isTls: boolean;
|
|
20
|
+
tlsVersion?: string;
|
|
21
|
+
routeName?: string;
|
|
22
|
+
routeId?: string;
|
|
23
|
+
targetHost?: string | string[];
|
|
24
|
+
targetPort?: number;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
connectionId: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Extended context interface with HTTP-specific objects
|
|
30
|
+
* Used only in NetworkProxy for HTTP request handling
|
|
31
|
+
*/
|
|
32
|
+
export interface IHttpRouteContext extends IRouteContext {
|
|
33
|
+
req?: plugins.http.IncomingMessage;
|
|
34
|
+
res?: plugins.http.ServerResponse;
|
|
35
|
+
method?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extended context interface with HTTP/2-specific objects
|
|
39
|
+
* Used only in NetworkProxy for HTTP/2 request handling
|
|
40
|
+
*/
|
|
41
|
+
export interface IHttp2RouteContext extends IHttpRouteContext {
|
|
42
|
+
stream?: plugins.http2.ServerHttp2Stream;
|
|
43
|
+
headers?: Record<string, string>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a basic route context from connection information
|
|
47
|
+
*/
|
|
48
|
+
export declare function createBaseRouteContext(options: {
|
|
49
|
+
port: number;
|
|
50
|
+
clientIp: string;
|
|
51
|
+
serverIp: string;
|
|
52
|
+
domain?: string;
|
|
53
|
+
isTls: boolean;
|
|
54
|
+
tlsVersion?: string;
|
|
55
|
+
connectionId: string;
|
|
56
|
+
}): IRouteContext;
|
|
57
|
+
/**
|
|
58
|
+
* Convert IHttpRouteContext to IRouteContext
|
|
59
|
+
* This is used to ensure type compatibility when passing HTTP-specific context
|
|
60
|
+
* to methods that require the base IRouteContext type
|
|
61
|
+
*/
|
|
62
|
+
export declare function toBaseContext(httpContext: IHttpRouteContext): IRouteContext;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a basic route context from connection information
|
|
4
|
+
*/
|
|
5
|
+
export function createBaseRouteContext(options) {
|
|
6
|
+
return {
|
|
7
|
+
...options,
|
|
8
|
+
timestamp: Date.now(),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Convert IHttpRouteContext to IRouteContext
|
|
13
|
+
* This is used to ensure type compatibility when passing HTTP-specific context
|
|
14
|
+
* to methods that require the base IRouteContext type
|
|
15
|
+
*/
|
|
16
|
+
export function toBaseContext(httpContext) {
|
|
17
|
+
// Create a new object with only the properties from IRouteContext
|
|
18
|
+
const baseContext = {
|
|
19
|
+
port: httpContext.port,
|
|
20
|
+
domain: httpContext.domain,
|
|
21
|
+
clientIp: httpContext.clientIp,
|
|
22
|
+
serverIp: httpContext.serverIp,
|
|
23
|
+
path: httpContext.path,
|
|
24
|
+
query: httpContext.query,
|
|
25
|
+
headers: httpContext.headers,
|
|
26
|
+
isTls: httpContext.isTls,
|
|
27
|
+
tlsVersion: httpContext.tlsVersion,
|
|
28
|
+
routeName: httpContext.routeName,
|
|
29
|
+
routeId: httpContext.routeId,
|
|
30
|
+
timestamp: httpContext.timestamp,
|
|
31
|
+
connectionId: httpContext.connectionId
|
|
32
|
+
};
|
|
33
|
+
// Only copy targetHost if it's a string
|
|
34
|
+
if (httpContext.targetHost) {
|
|
35
|
+
baseContext.targetHost = httpContext.targetHost;
|
|
36
|
+
}
|
|
37
|
+
// Copy targetPort if it exists
|
|
38
|
+
if (httpContext.targetPort) {
|
|
39
|
+
baseContext.targetPort = httpContext.targetPort;
|
|
40
|
+
}
|
|
41
|
+
return baseContext;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvcmUvbW9kZWxzL3JvdXRlLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQTRENUM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FRdEM7SUFDQyxPQUFPO1FBQ0wsR0FBRyxPQUFPO1FBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7S0FDdEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxXQUE4QjtJQUMxRCxrRUFBa0U7SUFDbEUsTUFBTSxXQUFXLEdBQWtCO1FBQ2pDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtRQUN0QixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07UUFDMUIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO1FBQzlCLFFBQVEsRUFBRSxXQUFXLENBQUMsUUFBUTtRQUM5QixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7UUFDdEIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLO1FBQ3hCLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztRQUM1QixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7UUFDeEIsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVO1FBQ2xDLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUztRQUNoQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDNUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO1FBQ2hDLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtLQUN2QyxDQUFDO0lBRUYsd0NBQXdDO0lBQ3hDLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
declare module 'net' {
|
|
3
|
+
interface Socket {
|
|
4
|
+
encrypted?: boolean;
|
|
5
|
+
authorizationError?: Error;
|
|
6
|
+
getTLSVersion?(): string;
|
|
7
|
+
getPeerCertificate?(detailed?: boolean): any;
|
|
8
|
+
getSession?(): Buffer;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export declare function isTLSSocket(socket: plugins.net.Socket): boolean;
|
|
12
|
+
export declare function getTLSVersion(socket: plugins.net.Socket): string | null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
// Export a utility function to check if a socket is a TLS socket
|
|
3
|
+
export function isTLSSocket(socket) {
|
|
4
|
+
return 'encrypted' in socket && !!socket.encrypted;
|
|
5
|
+
}
|
|
6
|
+
// Export a utility function to safely get the TLS version
|
|
7
|
+
export function getTLSVersion(socket) {
|
|
8
|
+
if (socket.getTLSVersion) {
|
|
9
|
+
try {
|
|
10
|
+
return socket.getTLSVersion();
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LWF1Z21lbnRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvcmUvbW9kZWxzL3NvY2tldC1hdWdtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQWlCNUMsaUVBQWlFO0FBQ2pFLE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBMEI7SUFDcEQsT0FBTyxXQUFXLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ3JELENBQUM7QUFFRCwwREFBMEQ7QUFDMUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUEwQjtJQUN0RCxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
|
|
@@ -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==
|