UNPKG

@push.rocks/smartproxy

Version:

A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.

125 lines (111 loc) 3.36 kB
import * as plugins from '../../../plugins.js'; // Certificate types removed - define IAcmeOptions locally export interface IAcmeOptions { enabled: boolean; email?: string; accountEmail?: string; port?: number; certificateStore?: string; environment?: 'production' | 'staging'; useProduction?: boolean; renewThresholdDays?: number; autoRenew?: boolean; skipConfiguredCerts?: boolean; } import type { IRouteConfig } from '../../smart-proxy/models/route-types.js'; /** * Configuration options for HttpProxy */ export interface IHttpProxyOptions { port: number; maxConnections?: number; keepAliveTimeout?: number; headersTimeout?: number; logLevel?: 'error' | 'warn' | 'info' | 'debug'; cors?: { allowOrigin?: string; allowMethods?: string; allowHeaders?: string; maxAge?: number; }; // Settings for SmartProxy integration connectionPoolSize?: number; // Maximum connections to maintain in the pool to each backend portProxyIntegration?: boolean; // Flag to indicate this proxy is used by SmartProxy // Protocol to use when proxying to backends: HTTP/1.x or HTTP/2 backendProtocol?: 'http1' | 'http2'; // Function cache options functionCacheSize?: number; // Maximum number of cached function results (default: 1000) functionCacheTtl?: number; // Time to live for cached function results in ms (default: 5000) // ACME certificate management options acme?: IAcmeOptions; // Direct route configurations routes?: IRouteConfig[]; // Rate limiting and security maxConnectionsPerIP?: number; // Maximum simultaneous connections from a single IP connectionRateLimitPerMinute?: number; // Max new connections per minute from a single IP } /** * Interface for a certificate entry in the cache */ export interface ICertificateEntry { key: string; cert: string; expires?: Date; } /** * Interface for connection tracking in the pool */ export interface IConnectionEntry { socket: plugins.net.Socket; lastUsed: number; isIdle: boolean; } /** * WebSocket with heartbeat interface */ export interface IWebSocketWithHeartbeat extends plugins.wsDefault { lastPong: number; isAlive: boolean; } /** * Logger interface for consistent logging across components */ export interface ILogger { debug(message: string, data?: any): void; info(message: string, data?: any): void; warn(message: string, data?: any): void; error(message: string, data?: any): void; } /** * Creates a logger based on the specified log level */ export function createLogger(logLevel: string = 'info'): ILogger { const logLevels = { error: 0, warn: 1, info: 2, debug: 3 }; return { debug: (message: string, data?: any) => { if (logLevels[logLevel] >= logLevels.debug) { console.log(`[DEBUG] ${message}`, data || ''); } }, info: (message: string, data?: any) => { if (logLevels[logLevel] >= logLevels.info) { console.log(`[INFO] ${message}`, data || ''); } }, warn: (message: string, data?: any) => { if (logLevels[logLevel] >= logLevels.warn) { console.warn(`[WARN] ${message}`, data || ''); } }, error: (message: string, data?: any) => { if (logLevels[logLevel] >= logLevels.error) { console.error(`[ERROR] ${message}`, data || ''); } } }; }