@push.rocks/smartproxy 16.0.2 → 16.0.4

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 +149 -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 -4
  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 +197 -85
  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 +77 -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
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartproxy',
6
- version: '16.0.2',
6
+ version: '16.0.4',
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,3 +2,5 @@
2
2
  * Core data models and interfaces
3
3
  */
4
4
  export * from './common-types.js';
5
+ export * from './socket-augmentation.js';
6
+ export * from './route-context.js';
@@ -2,4 +2,6 @@
2
2
  * Core data models and interfaces
3
3
  */
4
4
  export * from './common-types.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsbUJBQW1CLENBQUMifQ==
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZUFBZSxDQUFDIn0=
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==