Compare commits

...

16 Commits

Author SHA1 Message Date
e8a539829a 10.0.10
Some checks failed
Default (tags) / security (push) Successful in 42s
Default (tags) / test (push) Failing after 1m15s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-05 10:46:05 +00:00
a646f4ad28 fix(docs): Update README: rename certProviderFunction to certProvisionFunction in configuration options for consistency. 2025-05-05 10:46:05 +00:00
aa70dcc299 10.0.9
Some checks failed
Default (tags) / security (push) Successful in 25s
Default (tags) / test (push) Failing after 1m13s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-05 10:30:08 +00:00
adb85d920f fix(documentation): Update documentation to use certProviderFunction instead of certProvider in SmartProxy settings. 2025-05-05 10:30:08 +00:00
2e4c6312cd 10.0.8
Some checks failed
Default (tags) / security (push) Successful in 32s
Default (tags) / test (push) Failing after 1m17s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-05 10:29:00 +00:00
9b773608c7 fix(smartproxy): rename certProvider to certProvisionFunction in certificate provisioning interfaces and SmartProxy 2025-05-05 10:29:00 +00:00
3502807023 10.0.7
Some checks failed
Default (tags) / security (push) Successful in 43s
Default (tags) / test (push) Failing after 1m26s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-04 13:49:22 +00:00
c6dff8b78d fix(core): refactor: Rename IPortProxySettings to ISmartProxyOptions in internal modules 2025-05-04 13:49:22 +00:00
12b18373db 10.0.6
Some checks failed
Default (tags) / security (push) Successful in 31s
Default (tags) / test (push) Failing after 1m15s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-04 13:05:48 +00:00
30c25ec70c fix(smartproxy): No changes detected in project files. This commit updates commit info without modifying any functionality. 2025-05-04 13:05:48 +00:00
434834fc06 10.0.5
Some checks failed
Default (tags) / security (push) Successful in 38s
Default (tags) / test (push) Failing after 1m15s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-04 13:04:35 +00:00
e7243243d0 fix(exports/types): Refactor exports and remove duplicate IReverseProxyConfig interface 2025-05-04 13:04:34 +00:00
cce2aed892 10.0.4
Some checks failed
Default (tags) / security (push) Successful in 42s
Default (tags) / test (push) Failing after 1m16s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-04 12:44:35 +00:00
8cd693c063 fix(core): Refactor module exports and update packageManager version in package.json 2025-05-04 12:44:35 +00:00
09ad7644f4 10.0.3
Some checks failed
Default (tags) / security (push) Successful in 46s
Default (tags) / test (push) Failing after 1m19s
Default (tags) / release (push) Has been skipped
Default (tags) / metadata (push) Has been skipped
2025-05-04 12:21:02 +00:00
f72f884eda fix(smartproxy): Update dependency versions (@push.rocks/smartacme to ^7.2.4, @push.rocks/smartnetwork to ^4.0.1, ws to ^8.18.2) and export common types via index.ts for easier imports. 2025-05-04 12:21:02 +00:00
20 changed files with 119 additions and 61 deletions

View File

@ -1,5 +1,55 @@
# Changelog
## 2025-05-05 - 10.0.10 - fix(docs)
Update README: rename certProviderFunction to certProvisionFunction in configuration options for consistency.
- Replaced 'certProviderFunction' with 'certProvisionFunction' in the docs to reflect the updated API.
- Ensured all references in the readme are consistent with the new naming convention.
## 2025-05-05 - 10.0.9 - fix(documentation)
Update documentation to use 'certProviderFunction' instead of 'certProvider' in SmartProxy settings.
- Renamed 'certProvider' to 'certProviderFunction' in README examples and configuration options.
- Ensured consistency in the configuration section of the documentation.
## 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)
No changes detected in project files. This commit updates commit info without modifying any functionality.
## 2025-05-04 - 10.0.5 - fix(exports/types)
Refactor exports and remove duplicate IReverseProxyConfig interface
- Removed redundant IReverseProxyConfig extension from ts/common/types.ts
- Updated ts/index.ts to export networkproxy via index.js instead of classes.np.networkproxy.js
- Simplified module exports to avoid duplicate interface definitions
## 2025-05-04 - 10.0.4 - fix(core)
Refactor module exports and update packageManager version in package.json
- In package.json, bumped pnpm version from 10.7.0 to 10.10.0 for dependency consistency.
- In ts/index.ts, removed redundant type export and now export common types directly.
- In ts/smartproxy/classes.smartproxy.ts, reorganized imports and explicitly export IPortProxySettings and IDomainConfig.
## 2025-05-04 - 10.0.3 - fix(smartproxy)
Update dependency versions (@push.rocks/smartacme to ^7.2.4, @push.rocks/smartnetwork to ^4.0.1, ws to ^8.18.2) and export common types via index.ts for easier imports.
- Upgrade @push.rocks/smartacme from ^7.2.3 to ^7.2.4
- Upgrade @push.rocks/smartnetwork from ^4.0.0 to ^4.0.1
- Upgrade ws from ^8.18.1 to ^8.18.2
- Export common types from ts/common/types.ts in index.ts
## 2025-05-03 - 10.0.2 - fix(tlsalert)
Centralize plugin imports in TlsAlert and update plan checklist

