@wasmsoft/fantastic 1.0.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 (456) hide show
  1. package/README.md +65 -0
  2. package/bin/run.js +27 -0
  3. package/bin/supervisor.js +65 -0
  4. package/dist/acquire/central-url.d.ts +9 -0
  5. package/dist/acquire/central-url.d.ts.map +1 -0
  6. package/dist/acquire/central-url.js +74 -0
  7. package/dist/acquire/central-url.js.map +1 -0
  8. package/dist/acquire/code.d.ts +21 -0
  9. package/dist/acquire/code.d.ts.map +1 -0
  10. package/dist/acquire/code.js +66 -0
  11. package/dist/acquire/code.js.map +1 -0
  12. package/dist/acquire/compatibility.d.ts +18 -0
  13. package/dist/acquire/compatibility.d.ts.map +1 -0
  14. package/dist/acquire/compatibility.js +36 -0
  15. package/dist/acquire/compatibility.js.map +1 -0
  16. package/dist/acquire/fetch.d.ts +26 -0
  17. package/dist/acquire/fetch.d.ts.map +1 -0
  18. package/dist/acquire/fetch.js +72 -0
  19. package/dist/acquire/fetch.js.map +1 -0
  20. package/dist/acquire/latest.d.ts +24 -0
  21. package/dist/acquire/latest.d.ts.map +1 -0
  22. package/dist/acquire/latest.js +95 -0
  23. package/dist/acquire/latest.js.map +1 -0
  24. package/dist/backup/archive.d.ts +26 -0
  25. package/dist/backup/archive.d.ts.map +1 -0
  26. package/dist/backup/archive.js +123 -0
  27. package/dist/backup/archive.js.map +1 -0
  28. package/dist/backup/restore.d.ts +46 -0
  29. package/dist/backup/restore.d.ts.map +1 -0
  30. package/dist/backup/restore.js +164 -0
  31. package/dist/backup/restore.js.map +1 -0
  32. package/dist/base-command.d.ts +54 -0
  33. package/dist/base-command.d.ts.map +1 -0
  34. package/dist/base-command.js +120 -0
  35. package/dist/base-command.js.map +1 -0
  36. package/dist/bundle-format/index.d.ts +6 -0
  37. package/dist/bundle-format/index.d.ts.map +1 -0
  38. package/dist/bundle-format/index.js +36 -0
  39. package/dist/bundle-format/index.js.map +1 -0
  40. package/dist/commands/activate.d.ts +15 -0
  41. package/dist/commands/activate.d.ts.map +1 -0
  42. package/dist/commands/activate.js +139 -0
  43. package/dist/commands/activate.js.map +1 -0
  44. package/dist/commands/backup.d.ts +11 -0
  45. package/dist/commands/backup.d.ts.map +1 -0
  46. package/dist/commands/backup.js +75 -0
  47. package/dist/commands/backup.js.map +1 -0
  48. package/dist/commands/config/get.d.ts +10 -0
  49. package/dist/commands/config/get.d.ts.map +1 -0
  50. package/dist/commands/config/get.js +33 -0
  51. package/dist/commands/config/get.js.map +1 -0
  52. package/dist/commands/config/list.d.ts +7 -0
  53. package/dist/commands/config/list.d.ts.map +1 -0
  54. package/dist/commands/config/list.js +43 -0
  55. package/dist/commands/config/list.js.map +1 -0
  56. package/dist/commands/config/set.d.ts +11 -0
  57. package/dist/commands/config/set.d.ts.map +1 -0
  58. package/dist/commands/config/set.js +56 -0
  59. package/dist/commands/config/set.js.map +1 -0
  60. package/dist/commands/db/migrate.d.ts +10 -0
  61. package/dist/commands/db/migrate.d.ts.map +1 -0
  62. package/dist/commands/db/migrate.js +67 -0
  63. package/dist/commands/db/migrate.js.map +1 -0
  64. package/dist/commands/dev.d.ts +19 -0
  65. package/dist/commands/dev.d.ts.map +1 -0
  66. package/dist/commands/dev.js +149 -0
  67. package/dist/commands/dev.js.map +1 -0
  68. package/dist/commands/doctor.d.ts +11 -0
  69. package/dist/commands/doctor.d.ts.map +1 -0
  70. package/dist/commands/doctor.js +75 -0
  71. package/dist/commands/doctor.js.map +1 -0
  72. package/dist/commands/health.d.ts +12 -0
  73. package/dist/commands/health.d.ts.map +1 -0
  74. package/dist/commands/health.js +109 -0
  75. package/dist/commands/health.js.map +1 -0
  76. package/dist/commands/install.d.ts +60 -0
  77. package/dist/commands/install.d.ts.map +1 -0
  78. package/dist/commands/install.js +486 -0
  79. package/dist/commands/install.js.map +1 -0
  80. package/dist/commands/iptv/snapshot.d.ts +10 -0
  81. package/dist/commands/iptv/snapshot.d.ts.map +1 -0
  82. package/dist/commands/iptv/snapshot.js +55 -0
  83. package/dist/commands/iptv/snapshot.js.map +1 -0
  84. package/dist/commands/library/drives.d.ts +7 -0
  85. package/dist/commands/library/drives.d.ts.map +1 -0
  86. package/dist/commands/library/drives.js +71 -0
  87. package/dist/commands/library/drives.js.map +1 -0
  88. package/dist/commands/library/relink.d.ts +10 -0
  89. package/dist/commands/library/relink.d.ts.map +1 -0
  90. package/dist/commands/library/relink.js +72 -0
  91. package/dist/commands/library/relink.js.map +1 -0
  92. package/dist/commands/library/scan.d.ts +16 -0
  93. package/dist/commands/library/scan.d.ts.map +1 -0
  94. package/dist/commands/library/scan.js +87 -0
  95. package/dist/commands/library/scan.js.map +1 -0
  96. package/dist/commands/library/sections.d.ts +7 -0
  97. package/dist/commands/library/sections.d.ts.map +1 -0
  98. package/dist/commands/library/sections.js +33 -0
  99. package/dist/commands/library/sections.js.map +1 -0
  100. package/dist/commands/library/status.d.ts +7 -0
  101. package/dist/commands/library/status.d.ts.map +1 -0
  102. package/dist/commands/library/status.js +37 -0
  103. package/dist/commands/library/status.js.map +1 -0
  104. package/dist/commands/list.d.ts +7 -0
  105. package/dist/commands/list.d.ts.map +1 -0
  106. package/dist/commands/list.js +73 -0
  107. package/dist/commands/list.js.map +1 -0
  108. package/dist/commands/live/channels.d.ts +10 -0
  109. package/dist/commands/live/channels.d.ts.map +1 -0
  110. package/dist/commands/live/channels.js +55 -0
  111. package/dist/commands/live/channels.js.map +1 -0
  112. package/dist/commands/live/test.d.ts +15 -0
  113. package/dist/commands/live/test.d.ts.map +1 -0
  114. package/dist/commands/live/test.js +116 -0
  115. package/dist/commands/live/test.js.map +1 -0
  116. package/dist/commands/logs.d.ts +16 -0
  117. package/dist/commands/logs.d.ts.map +1 -0
  118. package/dist/commands/logs.js +77 -0
  119. package/dist/commands/logs.js.map +1 -0
  120. package/dist/commands/migrate-cli.d.ts +11 -0
  121. package/dist/commands/migrate-cli.d.ts.map +1 -0
  122. package/dist/commands/migrate-cli.js +116 -0
  123. package/dist/commands/migrate-cli.js.map +1 -0
  124. package/dist/commands/owner/reset.d.ts +7 -0
  125. package/dist/commands/owner/reset.d.ts.map +1 -0
  126. package/dist/commands/owner/reset.js +74 -0
  127. package/dist/commands/owner/reset.js.map +1 -0
  128. package/dist/commands/restart.d.ts +11 -0
  129. package/dist/commands/restart.d.ts.map +1 -0
  130. package/dist/commands/restart.js +53 -0
  131. package/dist/commands/restart.js.map +1 -0
  132. package/dist/commands/restore.d.ts +17 -0
  133. package/dist/commands/restore.d.ts.map +1 -0
  134. package/dist/commands/restore.js +148 -0
  135. package/dist/commands/restore.js.map +1 -0
  136. package/dist/commands/self-update.d.ts +10 -0
  137. package/dist/commands/self-update.d.ts.map +1 -0
  138. package/dist/commands/self-update.js +98 -0
  139. package/dist/commands/self-update.js.map +1 -0
  140. package/dist/commands/setup.d.ts +19 -0
  141. package/dist/commands/setup.d.ts.map +1 -0
  142. package/dist/commands/setup.js +111 -0
  143. package/dist/commands/setup.js.map +1 -0
  144. package/dist/commands/shell.d.ts +118 -0
  145. package/dist/commands/shell.d.ts.map +1 -0
  146. package/dist/commands/shell.js +415 -0
  147. package/dist/commands/shell.js.map +1 -0
  148. package/dist/commands/start.d.ts +12 -0
  149. package/dist/commands/start.d.ts.map +1 -0
  150. package/dist/commands/start.js +108 -0
  151. package/dist/commands/start.js.map +1 -0
  152. package/dist/commands/status.d.ts +8 -0
  153. package/dist/commands/status.d.ts.map +1 -0
  154. package/dist/commands/status.js +115 -0
  155. package/dist/commands/status.js.map +1 -0
  156. package/dist/commands/stop.d.ts +11 -0
  157. package/dist/commands/stop.d.ts.map +1 -0
  158. package/dist/commands/stop.js +45 -0
  159. package/dist/commands/stop.js.map +1 -0
  160. package/dist/commands/stream/cancel.d.ts +13 -0
  161. package/dist/commands/stream/cancel.d.ts.map +1 -0
  162. package/dist/commands/stream/cancel.js +31 -0
  163. package/dist/commands/stream/cancel.js.map +1 -0
  164. package/dist/commands/stream/encoders.d.ts +7 -0
  165. package/dist/commands/stream/encoders.d.ts.map +1 -0
  166. package/dist/commands/stream/encoders.js +42 -0
  167. package/dist/commands/stream/encoders.js.map +1 -0
  168. package/dist/commands/stream/queue.d.ts +7 -0
  169. package/dist/commands/stream/queue.d.ts.map +1 -0
  170. package/dist/commands/stream/queue.js +52 -0
  171. package/dist/commands/stream/queue.js.map +1 -0
  172. package/dist/commands/stream/sessions.d.ts +7 -0
  173. package/dist/commands/stream/sessions.d.ts.map +1 -0
  174. package/dist/commands/stream/sessions.js +44 -0
  175. package/dist/commands/stream/sessions.js.map +1 -0
  176. package/dist/commands/uninstall.d.ts +23 -0
  177. package/dist/commands/uninstall.d.ts.map +1 -0
  178. package/dist/commands/uninstall.js +290 -0
  179. package/dist/commands/uninstall.js.map +1 -0
  180. package/dist/commands/update.d.ts +21 -0
  181. package/dist/commands/update.d.ts.map +1 -0
  182. package/dist/commands/update.js +290 -0
  183. package/dist/commands/update.js.map +1 -0
  184. package/dist/commands/watch.d.ts +10 -0
  185. package/dist/commands/watch.d.ts.map +1 -0
  186. package/dist/commands/watch.js +38 -0
  187. package/dist/commands/watch.js.map +1 -0
  188. package/dist/config/local-config.d.ts +22 -0
  189. package/dist/config/local-config.d.ts.map +1 -0
  190. package/dist/config/local-config.js +79 -0
  191. package/dist/config/local-config.js.map +1 -0
  192. package/dist/core-scripts/run.d.ts +22 -0
  193. package/dist/core-scripts/run.d.ts.map +1 -0
  194. package/dist/core-scripts/run.js +65 -0
  195. package/dist/core-scripts/run.js.map +1 -0
  196. package/dist/doctor/check.types.d.ts +51 -0
  197. package/dist/doctor/check.types.d.ts.map +1 -0
  198. package/dist/doctor/check.types.js +14 -0
  199. package/dist/doctor/check.types.js.map +1 -0
  200. package/dist/doctor/checks/core.check.d.ts +11 -0
  201. package/dist/doctor/checks/core.check.d.ts.map +1 -0
  202. package/dist/doctor/checks/core.check.js +104 -0
  203. package/dist/doctor/checks/core.check.js.map +1 -0
  204. package/dist/doctor/checks/data.check.d.ts +11 -0
  205. package/dist/doctor/checks/data.check.d.ts.map +1 -0
  206. package/dist/doctor/checks/data.check.js +70 -0
  207. package/dist/doctor/checks/data.check.js.map +1 -0
  208. package/dist/doctor/checks/environment.check.d.ts +6 -0
  209. package/dist/doctor/checks/environment.check.d.ts.map +1 -0
  210. package/dist/doctor/checks/environment.check.js +70 -0
  211. package/dist/doctor/checks/environment.check.js.map +1 -0
  212. package/dist/doctor/checks/integrity.check.d.ts +4 -0
  213. package/dist/doctor/checks/integrity.check.d.ts.map +1 -0
  214. package/dist/doctor/checks/integrity.check.js +89 -0
  215. package/dist/doctor/checks/integrity.check.js.map +1 -0
  216. package/dist/doctor/checks/isolation.check.d.ts +49 -0
  217. package/dist/doctor/checks/isolation.check.d.ts.map +1 -0
  218. package/dist/doctor/checks/isolation.check.js +220 -0
  219. package/dist/doctor/checks/isolation.check.js.map +1 -0
  220. package/dist/doctor/checks/licence.check.d.ts +8 -0
  221. package/dist/doctor/checks/licence.check.d.ts.map +1 -0
  222. package/dist/doctor/checks/licence.check.js +172 -0
  223. package/dist/doctor/checks/licence.check.js.map +1 -0
  224. package/dist/doctor/checks/ports.check.d.ts +4 -0
  225. package/dist/doctor/checks/ports.check.d.ts.map +1 -0
  226. package/dist/doctor/checks/ports.check.js +52 -0
  227. package/dist/doctor/checks/ports.check.js.map +1 -0
  228. package/dist/doctor/checks/supervisor.check.d.ts +19 -0
  229. package/dist/doctor/checks/supervisor.check.d.ts.map +1 -0
  230. package/dist/doctor/checks/supervisor.check.js +152 -0
  231. package/dist/doctor/checks/supervisor.check.js.map +1 -0
  232. package/dist/doctor/checks/tooling.check.d.ts +3 -0
  233. package/dist/doctor/checks/tooling.check.d.ts.map +1 -0
  234. package/dist/doctor/checks/tooling.check.js +43 -0
  235. package/dist/doctor/checks/tooling.check.js.map +1 -0
  236. package/dist/doctor/registry.d.ts +15 -0
  237. package/dist/doctor/registry.d.ts.map +1 -0
  238. package/dist/doctor/registry.js +53 -0
  239. package/dist/doctor/registry.js.map +1 -0
  240. package/dist/exit-codes.d.ts +18 -0
  241. package/dist/exit-codes.d.ts.map +1 -0
  242. package/dist/exit-codes.js +23 -0
  243. package/dist/exit-codes.js.map +1 -0
  244. package/dist/index.d.ts +2 -0
  245. package/dist/index.d.ts.map +1 -0
  246. package/dist/index.js +16 -0
  247. package/dist/index.js.map +1 -0
  248. package/dist/logs/sink.d.ts +11 -0
  249. package/dist/logs/sink.d.ts.map +1 -0
  250. package/dist/logs/sink.js +73 -0
  251. package/dist/logs/sink.js.map +1 -0
  252. package/dist/logs/tail.d.ts +17 -0
  253. package/dist/logs/tail.d.ts.map +1 -0
  254. package/dist/logs/tail.js +98 -0
  255. package/dist/logs/tail.js.map +1 -0
  256. package/dist/packaging/boot-task.d.ts +56 -0
  257. package/dist/packaging/boot-task.d.ts.map +1 -0
  258. package/dist/packaging/boot-task.js +151 -0
  259. package/dist/packaging/boot-task.js.map +1 -0
  260. package/dist/packaging/install.d.ts +154 -0
  261. package/dist/packaging/install.d.ts.map +1 -0
  262. package/dist/packaging/install.js +381 -0
  263. package/dist/packaging/install.js.map +1 -0
  264. package/dist/packaging/layout.d.ts +153 -0
  265. package/dist/packaging/layout.d.ts.map +1 -0
  266. package/dist/packaging/layout.js +168 -0
  267. package/dist/packaging/layout.js.map +1 -0
  268. package/dist/packaging/machine-path.d.ts +52 -0
  269. package/dist/packaging/machine-path.d.ts.map +1 -0
  270. package/dist/packaging/machine-path.js +237 -0
  271. package/dist/packaging/machine-path.js.map +1 -0
  272. package/dist/packaging/manifest.d.ts +37 -0
  273. package/dist/packaging/manifest.d.ts.map +1 -0
  274. package/dist/packaging/manifest.js +115 -0
  275. package/dist/packaging/manifest.js.map +1 -0
  276. package/dist/packaging/shims.d.ts +31 -0
  277. package/dist/packaging/shims.d.ts.map +1 -0
  278. package/dist/packaging/shims.js +165 -0
  279. package/dist/packaging/shims.js.map +1 -0
  280. package/dist/probes/internal-paths.d.ts +35 -0
  281. package/dist/probes/internal-paths.d.ts.map +1 -0
  282. package/dist/probes/internal-paths.js +58 -0
  283. package/dist/probes/internal-paths.js.map +1 -0
  284. package/dist/probes/internal.client.d.ts +54 -0
  285. package/dist/probes/internal.client.d.ts.map +1 -0
  286. package/dist/probes/internal.client.js +123 -0
  287. package/dist/probes/internal.client.js.map +1 -0
  288. package/dist/probes/port.probe.d.ts +21 -0
  289. package/dist/probes/port.probe.d.ts.map +1 -0
  290. package/dist/probes/port.probe.js +42 -0
  291. package/dist/probes/port.probe.js.map +1 -0
  292. package/dist/probes/service.probe.d.ts +29 -0
  293. package/dist/probes/service.probe.d.ts.map +1 -0
  294. package/dist/probes/service.probe.js +65 -0
  295. package/dist/probes/service.probe.js.map +1 -0
  296. package/dist/profiles/appliance.profile.d.ts +20 -0
  297. package/dist/profiles/appliance.profile.d.ts.map +1 -0
  298. package/dist/profiles/appliance.profile.js +137 -0
  299. package/dist/profiles/appliance.profile.js.map +1 -0
  300. package/dist/profiles/dev.profile.d.ts +22 -0
  301. package/dist/profiles/dev.profile.d.ts.map +1 -0
  302. package/dist/profiles/dev.profile.js +104 -0
  303. package/dist/profiles/dev.profile.js.map +1 -0
  304. package/dist/profiles/resolve.d.ts +37 -0
  305. package/dist/profiles/resolve.d.ts.map +1 -0
  306. package/dist/profiles/resolve.js +198 -0
  307. package/dist/profiles/resolve.js.map +1 -0
  308. package/dist/profiles/types.d.ts +57 -0
  309. package/dist/profiles/types.d.ts.map +1 -0
  310. package/dist/profiles/types.js +15 -0
  311. package/dist/profiles/types.js.map +1 -0
  312. package/dist/registry/local-registry.d.ts +79 -0
  313. package/dist/registry/local-registry.d.ts.map +1 -0
  314. package/dist/registry/local-registry.js +252 -0
  315. package/dist/registry/local-registry.js.map +1 -0
  316. package/dist/render/banner.d.ts +13 -0
  317. package/dist/render/banner.d.ts.map +1 -0
  318. package/dist/render/banner.js +83 -0
  319. package/dist/render/banner.js.map +1 -0
  320. package/dist/render/boot.render.d.ts +123 -0
  321. package/dist/render/boot.render.d.ts.map +1 -0
  322. package/dist/render/boot.render.js +288 -0
  323. package/dist/render/boot.render.js.map +1 -0
  324. package/dist/render/brand.d.ts +16 -0
  325. package/dist/render/brand.d.ts.map +1 -0
  326. package/dist/render/brand.js +22 -0
  327. package/dist/render/brand.js.map +1 -0
  328. package/dist/render/doctor.render.d.ts +12 -0
  329. package/dist/render/doctor.render.d.ts.map +1 -0
  330. package/dist/render/doctor.render.js +95 -0
  331. package/dist/render/doctor.render.js.map +1 -0
  332. package/dist/render/json.d.ts +29 -0
  333. package/dist/render/json.d.ts.map +1 -0
  334. package/dist/render/json.js +19 -0
  335. package/dist/render/json.js.map +1 -0
  336. package/dist/render/licence.render.d.ts +10 -0
  337. package/dist/render/licence.render.d.ts.map +1 -0
  338. package/dist/render/licence.render.js +167 -0
  339. package/dist/render/licence.render.js.map +1 -0
  340. package/dist/render/status.render.d.ts +6 -0
  341. package/dist/render/status.render.d.ts.map +1 -0
  342. package/dist/render/status.render.js +52 -0
  343. package/dist/render/status.render.js.map +1 -0
  344. package/dist/render/theme.d.ts +66 -0
  345. package/dist/render/theme.d.ts.map +1 -0
  346. package/dist/render/theme.js +89 -0
  347. package/dist/render/theme.js.map +1 -0
  348. package/dist/runtime-guard.d.ts +19 -0
  349. package/dist/runtime-guard.d.ts.map +1 -0
  350. package/dist/runtime-guard.js +57 -0
  351. package/dist/runtime-guard.js.map +1 -0
  352. package/dist/shell/input-mode.d.ts +25 -0
  353. package/dist/shell/input-mode.d.ts.map +1 -0
  354. package/dist/shell/input-mode.js +17 -0
  355. package/dist/shell/input-mode.js.map +1 -0
  356. package/dist/shell/parse-line.d.ts +6 -0
  357. package/dist/shell/parse-line.d.ts.map +1 -0
  358. package/dist/shell/parse-line.js +62 -0
  359. package/dist/shell/parse-line.js.map +1 -0
  360. package/dist/shell/suggestions.d.ts +14 -0
  361. package/dist/shell/suggestions.d.ts.map +1 -0
  362. package/dist/shell/suggestions.js +35 -0
  363. package/dist/shell/suggestions.js.map +1 -0
  364. package/dist/supervisor/dependencies.d.ts +2 -0
  365. package/dist/supervisor/dependencies.d.ts.map +1 -0
  366. package/dist/supervisor/dependencies.js +38 -0
  367. package/dist/supervisor/dependencies.js.map +1 -0
  368. package/dist/supervisor/entry.d.ts +36 -0
  369. package/dist/supervisor/entry.d.ts.map +1 -0
  370. package/dist/supervisor/entry.js +171 -0
  371. package/dist/supervisor/entry.js.map +1 -0
  372. package/dist/supervisor/inspect.d.ts +17 -0
  373. package/dist/supervisor/inspect.d.ts.map +1 -0
  374. package/dist/supervisor/inspect.js +39 -0
  375. package/dist/supervisor/inspect.js.map +1 -0
  376. package/dist/supervisor/invocation.d.ts +27 -0
  377. package/dist/supervisor/invocation.d.ts.map +1 -0
  378. package/dist/supervisor/invocation.js +33 -0
  379. package/dist/supervisor/invocation.js.map +1 -0
  380. package/dist/supervisor/monitor.d.ts +63 -0
  381. package/dist/supervisor/monitor.d.ts.map +1 -0
  382. package/dist/supervisor/monitor.js +141 -0
  383. package/dist/supervisor/monitor.js.map +1 -0
  384. package/dist/supervisor/orchestrator.d.ts +52 -0
  385. package/dist/supervisor/orchestrator.d.ts.map +1 -0
  386. package/dist/supervisor/orchestrator.js +154 -0
  387. package/dist/supervisor/orchestrator.js.map +1 -0
  388. package/dist/supervisor/pidfile.d.ts +21 -0
  389. package/dist/supervisor/pidfile.d.ts.map +1 -0
  390. package/dist/supervisor/pidfile.js +39 -0
  391. package/dist/supervisor/pidfile.js.map +1 -0
  392. package/dist/supervisor/process-identity.d.ts +19 -0
  393. package/dist/supervisor/process-identity.d.ts.map +1 -0
  394. package/dist/supervisor/process-identity.js +51 -0
  395. package/dist/supervisor/process-identity.js.map +1 -0
  396. package/dist/supervisor/readiness.d.ts +17 -0
  397. package/dist/supervisor/readiness.d.ts.map +1 -0
  398. package/dist/supervisor/readiness.js +52 -0
  399. package/dist/supervisor/readiness.js.map +1 -0
  400. package/dist/supervisor/restart-consumer.d.ts +37 -0
  401. package/dist/supervisor/restart-consumer.d.ts.map +1 -0
  402. package/dist/supervisor/restart-consumer.js +119 -0
  403. package/dist/supervisor/restart-consumer.js.map +1 -0
  404. package/dist/supervisor/runner.d.ts +2 -0
  405. package/dist/supervisor/runner.d.ts.map +1 -0
  406. package/dist/supervisor/runner.js +118 -0
  407. package/dist/supervisor/runner.js.map +1 -0
  408. package/dist/supervisor/schedule-timer.d.ts +38 -0
  409. package/dist/supervisor/schedule-timer.d.ts.map +1 -0
  410. package/dist/supervisor/schedule-timer.js +148 -0
  411. package/dist/supervisor/schedule-timer.js.map +1 -0
  412. package/dist/supervisor/spawn.d.ts +18 -0
  413. package/dist/supervisor/spawn.d.ts.map +1 -0
  414. package/dist/supervisor/spawn.js +119 -0
  415. package/dist/supervisor/spawn.js.map +1 -0
  416. package/dist/supervisor/state-files.d.ts +33 -0
  417. package/dist/supervisor/state-files.d.ts.map +1 -0
  418. package/dist/supervisor/state-files.js +110 -0
  419. package/dist/supervisor/state-files.js.map +1 -0
  420. package/dist/supervisor/tree-kill.d.ts +14 -0
  421. package/dist/supervisor/tree-kill.d.ts.map +1 -0
  422. package/dist/supervisor/tree-kill.js +82 -0
  423. package/dist/supervisor/tree-kill.js.map +1 -0
  424. package/dist/ui/health-panel.d.ts +8 -0
  425. package/dist/ui/health-panel.d.ts.map +1 -0
  426. package/dist/ui/health-panel.js +91 -0
  427. package/dist/ui/health-panel.js.map +1 -0
  428. package/dist/updating/apply.d.ts +50 -0
  429. package/dist/updating/apply.d.ts.map +1 -0
  430. package/dist/updating/apply.js +172 -0
  431. package/dist/updating/apply.js.map +1 -0
  432. package/dist/updating/download.d.ts +44 -0
  433. package/dist/updating/download.d.ts.map +1 -0
  434. package/dist/updating/download.js +144 -0
  435. package/dist/updating/download.js.map +1 -0
  436. package/dist/updating/rollback.d.ts +33 -0
  437. package/dist/updating/rollback.d.ts.map +1 -0
  438. package/dist/updating/rollback.js +54 -0
  439. package/dist/updating/rollback.js.map +1 -0
  440. package/dist/updating/self.d.ts +16 -0
  441. package/dist/updating/self.d.ts.map +1 -0
  442. package/dist/updating/self.js +50 -0
  443. package/dist/updating/self.js.map +1 -0
  444. package/dist/updating/verify.d.ts +25 -0
  445. package/dist/updating/verify.d.ts.map +1 -0
  446. package/dist/updating/verify.js +51 -0
  447. package/dist/updating/verify.js.map +1 -0
  448. package/dist/updating/versions.d.ts +31 -0
  449. package/dist/updating/versions.d.ts.map +1 -0
  450. package/dist/updating/versions.js +78 -0
  451. package/dist/updating/versions.js.map +1 -0
  452. package/dist/version.d.ts +4 -0
  453. package/dist/version.d.ts.map +1 -0
  454. package/dist/version.js +29 -0
  455. package/dist/version.js.map +1 -0
  456. package/package.json +106 -0
