Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
2e4c6312cd | |||
9b773608c7 | |||
3502807023 | |||
c6dff8b78d |
12
changelog.md
12
changelog.md
@ -1,5 +1,17 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2025-05-05 - 10.0.8 - fix(smartproxy)
|
||||||
|
rename certProvider to certProvisionFunction in certificate provisioning interfaces and SmartProxy
|
||||||
|
|
||||||
|
- In ts/smartproxy/classes.pp.interfaces.ts, renamed the optional property 'certProvider' to 'certProvisionFunction'.
|
||||||
|
- In ts/smartproxy/classes.smartproxy.ts, updated references from this.settings.certProvider to this.settings.certProvisionFunction.
|
||||||
|
|
||||||
|
## 2025-05-04 - 10.0.7 - fix(core)
|
||||||
|
refactor: Rename IPortProxySettings to ISmartProxyOptions in internal modules
|
||||||
|
|
||||||
|
- Replaced IPortProxySettings with ISmartProxyOptions in connection handler, connection manager, domain config manager, security manager, timeout manager, TLS manager, and network proxy bridge.
|
||||||
|
- Updated type imports and constructors accordingly while preserving backward compatibility via export alias.
|
||||||
|
|
||||||
## 2025-05-04 - 10.0.6 - fix(smartproxy)
|
## 2025-05-04 - 10.0.6 - fix(smartproxy)
|
||||||
No changes detected in project files. This commit updates commit info without modifying any functionality.
|
No changes detected in project files. This commit updates commit info without modifying any functionality.
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@push.rocks/smartproxy",
|
"name": "@push.rocks/smartproxy",
|
||||||
"version": "10.0.6",
|
"version": "10.0.8",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "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.",
|
"description": "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.",
|
||||||
"main": "dist_ts/index.js",
|
"main": "dist_ts/index.js",
|
||||||
|
@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/smartproxy',
|
name: '@push.rocks/smartproxy',
|
||||||
version: '10.0.6',
|
version: '10.0.8',
|
||||||
description: '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.'
|
description: '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.'
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ import * as plugins from '../plugins.js';
|
|||||||
import type {
|
import type {
|
||||||
IConnectionRecord,
|
IConnectionRecord,
|
||||||
IDomainConfig,
|
IDomainConfig,
|
||||||
IPortProxySettings,
|
ISmartProxyOptions,
|
||||||
} from './classes.pp.interfaces.js';
|
} from './classes.pp.interfaces.js';
|
||||||
import { ConnectionManager } from './classes.pp.connectionmanager.js';
|
import { ConnectionManager } from './classes.pp.connectionmanager.js';
|
||||||
import { SecurityManager } from './classes.pp.securitymanager.js';
|
import { SecurityManager } from './classes.pp.securitymanager.js';
|
||||||
@ -17,7 +17,7 @@ import { PortRangeManager } from './classes.pp.portrangemanager.js';
|
|||||||
*/
|
*/
|
||||||
export class ConnectionHandler {
|
export class ConnectionHandler {
|
||||||
constructor(
|
constructor(
|
||||||
private settings: IPortProxySettings,
|
private settings: ISmartProxyOptions,
|
||||||
private connectionManager: ConnectionManager,
|
private connectionManager: ConnectionManager,
|
||||||
private securityManager: SecurityManager,
|
private securityManager: SecurityManager,
|
||||||
private domainConfigManager: DomainConfigManager,
|
private domainConfigManager: DomainConfigManager,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import type { IConnectionRecord, IPortProxySettings } from './classes.pp.interfaces.js';
|
import type { IConnectionRecord, ISmartProxyOptions } from './classes.pp.interfaces.js';
|
||||||
import { SecurityManager } from './classes.pp.securitymanager.js';
|
import { SecurityManager } from './classes.pp.securitymanager.js';
|
||||||
import { TimeoutManager } from './classes.pp.timeoutmanager.js';
|
import { TimeoutManager } from './classes.pp.timeoutmanager.js';
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ export class ConnectionManager {
|
|||||||
} = { incoming: {}, outgoing: {} };
|
} = { incoming: {}, outgoing: {} };
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private settings: IPortProxySettings,
|
private settings: ISmartProxyOptions,
|
||||||
private securityManager: SecurityManager,
|
private securityManager: SecurityManager,
|
||||||
private timeoutManager: TimeoutManager
|
private timeoutManager: TimeoutManager
|
||||||
) {}
|
) {}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import type { IDomainConfig, IPortProxySettings } from './classes.pp.interfaces.js';
|
import type { IDomainConfig, ISmartProxyOptions } from './classes.pp.interfaces.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages domain configurations and target selection
|
* Manages domain configurations and target selection
|
||||||
@ -8,7 +8,7 @@ export class DomainConfigManager {
|
|||||||
// Track round-robin indices for domain configs
|
// Track round-robin indices for domain configs
|
||||||
private domainTargetIndices: Map<IDomainConfig, number> = new Map();
|
private domainTargetIndices: Map<IDomainConfig, number> = new Map();
|
||||||
|
|
||||||
constructor(private settings: IPortProxySettings) {}
|
constructor(private settings: ISmartProxyOptions) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the domain configurations
|
* Updates the domain configurations
|
||||||
|
@ -22,7 +22,7 @@ export interface IDomainConfig {
|
|||||||
|
|
||||||
/** Port proxy settings including global allowed port ranges */
|
/** Port proxy settings including global allowed port ranges */
|
||||||
import type { IAcmeOptions } from '../common/types.js';
|
import type { IAcmeOptions } from '../common/types.js';
|
||||||
export interface IPortProxySettings {
|
export interface ISmartProxyOptions {
|
||||||
fromPort: number;
|
fromPort: number;
|
||||||
toPort: number;
|
toPort: number;
|
||||||
targetIP?: string; // Global target host to proxy to, defaults to 'localhost'
|
targetIP?: string; // Global target host to proxy to, defaults to 'localhost'
|
||||||
@ -91,7 +91,7 @@ export interface IPortProxySettings {
|
|||||||
* Optional certificate provider callback. Return 'http01' to use HTTP-01 challenges,
|
* Optional certificate provider callback. Return 'http01' to use HTTP-01 challenges,
|
||||||
* or a static certificate object for immediate provisioning.
|
* or a static certificate object for immediate provisioning.
|
||||||
*/
|
*/
|
||||||
certProvider?: (domain: string) => Promise<ISmartProxyCertProvisionObject>;
|
certProvisionFunction?: (domain: string) => Promise<ISmartProxyCertProvisionObject>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4,7 +4,7 @@ import { Port80Handler } from '../port80handler/classes.port80handler.js';
|
|||||||
import { Port80HandlerEvents } from '../common/types.js';
|
import { Port80HandlerEvents } from '../common/types.js';
|
||||||
import { subscribeToPort80Handler } from '../common/eventUtils.js';
|
import { subscribeToPort80Handler } from '../common/eventUtils.js';
|
||||||
import type { ICertificateData } from '../common/types.js';
|
import type { ICertificateData } from '../common/types.js';
|
||||||
import type { IConnectionRecord, IPortProxySettings, IDomainConfig } from './classes.pp.interfaces.js';
|
import type { IConnectionRecord, ISmartProxyOptions, IDomainConfig } from './classes.pp.interfaces.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages NetworkProxy integration for TLS termination
|
* Manages NetworkProxy integration for TLS termination
|
||||||
@ -13,7 +13,7 @@ export class NetworkProxyBridge {
|
|||||||
private networkProxy: NetworkProxy | null = null;
|
private networkProxy: NetworkProxy | null = null;
|
||||||
private port80Handler: Port80Handler | null = null;
|
private port80Handler: Port80Handler | null = null;
|
||||||
|
|
||||||
constructor(private settings: IPortProxySettings) {}
|
constructor(private settings: ISmartProxyOptions) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the Port80Handler to use for certificate management
|
* Set the Port80Handler to use for certificate management
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import type{ IPortProxySettings } from './classes.pp.interfaces.js';
|
import type{ ISmartProxyOptions } from './classes.pp.interfaces.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages port ranges and port-based configuration
|
* Manages port ranges and port-based configuration
|
||||||
*/
|
*/
|
||||||
export class PortRangeManager {
|
export class PortRangeManager {
|
||||||
constructor(private settings: IPortProxySettings) {}
|
constructor(private settings: ISmartProxyOptions) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all ports that should be listened on
|
* Get all ports that should be listened on
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import type { IPortProxySettings } from './classes.pp.interfaces.js';
|
import type { ISmartProxyOptions } from './classes.pp.interfaces.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles security aspects like IP tracking, rate limiting, and authorization
|
* Handles security aspects like IP tracking, rate limiting, and authorization
|
||||||
@ -8,7 +8,7 @@ export class SecurityManager {
|
|||||||
private connectionsByIP: Map<string, Set<string>> = new Map();
|
private connectionsByIP: Map<string, Set<string>> = new Map();
|
||||||
private connectionRateByIP: Map<string, number[]> = new Map();
|
private connectionRateByIP: Map<string, number[]> = new Map();
|
||||||
|
|
||||||
constructor(private settings: IPortProxySettings) {}
|
constructor(private settings: ISmartProxyOptions) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get connections count by IP
|
* Get connections count by IP
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import type { IConnectionRecord, IPortProxySettings } from './classes.pp.interfaces.js';
|
import type { IConnectionRecord, ISmartProxyOptions } from './classes.pp.interfaces.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages timeouts and inactivity tracking for connections
|
* Manages timeouts and inactivity tracking for connections
|
||||||
*/
|
*/
|
||||||
export class TimeoutManager {
|
export class TimeoutManager {
|
||||||
constructor(private settings: IPortProxySettings) {}
|
constructor(private settings: ISmartProxyOptions) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure timeout values don't exceed Node.js max safe integer
|
* Ensure timeout values don't exceed Node.js max safe integer
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import * as plugins from '../plugins.js';
|
import * as plugins from '../plugins.js';
|
||||||
import type { IPortProxySettings } from './classes.pp.interfaces.js';
|
import type { ISmartProxyOptions } from './classes.pp.interfaces.js';
|
||||||
import { SniHandler } from './classes.pp.snihandler.js';
|
import { SniHandler } from './classes.pp.snihandler.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -16,7 +16,7 @@ interface IConnectionInfo {
|
|||||||
* Manages TLS-related operations including SNI extraction and validation
|
* Manages TLS-related operations including SNI extraction and validation
|
||||||
*/
|
*/
|
||||||
export class TlsManager {
|
export class TlsManager {
|
||||||
constructor(private settings: IPortProxySettings) {}
|
constructor(private settings: ISmartProxyOptions) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a data chunk appears to be a TLS handshake
|
* Check if a data chunk appears to be a TLS handshake
|
||||||
|
@ -13,8 +13,8 @@ import { CertProvisioner } from './classes.pp.certprovisioner.js';
|
|||||||
import type { ICertificateData } from '../common/types.js';
|
import type { ICertificateData } from '../common/types.js';
|
||||||
import { buildPort80Handler } from '../common/acmeFactory.js';
|
import { buildPort80Handler } from '../common/acmeFactory.js';
|
||||||
|
|
||||||
import type { IPortProxySettings, IDomainConfig } from './classes.pp.interfaces.js';
|
import type { ISmartProxyOptions, IDomainConfig } from './classes.pp.interfaces.js';
|
||||||
export type { IPortProxySettings, IDomainConfig };
|
export type { ISmartProxyOptions as IPortProxySettings, IDomainConfig };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SmartProxy - Main class that coordinates all components
|
* SmartProxy - Main class that coordinates all components
|
||||||
@ -39,7 +39,7 @@ export class SmartProxy extends plugins.EventEmitter {
|
|||||||
// CertProvisioner for unified certificate workflows
|
// CertProvisioner for unified certificate workflows
|
||||||
private certProvisioner?: CertProvisioner;
|
private certProvisioner?: CertProvisioner;
|
||||||
|
|
||||||
constructor(settingsArg: IPortProxySettings) {
|
constructor(settingsArg: ISmartProxyOptions) {
|
||||||
super();
|
super();
|
||||||
// Set reasonable defaults for all settings
|
// Set reasonable defaults for all settings
|
||||||
this.settings = {
|
this.settings = {
|
||||||
@ -119,7 +119,7 @@ export class SmartProxy extends plugins.EventEmitter {
|
|||||||
/**
|
/**
|
||||||
* The settings for the port proxy
|
* The settings for the port proxy
|
||||||
*/
|
*/
|
||||||
public settings: IPortProxySettings;
|
public settings: ISmartProxyOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the Port80Handler for ACME certificate management
|
* Initialize the Port80Handler for ACME certificate management
|
||||||
@ -165,7 +165,7 @@ export class SmartProxy extends plugins.EventEmitter {
|
|||||||
this.settings.domainConfigs,
|
this.settings.domainConfigs,
|
||||||
this.port80Handler,
|
this.port80Handler,
|
||||||
this.networkProxyBridge,
|
this.networkProxyBridge,
|
||||||
this.settings.certProvider,
|
this.settings.certProvisionFunction,
|
||||||
acme.renewThresholdDays!,
|
acme.renewThresholdDays!,
|
||||||
acme.renewCheckIntervalHours!,
|
acme.renewCheckIntervalHours!,
|
||||||
acme.autoRenew!,
|
acme.autoRenew!,
|
||||||
@ -393,9 +393,9 @@ export class SmartProxy extends plugins.EventEmitter {
|
|||||||
for (const domain of domainConfig.domains) {
|
for (const domain of domainConfig.domains) {
|
||||||
if (domain.includes('*')) continue;
|
if (domain.includes('*')) continue;
|
||||||
let provision = 'http01' as string | plugins.tsclass.network.ICert;
|
let provision = 'http01' as string | plugins.tsclass.network.ICert;
|
||||||
if (this.settings.certProvider) {
|
if (this.settings.certProvisionFunction) {
|
||||||
try {
|
try {
|
||||||
provision = await this.settings.certProvider(domain);
|
provision = await this.settings.certProvisionFunction(domain);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(`certProvider error for ${domain}: ${err}`);
|
console.log(`certProvider error for ${domain}: ${err}`);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user