View File

@ -1,6 +1,6 @@
{
"name": "@push.rocks/smartproxy",
"version": "10.0.2",
"version": "10.0.10",
"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.",
"main": "dist_ts/index.js",
@ -24,9 +24,9 @@
},
"dependencies": {
"@push.rocks/lik": "^6.2.2",
"@push.rocks/smartacme": "^7.2.3",
"@push.rocks/smartacme": "^7.2.4",
"@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartnetwork": "^4.0.0",
"@push.rocks/smartnetwork": "^4.0.1",
"@push.rocks/smartpromise": "^4.2.3",
"@push.rocks/smartrequest": "^2.1.0",
"@push.rocks/smartstring": "^4.0.15",
@ -36,7 +36,7 @@
"@types/ws": "^8.18.1",
"minimatch": "^10.0.1",
"pretty-ms": "^9.2.0",
"ws": "^8.18.1"
"ws": "^8.18.2"
},
"files": [
"ts/**/*",
@ -86,5 +86,5 @@
"puppeteer"
]
},
"packageManager": "pnpm@10.7.0+sha512.6b865ad4b62a1d9842b61d674a393903b871d9244954f652b8842c2b553c72176b278f64c463e52d40fff8aba385c235c8c9ecf5cc7de4fd78b8bb6d49633ab6"
"packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39"
}

43
pnpm-lock.yaml generated
View File

