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:
@ -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.
|
||||
|
Reference in New Issue
Block a user