@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,153 @@
1
+ /**
2
+ * IPC Client Base Implementation
3
+ *
4
+ * Abstract base class for IPC client implementations.
5
+ * Provides common functionality for both Unix Domain Socket and Named Pipe clients.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { setTimeout } from 'timers';
9
+ import { SimpleDisposableBase, SimpleTimeout, SimpleInterval } from './simple-resource-manager.js';
10
+ import type { IPCMessage, IPCResponse, IPCLogStreamMessage, IPCClientConfig, IPCConnectionStatus, CommandType, IPCClientEvents, IPCCommandPayloadMap } from '../shared/ipc.js';
11
+ /**
12
+ * Pending request information
13
+ */
14
+ interface PendingRequest {
15
+ id: string;
16
+ resolve: (response: IPCResponse) => void;
17
+ reject: (error: Error) => void;
18
+ timeout: ReturnType<typeof setTimeout>;
19
+ timestamp: number;
20
+ }
21
+ /**
22
+ * Abstract base class for IPC clients
23
+ */
24
+ export declare abstract class IPCClientBase extends SimpleDisposableBase {
25
+ protected config: Required<IPCClientConfig>;
26
+ protected connectionStatus: IPCConnectionStatus;
27
+ protected clientInstance: EventEmitter | null;
28
+ protected pendingRequests: Map<string, PendingRequest>;
29
+ protected reconnectTimer: SimpleTimeout | null;
30
+ protected heartbeatTimer: SimpleInterval | null;
31
+ protected lastActivity: number;
32
+ protected lastPongReceived: number;
33
+ protected pendingPingId: string | null;
34
+ private eventEmitter;
35
+ constructor(config?: IPCClientConfig);
36
+ /**
37
+ * Connect to the IPC server
38
+ */
39
+ connect(): Promise<void>;
40
+ /**
41
+ * Disconnect from the IPC server
42
+ */
43
+ disconnect(): Promise<void>;
44
+ /**
45
+ * Send a command and wait for response
46
+ */
47
+ sendCommand<T extends CommandType>(type: T, payload: IPCCommandPayloadMap[T], timeout?: number): Promise<IPCResponse>;
48
+ /**
49
+ * Send a message and wait for response
50
+ */
51
+ sendMessage(message: IPCMessage, timeout?: number): Promise<IPCResponse>;
52
+ /**
53
+ * Send a message without waiting for response
54
+ */
55
+ sendRawMessage(message: IPCMessage): Promise<void>;
56
+ /**
57
+ * Get current connection status
58
+ */
59
+ getConnectionStatus(): IPCConnectionStatus;
60
+ /**
61
+ * Check if client is connected
62
+ */
63
+ isConnected(): boolean;
64
+ /**
65
+ * Get number of pending requests
66
+ */
67
+ getPendingRequestCount(): number;
68
+ /**
69
+ * Handle incoming data from server
70
+ */
71
+ protected handleData(data: Buffer): void;
72
+ /**
73
+ * Parse multiple JSON messages from buffer
74
+ * Addresses the PoC issue with consecutive message parsing
75
+ */
76
+ protected parseMessages(data: Buffer): unknown[];
77
+ /**
78
+ * Handle concatenated JSON objects in a single line
79
+ * Uses simplified regex approach consistent with message-protocol.ts
80
+ */
81
+ private handleConcatenatedJSON;
82
+ /**
83
+ * Process a single parsed message
84
+ */
85
+ protected processMessage(messageData: unknown): void;
86
+ /**
87
+ * Handle response message
88
+ */
89
+ protected handleResponse(message: IPCResponse): void;
90
+ /**
91
+ * Handle log stream message
92
+ */
93
+ protected handleLogStreamMessage(message: IPCLogStreamMessage): void;
94
+ /**
95
+ * Handle connection error
96
+ */
97
+ protected handleConnectionError(error: Error): void;
98
+ /**
99
+ * Set connection status and emit event
100
+ */
101
+ protected setConnectionStatus(status: IPCConnectionStatus): void;
102
+ /**
103
+ * Schedule reconnection attempt
104
+ */
105
+ protected scheduleReconnect(): void;
106
+ /**
107
+ * Clear reconnect timer
108
+ */
109
+ protected clearReconnectTimer(): Promise<void>;
110
+ /**
111
+ * Start heartbeat mechanism
112
+ */
113
+ protected startHeartbeat(): void;
114
+ /**
115
+ * Clear heartbeat timer
116
+ */
117
+ protected clearHeartbeatTimer(): Promise<void>;
118
+ /**
119
+ * Implement disposal core for SimpleDisposableBase
120
+ */
121
+ protected disposeCore(): void;
122
+ /**
123
+ * Get current resource usage statistics
124
+ */
125
+ getResourceStats(): {
126
+ pendingRequests: number;
127
+ timeouts: number;
128
+ intervals: number;
129
+ eventListeners: number;
130
+ totalResources: number;
131
+ };
132
+ /**
133
+ * TypedEventEmitter implementation methods
134
+ */
135
+ on<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
136
+ once<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
137
+ emit<K extends keyof IPCClientEvents>(event: K, ...args: Parameters<IPCClientEvents[K]>): boolean;
138
+ removeListener<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
139
+ off<K extends keyof IPCClientEvents>(event: K, listener: IPCClientEvents[K]): this;
140
+ removeAllListeners<K extends keyof IPCClientEvents>(event?: K): this;
141
+ setMaxListeners(n: number): this;
142
+ getMaxListeners(): number;
143
+ listeners<K extends keyof IPCClientEvents>(event: K): ((...args: any[]) => void)[];
144
+ listenerCount<K extends keyof IPCClientEvents>(event: K): number;
145
+ /**
146
+ * Abstract methods to be implemented by subclasses
147
+ */
148
+ protected abstract connectToServer(): Promise<void>;
149
+ protected abstract disconnectFromServer(): Promise<void>;
150
+ protected abstract writeMessage(message: IPCMessage): Promise<void>;
151
+ }
152
+ export {};
153
+ //# sourceMappingURL=ipc-client-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc-client-base.d.ts","sourceRoot":"","sources":["../../../src/daemon/ipc-client-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,476 @@
1
+ /**
2
+ * IPC Client Base Implementation
3
+ *
4
+ * Abstract base class for IPC client implementations.
5
+ * Provides common functionality for both Unix Domain Socket and Named Pipe clients.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { setTimeout, clearTimeout } from 'timers';
9
+ import { SimpleDisposableBase, } from './simple-resource-manager.js';
10
+ import { generateMessageId, createIPCCommand, isIPCResponse, isIPCLogStreamMessage, } from '../shared/ipc.js';
11
+ /**
12
+ * Abstract base class for IPC clients
13
+ */
14
+ export class IPCClientBase extends SimpleDisposableBase {
15
+ config;
16
+ connectionStatus = 'disconnected';
17
+ clientInstance = null;
18
+ pendingRequests = new Map();
19
+ reconnectTimer = null;
20
+ heartbeatTimer = null;
21
+ lastActivity = 0;
22
+ lastPongReceived = 0;
23
+ pendingPingId = null;
24
+ eventEmitter = new EventEmitter();
25
+ constructor(config = { path: '' }) {
26
+ super();
27
+ // Set default configuration
28
+ this.config = {
29
+ path: config.path,
30
+ socketPath: config.socketPath || config.path || '',
31
+ namedPipePath: config.namedPipePath || config.path || '',
32
+ timeout: config.timeout || config.requestTimeout || 5000,
33
+ retryAttempts: config.retryAttempts || 3,
34
+ retryDelay: config.retryDelay || config.reconnectDelay || 1000,
35
+ reconnectDelay: config.reconnectDelay || config.retryDelay || 1000,
36
+ autoReconnect: config.autoReconnect ?? config.reconnect ?? true,
37
+ reconnect: config.reconnect ?? config.autoReconnect ?? true,
38
+ heartbeatInterval: config.heartbeatInterval || 30000,
39
+ maxReconnectAttempts: config.maxReconnectAttempts || 10,
40
+ requestTimeout: config.requestTimeout || config.timeout || 5000,
41
+ };
42
+ }
43
+ /**
44
+ * Connect to the IPC server
45
+ */
46
+ async connect() {
47
+ this.ensureNotDisposed();
48
+ if (this.connectionStatus === 'connected') {
49
+ return;
50
+ }
51
+ if (this.connectionStatus === 'connecting') {
52
+ throw new Error('Connection already in progress');
53
+ }
54
+ this.setConnectionStatus('connecting');
55
+ try {
56
+ await this.connectToServer();
57
+ this.setConnectionStatus('connected');
58
+ this.lastActivity = Date.now();
59
+ // Start heartbeat if enabled
60
+ if (this.config.heartbeatInterval > 0) {
61
+ this.startHeartbeat();
62
+ }
63
+ this.emit('connected');
64
+ }
65
+ catch (error) {
66
+ this.setConnectionStatus('error');
67
+ this.emit('error', error instanceof Error ? error : new Error(String(error)));
68
+ // Auto-reconnect if enabled
69
+ if (this.config.autoReconnect) {
70
+ this.scheduleReconnect();
71
+ }
72
+ throw error;
73
+ }
74
+ }
75
+ /**
76
+ * Disconnect from the IPC server
77
+ */
78
+ async disconnect() {
79
+ this.ensureNotDisposed();
80
+ if (this.connectionStatus === 'disconnected') {
81
+ return;
82
+ }
83
+ // Clear timers
84
+ await this.clearReconnectTimer();
85
+ await this.clearHeartbeatTimer();
86
+ // Reject all pending requests
87
+ const disconnectError = new Error('Client disconnected');
88
+ const pendingRequestsArray = Array.from(this.pendingRequests.values());
89
+ for (const request of pendingRequestsArray) {
90
+ if (request.timeout) {
91
+ clearTimeout(request.timeout);
92
+ }
93
+ request.reject(disconnectError);
94
+ }
95
+ this.pendingRequests.clear();
96
+ try {
97
+ await this.disconnectFromServer();
98
+ }
99
+ finally {
100
+ this.setConnectionStatus('disconnected');
101
+ this.emit('disconnected');
102
+ }
103
+ }
104
+ /**
105
+ * Send a command and wait for response
106
+ */
107
+ async sendCommand(type, payload, timeout) {
108
+ this.ensureNotDisposed();
109
+ if (this.connectionStatus !== 'connected') {
110
+ throw new Error('Client is not connected');
111
+ }
112
+ const message = createIPCCommand(type, payload);
113
+ return this.sendMessage(message, timeout);
114
+ }
115
+ /**
116
+ * Send a message and wait for response
117
+ */
118
+ async sendMessage(message, timeout) {
119
+ this.ensureNotDisposed();
120
+ return new Promise((resolve, reject) => {
121
+ const requestTimeout = timeout || this.config.timeout;
122
+ // Simple timeout (PM2 style)
123
+ const timeoutHandle = setTimeout(() => {
124
+ this.pendingRequests.delete(message.id);
125
+ reject(new Error(`Request timeout after ${requestTimeout}ms`));
126
+ }, requestTimeout);
127
+ // Store pending request
128
+ const pendingRequest = {
129
+ id: message.id,
130
+ resolve,
131
+ reject,
132
+ timeout: timeoutHandle,
133
+ timestamp: Date.now(),
134
+ };
135
+ this.pendingRequests.set(message.id, pendingRequest);
136
+ // Send the message
137
+ this.sendRawMessage(message).catch((error) => {
138
+ this.pendingRequests.delete(message.id);
139
+ clearTimeout(timeoutHandle);
140
+ reject(error instanceof Error ? error : new Error(String(error)));
141
+ });
142
+ });
143
+ }
144
+ /**
145
+ * Send a message without waiting for response
146
+ */
147
+ async sendRawMessage(message) {
148
+ this.ensureNotDisposed();
149
+ if (this.connectionStatus !== 'connected') {
150
+ throw new Error('Client is not connected');
151
+ }
152
+ try {
153
+ await this.writeMessage(message);
154
+ this.lastActivity = Date.now();
155
+ }
156
+ catch (error) {
157
+ const errorObj = error instanceof Error ? error : new Error(String(error));
158
+ this.emit('error', errorObj);
159
+ throw errorObj;
160
+ }
161
+ }
162
+ /**
163
+ * Get current connection status
164
+ */
165
+ getConnectionStatus() {
166
+ return this.connectionStatus;
167
+ }
168
+ /**
169
+ * Check if client is connected
170
+ */
171
+ isConnected() {
172
+ return this.connectionStatus === 'connected';
173
+ }
174
+ /**
175
+ * Get number of pending requests
176
+ */
177
+ getPendingRequestCount() {
178
+ return this.pendingRequests.size;
179
+ }
180
+ /**
181
+ * Handle incoming data from server
182
+ */
183
+ handleData(data) {
184
+ try {
185
+ this.lastActivity = Date.now();
186
+ // Parse messages from buffer (handle multiple messages)
187
+ const messages = this.parseMessages(data);
188
+ for (const messageData of messages) {
189
+ this.processMessage(messageData);
190
+ }
191
+ }
192
+ catch (error) {
193
+ this.emit('messageError', error instanceof Error ? error : new Error(String(error)));
194
+ }
195
+ }
196
+ /**
197
+ * Parse multiple JSON messages from buffer
198
+ * Addresses the PoC issue with consecutive message parsing
199
+ */
200
+ parseMessages(data) {
201
+ const messages = [];
202
+ const text = data.toString('utf8');
203
+ // Split by newlines and filter out empty lines
204
+ const lines = text.split('\n').filter((line) => line.trim());
205
+ for (const line of lines) {
206
+ try {
207
+ const parsed = JSON.parse(line.trim());
208
+ messages.push(parsed);
209
+ }
210
+ catch {
211
+ // Try to handle concatenated JSON objects without newlines
212
+ this.handleConcatenatedJSON(line.trim(), messages);
213
+ }
214
+ }
215
+ return messages;
216
+ }
217
+ /**
218
+ * Handle concatenated JSON objects in a single line
219
+ * Uses simplified regex approach consistent with message-protocol.ts
220
+ */
221
+ handleConcatenatedJSON(text, messages) {
222
+ // Simple approach: match JSON objects with balanced braces
223
+ const jsonRegex = /\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}/g;
224
+ const matches = text.match(jsonRegex) || [];
225
+ for (const match of matches) {
226
+ try {
227
+ const parsed = JSON.parse(match.trim());
228
+ messages.push(parsed);
229
+ }
230
+ catch (error) {
231
+ console.warn(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`, {
232
+ method: 'parseBuffer',
233
+ input: match.trim().slice(0, 100), // First 100 chars for debugging
234
+ });
235
+ }
236
+ }
237
+ }
238
+ /**
239
+ * Process a single parsed message
240
+ */
241
+ processMessage(messageData) {
242
+ try {
243
+ // Validate message structure
244
+ if (!isIPCResponse(messageData)) {
245
+ this.emit('invalidMessage', messageData);
246
+ return;
247
+ }
248
+ const message = messageData;
249
+ // Handle different message types
250
+ if (isIPCLogStreamMessage(message)) {
251
+ this.handleLogStreamMessage(message);
252
+ }
253
+ else {
254
+ this.handleResponse(message);
255
+ }
256
+ }
257
+ catch (error) {
258
+ this.emit('messageError', error instanceof Error ? error : new Error(String(error)));
259
+ }
260
+ }
261
+ /**
262
+ * Handle response message
263
+ */
264
+ handleResponse(message) {
265
+ // Handle pong response for heartbeat monitoring (internal message type)
266
+ if (
267
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
268
+ message.type === 'pong' &&
269
+ this.pendingPingId === message.requestId) {
270
+ this.lastPongReceived = Date.now();
271
+ this.pendingPingId = null;
272
+ return;
273
+ }
274
+ const pendingRequest = this.pendingRequests.get(message.requestId);
275
+ if (!pendingRequest) {
276
+ // No pending request found, might be an unsolicited message
277
+ this.emit('unsolicitedMessage', message);
278
+ return;
279
+ }
280
+ // Clear timeout and remove from pending requests
281
+ if (pendingRequest.timeout) {
282
+ clearTimeout(pendingRequest.timeout);
283
+ }
284
+ this.pendingRequests.delete(message.requestId);
285
+ // Resolve the promise
286
+ pendingRequest.resolve(message);
287
+ }
288
+ /**
289
+ * Handle log stream message
290
+ */
291
+ handleLogStreamMessage(message) {
292
+ this.emit('logStream', message);
293
+ this.emit('log-stream', message);
294
+ }
295
+ /**
296
+ * Handle connection error
297
+ */
298
+ handleConnectionError(error) {
299
+ this.setConnectionStatus('error');
300
+ this.emit('error', error);
301
+ // Auto-reconnect if enabled
302
+ if (this.config.autoReconnect && this.connectionStatus !== 'disconnected') {
303
+ this.scheduleReconnect();
304
+ }
305
+ }
306
+ /**
307
+ * Set connection status and emit event
308
+ */
309
+ setConnectionStatus(status) {
310
+ if (this.connectionStatus !== status) {
311
+ const oldStatus = this.connectionStatus;
312
+ this.connectionStatus = status;
313
+ this.emit('statusChange', status, oldStatus);
314
+ }
315
+ }
316
+ /**
317
+ * Schedule reconnection attempt
318
+ */
319
+ scheduleReconnect() {
320
+ if (this.reconnectTimer) {
321
+ return;
322
+ }
323
+ this.reconnectTimer = this.setTimeout(() => {
324
+ this.reconnectTimer = null;
325
+ if (this.config.autoReconnect && this.connectionStatus !== 'connected') {
326
+ this.connect().catch(() => {
327
+ // Reconnection failed, will try again
328
+ });
329
+ }
330
+ }, this.config.retryDelay);
331
+ }
332
+ /**
333
+ * Clear reconnect timer
334
+ */
335
+ async clearReconnectTimer() {
336
+ if (this.reconnectTimer) {
337
+ this.reconnectTimer.dispose();
338
+ this.reconnectTimer = null;
339
+ }
340
+ }
341
+ /**
342
+ * Start heartbeat mechanism
343
+ */
344
+ startHeartbeat() {
345
+ if (this.heartbeatTimer) {
346
+ return;
347
+ }
348
+ this.lastPongReceived = Date.now();
349
+ this.heartbeatTimer = this.setInterval(() => {
350
+ if (this.connectionStatus === 'connected') {
351
+ // Check if previous pong was received
352
+ const now = Date.now();
353
+ if (this.pendingPingId !== null &&
354
+ now - this.lastPongReceived > this.config.heartbeatInterval * 2) {
355
+ // No pong received within timeout - connection might be dead
356
+ this.handleConnectionError(new Error('Heartbeat timeout - no pong received'));
357
+ return;
358
+ }
359
+ // Send ping message for connection monitoring
360
+ const pingMessage = {
361
+ id: generateMessageId(),
362
+ type: 'ping',
363
+ payload: { timestamp: now },
364
+ timestamp: now,
365
+ };
366
+ this.pendingPingId = pingMessage.id;
367
+ this.sendRawMessage(pingMessage).catch((error) => {
368
+ this.handleConnectionError(error);
369
+ });
370
+ }
371
+ }, this.config.heartbeatInterval);
372
+ }
373
+ /**
374
+ * Clear heartbeat timer
375
+ */
376
+ async clearHeartbeatTimer() {
377
+ if (this.heartbeatTimer) {
378
+ this.heartbeatTimer.dispose();
379
+ this.heartbeatTimer = null;
380
+ }
381
+ this.pendingPingId = null;
382
+ this.lastPongReceived = 0;
383
+ }
384
+ /**
385
+ * Implement disposal core for SimpleDisposableBase
386
+ */
387
+ disposeCore() {
388
+ // Disconnect if still connected (non-blocking)
389
+ if (this.connectionStatus !== 'disconnected') {
390
+ try {
391
+ this.disconnect().catch(() => {
392
+ /* ignore */
393
+ });
394
+ }
395
+ catch {
396
+ // Ignore errors during disposal
397
+ }
398
+ }
399
+ // Clear any remaining timers
400
+ this.clearReconnectTimer().catch(() => {
401
+ /* ignore */
402
+ });
403
+ this.clearHeartbeatTimer().catch(() => {
404
+ /* ignore */
405
+ });
406
+ // Reject all pending requests
407
+ const disposalError = new Error('Client has been disposed');
408
+ const pendingRequestsArray = Array.from(this.pendingRequests.values());
409
+ for (const request of pendingRequestsArray) {
410
+ if (request.timeout) {
411
+ clearTimeout(request.timeout);
412
+ }
413
+ request.reject(disposalError);
414
+ }
415
+ this.pendingRequests.clear();
416
+ // Clear event listeners
417
+ this.eventEmitter.removeAllListeners();
418
+ }
419
+ /**
420
+ * Get current resource usage statistics
421
+ */
422
+ getResourceStats() {
423
+ const resourceCount = this.resources.getResourceCount();
424
+ return {
425
+ pendingRequests: this.pendingRequests.size,
426
+ timeouts: resourceCount.timeouts,
427
+ intervals: resourceCount.intervals,
428
+ eventListeners: resourceCount.listeners,
429
+ totalResources: resourceCount.timeouts +
430
+ resourceCount.intervals +
431
+ resourceCount.listeners,
432
+ };
433
+ }
434
+ /**
435
+ * TypedEventEmitter implementation methods
436
+ */
437
+ on(event, listener) {
438
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
439
+ this.eventEmitter.on(event, listener);
440
+ return this;
441
+ }
442
+ once(event, listener) {
443
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
444
+ this.eventEmitter.once(event, listener);
445
+ return this;
446
+ }
447
+ emit(event, ...args) {
448
+ return this.eventEmitter.emit(event, ...args);
449
+ }
450
+ removeListener(event, listener) {
451
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
452
+ this.eventEmitter.removeListener(event, listener);
453
+ return this;
454
+ }
455
+ off(event, listener) {
456
+ return this.removeListener(event, listener);
457
+ }
458
+ removeAllListeners(event) {
459
+ this.eventEmitter.removeAllListeners(event);
460
+ return this;
461
+ }
462
+ setMaxListeners(n) {
463
+ this.eventEmitter.setMaxListeners(n);
464
+ return this;
465
+ }
466
+ getMaxListeners() {
467
+ return this.eventEmitter.getMaxListeners();
468
+ }
469
+ listeners(event) {
470
+ return this.eventEmitter.listeners(event);
471
+ }
472
+ listenerCount(event) {
473
+ return this.eventEmitter.listenerCount(event);
474
+ }
475
+ }
476
+ //# sourceMappingURL=ipc-client-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc-client-base.js","sourceRoot":"","sources":["../../../src/daemon/ipc-client-base.ts"],"names":[],"mappings":"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"}