@ -12,14 +12,14 @@ importers:
specifier: ^6.2.2
version: 6.2.2
'@push.rocks/smartacme':
specifier: ^7.2.3
version: 7.2.3(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)
specifier: ^7.2.4
version: 7.2.4(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)
'@push.rocks/smartdelay':
specifier: ^3.0.5
version: 3.0.5
'@push.rocks/smartnetwork':
specifier: ^4.0.0
version: 4.0.0
specifier: ^4.0.1
version: 4.0.1
'@push.rocks/smartpromise':
specifier: ^4.2.3
version: 4.2.3
@ -48,8 +48,8 @@ importers:
specifier: ^9.2.0
version: 9.2.0
ws:
specifier: ^8.18.1
version: 8.18.1
specifier: ^8.18.2
version: 8.18.2
devDependencies:
'@git.zone/tsbuild':
specifier: ^2.3.2
@ -355,8 +355,8 @@ packages:
'@cloudflare/workers-types@4.20250303.0':
resolution: {integrity: sha512-O7F7nRT4bbmwHf3gkRBLfJ7R6vHIJ/oZzWdby6obOiw2yavUfp/AIwS7aO2POu5Cv8+h3TXS3oHs3kKCZLraUA==}
'@cloudflare/workers-types@4.20250430.0':
resolution: {integrity: sha512-JWAX7ZhQ7KjkdJwASgG58MZ/pQ15brlnZ9/0YBwDQ0hrJ/LaK392aTRFlj2r/PRKDZ5dOuujRywNYaNpfeFiEA==}
'@cloudflare/workers-types@4.20250504.0':
resolution: {integrity: sha512-/70Kb5vrqj+O0krOuS8LVLiCeDuCGzQy4X+wGGs4/rHv0gZJulv7Uj5YlUjIaRemK/Dyrzlk7WNJwTy8yv0cIw==}
'@colors/colors@1.6.0':
resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==}
@ -872,8 +872,8 @@ packages:
'@push.rocks/qenv@6.1.0':
resolution: {integrity: sha512-1FUFMlSVwFSFg8LbqfkzJ2LLP4lMGApUtgOpsvrde6+AxBmB4gjoNgCUH7z3xXfDAtYqcrtSELXBNE0xVL1MqQ==}
'@push.rocks/smartacme@7.2.3':
resolution: {integrity: sha512-PTwn/Zf7l+IMWqeiQ8mTxi7fdrtObQH13YzF65si/VxXTqHeZ7zvisLLKZcMEgSaOj1aQ/Ku83gaO8YqO4gDig==}
'@push.rocks/smartacme@7.2.4':
resolution: {integrity: sha512-0ciewRheDAwv0ER0ZyLQVLAn0ZoG1++ibSZ14HoXn8GOTOLyuRLWLNDQL2fI4LtLxeaNYmQUS+f7tt4KaZb/UA==}
'@push.rocks/smartarchive@3.0.8':
resolution: {integrity: sha512-1jPmR0b7hXmjYQoRiTlRXrIbZcdcFmSdGOfznufjcDpGPe86Km0d8TBnzqghTx4dTihzKC67IxAaz/DM3lvxpA==}
@ -974,8 +974,8 @@ packages:
'@push.rocks/smartnetwork@3.0.2':
resolution: {integrity: sha512-s6CNGzQ1n/d/6cOKXbxeW6/tO//dr1woLqI01g7XhqTriw0nsm2G2kWaZh2J0VOguGNWBgQVCIpR0LjdRNWb3g==}
'@push.rocks/smartnetwork@4.0.0':
resolution: {integrity: sha512-hLE1JNrBjlWtibgFz7t2aMfP15VOfPFyKMpo6FI0JdhmJfD3V5w/nFpSdD6WdXeXUBjCVTJ3C6SrRl8izoG55g==}
'@push.rocks/smartnetwork@4.0.1':
resolution: {integrity: sha512-zLH88bKY6/cK6vVnCW4Fsugu4T+l6OerWWappit+BecdnQ6vrgShXSAa13JIkkWkWcs4dxEirlEfycQEEQw8BQ==}
'@push.rocks/smartnpm@2.0.4':
resolution: {integrity: sha512-ljRPqnUsXzL5qnuAEt5POy0NnfKs7eYPuuJPJjYiK9VUdP/CyF4h14qTB4H816vNEuF7VU/ASRtz0qDlXmrztg==}
@ -4622,8 +4622,8 @@ packages:
utf-8-validate:
optional: true
ws@8.18.1:
resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==}
ws@8.18.2:
resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@ -4760,7 +4760,7 @@ snapshots:
'@api.global/typedrequest': 3.1.10
'@api.global/typedrequest-interfaces': 3.0.19
'@api.global/typedsocket': 3.0.1
'@cloudflare/workers-types': 4.20250430.0
'@cloudflare/workers-types': 4.20250504.0
'@design.estate/dees-comms': 1.0.27
'@push.rocks/lik': 6.2.2
'@push.rocks/smartchok': 1.0.34
@ -5671,7 +5671,7 @@ snapshots:
'@cloudflare/workers-types@4.20250303.0': {}
'@cloudflare/workers-types@4.20250430.0': {}
'@cloudflare/workers-types@4.20250504.0': {}
'@colors/colors@1.6.0': {}
@ -5950,7 +5950,7 @@ snapshots:
'@push.rocks/tapbundle': 5.6.3(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)
'@types/ws': 8.18.1
figures: 6.1.0
ws: 8.18.1
ws: 8.18.2
transitivePeerDependencies:
- '@aws-sdk/credential-providers'
- '@mongodb-js/zstd'
@ -6284,7 +6284,7 @@ snapshots:
'@push.rocks/smartlog': 3.0.7
'@push.rocks/smartpath': 5.0.18
'@push.rocks/smartacme@7.2.3(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)':
'@push.rocks/smartacme@7.2.4(@aws-sdk/credential-providers@3.798.0)(socks@2.8.4)':
dependencies:
'@api.global/typedserver': 3.0.74
'@apiclient.xyz/cloudflare': 6.4.1
@ -6304,6 +6304,7 @@ snapshots:
- '@aws-sdk/credential-providers'
- '@mongodb-js/zstd'
- '@nuxt/kit'
- aws-crt
- bufferutil
- encoding
- gcp-metadata
@ -6605,7 +6606,7 @@ snapshots:
public-ip: 6.0.2
systeminformation: 5.25.11
'@push.rocks/smartnetwork@4.0.0':
'@push.rocks/smartnetwork@4.0.1':
dependencies:
'@push.rocks/smartping': 1.0.8
'@push.rocks/smartpromise': 4.2.3
@ -10544,7 +10545,7 @@ snapshots:
debug: 4.4.0
devtools-protocol: 0.0.1413902
typed-query-selector: 2.12.0
ws: 8.18.1
ws: 8.18.2
transitivePeerDependencies:
- bare-buffer
- bufferutil
@ -11303,7 +11304,7 @@ snapshots:
ws@8.17.1: {}
ws@8.18.1: {}
ws@8.18.2: {}
xml-js@1.6.11:
dependencies:

