@smthrs/platform-node 0.0.0-stage → 1.0.0-rc.4

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 (442) hide show
  1. package/CHANGELOG.md +211 -0
  2. package/LICENSE +21 -0
  3. package/README.md +165 -2
  4. package/bin/darwin-arm64/smithers-jj-export +0 -0
  5. package/bin/darwin-x64/smithers-jj-export +0 -0
  6. package/bin/linux-arm64/smithers-jj-export +0 -0
  7. package/bin/linux-x64/smithers-jj-export +4 -0
  8. package/bin/win32-x64/smithers-jj-export.exe +0 -0
  9. package/dist/cjs/AtomicFileSystem.d.ts +147 -0
  10. package/dist/cjs/AtomicFileSystem.d.ts.map +1 -0
  11. package/dist/cjs/AtomicFileSystem.js +234 -0
  12. package/dist/cjs/AtomicFileSystem.js.map +7 -0
  13. package/dist/cjs/EgressHttpClient.d.ts +106 -0
  14. package/dist/cjs/EgressHttpClient.d.ts.map +1 -0
  15. package/dist/cjs/EgressHttpClient.js +202 -0
  16. package/dist/cjs/EgressHttpClient.js.map +7 -0
  17. package/dist/cjs/HostLiveness.d.ts +81 -0
  18. package/dist/cjs/HostLiveness.d.ts.map +1 -0
  19. package/dist/cjs/HostLiveness.js +49 -0
  20. package/dist/cjs/HostLiveness.js.map +7 -0
  21. package/dist/cjs/NodeHost.d.ts +145 -0
  22. package/dist/cjs/NodeHost.d.ts.map +1 -0
  23. package/dist/cjs/NodeHost.js +128 -0
  24. package/dist/cjs/NodeHost.js.map +7 -0
  25. package/dist/cjs/ProcessConfinement.d.ts +61 -0
  26. package/dist/cjs/ProcessConfinement.d.ts.map +1 -0
  27. package/dist/cjs/ProcessConfinement.js +292 -0
  28. package/dist/cjs/ProcessConfinement.js.map +7 -0
  29. package/dist/cjs/ProcessReaper.d.ts +457 -0
  30. package/dist/cjs/ProcessReaper.d.ts.map +1 -0
  31. package/dist/cjs/ProcessReaper.js +349 -0
  32. package/dist/cjs/ProcessReaper.js.map +7 -0
  33. package/dist/cjs/ProcessSandbox.d.ts +391 -0
  34. package/dist/cjs/ProcessSandbox.d.ts.map +1 -0
  35. package/dist/cjs/ProcessSandbox.js +774 -0
  36. package/dist/cjs/ProcessSandbox.js.map +7 -0
  37. package/dist/cjs/ScopedProcess.d.ts +66 -0
  38. package/dist/cjs/ScopedProcess.d.ts.map +1 -0
  39. package/dist/cjs/ScopedProcess.js +87 -0
  40. package/dist/cjs/ScopedProcess.js.map +7 -0
  41. package/dist/cjs/index.d.ts +38 -0
  42. package/dist/cjs/index.d.ts.map +1 -0
  43. package/dist/cjs/index.js +47 -0
  44. package/dist/cjs/index.js.map +7 -0
  45. package/dist/cjs/internal/AtomicFileSystemExecutable.d.ts +61 -0
  46. package/dist/cjs/internal/AtomicFileSystemExecutable.d.ts.map +1 -0
  47. package/dist/cjs/internal/AtomicFileSystemExecutable.js +250 -0
  48. package/dist/cjs/internal/AtomicFileSystemExecutable.js.map +7 -0
  49. package/dist/cjs/internal/AtomicFileSystemProtocol.d.ts +78 -0
  50. package/dist/cjs/internal/AtomicFileSystemProtocol.d.ts.map +1 -0
  51. package/dist/cjs/internal/AtomicFileSystemProtocol.js +382 -0
  52. package/dist/cjs/internal/AtomicFileSystemProtocol.js.map +7 -0
  53. package/dist/cjs/internal/AtomicFileSystemTransport.d.ts +44 -0
  54. package/dist/cjs/internal/AtomicFileSystemTransport.d.ts.map +1 -0
  55. package/dist/cjs/internal/AtomicFileSystemTransport.js +197 -0
  56. package/dist/cjs/internal/AtomicFileSystemTransport.js.map +7 -0
  57. package/dist/cjs/internal/AtomicHelperError.d.ts +35 -0
  58. package/dist/cjs/internal/AtomicHelperError.d.ts.map +1 -0
  59. package/dist/cjs/internal/AtomicHelperError.js +45 -0
  60. package/dist/cjs/internal/AtomicHelperError.js.map +7 -0
  61. package/dist/cjs/internal/AtomicHelperFault.d.ts +59 -0
  62. package/dist/cjs/internal/AtomicHelperFault.d.ts.map +1 -0
  63. package/dist/cjs/internal/AtomicHelperFault.js +66 -0
  64. package/dist/cjs/internal/AtomicHelperFault.js.map +7 -0
  65. package/dist/cjs/internal/PipedProcess.d.ts +35 -0
  66. package/dist/cjs/internal/PipedProcess.d.ts.map +1 -0
  67. package/dist/cjs/internal/PipedProcess.js +309 -0
  68. package/dist/cjs/internal/PipedProcess.js.map +7 -0
  69. package/dist/cjs/internal/ProcSnapshot.d.ts +85 -0
  70. package/dist/cjs/internal/ProcSnapshot.d.ts.map +1 -0
  71. package/dist/cjs/internal/ProcSnapshot.js +123 -0
  72. package/dist/cjs/internal/ProcSnapshot.js.map +7 -0
  73. package/dist/cjs/internal/ProcessCleanup.d.ts +64 -0
  74. package/dist/cjs/internal/ProcessCleanup.d.ts.map +1 -0
  75. package/dist/cjs/internal/ProcessCleanup.js +62 -0
  76. package/dist/cjs/internal/ProcessCleanup.js.map +7 -0
  77. package/dist/cjs/internal/ProcessCleanupPolicyError.d.ts +30 -0
  78. package/dist/cjs/internal/ProcessCleanupPolicyError.d.ts.map +1 -0
  79. package/dist/cjs/internal/ProcessCleanupPolicyError.js +33 -0
  80. package/dist/cjs/internal/ProcessCleanupPolicyError.js.map +7 -0
  81. package/dist/cjs/internal/ProcessFault.d.ts +63 -0
  82. package/dist/cjs/internal/ProcessFault.d.ts.map +1 -0
  83. package/dist/cjs/internal/ProcessFault.js +63 -0
  84. package/dist/cjs/internal/ProcessFault.js.map +7 -0
  85. package/dist/cjs/internal/ProcessSupervisor.d.ts +143 -0
  86. package/dist/cjs/internal/ProcessSupervisor.d.ts.map +1 -0
  87. package/dist/cjs/internal/ProcessSupervisor.js +685 -0
  88. package/dist/cjs/internal/ProcessSupervisor.js.map +7 -0
  89. package/dist/cjs/internal/SupervisorProgram.d.ts +9 -0
  90. package/dist/cjs/internal/SupervisorProgram.d.ts.map +1 -0
  91. package/dist/cjs/internal/SupervisorProgram.js +326 -0
  92. package/dist/cjs/internal/SupervisorProgram.js.map +7 -0
  93. package/dist/cjs/internal/WindowsProcessJob.d.ts +39 -0
  94. package/dist/cjs/internal/WindowsProcessJob.d.ts.map +1 -0
  95. package/dist/cjs/internal/WindowsProcessJob.js +113 -0
  96. package/dist/cjs/internal/WindowsProcessJob.js.map +7 -0
  97. package/dist/cjs/package.json +1 -0
  98. package/dist/esm/AtomicFileSystem.d.ts +147 -0
  99. package/dist/esm/AtomicFileSystem.d.ts.map +1 -0
  100. package/dist/esm/AtomicFileSystem.js +290 -0
  101. package/dist/esm/AtomicFileSystem.js.map +1 -0
  102. package/dist/esm/EgressHttpClient.d.ts +106 -0
  103. package/dist/esm/EgressHttpClient.d.ts.map +1 -0
  104. package/dist/esm/EgressHttpClient.js +259 -0
  105. package/dist/esm/EgressHttpClient.js.map +1 -0
  106. package/dist/esm/HostLiveness.d.ts +81 -0
  107. package/dist/esm/HostLiveness.d.ts.map +1 -0
  108. package/dist/esm/HostLiveness.js +68 -0
  109. package/dist/esm/HostLiveness.js.map +1 -0
  110. package/dist/esm/NodeHost.d.ts +145 -0
  111. package/dist/esm/NodeHost.d.ts.map +1 -0
  112. package/dist/esm/NodeHost.js +162 -0
  113. package/dist/esm/NodeHost.js.map +1 -0
  114. package/dist/esm/ProcessConfinement.d.ts +61 -0
  115. package/dist/esm/ProcessConfinement.d.ts.map +1 -0
  116. package/dist/esm/ProcessConfinement.js +311 -0
  117. package/dist/esm/ProcessConfinement.js.map +1 -0
  118. package/dist/esm/ProcessReaper.d.ts +457 -0
  119. package/dist/esm/ProcessReaper.d.ts.map +1 -0
  120. package/dist/esm/ProcessReaper.js +711 -0
  121. package/dist/esm/ProcessReaper.js.map +1 -0
  122. package/dist/esm/ProcessSandbox.d.ts +391 -0
  123. package/dist/esm/ProcessSandbox.d.ts.map +1 -0
  124. package/dist/esm/ProcessSandbox.js +1043 -0
  125. package/dist/esm/ProcessSandbox.js.map +1 -0
  126. package/dist/esm/ScopedProcess.d.ts +66 -0
  127. package/dist/esm/ScopedProcess.d.ts.map +1 -0
  128. package/dist/esm/ScopedProcess.js +67 -0
  129. package/dist/esm/ScopedProcess.js.map +1 -0
  130. package/dist/esm/index.d.ts +38 -0
  131. package/dist/esm/index.d.ts.map +1 -0
  132. package/dist/esm/index.js +38 -0
  133. package/dist/esm/index.js.map +1 -0
  134. package/dist/esm/internal/AtomicFileSystemExecutable.d.ts +61 -0
  135. package/dist/esm/internal/AtomicFileSystemExecutable.d.ts.map +1 -0
  136. package/dist/esm/internal/AtomicFileSystemExecutable.js +350 -0
  137. package/dist/esm/internal/AtomicFileSystemExecutable.js.map +1 -0
  138. package/dist/esm/internal/AtomicFileSystemProtocol.d.ts +78 -0
  139. package/dist/esm/internal/AtomicFileSystemProtocol.d.ts.map +1 -0
  140. package/dist/esm/internal/AtomicFileSystemProtocol.js +412 -0
  141. package/dist/esm/internal/AtomicFileSystemProtocol.js.map +1 -0
  142. package/dist/esm/internal/AtomicFileSystemTransport.d.ts +44 -0
  143. package/dist/esm/internal/AtomicFileSystemTransport.d.ts.map +1 -0
  144. package/dist/esm/internal/AtomicFileSystemTransport.js +242 -0
  145. package/dist/esm/internal/AtomicFileSystemTransport.js.map +1 -0
  146. package/dist/esm/internal/AtomicHelperError.d.ts +35 -0
  147. package/dist/esm/internal/AtomicHelperError.d.ts.map +1 -0
  148. package/dist/esm/internal/AtomicHelperError.js +39 -0
  149. package/dist/esm/internal/AtomicHelperError.js.map +1 -0
  150. package/dist/esm/internal/AtomicHelperFault.d.ts +59 -0
  151. package/dist/esm/internal/AtomicHelperFault.d.ts.map +1 -0
  152. package/dist/esm/internal/AtomicHelperFault.js +66 -0
  153. package/dist/esm/internal/AtomicHelperFault.js.map +1 -0
  154. package/dist/esm/internal/PipedProcess.d.ts +35 -0
  155. package/dist/esm/internal/PipedProcess.d.ts.map +1 -0
  156. package/dist/esm/internal/PipedProcess.js +321 -0
  157. package/dist/esm/internal/PipedProcess.js.map +1 -0
  158. package/dist/esm/internal/ProcSnapshot.d.ts +85 -0
  159. package/dist/esm/internal/ProcSnapshot.d.ts.map +1 -0
  160. package/dist/esm/internal/ProcSnapshot.js +188 -0
  161. package/dist/esm/internal/ProcSnapshot.js.map +1 -0
  162. package/dist/esm/internal/ProcessCleanup.d.ts +64 -0
  163. package/dist/esm/internal/ProcessCleanup.d.ts.map +1 -0
  164. package/dist/esm/internal/ProcessCleanup.js +45 -0
  165. package/dist/esm/internal/ProcessCleanup.js.map +1 -0
  166. package/dist/esm/internal/ProcessCleanupPolicyError.d.ts +30 -0
  167. package/dist/esm/internal/ProcessCleanupPolicyError.d.ts.map +1 -0
  168. package/dist/esm/internal/ProcessCleanupPolicyError.js +25 -0
  169. package/dist/esm/internal/ProcessCleanupPolicyError.js.map +1 -0
  170. package/dist/esm/internal/ProcessFault.d.ts +63 -0
  171. package/dist/esm/internal/ProcessFault.d.ts.map +1 -0
  172. package/dist/esm/internal/ProcessFault.js +64 -0
  173. package/dist/esm/internal/ProcessFault.js.map +1 -0
  174. package/dist/esm/internal/ProcessSupervisor.d.ts +143 -0
  175. package/dist/esm/internal/ProcessSupervisor.d.ts.map +1 -0
  176. package/dist/esm/internal/ProcessSupervisor.js +689 -0
  177. package/dist/esm/internal/ProcessSupervisor.js.map +1 -0
  178. package/dist/esm/internal/SupervisorProgram.d.ts +9 -0
  179. package/dist/esm/internal/SupervisorProgram.d.ts.map +1 -0
  180. package/dist/esm/internal/SupervisorProgram.js +310 -0
  181. package/dist/esm/internal/SupervisorProgram.js.map +1 -0
  182. package/dist/esm/internal/WindowsProcessJob.d.ts +39 -0
  183. package/dist/esm/internal/WindowsProcessJob.d.ts.map +1 -0
  184. package/dist/esm/internal/WindowsProcessJob.js +115 -0
  185. package/dist/esm/internal/WindowsProcessJob.js.map +1 -0
  186. package/dist/vendor/adapters.json +1757 -0
  187. package/dist/vendor/chunk-2Y7WC4KU.js +109 -0
  188. package/dist/vendor/chunk-3GR5VZ2M.js +118 -0
  189. package/dist/vendor/chunk-42QKY6T6.js +40 -0
  190. package/dist/vendor/chunk-54RLBMTZ.js +61 -0
  191. package/dist/vendor/chunk-5ZMHBXIK.js +55 -0
  192. package/dist/vendor/chunk-6ME2W7TF.js +28 -0
  193. package/dist/vendor/chunk-AMQKOQNT.js +34 -0
  194. package/dist/vendor/chunk-B3FZ67QU.js +59 -0
  195. package/dist/vendor/chunk-BKTBUBQY.js +437 -0
  196. package/dist/vendor/chunk-DS7GF46S.js +34 -0
  197. package/dist/vendor/chunk-DVOAHXPG.js +104 -0
  198. package/dist/vendor/chunk-DWSHTSVX.js +229 -0
  199. package/dist/vendor/chunk-EGBNVEEW.js +14 -0
  200. package/dist/vendor/chunk-EZWY45HP.js +18 -0
  201. package/dist/vendor/chunk-FNZOJHSV.js +71 -0
  202. package/dist/vendor/chunk-GXCHI7BM.js +131 -0
  203. package/dist/vendor/chunk-IIJ52ZU6.js +20 -0
  204. package/dist/vendor/chunk-J7A4CZDO.js +92 -0
  205. package/dist/vendor/chunk-JG5TTWPT.js +85 -0
  206. package/dist/vendor/chunk-JJ24ARBQ.js +394 -0
  207. package/dist/vendor/chunk-KOZMM5PZ.js +426 -0
  208. package/dist/vendor/chunk-KUUXSID7.js +18 -0
  209. package/dist/vendor/chunk-LEUPYT3Q.js +36 -0
  210. package/dist/vendor/chunk-M32LDTW7.js +18 -0
  211. package/dist/vendor/chunk-M7CLUILA.js +0 -0
  212. package/dist/vendor/chunk-MBSKBQ5D.js +21 -0
  213. package/dist/vendor/chunk-MLKGABMK.js +9 -0
  214. package/dist/vendor/chunk-NBVRTDTV.js +129 -0
  215. package/dist/vendor/chunk-OXNGN5H7.js +81 -0
  216. package/dist/vendor/chunk-QPLDT6A6.js +564 -0
  217. package/dist/vendor/chunk-QYBKAIA6.js +18 -0
  218. package/dist/vendor/chunk-RO2R4MJH.js +62 -0
  219. package/dist/vendor/chunk-SIR62W3Y.js +398 -0
  220. package/dist/vendor/chunk-TFIKFFSC.js +26 -0
  221. package/dist/vendor/chunk-TXKLEBBL.js +143 -0
  222. package/dist/vendor/chunk-UFH5UUZK.js +48 -0
  223. package/dist/vendor/chunk-VANKHF46.js +96 -0
  224. package/dist/vendor/chunk-VZBDV3TV.js +18 -0
  225. package/dist/vendor/chunk-XDKNKFBW.js +22 -0
  226. package/dist/vendor/chunk-XH4U3JSV.js +249 -0
  227. package/dist/vendor/chunk-Y35ZAO5U.js +53 -0
  228. package/dist/vendor/chunk-ZJMRMY57.js +0 -0
  229. package/dist/vendor/cjs/node/NodeChildProcessSpawner.d.ts +7 -0
  230. package/dist/vendor/cjs/node/NodeChildProcessSpawner.js +1 -0
  231. package/dist/vendor/cjs/node/NodeClusterHttp.d.ts +63 -0
  232. package/dist/vendor/cjs/node/NodeClusterHttp.js +1 -0
  233. package/dist/vendor/cjs/node/NodeClusterSocket.d.ts +79 -0
  234. package/dist/vendor/cjs/node/NodeClusterSocket.js +1 -0
  235. package/dist/vendor/cjs/node/NodeCrypto.d.ts +10 -0
  236. package/dist/vendor/cjs/node/NodeCrypto.js +1 -0
  237. package/dist/vendor/cjs/node/NodeFileSystem.d.ts +10 -0
  238. package/dist/vendor/cjs/node/NodeFileSystem.js +1 -0
  239. package/dist/vendor/cjs/node/NodeHttpClient.d.ts +179 -0
  240. package/dist/vendor/cjs/node/NodeHttpClient.js +1 -0
  241. package/dist/vendor/cjs/node/NodeHttpIncomingMessage.d.ts +62 -0
  242. package/dist/vendor/cjs/node/NodeHttpIncomingMessage.js +1 -0
  243. package/dist/vendor/cjs/node/NodeHttpPlatform.d.ts +36 -0
  244. package/dist/vendor/cjs/node/NodeHttpPlatform.js +1 -0
  245. package/dist/vendor/cjs/node/NodeHttpServer.d.ts +120 -0
  246. package/dist/vendor/cjs/node/NodeHttpServer.js +1 -0
  247. package/dist/vendor/cjs/node/NodeHttpServerRequest.d.ts +29 -0
  248. package/dist/vendor/cjs/node/NodeHttpServerRequest.js +1 -0
  249. package/dist/vendor/cjs/node/NodeMultipart.d.ts +46 -0
  250. package/dist/vendor/cjs/node/NodeMultipart.js +1 -0
  251. package/dist/vendor/cjs/node/NodeMultipartParser.d.ts +97 -0
  252. package/dist/vendor/cjs/node/NodeMultipartParser.js +1 -0
  253. package/dist/vendor/cjs/node/NodePath.d.ts +27 -0
  254. package/dist/vendor/cjs/node/NodePath.js +1 -0
  255. package/dist/vendor/cjs/node/NodeRedis.d.ts +74 -0
  256. package/dist/vendor/cjs/node/NodeRedis.js +1 -0
  257. package/dist/vendor/cjs/node/NodeRuntime.d.ts +85 -0
  258. package/dist/vendor/cjs/node/NodeRuntime.js +1 -0
  259. package/dist/vendor/cjs/node/NodeServices.d.ts +34 -0
  260. package/dist/vendor/cjs/node/NodeServices.js +1 -0
  261. package/dist/vendor/cjs/node/NodeSink.d.ts +8 -0
  262. package/dist/vendor/cjs/node/NodeSink.js +1 -0
  263. package/dist/vendor/cjs/node/NodeSocket.d.ts +38 -0
  264. package/dist/vendor/cjs/node/NodeSocket.js +1 -0
  265. package/dist/vendor/cjs/node/NodeSocketServer.d.ts +8 -0
  266. package/dist/vendor/cjs/node/NodeSocketServer.js +1 -0
  267. package/dist/vendor/cjs/node/NodeStdio.d.ts +11 -0
  268. package/dist/vendor/cjs/node/NodeStdio.js +1 -0
  269. package/dist/vendor/cjs/node/NodeStream.d.ts +8 -0
  270. package/dist/vendor/cjs/node/NodeStream.js +1 -0
  271. package/dist/vendor/cjs/node/NodeTerminal.d.ts +21 -0
  272. package/dist/vendor/cjs/node/NodeTerminal.js +1 -0
  273. package/dist/vendor/cjs/node/NodeWorker.d.ts +22 -0
  274. package/dist/vendor/cjs/node/NodeWorker.js +1 -0
  275. package/dist/vendor/cjs/node/NodeWorkerRunner.d.ts +12 -0
  276. package/dist/vendor/cjs/node/NodeWorkerRunner.js +1 -0
  277. package/dist/vendor/cjs/node/Undici.d.ts +28 -0
  278. package/dist/vendor/cjs/node/Undici.js +1 -0
  279. package/dist/vendor/cjs/node/index.d.ts +100 -0
  280. package/dist/vendor/cjs/node/index.js +1 -0
  281. package/dist/vendor/cjs/node-shared/NodeChildProcessSpawner.d.ts +57 -0
  282. package/dist/vendor/cjs/node-shared/NodeChildProcessSpawner.js +1 -0
  283. package/dist/vendor/cjs/node-shared/NodeClusterSocket.d.ts +22 -0
  284. package/dist/vendor/cjs/node-shared/NodeClusterSocket.js +1 -0
  285. package/dist/vendor/cjs/node-shared/NodeCrypto.d.ts +27 -0
  286. package/dist/vendor/cjs/node-shared/NodeCrypto.js +1 -0
  287. package/dist/vendor/cjs/node-shared/NodeFileSystem.d.ts +11 -0
  288. package/dist/vendor/cjs/node-shared/NodeFileSystem.js +1 -0
  289. package/dist/vendor/cjs/node-shared/NodeHttpCompression.d.ts +36 -0
  290. package/dist/vendor/cjs/node-shared/NodeHttpCompression.js +1 -0
  291. package/dist/vendor/cjs/node-shared/NodePath.d.ts +27 -0
  292. package/dist/vendor/cjs/node-shared/NodePath.js +1 -0
  293. package/dist/vendor/cjs/node-shared/NodeRuntime.d.ts +47 -0
  294. package/dist/vendor/cjs/node-shared/NodeRuntime.js +1 -0
  295. package/dist/vendor/cjs/node-shared/NodeSink.d.ts +69 -0
  296. package/dist/vendor/cjs/node-shared/NodeSink.js +1 -0
  297. package/dist/vendor/cjs/node-shared/NodeSocket.d.ts +134 -0
  298. package/dist/vendor/cjs/node-shared/NodeSocket.js +1 -0
  299. package/dist/vendor/cjs/node-shared/NodeSocketServer.d.ts +80 -0
  300. package/dist/vendor/cjs/node-shared/NodeSocketServer.js +1 -0
  301. package/dist/vendor/cjs/node-shared/NodeStdio.d.ts +12 -0
  302. package/dist/vendor/cjs/node-shared/NodeStdio.js +1 -0
  303. package/dist/vendor/cjs/node-shared/NodeStream.d.ts +179 -0
  304. package/dist/vendor/cjs/node-shared/NodeStream.js +1 -0
  305. package/dist/vendor/cjs/node-shared/NodeTerminal.d.ts +22 -0
  306. package/dist/vendor/cjs/node-shared/NodeTerminal.js +1 -0
  307. package/dist/vendor/cjs/node-shared/index.d.ts +56 -0
  308. package/dist/vendor/cjs/node-shared/index.js +1 -0
  309. package/dist/vendor/cjs/node-shared/internal/nodeChildProcessSpawner.d.ts +4 -0
  310. package/dist/vendor/cjs/node-shared/internal/nodeChildProcessSpawner.js +1 -0
  311. package/dist/vendor/cjs/node-shared/internal/utils.d.ts +2 -0
  312. package/dist/vendor/cjs/node-shared/internal/utils.js +1 -0
  313. package/dist/vendor/cjs/package.json +1 -0
  314. package/dist/vendor/cjs/platform-node-shared.d.ts +56 -0
  315. package/dist/vendor/cjs/platform-node-shared.js +1 -0
  316. package/dist/vendor/cjs/platform-node.d.ts +100 -0
  317. package/dist/vendor/cjs/platform-node.js +1 -0
  318. package/dist/vendor/node/LICENSE +21 -0
  319. package/dist/vendor/node/NodeChildProcessSpawner.d.ts +7 -0
  320. package/dist/vendor/node/NodeChildProcessSpawner.js +14 -0
  321. package/dist/vendor/node/NodeClusterHttp.d.ts +63 -0
  322. package/dist/vendor/node/NodeClusterHttp.js +43 -0
  323. package/dist/vendor/node/NodeClusterSocket.d.ts +79 -0
  324. package/dist/vendor/node/NodeClusterSocket.js +30 -0
  325. package/dist/vendor/node/NodeCrypto.d.ts +10 -0
  326. package/dist/vendor/node/NodeCrypto.js +8 -0
  327. package/dist/vendor/node/NodeFileSystem.d.ts +10 -0
  328. package/dist/vendor/node/NodeFileSystem.js +9 -0
  329. package/dist/vendor/node/NodeHttpClient.d.ts +179 -0
  330. package/dist/vendor/node/NodeHttpClient.js +46 -0
  331. package/dist/vendor/node/NodeHttpIncomingMessage.d.ts +62 -0
  332. package/dist/vendor/node/NodeHttpIncomingMessage.js +10 -0
  333. package/dist/vendor/node/NodeHttpPlatform.d.ts +36 -0
  334. package/dist/vendor/node/NodeHttpPlatform.js +16 -0
  335. package/dist/vendor/node/NodeHttpServer.d.ts +120 -0
  336. package/dist/vendor/node/NodeHttpServer.js +46 -0
  337. package/dist/vendor/node/NodeHttpServerRequest.d.ts +29 -0
  338. package/dist/vendor/node/NodeHttpServerRequest.js +9 -0
  339. package/dist/vendor/node/NodeMultipart.d.ts +46 -0
  340. package/dist/vendor/node/NodeMultipart.js +15 -0
  341. package/dist/vendor/node/NodeMultipartParser.d.ts +97 -0
  342. package/dist/vendor/node/NodeMultipartParser.js +11 -0
  343. package/dist/vendor/node/NodePath.d.ts +27 -0
  344. package/dist/vendor/node/NodePath.js +12 -0
  345. package/dist/vendor/node/NodeRedis.d.ts +74 -0
  346. package/dist/vendor/node/NodeRedis.js +11 -0
  347. package/dist/vendor/node/NodeRuntime.d.ts +85 -0
  348. package/dist/vendor/node/NodeRuntime.js +8 -0
  349. package/dist/vendor/node/NodeServices.d.ts +34 -0
  350. package/dist/vendor/node/NodeServices.js +23 -0
  351. package/dist/vendor/node/NodeSink.d.ts +8 -0
  352. package/dist/vendor/node/NodeSink.js +12 -0
  353. package/dist/vendor/node/NodeSocket.d.ts +38 -0
  354. package/dist/vendor/node/NodeSocket.js +31 -0
  355. package/dist/vendor/node/NodeSocketServer.d.ts +8 -0
  356. package/dist/vendor/node/NodeSocketServer.js +21 -0
  357. package/dist/vendor/node/NodeStdio.d.ts +11 -0
  358. package/dist/vendor/node/NodeStdio.js +10 -0
  359. package/dist/vendor/node/NodeStream.d.ts +8 -0
  360. package/dist/vendor/node/NodeStream.js +27 -0
  361. package/dist/vendor/node/NodeTerminal.d.ts +21 -0
  362. package/dist/vendor/node/NodeTerminal.js +10 -0
  363. package/dist/vendor/node/NodeWorker.d.ts +22 -0
  364. package/dist/vendor/node/NodeWorker.js +9 -0
  365. package/dist/vendor/node/NodeWorkerRunner.d.ts +12 -0
  366. package/dist/vendor/node/NodeWorkerRunner.js +7 -0
  367. package/dist/vendor/node/Undici.d.ts +28 -0
  368. package/dist/vendor/node/Undici.js +9 -0
  369. package/dist/vendor/node/index.d.ts +100 -0
  370. package/dist/vendor/node/index.js +115 -0
  371. package/dist/vendor/node-shared/LICENSE +21 -0
  372. package/dist/vendor/node-shared/NodeChildProcessSpawner.d.ts +57 -0
  373. package/dist/vendor/node-shared/NodeChildProcessSpawner.js +13 -0
  374. package/dist/vendor/node-shared/NodeClusterSocket.d.ts +22 -0
  375. package/dist/vendor/node-shared/NodeClusterSocket.js +11 -0
  376. package/dist/vendor/node-shared/NodeCrypto.d.ts +27 -0
  377. package/dist/vendor/node-shared/NodeCrypto.js +9 -0
  378. package/dist/vendor/node-shared/NodeFileSystem.d.ts +11 -0
  379. package/dist/vendor/node-shared/NodeFileSystem.js +8 -0
  380. package/dist/vendor/node-shared/NodeHttpCompression.d.ts +36 -0
  381. package/dist/vendor/node-shared/NodeHttpCompression.js +13 -0
  382. package/dist/vendor/node-shared/NodePath.d.ts +27 -0
  383. package/dist/vendor/node-shared/NodePath.js +11 -0
  384. package/dist/vendor/node-shared/NodeRuntime.d.ts +47 -0
  385. package/dist/vendor/node-shared/NodeRuntime.js +7 -0
  386. package/dist/vendor/node-shared/NodeSink.d.ts +69 -0
  387. package/dist/vendor/node-shared/NodeSink.js +11 -0
  388. package/dist/vendor/node-shared/NodeSocket.d.ts +134 -0
  389. package/dist/vendor/node-shared/NodeSocket.js +23 -0
  390. package/dist/vendor/node-shared/NodeSocketServer.d.ts +80 -0
  391. package/dist/vendor/node-shared/NodeSocketServer.js +20 -0
  392. package/dist/vendor/node-shared/NodeStdio.d.ts +12 -0
  393. package/dist/vendor/node-shared/NodeStdio.js +9 -0
  394. package/dist/vendor/node-shared/NodeStream.d.ts +179 -0
  395. package/dist/vendor/node-shared/NodeStream.js +26 -0
  396. package/dist/vendor/node-shared/NodeTerminal.d.ts +22 -0
  397. package/dist/vendor/node-shared/NodeTerminal.js +9 -0
  398. package/dist/vendor/node-shared/index.d.ts +56 -0
  399. package/dist/vendor/node-shared/index.js +58 -0
  400. package/dist/vendor/node-shared/internal/nodeChildProcessSpawner.d.ts +4 -0
  401. package/dist/vendor/node-shared/internal/nodeChildProcessSpawner.js +7 -0
  402. package/dist/vendor/node-shared/internal/utils.d.ts +2 -0
  403. package/dist/vendor/node-shared/internal/utils.js +7 -0
  404. package/dist/vendor/platform-node-shared.d.ts +56 -0
  405. package/dist/vendor/platform-node-shared.js +58 -0
  406. package/dist/vendor/platform-node.d.ts +100 -0
  407. package/dist/vendor/platform-node.js +115 -0
  408. package/docs/README.md +129 -0
  409. package/docs/api.md +553 -0
  410. package/docs/concepts/descriptor-relative-filesystem.md +181 -0
  411. package/docs/concepts/host-bundle.md +125 -0
  412. package/docs/concepts/process-containment.md +190 -0
  413. package/docs/guides/answer-run-ownership.md +87 -0
  414. package/docs/guides/configure-the-filesystem-helper.md +152 -0
  415. package/docs/guides/contain-child-processes.md +139 -0
  416. package/docs/guides/match-files-with-glob.md +151 -0
  417. package/docs/installation.md +204 -0
  418. package/docs/quickstart.md +147 -0
  419. package/docs/troubleshooting.md +130 -0
  420. package/package.json +202 -3
  421. package/src/AtomicFileSystem.ts +415 -0
  422. package/src/EgressHttpClient.ts +327 -0
  423. package/src/HostLiveness.ts +103 -0
  424. package/src/NodeHost.ts +253 -0
  425. package/src/ProcessConfinement.ts +363 -0
  426. package/src/ProcessReaper.ts +951 -0
  427. package/src/ProcessSandbox.ts +1307 -0
  428. package/src/ScopedProcess.ts +124 -0
  429. package/src/index.ts +44 -0
  430. package/src/internal/AtomicFileSystemExecutable.ts +379 -0
  431. package/src/internal/AtomicFileSystemProtocol.ts +502 -0
  432. package/src/internal/AtomicFileSystemTransport.ts +272 -0
  433. package/src/internal/AtomicHelperError.ts +50 -0
  434. package/src/internal/AtomicHelperFault.ts +84 -0
  435. package/src/internal/PipedProcess.ts +357 -0
  436. package/src/internal/ProcSnapshot.ts +193 -0
  437. package/src/internal/ProcessCleanup.ts +99 -0
  438. package/src/internal/ProcessCleanupPolicyError.ts +30 -0
  439. package/src/internal/ProcessFault.ts +82 -0
  440. package/src/internal/ProcessSupervisor.ts +807 -0
  441. package/src/internal/SupervisorProgram.ts +309 -0
  442. package/src/internal/WindowsProcessJob.ts +114 -0
