@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
TypeScript
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;
}