View File

@ -384,7 +384,7 @@ Listen for certificate events via EventEmitter:
- **SmartProxy**:
- `certificate` (domain, publicKey, privateKey, expiryDate, source, isRenewal)
Provide a `certProvider(domain)` in SmartProxy settings to supply static certs or return `'http01'`.
Provide a `certProvisionFunction(domain)` in SmartProxy settings to supply static certs or return `'http01'`.
## Configuration Options
@ -429,7 +429,7 @@ Provide a `certProvider(domain)` in SmartProxy settings to supply static certs o
- `sniEnabled`, `defaultAllowedIPs`, `preserveSourceIP` (booleans)
- Timeouts: `initialDataTimeout`, `socketTimeout`, `inactivityTimeout`, etc.
- Socket opts: `noDelay`, `keepAlive`, `enableKeepAliveProbes`
- `acme` (IAcmeOptions), `certProvider` (callback)
- `acme` (IAcmeOptions), `certProvisionFunction` (callback)
- `useNetworkProxy` (number[]), `networkProxyPort` (number)
## Troubleshooting

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@push.rocks/smartproxy',
version: '10.0.2',
version: '10.0.10',
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.'
}

View File

@ -1,3 +1,5 @@
import * as plugins from '../plugins.js';
/**
* Shared types for certificate management and domain options
*/
@ -75,9 +77,9 @@ export interface IDomainForwardConfig {
* Unified ACME configuration options used across proxies and handlers
*/
export interface IAcmeOptions {
accountEmail?: string; // Email for Let's Encrypt account
enabled?: boolean; // Whether ACME is enabled
port?: number; // Port to listen on for ACME challenges (default: 80)
contactEmail?: string; // Email for Let's Encrypt account
useProduction?: boolean; // Use production environment (default: staging)
httpsRedirectPort?: number; // Port to redirect HTTP requests to HTTPS (default: 443)
renewThresholdDays?: number; // Days before expiry to renew certificates
@ -86,4 +88,4 @@ export interface IAcmeOptions {
certificateStore?: string; // Directory to store certificates
skipConfiguredCerts?: boolean; // Skip domains with existing certificates
domainForwards?: IDomainForwardConfig[]; // Domain-specific forwarding configs
}
}

View File

@ -1,7 +1,9 @@
export * from './nfttablesproxy/classes.nftablesproxy.js';
export * from './networkproxy/classes.np.networkproxy.js';
export * from './networkproxy/index.js';
export * from './port80handler/classes.port80handler.js';
export * from './redirect/classes.redirect.js';
export * from './smartproxy/classes.smartproxy.js';
export * from './smartproxy/classes.pp.snihandler.js';
export * from './smartproxy/classes.pp.interfaces.js';
export * from './common/types.js';

View File

@ -357,7 +357,7 @@ export class CertificateManager {
// Build and configure Port80Handler
this.port80Handler = buildPort80Handler({
port: this.options.acme.port,
contactEmail: this.options.acme.contactEmail,
accountEmail: this.options.acme.accountEmail,
useProduction: this.options.acme.useProduction,
httpsRedirectPort: this.options.port, // Redirect to our HTTPS port
enabled: this.options.acme.enabled,

View File

@ -76,7 +76,7 @@ export class NetworkProxy implements IMetricsTracker {
acme: {
enabled: optionsArg.acme?.enabled || false,
port: optionsArg.acme?.port || 80,
contactEmail: optionsArg.acme?.contactEmail || 'admin@example.com',
accountEmail: optionsArg.acme?.accountEmail || 'admin@example.com',
useProduction: optionsArg.acme?.useProduction || false, // Default to staging for safety
renewThresholdDays: optionsArg.acme?.renewThresholdDays || 30,
autoRenew: optionsArg.acme?.autoRenew !== false, // Default to true

View File

@ -101,7 +101,7 @@ export class Port80Handler extends plugins.EventEmitter {
// Default options
this.options = {
port: options.port ?? 80,
contactEmail: options.contactEmail ?? 'admin@example.com',
accountEmail: options.accountEmail ?? 'admin@example.com',
useProduction: options.useProduction ?? false, // Safer default: staging
httpsRedirectPort: options.httpsRedirectPort ?? 443,
enabled: options.enabled ?? true, // Enable by default
@ -134,7 +134,7 @@ export class Port80Handler extends plugins.EventEmitter {
// Initialize SmartAcme for ACME challenge management (diskless HTTP handler)
if (this.options.enabled) {
this.smartAcme = new plugins.smartacme.SmartAcme({
accountEmail: this.options.contactEmail,
accountEmail: this.options.accountEmail,
certManager: new plugins.smartacme.MemoryCertManager(),
environment: this.options.useProduction ? 'production' : 'integration',
challengeHandlers: [ new DisklessHttp01Handler(this.acmeHttp01Storage) ],

View File

@ -2,7 +2,7 @@ import * as plugins from '../plugins.js';
import type {
IConnectionRecord,
IDomainConfig,
IPortProxySettings,
ISmartProxyOptions,
} from './classes.pp.interfaces.js';
import { ConnectionManager } from './classes.pp.connectionmanager.js';
import { SecurityManager } from './classes.pp.securitymanager.js';
@ -17,7 +17,7 @@ import { PortRangeManager } from './classes.pp.portrangemanager.js';
*/
export class ConnectionHandler {
constructor(
private settings: IPortProxySettings,
private settings: ISmartProxyOptions,
private connectionManager: ConnectionManager,
private securityManager: SecurityManager,
private domainConfigManager: DomainConfigManager,

View File

@ -1,5 +1,5 @@
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 { TimeoutManager } from './classes.pp.timeoutmanager.js';
@ -14,7 +14,7 @@ export class ConnectionManager {
} = { incoming: {}, outgoing: {} };
constructor(
private settings: IPortProxySettings,
private settings: ISmartProxyOptions,
private securityManager: SecurityManager,
private timeoutManager: TimeoutManager
) {}

View File

@ -1,5 +1,5 @@
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
@ -8,7 +8,7 @@ export class DomainConfigManager {
// Track round-robin indices for domain configs
private domainTargetIndices: Map<IDomainConfig, number> = new Map();
constructor(private settings: IPortProxySettings) {}
constructor(private settings: ISmartProxyOptions) {}
/**
* Updates the domain configurations

View File

@ -22,7 +22,7 @@ export interface IDomainConfig {
/** Port proxy settings including global allowed port ranges */
import type { IAcmeOptions } from '../common/types.js';
export interface IPortProxySettings {
export interface ISmartProxyOptions {
fromPort: number;
toPort: number;
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,
* or a static certificate object for immediate provisioning.
*/
certProvider?: (domain: string) => Promise<ISmartProxyCertProvisionObject>;
certProvisionFunction?: (domain: string) => Promise<ISmartProxyCertProvisionObject>;
}
/**

View File

@ -4,7 +4,7 @@ import { Port80Handler } from '../port80handler/classes.port80handler.js';
import { Port80HandlerEvents } from '../common/types.js';
import { subscribeToPort80Handler } from '../common/eventUtils.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
@ -13,7 +13,7 @@ export class NetworkProxyBridge {
private networkProxy: NetworkProxy | null = null;
private port80Handler: Port80Handler | null = null;
constructor(private settings: IPortProxySettings) {}
constructor(private settings: ISmartProxyOptions) {}
/**
* Set the Port80Handler to use for certificate management

View File

@ -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
*/
export class PortRangeManager {
constructor(private settings: IPortProxySettings) {}
constructor(private settings: ISmartProxyOptions) {}
/**
* Get all ports that should be listened on

View File

@ -1,5 +1,5 @@
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
@ -8,7 +8,7 @@ export class SecurityManager {
private connectionsByIP: Map<string, Set<string>> = new Map();
private connectionRateByIP: Map<string, number[]> = new Map();
constructor(private settings: IPortProxySettings) {}
constructor(private settings: ISmartProxyOptions) {}
/**
* Get connections count by IP

View File

@ -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
*/
export class TimeoutManager {
constructor(private settings: IPortProxySettings) {}
constructor(private settings: ISmartProxyOptions) {}
/**
* Ensure timeout values don't exceed Node.js max safe integer

View File

@ -1,5 +1,5 @@
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';
/**
@ -16,7 +16,7 @@ interface IConnectionInfo {
* Manages TLS-related operations including SNI extraction and validation
*/
export class TlsManager {
constructor(private settings: IPortProxySettings) {}
constructor(private settings: ISmartProxyOptions) {}
/**
* Check if a data chunk appears to be a TLS handshake

View File

@ -1,5 +1,5 @@
import * as plugins from '../plugins.js';
import type { IPortProxySettings, IDomainConfig } from './classes.pp.interfaces.js';
import { ConnectionManager } from './classes.pp.connectionmanager.js';
import { SecurityManager } from './classes.pp.securitymanager.js';
import { DomainConfigManager } from './classes.pp.domainconfigmanager.js';
@ -13,6 +13,9 @@ import { CertProvisioner } from './classes.pp.certprovisioner.js';
import type { ICertificateData } from '../common/types.js';
import { buildPort80Handler } from '../common/acmeFactory.js';
import type { ISmartProxyOptions, IDomainConfig } from './classes.pp.interfaces.js';
export type { ISmartProxyOptions as IPortProxySettings, IDomainConfig };
/**
* SmartProxy - Main class that coordinates all components
*/
@ -36,7 +39,7 @@ export class SmartProxy extends plugins.EventEmitter {
// CertProvisioner for unified certificate workflows
private certProvisioner?: CertProvisioner;
constructor(settingsArg: IPortProxySettings) {
constructor(settingsArg: ISmartProxyOptions) {
super();
// Set reasonable defaults for all settings
this.settings = {
@ -75,7 +78,7 @@ export class SmartProxy extends plugins.EventEmitter {
this.settings.acme = {
enabled: false,
port: 80,
contactEmail: 'admin@example.com',
accountEmail: 'admin@example.com',
useProduction: false,
renewThresholdDays: 30,
autoRenew: true,
@ -116,7 +119,7 @@ export class SmartProxy extends plugins.EventEmitter {
/**
* The settings for the port proxy
*/
public settings: IPortProxySettings;
public settings: ISmartProxyOptions;
/**
* Initialize the Port80Handler for ACME certificate management
@ -162,7 +165,7 @@ export class SmartProxy extends plugins.EventEmitter {
this.settings.domainConfigs,
this.port80Handler,
this.networkProxyBridge,
this.settings.certProvider,
this.settings.certProvisionFunction,
acme.renewThresholdDays!,
acme.renewCheckIntervalHours!,
acme.autoRenew!,
@ -390,9 +393,9 @@ export class SmartProxy extends plugins.EventEmitter {
for (const domain of domainConfig.domains) {
if (domain.includes('*')) continue;
let provision = 'http01' as string | plugins.tsclass.network.ICert;
if (this.settings.certProvider) {
if (this.settings.certProvisionFunction) {
try {
provision = await this.settings.certProvider(domain);
provision = await this.settings.certProvisionFunction(domain);
} catch (err) {
console.log(`certProvider error for ${domain}: ${err}`);
}