xypriss 1.2.3 → 1.3.0

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 (103) hide show
  1. package/README.md +138 -3
  2. package/dist/cjs/mods/security/src/components/cache/index.js +1 -1
  3. package/dist/cjs/shared/logger/Logger.js +1 -0
  4. package/dist/cjs/shared/logger/Logger.js.map +1 -1
  5. package/dist/cjs/src/cluster/bun-cluster-manager.js +1567 -0
  6. package/dist/cjs/src/cluster/bun-cluster-manager.js.map +1 -0
  7. package/dist/cjs/src/cluster/cluster-manager.js +1 -1
  8. package/dist/cjs/src/cluster/cluster-manager.js.map +1 -1
  9. package/dist/cjs/src/cluster/index.js +25 -6
  10. package/dist/cjs/src/cluster/index.js.map +1 -1
  11. package/dist/cjs/src/cluster/memory-manager.js +463 -0
  12. package/dist/cjs/src/cluster/memory-manager.js.map +1 -0
  13. package/dist/cjs/src/cluster/modules/BunIPCManager.js +603 -0
  14. package/dist/cjs/src/cluster/modules/BunIPCManager.js.map +1 -0
  15. package/dist/cjs/src/cluster/modules/ClusterFactory.js +22 -1
  16. package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +1 -1
  17. package/dist/cjs/src/cluster/modules/CpuMonitor.js +658 -0
  18. package/dist/cjs/src/cluster/modules/CpuMonitor.js.map +1 -0
  19. package/dist/cjs/src/cluster/modules/ProcessMonitor.js +513 -0
  20. package/dist/cjs/src/cluster/modules/ProcessMonitor.js.map +1 -0
  21. package/dist/cjs/src/plugins/server-maintenance-plugin.js +1 -1
  22. package/dist/cjs/src/server/FastServer.js +64 -43
  23. package/dist/cjs/src/server/FastServer.js.map +1 -1
  24. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
  25. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  26. package/dist/cjs/src/server/const/Cluster.config.js +174 -31
  27. package/dist/cjs/src/server/const/Cluster.config.js.map +1 -1
  28. package/dist/cjs/src/server/const/default.js +11 -2
  29. package/dist/cjs/src/server/const/default.js.map +1 -1
  30. package/dist/cjs/src/server/utils/PortManager.js +26 -15
  31. package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
  32. package/dist/esm/mods/security/src/components/cache/index.js +1 -1
  33. package/dist/esm/shared/logger/Logger.js +1 -0
  34. package/dist/esm/shared/logger/Logger.js.map +1 -1
  35. package/dist/esm/src/cluster/bun-cluster-manager.js +1565 -0
  36. package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -0
  37. package/dist/esm/src/cluster/cluster-manager.js +1 -1
  38. package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
  39. package/dist/esm/src/cluster/index.js +25 -6
  40. package/dist/esm/src/cluster/index.js.map +1 -1
  41. package/dist/esm/src/cluster/memory-manager.js +461 -0
  42. package/dist/esm/src/cluster/memory-manager.js.map +1 -0
  43. package/dist/esm/src/cluster/modules/BunIPCManager.js +601 -0
  44. package/dist/esm/src/cluster/modules/BunIPCManager.js.map +1 -0
  45. package/dist/esm/src/cluster/modules/ClusterFactory.js +22 -1
  46. package/dist/esm/src/cluster/modules/ClusterFactory.js.map +1 -1
  47. package/dist/esm/src/cluster/modules/CpuMonitor.js +656 -0
  48. package/dist/esm/src/cluster/modules/CpuMonitor.js.map +1 -0
  49. package/dist/esm/src/cluster/modules/ProcessMonitor.js +511 -0
  50. package/dist/esm/src/cluster/modules/ProcessMonitor.js.map +1 -0
  51. package/dist/esm/src/plugins/server-maintenance-plugin.js +1 -1
  52. package/dist/esm/src/server/FastServer.js +64 -43
  53. package/dist/esm/src/server/FastServer.js.map +1 -1
  54. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
  55. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  56. package/dist/esm/src/server/const/Cluster.config.js +174 -31
  57. package/dist/esm/src/server/const/Cluster.config.js.map +1 -1
  58. package/dist/esm/src/server/const/default.js +11 -2
  59. package/dist/esm/src/server/const/default.js.map +1 -1
  60. package/dist/esm/src/server/utils/PortManager.js +26 -15
  61. package/dist/esm/src/server/utils/PortManager.js.map +1 -1
  62. package/dist/index.d.ts +78 -1
  63. package/package.json +3 -1
  64. package/dist/cjs/src/plugins/modules/network/index.js +0 -120
  65. package/dist/cjs/src/plugins/modules/network/index.js.map +0 -1
  66. package/dist/cjs/src/server/plugins/PluginEngine.js +0 -378
  67. package/dist/cjs/src/server/plugins/PluginEngine.js.map +0 -1
  68. package/dist/cjs/src/server/plugins/PluginRegistry.js +0 -339
  69. package/dist/cjs/src/server/plugins/PluginRegistry.js.map +0 -1
  70. package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js +0 -591
  71. package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
  72. package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js +0 -413
  73. package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
  74. package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js +0 -843
  75. package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
  76. package/dist/cjs/src/server/plugins/core/CachePlugin.js +0 -1975
  77. package/dist/cjs/src/server/plugins/core/CachePlugin.js.map +0 -1
  78. package/dist/cjs/src/server/plugins/core/PerformancePlugin.js +0 -894
  79. package/dist/cjs/src/server/plugins/core/PerformancePlugin.js.map +0 -1
  80. package/dist/cjs/src/server/plugins/core/SecurityPlugin.js +0 -799
  81. package/dist/cjs/src/server/plugins/core/SecurityPlugin.js.map +0 -1
  82. package/dist/cjs/src/server/plugins/types/PluginTypes.js +0 -47
  83. package/dist/cjs/src/server/plugins/types/PluginTypes.js.map +0 -1
  84. package/dist/esm/src/plugins/modules/network/index.js +0 -109
  85. package/dist/esm/src/plugins/modules/network/index.js.map +0 -1
  86. package/dist/esm/src/server/plugins/PluginEngine.js +0 -376
  87. package/dist/esm/src/server/plugins/PluginEngine.js.map +0 -1
  88. package/dist/esm/src/server/plugins/PluginRegistry.js +0 -337
  89. package/dist/esm/src/server/plugins/PluginRegistry.js.map +0 -1
  90. package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js +0 -589
  91. package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
  92. package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js +0 -411
  93. package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
  94. package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js +0 -841
  95. package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
  96. package/dist/esm/src/server/plugins/core/CachePlugin.js +0 -1973
  97. package/dist/esm/src/server/plugins/core/CachePlugin.js.map +0 -1
  98. package/dist/esm/src/server/plugins/core/PerformancePlugin.js +0 -872
  99. package/dist/esm/src/server/plugins/core/PerformancePlugin.js.map +0 -1
  100. package/dist/esm/src/server/plugins/core/SecurityPlugin.js +0 -797
  101. package/dist/esm/src/server/plugins/core/SecurityPlugin.js.map +0 -1
  102. package/dist/esm/src/server/plugins/types/PluginTypes.js +0 -47
  103. package/dist/esm/src/server/plugins/types/PluginTypes.js.map +0 -1
