feat(smartproxy): Update documentation and route helper functions; add createPortRange, createSecurityConfig, createStaticFileRoute, and createTestRoute helpers to the readme and tests. Refactor test examples to use the new helper API and remove legacy connection handling files (including the old connection handler and PortRangeManager) to fully embrace the unified route‐based configuration.

This commit is contained in:
2025-05-10 07:34:35 +00:00
parent 36bea96ac7
commit b4a0e4be6b
14 changed files with 458 additions and 193 deletions

View File

@ -23,10 +23,10 @@ export type TPortRange = number | number[] | Array<{ from: number; to: number }>
export interface IRouteMatch {
// Listen on these ports (required)
ports: TPortRange;
// Optional domain patterns to match (default: all domains)
domains?: string | string[];
// Advanced matching criteria
path?: string; // Match specific paths
clientIp?: string[]; // Match specific client IPs
@ -61,6 +61,25 @@ export interface IRouteRedirect {
status: 301 | 302 | 307 | 308;
}
/**
* Authentication options
*/
export interface IRouteAuthentication {
type: 'basic' | 'digest' | 'oauth' | 'jwt';
credentials?: {
username: string;
password: string;
}[];
realm?: string;
jwtSecret?: string;
jwtIssuer?: string;
oauthProvider?: string;
oauthClientId?: string;
oauthClientSecret?: string;
oauthRedirectUri?: string;
[key: string]: any; // Allow additional auth-specific options
}
/**
* Security options for route actions
*/
@ -68,10 +87,28 @@ export interface IRouteSecurity {
allowedIps?: string[];
blockedIps?: string[];
maxConnections?: number;
authentication?: {
type: 'basic' | 'digest' | 'oauth';
// Auth-specific options would go here
};
authentication?: IRouteAuthentication;
}
/**
* Static file server configuration
*/
export interface IRouteStaticFiles {
directory: string;
indexFiles?: string[];
cacheControl?: string;
expires?: number;
followSymlinks?: boolean;
disableDirectoryListing?: boolean;
}
/**
* Test route response configuration
*/
export interface IRouteTestResponse {
status: number;
headers: Record<string, string>;
body: string;
}
/**
@ -81,6 +118,8 @@ export interface IRouteAdvanced {
timeout?: number;
headers?: Record<string, string>;
keepAlive?: boolean;
staticFiles?: IRouteStaticFiles;
testResponse?: IRouteTestResponse;
// Additional advanced options would go here
}
@ -90,19 +129,19 @@ export interface IRouteAdvanced {
export interface IRouteAction {
// Basic routing
type: TRouteActionType;
// Target for forwarding
target?: IRouteTarget;
// TLS handling
tls?: IRouteTls;
// For redirects
redirect?: IRouteRedirect;
// Security options
security?: IRouteSecurity;
// Advanced options
advanced?: IRouteAdvanced;
}
@ -113,10 +152,10 @@ export interface IRouteAction {
export interface IRouteConfig {
// What to match
match: IRouteMatch;
// What to do with matched traffic
action: IRouteAction;
// Optional metadata
name?: string; // Human-readable name for this route
description?: string; // Description of the route's purpose
@ -130,7 +169,7 @@ export interface IRouteConfig {
export interface IRoutedSmartProxyOptions {
// The unified configuration array (required)
routes: IRouteConfig[];
// Global/default settings
defaults?: {
target?: {
@ -141,10 +180,10 @@ export interface IRoutedSmartProxyOptions {
tls?: IRouteTls;
// ...other defaults
};
// Other global settings remain (acme, etc.)
acme?: IAcmeOptions;
// Connection timeouts and other global settings
initialDataTimeout?: number;
socketTimeout?: number;
@ -152,13 +191,13 @@ export interface IRoutedSmartProxyOptions {
maxConnectionLifetime?: number;
inactivityTimeout?: number;
gracefulShutdownTimeout?: number;
// Socket optimization settings
noDelay?: boolean;
keepAlive?: boolean;
keepAliveInitialDelay?: number;
maxPendingDataSize?: number;
// Enhanced features
disableInactivityCheck?: boolean;
enableKeepAliveProbes?: boolean;
@ -166,16 +205,16 @@ export interface IRoutedSmartProxyOptions {
enableTlsDebugLogging?: boolean;
enableRandomizedTimeouts?: boolean;
allowSessionTicket?: boolean;
// Rate limiting and security
maxConnectionsPerIP?: number;
connectionRateLimitPerMinute?: number;
// Enhanced keep-alive settings
keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
keepAliveInactivityMultiplier?: number;
extendedKeepAliveLifetime?: number;
/**
* Optional certificate provider callback. Return 'http01' to use HTTP-01 challenges,
* or a static certificate object for immediate provisioning.