@codelook/proxy-server
Version:
HTTP/HTTPS proxy server with Docker deployment and Cloudflare Workers support
90 lines (84 loc) • 2 kB
TypeScript
import { IncomingMessage } from 'http';
interface ProxyConfig {
port: number;
host?: string;
auth?: {
enabled: boolean;
token?: string;
};
target?: {
changeOrigin?: boolean;
secure?: boolean;
};
rateLimit?: {
windowMs?: number;
maxRequests?: number;
};
logging?: {
level?: 'debug' | 'info' | 'warn' | 'error';
pretty?: boolean;
};
}
interface ProxyRequest {
id: string;
method: string;
url: string;
headers: Record<string, string>;
timestamp: Date;
}
interface ProxyResponse {
id: string;
statusCode: number;
headers: Record<string, string>;
duration: number;
}
declare class ProxyServer {
private config;
private proxy;
private server;
private logger;
private auth;
private rateLimiter;
private requestCount;
constructor(config: ProxyConfig);
private setupProxyHandlers;
start(port?: number): Promise<void>;
stop(): Promise<void>;
private extractTargetUrl;
private parseConnectUrl;
private getClientIp;
private generateRequestId;
}
interface AuthConfig {
enabled?: boolean;
token?: string;
}
declare class AuthMiddleware {
private enabled;
private token;
constructor(config?: AuthConfig);
authenticate(req: IncomingMessage): boolean;
/**
* 生成新的认证令牌
*/
static generateToken(): string;
}
interface RateLimitConfig {
windowMs?: number;
maxRequests?: number;
}
declare class RateLimiter {
private windowMs;
private maxRequests;
private clients;
constructor(config?: RateLimitConfig);
allow(clientIp: string): boolean;
private cleanup;
reset(clientIp?: string): void;
getStatus(clientIp: string): {
requests: number;
remaining: number;
resetTime: number;
} | null;
}
export { AuthMiddleware, type ProxyConfig, type ProxyRequest, type ProxyResponse, ProxyServer, RateLimiter };