@@ -0,0 +1,154 @@
1
+ import type { BundleManifest } from "../contracts/core.js";
2
+ export interface InstallCheck {
3
+ name: string;
4
+ ok: boolean;
5
+ detail: string;
6
+ remedy?: string;
7
+ }
8
+ export interface InstallSource {
9
+ /** مجلد حزمة مفكوك، أو أرشيف ‎.zip‎. */
10
+ path: string;
11
+ isArchive: boolean;
12
+ }
13
+ export declare function classifySource(path: string): InstallSource;
14
+ /** يقرأ البيان من أرشيف بلا فكّه — نحتاجه للتحقّق من المنصّة قبل أي كتابة. */
15
+ export declare function manifestFromArchive(file: string): Promise<BundleManifest | undefined>;
16
+ /**
17
+ * AR: منفذ تحتاجه خدمة، وهل هو حرّ. **قائمة لا رقمًا واحدًا**: الجهاز خدمتان، وفحص منفذ النواة وحده
18
+ * كان يمرّر تثبيتًا يفشل بعد الهجرات عند تشغيل خدمة البثّ — أي بعد الكتابة، فيتراجع كل شيء
19
+ * برسالة «الخدمات لم تبدأ» لا تسمّي المنفذ المتعارض. الفحص قبل الكتابة يجب أن يشمل ما يُحتاج
20
+ * فعلًا، لا أشهره.
21
+ * EN: A port a service needs, and whether it is free. **A list, not a single number**: the appliance
22
+ * has two services, and checking the core's port alone let an install proceed that then failed
23
+ * after the migrations, when the live service started — that is, after writing, so everything
24
+ * rolled back under a "the services did not start" message that named no port. A pre-write check
25
+ * must cover what is actually needed, not what is best known.
26
+ */
27
+ export interface RequiredPort {
28
+ label: string;
29
+ port: number;
30
+ free: boolean;
31
+ /** العَلَم الذي يغيّر هذا المنفذ. يُذكَر في العلاج فيعرف القارئ ماذا يكتب لا أن «يحرّر منفذًا». */
32
+ flag: string;
33
+ }
34
+ export interface PreInstallInput {
35
+ source: InstallSource;
36
+ root: string;
37
+ ports: RequiredPort[];
38
+ /** هل تعمل هذه العملية بصلاحيات مسؤول؟ يقرّر إن كان ‎PATH‎ سيُسجَّل أصلًا. */
39
+ elevated: boolean;
40
+ expectedSha256?: string;
41
+ }
42
+ /**
43
+ * AR: هل نملك صلاحيات المسؤول؟ الدليل عمليّ لا نظريّ: نحاول فتح مفتاح سِجل لا يُفتَح للكتابة إلّا
44
+ * بها. سؤال ويندوز عن «الدور» يكذب تحت UAC، والمحاولة تصدق.
45
+ * EN: Do we hold administrator rights? The evidence is practical rather than declared: we try to open
46
+ * a registry key that only opens for writing with them. Asking Windows about the "role" lies under
47
+ * UAC; attempting the thing tells the truth.
48
+ */
49
+ export declare function hasAdminRights(): Promise<boolean>;
50
+ /**
51
+ * الفحوص قبل الكتابة. تُعيد قائمة، والأمر يرفض إن كان فيها فشل واحد.
52
+ */
53
+ export declare function preInstallChecks(input: PreInstallInput): Promise<InstallCheck[]>;
54
+ /** يفكّ أرشيف حزمة إلى الجذر، رافضًا أي مدخل يخرج منه. */
55
+ export declare function extractBundle(archive: string, root: string): Promise<number>;
56
+ /**
57
+ * AR: ينسخ مجلد حزمة مفكوك، **مُكوِّنًا مُكوِّنًا لا شجرةً واحدة**، و‎data/‎ لا يُنسَخ إطلاقًا.
58
+ *
59
+ * كان هذا نداءً واحدًا على الجذر كلّه. وقد فشل فشلًا صامتًا حين تكون الوجهة تحوي ‎data/‎ عامرًا:
60
+ * العملية تموت بلا استثناء يُلتقَط وبلا سطر في السجلّ، ولا يُنسَخ بايت — بينما النسخ إلى مجلد
61
+ * فارغ ينجح، والنسخ مُكوِّنًا مُكوِّنًا إلى الوجهة **نفسها** ينجح. (قِيس على ويندوز أثناء ٠١٨؛
62
+ * السبب الجذري لم يُحسَم — عملية النسخ الضخمة قد تكون أوقفها دفاعٌ على الجهاز — لكن الشكل الذي
63
+ * يعمل معلوم ومُثبَت.)
64
+ *
65
+ * وللشكل الجديد فائدتان تتجاوزان تفادي العطب:
66
+ * ١ — **‎data/‎ يُستثنى صراحةً** بدل الاتّكال على أن دمج مجلد فارغ فوق مكتبة العميل غير مؤذٍ.
67
+ * القاعدة الرابعة تصير سطرًا في الشيفرة لا نتيجةً عرَضية.
68
+ * ٢ — الفشل يُنسَب إلى مكوّنه، فيقول الخطأ **أيّ** جزء تعذّر بدل «تعذّر النسخ».
69
+ * EN: Copies an extracted bundle directory, **component by component rather than as one tree**, and
70
+ * `data/` is never copied at all.
71
+ *
72
+ * This used to be a single call on the whole root. It failed silently when the destination held a
73
+ * populated `data/`: the process died with no catchable exception and no log line, and not one
74
+ * byte was copied — while copying into an empty directory succeeded, and copying component by
75
+ * component into the **same** destination succeeded. (Measured on Windows during 018; the root
76
+ * cause is unresolved — a security product may have stopped the bulk write — but the shape that
77
+ * works is known and proven.)
78
+ *
79
+ * The new shape earns two things beyond avoiding the fault:
80
+ * 1 — **`data/` is excluded explicitly** rather than relying on merging an empty directory over a
81
+ * customer's library being harmless. Rule IV becomes a line of code, not an incidental
82
+ * outcome.
83
+ * 2 — A failure names its component, so the error says **which** part could not be copied instead
84
+ * of "the copy failed".
85
+ */
86
+ export declare function copyBundle(source: string, root: string): void;
87
+ /**
88
+ * AR: ما الذي ينقص شجرةً كي تُعدّ حزمةً مكتملة؟ **سؤال المُثبِّت، فانتقل معه** (٠٢٦).
89
+ *
90
+ * كانت هذه القائمة في خطّ الإنتاج (‎packaging/pipeline.ts‎) لأن الباني كان يقرأها ليتحقّق ممّا
91
+ * أنتج. وقد افترق المستودعان: الباني في مستودع المنتج، والمُثبِّت هنا. وموضعها الصحيح **حيث
92
+ * يُقرأ الجواب لا حيث يُكتب**: الحزمة تُبنى مرّةً وتُقرأ على أجهزةٍ كثيرة لسنوات.
93
+ *
94
+ * وتُفحَص بعد الفكّ وقبل تشغيل أيّ خدمة، فأرشيفٌ وصل ناقصًا يُوقف التثبيت ويُتراجَع عنه بدل
95
+ * أن يُنتج جهازًا نصف مركَّب يفشل عند أول مشاهد.
96
+ * EN: What must a tree contain before it counts as a complete bundle? **The installer's question, so
97
+ * it travelled with the installer** (026).
98
+ *
99
+ * This list used to live in the production pipeline (`packaging/pipeline.ts`), because the
100
+ * builder read it to verify what it had produced. The repositories have since separated: the
101
+ * builder lives in the product repository and the installer here. Its right home is **where the
102
+ * answer is read, not where it is written**: a bundle is built once and read on many machines
103
+ * for years.
104
+ *
105
+ * It runs after extraction and before any service starts, so an archive that arrived incomplete
106
+ * stops the install and is rolled back, rather than producing a half-assembled appliance that
107
+ * fails in front of the first viewer.
108
+ */
109
+ export declare function verifyInstalled(root: string): string[];
110
+ /**
111
+ * التراجع: يزيل ما كُتب ويترك ‎data/‎ كما كان.
112
+ *
113
+ * يُستدعى عند أي فشل **قبل** بدء الخدمات، فتعود الآلة إلى حالتها السابقة بدل أن تبقى نصف مثبَّتة.
114
+ */
115
+ /**
116
+ * AR: **التراجع لا يُفشِل نفسه، ولا يحجب سبب الفشل الذي استدعاه.**
117
+ *
118
+ * كان يرمي عند أوّل ملفّ متعذّر، وهو يجري داخل ‎catch‎ الأصلي — فيحلّ خطؤه محلّ الخطأ الحقيقي:
119
+ * يقرأ الفنّي «‎EBUSY … fantastic.db‎» ولا يعرف شيئًا عمّا فشل أصلًا. والأسوأ أن الحلقة تتوقّف
120
+ * عند ذلك الملفّ، فتبقى الشجرة **نصف محذوفة**: بعض المكوّنات ذهب وبعضها بقي — وهي الحالة التي
121
+ * وُجد التراجع ليمنعها.
122
+ * وسبب ‎EBUSY‎ معروف ومتوقَّع: عملية بدأت للتوّ ثم تعثّر إقلاعها ما تزال تمسك قاعدة البيانات
123
+ * لحظاتٍ بعد قتلها. إعادة المحاولة تكفي، وما يبقى متعذّرًا يُبلَّغ عنه ولا يُخفى.
124
+ * EN: **The rollback neither fails itself nor hides the failure that summoned it.**
125
+ *
126
+ * It used to throw on the first stubborn file, and it runs inside the original `catch` — so its
127
+ * error replaced the real one: the technician reads "EBUSY … fantastic.db" and learns nothing
128
+ * about what actually failed. Worse, the loop stopped at that file, leaving the tree **half
129
+ * deleted**: some components gone, others left — precisely the state a rollback exists to prevent.
130
+ * And the cause of that EBUSY is known and expected: a process that had just started and then
131
+ * failed to come up still holds the database for a moment after being killed. Retrying is enough,
132
+ * and whatever remains is reported rather than concealed.
133
+ */
134
+ export declare function rollbackInstall(root: string, dataExistedBefore: boolean): string[];
135
+ export interface RemovalPlan {
136
+ removed: string[];
137
+ kept: string[];
138
+ }
139
+ /** ما تُزيله الإزالة وما تُبقيه. ‎data/‎ يبقى ما لم يُطلَب حذفه صراحةً. */
140
+ export declare function planRemoval(root: string, purge: boolean): RemovalPlan;
141
+ /**
142
+ * AR: ينفّذ الخطة ويعيد ما تعذّر حذفه. **لا يتوقّف عند أول عثرة**: التوقّف يترك الشجرة نصف محذوفة —
143
+ * الشيمة والواجهة ذهبتا والخدمات باقية — وهي حالة لا يستطيع الفنّي أن يصلحها بأمر، لأن الأمر
144
+ * الذي يصلحها هو ما حُذف للتوّ. يُحذَف ما يمكن، ويُسمَّى ما بقي، فيبقى القرار بيد قارئٍ يعرف.
145
+ * EN: Applies the plan and returns whatever could not be deleted. **It does not stop at the first
146
+ * stumble**: stopping leaves the tree half removed — the shim and the CLI gone, the services still
147
+ * there — a state the technician cannot repair with a command, because the command that would
148
+ * repair it is the one just deleted. What can go, goes; what remains is named, leaving the
149
+ * decision with a reader who knows.
150
+ */
151
+ export declare function applyRemoval(root: string, plan: RemovalPlan): string[];
152
+ /** حجم شجرة للتقرير. */
153
+ export declare function sizeOf(root: string): number;
154
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/packaging/install.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAsB3D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAE1D;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAuCrF;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,mGAAmG;IACnG,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBvD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkGtF;AAED,0DAA0D;AAC1D,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ClF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAe7D;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAED;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAG,MAAM,EAAE,CAiBlF;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,CAYrE;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAYtE;AAED,wBAAwB;AACxB,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW3C"}
@@ -0,0 +1,381 @@
1
+ import { createWriteStream, cpSync, existsSync, mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
2
+ import { dirname, join, normalize, resolve, sep } from "node:path";
3
+ import { pipeline as streamPipeline } from "node:stream/promises";
4
+ import { execa } from "execa";
5
+ import yauzl from "yauzl";
6
+ import { BUNDLE_DIRS, SUPERVISOR_ENTRY, MANIFEST_FILE, RUNTIME_FILES } from "./layout.js";
7
+ import { hashFile, readManifest } from "./manifest.js";
8
+ export function classifySource(path) {
9
+ return { path, isArchive: path.toLowerCase().endsWith(".zip") };
10
+ }
11
+ /** يقرأ البيان من أرشيف بلا فكّه — نحتاجه للتحقّق من المنصّة قبل أي كتابة. */
12
+ export function manifestFromArchive(file) {
13
+ return new Promise((resolvePromise, rejectPromise) => {
14
+ yauzl.open(file, { lazyEntries: true }, (error, zip) => {
15
+ if (error || !zip)
16
+ return rejectPromise(error ?? new Error("the archive could not be opened"));
17
+ const wanted = MANIFEST_FILE.replace(/\\/g, "/");
18
+ let found = false;
19
+ zip.on("entry", (entry) => {
20
+ if (entry.fileName !== wanted) {
21
+ zip.readEntry();
22
+ return;
23
+ }
24
+ found = true;
25
+ zip.openReadStream(entry, (streamError, stream) => {
26
+ if (streamError || !stream)
27
+ return rejectPromise(streamError ?? new Error("unreadable manifest"));
28
+ const chunks = [];
29
+ stream.on("data", (chunk) => chunks.push(chunk));
30
+ stream.on("end", () => {
31
+ try {
32
+ resolvePromise(JSON.parse(Buffer.concat(chunks).toString("utf8")));
33
+ }
34
+ catch {
35
+ resolvePromise(undefined);
36
+ }
37
+ zip.close();
38
+ });
39
+ stream.on("error", rejectPromise);
40
+ });
41
+ });
42
+ zip.on("end", () => {
43
+ if (!found)
44
+ resolvePromise(undefined);
45
+ });
46
+ zip.on("error", rejectPromise);
47
+ zip.readEntry();
48
+ });
49
+ });
50
+ }
51
+ /**
52
+ * AR: هل نملك صلاحيات المسؤول؟ الدليل عمليّ لا نظريّ: نحاول فتح مفتاح سِجل لا يُفتَح للكتابة إلّا
53
+ * بها. سؤال ويندوز عن «الدور» يكذب تحت UAC، والمحاولة تصدق.
54
+ * EN: Do we hold administrator rights? The evidence is practical rather than declared: we try to open
55
+ * a registry key that only opens for writing with them. Asking Windows about the "role" lies under
56
+ * UAC; attempting the thing tells the truth.
57
+ */
58
+ export async function hasAdminRights() {
59
+ if (process.platform !== "win32")
60
+ return true;
61
+ try {
62
+ await execa("powershell.exe", [
63
+ "-NoProfile",
64
+ "-NonInteractive",
65
+ "-Command",
66
+ "try { [void][Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment', $true); exit 0 } catch { exit 1 }",
67
+ ], { timeout: 15_000 });
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ /**
75
+ * الفحوص قبل الكتابة. تُعيد قائمة، والأمر يرفض إن كان فيها فشل واحد.
76
+ */
77
+ export async function preInstallChecks(input) {
78
+ const checks = [];
79
+ // ١ — المصدر موجود.
80
+ if (!existsSync(input.source.path)) {
81
+ checks.push({
82
+ name: "Source",
83
+ ok: false,
84
+ detail: `not found: ${input.source.path}`,
85
+ remedy: "Check the path passed to --from.",
86
+ });
87
+ return checks;
88
+ }
89
+ checks.push({ name: "Source", ok: true, detail: input.source.isArchive ? "archive" : "directory" });
90
+ // ٢ — البصمة إن أُعطيت. تكشف تلف النقل، ولا تثبت الأصالة (لا توقيع بعد).
91
+ if (input.source.isArchive && input.expectedSha256) {
92
+ const actual = hashFile(input.source.path);
93
+ const matches = actual === input.expectedSha256;
94
+ checks.push({
95
+ name: "Archive fingerprint",
96
+ ok: matches,
97
+ detail: matches ? "matches" : "does not match",
98
+ remedy: matches ? undefined : "The archive was damaged in transfer. Copy it again.",
99
+ });
100
+ }
101
+ // ٣ — البيان والمنصّة. عدم التطابق **يرفض** ولا يحذّر: حزمة لمنصّة أخرى لن تعمل أبدًا.
102
+ const manifest = input.source.isArchive
103
+ ? await manifestFromArchive(input.source.path)
104
+ : readManifest(input.source.path);
105
+ if (!manifest) {
106
+ checks.push({
107
+ name: "Bundle manifest",
108
+ ok: false,
109
+ detail: "missing or unreadable",
110
+ remedy: "This is not a Fantastic bundle, or it was produced by an older CLI.",
111
+ });
112
+ }
113
+ else {
114
+ const platformOk = manifest.bundle.platform === "win32-x64";
115
+ checks.push({
116
+ name: "Platform",
117
+ ok: platformOk,
118
+ detail: manifest.bundle.platform,
119
+ remedy: platformOk ? undefined : "This bundle targets another platform. Build one for win32-x64.",
120
+ });
121
+ if (manifest.bundle.unverified) {
122
+ checks.push({
123
+ name: "Verification",
124
+ ok: false,
125
+ detail: "this bundle was produced with --skip-smoke and never booted",
126
+ remedy: "Rebuild without --skip-smoke. An unverified bundle must not reach a customer.",
127
+ });
128
+ }
129
+ }
130
+ // ٤ — لا تثبيت سابق. الترقية في المكان هي ميزة التحديثات المؤجَّلة، لا هذه.
131
+ const installed = existsSync(join(input.root, BUNDLE_DIRS.core, "main.js"));
132
+ checks.push({
133
+ name: "Prior installation",
134
+ ok: !installed,
135
+ detail: installed ? `already installed at ${input.root}` : "none",
136
+ remedy: installed
137
+ ? "Remove it first (fantastic uninstall keeps data/ by default), or install to another --root."
138
+ : undefined,
139
+ });
140
+ // AR: ٥ — الصلاحيات. **يُعلَن قبل الكتابة لا بعدها.** التثبيت بلا صلاحيات مسؤول ينجح في كل شيء
141
+ // إلّا تسجيل ‎PATH‎، فينتهي بنظام يعمل وأمرٍ لا يعرفه ويندوز — والفنّي لا يملك ما يربط بينهما.
142
+ // وهو **ليس فشلًا حاجبًا**: النظام يعمل بمساره الكامل، وإجبار المسؤول على كل تثبيت ثمنٌ أكبر
143
+ // من فائدته. فيُقال هنا صراحةً ليَعرف قبل أن يبدأ.
144
+ // EN: 5 — rights. **Stated before writing, not after.** An install without administrator rights
145
+ // succeeds at everything except registering PATH, ending with a working system and a command
146
+ // Windows does not know — and the technician has nothing connecting the two. It is **not
147
+ // blocking**: the system runs by its full path, and forcing an elevated prompt on every install
148
+ // costs more than it earns. So it is said here, plainly, before anything begins.
149
+ checks.push({
150
+ name: "Administrator",
151
+ ok: true,
152
+ detail: input.elevated ? "yes · PATH will be registered" : "no · the `fantastic` command will need its full path",
153
+ remedy: input.elevated
154
+ ? undefined
155
+ : "Run install.cmd from a terminal opened as administrator if you want the bare `fantastic` command to work.",
156
+ });
157
+ // ٦ — المنافذ، كلّها. العلاج يسمّي العَلَم الذي يغيّر هذا المنفذ بعينه لا علمًا عامًّا.
158
+ for (const required of input.ports) {
159
+ checks.push({
160
+ name: `Port ${required.port}`,
161
+ ok: required.free,
162
+ detail: required.free ? `free · ${required.label}` : `in use · needed by ${required.label}`,
163
+ remedy: required.free ? undefined : `Free it, or install with ${required.flag} <other>.`,
164
+ });
165
+ }
166
+ return checks;
167
+ }
168
+ /** يفكّ أرشيف حزمة إلى الجذر، رافضًا أي مدخل يخرج منه. */
169
+ export async function extractBundle(archive, root) {
170
+ const zip = await new Promise((resolvePromise, rejectPromise) => {
171
+ yauzl.open(archive, { lazyEntries: true, autoClose: false }, (error, handle) => {
172
+ if (error || !handle)
173
+ rejectPromise(error ?? new Error("the archive could not be opened"));
174
+ else
175
+ resolvePromise(handle);
176
+ });
177
+ });
178
+ let written = 0;
179
+ const rootResolved = resolve(root);
180
+ await new Promise((resolvePromise, rejectPromise) => {
181
+ zip.on("entry", (entry) => {
182
+ if (entry.fileName.endsWith("/")) {
183
+ zip.readEntry();
184
+ return;
185
+ }
186
+ const target = resolve(root, entry.fileName);
187
+ // نفس فحص الهروب في الاستعادة، وللسبب نفسه: اسمٌ داخل أرشيف يصير مسارًا على القرص هنا.
188
+ if (target !== rootResolved && !normalize(target).startsWith(rootResolved + sep)) {
189
+ zip.readEntry();
190
+ return;
191
+ }
192
+ zip.openReadStream(entry, (error, stream) => {
193
+ if (error || !stream)
194
+ return rejectPromise(error ?? new Error(`unreadable: ${entry.fileName}`));
195
+ mkdirSync(dirname(target), { recursive: true });
196
+ streamPipeline(stream, createWriteStream(target))
197
+ .then(() => {
198
+ written += 1;
199
+ zip.readEntry();
200
+ })
201
+ .catch(rejectPromise);
202
+ });
203
+ });
204
+ zip.on("end", () => resolvePromise());
205
+ zip.on("error", rejectPromise);
206
+ zip.readEntry();
207
+ });
208
+ zip.close();
209
+ return written;
210
+ }
211
+ /**
212
+ * AR: ينسخ مجلد حزمة مفكوك، **مُكوِّنًا مُكوِّنًا لا شجرةً واحدة**، و‎data/‎ لا يُنسَخ إطلاقًا.
213
+ *
214
+ * كان هذا نداءً واحدًا على الجذر كلّه. وقد فشل فشلًا صامتًا حين تكون الوجهة تحوي ‎data/‎ عامرًا:
215
+ * العملية تموت بلا استثناء يُلتقَط وبلا سطر في السجلّ، ولا يُنسَخ بايت — بينما النسخ إلى مجلد
216
+ * فارغ ينجح، والنسخ مُكوِّنًا مُكوِّنًا إلى الوجهة **نفسها** ينجح. (قِيس على ويندوز أثناء ٠١٨؛
217
+ * السبب الجذري لم يُحسَم — عملية النسخ الضخمة قد تكون أوقفها دفاعٌ على الجهاز — لكن الشكل الذي
218
+ * يعمل معلوم ومُثبَت.)
219
+ *
220
+ * وللشكل الجديد فائدتان تتجاوزان تفادي العطب:
221
+ * ١ — **‎data/‎ يُستثنى صراحةً** بدل الاتّكال على أن دمج مجلد فارغ فوق مكتبة العميل غير مؤذٍ.
222
+ * القاعدة الرابعة تصير سطرًا في الشيفرة لا نتيجةً عرَضية.
223
+ * ٢ — الفشل يُنسَب إلى مكوّنه، فيقول الخطأ **أيّ** جزء تعذّر بدل «تعذّر النسخ».
224
+ * EN: Copies an extracted bundle directory, **component by component rather than as one tree**, and
225
+ * `data/` is never copied at all.
226
+ *
227
+ * This used to be a single call on the whole root. It failed silently when the destination held a
228
+ * populated `data/`: the process died with no catchable exception and no log line, and not one
229
+ * byte was copied — while copying into an empty directory succeeded, and copying component by
230
+ * component into the **same** destination succeeded. (Measured on Windows during 018; the root
231
+ * cause is unresolved — a security product may have stopped the bulk write — but the shape that
232
+ * works is known and proven.)
233
+ *
234
+ * The new shape earns two things beyond avoiding the fault:
235
+ * 1 — **`data/` is excluded explicitly** rather than relying on merging an empty directory over a
236
+ * customer's library being harmless. Rule IV becomes a line of code, not an incidental
237
+ * outcome.
238
+ * 2 — A failure names its component, so the error says **which** part could not be copied instead
239
+ * of "the copy failed".
240
+ */
241
+ export function copyBundle(source, root) {
242
+ mkdirSync(root, { recursive: true });
243
+ for (const entry of readdirSync(source)) {
244
+ if (entry === BUNDLE_DIRS.data)
245
+ continue;
246
+ try {
247
+ cpSync(join(source, entry), join(root, entry), { recursive: true, dereference: true });
248
+ }
249
+ catch (error) {
250
+ throw new Error(`could not copy ${entry}: ${error instanceof Error ? error.message : String(error)}`);
251
+ }
252
+ }
253
+ // مجلد بيانات فارغ لأوّل تثبيت، وبلا مساس بما وُجد: ‎mkdir‎ على قائم لا يفعل شيئًا.
254
+ mkdirSync(join(root, BUNDLE_DIRS.data), { recursive: true });
255
+ }
256
+ /**
257
+ * AR: ما الذي ينقص شجرةً كي تُعدّ حزمةً مكتملة؟ **سؤال المُثبِّت، فانتقل معه** (٠٢٦).
258
+ *
259
+ * كانت هذه القائمة في خطّ الإنتاج (‎packaging/pipeline.ts‎) لأن الباني كان يقرأها ليتحقّق ممّا
260
+ * أنتج. وقد افترق المستودعان: الباني في مستودع المنتج، والمُثبِّت هنا. وموضعها الصحيح **حيث
261
+ * يُقرأ الجواب لا حيث يُكتب**: الحزمة تُبنى مرّةً وتُقرأ على أجهزةٍ كثيرة لسنوات.
262
+ *
263
+ * وتُفحَص بعد الفكّ وقبل تشغيل أيّ خدمة، فأرشيفٌ وصل ناقصًا يُوقف التثبيت ويُتراجَع عنه بدل
264
+ * أن يُنتج جهازًا نصف مركَّب يفشل عند أول مشاهد.
265
+ * EN: What must a tree contain before it counts as a complete bundle? **The installer's question, so
266
+ * it travelled with the installer** (026).
267
+ *
268
+ * This list used to live in the production pipeline (`packaging/pipeline.ts`), because the
269
+ * builder read it to verify what it had produced. The repositories have since separated: the
270
+ * builder lives in the product repository and the installer here. Its right home is **where the
271
+ * answer is read, not where it is written**: a bundle is built once and read on many machines
272
+ * for years.
273
+ *
274
+ * It runs after extraction and before any service starts, so an archive that arrived incomplete
275
+ * stops the install and is rolled back, rather than producing a half-assembled appliance that
276
+ * fails in front of the first viewer.
277
+ */
278
+ export function verifyInstalled(root) {
279
+ const required = [
280
+ join(BUNDLE_DIRS.runtime, RUNTIME_FILES.node),
281
+ join(BUNDLE_DIRS.core, "main.js"),
282
+ join(BUNDLE_DIRS.live, "main.js"),
283
+ join(BUNDLE_DIRS.interfaceClient, "index.html"),
284
+ SUPERVISOR_ENTRY,
285
+ ];
286
+ return required.filter((relative) => !existsSync(join(root, relative)));
287
+ }
288
+ /**
289
+ * التراجع: يزيل ما كُتب ويترك ‎data/‎ كما كان.
290
+ *
291
+ * يُستدعى عند أي فشل **قبل** بدء الخدمات، فتعود الآلة إلى حالتها السابقة بدل أن تبقى نصف مثبَّتة.
292
+ */
293
+ /**
294
+ * AR: **التراجع لا يُفشِل نفسه، ولا يحجب سبب الفشل الذي استدعاه.**
295
+ *
296
+ * كان يرمي عند أوّل ملفّ متعذّر، وهو يجري داخل ‎catch‎ الأصلي — فيحلّ خطؤه محلّ الخطأ الحقيقي:
297
+ * يقرأ الفنّي «‎EBUSY … fantastic.db‎» ولا يعرف شيئًا عمّا فشل أصلًا. والأسوأ أن الحلقة تتوقّف
298
+ * عند ذلك الملفّ، فتبقى الشجرة **نصف محذوفة**: بعض المكوّنات ذهب وبعضها بقي — وهي الحالة التي
299
+ * وُجد التراجع ليمنعها.
300
+ * وسبب ‎EBUSY‎ معروف ومتوقَّع: عملية بدأت للتوّ ثم تعثّر إقلاعها ما تزال تمسك قاعدة البيانات
301
+ * لحظاتٍ بعد قتلها. إعادة المحاولة تكفي، وما يبقى متعذّرًا يُبلَّغ عنه ولا يُخفى.
302
+ * EN: **The rollback neither fails itself nor hides the failure that summoned it.**
303
+ *
304
+ * It used to throw on the first stubborn file, and it runs inside the original `catch` — so its
305
+ * error replaced the real one: the technician reads "EBUSY … fantastic.db" and learns nothing
306
+ * about what actually failed. Worse, the loop stopped at that file, leaving the tree **half
307
+ * deleted**: some components gone, others left — precisely the state a rollback exists to prevent.
308
+ * And the cause of that EBUSY is known and expected: a process that had just started and then
309
+ * failed to come up still holds the database for a moment after being killed. Retrying is enough,
310
+ * and whatever remains is reported rather than concealed.
311
+ */
312
+ export function rollbackInstall(root, dataExistedBefore) {
313
+ if (!existsSync(root))
314
+ return [];
315
+ const stubborn = [];
316
+ for (const entry of readdirSync(root)) {
317
+ // بيانات العميل لا تُحذف في التراجع إن كانت موجودة قبله.
318
+ if (entry === BUNDLE_DIRS.data && dataExistedBefore)
319
+ continue;
320
+ try {
321
+ rmSync(join(root, entry), { recursive: true, force: true, maxRetries: 5, retryDelay: 300 });
322
+ }
323
+ catch {
324
+ stubborn.push(entry);
325
+ }
326
+ }
327
+ return stubborn;
328
+ }
329
+ /** ما تُزيله الإزالة وما تُبقيه. ‎data/‎ يبقى ما لم يُطلَب حذفه صراحةً. */
330
+ export function planRemoval(root, purge) {
331
+ const removed = [];
332
+ const kept = [];
333
+ if (!existsSync(root))
334
+ return { removed, kept };
335
+ for (const entry of readdirSync(root)) {
336
+ if (entry === BUNDLE_DIRS.data && !purge)
337
+ kept.push(entry);
338
+ else
339
+ removed.push(entry);
340
+ }
341
+ return { removed, kept };
342
+ }
343
+ /**
344
+ * AR: ينفّذ الخطة ويعيد ما تعذّر حذفه. **لا يتوقّف عند أول عثرة**: التوقّف يترك الشجرة نصف محذوفة —
345
+ * الشيمة والواجهة ذهبتا والخدمات باقية — وهي حالة لا يستطيع الفنّي أن يصلحها بأمر، لأن الأمر
346
+ * الذي يصلحها هو ما حُذف للتوّ. يُحذَف ما يمكن، ويُسمَّى ما بقي، فيبقى القرار بيد قارئٍ يعرف.
347
+ * EN: Applies the plan and returns whatever could not be deleted. **It does not stop at the first
348
+ * stumble**: stopping leaves the tree half removed — the shim and the CLI gone, the services still
349
+ * there — a state the technician cannot repair with a command, because the command that would
350
+ * repair it is the one just deleted. What can go, goes; what remains is named, leaving the
351
+ * decision with a reader who knows.
352
+ */
353
+ export function applyRemoval(root, plan) {
354
+ const stubborn = [];
355
+ for (const entry of plan.removed) {
356
+ try {
357
+ rmSync(join(root, entry), { recursive: true, force: true, maxRetries: 5, retryDelay: 300 });
358
+ }
359
+ catch {
360
+ stubborn.push(entry);
361
+ }
362
+ }
363
+ return stubborn;
364
+ }
365
+ /** حجم شجرة للتقرير. */
366
+ export function sizeOf(root) {
367
+ let bytes = 0;
368
+ const walk = (dir) => {
369
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
370
+ const full = join(dir, entry.name);
371
+ if (entry.isDirectory())
372
+ walk(full);
373
+ else if (entry.isFile())
374
+ bytes += statSync(full).size;
375
+ }
376
+ };
377
+ if (existsSync(root))
378
+ walk(root);
379
+ return bytes;
380
+ }
381
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/packaging/install.ts"],"names":[],"mappings":"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"}