@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,252 @@
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
+ /**
9
+ * Message delimiter used to separate messages in the stream
10
+ */
11
+ export const MESSAGE_DELIMITER = '\n';
12
+ /**
13
+ * Maximum message size in bytes (1MB)
14
+ */
15
+ export const MAX_MESSAGE_SIZE = 1024 * 1024;
16
+ /**
17
+ * Message buffer for handling partial messages
18
+ */
19
+ export class MessageBuffer {
20
+ buffer = '';
21
+ delimiter;
22
+ maxSize;
23
+ constructor(delimiter = MESSAGE_DELIMITER, maxSize = MAX_MESSAGE_SIZE) {
24
+ this.delimiter = delimiter;
25
+ this.maxSize = maxSize;
26
+ }
27
+ /**
28
+ * Add data to the buffer and extract complete messages
29
+ */
30
+ push(data) {
31
+ const text = typeof data === 'string' ? data : data.toString('utf8');
32
+ this.buffer += text;
33
+ const messages = [];
34
+ this.extractDelimitedMessages(messages);
35
+ // Check buffer size to prevent memory issues
36
+ if (this.buffer.length > this.maxSize) {
37
+ this.buffer = '';
38
+ throw new Error(`Message buffer exceeded maximum size: ${this.maxSize} bytes`);
39
+ }
40
+ return messages;
41
+ }
42
+ /**
43
+ * Extract messages using delimiter-based framing
44
+ */
45
+ extractDelimitedMessages(messages) {
46
+ const parts = this.buffer.split(this.delimiter);
47
+ // Keep the last part as it might be incomplete
48
+ this.buffer = parts.pop() || '';
49
+ for (const part of parts) {
50
+ const trimmed = part.trim();
51
+ if (trimmed) {
52
+ try {
53
+ const message = this.parseMessage(trimmed);
54
+ if (message) {
55
+ messages.push(message);
56
+ }
57
+ }
58
+ catch {
59
+ // Try to handle concatenated JSON objects
60
+ this.parseConcatenatedJSON(trimmed, messages);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Parse a single message from text
67
+ */
68
+ parseMessage(text) {
69
+ try {
70
+ const parsed = JSON.parse(text);
71
+ // Validate basic IPC message structure
72
+ if (this.isValidIPCMessage(parsed)) {
73
+ return parsed;
74
+ }
75
+ return null;
76
+ }
77
+ catch (error) {
78
+ throw new Error(`Failed to parse JSON message: ${error}`);
79
+ }
80
+ }
81
+ /**
82
+ * Handle concatenated JSON objects in a single string
83
+ * This addresses the PoC issue with consecutive message parsing
84
+ */
85
+ parseConcatenatedJSON(text, messages) {
86
+ // Simple approach: match JSON objects with balanced braces
87
+ const jsonRegex = /\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}/g;
88
+ const matches = text.match(jsonRegex) || [];
89
+ for (const match of matches) {
90
+ try {
91
+ const message = this.parseMessage(match.trim());
92
+ if (message)
93
+ messages.push(message);
94
+ }
95
+ catch (error) {
96
+ console.warn(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`, {
97
+ method: 'extractIPCMessages',
98
+ input: match.trim().slice(0, 100), // First 100 chars for debugging
99
+ });
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Validate IPC message structure
105
+ */
106
+ isValidIPCMessage(obj) {
107
+ return Boolean(obj &&
108
+ typeof obj === 'object' &&
109
+ typeof obj.id === 'string' &&
110
+ typeof obj.type === 'string');
111
+ }
112
+ /**
113
+ * Get current buffer size
114
+ */
115
+ getBufferSize() {
116
+ return this.buffer.length;
117
+ }
118
+ /**
119
+ * Clear the buffer
120
+ */
121
+ clear() {
122
+ this.buffer = '';
123
+ }
124
+ /**
125
+ * Dispose resources
126
+ */
127
+ dispose() {
128
+ this.clear();
129
+ }
130
+ /**
131
+ * Check if disposed
132
+ */
133
+ isDisposed() {
134
+ return false; // MessageBuffer doesn't have complex disposal logic
135
+ }
136
+ }
137
+ /**
138
+ * Message serializer for encoding IPC messages
139
+ */
140
+ export class MessageSerializer {
141
+ delimiter;
142
+ constructor(delimiter = MESSAGE_DELIMITER) {
143
+ this.delimiter = delimiter;
144
+ }
145
+ /**
146
+ * Serialize message to buffer
147
+ */
148
+ serialize(message) {
149
+ try {
150
+ const json = JSON.stringify(message);
151
+ const text = json + this.delimiter;
152
+ return Buffer.from(text, 'utf8');
153
+ }
154
+ catch (error) {
155
+ throw new Error(`Failed to serialize message: ${error}`);
156
+ }
157
+ }
158
+ }
159
+ /**
160
+ * Message deserializer using MessageBuffer
161
+ */
162
+ export class MessageDeserializer extends MessageBuffer {
163
+ constructor(delimiter = MESSAGE_DELIMITER, maxSize = MAX_MESSAGE_SIZE) {
164
+ super(delimiter, maxSize);
165
+ }
166
+ }
167
+ /**
168
+ * Complete message protocol handler
169
+ */
170
+ export class MessageProtocol {
171
+ serializer;
172
+ deserializer;
173
+ constructor(delimiter = MESSAGE_DELIMITER, maxSize = MAX_MESSAGE_SIZE) {
174
+ this.serializer = new MessageSerializer(delimiter);
175
+ this.deserializer = new MessageDeserializer(delimiter, maxSize);
176
+ }
177
+ /**
178
+ * Encode a message to buffer
179
+ */
180
+ encode(message) {
181
+ return this.serializer.serialize(message);
182
+ }
183
+ /**
184
+ * Decode data and extract messages
185
+ */
186
+ decode(data) {
187
+ return this.deserializer.push(data);
188
+ }
189
+ /**
190
+ * Get current buffer size
191
+ */
192
+ getBufferSize() {
193
+ return this.deserializer.getBufferSize();
194
+ }
195
+ /**
196
+ * Clear the decode buffer
197
+ */
198
+ clearBuffer() {
199
+ this.deserializer.clear();
200
+ }
201
+ /**
202
+ * Dispose resources
203
+ */
204
+ dispose() {
205
+ this.deserializer.dispose();
206
+ }
207
+ /**
208
+ * Check if disposed
209
+ */
210
+ isDisposed() {
211
+ return this.deserializer.isDisposed();
212
+ }
213
+ /**
214
+ * Get resource stats
215
+ */
216
+ getResourceStats() {
217
+ return {
218
+ bufferSize: this.getBufferSize(),
219
+ isDisposed: this.isDisposed(),
220
+ };
221
+ }
222
+ }
223
+ /**
224
+ * Create a message protocol instance
225
+ */
226
+ export function createMessageProtocol(delimiter = MESSAGE_DELIMITER, maxSize = MAX_MESSAGE_SIZE) {
227
+ return new MessageProtocol(delimiter, maxSize);
228
+ }
229
+ /**
230
+ * Utility function to validate message size
231
+ */
232
+ export function validateMessageSize(message, maxSize = MAX_MESSAGE_SIZE) {
233
+ try {
234
+ const json = JSON.stringify(message);
235
+ return json.length <= maxSize;
236
+ }
237
+ catch {
238
+ return false;
239
+ }
240
+ }
241
+ /**
242
+ * Utility function to estimate message size
243
+ */
244
+ export function estimateMessageSize(message) {
245
+ try {
246
+ return JSON.stringify(message).length;
247
+ }
248
+ catch {
249
+ return 0;
250
+ }
251
+ }
252
+ //# sourceMappingURL=message-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-protocol.js","sourceRoot":"","sources":["../../../src/daemon/message-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Named Pipe Client Implementation
3
+ *
4
+ * Concrete implementation of IPC client using Named Pipes.
5
+ * Supports Windows systems.
6
+ */
7
+ import { IPCClientBase } from './ipc-client-base.js';
8
+ import type { IPCMessage, IPCClientConfig } from '../shared/ipc.js';
9
+ /**
10
+ * Named Pipe Client
11
+ */
12
+ export declare class NamedPipeClient extends IPCClientBase {
13
+ private socket;
14
+ private readonly pipePath;
15
+ private readonly protocol;
16
+ private connectionTimeout;
17
+ private eventListeners;
18
+ constructor(config?: IPCClientConfig);
19
+ /**
20
+ * Connect to the Named Pipe server
21
+ */
22
+ protected connectToServer(): Promise<void>;
23
+ /**
24
+ * Disconnect from the Named Pipe server
25
+ */
26
+ protected disconnectFromServer(): Promise<void>;
27
+ /**
28
+ * Write message to the socket
29
+ */
30
+ protected writeMessage(message: IPCMessage): Promise<void>;
31
+ /**
32
+ * Get the pipe path
33
+ */
34
+ getPipePath(): string;
35
+ /**
36
+ * Check if client is currently connected
37
+ */
38
+ isSocketConnected(): boolean;
39
+ /**
40
+ * Set up socket event handlers
41
+ */
42
+ private setupSocketHandlers;
43
+ /**
44
+ * Clean up event listeners
45
+ */
46
+ private cleanupEventListeners;
47
+ /**
48
+ * Override dispose to clean up client-specific resources
49
+ */
50
+ protected disposeCore(): Promise<void>;
51
+ /**
52
+ * Get client-specific resource stats
53
+ */
54
+ getClientStats(): {
55
+ pipePath: string;
56
+ isSocketConnected: boolean;
57
+ hasConnectionTimeout: boolean;
58
+ trackedEventListeners: number;
59
+ } & ReturnType<typeof this.getResourceStats>;
60
+ }
61
+ //# sourceMappingURL=named-pipe-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-pipe-client.d.ts","sourceRoot":"","sources":["../../../src/daemon/named-pipe-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGpE;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,cAAc,CAGP;gBAEH,MAAM,GAAE,eAA8B;IASlD;;OAEG;cACa,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAsChD;;OAEG;cACa,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CrD;;OAEG;cACa,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhE;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAQ5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuD3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;cACa,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5C;;OAEG;IACH,cAAc,IAAI;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,oBAAoB,EAAE,OAAO,CAAC;QAC9B,qBAAqB,EAAE,MAAM,CAAC;KAC/B,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC;CAS7C"}
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Named Pipe Client Implementation
3
+ *
4
+ * Concrete implementation of IPC client using Named Pipes.
5
+ * Supports Windows systems.
6
+ */
7
+ import * as net from 'net';
8
+ import { setTimeout, clearTimeout } from 'timers';
9
+ import { IPCClientBase } from './ipc-client-base.js';
10
+ import { MessageProtocol } from './message-protocol.js';
11
+ /**
12
+ * Named Pipe Client
13
+ */
14
+ export class NamedPipeClient extends IPCClientBase {
15
+ socket = null;
16
+ pipePath;
17
+ protocol;
18
+ connectionTimeout = null;
19
+ eventListeners = new Set();
20
+ constructor(config = { path: '' }) {
21
+ super(config);
22
+ // Determine pipe path
23
+ this.pipePath =
24
+ config.namedPipePath || config.path || '\\\\.\\pipe\\masuidrive-procman';
25
+ this.protocol = new MessageProtocol();
26
+ }
27
+ /**
28
+ * Connect to the Named Pipe server
29
+ */
30
+ async connectToServer() {
31
+ // Create socket
32
+ this.socket = new net.Socket();
33
+ // Set up socket event handlers
34
+ this.setupSocketHandlers();
35
+ // Connect to server
36
+ return new Promise((resolve, reject) => {
37
+ this.connectionTimeout = this.setTimeout(() => {
38
+ this.socket?.destroy();
39
+ reject(new Error(`Connection timeout after ${this.config.timeout}ms`));
40
+ }, this.config.timeout);
41
+ const errorHandler = (error) => {
42
+ if (this.connectionTimeout) {
43
+ this.connectionTimeout.dispose();
44
+ this.connectionTimeout = null;
45
+ }
46
+ reject(error);
47
+ };
48
+ const connectHandler = () => {
49
+ if (this.connectionTimeout) {
50
+ this.connectionTimeout.dispose();
51
+ this.connectionTimeout = null;
52
+ }
53
+ // Remove the temporary error handler
54
+ this.socket?.removeListener('error', errorHandler);
55
+ resolve();
56
+ };
57
+ this.socket.once('connect', connectHandler);
58
+ this.socket.once('error', errorHandler);
59
+ this.socket.connect(this.pipePath);
60
+ });
61
+ }
62
+ /**
63
+ * Disconnect from the Named Pipe server
64
+ */
65
+ async disconnectFromServer() {
66
+ if (!this.socket) {
67
+ return;
68
+ }
69
+ return new Promise((resolve) => {
70
+ if (!this.socket) {
71
+ resolve();
72
+ return;
73
+ }
74
+ // Clean up connection timeout if still active
75
+ if (this.connectionTimeout) {
76
+ this.connectionTimeout.dispose();
77
+ this.connectionTimeout = null;
78
+ }
79
+ // Remove tracked event listeners
80
+ this.cleanupEventListeners();
81
+ // Set a timeout for graceful close
82
+ const timeout = setTimeout(() => {
83
+ if (this.socket && !this.socket.destroyed) {
84
+ this.socket.destroy();
85
+ }
86
+ this.socket = null;
87
+ resolve();
88
+ }, 1000); // 1 second timeout
89
+ this.socket.once('close', () => {
90
+ clearTimeout(timeout);
91
+ this.socket = null;
92
+ resolve();
93
+ });
94
+ // Try graceful close first
95
+ if (!this.socket.destroyed) {
96
+ this.socket.end();
97
+ }
98
+ });
99
+ }
100
+ /**
101
+ * Write message to the socket
102
+ */
103
+ async writeMessage(message) {
104
+ if (!this.socket || this.socket.destroyed) {
105
+ throw new Error('Socket is not connected');
106
+ }
107
+ const buffer = this.protocol.encode(message);
108
+ return new Promise((resolve, reject) => {
109
+ this.socket.write(buffer, (error) => {
110
+ if (error) {
111
+ reject(error);
112
+ }
113
+ else {
114
+ resolve();
115
+ }
116
+ });
117
+ });
118
+ }
119
+ /**
120
+ * Get the pipe path
121
+ */
122
+ getPipePath() {
123
+ return this.pipePath;
124
+ }
125
+ /**
126
+ * Check if client is currently connected
127
+ */
128
+ isSocketConnected() {
129
+ return !!(this.socket &&
130
+ !this.socket.destroyed &&
131
+ this.socket.readyState === 'open');
132
+ }
133
+ /**
134
+ * Set up socket event handlers
135
+ */
136
+ setupSocketHandlers() {
137
+ if (!this.socket) {
138
+ return;
139
+ }
140
+ const dataHandler = (data) => {
141
+ try {
142
+ this.handleData(data);
143
+ }
144
+ catch (error) {
145
+ this.emit('error', error instanceof Error ? error : new Error(String(error)));
146
+ }
147
+ };
148
+ const errorHandler = (error) => {
149
+ this.handleConnectionError(error);
150
+ };
151
+ const closeHandler = (hadError) => {
152
+ // Only treat as error if it was an unexpected close
153
+ if (hadError && this.isConnected()) {
154
+ this.handleConnectionError(new Error('Socket connection closed unexpectedly'));
155
+ }
156
+ else {
157
+ // Normal close, just update state
158
+ this.setConnectionStatus('disconnected');
159
+ }
160
+ };
161
+ const endHandler = () => {
162
+ // Normal end, just update state
163
+ this.setConnectionStatus('disconnected');
164
+ };
165
+ const connectHandler = () => {
166
+ this.emit('socketConnected');
167
+ };
168
+ // Track event listeners for cleanup
169
+ this.eventListeners.add({ event: 'data', listener: dataHandler });
170
+ this.eventListeners.add({ event: 'error', listener: errorHandler });
171
+ this.eventListeners.add({ event: 'close', listener: closeHandler });
172
+ this.eventListeners.add({ event: 'end', listener: endHandler });
173
+ this.eventListeners.add({ event: 'connect', listener: connectHandler });
174
+ this.socket.on('data', dataHandler);
175
+ this.socket.on('error', errorHandler);
176
+ this.socket.on('close', closeHandler);
177
+ this.socket.on('end', endHandler);
178
+ this.socket.on('connect', connectHandler);
179
+ }
180
+ /**
181
+ * Clean up event listeners
182
+ */
183
+ cleanupEventListeners() {
184
+ if (!this.socket) {
185
+ return;
186
+ }
187
+ // Remove all tracked event listeners
188
+ for (const { event, listener } of this.eventListeners) {
189
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
190
+ this.socket.removeListener(event, listener);
191
+ }
192
+ this.eventListeners.clear();
193
+ }
194
+ /**
195
+ * Override dispose to clean up client-specific resources
196
+ */
197
+ async disposeCore() {
198
+ // Clean up connection timeout
199
+ if (this.connectionTimeout) {
200
+ await this.connectionTimeout.dispose();
201
+ this.connectionTimeout = null;
202
+ }
203
+ // Clean up event listeners
204
+ this.cleanupEventListeners();
205
+ // Call parent dispose
206
+ await super.disposeCore();
207
+ }
208
+ /**
209
+ * Get client-specific resource stats
210
+ */
211
+ getClientStats() {
212
+ return {
213
+ ...this.getResourceStats(),
214
+ pipePath: this.pipePath,
215
+ isSocketConnected: this.isSocketConnected(),
216
+ hasConnectionTimeout: !!this.connectionTimeout,
217
+ trackedEventListeners: this.eventListeners.size,
218
+ };
219
+ }
220
+ }
221
+ //# sourceMappingURL=named-pipe-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-pipe-client.js","sourceRoot":"","sources":["../../../src/daemon/named-pipe-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Named Pipe Server Implementation
3
+ *
4
+ * Concrete implementation of IPC server using Named Pipes.
5
+ * Supports Windows systems.
6
+ */
7
+ import { IPCServerBase } from './ipc-server-base.js';
8
+ import type { IPCServerConfig } from '../shared/ipc.js';
9
+ /**
10
+ * Named Pipe Server
11
+ */
12
+ export declare class NamedPipeServer extends IPCServerBase {
13
+ private server;
14
+ private readonly pipePath;
15
+ constructor(config?: IPCServerConfig);
16
+ /**
17
+ * Start the Named Pipe server
18
+ */
19
+ protected startServer(): Promise<void>;
20
+ /**
21
+ * Stop the Named Pipe server
22
+ */
23
+ protected stopServer(): Promise<void>;
24
+ /**
25
+ * Get the pipe path
26
+ */
27
+ getPipePath(): string;
28
+ /**
29
+ * Set up server event handlers
30
+ */
31
+ private setupServerHandlers;
32
+ /**
33
+ * Get server-specific resource stats
34
+ */
35
+ getServerStats(): {
36
+ pipePath: string;
37
+ serverListening: boolean;
38
+ } & ReturnType<typeof this.getResourceStats>;
39
+ }
40
+ //# sourceMappingURL=named-pipe-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named-pipe-server.d.ts","sourceRoot":"","sources":["../../../src/daemon/named-pipe-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYxD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,aAAa;IAChD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,MAAM,GAAE,eAA8B;IAQlD;;OAEG;cACa,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB5C;;OAEG;cACa,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3C;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,cAAc,IAAI;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,OAAO,CAAC;KAC1B,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC;CAO7C"}