UNPKG

@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.

103 lines 6.91 kB
import * as plugins from './plugins.js'; /** * Manages domain configurations and target selection */ export class DomainConfigManager { constructor(settings) { this.settings = settings; // Track round-robin indices for domain configs this.domainTargetIndices = new Map(); } /** * Updates the domain configurations */ updateDomainConfigs(newDomainConfigs) { this.settings.domainConfigs = newDomainConfigs; // Reset target indices for removed configs const currentConfigSet = new Set(newDomainConfigs); for (const [config] of this.domainTargetIndices) { if (!currentConfigSet.has(config)) { this.domainTargetIndices.delete(config); } } } /** * Get all domain configurations */ getDomainConfigs() { return this.settings.domainConfigs; } /** * Find domain config matching a server name */ findDomainConfig(serverName) { if (!serverName) return undefined; return this.settings.domainConfigs.find((config) => config.domains.some((d) => plugins.minimatch(serverName, d))); } /** * Find domain config for a specific port */ findDomainConfigForPort(port) { return this.settings.domainConfigs.find((domain) => domain.portRanges && domain.portRanges.length > 0 && this.isPortInRanges(port, domain.portRanges)); } /** * Check if a port is within any of the given ranges */ isPortInRanges(port, ranges) { return ranges.some((range) => port >= range.from && port <= range.to); } /** * Get target IP with round-robin support */ getTargetIP(domainConfig) { if (domainConfig.targetIPs && domainConfig.targetIPs.length > 0) { const currentIndex = this.domainTargetIndices.get(domainConfig) || 0; const ip = domainConfig.targetIPs[currentIndex % domainConfig.targetIPs.length]; this.domainTargetIndices.set(domainConfig, currentIndex + 1); return ip; } return this.settings.targetIP || 'localhost'; } /** * Checks if a domain should use NetworkProxy */ shouldUseNetworkProxy(domainConfig) { return !!domainConfig.useNetworkProxy; } /** * Gets the NetworkProxy port for a domain */ getNetworkProxyPort(domainConfig) { return domainConfig.useNetworkProxy ? (domainConfig.networkProxyPort || this.settings.networkProxyPort) : undefined; } /** * Get effective allowed and blocked IPs for a domain */ getEffectiveIPRules(domainConfig) { return { allowedIPs: [ ...domainConfig.allowedIPs, ...(this.settings.defaultAllowedIPs || []) ], blockedIPs: [ ...(domainConfig.blockedIPs || []), ...(this.settings.defaultBlockedIPs || []) ] }; } /** * Get connection timeout for a domain */ getConnectionTimeout(domainConfig) { if (domainConfig?.connectionTimeout) { return domainConfig.connectionTimeout; } return this.settings.maxConnectionLifetime || 86400000; // 24 hours default } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5wcC5kb21haW5jb25maWdtYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5wcC5kb21haW5jb25maWdtYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBR3hDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QixZQUFvQixRQUE0QjtRQUE1QixhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUhoRCwrQ0FBK0M7UUFDdkMsd0JBQW1CLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFakIsQ0FBQztJQUVwRDs7T0FFRztJQUNJLG1CQUFtQixDQUFDLGdCQUFpQztRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUUvQywyQ0FBMkM7UUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQixDQUFDLFVBQWtCO1FBQ3hDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFbEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUs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