BREAKING CHANGE(project-structure): Refactor project structure by updating import paths, removing legacy files, and adjusting test configurations
This commit is contained in:
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@push.rocks/smartproxy',
|
||||
version: '12.2.0',
|
||||
version: '13.0.0',
|
||||
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.'
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ import * as path from 'path';
|
||||
import type { AcmeOptions } from '../models/certificate-types.js';
|
||||
import { ensureCertificateDirectory } from '../utils/certificate-helpers.js';
|
||||
// We'll need to update this import when we move the Port80Handler
|
||||
import { Port80Handler } from '../../port80handler/classes.port80handler.js';
|
||||
import { Port80Handler } from '../../http/port80/port80-handler.js';
|
||||
|
||||
/**
|
||||
* Factory to create a Port80Handler with common setup.
|
||||
|
@ -2,7 +2,7 @@ import * as plugins from '../../plugins.js';
|
||||
import type { DomainConfig } from '../../forwarding/config/domain-config.js';
|
||||
import type { CertificateData, DomainForwardConfig, DomainOptions } from '../models/certificate-types.js';
|
||||
import { Port80HandlerEvents, CertProvisionerEvents } from '../events/certificate-events.js';
|
||||
import { Port80Handler } from '../../port80handler/classes.port80handler.js';
|
||||
import { Port80Handler } from '../../http/port80/port80-handler.js';
|
||||
// We need to define this interface until we migrate NetworkProxyBridge
|
||||
interface NetworkProxyBridge {
|
||||
applyExternalCertificate(certData: CertificateData): void;
|
||||
|
@ -1,4 +1,4 @@
|
||||
import type { Port80Handler } from '../port80handler/classes.port80handler.js';
|
||||
import type { Port80Handler } from '../http/port80/port80-handler.js';
|
||||
import { Port80HandlerEvents } from './types.js';
|
||||
import type { ICertificateData, ICertificateFailure, ICertificateExpiring } from './types.js';
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
import type { Port80Handler } from '../../port80handler/classes.port80handler.js';
|
||||
import type { Port80Handler } from '../../http/port80/port80-handler.js';
|
||||
import { Port80HandlerEvents } from '../models/common-types.js';
|
||||
import type { ICertificateData, ICertificateFailure, ICertificateExpiring } from '../models/common-types.js';
|
||||
|
||||
|
@ -10,10 +10,14 @@ export * from './port80/index.js';
|
||||
export * from './router/index.js';
|
||||
export * from './redirects/index.js';
|
||||
|
||||
// Import the components we need for the namespace
|
||||
import { Port80Handler } from './port80/port80-handler.js';
|
||||
import { ChallengeResponder } from './port80/challenge-responder.js';
|
||||
|
||||
// Convenience namespace exports
|
||||
export const Http = {
|
||||
Port80: {
|
||||
Handler: require('./port80/port80-handler.js').Port80Handler,
|
||||
ChallengeResponder: require('./port80/challenge-responder.js').ChallengeResponder
|
||||
Handler: Port80Handler,
|
||||
ChallengeResponder: ChallengeResponder
|
||||
}
|
||||
};
|
||||
|
@ -5,15 +5,14 @@
|
||||
// Legacy exports (to maintain backward compatibility)
|
||||
// Migrated to the new proxies structure
|
||||
export * from './proxies/nftables-proxy/index.js';
|
||||
export * from './networkproxy/index.js';
|
||||
export * from './proxies/network-proxy/index.js';
|
||||
// Export port80handler elements selectively to avoid conflicts
|
||||
export {
|
||||
Port80Handler,
|
||||
default as Port80HandlerDefault,
|
||||
HttpError,
|
||||
Port80HandlerError as HttpError,
|
||||
ServerError,
|
||||
CertificateError
|
||||
} from './port80handler/classes.port80handler.js';
|
||||
} from './http/port80/port80-handler.js';
|
||||
// Use re-export to control the names
|
||||
export { Port80HandlerEvents } from './certificate/events/certificate-events.js';
|
||||
|
||||
|
@ -1,126 +0,0 @@
|
||||
import * as plugins from '../plugins.js';
|
||||
|
||||
/**
|
||||
* Configuration options for NetworkProxy
|
||||
*/
|
||||
import type { IAcmeOptions } from '../common/types.js';
|
||||
|
||||
/**
|
||||
* Configuration options for NetworkProxy
|
||||
*/
|
||||
export interface INetworkProxyOptions {
|
||||
port: number;
|
||||
maxConnections?: number;
|
||||
keepAliveTimeout?: number;
|
||||
headersTimeout?: number;
|
||||
logLevel?: 'error' | 'warn' | 'info' | 'debug';
|
||||
cors?: {
|
||||
allowOrigin?: string;
|
||||
allowMethods?: string;
|
||||
allowHeaders?: string;
|
||||
maxAge?: number;
|
||||
};
|
||||
|
||||
// Settings for PortProxy integration
|
||||
connectionPoolSize?: number; // Maximum connections to maintain in the pool to each backend
|
||||
portProxyIntegration?: boolean; // Flag to indicate this proxy is used by PortProxy
|
||||
useExternalPort80Handler?: boolean; // Flag to indicate using external Port80Handler
|
||||
// Protocol to use when proxying to backends: HTTP/1.x or HTTP/2
|
||||
backendProtocol?: 'http1' | 'http2';
|
||||
|
||||
// ACME certificate management options
|
||||
acme?: IAcmeOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface for a certificate entry in the cache
|
||||
*/
|
||||
export interface ICertificateEntry {
|
||||
key: string;
|
||||
cert: string;
|
||||
expires?: Date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface for reverse proxy configuration
|
||||
*/
|
||||
export interface IReverseProxyConfig {
|
||||
destinationIps: string[];
|
||||
destinationPorts: number[];
|
||||
hostName: string;
|
||||
privateKey: string;
|
||||
publicKey: string;
|
||||
authentication?: {
|
||||
type: 'Basic';
|
||||
user: string;
|
||||
pass: string;
|
||||
};
|
||||
rewriteHostHeader?: boolean;
|
||||
/**
|
||||
* Protocol to use when proxying to this backend: 'http1' or 'http2'.
|
||||
* Overrides the global backendProtocol option if set.
|
||||
*/
|
||||
backendProtocol?: 'http1' | 'http2';
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 || '');
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
// Re-export all components from the new location
|
||||
// This file is for backward compatibility only
|
||||
export * from '../proxies/network-proxy/index.js';
|
@ -1,24 +0,0 @@
|
||||
/**
|
||||
* TEMPORARY FILE FOR BACKWARD COMPATIBILITY
|
||||
* This will be removed in a future version when all imports are updated
|
||||
* @deprecated Use the new HTTP module instead
|
||||
*/
|
||||
|
||||
// Re-export the Port80Handler from its new location
|
||||
export * from '../http/port80/port80-handler.js';
|
||||
|
||||
// Re-export HTTP error types for backward compatibility
|
||||
export * from '../http/models/http-types.js';
|
||||
|
||||
// Re-export selected events to avoid name conflicts
|
||||
export {
|
||||
CertificateEvents,
|
||||
Port80HandlerEvents,
|
||||
CertProvisionerEvents
|
||||
} from '../certificate/events/certificate-events.js';
|
||||
|
||||
// Import the new Port80Handler
|
||||
import { Port80Handler } from '../http/port80/port80-handler.js';
|
||||
|
||||
// Export it as the default export for backward compatibility
|
||||
export default Port80Handler;
|
@ -43,8 +43,9 @@ export class CertificateManager {
|
||||
*/
|
||||
public loadDefaultCertificates(): void {
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const certPath = path.join(__dirname, '..', '..', 'assets', 'certs');
|
||||
|
||||
// Fix the path to look for certificates at the project root instead of inside ts directory
|
||||
const certPath = path.join(__dirname, '..', '..', '..', 'assets', 'certs');
|
||||
|
||||
try {
|
||||
this.defaultCertificates = {
|
||||
key: fs.readFileSync(path.join(certPath, 'key.pem'), 'utf8'),
|
||||
@ -53,7 +54,7 @@ export class CertificateManager {
|
||||
this.logger.info('Default certificates loaded successfully');
|
||||
} catch (error) {
|
||||
this.logger.error('Error loading default certificates', error);
|
||||
|
||||
|
||||
// Generate self-signed fallback certificates
|
||||
try {
|
||||
// This is a placeholder for actual certificate generation code
|
||||
|
@ -1,15 +0,0 @@
|
||||
# Legacy Notice
|
||||
|
||||
These files have been migrated to the new directory structure as part of the project restructuring. The new locations are as follows:
|
||||
|
||||
- `classes.smartproxy.ts` -> `/ts/proxies/smart-proxy/smart-proxy.ts`
|
||||
- `classes.pp.connectionmanager.ts` -> `/ts/proxies/smart-proxy/connection-manager.ts`
|
||||
- `classes.pp.securitymanager.ts` -> `/ts/proxies/smart-proxy/security-manager.ts`
|
||||
- `classes.pp.domainconfigmanager.ts` -> `/ts/proxies/smart-proxy/domain-config-manager.ts`
|
||||
- `classes.pp.tlsmanager.ts` -> `/ts/proxies/smart-proxy/tls-manager.ts`
|
||||
- `classes.pp.networkproxybridge.ts` -> `/ts/proxies/smart-proxy/network-proxy-bridge.ts`
|
||||
- `classes.pp.timeoutmanager.ts` -> `/ts/proxies/smart-proxy/timeout-manager.ts`
|
||||
- `classes.pp.portrangemanager.ts` -> `/ts/proxies/smart-proxy/port-range-manager.ts`
|
||||
- `classes.pp.connectionhandler.ts` -> `/ts/proxies/smart-proxy/connection-handler.ts`
|
||||
|
||||
This directory is now considered legacy and should not be used for new code.
|
Reference in New Issue
Block a user