@push.rocks/smartproxy
Version:
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.
201 lines (200 loc) • 5.98 kB
TypeScript
import type { ICertificateData, ICertificateFailure, ICertificateExpiring } from '../models/common-types.js';
import type { IRouteConfig } from '../../proxies/smart-proxy/models/route-types.js';
/**
* Standardized event names used throughout the system
*/
export declare enum ProxyEvents {
CERTIFICATE_ISSUED = "certificate:issued",
CERTIFICATE_RENEWED = "certificate:renewed",
CERTIFICATE_FAILED = "certificate:failed",
CERTIFICATE_EXPIRING = "certificate:expiring",
COMPONENT_STARTED = "component:started",
COMPONENT_STOPPED = "component:stopped",
CONNECTION_ESTABLISHED = "connection:established",
CONNECTION_CLOSED = "connection:closed",
CONNECTION_ERROR = "connection:error",
REQUEST_RECEIVED = "request:received",
REQUEST_COMPLETED = "request:completed",
REQUEST_ERROR = "request:error",
ROUTE_MATCHED = "route:matched",
ROUTE_UPDATED = "route:updated",
ROUTE_ERROR = "route:error",
SECURITY_BLOCKED = "security:blocked",
SECURITY_BREACH_ATTEMPT = "security:breach-attempt",
TLS_HANDSHAKE_STARTED = "tls:handshake-started",
TLS_HANDSHAKE_COMPLETED = "tls:handshake-completed",
TLS_HANDSHAKE_FAILED = "tls:handshake-failed"
}
/**
* Component types for event metadata
*/
export declare enum ComponentType {
SMART_PROXY = "smart-proxy",
NETWORK_PROXY = "network-proxy",
NFTABLES_PROXY = "nftables-proxy",
PORT80_HANDLER = "port80-handler",
CERTIFICATE_MANAGER = "certificate-manager",
ROUTE_MANAGER = "route-manager",
CONNECTION_MANAGER = "connection-manager",
TLS_MANAGER = "tls-manager",
SECURITY_MANAGER = "security-manager"
}
/**
* Base event data interface
*/
export interface IEventData {
timestamp: number;
componentType: ComponentType;
componentId?: string;
}
/**
* Certificate event data
*/
export interface ICertificateEventData extends IEventData, ICertificateData {
isRenewal?: boolean;
source?: string;
}
/**
* Certificate failure event data
*/
export interface ICertificateFailureEventData extends IEventData, ICertificateFailure {
}
/**
* Certificate expiring event data
*/
export interface ICertificateExpiringEventData extends IEventData, ICertificateExpiring {
}
/**
* Component lifecycle event data
*/
export interface IComponentEventData extends IEventData {
name: string;
version?: string;
}
/**
* Connection event data
*/
export interface IConnectionEventData extends IEventData {
connectionId: string;
clientIp: string;
serverIp?: string;
port: number;
isTls?: boolean;
domain?: string;
}
/**
* Request event data
*/
export interface IRequestEventData extends IEventData {
connectionId: string;
requestId: string;
method?: string;
path?: string;
statusCode?: number;
duration?: number;
routeId?: string;
routeName?: string;
}
/**
* Route event data
*/
export interface IRouteEventData extends IEventData {
route: IRouteConfig;
context?: any;
}
/**
* Security event data
*/
export interface ISecurityEventData extends IEventData {
clientIp: string;
reason: string;
routeId?: string;
routeName?: string;
}
/**
* TLS event data
*/
export interface ITlsEventData extends IEventData {
connectionId: string;
domain?: string;
clientIp: string;
tlsVersion?: string;
cipherSuite?: string;
sniHostname?: string;
}
/**
* Logger interface for event system
*/
export interface IEventLogger {
info: (message: string, ...args: any[]) => void;
warn: (message: string, ...args: any[]) => void;
error: (message: string, ...args: any[]) => void;
debug?: (message: string, ...args: any[]) => void;
}
/**
* Event handler type
*/
export type EventHandler<T> = (data: T) => void;
/**
* Helper class to standardize event emission and handling
* across all system components
*/
export declare class EventSystem {
private emitter;
private componentType;
private componentId;
private logger?;
constructor(componentType: ComponentType, componentId?: string, logger?: IEventLogger);
/**
* Emit a certificate issued event
*/
emitCertificateIssued(data: Omit<ICertificateEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
/**
* Emit a certificate renewed event
*/
emitCertificateRenewed(data: Omit<ICertificateEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
/**
* Emit a certificate failed event
*/
emitCertificateFailed(data: Omit<ICertificateFailureEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
/**
* Emit a certificate expiring event
*/
emitCertificateExpiring(data: Omit<ICertificateExpiringEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
/**
* Emit a component started event
*/
emitComponentStarted(name: string, version?: string): void;
/**
* Emit a component stopped event
*/
emitComponentStopped(name: string): void;
/**
* Emit a connection established event
*/
emitConnectionEstablished(data: Omit<IConnectionEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
/**
* Emit a connection closed event
*/
emitConnectionClosed(data: Omit<IConnectionEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
/**
* Emit a route matched event
*/
emitRouteMatched(data: Omit<IRouteEventData, 'timestamp' | 'componentType' | 'componentId'>): void;
/**
* Subscribe to an event
*/
on<T>(event: ProxyEvents, handler: EventHandler<T>): void;
/**
* Subscribe to an event once
*/
once<T>(event: ProxyEvents, handler: EventHandler<T>): void;
/**
* Unsubscribe from an event
*/
off<T>(event: ProxyEvents, handler: EventHandler<T>): void;
/**
* Map Port80Handler events to standard proxy events
*/
subscribePort80HandlerEvents(handler: any): void;
}