@masuidrive/procman 0.1.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 (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/src/cli/commands/clear-log.d.ts +10 -0
  4. package/dist/src/cli/commands/clear-log.d.ts.map +1 -0
  5. package/dist/src/cli/commands/clear-log.js +77 -0
  6. package/dist/src/cli/commands/clear-log.js.map +1 -0
  7. package/dist/src/cli/commands/exit.d.ts +10 -0
  8. package/dist/src/cli/commands/exit.d.ts.map +1 -0
  9. package/dist/src/cli/commands/exit.js +65 -0
  10. package/dist/src/cli/commands/exit.js.map +1 -0
  11. package/dist/src/cli/commands/help.d.ts +10 -0
  12. package/dist/src/cli/commands/help.d.ts.map +1 -0
  13. package/dist/src/cli/commands/help.js +340 -0
  14. package/dist/src/cli/commands/help.js.map +1 -0
  15. package/dist/src/cli/commands/list.d.ts +11 -0
  16. package/dist/src/cli/commands/list.d.ts.map +1 -0
  17. package/dist/src/cli/commands/list.js +130 -0
  18. package/dist/src/cli/commands/list.js.map +1 -0
  19. package/dist/src/cli/commands/load.d.ts +11 -0
  20. package/dist/src/cli/commands/load.d.ts.map +1 -0
  21. package/dist/src/cli/commands/load.js +250 -0
  22. package/dist/src/cli/commands/load.js.map +1 -0
  23. package/dist/src/cli/commands/log.d.ts +18 -0
  24. package/dist/src/cli/commands/log.d.ts.map +1 -0
  25. package/dist/src/cli/commands/log.js +282 -0
  26. package/dist/src/cli/commands/log.js.map +1 -0
  27. package/dist/src/cli/commands/restart.d.ts +11 -0
  28. package/dist/src/cli/commands/restart.d.ts.map +1 -0
  29. package/dist/src/cli/commands/restart.js +99 -0
  30. package/dist/src/cli/commands/restart.js.map +1 -0
  31. package/dist/src/cli/commands/start.d.ts +11 -0
  32. package/dist/src/cli/commands/start.d.ts.map +1 -0
  33. package/dist/src/cli/commands/start.js +105 -0
  34. package/dist/src/cli/commands/start.js.map +1 -0
  35. package/dist/src/cli/commands/stop.d.ts +12 -0
  36. package/dist/src/cli/commands/stop.d.ts.map +1 -0
  37. package/dist/src/cli/commands/stop.js +105 -0
  38. package/dist/src/cli/commands/stop.js.map +1 -0
  39. package/dist/src/cli/index.d.ts +3 -0
  40. package/dist/src/cli/index.d.ts.map +1 -0
  41. package/dist/src/cli/index.js +28 -0
  42. package/dist/src/cli/index.js.map +1 -0
  43. package/dist/src/cli/parser.d.ts +14 -0
  44. package/dist/src/cli/parser.d.ts.map +1 -0
  45. package/dist/src/cli/parser.js +131 -0
  46. package/dist/src/cli/parser.js.map +1 -0
  47. package/dist/src/cli/signal-handler.d.ts +51 -0
  48. package/dist/src/cli/signal-handler.d.ts.map +1 -0
  49. package/dist/src/cli/signal-handler.js +129 -0
  50. package/dist/src/cli/signal-handler.js.map +1 -0
  51. package/dist/src/cli/utils/error-handler.d.ts +39 -0
  52. package/dist/src/cli/utils/error-handler.d.ts.map +1 -0
  53. package/dist/src/cli/utils/error-handler.js +200 -0
  54. package/dist/src/cli/utils/error-handler.js.map +1 -0
  55. package/dist/src/cli/utils/error-utils.d.ts +16 -0
  56. package/dist/src/cli/utils/error-utils.d.ts.map +1 -0
  57. package/dist/src/cli/utils/error-utils.js +48 -0
  58. package/dist/src/cli/utils/error-utils.js.map +1 -0
  59. package/dist/src/cli/utils/ipc-client.d.ts +80 -0
  60. package/dist/src/cli/utils/ipc-client.d.ts.map +1 -0
  61. package/dist/src/cli/utils/ipc-client.js +275 -0
  62. package/dist/src/cli/utils/ipc-client.js.map +1 -0
  63. package/dist/src/config/config-loader.d.ts +74 -0
  64. package/dist/src/config/config-loader.d.ts.map +1 -0
  65. package/dist/src/config/config-loader.js +229 -0
  66. package/dist/src/config/config-loader.js.map +1 -0
  67. package/dist/src/config/config-normalizer.d.ts +135 -0
  68. package/dist/src/config/config-normalizer.d.ts.map +1 -0
  69. package/dist/src/config/config-normalizer.js +309 -0
  70. package/dist/src/config/config-normalizer.js.map +1 -0
  71. package/dist/src/config/config-reporter.d.ts +183 -0
  72. package/dist/src/config/config-reporter.d.ts.map +1 -0
  73. package/dist/src/config/config-reporter.js +311 -0
  74. package/dist/src/config/config-reporter.js.map +1 -0
  75. package/dist/src/config/config-validator.d.ts +163 -0
  76. package/dist/src/config/config-validator.d.ts.map +1 -0
  77. package/dist/src/config/config-validator.js +489 -0
  78. package/dist/src/config/config-validator.js.map +1 -0
  79. package/dist/src/config/config-watcher.d.ts +161 -0
  80. package/dist/src/config/config-watcher.d.ts.map +1 -0
  81. package/dist/src/config/config-watcher.js +245 -0
  82. package/dist/src/config/config-watcher.js.map +1 -0
  83. package/dist/src/config/index.d.ts +36 -0
  84. package/dist/src/config/index.d.ts.map +1 -0
  85. package/dist/src/config/index.js +41 -0
  86. package/dist/src/config/index.js.map +1 -0
  87. package/dist/src/config/secure-config-loader.d.ts +77 -0
  88. package/dist/src/config/secure-config-loader.d.ts.map +1 -0
  89. package/dist/src/config/secure-config-loader.js +326 -0
  90. package/dist/src/config/secure-config-loader.js.map +1 -0
  91. package/dist/src/daemon/base-socket-connection.d.ts +66 -0
  92. package/dist/src/daemon/base-socket-connection.d.ts.map +1 -0
  93. package/dist/src/daemon/base-socket-connection.js +192 -0
  94. package/dist/src/daemon/base-socket-connection.js.map +1 -0
  95. package/dist/src/daemon/component-manager.d.ts +180 -0
  96. package/dist/src/daemon/component-manager.d.ts.map +1 -0
  97. package/dist/src/daemon/component-manager.js +794 -0
  98. package/dist/src/daemon/component-manager.js.map +1 -0
  99. package/dist/src/daemon/crash-recovery.d.ts +71 -0
  100. package/dist/src/daemon/crash-recovery.d.ts.map +1 -0
  101. package/dist/src/daemon/crash-recovery.js +282 -0
  102. package/dist/src/daemon/crash-recovery.js.map +1 -0
  103. package/dist/src/daemon/daemon-main.d.ts +18 -0
  104. package/dist/src/daemon/daemon-main.d.ts.map +1 -0
  105. package/dist/src/daemon/daemon-main.js +160 -0
  106. package/dist/src/daemon/daemon-main.js.map +1 -0
  107. package/dist/src/daemon/daemon-state-manager.d.ts +111 -0
  108. package/dist/src/daemon/daemon-state-manager.d.ts.map +1 -0
  109. package/dist/src/daemon/daemon-state-manager.js +194 -0
  110. package/dist/src/daemon/daemon-state-manager.js.map +1 -0
  111. package/dist/src/daemon/data-directory.d.ts +51 -0
  112. package/dist/src/daemon/data-directory.d.ts.map +1 -0
  113. package/dist/src/daemon/data-directory.js +136 -0
  114. package/dist/src/daemon/data-directory.js.map +1 -0
  115. package/dist/src/daemon/index.d.ts +20 -0
  116. package/dist/src/daemon/index.d.ts.map +1 -0
  117. package/dist/src/daemon/index.js +24 -0
  118. package/dist/src/daemon/index.js.map +1 -0
  119. package/dist/src/daemon/ipc-client-base.d.ts +153 -0
  120. package/dist/src/daemon/ipc-client-base.d.ts.map +1 -0
  121. package/dist/src/daemon/ipc-client-base.js +476 -0
  122. package/dist/src/daemon/ipc-client-base.js.map +1 -0
  123. package/dist/src/daemon/ipc-command-handler.d.ts +107 -0
  124. package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -0
  125. package/dist/src/daemon/ipc-command-handler.js +483 -0
  126. package/dist/src/daemon/ipc-command-handler.js.map +1 -0
  127. package/dist/src/daemon/ipc-factory.d.ts +92 -0
  128. package/dist/src/daemon/ipc-factory.d.ts.map +1 -0
  129. package/dist/src/daemon/ipc-factory.js +210 -0
  130. package/dist/src/daemon/ipc-factory.js.map +1 -0
  131. package/dist/src/daemon/ipc-server-base.d.ts +158 -0
  132. package/dist/src/daemon/ipc-server-base.d.ts.map +1 -0
  133. package/dist/src/daemon/ipc-server-base.js +491 -0
  134. package/dist/src/daemon/ipc-server-base.js.map +1 -0
  135. package/dist/src/daemon/message-protocol.d.ts +132 -0
  136. package/dist/src/daemon/message-protocol.d.ts.map +1 -0
  137. package/dist/src/daemon/message-protocol.js +252 -0
  138. package/dist/src/daemon/message-protocol.js.map +1 -0
  139. package/dist/src/daemon/named-pipe-client.d.ts +61 -0
  140. package/dist/src/daemon/named-pipe-client.d.ts.map +1 -0
  141. package/dist/src/daemon/named-pipe-client.js +221 -0
  142. package/dist/src/daemon/named-pipe-client.js.map +1 -0
  143. package/dist/src/daemon/named-pipe-server.d.ts +40 -0
  144. package/dist/src/daemon/named-pipe-server.d.ts.map +1 -0
  145. package/dist/src/daemon/named-pipe-server.js +102 -0
  146. package/dist/src/daemon/named-pipe-server.js.map +1 -0
  147. package/dist/src/daemon/orphan-detector.d.ts +66 -0
  148. package/dist/src/daemon/orphan-detector.d.ts.map +1 -0
  149. package/dist/src/daemon/orphan-detector.js +208 -0
  150. package/dist/src/daemon/orphan-detector.js.map +1 -0
  151. package/dist/src/daemon/pid-manager.d.ts +49 -0
  152. package/dist/src/daemon/pid-manager.d.ts.map +1 -0
  153. package/dist/src/daemon/pid-manager.js +110 -0
  154. package/dist/src/daemon/pid-manager.js.map +1 -0
  155. package/dist/src/daemon/procman-daemon.d.ts +188 -0
  156. package/dist/src/daemon/procman-daemon.d.ts.map +1 -0
  157. package/dist/src/daemon/procman-daemon.js +802 -0
  158. package/dist/src/daemon/procman-daemon.js.map +1 -0
  159. package/dist/src/daemon/reconnection-system.d.ts +113 -0
  160. package/dist/src/daemon/reconnection-system.d.ts.map +1 -0
  161. package/dist/src/daemon/reconnection-system.js +223 -0
  162. package/dist/src/daemon/reconnection-system.js.map +1 -0
  163. package/dist/src/daemon/resource-manager.d.ts +204 -0
  164. package/dist/src/daemon/resource-manager.d.ts.map +1 -0
  165. package/dist/src/daemon/resource-manager.js +423 -0
  166. package/dist/src/daemon/resource-manager.js.map +1 -0
  167. package/dist/src/daemon/signal-handler.d.ts +58 -0
  168. package/dist/src/daemon/signal-handler.d.ts.map +1 -0
  169. package/dist/src/daemon/signal-handler.js +142 -0
  170. package/dist/src/daemon/signal-handler.js.map +1 -0
  171. package/dist/src/daemon/simple-resource-manager.d.ts +95 -0
  172. package/dist/src/daemon/simple-resource-manager.d.ts.map +1 -0
  173. package/dist/src/daemon/simple-resource-manager.js +180 -0
  174. package/dist/src/daemon/simple-resource-manager.js.map +1 -0
  175. package/dist/src/daemon/unix-socket-client.d.ts +69 -0
  176. package/dist/src/daemon/unix-socket-client.d.ts.map +1 -0
  177. package/dist/src/daemon/unix-socket-client.js +313 -0
  178. package/dist/src/daemon/unix-socket-client.js.map +1 -0
  179. package/dist/src/daemon/unix-socket-server.d.ts +61 -0
  180. package/dist/src/daemon/unix-socket-server.d.ts.map +1 -0
  181. package/dist/src/daemon/unix-socket-server.js +262 -0
  182. package/dist/src/daemon/unix-socket-server.js.map +1 -0
  183. package/dist/src/daemon/zombie-reaper.d.ts +83 -0
  184. package/dist/src/daemon/zombie-reaper.d.ts.map +1 -0
  185. package/dist/src/daemon/zombie-reaper.js +278 -0
  186. package/dist/src/daemon/zombie-reaper.js.map +1 -0
  187. package/dist/src/process-manager/index.d.ts +13 -0
  188. package/dist/src/process-manager/index.d.ts.map +1 -0
  189. package/dist/src/process-manager/index.js +11 -0
  190. package/dist/src/process-manager/index.js.map +1 -0
  191. package/dist/src/process-manager/interfaces/index.d.ts +31 -0
  192. package/dist/src/process-manager/interfaces/index.d.ts.map +1 -0
  193. package/dist/src/process-manager/interfaces/index.js +14 -0
  194. package/dist/src/process-manager/interfaces/index.js.map +1 -0
  195. package/dist/src/process-manager/interfaces/process-group.d.ts +200 -0
  196. package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -0
  197. package/dist/src/process-manager/interfaces/process-group.js +10 -0
  198. package/dist/src/process-manager/interfaces/process-group.js.map +1 -0
  199. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts +97 -0
  200. package/dist/src/process-manager/interfaces/process-lifecycle.d.ts.map +1 -0
  201. package/dist/src/process-manager/interfaces/process-lifecycle.js +10 -0
  202. package/dist/src/process-manager/interfaces/process-lifecycle.js.map +1 -0
  203. package/dist/src/process-manager/interfaces/process-monitor.d.ts +118 -0
  204. package/dist/src/process-manager/interfaces/process-monitor.d.ts.map +1 -0
  205. package/dist/src/process-manager/interfaces/process-monitor.js +10 -0
  206. package/dist/src/process-manager/interfaces/process-monitor.js.map +1 -0
  207. package/dist/src/process-manager/interfaces/process-persistence.d.ts +125 -0
  208. package/dist/src/process-manager/interfaces/process-persistence.d.ts.map +1 -0
  209. package/dist/src/process-manager/interfaces/process-persistence.js +10 -0
  210. package/dist/src/process-manager/interfaces/process-persistence.js.map +1 -0
  211. package/dist/src/process-manager/managed-process-info.d.ts +307 -0
  212. package/dist/src/process-manager/managed-process-info.d.ts.map +1 -0
  213. package/dist/src/process-manager/managed-process-info.js +650 -0
  214. package/dist/src/process-manager/managed-process-info.js.map +1 -0
  215. package/dist/src/process-manager/process-group-manager.d.ts +103 -0
  216. package/dist/src/process-manager/process-group-manager.d.ts.map +1 -0
  217. package/dist/src/process-manager/process-group-manager.js +400 -0
  218. package/dist/src/process-manager/process-group-manager.js.map +1 -0
  219. package/dist/src/process-manager/process-lifecycle-manager.d.ts +68 -0
  220. package/dist/src/process-manager/process-lifecycle-manager.d.ts.map +1 -0
  221. package/dist/src/process-manager/process-lifecycle-manager.js +372 -0
  222. package/dist/src/process-manager/process-lifecycle-manager.js.map +1 -0
  223. package/dist/src/process-manager/process-manager.d.ts +296 -0
  224. package/dist/src/process-manager/process-manager.d.ts.map +1 -0
  225. package/dist/src/process-manager/process-manager.js +659 -0
  226. package/dist/src/process-manager/process-manager.js.map +1 -0
  227. package/dist/src/process-manager/process-monitor.d.ts +95 -0
  228. package/dist/src/process-manager/process-monitor.d.ts.map +1 -0
  229. package/dist/src/process-manager/process-monitor.js +357 -0
  230. package/dist/src/process-manager/process-monitor.js.map +1 -0
  231. package/dist/src/process-manager/process-persistence.d.ts +68 -0
  232. package/dist/src/process-manager/process-persistence.d.ts.map +1 -0
  233. package/dist/src/process-manager/process-persistence.js +364 -0
  234. package/dist/src/process-manager/process-persistence.js.map +1 -0
  235. package/dist/src/process-manager/utils/mutex.d.ts +82 -0
  236. package/dist/src/process-manager/utils/mutex.d.ts.map +1 -0
  237. package/dist/src/process-manager/utils/mutex.js +172 -0
  238. package/dist/src/process-manager/utils/mutex.js.map +1 -0
  239. package/dist/src/services/index.d.ts +8 -0
  240. package/dist/src/services/index.d.ts.map +1 -0
  241. package/dist/src/services/index.js +8 -0
  242. package/dist/src/services/index.js.map +1 -0
  243. package/dist/src/services/log-manager-config.d.ts +65 -0
  244. package/dist/src/services/log-manager-config.d.ts.map +1 -0
  245. package/dist/src/services/log-manager-config.js +145 -0
  246. package/dist/src/services/log-manager-config.js.map +1 -0
  247. package/dist/src/services/log-manager-factory.d.ts +134 -0
  248. package/dist/src/services/log-manager-factory.d.ts.map +1 -0
  249. package/dist/src/services/log-manager-factory.js +203 -0
  250. package/dist/src/services/log-manager-factory.js.map +1 -0
  251. package/dist/src/services/log-manager.d.ts +170 -0
  252. package/dist/src/services/log-manager.d.ts.map +1 -0
  253. package/dist/src/services/log-manager.js +1199 -0
  254. package/dist/src/services/log-manager.js.map +1 -0
  255. package/dist/src/services/log-path-validator.d.ts +121 -0
  256. package/dist/src/services/log-path-validator.d.ts.map +1 -0
  257. package/dist/src/services/log-path-validator.js +302 -0
  258. package/dist/src/services/log-path-validator.js.map +1 -0
  259. package/dist/src/services/process-log-integration.d.ts +62 -0
  260. package/dist/src/services/process-log-integration.d.ts.map +1 -0
  261. package/dist/src/services/process-log-integration.js +157 -0
  262. package/dist/src/services/process-log-integration.js.map +1 -0
  263. package/dist/src/shared/config.d.ts +67 -0
  264. package/dist/src/shared/config.d.ts.map +1 -0
  265. package/dist/src/shared/config.js +92 -0
  266. package/dist/src/shared/config.js.map +1 -0
  267. package/dist/src/shared/constants-streaming.d.ts +39 -0
  268. package/dist/src/shared/constants-streaming.d.ts.map +1 -0
  269. package/dist/src/shared/constants-streaming.js +39 -0
  270. package/dist/src/shared/constants-streaming.js.map +1 -0
  271. package/dist/src/shared/constants.d.ts +60 -0
  272. package/dist/src/shared/constants.d.ts.map +1 -0
  273. package/dist/src/shared/constants.js +71 -0
  274. package/dist/src/shared/constants.js.map +1 -0
  275. package/dist/src/shared/errors.d.ts +70 -0
  276. package/dist/src/shared/errors.d.ts.map +1 -0
  277. package/dist/src/shared/errors.js +101 -0
  278. package/dist/src/shared/errors.js.map +1 -0
  279. package/dist/src/shared/index.d.ts +14 -0
  280. package/dist/src/shared/index.d.ts.map +1 -0
  281. package/dist/src/shared/index.js +22 -0
  282. package/dist/src/shared/index.js.map +1 -0
  283. package/dist/src/shared/ipc.d.ts +402 -0
  284. package/dist/src/shared/ipc.d.ts.map +1 -0
  285. package/dist/src/shared/ipc.js +85 -0
  286. package/dist/src/shared/ipc.js.map +1 -0
  287. package/dist/src/shared/logger.d.ts +38 -0
  288. package/dist/src/shared/logger.d.ts.map +1 -0
  289. package/dist/src/shared/logger.js +139 -0
  290. package/dist/src/shared/logger.js.map +1 -0
  291. package/dist/src/shared/logs.d.ts +53 -0
  292. package/dist/src/shared/logs.d.ts.map +1 -0
  293. package/dist/src/shared/logs.js +26 -0
  294. package/dist/src/shared/logs.js.map +1 -0
  295. package/dist/src/shared/process.d.ts +102 -0
  296. package/dist/src/shared/process.d.ts.map +1 -0
  297. package/dist/src/shared/process.js +55 -0
  298. package/dist/src/shared/process.js.map +1 -0
  299. package/dist/src/shared/types.d.ts +15 -0
  300. package/dist/src/shared/types.d.ts.map +1 -0
  301. package/dist/src/shared/types.js +8 -0
  302. package/dist/src/shared/types.js.map +1 -0
  303. package/dist/src/types/index.d.ts +19 -0
  304. package/dist/src/types/index.d.ts.map +1 -0
  305. package/dist/src/types/index.js +5 -0
  306. package/dist/src/types/index.js.map +1 -0
  307. package/dist/src/utils/event-cleanup.d.ts +30 -0
  308. package/dist/src/utils/event-cleanup.d.ts.map +1 -0
  309. package/dist/src/utils/event-cleanup.js +32 -0
  310. package/dist/src/utils/event-cleanup.js.map +1 -0
  311. package/dist/src/utils/memory/memory-monitor.d.ts +126 -0
  312. package/dist/src/utils/memory/memory-monitor.d.ts.map +1 -0
  313. package/dist/src/utils/memory/memory-monitor.js +246 -0
  314. package/dist/src/utils/memory/memory-monitor.js.map +1 -0
  315. package/package.json +74 -0
@@ -0,0 +1,491 @@
1
+ /**
2
+ * IPC Server Base Implementation
3
+ *
4
+ * Abstract base class for IPC server implementations.
5
+ * Provides common functionality for both Unix Domain Socket and Named Pipe servers.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { setTimeout } from 'timers';
9
+ import { SimpleDisposableBase } from './simple-resource-manager.js';
10
+ import { generateMessageId } from '../shared/ipc.js';
11
+ /**
12
+ * Abstract base class for IPC servers
13
+ */
14
+ export class IPCServerBase extends SimpleDisposableBase {
15
+ config;
16
+ connections = new Map();
17
+ messageHandlers = new Map();
18
+ isListening = false;
19
+ serverInstance = null;
20
+ eventEmitter = new EventEmitter();
21
+ constructor(config = { path: '' }) {
22
+ super();
23
+ // Set default configuration
24
+ this.config = {
25
+ path: config.path,
26
+ socketPath: config.socketPath || config.path || '',
27
+ namedPipePath: config.namedPipePath || config.path || '',
28
+ cleanupOnStart: config.cleanupOnStart ?? true,
29
+ maxConnections: config.maxConnections || 100,
30
+ connectionTimeout: config.connectionTimeout || 30000,
31
+ };
32
+ }
33
+ /**
34
+ * Start the IPC server
35
+ */
36
+ async start() {
37
+ this.ensureNotDisposed();
38
+ if (this.isListening) {
39
+ throw new Error('Server is already listening');
40
+ }
41
+ try {
42
+ await this.startServer();
43
+ this.isListening = true;
44
+ this.emit('listening');
45
+ }
46
+ catch (error) {
47
+ const errorObj = error instanceof Error ? error : new Error(String(error));
48
+ this.emit('error', errorObj);
49
+ throw errorObj;
50
+ }
51
+ }
52
+ /**
53
+ * Stop the IPC server
54
+ */
55
+ async stop() {
56
+ this.ensureNotDisposed();
57
+ if (!this.isListening) {
58
+ return;
59
+ }
60
+ try {
61
+ // Close all connections with timeout protection
62
+ const closePromises = Array.from(this.connections.values()).map(async (connection) => {
63
+ try {
64
+ await Promise.race([
65
+ connection.close ? connection.close() : Promise.resolve(),
66
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Connection close timeout')), 5000)),
67
+ ]);
68
+ }
69
+ catch (error) {
70
+ // Log error but continue with other connections
71
+ this.emit('connectionCloseError', error instanceof Error ? error : new Error(String(error)), connection.id);
72
+ }
73
+ });
74
+ await Promise.all(closePromises);
75
+ this.connections.clear();
76
+ // Stop the server
77
+ await this.stopServer();
78
+ this.isListening = false;
79
+ this.emit('stopped');
80
+ }
81
+ catch (error) {
82
+ const errorObj = error instanceof Error ? error : new Error(String(error));
83
+ this.emit('error', errorObj);
84
+ throw errorObj;
85
+ }
86
+ }
87
+ /**
88
+ * Register a message handler for a specific command type
89
+ */
90
+ registerHandler(commandType, handler) {
91
+ this.messageHandlers.set(commandType, handler);
92
+ }
93
+ /**
94
+ * Unregister a message handler
95
+ */
96
+ unregisterHandler(commandType) {
97
+ this.messageHandlers.delete(commandType);
98
+ }
99
+ /**
100
+ * Get a message handler for a specific command type
101
+ */
102
+ getHandler(commandType) {
103
+ return this.messageHandlers.get(commandType);
104
+ }
105
+ /**
106
+ * Check if a handler is registered for a command type
107
+ */
108
+ hasHandler(commandType) {
109
+ return this.messageHandlers.has(commandType);
110
+ }
111
+ /**
112
+ * Clear all message handlers
113
+ */
114
+ clearHandlers() {
115
+ this.messageHandlers.clear();
116
+ }
117
+ /**
118
+ * Get all active connections
119
+ */
120
+ getConnections() {
121
+ return Array.from(this.connections.values());
122
+ }
123
+ /**
124
+ * Get connection by ID
125
+ */
126
+ getConnection(id) {
127
+ return this.connections.get(id);
128
+ }
129
+ /**
130
+ * Check if server is listening
131
+ */
132
+ isServerListening() {
133
+ return this.isListening;
134
+ }
135
+ /**
136
+ * Broadcast message to all connections
137
+ */
138
+ async broadcast(message) {
139
+ this.ensureNotDisposed();
140
+ const sendPromises = Array.from(this.connections.values()).map(async (connection) => {
141
+ try {
142
+ await Promise.race([
143
+ connection.send
144
+ ? connection.send(message)
145
+ : Promise.reject(new Error('send method not available')),
146
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Broadcast timeout')), 5000)),
147
+ ]);
148
+ }
149
+ catch (error) {
150
+ this.emit('connectionError', error instanceof Error ? error : new Error(String(error)), connection.id);
151
+ }
152
+ });
153
+ await Promise.all(sendPromises);
154
+ }
155
+ /**
156
+ * Handle incoming message from a connection
157
+ */
158
+ async handleMessage(data, connection) {
159
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
160
+ let messages = [];
161
+ try {
162
+ // Update last activity
163
+ connection.lastActivity = Date.now();
164
+ // Parse messages from buffer (handle multiple messages)
165
+ messages = this.parseMessages(data);
166
+ for (const messageData of messages) {
167
+ await this.processMessage(messageData, connection);
168
+ }
169
+ }
170
+ catch (error) {
171
+ this.emit('messageError', error instanceof Error ? error : new Error(String(error)), messages, // The message data that caused the error
172
+ connection.id);
173
+ // Send error response if possible
174
+ try {
175
+ const errorResponse = {
176
+ id: generateMessageId(),
177
+ type: 'error',
178
+ requestId: 'unknown',
179
+ timestamp: Date.now(),
180
+ success: false,
181
+ error: {
182
+ code: 'MESSAGE_PARSE_ERROR',
183
+ message: 'Failed to parse message',
184
+ details: {
185
+ error: error instanceof Error ? error.message : String(error),
186
+ },
187
+ },
188
+ };
189
+ if (connection.send) {
190
+ await connection.send(errorResponse);
191
+ }
192
+ }
193
+ catch (sendError) {
194
+ this.emit('connectionError', sendError instanceof Error ? sendError : new Error(String(sendError)), connection.id);
195
+ }
196
+ }
197
+ }
198
+ /**
199
+ * Parse multiple JSON messages from buffer
200
+ * Addresses the PoC issue with consecutive message parsing
201
+ */
202
+ parseMessages(data) {
203
+ const messages = [];
204
+ const text = data.toString('utf8');
205
+ // Split by newlines and filter out empty lines
206
+ const lines = text.split('\n').filter((line) => line.trim());
207
+ for (const line of lines) {
208
+ try {
209
+ const parsed = JSON.parse(line.trim());
210
+ messages.push(parsed);
211
+ }
212
+ catch {
213
+ // Try to handle concatenated JSON objects without newlines
214
+ // This addresses the PoC parsing issue
215
+ this.handleConcatenatedJSON(line.trim(), messages);
216
+ }
217
+ }
218
+ return messages;
219
+ }
220
+ /**
221
+ * Handle concatenated JSON objects in a single line
222
+ * Uses simplified regex approach consistent with message-protocol.ts
223
+ */
224
+ handleConcatenatedJSON(text, messages) {
225
+ // Simple approach: match JSON objects with balanced braces
226
+ const jsonRegex = /\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}/g;
227
+ const matches = text.match(jsonRegex) || [];
228
+ for (const match of matches) {
229
+ try {
230
+ const parsed = JSON.parse(match.trim());
231
+ messages.push(parsed);
232
+ }
233
+ catch (error) {
234
+ console.warn(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`, {
235
+ method: 'parseBuffer',
236
+ input: match.trim().slice(0, 100), // First 100 chars for debugging
237
+ });
238
+ }
239
+ }
240
+ }
241
+ /**
242
+ * Process a single parsed message
243
+ */
244
+ async processMessage(messageData, connection) {
245
+ try {
246
+ // Validate message structure
247
+ if (!this.isValidIPCMessage(messageData)) {
248
+ throw new Error('Invalid IPC message structure');
249
+ }
250
+ // Handle ping message specially for heartbeat monitoring (internal message)
251
+ if (messageData.type === 'ping') {
252
+ const pongResponse = {
253
+ id: generateMessageId(),
254
+ type: 'response', // Use existing response type for internal pong
255
+ requestId: messageData.id,
256
+ timestamp: Date.now(),
257
+ success: true,
258
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
259
+ data: { timestamp: Date.now() },
260
+ };
261
+ if (connection.send) {
262
+ await connection.send(pongResponse);
263
+ }
264
+ return;
265
+ }
266
+ const message = messageData;
267
+ const handler = this.messageHandlers.get(message.type);
268
+ if (!handler) {
269
+ throw new Error(`No handler registered for command type: ${message.type}`);
270
+ }
271
+ // Execute handler
272
+ const response = await handler(message, connection);
273
+ // Send response if handler returned one
274
+ if (response) {
275
+ if (connection.send) {
276
+ await connection.send(response);
277
+ }
278
+ }
279
+ }
280
+ catch (error) {
281
+ // Send error response
282
+ const errorResponse = {
283
+ id: generateMessageId(),
284
+ type: 'error',
285
+ requestId: messageData &&
286
+ typeof messageData === 'object' &&
287
+ 'id' in messageData &&
288
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
289
+ typeof messageData.id === 'string'
290
+ ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
291
+ messageData.id
292
+ : 'unknown',
293
+ success: false,
294
+ error: {
295
+ code: 'COMMAND_EXECUTION_ERROR',
296
+ message: error instanceof Error ? error.message : String(error),
297
+ details: { originalMessage: messageData },
298
+ },
299
+ timestamp: Date.now(),
300
+ };
301
+ try {
302
+ if (connection.send) {
303
+ await connection.send(errorResponse);
304
+ }
305
+ }
306
+ catch (sendError) {
307
+ this.emit('connectionError', sendError instanceof Error ? sendError : new Error(String(sendError)), connection.id);
308
+ }
309
+ }
310
+ }
311
+ /**
312
+ * Validate IPC message structure
313
+ */
314
+ isValidIPCMessage(obj) {
315
+ // t_wada boundary principle: gracefully handle null/undefined payloads
316
+ if (typeof obj !== 'object' || obj === null) {
317
+ return false;
318
+ }
319
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
320
+ const message = obj;
321
+ // Validate required fields
322
+ if (typeof message.id !== 'string' ||
323
+ typeof message.type !== 'string' ||
324
+ typeof message.timestamp !== 'number') {
325
+ return false;
326
+ }
327
+ // Accept messages with null/undefined/missing payload for boundary testing
328
+ return true;
329
+ }
330
+ /**
331
+ * Handle new connection
332
+ */
333
+ handleConnection(connection) {
334
+ // Add to connections map (connection limit is checked at server level)
335
+ // console.error(`[DEBUG-CONNECTION-LIMIT] Adding connection ${connection.id} to map, new size will be: ${this.connections.size + 1}`);
336
+ this.connections.set(connection.id, connection);
337
+ this.emit('connection', connection);
338
+ // Set up connection event handlers
339
+ this.setupConnectionHandlers(connection);
340
+ }
341
+ /**
342
+ * Set up event handlers for a connection
343
+ */
344
+ setupConnectionHandlers(connection) {
345
+ // Remove connection when it closes
346
+ const cleanup = () => {
347
+ this.connections.delete(connection.id);
348
+ this.emit('disconnection', connection.id);
349
+ };
350
+ // Track event listeners for proper cleanup
351
+ if (typeof connection.on === 'function') {
352
+ this.addEventListener(
353
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
354
+ connection, 'close', cleanup);
355
+ this.addEventListener(
356
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
+ connection, 'error', (error) => {
358
+ this.emit('connectionError', error, connection.id);
359
+ cleanup();
360
+ });
361
+ }
362
+ }
363
+ /**
364
+ * Set up connection events for socket-based connections
365
+ * Common logic for Unix Socket and Named Pipe connections
366
+ */
367
+ setupConnectionEvents(connection) {
368
+ // Set up connection data handler
369
+ if (connection.on) {
370
+ connection.on('data', (data) => {
371
+ this.handleMessage(data, connection);
372
+ });
373
+ // Clean up connection when it's disposed
374
+ connection.on('close', () => {
375
+ // Connection cleanup is handled in base class
376
+ });
377
+ }
378
+ // Handle the new connection
379
+ this.handleConnection(connection);
380
+ }
381
+ /**
382
+ * Set up common server events for net.Server instances
383
+ * Common logic for Unix Socket and Named Pipe servers
384
+ */
385
+ setupCommonServerEvents(server) {
386
+ server.on('error', (error) => {
387
+ this.emit('error', error);
388
+ });
389
+ server.on('listening', () => {
390
+ this.emit('listening');
391
+ });
392
+ server.on('close', () => {
393
+ this.emit('close');
394
+ });
395
+ }
396
+ /**
397
+ * Implement disposal core for DisposableBase
398
+ */
399
+ disposeCore() {
400
+ // Stop the server if still running (non-blocking)
401
+ if (this.isListening) {
402
+ try {
403
+ this.stop().catch(() => {
404
+ /* ignore */
405
+ });
406
+ }
407
+ catch {
408
+ // Ignore errors during disposal
409
+ }
410
+ }
411
+ // Force close any remaining connections (non-blocking)
412
+ const connectionsArray = Array.from(this.connections.values());
413
+ for (const connection of connectionsArray) {
414
+ try {
415
+ if (connection.close) {
416
+ const closePromise = connection.close();
417
+ if (closePromise && typeof closePromise.catch === 'function') {
418
+ closePromise.catch(() => {
419
+ /* ignore */
420
+ });
421
+ }
422
+ }
423
+ }
424
+ catch {
425
+ // Ignore errors during disposal
426
+ }
427
+ }
428
+ this.connections.clear();
429
+ // Clear message handlers
430
+ this.messageHandlers.clear();
431
+ // Clear event listeners
432
+ this.eventEmitter.removeAllListeners();
433
+ }
434
+ /**
435
+ * Get current resource usage statistics
436
+ */
437
+ getResourceStats() {
438
+ const resourceCount = this.resources.getResourceCount();
439
+ return {
440
+ activeConnections: this.connections.size,
441
+ messageHandlers: this.messageHandlers.size,
442
+ eventListeners: resourceCount.listeners,
443
+ totalResources: resourceCount.timeouts +
444
+ resourceCount.intervals +
445
+ resourceCount.listeners,
446
+ isListening: this.isListening,
447
+ };
448
+ }
449
+ /**
450
+ * TypedEventEmitter implementation methods
451
+ */
452
+ on(event, listener) {
453
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
454
+ this.eventEmitter.on(event, listener);
455
+ return this;
456
+ }
457
+ once(event, listener) {
458
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
459
+ this.eventEmitter.once(event, listener);
460
+ return this;
461
+ }
462
+ emit(event, ...args) {
463
+ return this.eventEmitter.emit(event, ...args);
464
+ }
465
+ removeListener(event, listener) {
466
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
467
+ this.eventEmitter.removeListener(event, listener);
468
+ return this;
469
+ }
470
+ off(event, listener) {
471
+ return this.removeListener(event, listener);
472
+ }
473
+ removeAllListeners(event) {
474
+ this.eventEmitter.removeAllListeners(event);
475
+ return this;
476
+ }
477
+ setMaxListeners(n) {
478
+ this.eventEmitter.setMaxListeners(n);
479
+ return this;
480
+ }
481
+ getMaxListeners() {
482
+ return this.eventEmitter.getMaxListeners();
483
+ }
484
+ listeners(event) {
485
+ return this.eventEmitter.listeners(event);
486
+ }
487
+ listenerCount(event) {
488
+ return this.eventEmitter.listenerCount(event);
489
+ }
490
+ }
491
+ //# sourceMappingURL=ipc-server-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc-server-base.js","sourceRoot":"","sources":["../../../src/daemon/ipc-server-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * IPC Message Protocol Implementation
3
+ *
4
+ * Handles serialization, deserialization, and proper parsing of IPC messages.
5
+ * Addresses the PoC issue with consecutive message parsing by implementing
6
+ * proper message framing and delimiter handling.
7
+ */
8
+ import type { IPCMessage } from '../shared/ipc.js';
9
+ import { IDisposable } from './resource-manager.js';
10
+ /**
11
+ * Message delimiter used to separate messages in the stream
12
+ */
13
+ export declare const MESSAGE_DELIMITER = "\n";
14
+ /**
15
+ * Maximum message size in bytes (1MB)
16
+ */
17
+ export declare const MAX_MESSAGE_SIZE: number;
18
+ /**
19
+ * Message buffer for handling partial messages
20
+ */
21
+ export declare class MessageBuffer implements IDisposable {
22
+ private buffer;
23
+ private readonly delimiter;
24
+ private readonly maxSize;
25
+ constructor(delimiter?: string, maxSize?: number);
26
+ /**
27
+ * Add data to the buffer and extract complete messages
28
+ */
29
+ push(data: Buffer | string): IPCMessage[];
30
+ /**
31
+ * Extract messages using delimiter-based framing
32
+ */
33
+ private extractDelimitedMessages;
34
+ /**
35
+ * Parse a single message from text
36
+ */
37
+ private parseMessage;
38
+ /**
39
+ * Handle concatenated JSON objects in a single string
40
+ * This addresses the PoC issue with consecutive message parsing
41
+ */
42
+ private parseConcatenatedJSON;
43
+ /**
44
+ * Validate IPC message structure
45
+ */
46
+ private isValidIPCMessage;
47
+ /**
48
+ * Get current buffer size
49
+ */
50
+ getBufferSize(): number;
51
+ /**
52
+ * Clear the buffer
53
+ */
54
+ clear(): void;
55
+ /**
56
+ * Dispose resources
57
+ */
58
+ dispose(): void;
59
+ /**
60
+ * Check if disposed
61
+ */
62
+ isDisposed(): boolean;
63
+ }
64
+ /**
65
+ * Message serializer for encoding IPC messages
66
+ */
67
+ export declare class MessageSerializer {
68
+ private readonly delimiter;
69
+ constructor(delimiter?: string);
70
+ /**
71
+ * Serialize message to buffer
72
+ */
73
+ serialize(message: IPCMessage): Buffer;
74
+ }
75
+ /**
76
+ * Message deserializer using MessageBuffer
77
+ */
78
+ export declare class MessageDeserializer extends MessageBuffer {
79
+ constructor(delimiter?: string, maxSize?: number);
80
+ }
81
+ /**
82
+ * Complete message protocol handler
83
+ */
84
+ export declare class MessageProtocol implements IDisposable {
85
+ private readonly serializer;
86
+ private readonly deserializer;
87
+ constructor(delimiter?: string, maxSize?: number);
88
+ /**
89
+ * Encode a message to buffer
90
+ */
91
+ encode(message: IPCMessage): Buffer;
92
+ /**
93
+ * Decode data and extract messages
94
+ */
95
+ decode(data: Buffer | string): IPCMessage[];
96
+ /**
97
+ * Get current buffer size
98
+ */
99
+ getBufferSize(): number;
100
+ /**
101
+ * Clear the decode buffer
102
+ */
103
+ clearBuffer(): void;
104
+ /**
105
+ * Dispose resources
106
+ */
107
+ dispose(): void;
108
+ /**
109
+ * Check if disposed
110
+ */
111
+ isDisposed(): boolean;
112
+ /**
113
+ * Get resource stats
114
+ */
115
+ getResourceStats(): {
116
+ bufferSize: number;
117
+ isDisposed: boolean;
118
+ };
119
+ }
120
+ /**
121
+ * Create a message protocol instance
122
+ */
123
+ export declare function createMessageProtocol(delimiter?: string, maxSize?: number): MessageProtocol;
124
+ /**
125
+ * Utility function to validate message size
126
+ */
127
+ export declare function validateMessageSize(message: IPCMessage, maxSize?: number): boolean;
128
+ /**
129
+ * Utility function to estimate message size
130
+ */
131
+ export declare function estimateMessageSize(message: IPCMessage): number;
132
+ //# sourceMappingURL=message-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-protocol.d.ts","sourceRoot":"","sources":["../../../src/daemon/message-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAc,CAAC;AAE5C;;GAEG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,SAAS,SAAoB,EAAE,OAAO,SAAmB;IAKrE;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,EAAE;IAkBzC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsBhC;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,UAAU,IAAI,OAAO;CAGtB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,SAAS,SAAoB;IAIzC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;CASvC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,SAAS,SAAoB,EAAE,OAAO,SAAmB;CAGtE;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAEvC,SAAS,SAAoB,EAAE,OAAO,SAAmB;IAKrE;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAInC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,EAAE;IAI3C;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,gBAAgB,IAAI;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB;CAMF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,SAAoB,EAC7B,OAAO,SAAmB,GACzB,eAAe,CAEjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EACnB,OAAO,SAAmB,GACzB,OAAO,CAOT;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAM/D"}