@@ -0,0 +1,601 @@
1
+ import { EventEmitter } from 'events';
2
+ import { logger } from '../../../shared/logger/Logger.js';
3
+
4
+ /**
5
+ * Bun IPC Manager - Inter-Process Communication for Bun Workers
6
+ * Handles message passing between master and worker processes
7
+ */
8
+ /**
9
+ * Bun IPC Manager for handling communication between master and workers
10
+ */
11
+ class BunIPCManager extends EventEmitter {
12
+ constructor() {
13
+ super();
14
+ this.workers = new Map();
15
+ this.messageHandlers = new Map();
16
+ this.pendingResponses = new Map();
17
+ this.MESSAGE_TIMEOUT = 30000; // 30 seconds
18
+ this.HEARTBEAT_INTERVAL = 5000; // 5 seconds
19
+ this.isWorker =
20
+ process.env.CLUSTER_MODE === "true" ||
21
+ process.env.NODE_ENV === "worker";
22
+ this.workerId = process.env.WORKER_ID;
23
+ if (this.isWorker) {
24
+ this.initializeWorkerIPC();
25
+ }
26
+ else {
27
+ this.initializeMasterIPC();
28
+ }
29
+ logger.info("ipc", `BunIPCManager initialized in ${this.isWorker ? "worker" : "master"} mode`);
30
+ }
31
+ /**
32
+ * Initialize IPC for worker processes
33
+ */
34
+ initializeWorkerIPC() {
35
+ // Listen for messages from master via stdin
36
+ process.stdin.on("data", (data) => {
37
+ try {
38
+ const messages = data.toString().trim().split("\n");
39
+ for (const messageStr of messages) {
40
+ if (messageStr.trim()) {
41
+ const message = JSON.parse(messageStr);
42
+ this.handleIncomingMessage(message);
43
+ }
44
+ }
45
+ }
46
+ catch (error) {
47
+ logger.error("ipc", "Failed to parse message from master:", error);
48
+ }
49
+ });
50
+ // Start heartbeat
51
+ this.startHeartbeat();
52
+ // Register default handlers
53
+ this.registerHandler("ping", async () => ({
54
+ status: "alive",
55
+ workerId: this.workerId,
56
+ }));
57
+ this.registerHandler("shutdown", async () => {
58
+ logger.info("ipc", "Received shutdown signal from master");
59
+ process.exit(0);
60
+ });
61
+ }
62
+ /**
63
+ * Initialize IPC for master process
64
+ */
65
+ initializeMasterIPC() {
66
+ // Master process initialization
67
+ logger.debug("ipc", "Master IPC initialized");
68
+ }
69
+ /**
70
+ * Register a worker connection (master only)
71
+ */
72
+ registerWorker(workerId, subprocess) {
73
+ if (this.isWorker)
74
+ return;
75
+ const connection = {
76
+ id: workerId,
77
+ subprocess,
78
+ isAlive: true,
79
+ lastPing: Date.now(),
80
+ messageQueue: [],
81
+ };
82
+ this.workers.set(workerId, connection);
83
+ // Listen for messages from this worker (Bun-compatible)
84
+ if (subprocess.stdout && typeof subprocess.stdout.on === "function") {
85
+ // Node.js-style subprocess
86
+ subprocess.stdout.on("data", (data) => {
87
+ try {
88
+ const messages = data.toString().trim().split("\n");
89
+ for (const messageStr of messages) {
90
+ if (messageStr.trim() && messageStr.startsWith("{")) {
91
+ const message = JSON.parse(messageStr);
92
+ if (message.from === "worker") {
93
+ this.handleIncomingMessage(message);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ catch (error) {
99
+ // Ignore non-JSON output (regular logs, etc.)
100
+ }
101
+ });
102
+ }
103
+ else if (subprocess.stdout &&
104
+ typeof subprocess.stdout.readable === "function") {
105
+ // Bun-style subprocess - use readable stream
106
+ this._setupBunIPCListener(workerId, subprocess);
107
+ }
108
+ else {
109
+ // Fallback: disable IPC for this worker but don't fail
110
+ logger.warn("ipc", `Worker ${workerId} subprocess doesn't support IPC communication`);
111
+ connection.isAlive = false;
112
+ }
113
+ logger.info("ipc", `Worker ${workerId} registered for IPC`);
114
+ }
115
+ /**
116
+ * Setup sophisticated IPC listener for Bun subprocess
117
+ */
118
+ async _setupBunIPCListener(workerId, subprocess) {
119
+ try {
120
+ logger.debug("ipc", `Setting up sophisticated Bun IPC listener for worker ${workerId}`);
121
+ const connection = this.workers.get(workerId);
122
+ if (!connection) {
123
+ throw new Error(`Worker connection not found for ${workerId}`);
124
+ }
125
+ // Setup stdout reader for IPC messages
126
+ if (subprocess.stdout) {
127
+ await this._setupBunStdoutReader(workerId, subprocess.stdout, connection);
128
+ }
129
+ // Setup stderr reader for error handling
130
+ if (subprocess.stderr) {
131
+ await this._setupBunStderrReader(workerId, subprocess.stderr);
132
+ }
133
+ // Setup stdin writer for sending messages
134
+ if (subprocess.stdin) {
135
+ connection.subprocess.stdin = subprocess.stdin;
136
+ }
137
+ // Mark connection as alive and ready
138
+ connection.isAlive = true;
139
+ logger.info("ipc", `Sophisticated Bun IPC setup completed for worker ${workerId}`);
140
+ // Send initial ping to test communication
141
+ setTimeout(async () => {
142
+ try {
143
+ await this.sendToWorker(workerId, "ping", { test: true });
144
+ }
145
+ catch (error) {
146
+ logger.warn("ipc", `Initial ping failed for worker ${workerId}:`, error);
147
+ }
148
+ }, 1000);
149
+ }
150
+ catch (error) {
151
+ logger.error("ipc", `Failed to setup sophisticated Bun IPC listener for worker ${workerId}:`, error);
152
+ const connection = this.workers.get(workerId);
153
+ if (connection) {
154
+ connection.isAlive = false;
155
+ }
156
+ throw error;
157
+ }
158
+ }
159
+ /**
160
+ * Setup Bun stdout reader for IPC messages
161
+ */
162
+ async _setupBunStdoutReader(workerId, stdout, connection) {
163
+ try {
164
+ const reader = stdout.getReader();
165
+ const decoder = new TextDecoder();
166
+ let buffer = "";
167
+ // Start reading loop
168
+ const readLoop = async () => {
169
+ try {
170
+ while (true) {
171
+ const { done, value } = await reader.read();
172
+ if (done) {
173
+ logger.debug("ipc", `Stdout stream ended for worker ${workerId}`);
174
+ break;
175
+ }
176
+ // Decode chunk and add to buffer
177
+ const chunk = decoder.decode(value, { stream: true });
178
+ buffer += chunk;
179
+ // Process complete lines
180
+ const lines = buffer.split("\n");
181
+ buffer = lines.pop() || ""; // Keep incomplete line in buffer
182
+ for (const line of lines) {
183
+ if (line.trim()) {
184
+ await this._processBunIPCMessage(workerId, line.trim(), connection);
185
+ }
186
+ }
187
+ }
188
+ }
189
+ catch (error) {
190
+ if (!connection.isAlive) {
191
+ // Worker is shutting down, this is expected
192
+ logger.debug("ipc", `Stdout reader stopped for worker ${workerId} (shutdown)`);
193
+ }
194
+ else {
195
+ logger.error("ipc", `Stdout reader error for worker ${workerId}:`, error);
196
+ connection.isAlive = false;
197
+ }
198
+ }
199
+ finally {
200
+ reader.releaseLock();
201
+ }
202
+ };
203
+ // Start reading in background
204
+ readLoop().catch((error) => {
205
+ logger.error("ipc", `Stdout read loop failed for worker ${workerId}:`, error);
206
+ connection.isAlive = false;
207
+ });
208
+ }
209
+ catch (error) {
210
+ logger.error("ipc", `Failed to setup stdout reader for worker ${workerId}:`, error);
211
+ throw error;
212
+ }
213
+ }
214
+ /**
215
+ * Setup Bun stderr reader for error monitoring
216
+ */
217
+ async _setupBunStderrReader(workerId, stderr) {
218
+ try {
219
+ const reader = stderr.getReader();
220
+ const decoder = new TextDecoder();
221
+ // Start reading loop for error monitoring
222
+ const readLoop = async () => {
223
+ try {
224
+ while (true) {
225
+ const { done, value } = await reader.read();
226
+ if (done) {
227
+ logger.debug("ipc", `Stderr stream ended for worker ${workerId}`);
228
+ break;
229
+ }
230
+ const chunk = decoder.decode(value, { stream: true });
231
+ const lines = chunk.split("\n");
232
+ for (const line of lines) {
233
+ if (line.trim()) {
234
+ logger.warn("ipc", `[${workerId}] stderr: ${line.trim()}`);
235
+ }
236
+ }
237
+ }
238
+ }
239
+ catch (error) {
240
+ logger.debug("ipc", `Stderr reader stopped for worker ${workerId}:`, error);
241
+ }
242
+ finally {
243
+ reader.releaseLock();
244
+ }
245
+ };
246
+ // Start reading in background
247
+ readLoop().catch((error) => {
248
+ logger.error("ipc", `Stderr read loop failed for worker ${workerId}:`, error);
249
+ });
250
+ }
251
+ catch (error) {
252
+ logger.error("ipc", `Failed to setup stderr reader for worker ${workerId}:`, error);
253
+ // Don't throw here as stderr is not critical for IPC
254
+ }
255
+ }
256
+ /**
257
+ * Process IPC message from Bun worker
258
+ */
259
+ async _processBunIPCMessage(workerId, messageStr, connection) {
260
+ try {
261
+ // Check if this looks like a JSON IPC message
262
+ if (!messageStr.startsWith("{")) {
263
+ // Regular log output, ignore for IPC
264
+ logger.debug("ipc", `[${workerId}] log: ${messageStr}`);
265
+ return;
266
+ }
267
+ const message = JSON.parse(messageStr);
268
+ // Validate message structure
269
+ if (!message.type || !message.from) {
270
+ logger.debug("ipc", `Invalid IPC message from worker ${workerId}: ${messageStr}`);
271
+ return;
272
+ }
273
+ // Update connection heartbeat
274
+ connection.lastPing = Date.now();
275
+ // Handle the message
276
+ await this.handleIncomingMessage(message);
277
+ }
278
+ catch (error) {
279
+ // If JSON parsing fails, treat as regular log output
280
+ if (error instanceof SyntaxError) {
281
+ logger.debug("ipc", `[${workerId}] log: ${messageStr}`);
282
+ }
283
+ else {
284
+ logger.error("ipc", `Error processing IPC message from worker ${workerId}:`, error);
285
+ }
286
+ }
287
+ }
288
+ /**
289
+ * Unregister a worker connection (master only)
290
+ */
291
+ unregisterWorker(workerId) {
292
+ if (this.isWorker)
293
+ return;
294
+ const worker = this.workers.get(workerId);
295
+ if (worker) {
296
+ worker.isAlive = false;
297
+ this.workers.delete(workerId);
298
+ logger.info("ipc", `Worker ${workerId} unregistered from IPC`);
299
+ }
300
+ }
301
+ /**
302
+ * Send message to a specific worker (master only)
303
+ */
304
+ async sendToWorker(workerId, type, data) {
305
+ if (this.isWorker) {
306
+ throw new Error("Workers cannot send messages to other workers directly");
307
+ }
308
+ const worker = this.workers.get(workerId);
309
+ if (!worker || !worker.isAlive) {
310
+ logger.debug("ipc", `Worker ${workerId} is not available for IPC, returning mock response`);
311
+ // Return a mock response for Bun workers that don't have full IPC support
312
+ return {
313
+ status: "ok",
314
+ message: "IPC not fully supported in Bun mode",
315
+ timestamp: Date.now(),
316
+ };
317
+ }
318
+ const message = {
319
+ id: this.generateMessageId(),
320
+ type,
321
+ data,
322
+ timestamp: Date.now(),
323
+ from: "master",
324
+ to: workerId,
325
+ };
326
+ try {
327
+ return await this.sendMessage(worker.subprocess, message);
328
+ }
329
+ catch (error) {
330
+ logger.debug("ipc", `Failed to send IPC message to worker ${workerId}, returning mock response:`, error);
331
+ // Return a mock response if IPC fails
332
+ return {
333
+ status: "fallback",
334
+ message: "IPC communication failed",
335
+ timestamp: Date.now(),
336
+ };
337
+ }
338
+ }
339
+ /**
340
+ * Broadcast message to all workers (master only)
341
+ */
342
+ async broadcastToWorkers(type, data) {
343
+ if (this.isWorker) {
344
+ throw new Error("Workers cannot broadcast messages");
345
+ }
346
+ const promises = [];
347
+ for (const [workerId, worker] of this.workers) {
348
+ if (worker.isAlive) {
349
+ promises.push(this.sendToWorker(workerId, type, data).catch((error) => ({
350
+ workerId,
351
+ error: error.message,
352
+ })));
353
+ }
354
+ }
355
+ return Promise.all(promises);
356
+ }
357
+ /**
358
+ * Send message to a random worker (master only)
359
+ */
360
+ async sendToRandomWorker(type, data) {
361
+ if (this.isWorker) {
362
+ throw new Error("Workers cannot send messages to other workers directly");
363
+ }
364
+ const aliveWorkers = Array.from(this.workers.values()).filter((w) => w.isAlive);
365
+ if (aliveWorkers.length === 0) {
366
+ throw new Error("No alive workers available");
367
+ }
368
+ const randomWorker = aliveWorkers[Math.floor(Math.random() * aliveWorkers.length)];
369
+ return this.sendToWorker(randomWorker.id, type, data);
370
+ }
371
+ /**
372
+ * Send message to master (worker only)
373
+ */
374
+ async sendToMaster(type, data) {
375
+ if (!this.isWorker) {
376
+ throw new Error("Only workers can send messages to master");
377
+ }
378
+ const message = {
379
+ id: this.generateMessageId(),
380
+ type,
381
+ data,
382
+ timestamp: Date.now(),
383
+ from: "worker",
384
+ };
385
+ return this.sendMessage(process.stdout, message);
386
+ }
387
+ /**
388
+ * Register a message handler
389
+ */
390
+ registerHandler(type, handler) {
391
+ this.messageHandlers.set(type, handler);
392
+ logger.debug("ipc", `Handler registered for message type: ${type}`);
393
+ }
394
+ /**
395
+ * Unregister a message handler
396
+ */
397
+ unregisterHandler(type) {
398
+ this.messageHandlers.delete(type);
399
+ logger.debug("ipc", `Handler unregistered for message type: ${type}`);
400
+ }
401
+ /**
402
+ * Send a message and wait for response
403
+ */
404
+ async sendMessage(target, message) {
405
+ return new Promise((resolve, reject) => {
406
+ const correlationId = this.generateMessageId();
407
+ message.correlationId = correlationId;
408
+ // Set up response handler
409
+ const timeout = setTimeout(() => {
410
+ this.pendingResponses.delete(correlationId);
411
+ reject(new Error(`Message timeout after ${this.MESSAGE_TIMEOUT}ms`));
412
+ }, this.MESSAGE_TIMEOUT);
413
+ this.pendingResponses.set(correlationId, {
414
+ resolve,
415
+ reject,
416
+ timeout,
417
+ });
418
+ // Send message
419
+ try {
420
+ const messageStr = JSON.stringify(message) + "\n";
421
+ if (target.write) {
422
+ // Node.js style stream
423
+ target.write(messageStr);
424
+ }
425
+ else if (target.stdin) {
426
+ // Check if it's a Bun WritableStream
427
+ if (target.stdin.getWriter) {
428
+ // Bun WritableStream
429
+ this._sendToBunWritableStream(target.stdin, messageStr).catch((error) => {
430
+ clearTimeout(timeout);
431
+ this.pendingResponses.delete(correlationId);
432
+ reject(error);
433
+ });
434
+ }
435
+ else {
436
+ // Node.js style stdin
437
+ target.stdin.write(messageStr);
438
+ }
439
+ }
440
+ else {
441
+ throw new Error("Invalid target for message sending");
442
+ }
443
+ }
444
+ catch (error) {
445
+ clearTimeout(timeout);
446
+ this.pendingResponses.delete(correlationId);
447
+ reject(error);
448
+ }
449
+ });
450
+ }
451
+ /**
452
+ * Send message to Bun WritableStream
453
+ */
454
+ async _sendToBunWritableStream(stream, message) {
455
+ try {
456
+ const writer = stream.getWriter();
457
+ const encoder = new TextEncoder();
458
+ const data = encoder.encode(message);
459
+ await writer.write(data);
460
+ writer.releaseLock();
461
+ }
462
+ catch (error) {
463
+ throw new Error(`Failed to write to Bun WritableStream: ${error}`);
464
+ }
465
+ }
466
+ /**
467
+ * Handle incoming messages
468
+ */
469
+ async handleIncomingMessage(message) {
470
+ try {
471
+ // Check if this is a response to a pending request
472
+ if (message.correlationId &&
473
+ this.pendingResponses.has(message.correlationId)) {
474
+ const pending = this.pendingResponses.get(message.correlationId);
475
+ clearTimeout(pending.timeout);
476
+ this.pendingResponses.delete(message.correlationId);
477
+ pending.resolve(message.data);
478
+ return;
479
+ }
480
+ // Handle regular messages
481
+ const handler = this.messageHandlers.get(message.type);
482
+ if (handler) {
483
+ const response = await handler(message);
484
+ // Send response if correlation ID is present
485
+ if (message.correlationId) {
486
+ const responseMessage = {
487
+ id: this.generateMessageId(),
488
+ type: `${message.type}_response`,
489
+ data: response,
490
+ timestamp: Date.now(),
491
+ from: this.isWorker ? "worker" : "master",
492
+ correlationId: message.correlationId,
493
+ };
494
+ const target = this.isWorker
495
+ ? process.stdout
496
+ : this.workers.get(message.from === "worker" ? message.to || "" : "")?.subprocess;
497
+ if (target) {
498
+ const messageStr = JSON.stringify(responseMessage) + "\n";
499
+ if (target.write) {
500
+ target.write(messageStr);
501
+ }
502
+ else if (target.stdin) {
503
+ target.stdin.write(messageStr);
504
+ }
505
+ }
506
+ }
507
+ }
508
+ else {
509
+ logger.warn("ipc", `No handler found for message type: ${message.type}`);
510
+ }
511
+ // Emit event for external listeners
512
+ this.emit("message", message);
513
+ }
514
+ catch (error) {
515
+ logger.error("ipc", "Error handling incoming message:", error);
516
+ }
517
+ }
518
+ /**
519
+ * Start heartbeat mechanism
520
+ */
521
+ startHeartbeat() {
522
+ if (this.heartbeatInterval)
523
+ return;
524
+ this.heartbeatInterval = setInterval(async () => {
525
+ if (this.isWorker) {
526
+ // Worker sends heartbeat to master
527
+ try {
528
+ await this.sendToMaster("heartbeat", {
529
+ workerId: this.workerId,
530
+ timestamp: Date.now(),
531
+ memoryUsage: process.memoryUsage(),
532
+ });
533
+ }
534
+ catch (error) {
535
+ logger.error("ipc", "Failed to send heartbeat:", error);
536
+ }
537
+ }
538
+ else {
539
+ // Master checks worker heartbeats
540
+ const now = Date.now();
541
+ for (const [workerId, worker] of this.workers) {
542
+ if (worker.isAlive &&
543
+ now - worker.lastPing > this.HEARTBEAT_INTERVAL * 3) {
544
+ logger.warn("ipc", `Worker ${workerId} missed heartbeat, marking as potentially dead`);
545
+ worker.isAlive = false;
546
+ this.emit("worker_timeout", workerId);
547
+ }
548
+ }
549
+ }
550
+ }, this.HEARTBEAT_INTERVAL);
551
+ }
552
+ /**
553
+ * Stop heartbeat mechanism
554
+ */
555
+ stopHeartbeat() {
556
+ if (this.heartbeatInterval) {
557
+ clearInterval(this.heartbeatInterval);
558
+ this.heartbeatInterval = undefined;
559
+ }
560
+ }
561
+ /**
562
+ * Generate unique message ID
563
+ */
564
+ generateMessageId() {
565
+ return `msg_${Date.now()}_${Math.random()
566
+ .toString(36)
567
+ .substring(2, 11)}`;
568
+ }
569
+ /**
570
+ * Get worker statistics (master only)
571
+ */
572
+ getWorkerStats() {
573
+ if (this.isWorker) {
574
+ return { total: 0, alive: 0, dead: 0 };
575
+ }
576
+ const total = this.workers.size;
577
+ const alive = Array.from(this.workers.values()).filter((w) => w.isAlive).length;
578
+ const dead = total - alive;
579
+ return { total, alive, dead };
580
+ }
581
+ /**
582
+ * Cleanup and destroy IPC manager
583
+ */
584
+ destroy() {
585
+ this.stopHeartbeat();
586
+ // Clear pending responses
587
+ for (const [, pending] of this.pendingResponses) {
588
+ clearTimeout(pending.timeout);
589
+ pending.reject(new Error("IPC Manager destroyed"));
590
+ }
591
+ this.pendingResponses.clear();
592
+ // Clear workers
593
+ this.workers.clear();
594
+ // Remove all listeners
595
+ this.removeAllListeners();
596
+ logger.info("ipc", "BunIPCManager destroyed");
597
+ }
598
+ }
599
+
600
+ export { BunIPCManager };
601
+ //# sourceMappingURL=BunIPCManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunIPCManager.js","sources":["../../../../../src/cluster/modules/BunIPCManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -264,12 +264,33 @@ class ClusterFactory {
264
264
  encryptIPC: true,
265
265
  },
266
266
  resources: {
267
- maxMemoryPerWorker: `${Math.floor(memoryGB / Math.max(2, cpuCount - 1))}GB`,
267
+ maxMemoryPerWorker: this._getConservativeMemoryPerWorker(memoryGB, cpuCount),
268
268
  maxCpuPerWorker: Math.floor(100 / Math.max(2, cpuCount - 1)),
269
269
  priorityLevel: "normal",
270
270
  },
271
271
  };
272
272
  }
273
+ /**
274
+ * Get conservative memory per worker based on system resources
275
+ */
276
+ _getConservativeMemoryPerWorker(memoryGB, cpuCount) {
277
+ // Conservative memory allocation strategy
278
+ if (memoryGB <= 2) {
279
+ return "256MB"; // Very low memory systems
280
+ }
281
+ else if (memoryGB <= 4) {
282
+ return "512MB"; // Low memory systems
283
+ }
284
+ else if (memoryGB <= 8) {
285
+ return "512MB"; // Medium memory systems - still conservative
286
+ }
287
+ else if (memoryGB <= 16) {
288
+ return "1GB"; // High memory systems
289
+ }
290
+ else {
291
+ return "2GB"; // Very high memory systems
292
+ }
293
+ }
273
294
  /**
274
295
  * Get environment-specific configuration
275
296
  */