@push.rocks/smartproxy 19.5.4 → 19.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist_ts/core/utils/async-utils.d.ts +81 -0
  2. package/dist_ts/core/utils/async-utils.js +216 -0
  3. package/dist_ts/core/utils/binary-heap.d.ts +73 -0
  4. package/dist_ts/core/utils/binary-heap.js +193 -0
  5. package/dist_ts/core/utils/enhanced-connection-pool.d.ts +110 -0
  6. package/dist_ts/core/utils/enhanced-connection-pool.js +320 -0
  7. package/dist_ts/core/utils/fs-utils.d.ts +144 -0
  8. package/dist_ts/core/utils/fs-utils.js +252 -0
  9. package/dist_ts/core/utils/index.d.ts +5 -2
  10. package/dist_ts/core/utils/index.js +6 -3
  11. package/dist_ts/core/utils/lifecycle-component.d.ts +59 -0
  12. package/dist_ts/core/utils/lifecycle-component.js +195 -0
  13. package/dist_ts/plugins.d.ts +2 -1
  14. package/dist_ts/plugins.js +3 -2
  15. package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +15 -0
  16. package/dist_ts/proxies/http-proxy/certificate-manager.js +49 -2
  17. package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +10 -0
  18. package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +53 -43
  19. package/dist_ts/proxies/smart-proxy/cert-store.js +22 -20
  20. package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +37 -7
  21. package/dist_ts/proxies/smart-proxy/connection-manager.js +257 -180
  22. package/package.json +2 -2
  23. package/readme.hints.md +96 -1
  24. package/readme.plan.md +1135 -221
  25. package/readme.problems.md +167 -83
  26. package/ts/core/utils/async-utils.ts +275 -0
  27. package/ts/core/utils/binary-heap.ts +225 -0
  28. package/ts/core/utils/enhanced-connection-pool.ts +420 -0
  29. package/ts/core/utils/fs-utils.ts +270 -0
  30. package/ts/core/utils/index.ts +5 -2
  31. package/ts/core/utils/lifecycle-component.ts +231 -0
  32. package/ts/plugins.ts +2 -1
  33. package/ts/proxies/http-proxy/certificate-manager.ts +52 -1
  34. package/ts/proxies/nftables-proxy/nftables-proxy.ts +64 -79
  35. package/ts/proxies/smart-proxy/cert-store.ts +26 -20
  36. package/ts/proxies/smart-proxy/connection-manager.ts +291 -189
  37. package/readme.plan2.md +0 -764
  38. package/ts/common/eventUtils.ts +0 -34
  39. package/ts/common/types.ts +0 -91
  40. package/ts/core/utils/event-system.ts +0 -376
  41. package/ts/core/utils/event-utils.ts +0 -25
@@ -1,29 +1,28 @@
1
1
  import * as plugins from '../../plugins.js';