@@ -0,0 +1,685 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ProcessSupervisor_exports = {};
30
+ __export(ProcessSupervisor_exports, {
31
+ Control: () => Control,
32
+ bootstrapArguments: () => bootstrapArguments,
33
+ connectOwner: () => connectOwner,
34
+ failure: () => failure,
35
+ prepare: () => prepare,
36
+ targetPidOf: () => targetPidOf,
37
+ unverifiedCleanup: () => unverifiedCleanup
38
+ });
39
+ module.exports = __toCommonJS(ProcessSupervisor_exports);
40
+ var Channel = __toESM(require("effect/Channel"), 1);
41
+ var Clock = __toESM(require("effect/Clock"), 1);
42
+ var Effect = __toESM(require("effect/Effect"), 1);
43
+ var PlatformError = __toESM(require("effect/PlatformError"), 1);
44
+ var Sink = __toESM(require("effect/Sink"), 1);
45
+ var Stream = __toESM(require("effect/Stream"), 1);
46
+ var ChildProcess = __toESM(require("effect/unstable/process/ChildProcess"), 1);
47
+ var import_ChildProcessSpawner = require("effect/unstable/process/ChildProcessSpawner");
48
+ var import_node_crypto = require("node:crypto");
49
+ var import_node_fs = require("node:fs");
50
+ var import_node_net = require("node:net");
51
+ var import_node_os = require("node:os");
52
+ var import_node_path = require("node:path");
53
+ var Tls = __toESM(require("node:tls"), 1);
54
+ var import_PipedProcess = require("./PipedProcess.js");
55
+ var import_ProcessFault = require("./ProcessFault.js");
56
+ var import_SupervisorProgram = require("./SupervisorProgram.js");
57
+ var import_WindowsProcessJob = require("./WindowsProcessJob.js");
58
+ const startupMs = 5e3;
59
+ const deliveryMs = 500;
60
+ const exitAllowanceMs = 2500;
61
+ const verificationMs = 2500;
62
+ const targets = /* @__PURE__ */ new WeakMap();
63
+ const processClock = Clock.Clock.defaultValue();
64
+ const targetPidOf = (handle) => targets.get(handle)?.targetPid;
65
+ const nativeError = (cause) => {
66
+ if (cause instanceof Error) return cause;
67
+ const value = cause ?? {};
68
+ const text = (field) => typeof value[field] === "string" ? value[field] : void 0;
69
+ return new import_ProcessFault.NativeProcessError({
70
+ message: text("message") ?? "The process supervisor failed",
71
+ code: text("code"),
72
+ errno: typeof value.errno === "number" ? value.errno : void 0,
73
+ reason: text("reason"),
74
+ syscall: text("syscall"),
75
+ path: text("path"),
76
+ signal: text("signal")
77
+ });
78
+ };
79
+ const failure = (method, command, cause) => {
80
+ const error = nativeError(cause);
81
+ const tags = {
82
+ ENOENT: "NotFound",
83
+ EACCES: "PermissionDenied",
84
+ EEXIST: "AlreadyExists",
85
+ EISDIR: "BadResource",
86
+ ENOTDIR: "BadResource",
87
+ ELOOP: "BadResource",
88
+ EBUSY: "Busy"
89
+ };
90
+ return PlatformError.systemError({
91
+ _tag: tags[error.code ?? ""] ?? "Unknown",
92
+ module: "ChildProcess",
93
+ method,
94
+ pathOrDescriptor: command,
95
+ syscall: error.syscall,
96
+ description: error.message,
97
+ cause: error
98
+ });
99
+ };
100
+ const unverifiedCleanup = (control, cleanupRequired, vacant, observed) => [
101
+ `target exited: ${control.targetDone}`,
102
+ `cleanup receipt: ${control.cleanupFailed ? "failed" : !cleanupRequired ? "not required" : control.cleanupAcknowledged ? "acknowledged" : "missing"}`,
103
+ `group vacant: ${vacant}`,
104
+ observed === void 0 ? "group snapshot: unavailable" : `group members: ${observed.members.length === 0 ? "none" : observed.members.map((member) => `${member.pid} ${member.zombie ? "zombie" : "live"}`).join(", ")}; host group ${observed.ownGroup}`,
105
+ ...control.fault === void 0 ? [] : [`fault: ${String(control.fault?.message ?? control.fault)}`]
106
+ ].join("; ");
107
+ const promise = () => {
108
+ let resolve2;
109
+ let reject;
110
+ const promise2 = new Promise((yes, no) => {
111
+ resolve2 = yes;
112
+ reject = no;
113
+ });
114
+ void promise2.catch(() => {
115
+ });
116
+ return { promise: promise2, resolve: resolve2, reject };
117
+ };
118
+ const wait = (value, method, command) => Effect.tryPromise({ try: () => value, catch: (cause) => failure(method, command, cause) });
119
+ const bounded = (effect, millis, method, command) => effect.pipe(
120
+ Effect.timeoutOrElse({
121
+ duration: millis,
122
+ orElse: () => Effect.fail(
123
+ failure(method, command, (0, import_ProcessFault.processFault)("supervisor_timeout", `Process supervisor ${method} timed out`))
124
+ )
125
+ }),
126
+ Effect.provideService(Clock.Clock, processClock)
127
+ );
128
+ const bootstrapArguments = (runtime) => runtime.sea || runtime.main.startsWith("/$bunfs/") ? Effect.fail(
129
+ failure(
130
+ "spawn",
131
+ process.execPath,
132
+ (0, import_ProcessFault.processFault)(
133
+ "runtime_unsupported",
134
+ "Process supervision requires a Node or Bun runtime executable, not a compiled application"
135
+ )
136
+ )
137
+ ) : Effect.succeed(runtime.bun ? ["--no-env-file", "--config=/dev/null"] : []);
138
+ const channelEnvironment = "SMITHERS_PROCESS_CHANNEL";
139
+ const tlsOptions = { minVersion: "TLSv1.3", maxVersion: "TLSv1.3", ciphers: "TLS_AES_128_GCM_SHA256" };
140
+ const connectOwner = (path, environment) => {
141
+ const encoded = environment[channelEnvironment];
142
+ if (encoded === void 0) return (0, import_node_net.createConnection)(path);
143
+ const channel = JSON.parse(encoded);
144
+ return Tls.connect({
145
+ ...tlsOptions,
146
+ host: "127.0.0.1",
147
+ port: path.endsWith("/r") ? channel.requests : channel.status,
148
+ pskCallback: () => ({ identity: "smithers-owner", psk: Buffer.from(channel.key, "hex") })
149
+ });
150
+ };
151
+ class Control {
152
+ ready = promise();
153
+ started = promise();
154
+ exited = promise();
155
+ lost = promise();
156
+ ended = promise();
157
+ requestsReady = promise();
158
+ directory;
159
+ path;
160
+ requestPath;
161
+ server;
162
+ requestServer;
163
+ listening;
164
+ key;
165
+ connections = /* @__PURE__ */ new Set();
166
+ socket;
167
+ requestSocket;
168
+ targetDone = false;
169
+ ownerCreation;
170
+ targetPid;
171
+ /** The owner's group guardian: a member that is neither target nor owner. */
172
+ guardianPid;
173
+ ownerDone = false;
174
+ spawnFailed = false;
175
+ cleanupFailed = false;
176
+ cleanupAcknowledged = false;
177
+ activationSent = false;
178
+ closeSent = false;
179
+ fault;
180
+ onTargetExit = () => {
181
+ };
182
+ onCleanup = () => {
183
+ };
184
+ receivedReady = false;
185
+ receivedStarted = false;
186
+ withdrawn = false;
187
+ constructor(transport = "native") {
188
+ this.key = transport === "tls" || process.platform === "win32" ? (0, import_node_crypto.randomBytes)(32) : void 0;
189
+ this.directory = (0, import_node_fs.mkdtempSync)(this.key === void 0 ? "/tmp/sm-p-" : (0, import_node_path.join)((0, import_node_os.tmpdir)(), "sm-p-"));
190
+ this.path = `${this.directory}/s`;
191
+ this.requestPath = `${this.directory}/r`;
192
+ const servers = [];
193
+ try {
194
+ (0, import_node_fs.chmodSync)(this.directory, 448);
195
+ this.server = this.makeServer((socket) => this.accept(socket));
196
+ servers.push(this.server);
197
+ this.requestServer = this.makeServer((socket) => this.acceptRequests(socket));
198
+ servers.push(this.requestServer);
199
+ this.listening = Promise.all([
200
+ new Promise((resolve2, reject) => {
201
+ this.server.once("error", reject);
202
+ if (this.key === void 0) this.server.listen(this.path, resolve2);
203
+ else this.server.listen(0, "127.0.0.1", resolve2);
204
+ }),
205
+ new Promise((resolve2, reject) => {
206
+ this.requestServer.once("error", reject);
207
+ if (this.key === void 0) this.requestServer.listen(this.requestPath, resolve2);
208
+ else this.requestServer.listen(0, "127.0.0.1", resolve2);
209
+ })
210
+ ]).then(() => {
211
+ });
212
+ } catch (cause) {
213
+ for (const server of servers) server.close();
214
+ (0, import_node_fs.rmSync)(this.directory, { recursive: true, force: true });
215
+ throw cause;
216
+ }
217
+ }
218
+ makeServer(accept) {
219
+ if (this.key === void 0) return (0, import_node_net.createServer)(accept);
220
+ const server = Tls.createServer({
221
+ ...tlsOptions,
222
+ handshakeTimeout: startupMs,
223
+ pskCallback: (_socket, identity) => identity === "smithers-owner" ? this.key : null
224
+ }, accept);
225
+ server.on("connection", (socket) => {
226
+ this.connections.add(socket);
227
+ socket.once("close", () => this.connections.delete(socket));
228
+ });
229
+ server.on("tlsClientError", (_error, socket) => socket.destroy());
230
+ return server;
231
+ }
232
+ /** Only the trusted owner receives this environment; target configuration replaces it. */
233
+ environment() {
234
+ if (this.key === void 0) return {};
235
+ const status = this.server.address();
236
+ const requests = this.requestServer.address();
237
+ return {
238
+ [channelEnvironment]: JSON.stringify({
239
+ key: this.key.toString("hex"),
240
+ status: status.port,
241
+ requests: requests.port
242
+ })
243
+ };
244
+ }
245
+ /** The test peer uses the same authenticated transport as the isolated owner. */
246
+ connect(requests = false) {
247
+ return connectOwner(requests ? this.requestPath : this.path, this.environment());
248
+ }
249
+ /** Validate the stored READY after the raw spawn effect has returned its pid. */
250
+ withdraw(pid, actual) {
251
+ if (pid !== actual) throw (0, import_ProcessFault.processFault)("identity_mismatch", "Wrong supervisor identity");
252
+ this.server.close();
253
+ this.server.unref();
254
+ this.requestServer.close();
255
+ this.requestServer.unref();
256
+ (0, import_node_fs.rmSync)(this.path, { force: true });
257
+ (0, import_node_fs.rmSync)(this.requestPath, { force: true });
258
+ (0, import_node_fs.rmdirSync)(this.directory);
259
+ this.withdrawn = true;
260
+ }
261
+ /** Request EOF asks for cleanup; leave its independent status reader intact. */
262
+ disconnect() {
263
+ this.requestSocket?.destroy();
264
+ }
265
+ dispose() {
266
+ for (const socket of this.connections) socket.destroy();
267
+ this.disconnect();
268
+ this.socket?.destroy();
269
+ this.server.close();
270
+ this.requestServer.close();
271
+ if (!this.withdrawn) (0, import_node_fs.rmSync)(this.directory, { recursive: true, force: true });
272
+ }
273
+ rawEnded() {
274
+ this.ownerDone = true;
275
+ if (this.socket === void 0) this.closed();
276
+ }
277
+ write(message) {
278
+ return new Promise((resolve2, reject) => {
279
+ const socket = this.requestSocket;
280
+ if (socket === void 0 || socket.destroyed || !socket.writable) {
281
+ reject((0, import_ProcessFault.processFault)("control_channel_closed", "Private process control channel closed"));
282
+ return;
283
+ }
284
+ const data = `${JSON.stringify(message)}
285
+ `;
286
+ if (Buffer.byteLength(data) > 4 * 1024 * 1024) {
287
+ reject((0, import_ProcessFault.processFault)("configuration_too_large", "Process configuration exceeds the private frame limit"));
288
+ return;
289
+ }
290
+ socket.write(data, (error) => error ? reject(error) : resolve2());
291
+ });
292
+ }
293
+ closed() {
294
+ this.disconnect();
295
+ const cause = this.fault ?? (0, import_ProcessFault.processFault)("outcome_missing", "Process supervisor closed before reporting its outcome");
296
+ if (this.activationSent && !this.targetDone && !this.spawnFailed) this.lost.reject(cause);
297
+ this.ready.reject(cause);
298
+ this.requestsReady.reject(cause);
299
+ this.started.reject(cause);
300
+ this.exited.reject(cause);
301
+ this.ended.resolve();
302
+ }
303
+ acceptRequests(socket) {
304
+ if (this.requestSocket !== void 0) {
305
+ socket.destroy();
306
+ return;
307
+ }
308
+ this.requestSocket = socket;
309
+ socket.on("error", (cause) => {
310
+ this.fault = cause;
311
+ });
312
+ this.requestsReady.resolve();
313
+ }
314
+ accept(socket) {
315
+ if (this.socket !== void 0) {
316
+ socket.destroy();
317
+ return;
318
+ }
319
+ this.socket = socket;
320
+ let buffer = "";
321
+ socket.setEncoding("utf8");
322
+ socket.on("data", (data) => {
323
+ try {
324
+ buffer += data;
325
+ if (Buffer.byteLength(buffer) > 16 * 1024) {
326
+ throw (0, import_ProcessFault.processFault)("status_too_large", "Process status frame exceeds its limit");
327
+ }
328
+ for (; ; ) {
329
+ const end = buffer.indexOf("\n");
330
+ if (end < 0) break;
331
+ const line = buffer.slice(0, end);
332
+ buffer = buffer.slice(end + 1);
333
+ this.receive(JSON.parse(line));
334
+ }
335
+ } catch (cause) {
336
+ this.fault = cause;
337
+ socket.destroy();
338
+ }
339
+ });
340
+ socket.on("error", (cause) => {
341
+ this.fault = cause;
342
+ });
343
+ socket.once("close", () => this.closed());
344
+ }
345
+ receive(value) {
346
+ if (typeof value !== "object" || value === null) throw (0, import_ProcessFault.processFault)("status_invalid", "Invalid process status");
347
+ const message = value;
348
+ switch (message.type) {
349
+ case "ready":
350
+ if (this.receivedReady || message.version !== 1 || !Number.isSafeInteger(message.pid) || Number(message.pid) <= 1) {
351
+ throw (0, import_ProcessFault.processFault)("status_invalid", "Invalid process readiness");
352
+ }
353
+ this.receivedReady = true;
354
+ this.ownerCreation = message.created;
355
+ this.ready.resolve(Number(message.pid));
356
+ return;
357
+ case "spawned":
358
+ if (!this.activationSent || this.receivedStarted || !Number.isSafeInteger(message.pid) || Number(message.pid) <= 1 || message.guardian !== void 0 && (!Number.isSafeInteger(message.guardian) || Number(message.guardian) <= 1)) {
359
+ throw (0, import_ProcessFault.processFault)("status_invalid", "Invalid target startup");
360
+ }
361
+ this.receivedStarted = true;
362
+ this.targetPid = Number(message.pid);
363
+ if (message.guardian !== void 0) this.guardianPid = Number(message.guardian);
364
+ this.started.resolve();
365
+ return;
366
+ case "spawn_error":
367
+ if (!this.activationSent || this.receivedStarted) {
368
+ throw (0, import_ProcessFault.processFault)("status_invalid", "Invalid target spawn failure");
369
+ }
370
+ this.spawnFailed = true;
371
+ this.fault = message;
372
+ this.started.reject(message);
373
+ this.exited.reject(message);
374
+ return;
375
+ case "fault":
376
+ this.fault = message;
377
+ this.started.reject(message);
378
+ this.exited.reject(message);
379
+ return;
380
+ case "exit":
381
+ if (!this.receivedStarted || this.targetDone || !(Number.isInteger(message.code) && Number(message.code) >= 0 && message.signal === null || message.code === null && typeof message.signal === "string" && /^SIG[A-Z0-9]+$/.test(message.signal))) {
382
+ throw (0, import_ProcessFault.processFault)("status_invalid", "Invalid target exit status");
383
+ }
384
+ this.targetDone = true;
385
+ if (message.code === null) {
386
+ this.exited.reject({
387
+ message: `Process interrupted due to receipt of signal: '${message.signal}'`,
388
+ signal: message.signal
389
+ });
390
+ } else this.exited.resolve((0, import_ChildProcessSpawner.ExitCode)(Number(message.code)));
391
+ this.onTargetExit();
392
+ return;
393
+ case "cleanup_error":
394
+ this.cleanupFailed = true;
395
+ this.fault = message;
396
+ return;
397
+ case "cleanup":
398
+ this.cleanupAcknowledged = true;
399
+ this.onCleanup();
400
+ return;
401
+ default:
402
+ throw (0, import_ProcessFault.processFault)("status_unknown", "Unknown process status");
403
+ }
404
+ }
405
+ }
406
+ const prepare = (system, policy, transport = "native") => (command, spawn) => Effect.gen(function* () {
407
+ const initial = yield* policy(command.options);
408
+ const bun = process.versions.bun !== void 0;
409
+ const sea = bun ? false : (yield* Effect.tryPromise({
410
+ try: () => import("node:sea"),
411
+ catch: (cause) => failure("spawn", process.execPath, cause)
412
+ })).isSea();
413
+ const bootstrap = yield* bootstrapArguments({
414
+ bun,
415
+ sea,
416
+ main: globalThis.Bun?.main ?? ""
417
+ });
418
+ const windows = system.platform === "win32";
419
+ const grouped = !windows && (command.options.detached ?? true);
420
+ const jobExecutable = windows ? yield* Effect.try({
421
+ try: import_WindowsProcessJob.resolveJobExecutable,
422
+ catch: (cause) => failure("spawn", command.command, cause)
423
+ }) : void 0;
424
+ const control = yield* Effect.acquireRelease(
425
+ Effect.try({ try: () => new Control(transport), catch: (cause) => failure("spawn", command.command, cause) }),
426
+ (control2) => Effect.sync(() => control2.dispose())
427
+ );
428
+ yield* bounded(wait(control.listening, "spawn", command.command), startupMs, "spawn", command.command);
429
+ const raw = yield* spawn(ChildProcess.make(process.execPath, [
430
+ ...bootstrap,
431
+ "-e",
432
+ import_SupervisorProgram.source,
433
+ control.path,
434
+ grouped ? "group" : "direct"
435
+ ], {
436
+ ...command.options,
437
+ cwd: (0, import_node_path.parse)(process.execPath).root,
438
+ env: {
439
+ PATH: "/usr/bin:/bin",
440
+ HOME: "/",
441
+ XDG_CONFIG_HOME: "/",
442
+ BUN_RUNTIME_TRANSPILER_CACHE_PATH: "0",
443
+ ...control.environment(),
444
+ ...jobExecutable === void 0 ? {} : { SMITHERS_PROCESS_JOB_HELPER: jobExecutable }
445
+ },
446
+ extendEnv: false,
447
+ shell: false,
448
+ detached: grouped,
449
+ killSignal: "SIGTERM",
450
+ forceKillAfter: initial.graceMs
451
+ }));
452
+ yield* Effect.exit(raw.exitCode).pipe(Effect.andThen(Effect.sync(() => control.rawEnded())), Effect.forkScoped);
453
+ let job;
454
+ let settled = false;
455
+ let referenced = true;
456
+ let reref = Effect.void;
457
+ let selected = initial;
458
+ let requireCleanupReceipt = false;
459
+ const snapshot = () => system.snapshot(raw.pid);
460
+ const alone = () => {
461
+ if (!grouped) return control.targetDone;
462
+ const observed = snapshot();
463
+ if (observed === void 0 || observed.ownGroup === raw.pid) return false;
464
+ const running = observed.members.filter((member) => !member.zombie && member.pid !== control.guardianPid);
465
+ return running.length === 1 && running[0].pid === raw.pid;
466
+ };
467
+ control.onTargetExit = () => {
468
+ if (control.closeSent) return;
469
+ if (!alone()) return;
470
+ control.closeSent = true;
471
+ void control.write({ type: "stop", killSignal: "SIGKILL", fast: true }).catch(() => control.disconnect());
472
+ };
473
+ const finish = yield* Effect.cached(Effect.gen(function* () {
474
+ yield* bounded(Effect.exit(raw.exitCode), selected.graceMs + exitAllowanceMs, "kill", command.command).pipe(
475
+ Effect.catch(
476
+ (cause) => job === void 0 ? Effect.fail(cause) : Effect.gen(function* () {
477
+ job.stop();
478
+ yield* bounded(Effect.exit(raw.exitCode), exitAllowanceMs, "kill", command.command);
479
+ })
480
+ )
481
+ );
482
+ if (job !== void 0) {
483
+ yield* bounded(wait(job.settled.promise, "kill", command.command), 5500, "kill", command.command);
484
+ settled = true;
485
+ return;
486
+ }
487
+ yield* bounded(wait(control.ended.promise, "kill", command.command), deliveryMs, "kill", command.command).pipe(
488
+ Effect.ignore
489
+ );
490
+ const deadline = Date.now() + verificationMs;
491
+ for (; ; ) {
492
+ const vacant = grouped && system.vacant(raw.pid);
493
+ const observed = grouped && !vacant ? snapshot() : void 0;
494
+ settled = !control.cleanupFailed && (!requireCleanupReceipt || control.cleanupAcknowledged) && (grouped ? vacant || observed !== void 0 && observed.ownGroup !== raw.pid && observed.members.every((member) => member.zombie) : control.targetDone || control.spawnFailed || !control.activationSent);
495
+ if (settled) return;
496
+ if (Date.now() >= deadline) {
497
+ return yield* Effect.fail(
498
+ failure(
499
+ "kill",
500
+ command.command,
501
+ (0, import_ProcessFault.processFault)(
502
+ "cleanup_unverified",
503
+ `Process cleanup could not be verified; its ledger record is retained (${unverifiedCleanup(control, requireCleanupReceipt, vacant, observed)})`,
504
+ {
505
+ cause: {
506
+ fault: control.fault,
507
+ cleanupFailed: control.cleanupFailed,
508
+ cleanupRequired: requireCleanupReceipt,
509
+ cleanupAcknowledged: control.cleanupAcknowledged,
510
+ targetDone: control.targetDone,
511
+ groupVacant: vacant,
512
+ ownerObserved: observed !== void 0,
513
+ members: observed?.members
514
+ }
515
+ }
516
+ )
517
+ )
518
+ );
519
+ }
520
+ yield* Effect.sleep(10).pipe(Effect.provideService(Clock.Clock, processClock));
521
+ }
522
+ }));
523
+ const kill = (options2 = {}) => Effect.gen(function* () {
524
+ const requested = yield* policy(options2, command.options);
525
+ if (!referenced) {
526
+ job?.reference(true);
527
+ control.socket?.ref();
528
+ control.requestSocket?.ref();
529
+ yield* reref;
530
+ referenced = true;
531
+ }
532
+ if (!control.closeSent) {
533
+ control.closeSent = true;
534
+ selected = requested;
535
+ requireCleanupReceipt = grouped && control.activationSent && !control.spawnFailed && !control.targetDone;
536
+ yield* bounded(
537
+ wait(
538
+ control.write({
539
+ type: "stop",
540
+ explicit: true,
541
+ ...requested,
542
+ // A live target can move out of this group with setsid().
543
+ // Only an owner whose target was never activated can replace
544
+ // the requested signal; natural exit has its own fast path.
545
+ killSignal: !control.activationSent && alone() ? "SIGKILL" : requested.killSignal
546
+ }),
547
+ "kill",
548
+ command.command
549
+ ),
550
+ deliveryMs,
551
+ "kill",
552
+ command.command
553
+ ).pipe(Effect.catch(() => Effect.sync(() => control.disconnect())));
554
+ }
555
+ yield* finish;
556
+ }).pipe(Effect.uninterruptible);
557
+ yield* Effect.addFinalizer(
558
+ () => kill().pipe(
559
+ // A stuck owner keeps its ledger entry. Disable the underlying spawner's
560
+ // unconditional group-kill finalizer rather than signal a stale identity.
561
+ Effect.ensuring(
562
+ Effect.suspend(
563
+ () => settled ? Effect.void : Effect.andThen(
564
+ raw.unref,
565
+ Effect.sync(() => {
566
+ job?.stop();
567
+ job?.reference(false);
568
+ control.disconnect();
569
+ })
570
+ )
571
+ ).pipe(Effect.orDie)
572
+ ),
573
+ Effect.orDie
574
+ )
575
+ );
576
+ const ready = yield* bounded(
577
+ wait(control.ready.promise, "spawn", command.command),
578
+ startupMs,
579
+ "spawn",
580
+ command.command
581
+ );
582
+ yield* bounded(wait(control.requestsReady.promise, "spawn", command.command), startupMs, "spawn", command.command);
583
+ yield* Effect.try({
584
+ try: () => control.withdraw(ready, raw.pid),
585
+ catch: (cause) => failure("spawn", command.command, cause)
586
+ });
587
+ if (windows) {
588
+ job = yield* Effect.try({
589
+ try: () => new import_WindowsProcessJob.WindowsProcessJob(raw.pid, control.ownerCreation, jobExecutable),
590
+ catch: (cause) => failure("spawn", command.command, cause)
591
+ });
592
+ yield* bounded(wait(job.ready.promise, "spawn", command.command), startupMs, "spawn", command.command);
593
+ }
594
+ const acknowledgeCleanup = windows || transport === "tls";
595
+ if (acknowledgeCleanup) {
596
+ control.onCleanup = () => {
597
+ if (!control.ownerDone) {
598
+ void control.write({ type: "cleanup_ack" }).catch(() => control.disconnect());
599
+ }
600
+ };
601
+ }
602
+ const options = command.options;
603
+ const env = options.extendEnv ? { ...process.env, ...options.env } : options.env ?? { ...process.env };
604
+ yield* bounded(
605
+ wait(
606
+ control.write({
607
+ type: "configure",
608
+ acknowledgeCleanup,
609
+ command: command.command,
610
+ args: command.args,
611
+ cwd: (0, import_node_path.resolve)(options.cwd ?? process.cwd()),
612
+ env,
613
+ shell: options.shell,
614
+ windowsHide: options.windowsHide ?? true,
615
+ windowsVerbatimArguments: options.windowsVerbatimArguments,
616
+ standardFds: (0, import_PipedProcess.standardFdsOf)(raw),
617
+ userFds: [
618
+ ...new Set(
619
+ Object.keys(options.additionalFds ?? {}).map(ChildProcess.parseFdName).filter((fd) => fd !== void 0)
620
+ )
621
+ ],
622
+ ...initial
623
+ }),
624
+ "spawn",
625
+ command.command
626
+ ),
627
+ deliveryMs,
628
+ "spawn",
629
+ command.command
630
+ );
631
+ const activate = yield* Effect.cached(Effect.gen(function* () {
632
+ control.activationSent = true;
633
+ yield* bounded(
634
+ wait(control.write({ type: "start" }), "spawn", command.command),
635
+ deliveryMs,
636
+ "spawn",
637
+ command.command
638
+ );
639
+ yield* bounded(wait(control.started.promise, "spawn", command.command), startupMs, "spawn", command.command);
640
+ }));
641
+ const unref = Effect.gen(function* () {
642
+ if (referenced) {
643
+ reref = yield* raw.unref;
644
+ job?.reference(false);
645
+ control.socket?.unref();
646
+ control.requestSocket?.unref();
647
+ referenced = false;
648
+ }
649
+ return Effect.gen(function* () {
650
+ if (!referenced) {
651
+ job?.reference(true);
652
+ control.socket?.ref();
653
+ control.requestSocket?.ref();
654
+ yield* reref;
655
+ referenced = true;
656
+ }
657
+ });
658
+ });
659
+ const output = (stream) => stream.pipe(
660
+ Stream.interruptWhen(wait(control.lost.promise, "read", command.command))
661
+ );
662
+ const input = (sink) => Sink.fromChannel(
663
+ Sink.toChannel(sink).pipe(Channel.interruptWhen(wait(control.lost.promise, "write", command.command)))
664
+ );
665
+ const handle = (0, import_ChildProcessSpawner.makeHandle)({
666
+ ...raw,
667
+ exitCode: wait(control.exited.promise, "exitCode", command.command),
668
+ isRunning: Effect.sync(() => !control.targetDone && !control.ownerDone),
669
+ stdin: input(raw.stdin),
670
+ getInputFd: (fd) => input(raw.getInputFd(fd)),
671
+ stdout: output(raw.stdout),
672
+ stderr: output(raw.stderr),
673
+ all: output(raw.all),
674
+ getOutputFd: (fd) => output(raw.getOutputFd(fd)),
675
+ kill,
676
+ unref
677
+ });
678
+ targets.set(handle, control);
679
+ return {
680
+ handle,
681
+ activate,
682
+ settled: Effect.sync(() => settled)
683
+ };
684
+ });
685
+ //# sourceMappingURL=ProcessSupervisor.js.map