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