2
+ import { AsyncFileSystem } from '../../core/utils/fs-utils.js';
2
3
  export class CertStore {
3
4
  constructor(certDir) {
4
5
  this.certDir = certDir;
5
6
  }
6
7
  async initialize() {
7
- await plugins.smartfile.fs.ensureDirSync(this.certDir);
8
+ await AsyncFileSystem.ensureDir(this.certDir);
8
9
  }
9
10
  async getCertificate(routeName) {
10
11
  const certPath = this.getCertPath(routeName);
11
12
  const metaPath = `${certPath}/meta.json`;
12
- if (!await plugins.smartfile.fs.fileExistsSync(metaPath)) {
13
+ if (!await AsyncFileSystem.exists(metaPath)) {
13
14
  return null;
14
15
  }
15
16
  try {
16
- const metaFile = await plugins.smartfile.SmartFile.fromFilePath(metaPath);
17
- const meta = JSON.parse(metaFile.contents.toString());
18
- const certFile = await plugins.smartfile.SmartFile.fromFilePath(`${certPath}/cert.pem`);
19
- const cert = certFile.contents.toString();
20
- const keyFile = await plugins.smartfile.SmartFile.fromFilePath(`${certPath}/key.pem`);
21
- const key = keyFile.contents.toString();
17
+ const meta = await AsyncFileSystem.readJSON(metaPath);
18
+ const [cert, key] = await Promise.all([
19
+ AsyncFileSystem.readFile(`${certPath}/cert.pem`),
20
+ AsyncFileSystem.readFile(`${certPath}/key.pem`)
21
+ ]);
22
22
  let ca;
23
23
  const caPath = `${certPath}/ca.pem`;
24
- if (await plugins.smartfile.fs.fileExistsSync(caPath)) {
25
- const caFile = await plugins.smartfile.SmartFile.fromFilePath(caPath);
26
- ca = caFile.contents.toString();
24
+ if (await AsyncFileSystem.exists(caPath)) {
25
+ ca = await AsyncFileSystem.readFile(caPath);
27
26
  }
28
27
  return {
29
28
  cert,
@@ -40,12 +39,14 @@ export class CertStore {
40
39
  }
41
40
  async saveCertificate(routeName, certData) {
42
41
  const certPath = this.getCertPath(routeName);
43
- await plugins.smartfile.fs.ensureDirSync(certPath);
44
- // Save certificate files
45
- await plugins.smartfile.memory.toFs(certData.cert, `${certPath}/cert.pem`);
46
- await plugins.smartfile.memory.toFs(certData.key, `${certPath}/key.pem`);
42
+ await AsyncFileSystem.ensureDir(certPath);
43
+ // Save certificate files in parallel
44
+ const savePromises = [
45
+ AsyncFileSystem.writeFile(`${certPath}/cert.pem`, certData.cert),
46
+ AsyncFileSystem.writeFile(`${certPath}/key.pem`, certData.key)
47
+ ];
47
48
  if (certData.ca) {
48
- await plugins.smartfile.memory.toFs(certData.ca, `${certPath}/ca.pem`);
49
+ savePromises.push(AsyncFileSystem.writeFile(`${certPath}/ca.pem`, certData.ca));
49
50
  }
50
51
  // Save metadata
51
52
  const meta = {
@@ -53,12 +54,13 @@ export class CertStore {
53
54
  issueDate: certData.issueDate.toISOString(),
54
55
  savedAt: new Date().toISOString()
55
56
  };
56
- await plugins.smartfile.memory.toFs(JSON.stringify(meta, null, 2), `${certPath}/meta.json`);
57
+ savePromises.push(AsyncFileSystem.writeJSON(`${certPath}/meta.json`, meta));
58
+ await Promise.all(savePromises);
57
59
  }
58
60
  async deleteCertificate(routeName) {
59
61
  const certPath = this.getCertPath(routeName);
60
- if (await plugins.smartfile.fs.fileExistsSync(certPath)) {
61
- await plugins.smartfile.fs.removeManySync([certPath]);
62
+ if (await AsyncFileSystem.isDirectory(certPath)) {
63
+ await AsyncFileSystem.removeDir(certPath);
62
64
  }
63
65
  }
64
66
  getCertPath(routeName) {
@@ -67,4 +69,4 @@ export class CertStore {
67
69
  return `${this.certDir}/${safeName}`;
68
70
  }
69
71
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvY2VydC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRzVDLE1BQU0sT0FBTyxTQUFTO0lBQ3BCLFlBQW9CLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQUcsQ0FBQztJQUVoQyxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUI7UUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxHQUFHLFFBQVEsWUFBWSxDQUFDO1FBRXpDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRXRELE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxXQUFXLENBQUMsQ0FBQztZQUN4RixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRTFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxVQUFVLENBQUMsQ0FBQztZQUN0RixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRXhDLElBQUksRUFBc0IsQ0FBQztZQUMzQixNQUFNLE1BQU0sR0FBRyxHQUFHLFFBQVEsU0FBUyxDQUFDO1lBQ3BDLElBQUksTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RFLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLENBQUM7WUFFRCxPQUFPO2dCQUNMLElBQUk7Z0JBQ0osR0FBRztnQkFDSCxFQUFFO2dCQUNGLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNyQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzthQUNwQyxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FDMUIsU0FBaUIsRUFDakIsUUFBMEI7UUFFMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVuRCx5QkFBeUI7UUFDekIsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxHQUFHLFFBQVEsV0FBVyxDQUFDLENBQUM7UUFDM0UsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsVUFBVSxDQUFDLENBQUM7UUFFekUsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsU0FBUyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixNQUFNLElBQUksR0FBRztZQUNYLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRTtZQUM3QyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDM0MsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1NBQ2xDLENBQUM7UUFFRixNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLFlBQVksQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBaUI7UUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxJQUFJLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDeEQsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLFNBQWlCO1FBQ25DLHFDQUFxQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiJ9
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvY2VydC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUcvRCxNQUFNLE9BQU8sU0FBUztJQUNwQixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7SUFFaEMsS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFpQjtRQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLEdBQUcsUUFBUSxZQUFZLENBQUM7UUFFekMsSUFBSSxDQUFDLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV0RCxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDcEMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsV0FBVyxDQUFDO2dCQUNoRCxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxVQUFVLENBQUM7YUFDaEQsQ0FBQyxDQUFDO1lBRUgsSUFBSSxFQUFzQixDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFHLEdBQUcsUUFBUSxT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
@@ -2,15 +2,21 @@ import * as plugins from '../../plugins.js';
2
2
  import type { IConnectionRecord, ISmartProxyOptions } from './models/interfaces.js';
3
3
  import { SecurityManager } from './security-manager.js';
4
4
  import { TimeoutManager } from './timeout-manager.js';
5
+ import { LifecycleComponent } from '../../core/utils/lifecycle-component.js';
5
6
  /**
6
- * Manages connection lifecycle, tracking, and cleanup
7
+ * Manages connection lifecycle, tracking, and cleanup with performance optimizations
7
8
  */
8
- export declare class ConnectionManager {
9
+ export declare class ConnectionManager extends LifecycleComponent {
9
10
  private settings;
10
11
  private securityManager;
11
12
  private timeoutManager;
12
13
  private connectionRecords;
13
14
  private terminationStats;
15
+ private nextInactivityCheck;
16
+ private readonly maxConnections;
17
+ private readonly cleanupBatchSize;
18
+ private cleanupQueue;
19
+ private cleanupTimer;
14
20
  constructor(settings: ISmartProxyOptions, securityManager: SecurityManager, timeoutManager: TimeoutManager);
15
21
  /**
16
22
  * Generate a unique connection ID
@@ -19,11 +25,19 @@ export declare class ConnectionManager {
19
25
  /**
20
26
  * Create and track a new connection
21
27
  */
22
- createConnection(socket: plugins.net.Socket): IConnectionRecord;
28
+ createConnection(socket: plugins.net.Socket): IConnectionRecord | null;
23
29
  /**
24
30
  * Track an existing connection
25
31
  */
26
32
  trackConnection(connectionId: string, record: IConnectionRecord): void;
33
+ /**
34
+ * Schedule next inactivity check for a connection
35
+ */
36
+ private scheduleInactivityCheck;
37
+ /**
38
+ * Start the inactivity check timer
39
+ */
40
+ private startInactivityCheckTimer;
27
41
  /**
28
42
  * Get a connection by ID
29
43
  */
@@ -40,14 +54,22 @@ export declare class ConnectionManager {
40
54
  * Initiates cleanup once for a connection
41
55
  */
42
56
  initiateCleanupOnce(record: IConnectionRecord, reason?: string): void;
57
+ /**
58
+ * Queue a connection for cleanup
59
+ */
60
+ private queueCleanup;
61
+ /**
62
+ * Process the cleanup queue in batches
63
+ */
64
+ private processCleanupQueue;
43
65
  /**
44
66
  * Clean up a connection record
45
67
  */
46
68
  cleanupConnection(record: IConnectionRecord, reason?: string): void;
47
69
  /**
48
- * Helper method to clean up a socket
70
+ * Helper method to clean up a socket immediately
49
71
  */
50
- private cleanupSocket;
72
+ private cleanupSocketImmediate;
51
73
  /**
52
74
  * Creates a generic error handler for incoming or outgoing sockets
53
75
  */
@@ -68,11 +90,19 @@ export declare class ConnectionManager {
68
90
  outgoing: Record<string, number>;
69
91
  };
70
92
  /**
71
- * Check for stalled/inactive connections
93
+ * Optimized inactivity check - only checks connections that are due
94
+ */
95
+ private performOptimizedInactivityCheck;
96
+ /**
97
+ * Legacy method for backward compatibility
72
98
  */
73
99
  performInactivityCheck(): void;
74
100
  /**
75
101
  * Clear all connections (for shutdown)
76
102
  */
77
- clearConnections(): void;
103
+ clearConnections(): Promise<void>;
104
+ /**
105
+ * Override LifecycleComponent's onCleanup method
106
+ */
107
+ protected onCleanup(): Promise<void>;
78
108
  }