@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,290 @@
1
+ import { existsSync, readdirSync } from "node:fs";
2
+ import { isAbsolute, join, relative, resolve } from "node:path";
3
+ import { Args, Flags } from "@oclif/core";
4
+ import { confirm, input } from "@inquirer/prompts";
5
+ import { BaseCommand } from "../base-command.js";
6
+ import { APPLIANCE_DEFAULTS, APPLIANCE_ROOT, createApplianceProfile } from "../profiles/appliance.profile.js";
7
+ import { findApplianceRoot } from "../profiles/resolve.js";
8
+ import { BUNDLE_DIRS } from "../packaging/layout.js";
9
+ import { applyRemoval, planRemoval, sizeOf } from "../packaging/install.js";
10
+ import { unregisterFromMachinePath } from "../packaging/machine-path.js";
11
+ import { BOOT_TASK_NAME, removeBootTask } from "../packaging/boot-task.js";
12
+ import { stopServices } from "../supervisor/orchestrator.js";
13
+ import { forgetInstall, readRegistry, resolveProduct } from "../registry/local-registry.js";
14
+ import { deactivateLicense } from "../probes/internal.client.js";
15
+ import { buildEnvelope, renderJson } from "../render/json.js";
16
+ import { c, formatBytes, glyph, isTty } from "../render/theme.js";
17
+ import { EXIT } from "../exit-codes.js";
18
+ // AR: إزالة نظيفة.
19
+ //
20
+ // **‎data/‎ يبقى افتراضيًا، وحذفه يحتاج ‎--purge‎ صريحًا.** هذا هو FR-026، وهو أهمّ سطر في الملف:
21
+ // مكتبةُ عميلٍ وإعداداته وشعاره لا تُمحى لأن أحدهم أراد ترقية. الافتراض الآمن هو الافتراض
22
+ // الصحيح هنا، والحذف قرارٌ يُتَّخذ لا نتيجةٌ تقع.
23
+ //
24
+ // **ونُزيل مُدخَل ‎PATH‎ الذي كتبه التثبيت** (٠١٨): ما كتبه التثبيت تُزيله الإزالة، وإلّا بقي على
25
+ // الجهاز مُدخَلٌ يشير إلى مجلد محذوف. ولا نلمس ما لم نكتبه: لا خدمات ويندوز ولا سواها.
26
+ // EN: Clean removal.
27
+ //
28
+ // **data/ survives by default; destroying it requires an explicit --purge.** That is FR-026, and
29
+ // it is the most important line in this file: a customer's library, settings and logo are not
30
+ // erased because somebody wanted to upgrade. The safe default is the correct default here, and
31
+ // deletion is a decision taken rather than an outcome that happens.
32
+ //
33
+ // **And we remove the PATH entry the installer wrote** (018): what the install wrote, the
34
+ // uninstall removes, or the machine keeps an entry pointing at a deleted folder. We touch nothing
35
+ // we did not write: no Windows service, nothing else.
36
+ export default class Uninstall extends BaseCommand {
37
+ static description = "Remove an installed appliance, keeping customer data unless told otherwise";
38
+ static examples = [
39
+ "<%= config.bin %> uninstall estraha",
40
+ "<%= config.bin %> uninstall estraha --purge",
41
+ ];
42
+ /** اسم المنتج، كما في ‎install‎. اختياريّ: يُستنتَج حين لا يكون على الآلة إلّا واحد. */
43
+ static args = {
44
+ product: Args.string({ description: "Product to remove. Inferred when only one is installed.", required: false }),
45
+ };
46
+ static flags = {
47
+ root: Flags.string({ description: `Installation location (default ${APPLIANCE_ROOT})` }),
48
+ purge: Flags.boolean({
49
+ description: "Also delete data/ — the database, settings, theme and owner assets. Irreversible.",
50
+ default: false,
51
+ }),
52
+ yes: Flags.boolean({ description: "Do not ask for confirmation.", default: false }),
53
+ };
54
+ /** هل تعمل هذه العملية من داخل الجذر الذي نزيله؟ الواجهة المشحونة تفعل، وويندوز يمنعها من حذف نفسها. */
55
+ runsFromInside(root) {
56
+ const step = relative(resolve(root), resolve(process.execPath));
57
+ return step !== "" && !step.startsWith("..") && !isAbsolute(step);
58
+ }
59
+ async run() {
60
+ const { args, flags } = await this.parse(Uninstall);
61
+ // AR: **الجهاز الذي نقف فيه، لا الموضع الافتراضي.** كان الأمر يأخذ ‎APPLIANCE_ROOT‎ مباشرة، بينما
62
+ // ‎status‎ و‎doctor‎ وكل ما عداه يتبع الملفّ المُستنتَج. فمن يقف في تثبيت على ‎D:\Fantastic‎
63
+ // ويكتب ‎uninstall‎ كان يمحو تثبيتًا آخر على ‎C:\Fantastic‎ — أمرٌ لا رجعة فيه يُنفَّذ على هدف
64
+ // لم يقصده أحد. وقد وقع هذا فعلًا أثناء تنفيذ ٠١٨.
65
+ // ‎--root‎ يبقى تجاوزًا صريحًا، والاستنتاج هو الافتراض — كما في كل أمر آخر.
66
+ // EN: **The appliance we are standing in, not the default location.** This command took
67
+ // `APPLIANCE_ROOT` directly, while `status`, `doctor` and everything else follow the resolved
68
+ // profile. So someone standing in an install at `D:\Fantastic` typing `uninstall` erased a
69
+ // different installation at `C:\Fantastic` — an irreversible action against a target nobody
70
+ // chose. This actually happened while 018 was being built.
71
+ // `--root` remains an explicit override, and resolution is the default — as everywhere else.
72
+ // AR: **السجلّ يعرف المنتجات بأسمائها، والمسح يعرف موضعًا واحدًا** (٠٢٦). فيُسأل السجلّ أولًا،
73
+ // ويبقى المسح لما لا يعرفه — جهازٌ ثُبِّت قبل ٠٢٦ ولا قيد له يُزال كما كان يُزال.
74
+ // EN: **The registry knows products by name; the scan knows one location** (026). The registry is
75
+ // asked first, and the scan remains for what it does not know — an appliance installed before
76
+ // 026, with no entry, is removed exactly as it always was.
77
+ const known = readRegistry().products;
78
+ const chosen = resolveProduct(known, args.product);
79
+ if (chosen.unknown && args.product) {
80
+ this.log("");
81
+ this.log(c.bad(`no product named "${args.product}" is installed here.`));
82
+ this.log(c.dim(` installed: ${known.map((row) => row.id).join(", ") || "nothing"}`));
83
+ this.log("");
84
+ this.exit(EXIT.FAILURE);
85
+ }
86
+ if (chosen.ambiguous) {
87
+ this.log("");
88
+ this.log(c.bad("more than one product is installed here — name the one to remove."));
89
+ for (const row of known)
90
+ this.log(c.dim(` · ${row.id} (${row.version}, ${row.root})`));
91
+ this.log("");
92
+ this.exit(EXIT.FAILURE);
93
+ }
94
+ const product = chosen.product?.id ?? args.product ?? "estraha";
95
+ const root = flags.root ?? chosen.product?.root ?? findApplianceRoot() ?? APPLIANCE_ROOT;
96
+ if (!existsSync(root) || readdirSync(root).length === 0) {
97
+ this.log(c.dim(`Nothing installed at ${root}.`));
98
+ return;
99
+ }
100
+ const plan = planRemoval(root, flags.purge);
101
+ const dataDir = join(root, BUNDLE_DIRS.data);
102
+ const dataBytes = existsSync(dataDir) ? sizeOf(dataDir) : 0;
103
+ if (flags.json) {
104
+ this.log(renderJson(buildEnvelope({
105
+ command: "uninstall",
106
+ data: { root, willRemove: plan.removed, willKeep: plan.kept, purge: flags.purge },
107
+ })));
108
+ if (!flags.yes)
109
+ return;
110
+ }
111
+ else {
112
+ this.log("");
113
+ this.log(`${c.dim("removing from:")} ${c.value(root)}`);
114
+ this.log(`${c.dim("will remove:")} ${plan.removed.join(", ") || "(nothing)"}`);
115
+ // يُعلَن ما سيُمَسّ خارج المجلد قبل التأكيد: تعديل PATH الآلة ليس تفصيلًا يُكتشَف بعد وقوعه.
116
+ this.log(`${c.dim("will also clear:")} the machine PATH entry for ${join(root, BUNDLE_DIRS.bin)}`);
117
+ this.log(`${c.dim(" ")} the "${BOOT_TASK_NAME}" scheduled task`);
118
+ if (plan.kept.length > 0) {
119
+ this.log(`${c.ok("will keep:")} ${plan.kept.join(", ")} ${c.dim(`(${formatBytes(dataBytes)})`)}`);
120
+ }
121
+ else if (flags.purge && dataBytes > 0) {
122
+ this.log(c.bad(`will DELETE customer data: ${formatBytes(dataBytes)} — this cannot be undone`));
123
+ }
124
+ this.log("");
125
+ }
126
+ // AR: **‎--yes‎ وحدها لا تكفي لحذف ‎data\‎** (٠٢٦/FR-018).
127
+ //
128
+ // ‎--yes‎ تعني «لا تسألني»، وهي في السكربتات شائعة ومعقولة. أمّا ‎--purge‎ فتعني «امحُ مكتبة
129
+ // العميل وقاعدته وإعداداته إلى غير رجعة»، وجمعُهما في سكربتٍ كُتب لغرضٍ آخر يمحو استراحةً
130
+ // عاملة بلا أن يقصد أحد. فحذف البيانات يشترط أن **يُكتب اسم المنتج بيد إنسان** — والاسم
131
+ // لا يُكتب سهوًا.
132
+ //
133
+ // ولا يُشترط ذلك على الإزالة العادية: هي قابلة للتراجع بإعادة تثبيت، والبيانات تبقى.
134
+ // EN: **`--yes` alone is not enough to delete `data\`** (026/FR-018).
135
+ //
136
+ // `--yes` means "do not ask me", which is common and reasonable in scripts. `--purge` means
137
+ // "erase the customer's library, database and settings irreversibly", and the two together
138
+ // inside a script written for another purpose erase a working rest-house with nobody
139
+ // intending it. So destroying data requires **the product's name typed by a human** — and a
140
+ // name is not typed by accident.
141
+ //
142
+ // Ordinary removal carries no such condition: it is undone by reinstalling, and the data
143
+ // stays.
144
+ if (flags.purge && !isTty) {
145
+ this.log("");
146
+ this.log(c.bad("‎--purge‎ يحذف بيانات العميل، ولا يُنفَّذ بلا طرفيةٍ يكتب فيها إنسان اسم المنتج."));
147
+ this.log(c.dim(` أزِل بلا ‎--purge‎، ثم احذف ${dataDir} بيدك إن كنت متأكّدًا.`));
148
+ this.log("");
149
+ this.exit(EXIT.FAILURE);
150
+ }
151
+ if (flags.purge) {
152
+ const typed = await input({
153
+ message: `اكتب اسم المنتج «${product}» لتأكيد حذف بيانات العميل في ${dataDir}:`,
154
+ });
155
+ if (typed.trim() !== product) {
156
+ this.log(c.dim("cancelled — nothing was removed."));
157
+ return;
158
+ }
159
+ }
160
+ else if (!flags.yes) {
161
+ const proceed = await confirm({
162
+ message: `Remove the installed product "${product}" from ${root}?`,
163
+ default: false,
164
+ });
165
+ if (!proceed) {
166
+ this.log(c.dim("cancelled — nothing was removed."));
167
+ return;
168
+ }
169
+ }
170
+ // AR: **تحرير المقعد أوّلًا، والخدمات ما زالت تعمل** (P4.4).
171
+ //
172
+ // ترتيبٌ لا يقبل التأخير: النداء يمرّ بالنواة، والنواة تُوقَف بعد أسطر. ولو أُخِّر إلى ما
173
+ // بعد الإيقاف لَما وُجد من يبلّغ المركز أصلًا — فيبقى المقعد محجوزًا لجهازٍ لم يعد
174
+ // موجودًا، ويصطدم العميل يومًا بسقفٍ لا يقابل واقعه ولا يستطيع أحد شرحه له.
175
+ //
176
+ // **وفشلُه لا يوقف الإزالة، تحذيرٌ فقط.** من يزيل نظامه قد يكون أزال إنترنته قبله؛
177
+ // وحبسُ الإزالة على نداء شبكة يترك المالك بنظام نصف مُزال لا يستطيع إتمامه ولا التراجع
178
+ // عنه. المقعد يُحرَّر عندئذٍ من لوحة الشركة، وهو إجراء دعمٍ من دقيقة.
179
+ // EN: **Free the seat first, while the services are still running** (P4.4).
180
+ //
181
+ // An order that cannot slip: the call goes through the core, and the core is stopped a few
182
+ // lines below. Deferred past the stop, there would be nobody left to tell the centre — the
183
+ // seat would stay held for a machine that no longer exists, and the customer would one day
184
+ // meet a limit that matches nothing in his reality and that nobody can explain.
185
+ //
186
+ // **And its failure warns rather than blocks.** Whoever is removing the system may have
187
+ // removed his internet first; gating the uninstall on a network call would leave the owner
188
+ // with a half-removed system he can neither finish nor undo. The seat is then freed from
189
+ // the company dashboard, a one-minute support action.
190
+ const seat = await this.releaseSeat(root);
191
+ // AR: PATH **قبل** حذف الملفات: مجلد ‎logs\‎ هو حيث تُحفَظ النسخة الاحتياطية من قيمة PATH، وهو
192
+ // ضمن ما سيُحذَف بعد سطور. عكسُ الترتيب يكتب النسخة في مجلد يزول فورًا، فيضيع ما وُضع
193
+ // ليُستَرجَع منه.
194
+ // EN: PATH **before** deleting files: `logs\` is where the PATH backup is written, and it is
195
+ // among what gets removed a few lines below. The reverse order writes the backup into a
196
+ // directory that vanishes immediately, losing the very thing kept for recovery.
197
+ const binDir = join(root, BUNDLE_DIRS.bin);
198
+ const pathChange = await unregisterFromMachinePath(binDir, join(root, BUNDLE_DIRS.logs));
199
+ // AR: **مهمة الإقلاع تُزال قبل الملفات** (٠٢٠/FR-013): مهمّةٌ باقية بعد الإزالة تحاول تشغيل
200
+ // ‎bin\fantastic.cmd‎ في مجلد لم يعد موجودًا **عند كل إقلاع لهذا الجهاز**، فتخلّف خطأً في
201
+ // سجلّ ويندوز إلى الأبد على آلة لم يعد لنا فيها شيء. ما يكتبه التثبيت تُزيله الإزالة.
202
+ // EN: **The boot task goes before the files** (020/FR-013): a task surviving the uninstall tries
203
+ // to run `bin\fantastic.cmd` in a directory that no longer exists **on every boot of that
204
+ // machine**, leaving a Windows error forever on a box where nothing of ours remains. What
205
+ // the install wrote, the uninstall removes.
206
+ const bootTask = await removeBootTask();
207
+ // AR: **الإيقاف جزء من الإزالة لا شرطٌ عليها.** كان الأمر يحذف والخدمات تعمل، فيفشل عند أول ملفّ
208
+ // تمسكه عملية حيّة (‎libvips-42.dll‎ عادةً) ويقول «أوقف الخدمات أولًا» — بعد أن يكون قد حذف
209
+ // الشيمة والواجهة، أي **بعد أن حذف الأمر الذي طلب من الفنّي أن يكتبه**. من يزيل نظامًا يريد
210
+ // إزالته، فنوقفه له.
211
+ // EN: **Stopping is part of removing, not a precondition for it.** The command used to delete
212
+ // while the services ran, fail at the first file a live process held (`libvips-42.dll`,
213
+ // typically) and say "stop the services first" — having already deleted the shim and the CLI,
214
+ // that is, **having deleted the very command it asked the technician to type**. Someone
215
+ // removing a system means to remove it, so we stop it for them.
216
+ const profile = createApplianceProfile({
217
+ root,
218
+ corePort: APPLIANCE_DEFAULTS.corePort,
219
+ livePort: APPLIANCE_DEFAULTS.livePort,
220
+ logLevel: APPLIANCE_DEFAULTS.logLevel,
221
+ });
222
+ await stopServices(profile).catch(() => undefined);
223
+ const stubborn = applyRemoval(root, plan);
224
+ // AR: **يُنسى القيد بعد الإزالة لا قبلها** (٠٢٦). قبلها يعني سجلًّا لا يذكر نظامًا ما زال على
225
+ // القرص إن تعثّر الحذف — فيقول ‎list‎ إن الآلة نظيفة وهي ليست كذلك، وهو أسوأ من ألّا نسجّل.
226
+ // EN: **The entry is forgotten after removal, not before** (026). Before would mean a registry
227
+ // that omits a system still on disk if the delete stumbles — so `list` reports a clean
228
+ // machine that is not clean, which is worse than not recording at all.
229
+ forgetInstall(product);
230
+ if (stubborn.length > 0) {
231
+ this.log(c.bad(`Partly removed. Still present: ${stubborn.join(", ")}`));
232
+ // AR: **الحالة الغالبة معروفة، فتُسمَّى بدل أن يُترَك الفنّي يخمّن.** الواجهة المشحونة تعمل بـ
233
+ // ‎runtime\node.exe‎، وويندوز لا يسمح لعملية بحذف الملفّ الذي تُنفَّذ منه. فلا شيء «معلَّق»
234
+ // ولا شيء يُغلَق: العائق هو الأمر نفسه، وحلّه سطرٌ واحد بعد خروجه.
235
+ // EN: **The common case is known, so it is named rather than left to guesswork.** The shipped
236
+ // CLI runs from `runtime\node.exe`, and Windows does not let a process delete the file it is
237
+ // executing from. Nothing is "stuck" and nothing needs closing: the obstacle is this command
238
+ // itself, and the fix is one line after it exits.
239
+ if (this.runsFromInside(root)) {
240
+ this.log(c.dim(` this command runs from ${root} — Windows cannot delete a running program.`));
241
+ this.log(`${c.accent(glyph.arrow)} From anywhere else, once this exits: rmdir /s /q "${root}"`);
242
+ }
243
+ else {
244
+ this.log(`${c.accent(glyph.arrow)} Something still holds them. Close anything reading ${root}, then run this again.`);
245
+ }
246
+ this.exit(EXIT.FAILURE);
247
+ }
248
+ this.log(`${c.ok(glyph.pass)} Removed.`);
249
+ if (this.runsFromInside(root)) {
250
+ // نجحت الإزالة، لكن هذا الملفّ ما زال يُنفَّذ من مجلد لم يعد فيه شيء آخر.
251
+ this.log(c.dim(` the runtime under ${root} goes when this command exits.`));
252
+ }
253
+ // جهازٌ أُزيل عنه النظام لا يبقى في PATH أثرٌ ميّت يشير إلى مجلد لم يعد موجودًا.
254
+ this.log(`${pathChange.changed ? c.ok(glyph.pass) : c.dim("·")} PATH ${c.dim(pathChange.detail)}`);
255
+ this.log(`${bootTask.changed ? c.ok(glyph.pass) : c.dim("·")} Boot task ${c.dim(bootTask.detail)}`);
256
+ this.log(`${seat.freed ? c.ok(glyph.pass) : c.warn("!")} Licence seat ${c.dim(seat.detail)}`);
257
+ if (!seat.freed && seat.attempted) {
258
+ this.log(`${c.accent(glyph.arrow)} ${c.dim("Free it from the Fantastic dashboard: Devices → deauthorize.")}`);
259
+ }
260
+ if (plan.kept.length > 0) {
261
+ this.log(c.dim(` ${dataDir} was kept. Delete it with --purge, or by hand.`));
262
+ }
263
+ }
264
+ /**
265
+ * يبلّغ المركز بإيقاف تفعيل هذا الجهاز عبر النواة. **لا يرمي أبدًا**: كل مسار يعيد وصفًا،
266
+ * لأن استثناءً هنا يوقف إزالةً لأسبابٍ خارجة عن الجهاز أصلًا.
267
+ */
268
+ async releaseSeat(root) {
269
+ const profile = createApplianceProfile({
270
+ root,
271
+ corePort: APPLIANCE_DEFAULTS.corePort,
272
+ livePort: APPLIANCE_DEFAULTS.livePort,
273
+ logLevel: APPLIANCE_DEFAULTS.logLevel,
274
+ });
275
+ const result = await deactivateLicense(profile).catch(() => null);
276
+ if (!result)
277
+ return { freed: false, attempted: true, detail: "could not be released" };
278
+ if (result.ok) {
279
+ return result.data.ok
280
+ ? { freed: true, attempted: true, detail: "released at the centre" }
281
+ : { freed: false, attempted: true, detail: result.data.message };
282
+ }
283
+ // النواة متوقّفة أصلًا: لا مقعد يُحرَّر، ولا شيء أخطأ. لا تحذير في هذه الحالة.
284
+ if (result.unreachable) {
285
+ return { freed: false, attempted: false, detail: "the core was not running — nothing to release" };
286
+ }
287
+ return { freed: false, attempted: true, detail: result.reason };
288
+ }
289
+ }
290
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,mBAAmB;AACnB,EAAE;AACF,sGAAsG;AACtG,8FAA8F;AAC9F,sDAAsD;AACtD,EAAE;AACF,sGAAsG;AACtG,2FAA2F;AAC3F,qBAAqB;AACrB,EAAE;AACF,qGAAqG;AACrG,kGAAkG;AAClG,mGAAmG;AACnG,wEAAwE;AACxE,EAAE;AACF,8FAA8F;AAC9F,sGAAsG;AACtG,0DAA0D;AAE1D,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW;IAChD,MAAM,CAAC,WAAW,GAAG,4EAA4E,CAAC;IAElG,MAAM,CAAC,QAAQ,GAAG;QAChB,qCAAqC;QACrC,6CAA6C;KAC9C,CAAC;IAEF,wFAAwF;IACxF,MAAM,CAAC,IAAI,GAAG;QACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,yDAAyD,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;KAClH,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kCAAkC,cAAc,GAAG,EAAE,CAAC;QACxF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,WAAW,EAAE,mFAAmF;YAChG,OAAO,EAAE,KAAK;SACf,CAAC;QACF,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KACpF,CAAC;IAEF,wGAAwG;IAChG,cAAc,CAAC,IAAY;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChE,OAAO,IAAI,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,kGAAkG;QAClG,iGAAiG;QACjG,mGAAmG;QACnG,uDAAuD;QACvD,gFAAgF;QAChF,wFAAwF;QACxF,kGAAkG;QAClG,+FAA+F;QAC/F,gGAAgG;QAChG,+DAA+D;QAC/D,iGAAiG;QACjG,+FAA+F;QAC/F,sFAAsF;QACtF,kGAAkG;QAClG,kGAAkG;QAClG,+DAA+D;QAC/D,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC,QAAQ,CAAC;QACtC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;YACrF,KAAK,MAAM,GAAG,IAAI,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC1F,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,iBAAiB,EAAE,IAAI,cAAc,CAAC;QAEzF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5D,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CACN,UAAU,CACR,aAAa,CAAC;gBACZ,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;aAClF,CAAC,CACH,CACF,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,GAAG;gBAAE,OAAO;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;YAC/E,6FAA6F;YAC7F,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,+BAA+B,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,cAAc,kBAAkB,CAAC,CAAC;YAEhF,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtG,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,8BAA8B,WAAW,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAClG,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;QAED,2DAA2D;QAC3D,EAAE;QACF,iGAAiG;QACjG,8FAA8F;QAC9F,4FAA4F;QAC5F,sBAAsB;QACtB,EAAE;QACF,yFAAyF;QACzF,sEAAsE;QACtE,EAAE;QACF,gGAAgG;QAChG,+FAA+F;QAC/F,yFAAyF;QACzF,gGAAgG;QAChG,qCAAqC;QACrC,EAAE;QACF,6FAA6F;QAC7F,aAAa;QACb,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;YACpG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAkC,OAAO,wBAAwB,CAAC,CAAC,CAAC;YACnF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC;gBACxB,OAAO,EAAE,oBAAoB,OAAO,iCAAiC,OAAO,GAAG;aAChF,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;gBAC5B,OAAO,EAAE,iCAAiC,OAAO,UAAU,IAAI,GAAG;gBAClE,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,EAAE;QACF,8FAA8F;QAC9F,uFAAuF;QACvF,gFAAgF;QAChF,EAAE;QACF,uFAAuF;QACvF,2FAA2F;QAC3F,0EAA0E;QAC1E,4EAA4E;QAC5E,EAAE;QACF,+FAA+F;QAC/F,+FAA+F;QAC/F,+FAA+F;QAC/F,oFAAoF;QACpF,EAAE;QACF,4FAA4F;QAC5F,+FAA+F;QAC/F,6FAA6F;QAC7F,0DAA0D;QAC1D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE1C,+FAA+F;QAC/F,0FAA0F;QAC1F,sBAAsB;QACtB,6FAA6F;QAC7F,4FAA4F;QAC5F,oFAAoF;QACpF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzF,4FAA4F;QAC5F,8FAA8F;QAC9F,0FAA0F;QAC1F,iGAAiG;QACjG,8FAA8F;QAC9F,8FAA8F;QAC9F,gDAAgD;QAChD,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC;QAExC,iGAAiG;QACjG,gGAAgG;QAChG,gGAAgG;QAChG,yBAAyB;QACzB,8FAA8F;QAC9F,4FAA4F;QAC5F,kGAAkG;QAClG,4FAA4F;QAC5F,oEAAoE;QACpE,MAAM,OAAO,GAAG,sBAAsB,CAAC;YACrC,IAAI;YACJ,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;YACrC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;YACrC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;SACtC,CAAC,CAAC;QACH,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE1C,8FAA8F;QAC9F,gGAAgG;QAChG,+FAA+F;QAC/F,2FAA2F;QAC3F,2EAA2E;QAC3E,aAAa,CAAC,OAAO,CAAC,CAAC;QAEvB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAkC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACzE,+FAA+F;YAC/F,gGAAgG;YAChG,uEAAuE;YACvE,8FAA8F;YAC9F,iGAAiG;YACjG,iGAAiG;YACjG,sDAAsD;YACtD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,6BAA6B,IAAI,6CAA6C,CAAC,CAAC,CAAC;gBAChG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAuD,IAAI,GAAG,CAAC,CAAC;YACnG,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAuD,IAAI,wBAAwB,CAAC,CAAC;YACxH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,0EAA0E;YAC1E,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,wBAAwB,IAAI,gCAAgC,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,iFAAiF;QACjF,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,GAAG,CACN,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACpF,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,8DAA8D,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,gDAAgD,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,WAAW,CAAC,IAAY;QACpC,MAAM,OAAO,GAAG,sBAAsB,CAAC;YACrC,IAAI;YACJ,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;YACrC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;YACrC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;SACtC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAElE,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;QAEvF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE;gBACnB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE;gBACpE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACrE,CAAC;QAED,+EAA+E;QAC/E,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,+CAA+C,EAAE,CAAC;QACrG,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAClE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { BaseCommand } from "../base-command.js";
2
+ export default class Update extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ check: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ component: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ channel: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
11
+ static help: string;
12
+ run(): Promise<void>;
13
+ private install;
14
+ private progressDrawn;
15
+ private drawProgress;
16
+ private finishProgress;
17
+ /** سطر خطوة واحد. **ما بعد نقطة السقوط لا يُرسَم**، لأنه لم يُنفَّذ. */
18
+ private step;
19
+ private failWith;
20
+ }
21
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAC;AAqEjE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAC,WAAW,SAAoE;IAEtF,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;MASV;IAEF,MAAM,CAAC,IAAI,SAAkB;IAEvB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA+HZ,OAAO;IA6GrB,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAKtB,wEAAwE;IACxE,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,QAAQ;CAMjB"}
@@ -0,0 +1,290 @@
1
+ import { mkdtempSync, rmSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { confirm } from "@inquirer/prompts";
5
+ import { Flags } from "@oclif/core";
6
+ import { BaseCommand, EXIT_CODE_HELP } from "../base-command.js";
7
+ import { readManifest } from "../packaging/manifest.js";
8
+ import { getInternal } from "../probes/internal.client.js";
9
+ import { INTERNAL_PATHS } from "../probes/internal-paths.js";
10
+ import { buildEnvelope, renderJson } from "../render/json.js";
11
+ import { c, glyph, isTty } from "../render/theme.js";
12
+ import { startServices, stopServices } from "../supervisor/orchestrator.js";
13
+ import { discardPrevious, extractInto, swapAside, targetFor } from "../updating/apply.js";
14
+ import { downloadBundle } from "../updating/download.js";
15
+ import { rollback } from "../updating/rollback.js";
16
+ import { verifyChecksum } from "../updating/verify.js";
17
+ import { installedVersion, recordInstalledComponent } from "../updating/versions.js";
18
+ import { checkCompatibility } from "../acquire/compatibility.js";
19
+ import { EXIT } from "../exit-codes.js";
20
+ // AR: ‎fantastic update‎ — يفحص وينزّل ويتحقّق ويركّب، ويتراجع عند الفشل.
21
+ //
22
+ // **الأمر لا ينادي البوّابة المركزية.** ينادي ‎/internal/updates/check‎، والنواة تسأل
23
+ // المركز بنفس ‎LicenseService‎ الذي تسأله به عن الرخصة — نفس قاعدة P4.4 ولنفس السبب:
24
+ // هوية الجهاز وعنوان المركز والمفتاح العام تعيش في النواة وحدها.
25
+ //
26
+ // ثم **ينزّل من الرابط الموقَّع مباشرةً**، وهذا ليس خرقًا للقاعدة بل تطبيقٌ لها: الرابط
27
+ // رمزٌ قصير العمر أصدره المركز لهذا الجهاز ولهذا الإصدار، والـ CLI لا يحمل سرًّا يصنعه —
28
+ // يحمل ورقةً أُعطيت له. ونصف غيغابايت يمرّ عبر النواة يعني بثًّا مضاعفًا خلال عمليةٍ
29
+ // تخدم المشاهدين في اللحظة نفسها.
30
+ //
31
+ // EN: `fantastic update` — checks, downloads, verifies, installs, and rolls back on failure.
32
+ //
33
+ // **The command never calls the central portal.** It calls `/internal/updates/check`, and the
34
+ // core asks the centre through the same `LicenseService` it uses for the licence — P4.4's rule
35
+ // for P4.4's reason: the device identity, the centre's address and the public key live in the
36
+ // core alone.
37
+ //
38
+ // It then **downloads from the signed link directly**, which is not a breach of that rule but
39
+ // an application of it: the link is a short-lived token the centre issued for this device and
40
+ // this release, and the CLI holds no secret that mints it — it holds a paper it was handed.
41
+ // Streaming half a gigabyte through the core would mean doubling the transfer inside a process
42
+ // serving viewers at that very moment.
43
+ /**
44
+ * AR: ترتيب التركيب. **الترتيب هو الأمان، لا التنظيم.**
45
+ *
46
+ * التحقّق (٣) يسبق الإيقاف (٥) — لو عُكسا لَتوقّف نظامٌ يعمل من أجل حزمة تالفة. وكل ما
47
+ * قبل الإيقاف لا يلمس التثبيت، فالفشل فيه يخرج بلا تراجع لأن لا شيء تراجَع.
48
+ * EN: The install order. **The order is the safety, not the tidiness.**
49
+ *
50
+ * Verification (3) precedes the stop (5) — reversed, a working system goes down for a corrupt
51
+ * bundle. Everything before the stop leaves the installation untouched, so a failure there
52
+ * exits without rollback because nothing rolled forward.
53
+ */
54
+ const STEPS = ["Downloading", "Verifying checksum", "Verifying signature", "Backing up", "Installing"];
55
+ export default class Update extends BaseCommand {
56
+ static description = "Check for and install a signed update, with automatic rollback";
57
+ static examples = [
58
+ "<%= config.bin %> update --check",
59
+ "<%= config.bin %> update --yes",
60
+ "<%= config.bin %> update --component live --yes",
61
+ ];
62
+ static flags = {
63
+ check: Flags.boolean({ description: "Report only; install nothing.", default: false }),
64
+ yes: Flags.boolean({ char: "y", description: "Skip the confirmation prompt.", default: false }),
65
+ component: Flags.string({
66
+ description: "Component to update.",
67
+ options: ["core", "live", "interface"],
68
+ default: "core",
69
+ }),
70
+ channel: Flags.string({ description: "Release channel.", options: ["stable", "beta"], default: "stable" }),
71
+ };
72
+ static help = EXIT_CODE_HELP;
73
+ async run() {
74
+ const { flags } = await this.parse(Update);
75
+ const profile = this.loadProfile(flags.profile, false, flags.product);
76
+ const manifest = readManifest(profile.root);
77
+ if (!manifest) {
78
+ this.log("");
79
+ this.log(c.dim("No bundle manifest here; this is a repository, not an installed appliance."));
80
+ this.log("");
81
+ this.exit(EXIT.NO_PROFILE);
82
+ return;
83
+ }
84
+ // AR: **حارس التوافق قبل أيّ عمل** (٠٢٦/FR-026). الحزمة المثبَّتة تُعلن أدنى واجهةٍ تفهم
85
+ // شجرتها، وواجهةٌ أقدم منها لا يجوز أن تبدأ تحديثًا: ستنزّل، وتوقف خدمات، ثم تعجز عن
86
+ // تركيب ما نزّلته — على جهازٍ كان يعمل.
87
+ // EN: **The compatibility guard before any work** (026/FR-026). The installed bundle declares the
88
+ // lowest CLI that understands its tree, and an older one must not begin an update: it would
89
+ // download, stop services, then fail to install what it fetched — on a machine that was
90
+ // working.
91
+ const compatible = checkCompatibility(manifest.bundle.minCliVersion);
92
+ if (!compatible.ok) {
93
+ this.log("");
94
+ this.log(c.bad(compatible.message));
95
+ this.log(`${c.accent(glyph.arrow)} ${compatible.remedy}`);
96
+ this.log("");
97
+ this.exit(EXIT.FAILURE);
98
+ return;
99
+ }
100
+ const component = flags.component;
101
+ const current = installedVersion(manifest, component);
102
+ if (!current) {
103
+ this.log("");
104
+ this.log(c.warn(`versions.json has no version for ${component}.`));
105
+ this.log("");
106
+ this.exit(EXIT.FAILURE);
107
+ return;
108
+ }
109
+ // AR: ١ — الفحص عبر النواة، وهي تسأل المركز.
110
+ //
111
+ // **المكوّن والإصدار المركَّب والقناة تُمرَّر في الاستعلام.** النواة لا تعرف أيًّا
112
+ // منها: هي مكوّنٌ واحد من أربعة، و‎versions.json‎ الذي يعرفها يقرؤه الـ CLI. وإرسال
113
+ // الطلب بلا استعلام كان يصل المركز بـ‎current‎ فارغة فيردّ «الإصدار المركَّب يجب أن
114
+ // يكون بصيغة 1.2.3» — رسالةٌ صحيحة عن عطلٍ مكانه هنا. وُجد بالتشغيل.
115
+ // EN: 1 — the check through the core, which asks the centre.
116
+ //
117
+ // **Component, installed version and channel travel in the query.** The core knows none of
118
+ // them: it is one component of four, and `versions.json` — which knows them all — is read
119
+ // by the CLI. Sending the request without a query reached the centre with an empty
120
+ // `current` and answered "the installed version must look like 1.2.3" — a correct message
121
+ // about a fault that lives here. Found by running it.
122
+ const query = new URLSearchParams({ component, current, channel: flags.channel });
123
+ const probe = await getInternal(profile, `${INTERNAL_PATHS.UPDATES_CHECK}?${query.toString()}`, 45_000);
124
+ if (!probe.ok) {
125
+ if (probe.unreachable)
126
+ this.coreUnreachable("update", profile, probe.reason, false);
127
+ this.failWith(probe.error?.message ?? probe.reason, EXIT.FAILURE);
128
+ return;
129
+ }
130
+ const check = probe.data;
131
+ if (flags.json) {
132
+ // نفس غلاف ‎buildEnvelope‎ لا شكلٌ خاصّ بهذا الأمر — نفس قرار P4.4.
133
+ renderJson(buildEnvelope({ command: "update", profile, data: { component, installed: current, check } }));
134
+ return;
135
+ }
136
+ if (!check.ok) {
137
+ this.log("");
138
+ this.log(`${glyph.fail} ${c.bad(check.message)}`);
139
+ this.log("");
140
+ // AR: تعذّرُ الوصول ‎4‎ ورفضُ المركز ‎1‎ — نفس تفريق P4.4، وسكربت التثبيت يعيد المحاولة
141
+ // على الأول ولا يعيدها على الثاني مهما تكرّر.
142
+ // EN: Unreachable is `4` and a refusal is `1` — P4.4's split, and the installer script
143
+ // retries the first and never the second however often it repeats.
144
+ this.exit(check.code === "CENTRAL_UNREACHABLE" ? EXIT.UNREACHABLE : EXIT.FAILURE);
145
+ return;
146
+ }
147
+ this.log("");
148
+ this.log(`${c.dim("installed:")} ${c.value(current)} ${c.dim(component)}`);
149
+ if (!check.available) {
150
+ this.log(`${c.dim("available:")} ${c.dim("nothing newer")}`);
151
+ this.log("");
152
+ return;
153
+ }
154
+ const { update } = check;
155
+ this.log(`${c.dim("available:")} ${c.value(update.version)} ` +
156
+ (update.mandatory ? c.bad("mandatory") : c.dim("optional")));
157
+ if (update.releaseNotes)
158
+ this.log(`${c.dim(" notes:")} ${update.releaseNotes}`);
159
+ this.log("");
160
+ // ‎--check‎ يفحص ويطبع ولا يركّب.
161
+ if (flags.check)
162
+ return;
163
+ if (!flags.yes) {
164
+ const proceed = await confirm({
165
+ message: `Install ${component} ${update.version} now? Services will restart.`,
166
+ default: update.mandatory,
167
+ }).catch(() => false);
168
+ if (!proceed) {
169
+ this.log(c.dim(" nothing installed."));
170
+ this.log("");
171
+ return;
172
+ }
173
+ }
174
+ await this.install(profile, manifest, component, current, update);
175
+ }
176
+ async install(profile, manifest, component, current, update) {
177
+ if (!targetFor(profile.root, component)) {
178
+ this.failWith(`No install location is defined for ${component}.`, EXIT.FAILURE);
179
+ return;
180
+ }
181
+ const workspace = mkdtempSync(join(tmpdir(), "fantastic-update-"));
182
+ const archive = join(workspace, `${component}-${update.version}.zip`);
183
+ try {
184
+ // ٢ — التنزيل إلى مجلد مؤقّت. **لا شيء في التثبيت لُمس بعد.**
185
+ const download = await downloadBundle({
186
+ url: update.downloadUrl,
187
+ destination: archive,
188
+ expectedBytes: update.sizeBytes,
189
+ onProgress: (progress) => this.drawProgress(progress.percent),
190
+ });
191
+ if (!download.ok) {
192
+ this.finishProgress(false);
193
+ this.failWith(download.reason, download.unreachable ? EXIT.UNREACHABLE : EXIT.FAILURE);
194
+ return;
195
+ }
196
+ this.finishProgress(true);
197
+ // AR: ٣ ★ — التحقّق. **فشلٌ هنا يتوقّف ولا شيء لُمس.**
198
+ //
199
+ // خطوة التوقيع تُرسَم ناجحةً قبل خطوة البصمة لأنها **جرت فعلًا وقبل التنزيل**:
200
+ // النواة تحقّقت من البيان في ‎checkUpdate‎ ولولا نجاحها لَما وصل رابطٌ أصلًا. فلا
201
+ // مؤقّت هنا ولا تمثيل: كلا السطرين يصف فحصًا وقع فعلًا.
202
+ // EN: 3 ★ — verification. **A failure here stops, and nothing has been touched.**
203
+ //
204
+ // `Verifying checksum` runs now, against the digest read out of the signed manifest.
205
+ // `Verifying signature` describes the check the core already performed in `checkUpdate`
206
+ // **before this download existed** — had it failed, no link would have arrived at all.
207
+ // Its line is drawn from an established fact, not from a timer: both lines describe a
208
+ // check that really happened.
209
+ const checksum = await verifyChecksum(archive, update.sha256, update.sizeBytes);
210
+ if (!checksum.ok) {
211
+ this.step(1, false);
212
+ this.log("");
213
+ this.log(`${glyph.fail} ${c.bad(checksum.message)}`);
214
+ this.log(`${c.dim(" expected")} ${checksum.expected}`);
215
+ this.log(`${c.dim(" got ")} ${checksum.actual}`);
216
+ this.log(c.dim(" Nothing was installed; the appliance is untouched."));
217
+ this.log("");
218
+ this.exit(EXIT.FAILURE);
219
+ return;
220
+ }
221
+ this.step(1, true);
222
+ this.step(2, true);
223
+ // ٤ — إزاحة الشجرة القائمة جانبًا. من هنا فصاعدًا كل فشل يستدعي تراجعًا.
224
+ await stopServices(profile);
225
+ const handle = await swapAside(profile.root, component, current);
226
+ this.step(3, true);
227
+ try {
228
+ // ٦ — التركيب.
229
+ await extractInto(archive, handle.target);
230
+ this.step(4, true);
231
+ // ٧ — التشغيل وفحص الصحة.
232
+ const started = await startServices(profile);
233
+ if (!started.ok)
234
+ throw new Error("الخدمات لم تصبح جاهزة بعد التركيب.");
235
+ // ٨ — نجاح: تُحدَّث ‎versions.json‎ **الآن وليس قبل**، وتُزال الشجرة السابقة.
236
+ recordInstalledComponent(profile.root, manifest, component, update.version);
237
+ discardPrevious(handle);
238
+ this.log("");
239
+ this.log(`${glyph.pass} ${c.ok(`Updated ${component} ${current} → ${update.version}`)}`);
240
+ this.log("");
241
+ }
242
+ catch (error) {
243
+ this.step(4, false);
244
+ const report = await rollback(profile, handle);
245
+ this.log("");
246
+ this.log(`${glyph.fail} ${c.bad(error instanceof Error ? error.message : String(error))}`);
247
+ if (report.restored) {
248
+ this.log(`${glyph.pass} ${c.warn(`Rolled back to ${current}`)}` +
249
+ (report.running ? c.dim(" — services are running.") : c.bad(" — services did NOT start.")));
250
+ }
251
+ else {
252
+ // أسوأ حالة ممكنة، وتُقال صراحةً: الفنيّ يحتاج المسار لا اعتذارًا.
253
+ this.log(`${glyph.fail} ${c.bad("Rollback failed.")} ${c.dim(report.problem ?? "")}`);
254
+ this.log(c.dim(` The previous build is at: ${handle.previous}`));
255
+ }
256
+ this.log("");
257
+ this.exit(EXIT.FAILURE);
258
+ }
259
+ }
260
+ finally {
261
+ // الحزمة المنزَّلة تُزال دائمًا: نصف غيغابايت في ‎%TEMP%‎ عن كل تحديث يملأ قرص الجهاز.
262
+ rmSync(workspace, { recursive: true, force: true });
263
+ }
264
+ }
265
+ progressDrawn = false;
266
+ drawProgress(percent) {
267
+ if (!isTty)
268
+ return;
269
+ process.stdout.write(`\r ${glyph.step} ${STEPS[0].padEnd(22, ".")} ${String(percent).padStart(3)}%`);
270
+ this.progressDrawn = true;
271
+ }
272
+ finishProgress(ok) {
273
+ if (this.progressDrawn)
274
+ process.stdout.write("\r");
275
+ this.step(0, ok, ok ? "100%" : undefined);
276
+ }
277
+ /** سطر خطوة واحد. **ما بعد نقطة السقوط لا يُرسَم**، لأنه لم يُنفَّذ. */
278
+ step(index, ok, suffix) {
279
+ const label = STEPS[index].padEnd(22, ".");
280
+ const mark = ok ? c.ok(suffix ?? "ok") : c.bad("failed");
281
+ this.log(` ${glyph.step} ${label} ${mark}`);
282
+ }
283
+ failWith(message, code) {
284
+ this.log("");
285
+ this.log(`${glyph.fail} ${c.bad(message)}`);
286
+ this.log("");
287
+ this.exit(code);
288
+ }
289
+ }
290
+ //# sourceMappingURL=update.js.map