UNPKG

@push.rocks/smartproxy

Version:

A powerful proxy package that effectively handles high traffic, with features such as SSL/TLS support, port proxying, WebSocket handling, dynamic routing with authentication options, and automatic ACME certificate management.

134 lines (133 loc) 4.02 kB
import * as plugins from './plugins.js'; /** Domain configuration with per-domain allowed port ranges */ export interface IDomainConfig { domains: string[]; allowedIPs: string[]; blockedIPs?: string[]; targetIPs?: string[]; portRanges?: Array<{ from: number; to: number; }>; connectionTimeout?: number; useNetworkProxy?: boolean; networkProxyPort?: number; } /** Port proxy settings including global allowed port ranges */ export interface IPortProxySettings { fromPort: number; toPort: number; targetIP?: string; domainConfigs: IDomainConfig[]; sniEnabled?: boolean; defaultAllowedIPs?: string[]; defaultBlockedIPs?: string[]; preserveSourceIP?: boolean; pfx?: Buffer; key?: string | Buffer | Array<Buffer | string>; passphrase?: string; cert?: string | Buffer | Array<string | Buffer>; ca?: string | Buffer | Array<string | Buffer>; ciphers?: string; honorCipherOrder?: boolean; rejectUnauthorized?: boolean; secureProtocol?: string; servername?: string; minVersion?: string; maxVersion?: string; initialDataTimeout?: number; socketTimeout?: number; inactivityCheckInterval?: number; maxConnectionLifetime?: number; inactivityTimeout?: number; gracefulShutdownTimeout?: number; globalPortRanges: Array<{ from: number; to: number; }>; forwardAllGlobalRanges?: boolean; noDelay?: boolean; keepAlive?: boolean; keepAliveInitialDelay?: number; maxPendingDataSize?: number; disableInactivityCheck?: boolean; enableKeepAliveProbes?: boolean; enableDetailedLogging?: boolean; enableTlsDebugLogging?: boolean; enableRandomizedTimeouts?: boolean; allowSessionTicket?: boolean; maxConnectionsPerIP?: number; connectionRateLimitPerMinute?: number; keepAliveTreatment?: 'standard' | 'extended' | 'immortal'; keepAliveInactivityMultiplier?: number; extendedKeepAliveLifetime?: number; useNetworkProxy?: number[]; networkProxyPort?: number; port80HandlerConfig?: { enabled?: boolean; port?: number; contactEmail?: string; useProduction?: boolean; renewThresholdDays?: number; autoRenew?: boolean; certificateStore?: string; skipConfiguredCerts?: boolean; httpsRedirectPort?: number; renewCheckIntervalHours?: number; domainForwards?: Array<{ domain: string; forwardConfig?: { ip: string; port: number; }; acmeForwardConfig?: { ip: string; port: number; }; }>; }; acme?: { enabled?: boolean; port?: number; contactEmail?: string; useProduction?: boolean; renewThresholdDays?: number; autoRenew?: boolean; certificateStore?: string; skipConfiguredCerts?: boolean; }; } /** * Enhanced connection record */ export interface IConnectionRecord { id: string; incoming: plugins.net.Socket; outgoing: plugins.net.Socket | null; incomingStartTime: number; outgoingStartTime?: number; outgoingClosedTime?: number; lockedDomain?: string; connectionClosed: boolean; cleanupTimer?: NodeJS.Timeout; alertFallbackTimeout?: NodeJS.Timeout; lastActivity: number; pendingData: Buffer[]; pendingDataSize: number; bytesReceived: number; bytesSent: number; remoteIP: string; localPort: number; isTLS: boolean; tlsHandshakeComplete: boolean; hasReceivedInitialData: boolean; domainConfig?: IDomainConfig; hasKeepAlive: boolean; inactivityWarningIssued?: boolean; incomingTerminationReason?: string | null; outgoingTerminationReason?: string | null; usingNetworkProxy?: boolean; renegotiationHandler?: (chunk: Buffer) => void; isBrowserConnection?: boolean; domainSwitches?: number; }