@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,60 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class Install extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ /**
6
+ * AR: اسم المنتج، **موضعيًّا لا بعَلَم** (٠٢٦). ‎fantastic install estraha‎ هي الجملة التي
7
+ * تُقال في مكالمة دعمٍ وتُكتب في دليل؛ و‎--product estraha‎ جملةٌ يكتبها من يقرأ مساعدة.
8
+ *
9
+ * واختياريّ: جهازٌ واحدٌ يُثبَّت اليوم، ومن كتب ‎install --from file.zip‎ في سكربتٍ قديم يجب
10
+ * أن يبقى سكربته يعمل حرفيًّا.
11
+ * EN: The product name, **positional rather than a flag** (026). `fantastic install estraha` is
12
+ * the sentence said in a support call and written in a manual; `--product estraha` is one
13
+ * written by someone reading a help page.
14
+ *
15
+ * Optional: one product is installed today, and whoever wrote `install --from file.zip` in an
16
+ * old script must find it working verbatim.
17
+ */
18
+ static args: {
19
+ product: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
20
+ };
21
+ static flags: {
22
+ from: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ code: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ root: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ port: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ "live-port": import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
28
+ sha256: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
+ };
30
+ run(): Promise<void>;
31
+ /**
32
+ * AR: يقتني الحزمة من المنصّة المركزية، ويعيد مسار الملفّ المنزَّل (٠٢٦/US1).
33
+ *
34
+ * **الترتيب هو الأمان، لا التنظيم** — نفس قاعدة ‎update.ts‎:
35
+ * ١ — الكود. بلا نداءٍ شبكيّ إن لم يوجد كود أصلًا.
36
+ * ٢ — ‎/latest‎: الإصدار والبصمة والحجم واشتراط الواجهة. **البصمة قبل البايتات.**
37
+ * ٣ — فحص التوافق. **قبل التنزيل**: نصف غيغابايت لا يُركَّب لا يجوز أن يُنزَّل أصلًا.
38
+ * ٤ — التنزيل باستئناف.
39
+ * ٥ — مطابقة البصمة. وما لا يطابق لا يُركَّب، ويُحذف إن كان الحجم صحيحًا (تبديلٌ أو تلف).
40
+ *
41
+ * وكلّ فشلٍ هنا يقع **قبل أن يُكتب بايتٌ واحد في مجلد التثبيت**.
42
+ * EN: Acquires the bundle from the central platform and returns the downloaded file's path
43
+ * (026/US1).
44
+ *
45
+ * **The order is the safety, not the tidiness** — `update.ts`'s rule:
46
+ * 1 — the code. No network call at all if there is none.
47
+ * 2 — `/latest`: version, digest, size and the CLI requirement. **The digest before the bytes.**
48
+ * 3 — the compatibility check. **Before downloading**: half a gigabyte that cannot be installed
49
+ * must never be downloaded.
50
+ * 4 — the download, with resumption.
51
+ * 5 — the digest comparison. What does not match is not installed, and is deleted when the size
52
+ * was right (substitution or corruption).
53
+ *
54
+ * Every failure here happens **before a single byte is written into the install directory**.
55
+ */
56
+ private acquire;
57
+ /** بيانات المالك إن طبعتها النواة في هذا الإقلاع. الصياغة نفسها في ‎setup‎: افتراضية تُغيَّر. */
58
+ private showCredentials;
59
+ }
60
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAgDjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW;IAC9C,MAAM,CAAC,WAAW,SAA6D;IAE/E,MAAM,CAAC,QAAQ,WAIb;IAEF;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,IAAI;;MAET;IAEF,MAAM,CAAC,KAAK;;;;;;;;MAqBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAkS1B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;YACW,OAAO;IA8GrB,iGAAiG;IACjG,OAAO,CAAC,eAAe;CAiBxB"}
@@ -0,0 +1,486 @@
1
+ import { existsSync, mkdirSync, statSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { Args, Flags } from "@oclif/core";
4
+ import boxen from "boxen";
5
+ import ora from "ora";
6
+ import { BaseCommand } from "../base-command.js";
7
+ import { APPLIANCE_DEFAULTS, APPLIANCE_ROOT, createApplianceProfile } from "../profiles/appliance.profile.js";
8
+ import { BUNDLE_DIRS, SHIM_FILES } from "../packaging/layout.js";
9
+ import { writeCommandShim } from "../packaging/shims.js";
10
+ import { registerBootTask } from "../packaging/boot-task.js";
11
+ import { classifySource, copyBundle, extractBundle, hasAdminRights, preInstallChecks, rollbackInstall, verifyInstalled, } from "../packaging/install.js";
12
+ import { isPortFree } from "../probes/port.probe.js";
13
+ import { runCoreScript, extractOwnerCredentials } from "../core-scripts/run.js";
14
+ import { startServices, stopServices } from "../supervisor/orchestrator.js";
15
+ import { readTail } from "../logs/tail.js";
16
+ import { renderBrand } from "../render/brand.js";
17
+ import { renderUrls } from "../render/boot.render.js";
18
+ import { buildEnvelope, renderJson } from "../render/json.js";
19
+ import { c, glyph, isTty } from "../render/theme.js";
20
+ import { SingleBar, Presets } from "cli-progress";
21
+ import { readActivationCode } from "../acquire/code.js";
22
+ import { fetchLatest, CentralRefused } from "../acquire/latest.js";
23
+ import { downloadBundle, discardPartial } from "../acquire/fetch.js";
24
+ import { checkCompatibility } from "../acquire/compatibility.js";
25
+ import { resolveCentralUrl } from "../acquire/central-url.js";
26
+ import { verifyChecksum } from "../updating/verify.js";
27
+ import { recordInstall } from "../registry/local-registry.js";
28
+ import { installerStamp } from "../version.js";
29
+ import { readManifest } from "../packaging/manifest.js";
30
+ import { EXIT } from "../exit-codes.js";
31
+ /**
32
+ * AR: المنتج المفترَض حين لا يُسمّى. منتجٌ واحدٌ اليوم، والاسم يُكتب منذ الآن كي لا يتغيّر
33
+ * سطحُ الأمر يوم يوجد الثاني.
34
+ * EN: The product assumed when none is named. One product today, and the name is written from now
35
+ * so the command's surface does not change the day a second one exists.
36
+ */
37
+ const DEFAULT_PRODUCT = "estraha";
38
+ // AR: يُركّب حزمة على هذه الآلة. **يتحقّق قبل أن يكتب، ويتراجع إن فشل قبل تشغيل الخدمات.**
39
+ // ‎data/‎ لا يُلمَس إن كان موجودًا: إعادة تثبيت فوق جهاز عامل لا يجوز أن تمحو مكتبة عميل.
40
+ // EN: Installs a bundle on this machine. **It verifies before writing, and rolls back if it fails
41
+ // before the services start.** data/ is left alone when it exists: reinstalling over a working
42
+ // appliance must never erase a customer's library.
43
+ export default class Install extends BaseCommand {
44
+ static description = "Install a bundle: verify, extract, migrate, seed, start";
45
+ static examples = [
46
+ "<%= config.bin %> install estraha",
47
+ "<%= config.bin %> install estraha --code FT-XXXX-XXXX --port 8080",
48
+ "<%= config.bin %> install estraha --from .\\Fantastic-0.18.0-win-x64.zip",
49
+ ];
50
+ /**
51
+ * AR: اسم المنتج، **موضعيًّا لا بعَلَم** (٠٢٦). ‎fantastic install estraha‎ هي الجملة التي
52
+ * تُقال في مكالمة دعمٍ وتُكتب في دليل؛ و‎--product estraha‎ جملةٌ يكتبها من يقرأ مساعدة.
53
+ *
54
+ * واختياريّ: جهازٌ واحدٌ يُثبَّت اليوم، ومن كتب ‎install --from file.zip‎ في سكربتٍ قديم يجب
55
+ * أن يبقى سكربته يعمل حرفيًّا.
56
+ * EN: The product name, **positional rather than a flag** (026). `fantastic install estraha` is
57
+ * the sentence said in a support call and written in a manual; `--product estraha` is one
58
+ * written by someone reading a help page.
59
+ *
60
+ * Optional: one product is installed today, and whoever wrote `install --from file.zip` in an
61
+ * old script must find it working verbatim.
62
+ */
63
+ static args = {
64
+ product: Args.string({ description: "Product to install (default: estraha)", required: false }),
65
+ };
66
+ static flags = {
67
+ // AR: **لم يعد إلزاميًّا** (٠٢٦): بلا ‎--from‎ تُقتنى الحزمة من المنصّة. وبقاؤه هو الطريق
68
+ // المعزول كاملًا — ملفٌّ على ذاكرةٍ محمولة، بلا سِجلٍّ ولا مركز.
69
+ // EN: **No longer required** (026): without `--from` the bundle is acquired from the centre. Its
70
+ // survival is the entire offline path — a file on a USB stick, with no registry and no centre.
71
+ from: Flags.string({ description: "Install from a local archive or directory instead of the centre" }),
72
+ code: Flags.string({ description: "Activation code. Asked interactively when omitted." }),
73
+ root: Flags.string({ description: `Install location (default ${APPLIANCE_ROOT})` }),
74
+ port: Flags.integer({ description: `Viewer-facing port (default ${APPLIANCE_DEFAULTS.corePort})` }),
75
+ // AR: **كل خدمة يجب أن يكون منفذها قابلًا للضبط، لا النواة وحدها.** كان منفذ خدمة البثّ ثابتًا
76
+ // عند ‎8081‎ بلا عَلَم يغيّره، فأيّ تعارض عليه — جهاز ثانٍ على الآلة، أو برنامج آخر يحجزه —
77
+ // يُفشل التثبيت بعد الهجرات برسالة لا تسمّي السبب، ولا حيلة للفنّي إلّا تحرير المنفذ.
78
+ // EN: **Every service's port must be settable, not the core's alone.** The live service's port was
79
+ // pinned to 8081 with no flag to change it, so any conflict on it — a second appliance on the
80
+ // machine, or another program holding it — failed the install after the migrations with a
81
+ // message that named no cause, leaving the technician nothing to do but free the port.
82
+ "live-port": Flags.integer({
83
+ description: `Internal live-service port (default ${APPLIANCE_DEFAULTS.livePort})`,
84
+ }),
85
+ yes: Flags.boolean({ description: "Do not ask for confirmation.", default: false }),
86
+ sha256: Flags.string({ description: "Expected archive fingerprint, to detect transfer damage." }),
87
+ };
88
+ async run() {
89
+ const { args, flags } = await this.parse(Install);
90
+ const root = flags.root ?? APPLIANCE_ROOT;
91
+ const port = flags.port ?? APPLIANCE_DEFAULTS.corePort;
92
+ const livePort = flags["live-port"] ?? APPLIANCE_DEFAULTS.livePort;
93
+ const product = args.product ?? DEFAULT_PRODUCT;
94
+ // AR: **الاقتناء قبل أيّ فحصٍ للقرص، والفحوص بعده بلا تغيير.** ما بعد هذه السطور هو خطّ
95
+ // التثبيت كما كان منذ ٠١٧: يتحقّق قبل أن يكتب، ويتراجع إن فشل. وكلّ ما أضافته ٠٢٦ هو
96
+ // **من أين يأتي الملفّ**، لا ما يُفعل به.
97
+ // EN: **Acquisition first, then the disk checks unchanged.** Everything after these lines is the
98
+ // install path as it has stood since 017: verify before writing, roll back on failure. All
99
+ // 026 added is **where the file comes from**, not what is done with it.
100
+ let acquired;
101
+ if (!flags.from) {
102
+ acquired = await this.acquire(product, flags.code, flags.json);
103
+ if (!acquired)
104
+ return;
105
+ }
106
+ const source = classifySource(flags.from ?? acquired);
107
+ if (!flags.json) {
108
+ const brand = renderBrand({ profile: "install", root });
109
+ if (brand)
110
+ this.log(brand);
111
+ }
112
+ // ١ — الفحوص. كلّها قبل أي كتابة، ولكل منفذ تحتاجه خدمة لا لمنفذ النواة وحده.
113
+ const checks = await preInstallChecks({
114
+ source,
115
+ root,
116
+ expectedSha256: flags.sha256,
117
+ elevated: await hasAdminRights(),
118
+ ports: [
119
+ { label: "viewers", port, free: await isPortFree(port), flag: "--port" },
120
+ { label: "live service", port: livePort, free: await isPortFree(livePort), flag: "--live-port" },
121
+ ],
122
+ });
123
+ const failed = checks.filter((check) => !check.ok);
124
+ if (!flags.json) {
125
+ for (const check of checks) {
126
+ this.log(` ${check.ok ? c.ok(glyph.pass) : c.bad(glyph.fail)} ${check.name.padEnd(22)} ${c.dim(check.detail)}`);
127
+ if (!check.ok && check.remedy)
128
+ this.log(` ${c.accent(glyph.arrow)} ${check.remedy}`);
129
+ }
130
+ }
131
+ if (failed.length > 0) {
132
+ if (flags.json) {
133
+ this.log(renderJson(buildEnvelope({
134
+ command: "install",
135
+ data: { installed: false, checks },
136
+ problems: failed.map((check) => ({
137
+ id: `install.${check.name.toLowerCase().replace(/\s+/g, "-")}`,
138
+ severity: "fail",
139
+ message: `${check.name}: ${check.detail}`,
140
+ remedy: check.remedy ?? "",
141
+ })),
142
+ })));
143
+ }
144
+ this.exit(EXIT.FAILURE);
145
+ }
146
+ const dataExistedBefore = existsSync(join(root, BUNDLE_DIRS.data));
147
+ const spinner = ora({ isEnabled: isTty && !flags.json, discardStdin: false });
148
+ try {
149
+ // ٢ — الكتابة.
150
+ mkdirSync(root, { recursive: true });
151
+ spinner.start("extracting…");
152
+ const written = source.isArchive ? await extractBundle(source.path, root) : (copyBundle(source.path, root), 0);
153
+ spinner.stop();
154
+ this.log(` ${c.ok(glyph.pass)} Extracted${written ? ` ${written} files` : ""} → ${c.value(root)}`);
155
+ const incomplete = verifyInstalled(root);
156
+ if (incomplete.length > 0) {
157
+ throw new Error(`the installed tree is missing: ${incomplete.join(", ")}`);
158
+ }
159
+ // AR: ٣ — الشيمة. **قبل تشغيل الخدمات وبعد التحقّق من اكتمال ما نُسخ**: إن فشل ما بعدها
160
+ // أزالها التراجع مع بقيّة ما كُتب، وإن نجح فالأمر ‎fantastic‎ جاهز قبل أن يُطبع أي عنوان.
161
+ // مسارها صاعدٌ من موقعها، فتنتقل مع ‎--root‎ بلا تعديل.
162
+ // EN: 3 — the shim. **After verifying what was copied and before starting the services**: if
163
+ // anything later fails the rollback removes it with everything else written, and if all
164
+ // succeeds the `fantastic` command is ready before a single URL is printed. Its path climbs
165
+ // from its own location, so it travels with `--root` unedited.
166
+ const shim = writeCommandShim(root);
167
+ this.log(` ${c.ok(glyph.pass)} ${SHIM_FILES.command.padEnd(20)} ${c.dim(shim)}`);
168
+ // AR: ٤ — الإعدادات. المنفذان يُكتبان حيث يقرؤهما ملفّ التشغيل والنواة معًا. كان يُكتب منفذ
169
+ // النواة وحده، فمنفذ البثّ المُمرَّر يعمل في هذه الجلسة ثم يعود إلى ‎8081‎ عند أول تشغيل
170
+ // تالٍ — إعدادٌ يُقبَل ولا يدوم، وهو أسوأ من إعداد يُرفَض.
171
+ // EN: 4 — settings. Both ports are written where the profile and the core read them. Only the
172
+ // core's used to be written, so a live port passed at install worked for that session and
173
+ // reverted to 8081 on the next start — a setting accepted but not kept, which is worse than
174
+ // one refused.
175
+ writeFileSync(join(root, "config.json"), `${JSON.stringify({ corePort: port, livePort }, null, 2)}\n`, "utf8");
176
+ this.log(` ${c.ok(glyph.pass)} config.json ${c.dim(`viewers ${port} · live ${livePort}`)}`);
177
+ const profile = createApplianceProfile({
178
+ root,
179
+ corePort: port,
180
+ livePort,
181
+ logLevel: APPLIANCE_DEFAULTS.logLevel,
182
+ });
183
+ mkdirSync(profile.logDir, { recursive: true });
184
+ mkdirSync(profile.runDir, { recursive: true });
185
+ // ٥ — الهجرات قبل أي خدمة. نفس ترتيب ‎setup‎، وللسبب نفسه.
186
+ spinner.start("applying migrations…");
187
+ const migrated = await runCoreScript(profile, "db:migrate");
188
+ spinner.stop();
189
+ if (!migrated.ok)
190
+ throw new Error(`migrations failed:\n${migrated.output.split("\n").slice(-10).join("\n")}`);
191
+ this.log(` ${c.ok(glyph.pass)} Migrations applied`);
192
+ // ٦ — التشغيل. النواة تزرع المالك عند أول إقلاع.
193
+ spinner.start("starting services…");
194
+ const outcome = await startServices(profile, {
195
+ onStep: (definition, phase) => {
196
+ if (phase === "waiting")
197
+ spinner.text = `waiting for ${definition.label}…`;
198
+ },
199
+ });
200
+ spinner.stop();
201
+ if (!outcome.ok)
202
+ throw new Error("the services did not start");
203
+ this.log(` ${c.ok(glyph.pass)} Services started`);
204
+ // AR: ٧ — **تسجيل PATH سقط في ٠٢٦، وسقوطه هو الفائدة.**
205
+ //
206
+ // كان يُسجَّل ‎bin\‎ في PATH الآلة ليجد الفنّي الأمر ‎fantastic‎ بعد التثبيت. وقد صار
207
+ // الأمر يصله من ‎npm i -g‎ **قبل** أن يبدأ التثبيت أصلًا — فلا مُدخَل يُكتب في PATH الآلة،
208
+ // ولا رسالة «افتح طرفيةً جديدة»، ولا فحصَ تعارضٍ مع تثبيتٍ عالميّ. ثلاثُ تعقيداتٍ كانت
209
+ // لسببٍ واحد، وقد زال السبب.
210
+ //
211
+ // **والشيمة تبقى في ‎bin\‎**: مهمّة الإقلاع تناديها بمسارٍ مطلق ولا تحتاج PATH لتجدها.
212
+ // EN: 7 — **PATH registration was dropped in 026, and its dropping is the benefit.**
213
+ //
214
+ // `bin\` used to be registered on the machine PATH so the technician would find the
215
+ // `fantastic` command after installing. The command now reaches them from `npm i -g`
216
+ // **before** the installation even begins — so no entry is written to the machine's PATH,
217
+ // there is no "open a new terminal" message, and no conflict check against a global
218
+ // install. Three complications served one reason, and the reason is gone.
219
+ //
220
+ // **The shim stays in `bin\`**: the boot task calls it by an absolute path and needs no
221
+ // PATH to find it.
222
+ const binDir = join(root, BUNDLE_DIRS.bin);
223
+ // AR: ٨ — مهمة الإقلاع (٠٢٠/FR-012). موضعها هنا لنفس سبب PATH: هي الأثر الثاني خارج مجلد
224
+ // التثبيت، وتسجيلها مبكرًا يعني مهمّةً تشير إلى مجلد أزاله التراجع فتحاول تشغيله عند كل
225
+ // إقلاع. وفشلها لا يُفشل التثبيت: النظام يعمل، وما فات هو العودة التلقائية بعد انقطاع
226
+ // الكهرباء — يُعلَن هنا ويُعرَض في ‎doctor‎، ولا يُمحى تثبيت سليم لأجله.
227
+ // EN: 8 — the boot task (020/FR-012). It belongs here for the same reason PATH does: it is the
228
+ // second trace outside the install folder, and registering it early means a task pointing
229
+ // at a directory the rollback deleted, tried on every boot. Its failure does not fail the
230
+ // install: the system runs, and what was lost is the automatic return after a power cut —
231
+ // announced here and surfaced by `doctor`, never a reason to erase a sound installation.
232
+ const bootTask = await registerBootTask(root);
233
+ this.log(` ${bootTask.changed ? c.ok(glyph.pass) : c.dim("·")} Boot task ${c.dim(bootTask.detail)}`);
234
+ // AR: ٩ — سجلّ المثبَّت على الآلة (٠٢٦). **موضعه هنا لا قبله، ولنفس سبب PATH ومهمّة الإقلاع**:
235
+ // هو الأثر الثالث خارج مجلد التثبيت، وكتابته مبكرًا تعني قيدًا يشير إلى شجرةٍ أزالها
236
+ // التراجع — فيقول ‎status‎ لاحقًا إن هنا نظامًا، ولا نظام.
237
+ //
238
+ // وفشله لا يُفشل التثبيت: النظام يعمل، وما فات هو اختصارُ بحثٍ يُعاد بناؤه بالمسح.
239
+ // EN: 9 — the machine's installed-products registry (026). **It belongs here rather than
240
+ // earlier, for PATH's and the boot task's reason**: it is the third trace outside the
241
+ // install directory, and writing it early means an entry pointing at a tree the rollback
242
+ // deleted — so `status` later reports an appliance that is not there.
243
+ //
244
+ // Its failure does not fail the install: the system runs, and what was lost is a search
245
+ // shortcut that a rescan rebuilds.
246
+ let registered = false;
247
+ try {
248
+ const manifest = readManifest(root);
249
+ recordInstall({
250
+ id: product,
251
+ version: manifest?.bundle.version ?? "unknown",
252
+ root,
253
+ ports: { core: port, live: livePort },
254
+ installedAt: new Date().toISOString(),
255
+ installedBy: installerStamp(),
256
+ });
257
+ registered = true;
258
+ }
259
+ catch {
260
+ registered = false;
261
+ }
262
+ this.log(` ${registered ? c.ok(glyph.pass) : c.dim("·")} Registry ${c.dim(registered ? `${product} recorded` : "not written — status will find it by scanning")}`);
263
+ this.showCredentials(profile.logDir);
264
+ if (flags.json) {
265
+ this.log(renderJson(buildEnvelope({
266
+ command: "install",
267
+ profile,
268
+ data: {
269
+ installed: true,
270
+ root,
271
+ port,
272
+ livePort,
273
+ // AR: يبقى المسار في الجواب لأن سكربتات البوّابة تقرؤه، ويقول الآن ما يقوله فعلًا:
274
+ // الشيمة موجودة هنا، ولم يُمسّ PATH الآلة.
275
+ // EN: The path stays in the payload because gate scripts read it, and now says what
276
+ // is actually true: the shim is here, and the machine's PATH was not touched.
277
+ path: { entry: binDir, changed: false, detail: "shim only; the command comes from npm" },
278
+ bootTask,
279
+ },
280
+ })));
281
+ return;
282
+ }
283
+ this.log(renderUrls(profile));
284
+ this.log("");
285
+ // AR: **الرسالتان اللتان سقطتا في ٠٢٦، وسقوطهما تصحيحٌ لا اختصار.**
286
+ //
287
+ // الأولى كانت «افتح طرفيةً جديدة ثم اكتب ‎fantastic status‎»: PATH تُقرأ مرّةً عند بدء
288
+ // العملية، فالطرفية المفتوحة لا ترى المُدخَل الجديد. ولم يعد يُكتب مُدخَل، والأمر يعمل في
289
+ // هذه الطرفية نفسها لأنه كان يعمل قبل التثبيت.
290
+ //
291
+ // والثانية كانت تحذيرًا من «‎fantastic‎ آخر يفوز على PATH» وتطلب ‎npm uninstall -g‎.
292
+ // **صارت تصف الطريق المعتمد بأنه عطل**: النسخة العالمية هي الصحيحة اليوم، وهي التي
293
+ // تطبع هذا السطر.
294
+ // EN: **The two messages that fell away in 026, and their falling is a correction rather than a
295
+ // shortcut.**
296
+ //
297
+ // The first was "open a new terminal, then run `fantastic status`": PATH is read once when a
298
+ // process starts, so the open terminal cannot see the new entry. No entry is written any
299
+ // more, and the command works in this very terminal because it worked before the install.
300
+ //
301
+ // The second warned of "another `fantastic` winning on PATH" and asked for
302
+ // `npm uninstall -g`. **It had come to describe the supported path as a fault**: the global
303
+ // copy is the correct one today, and it is the one printing this line.
304
+ this.log(c.accent("fantastic status"));
305
+ this.log(c.dim(" يعمل من أيّ مجلد."));
306
+ this.log("");
307
+ this.log(c.dim("not activated — licensing arrives in a later feature. Everything else works."));
308
+ this.log(c.dim("verify anything: fantastic doctor"));
309
+ this.log("");
310
+ }
311
+ catch (error) {
312
+ spinner.stop();
313
+ // AR: ٨ — التراجع. **يوقف ما شُغِّل قبل أن يحذف ما كُتب.** كان يحذف مباشرةً، وقد تكون خدمةٌ
314
+ // بدأت فعلًا وتعثّرت جاهزيتها وحدها — فتبقى حيّة ممسكةً بقاعدة البيانات ومجلدها، فيفشل
315
+ // الحذف بـ‎EBUSY‎ ويترك الشجرة نصف ممحوّة **وعمليةً يتيمة تستمع على منفذ**. أسوأ من
316
+ // نصف تثبيت: نصف تثبيت يعمل بعضه.
317
+ // والإيقاف لا يُفشِل التراجع إن تعثّر هو الآخر: غايتنا تحرير الملفات، وما يبقى ممسوكًا
318
+ // يُبلَّغ عنه في السطر التالي.
319
+ // EN: 8 — the rollback. **It stops what was started before deleting what was written.** It used
320
+ // to delete straight away, and a service may in fact have started and only failed its
321
+ // readiness check — staying alive, holding the database and its own directory, so the delete
322
+ // failed with EBUSY and left the tree half erased **and an orphan process listening on a
323
+ // port**. Worse than half an installation: half an installation partly running.
324
+ // And a failure to stop does not fail the rollback: the aim is to release the files, and
325
+ // whatever stays held is reported on the next line.
326
+ await stopServices(createApplianceProfile({ root, corePort: port, livePort, logLevel: APPLIANCE_DEFAULTS.logLevel })).catch(() => undefined);
327
+ const stubborn = rollbackInstall(root, dataExistedBefore);
328
+ // **السبب الأصلي أوّلًا ووحده في السطر الأول.** ما يتعذّر حذفه يُذكر بعده كملاحظة، لا أن يحلّ
329
+ // محلّه — الفنّي يحتاج أن يعرف لماذا فشل التثبيت لا لماذا تعذّر حذف ملف أثناء تنظيفه.
330
+ const message = error instanceof Error ? error.message : String(error);
331
+ this.log("");
332
+ this.log(c.bad(`Installation failed: ${message}`));
333
+ this.log(c.dim(` rolled back — ${dataExistedBefore ? "data/ was left untouched" : "nothing was left behind"}`));
334
+ if (stubborn.length > 0) {
335
+ this.log(c.warn(` could not remove: ${stubborn.join(", ")} — a process may still hold them`));
336
+ this.log(c.dim(` delete ${root} by hand once nothing is running, then install again`));
337
+ }
338
+ this.exit(EXIT.FAILURE);
339
+ }
340
+ }
341
+ /**
342
+ * AR: يقتني الحزمة من المنصّة المركزية، ويعيد مسار الملفّ المنزَّل (٠٢٦/US1).
343
+ *
344
+ * **الترتيب هو الأمان، لا التنظيم** — نفس قاعدة ‎update.ts‎:
345
+ * ١ — الكود. بلا نداءٍ شبكيّ إن لم يوجد كود أصلًا.
346
+ * ٢ — ‎/latest‎: الإصدار والبصمة والحجم واشتراط الواجهة. **البصمة قبل البايتات.**
347
+ * ٣ — فحص التوافق. **قبل التنزيل**: نصف غيغابايت لا يُركَّب لا يجوز أن يُنزَّل أصلًا.
348
+ * ٤ — التنزيل باستئناف.
349
+ * ٥ — مطابقة البصمة. وما لا يطابق لا يُركَّب، ويُحذف إن كان الحجم صحيحًا (تبديلٌ أو تلف).
350
+ *
351
+ * وكلّ فشلٍ هنا يقع **قبل أن يُكتب بايتٌ واحد في مجلد التثبيت**.
352
+ * EN: Acquires the bundle from the central platform and returns the downloaded file's path
353
+ * (026/US1).
354
+ *
355
+ * **The order is the safety, not the tidiness** — `update.ts`'s rule:
356
+ * 1 — the code. No network call at all if there is none.
357
+ * 2 — `/latest`: version, digest, size and the CLI requirement. **The digest before the bytes.**
358
+ * 3 — the compatibility check. **Before downloading**: half a gigabyte that cannot be installed
359
+ * must never be downloaded.
360
+ * 4 — the download, with resumption.
361
+ * 5 — the digest comparison. What does not match is not installed, and is deleted when the size
362
+ * was right (substitution or corruption).
363
+ *
364
+ * Every failure here happens **before a single byte is written into the install directory**.
365
+ */
366
+ async acquire(product, codeFlag, json) {
367
+ const { url, source: urlSource } = resolveCentralUrl();
368
+ let code;
369
+ try {
370
+ code = await readActivationCode({ flag: codeFlag, interactive: isTty && !json });
371
+ }
372
+ catch (error) {
373
+ this.log("");
374
+ this.log(c.bad(error instanceof Error ? error.message : String(error)));
375
+ this.log("");
376
+ this.exit(EXIT.FAILURE);
377
+ return undefined;
378
+ }
379
+ if (!json)
380
+ this.log(`${c.dim("centre")} ${c.value(url)} ${c.dim(`(${urlSource})`)}`);
381
+ const spinner = ora({ isEnabled: isTty && !json, discardStdin: false });
382
+ let release;
383
+ try {
384
+ spinner.start("asking the centre…");
385
+ release = await fetchLatest(code, product);
386
+ spinner.stop();
387
+ }
388
+ catch (error) {
389
+ spinner.stop();
390
+ this.log("");
391
+ this.log(c.bad(error instanceof CentralRefused ? error.message : "تعذّر الوصول إلى المنصّة المركزية."));
392
+ if (!(error instanceof CentralRefused)) {
393
+ this.log(c.dim(" السبب شبكيّ. تحقّق من الاتصال، أو ثبّت من ملفٍّ محلّيّ: --from <ملف>"));
394
+ }
395
+ this.log("");
396
+ this.exit(EXIT.FAILURE);
397
+ return undefined;
398
+ }
399
+ const compatible = checkCompatibility(release.minCliVersion);
400
+ if (!compatible.ok) {
401
+ this.log("");
402
+ this.log(c.bad(compatible.message));
403
+ this.log(`${c.accent(glyph.arrow)} ${compatible.remedy}`);
404
+ this.log("");
405
+ this.exit(EXIT.FAILURE);
406
+ return undefined;
407
+ }
408
+ const megabytes = (release.sizeBytes / 1024 ** 2).toFixed(1);
409
+ if (!json) {
410
+ this.log(` ${c.ok(glyph.pass)} ${release.product} ${c.value(release.version)} ${c.dim(`· ${megabytes} MB`)}`);
411
+ }
412
+ const progress = new SingleBar({ format: " {bar} {percentage}% · {received}/{total} MB", clearOnComplete: true, hideCursor: true }, Presets.shades_classic);
413
+ let started = false;
414
+ let file;
415
+ try {
416
+ file = await downloadBundle({
417
+ code,
418
+ release,
419
+ onProgress: ({ received, total, resumed }) => {
420
+ if (json || !isTty)
421
+ return;
422
+ if (!started) {
423
+ started = true;
424
+ if (resumed)
425
+ this.log(c.dim(` resuming from ${(received / 1024 ** 2).toFixed(1)} MB`));
426
+ progress.start(Math.max(total, 1) / 1024 ** 2, received / 1024 ** 2);
427
+ }
428
+ progress.update(received / 1024 ** 2, {
429
+ received: (received / 1024 ** 2).toFixed(0),
430
+ total: (total / 1024 ** 2).toFixed(0),
431
+ });
432
+ },
433
+ });
434
+ progress.stop();
435
+ }
436
+ catch (error) {
437
+ progress.stop();
438
+ this.log("");
439
+ this.log(c.bad(error instanceof CentralRefused ? error.message : "انقطع التنزيل."));
440
+ this.log(c.dim(" أعِد الأمر — يستأنف من حيث توقّف."));
441
+ this.log("");
442
+ this.exit(EXIT.FAILURE);
443
+ return undefined;
444
+ }
445
+ const checksum = await verifyChecksum(file, release.sha256, release.sizeBytes);
446
+ if (!checksum.ok) {
447
+ // AR: **التفريق بين سببين بعلاجين.** ملفٌّ أقصر يعني اتصالًا قُطع، وعلاجه إعادة الأمر
448
+ // ليستأنف؛ وملفٌّ بالحجم الصحيح ببصمةٍ مختلفة يعني تبديلًا أو تلفًا، ولا يُصلحه استئناف
449
+ // — فيُحذف كي لا تُبنى المحاولة التالية عليه.
450
+ // EN: **Two causes told apart by their two remedies.** A shorter file means a cut connection,
451
+ // cured by running the command again to resume; a file of the right size with a different
452
+ // digest means substitution or corruption, which resuming cannot repair — so it is deleted
453
+ // rather than left for the next attempt to build on.
454
+ const sameSize = release.sizeBytes > 0 && statSync(file).size === release.sizeBytes;
455
+ if (sameSize)
456
+ discardPartial(release);
457
+ this.log("");
458
+ this.log(c.bad(checksum.message));
459
+ this.log(c.dim(sameSize ? " لا تُعِد التنزيل — بلّغ الدعم." : " أعِد الأمر ليُستأنف التنزيل."));
460
+ this.log("");
461
+ this.exit(EXIT.FAILURE);
462
+ return undefined;
463
+ }
464
+ if (!json)
465
+ this.log(` ${c.ok(glyph.pass)} Fingerprint matches`);
466
+ return file;
467
+ }
468
+ /** بيانات المالك إن طبعتها النواة في هذا الإقلاع. الصياغة نفسها في ‎setup‎: افتراضية تُغيَّر. */
469
+ showCredentials(logDir) {
470
+ const credentials = extractOwnerCredentials(readTail(logDir, "core", 200).join("\n"));
471
+ if (!credentials)
472
+ return;
473
+ const body = [
474
+ c.label("OWNER ACCOUNT — DEFAULT CREDENTIALS, CHANGE THEM"),
475
+ "",
476
+ ` user ${c.value(credentials.username)}`,
477
+ ` password ${c.accent(credentials.password)}`,
478
+ "",
479
+ c.dim(" Change it from the admin panel. Lost it? fantastic owner reset"),
480
+ ].join("\n");
481
+ this.log("");
482
+ this.log(boxen(body, { padding: 1, borderStyle: "double", borderColor: "yellow" }));
483
+ this.log("");
484
+ }
485
+ }
486
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from "../../base-command.js";
2
+ export default class IptvSnapshot extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ provider: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/commands/iptv/snapshot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAYpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,MAAM,CAAC,WAAW,SAAuC;IAEzD,MAAM,CAAC,QAAQ,WAAuC;IAEtD,MAAM,CAAC,KAAK;;MAEV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0C3B"}