@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
package/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # Fantastic
2
+
3
+ الواجهة الطرفية لمنتجات Fantastic: تُثبِّت النظام على الجهاز، وتفعّله، وتشغّله وتوقفه، وتقرأ
4
+ سجلّاته، وتشخّصه، وتحدّثه — من أمرٍ واحد.
5
+
6
+ ```powershell
7
+ npm i -g @wasmsoft/fantastic
8
+ fantastic
9
+ ```
10
+
11
+ ## المتطلَّب الوحيد
12
+
13
+ بيئة تشغيل JavaScript بإصدار **‏20 أو أحدث**. لا شيء غيرها.
14
+
15
+ ```powershell
16
+ winget install OpenJS.NodeJS.LTS
17
+ node -v
18
+ ```
19
+
20
+ ## الاستعمال
21
+
22
+ ```powershell
23
+ fantastic # يفتح الصَدَفة التفاعلية
24
+ fantastic install estraha # يقتني النظام من المنصّة ويركّبه ويشغّله
25
+ fantastic status # حالة ما هو مثبَّت على هذه الآلة
26
+ fantastic doctor # تشخيصٌ كامل، بلا إنترنت
27
+ fantastic update # تحديثٌ موقَّع، يمرّ بالنواة، ويتراجع عند الفشل
28
+ fantastic uninstall estraha # إزالة، مع إبقاء بيانات العميل
29
+ ```
30
+
31
+ الصَدَفة تُفتح بـ`fantastic` بلا وسائط **داخل طرفية**. أمّا في سكربت، فالأمر نفسه يطبع المساعدة
32
+ ولا ينتظر أحدًا — الشرط ثلاثيّ عمدًا: لا وسائط، ومُدخَلٌ طرفية، ومخرَجٌ طرفية.
33
+
34
+ ## التركيب في موقعٍ بلا إنترنت
35
+
36
+ ثلاثة ملفّاتٍ على ذاكرةٍ محمولة، وثلاث خطوات:
37
+
38
+ ```powershell
39
+ node-v20.x-x64.msi # 1 — بيئة التشغيل
40
+ npm i -g .\wasmsoft-fantastic-1.0.0.tgz # 2 — الواجهة، من الملفّ لا من السِّجلّ
41
+ fantastic install estraha --from .\Fantastic-x.y.z-win-x64.zip # 3 — النظام، من القرص
42
+ ```
43
+
44
+ ملفّ `.tgz` مرفوعٌ مع كل إصدارٍ في صفحة الإصدارات.
45
+
46
+ ## ماذا تفعل وماذا لا تفعل
47
+
48
+ الواجهة تجيب عن **العمليات والمنافذ والملفّات وحالتها هي**. النواة تجيب عن **البيانات** عبر HTTP.
49
+
50
+ ولا تحمل الواجهة سرًّا: لا مفتاح تحقّق، ولا كود تفعيلٍ مخزَّن، ولا وصولًا إلى قاعدة بيانات. توقيع
51
+ التحديث تتحقّق منه النواة لا هي — الحزمة عامّةٌ يقرؤها من شاء، فأيّ سرٍّ فيها سرٌّ منشور.
52
+
53
+ ## التطوير
54
+
55
+ ```powershell
56
+ npm install
57
+ npm run build
58
+ npm run lint
59
+ npm run typecheck
60
+ npm test
61
+ npm link # لتجريب الأمر عالميًّا من المصدر
62
+ ```
63
+
64
+ النشر آليٌّ عند وسم `v*`: بناء ← فحص أنواع ← اختبارات ← نشرٌ على السِّجلّ ← رفع `.tgz` أصلًا في
65
+ الإصدار.
package/bin/run.js ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+
3
+ // AR: نقطة دخول oclif. تُبقى رفيعة عمدًا: كل المنطق في ‎src/‎، وهذا الملف يُنفَّذ من ‎dist/‎ بعد البناء.
4
+ // الطرفية تُضبط على UTF-8 قبل أي طباعة، وإلا تحوّلت المخرجات العربية والمسارات إلى علامات استفهام.
5
+ // EN: The oclif entry point. Deliberately thin: all logic lives in src/, and this runs against dist/
6
+ // after a build. The console is switched to UTF-8 before anything prints, otherwise Arabic output
7
+ // and Arabic paths degrade into question marks.
8
+
9
+ import { execute } from "@oclif/core";
10
+
11
+ if (process.platform === "win32") {
12
+ process.stdout.setDefaultEncoding?.("utf8");
13
+ process.stderr.setDefaultEncoding?.("utf8");
14
+ }
15
+
16
+ // AR: ‎fantastic‎ بلا وسائط **داخل طرفية** يفتح الصَدَفة التفاعلية بدل صفحة المساعدة. الشرط ثلاثيّ
17
+ // عن قصد: لا وسائط، ومُدخَل طرفية، ومخرَج طرفية. غياب أيٍّ منها يعني أن المُنادي سكربت لا إنسان
18
+ // — و‎fantastic | grep‎ في سكربت قديم يجب أن يبقى يطبع المساعدة كما كان، لا أن يعلّق على مِحَثّ
19
+ // لا أحد يجيبه.
20
+ // EN: `fantastic` with no arguments **inside a terminal** opens the interactive shell rather than the
21
+ // help page. The condition is deliberately threefold: no arguments, a TTY stdin and a TTY stdout.
22
+ // Any one of them missing means the caller is a script rather than a person — and `fantastic |
23
+ // grep` in an old script must keep printing help as it did, not hang on a prompt nobody answers.
24
+ const interactive =
25
+ process.argv.length === 2 && Boolean(process.stdin.isTTY) && Boolean(process.stdout.isTTY);
26
+
27
+ await execute({ dir: import.meta.url, ...(interactive ? { args: ["shell"] } : {}) });
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env node
2
+
3
+ // AR: مدخل المُشرِف المشحون داخل الحزمة (٠٢٦). **يُنفَّذ من ‎<root>\supervisor\bin\supervisor.js‎
4
+ // بزمن تشغيل الحزمة نفسها**، تناديه شيمة ‎bin\fantastic.cmd‎ التي تناديها مهمّة الإقلاع.
5
+ //
6
+ // **ولا oclif هنا ولا تحليل وسائط.** هذا الملفّ لا يناديه إنسان: تناديه جدولة ويندوز عند بدء
7
+ // التشغيل، بلا أحدٍ أمام الشاشة، وربما بحساب ‎SYSTEM‎. ما يحتاجه شيءٌ واحد — أين جذر التثبيت —
8
+ // وهو يعرفه من موقعه هو، لا من مجلد عملٍ لا يتحكّم به ولا من متغيّر بيئةٍ قد لا يرثه.
9
+ //
10
+ // والترميز يُضبَط قبل أيّ طباعة كما في ‎bin/run.js‎: سجلّ المُشرِف يُقرأ عند تشخيص عطل، ومسارٌ
11
+ // عربيٌّ تحوّل إلى علامات استفهام يجعله بلا قيمة في اللحظة التي يُحتاج فيها.
12
+ // EN: The entry point of the supervisor shipped inside the bundle (026). **It runs from
13
+ // `<root>\supervisor\bin\supervisor.js` on the bundle's own runtime**, called by the
14
+ // `bin\fantastic.cmd` shim that the boot task invokes.
15
+ //
16
+ // **No oclif here and no argument parsing.** No human calls this file: the Windows scheduler
17
+ // does, at startup, with nobody at the screen, possibly as `SYSTEM`. It needs exactly one thing
18
+ // — where the install root is — and it knows that from its own location, not from a working
19
+ // directory it does not control and not from an environment variable it may not inherit.
20
+ //
21
+ // The encoding is set before anything prints, as in `bin/run.js`: the supervisor's log is read
22
+ // while diagnosing a fault, and an Arabic path turned into question marks makes it worthless at
23
+ // the very moment it is needed.
24
+
25
+ import { fileURLToPath } from "node:url";
26
+ import { dirname, join } from "node:path";
27
+ import { main } from "../dist/supervisor/entry.js";
28
+ import { VERSION } from "../dist/version.js";
29
+
30
+ if (process.platform === "win32") {
31
+ process.stdout.setDefaultEncoding?.("utf8");
32
+ process.stderr.setDefaultEncoding?.("utf8");
33
+ }
34
+
35
+ // AR: ‎--check‎ هو **الفحص الوحيد الذي يقبله هذا الملفّ**، ووجوده ليس ترفًا.
36
+ //
37
+ // الإقلاع التجريبي في خطّ الإنتاج كان يشغّل ‎<entry> --version‎ ويشترط خروجًا نظيفًا — وهو
38
+ // أرخص فحصٍ وأكثره كشفًا: يُجبر شجرة الوحدات كلّها على التحمّل على زمن تشغيل الحزمة، وهو
39
+ // بالضبط ما ينكسر حين تنقص اعتمادية من الشجرة المشحونة أو حين يعجز زمن التشغيل عن قراءة
40
+ // صياغتنا. **أربعة أعطالٍ ميدانية كانت من هذا الصنف** (٠١٨/T19).
41
+ //
42
+ // ولا يصلح ‎--version‎ هنا: هذا الملفّ يبدأ الإشراف **ولا يعود**، فالفحص كان سيُعلّق البناء إلى
43
+ // أن ينتهي مهلته. و‎--check‎ يحفظ الغاية نفسها بحرفها: الاستيراد أعلاه حمّل الشجرة كاملةً
44
+ // فعلًا، فيبقى أن يُطبَع سطرٌ ويُخرَج بصفر.
45
+ // EN: `--check` is **the only flag this file accepts**, and it is not a luxury.
46
+ //
47
+ // The pipeline's smoke boot used to run `<entry> --version` and require a clean exit — the
48
+ // cheapest and most revealing check there is: it forces the entire module graph to load on the
49
+ // bundle's own runtime, which is exactly what breaks when a dependency is missing from the
50
+ // shipped tree or when that runtime cannot parse the syntax we wrote. **Four field failures were
51
+ // of this kind** (018/T19).
52
+ //
53
+ // `--version` cannot serve here: this file starts supervising and **never returns**, so the check
54
+ // would hang the build until it timed out. `--check` keeps the purpose exactly: the import above
55
+ // has already loaded the whole graph, so all that remains is to print a line and exit zero.
56
+ if (process.argv.includes("--check")) {
57
+ console.log(`fantastic-supervisor ${VERSION}`);
58
+ process.exit(0);
59
+ }
60
+
61
+ // ‎<root>/supervisor/bin/supervisor.js‎ ← صعودُ ثلاثة يبلغ جذر التثبيت.
62
+ const here = dirname(fileURLToPath(import.meta.url));
63
+ const bundleRoot = join(here, "..", "..");
64
+
65
+ await main(bundleRoot);
@@ -0,0 +1,9 @@
1
+ /** ملفّ إعدادات المستخدم للواجهة نفسها — لا لجهازٍ مثبَّت. */
2
+ export declare function userConfigPath(): string;
3
+ export type CentralSource = "environment" | "user config" | "built in";
4
+ export interface CentralResolution {
5
+ url: string;
6
+ source: CentralSource;
7
+ }
8
+ export declare function resolveCentralUrl(): CentralResolution;
9
+ //# sourceMappingURL=central-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"central-url.d.ts","sourceRoot":"","sources":["../../src/acquire/central-url.ts"],"names":[],"mappings":"AAuCA,8DAA8D;AAC9D,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,aAAa,CAAC;CACvB;AAgBD,wBAAgB,iBAAiB,IAAI,iBAAiB,CAQrD"}
@@ -0,0 +1,74 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ // AR: عنوان المنصّة المركزية، **قبل أن يوجد جهازٌ يسأل عنه**.
5
+ //
6
+ // بعد التثبيت تسأل الواجهةُ النواةَ عن كل شيء (الرخصة، التحديث)، والنواة تحمل العنوان في
7
+ // ‎config.json‎ الخاصّ بجهازها. أمّا قبل التثبيت فلا جهاز ولا نواة ولا ملفّ — والواجهة تحتاج أن
8
+ // تعرف أين تسأل عن الحزمة أصلًا. هذه الوحدة تجيب ذلك السؤال وحده.
9
+ //
10
+ // **وليس سرًّا.** عنوان خادمٍ عامّ يعرفه كل من ثبّت النظام، ويظهر في أيّ التقاط شبكة. القاعدة
11
+ // التي تحكم الواجهة — «لا تحمل سرًّا» — تمنع المفتاح العام وكود التفعيل، لا عنوانًا معلنًا.
12
+ //
13
+ // **والترتيب مقصود**: متغيّر بيئةٍ يتقدّم كل شيء ليختبر مطوّرٌ مقابل منصّةٍ محلّية بلا تعديل ملفّ؛
14
+ // ثم ملفّ المستخدم لمن يشغّل منصّةً خاصّة به دائمًا؛ ثم القيمة المخبوزة. وبهذا لا يُنشَر إصدارٌ
15
+ // جديد من الواجهة لأن عنوانًا تغيّر.
16
+ // EN: The central platform's address, **before any appliance exists to ask about it**.
17
+ //
18
+ // After installation the CLI asks the core about everything (licence, updates), and the core
19
+ // carries the address in its own appliance's `config.json`. Before installation there is no
20
+ // appliance, no core and no file — and the CLI still needs to know where to ask for the bundle.
21
+ // This module answers that one question.
22
+ //
23
+ // **And it is not a secret.** A public server address known to everyone who installed the system
24
+ // and visible in any packet capture. The rule governing the CLI — "it holds no secrets" — bars
25
+ // the public key and the activation code, not a published address.
26
+ //
27
+ // **The order is deliberate**: an environment variable outranks everything so a developer can
28
+ // test against a local platform without editing a file; then the user's file, for whoever always
29
+ // runs their own platform; then the baked-in value. So no new CLI release is published because an
30
+ // address changed.
31
+ /**
32
+ * AR: القيمة المخبوزة. تُقرأ من متغيّر بناءٍ يومًا إن لزم؛ واليوم ثابتٌ واحد لأن المنصّة واحدة.
33
+ * EN: The baked-in value. It may be read from a build-time variable one day; today it is a single
34
+ * constant because there is one platform.
35
+ */
36
+ const BUILT_IN = "https://backend.fantatstic-central.wasmsoft.com";
37
+ /** ملفّ إعدادات المستخدم للواجهة نفسها — لا لجهازٍ مثبَّت. */
38
+ export function userConfigPath() {
39
+ return join(homedir(), ".fantastic", "cli.json");
40
+ }
41
+ function readUserConfig() {
42
+ const path = userConfigPath();
43
+ if (!existsSync(path))
44
+ return undefined;
45
+ try {
46
+ const parsed = JSON.parse(readFileSync(path, "utf8"));
47
+ const url = parsed.central?.url?.trim();
48
+ return url && url.length > 0 ? url : undefined;
49
+ }
50
+ catch {
51
+ // إعداداتٌ تالفة لا تمنع تثبيتًا: نمضي بالمخبوز، ويصحّحها ‎doctor‎ حين يُنادى.
52
+ return undefined;
53
+ }
54
+ }
55
+ export function resolveCentralUrl() {
56
+ const fromEnvironment = process.env.FANTASTIC_CENTRAL_URL?.trim();
57
+ if (fromEnvironment)
58
+ return { url: trimSlash(fromEnvironment), source: "environment" };
59
+ const fromFile = readUserConfig();
60
+ if (fromFile)
61
+ return { url: trimSlash(fromFile), source: "user config" };
62
+ return { url: trimSlash(BUILT_IN), source: "built in" };
63
+ }
64
+ /**
65
+ * AR: شرطةٌ خلفية واحدة تُنتج ‎//api/v1/…‎ في كل رابط بعدها. وبعض الوسطاء يردّ ‎404‎ عليها وبعضهم
66
+ * يقبلها — فيعمل التثبيت في مكانٍ ويفشل في آخر بلا فرقٍ ظاهر.
67
+ * EN: One trailing slash yields `//api/v1/…` in every URL after it. Some proxies answer `404` to that
68
+ * and others accept it — so an install works in one place and fails in another with no visible
69
+ * difference.
70
+ */
71
+ function trimSlash(url) {
72
+ return url.replace(/\/+$/, "");
73
+ }
74
+ //# sourceMappingURL=central-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"central-url.js","sourceRoot":"","sources":["../../src/acquire/central-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,8DAA8D;AAC9D,EAAE;AACF,6FAA6F;AAC7F,oGAAoG;AACpG,sEAAsE;AACtE,EAAE;AACF,kGAAkG;AAClG,gGAAgG;AAChG,EAAE;AACF,uGAAuG;AACvG,oGAAoG;AACpG,yCAAyC;AACzC,uFAAuF;AACvF,EAAE;AACF,iGAAiG;AACjG,gGAAgG;AAChG,oGAAoG;AACpG,6CAA6C;AAC7C,EAAE;AACF,qGAAqG;AACrG,mGAAmG;AACnG,uEAAuE;AACvE,EAAE;AACF,kGAAkG;AAClG,qGAAqG;AACrG,sGAAsG;AACtG,uBAAuB;AAEvB;;;;GAIG;AACH,MAAM,QAAQ,GAAG,iDAAiD,CAAC;AAEnE,8DAA8D;AAC9D,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AACnD,CAAC;AASD,SAAS,cAAc;IACrB,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAmC,CAAC;QACxF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACxC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,+EAA+E;QAC/E,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IAClE,IAAI,eAAe;QAAE,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAEvF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAEzE,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,21 @@
1
+ export declare const ACTIVATION_CODE_ENV = "FANTASTIC_ACTIVATION_CODE";
2
+ export declare class MissingActivationCode extends Error {
3
+ constructor();
4
+ }
5
+ export interface CodeSources {
6
+ /** ما مُرِّر في ‎--code‎، إن مُرِّر. */
7
+ flag?: string;
8
+ /** هل يوجد إنسانٌ يجيب؟ يُمرَّر ليكون القرار قابلًا للاختبار بلا طرفية حقيقية. */
9
+ interactive: boolean;
10
+ }
11
+ /**
12
+ * AR: يتحقّق من شكل الكود قبل إرساله. **الغاية رسالةٌ أوضح لا أمانٌ إضافيّ**: المركز هو من يقرّر
13
+ * صحّة الكود، لكن نصًّا فارغًا أو حرفًا واحدًا لا يستحقّ نداءً شبكيًّا ولا ردًّا يقول «غير
14
+ * صحيح» بعد ثانيتين من الانتظار.
15
+ * EN: Checks the code's shape before sending it. **The aim is a clearer message, not extra
16
+ * security**: the centre decides whether a code is valid, but an empty string or a single
17
+ * character deserves neither a network call nor a "not valid" answer two seconds later.
18
+ */
19
+ export declare function looksLikeCode(value: string): boolean;
20
+ export declare function readActivationCode(sources: CodeSources): Promise<string>;
21
+ //# sourceMappingURL=code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/acquire/code.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAE/D,qBAAa,qBAAsB,SAAQ,KAAK;;CAQ/C;AAED,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB9E"}
@@ -0,0 +1,66 @@
1
+ import { password } from "@inquirer/prompts";
2
+ // AR: كود التفعيل — **ما يملكه العميل قبل أن يوجد جهازه** (٠٢٦/FR-007).
3
+ //
4
+ // هو المصادقة الوحيدة الممكنة في هذه اللحظة: لا رخصة على قرصٍ بعد، ولا بصمة جهازٍ مسجَّلة،
5
+ // ولا شيء يُثبت من يطلب الحزمة غير الكود الذي اشتراه.
6
+ //
7
+ // **ولا يُكتب على قرص ولا يُطبع.** يُقرأ، ويُرسَل في ترويسة، ويُنسى مع انتهاء العملية. حفظه
8
+ // «تسهيلًا» يعني سرًّا مكتوبًا على جهاز الفنّي — وأجهزة الفنّيين تُعار وتُباع وتُسرَق.
9
+ //
10
+ // **وترتيب المصادر يخدم حالتين لا واحدة**: إنسانٌ يقف أمام جهاز، وسكربتٌ يعمل بلا أحد.
11
+ // والفارق بينهما ليس تفضيلًا: مِحَثٌّ يُفتَح في مهمّةٍ مجدولة يعلّقها إلى الأبد بلا أن يقرأ
12
+ // أحدٌ سؤاله.
13
+ // EN: The activation code — **what the customer holds before their appliance exists** (026/FR-007).
14
+ //
15
+ // It is the only authentication possible at this moment: no licence on a disk yet, no registered
16
+ // device fingerprint, nothing to prove who is asking for the bundle but the code they bought.
17
+ //
18
+ // **It is never written to disk and never printed.** It is read, sent in a header, and forgotten
19
+ // when the operation ends. Saving it "for convenience" means a secret written onto a
20
+ // technician's machine — and technicians' machines are lent, sold and stolen.
21
+ //
22
+ // **The order of sources serves two situations, not one**: a human standing at a machine, and a
23
+ // script running with nobody there. The difference is not a preference: a prompt opened inside a
24
+ // scheduled task hangs it forever with nobody to read the question.
25
+ export const ACTIVATION_CODE_ENV = "FANTASTIC_ACTIVATION_CODE";
26
+ export class MissingActivationCode extends Error {
27
+ constructor() {
28
+ super(`no activation code. Pass --code, or set ${ACTIVATION_CODE_ENV}. ` +
29
+ "A code is only asked for interactively when a terminal is attached.");
30
+ this.name = "MissingActivationCode";
31
+ }
32
+ }
33
+ /**
34
+ * AR: يتحقّق من شكل الكود قبل إرساله. **الغاية رسالةٌ أوضح لا أمانٌ إضافيّ**: المركز هو من يقرّر
35
+ * صحّة الكود، لكن نصًّا فارغًا أو حرفًا واحدًا لا يستحقّ نداءً شبكيًّا ولا ردًّا يقول «غير
36
+ * صحيح» بعد ثانيتين من الانتظار.
37
+ * EN: Checks the code's shape before sending it. **The aim is a clearer message, not extra
38
+ * security**: the centre decides whether a code is valid, but an empty string or a single
39
+ * character deserves neither a network call nor a "not valid" answer two seconds later.
40
+ */
41
+ export function looksLikeCode(value) {
42
+ const trimmed = value.trim();
43
+ return trimmed.length >= 5 && trimmed.length <= 40;
44
+ }
45
+ export async function readActivationCode(sources) {
46
+ const fromFlag = sources.flag?.trim();
47
+ if (fromFlag)
48
+ return fromFlag;
49
+ const fromEnvironment = process.env[ACTIVATION_CODE_ENV]?.trim();
50
+ if (fromEnvironment)
51
+ return fromEnvironment;
52
+ if (!sources.interactive)
53
+ throw new MissingActivationCode();
54
+ // AR: ‎password‎ لا ‎input‎: الكود سرٌّ، وطرفيةٌ تُعرَض على شاشةٍ في استراحة أو تُصوَّر في
55
+ // مكالمة دعمٍ تعرضه لمن لا يخصّه. ولا يُحفظ في تاريخ الصدفة كما يُحفظ ‎--code‎.
56
+ // EN: `password` rather than `input`: the code is a secret, and a terminal shown on a screen in a
57
+ // rest-house or captured in a support call exposes it to whoever is looking. Nor does it land
58
+ // in shell history the way `--code` does.
59
+ const answer = await password({
60
+ message: "كود التفعيل:",
61
+ mask: "•",
62
+ validate: (value) => (looksLikeCode(value) ? true : "الكود قصير أو فارغ."),
63
+ });
64
+ return answer.trim();
65
+ }
66
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/acquire/code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,wEAAwE;AACxE,EAAE;AACF,+FAA+F;AAC/F,0DAA0D;AAC1D,EAAE;AACF,gGAAgG;AAChG,2FAA2F;AAC3F,EAAE;AACF,2FAA2F;AAC3F,gGAAgG;AAChG,kBAAkB;AAClB,oGAAoG;AACpG,EAAE;AACF,qGAAqG;AACrG,kGAAkG;AAClG,EAAE;AACF,qGAAqG;AACrG,yFAAyF;AACzF,kFAAkF;AAClF,EAAE;AACF,oGAAoG;AACpG,qGAAqG;AACrG,wEAAwE;AAExE,MAAM,CAAC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;AAE/D,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C;QACE,KAAK,CACH,2CAA2C,mBAAmB,IAAI;YAChE,qEAAqE,CACxE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AASD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAoB;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IACtC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAE5C,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,MAAM,IAAI,qBAAqB,EAAE,CAAC;IAE5D,2FAA2F;IAC3F,oFAAoF;IACpF,kGAAkG;IAClG,kGAAkG;IAClG,8CAA8C;IAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC5B,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;KACnF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type CompatibilityVerdict = {
2
+ ok: true;
3
+ } | {
4
+ ok: false;
5
+ message: string;
6
+ remedy: string;
7
+ };
8
+ /** يقارن ‎a‎ بـ‎b‎ رقمًا رقمًا. اللواحق (‎-beta.1‎) تُهمَل: عقدُنا على الأرقام الثلاثة. */
9
+ export declare function compareVersions(a: string, b: string): number;
10
+ /**
11
+ * AR: هل تستطيع هذه الواجهة تركيب حزمةٍ تشترط ‎required‎؟ فراغُ الاشتراط يعني «لا اشتراط» —
12
+ * وهو حال كل حزمةٍ بُنيت قبل ٠٢٦، وهي كثيرةٌ ومثبَّتةٌ عند عملاء.
13
+ * EN: Can this CLI install a bundle requiring `required`? An empty requirement means "no
14
+ * requirement" — the state of every bundle built before 026, of which there are many, installed
15
+ * at customer sites.
16
+ */
17
+ export declare function checkCompatibility(required: string | undefined, current?: string): CompatibilityVerdict;
18
+ //# sourceMappingURL=compatibility.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../../src/acquire/compatibility.ts"],"names":[],"mappings":"AA4BA,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB5D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,MAAgB,GAAG,oBAAoB,CAWhH"}
@@ -0,0 +1,36 @@
1
+ import { VERSION } from "../version.js";
2
+ /** يقارن ‎a‎ بـ‎b‎ رقمًا رقمًا. اللواحق (‎-beta.1‎) تُهمَل: عقدُنا على الأرقام الثلاثة. */
3
+ export function compareVersions(a, b) {
4
+ const parts = (value) => value
5
+ .split("-")[0]
6
+ .split(".")
7
+ .map((piece) => Number.parseInt(piece, 10) || 0);
8
+ const left = parts(a);
9
+ const right = parts(b);
10
+ for (let index = 0; index < 3; index += 1) {
11
+ const difference = (left[index] ?? 0) - (right[index] ?? 0);
12
+ if (difference !== 0)
13
+ return difference > 0 ? 1 : -1;
14
+ }
15
+ return 0;
16
+ }
17
+ /**
18
+ * AR: هل تستطيع هذه الواجهة تركيب حزمةٍ تشترط ‎required‎؟ فراغُ الاشتراط يعني «لا اشتراط» —
19
+ * وهو حال كل حزمةٍ بُنيت قبل ٠٢٦، وهي كثيرةٌ ومثبَّتةٌ عند عملاء.
20
+ * EN: Can this CLI install a bundle requiring `required`? An empty requirement means "no
21
+ * requirement" — the state of every bundle built before 026, of which there are many, installed
22
+ * at customer sites.
23
+ */
24
+ export function checkCompatibility(required, current = VERSION) {
25
+ const wanted = required?.trim();
26
+ if (!wanted)
27
+ return { ok: true };
28
+ if (compareVersions(current, wanted) >= 0)
29
+ return { ok: true };
30
+ return {
31
+ ok: false,
32
+ message: `هذه الحزمة تحتاج واجهة ‎${wanted}‎ أو أحدث، والمثبَّتة هنا ‎${current}‎.`,
33
+ remedy: "حدّث الواجهة ثم أعِد المحاولة: npm i -g @wasmsoft/fantastic@latest",
34
+ };
35
+ }
36
+ //# sourceMappingURL=compatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../../src/acquire/compatibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA8BxC,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,MAAM,KAAK,GAAG,CAAC,KAAa,EAAY,EAAE,CACxC,KAAK;SACF,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5D,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAA4B,EAAE,UAAkB,OAAO;IACxF,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAEjC,IAAI,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAE/D,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,2BAA2B,MAAM,8BAA8B,OAAO,IAAI;QACnF,MAAM,EAAE,qEAAqE;KAC9E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type AvailableRelease } from "./latest.js";
2
+ export interface DownloadProgress {
3
+ /** ما نُزِّل حتى الآن، شاملًا ما كان موجودًا قبل هذه المحاولة. */
4
+ received: number;
5
+ total: number;
6
+ /** صحيح حين بدأت هذه المحاولة من ملفٍّ جزئيّ سابق. */
7
+ resumed: boolean;
8
+ }
9
+ export interface DownloadOptions {
10
+ code: string;
11
+ release: AvailableRelease;
12
+ platform?: string;
13
+ onProgress?: (progress: DownloadProgress) => void;
14
+ }
15
+ export declare function partialPathFor(release: AvailableRelease): string;
16
+ /**
17
+ * AR: ينزّل إلى ملفٍّ جزئيّ ويعيد مساره. **لا يتحقّق من البصمة**: ذلك عمل ‎updating/verify.ts‎
18
+ * القائم منذ P5.4، ونسخةٌ ثانية منه هنا تعني خوارزميتَي تحقّقٍ تتباعدان.
19
+ * EN: Downloads into a partial file and returns its path. **It does not verify the digest**: that is
20
+ * `updating/verify.ts`'s job, in place since P5.4, and a second copy here would mean two
21
+ * verification paths drifting apart.
22
+ */
23
+ export declare function downloadBundle(options: DownloadOptions): Promise<string>;
24
+ /** يُنادى بعد نجاح التركيب، أو بعد فشل بصمةٍ لا يُصلحه استئناف. */
25
+ export declare function discardPartial(release: AvailableRelease): void;
26
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/acquire/fetch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiD,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA6BnG,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACnD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAIhE;AAMD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAoD9E;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAG9D"}
@@ -0,0 +1,72 @@
1
+ import { createWriteStream, existsSync, mkdirSync, statSync, unlinkSync } from "node:fs";
2
+ import { Readable } from "node:stream";
3
+ import { pipeline } from "node:stream/promises";
4
+ import { tmpdir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { ACTIVATION_HEADER, releaseUrl, CentralRefused } from "./latest.js";
7
+ export function partialPathFor(release) {
8
+ const directory = join(tmpdir(), "fantastic-downloads");
9
+ mkdirSync(directory, { recursive: true });
10
+ return join(directory, `${release.product}-${release.version}.zip.part`);
11
+ }
12
+ function bytesOnDisk(path) {
13
+ return existsSync(path) ? statSync(path).size : 0;
14
+ }
15
+ /**
16
+ * AR: ينزّل إلى ملفٍّ جزئيّ ويعيد مساره. **لا يتحقّق من البصمة**: ذلك عمل ‎updating/verify.ts‎
17
+ * القائم منذ P5.4، ونسخةٌ ثانية منه هنا تعني خوارزميتَي تحقّقٍ تتباعدان.
18
+ * EN: Downloads into a partial file and returns its path. **It does not verify the digest**: that is
19
+ * `updating/verify.ts`'s job, in place since P5.4, and a second copy here would mean two
20
+ * verification paths drifting apart.
21
+ */
22
+ export async function downloadBundle(options) {
23
+ const { code, release } = options;
24
+ const target = partialPathFor(release);
25
+ const already = bytesOnDisk(target);
26
+ // AR: **ملفٌّ أكبر من المتوقَّع لا يُستأنَف.** يعني إصدارًا آخر بقي باسمٍ متشابه، أو كتابةً
27
+ // تلفت؛ والاستئناف فوقه يُنتج أرشيفًا لا تطابق بصمته شيئًا ويُقرأ «تلفًا» بلا سبب مفهوم.
28
+ // EN: **A file larger than expected is never resumed.** It means another release left under a
29
+ // similar name, or a corrupt write; resuming over it produces an archive whose digest matches
30
+ // nothing and reads as "corruption" for no intelligible reason.
31
+ const resumable = already > 0 && (release.sizeBytes === 0 || already < release.sizeBytes);
32
+ if (already > 0 && !resumable)
33
+ unlinkSync(target);
34
+ const from = resumable ? already : 0;
35
+ const response = await fetch(releaseUrl("download", release.product, options.platform), {
36
+ headers: {
37
+ [ACTIVATION_HEADER]: code,
38
+ ...(from > 0 ? { Range: `bytes=${from}-` } : {}),
39
+ },
40
+ });
41
+ if (!response.ok && response.status !== 206) {
42
+ throw new CentralRefused(response.status, `تعذّر تنزيل الحزمة (${response.status}).`);
43
+ }
44
+ if (!response.body)
45
+ throw new CentralRefused(response.status, "المنصّة ردّت بلا محتوى.");
46
+ // AR: **ردٌّ بـ‎200‎ على طلب مدى يعني أن الخادم لا يدعم الاستئناف**، فيبدأ الملفّ من أوّله ولا
47
+ // يجوز أن نُلحق عليه — الإلحاق كان سيُنتج ملفًّا فيه بدايةٌ مكرّرة يفشل فكّه بلا سبب ظاهر.
48
+ // هذه هي حال أيّ مركزٍ لم يُحدَّث بعد ٠٢٦، وهي تعمل — أبطأ فقط.
49
+ // EN: **A `200` answer to a range request means the server does not support resumption**, so the
50
+ // file starts from its beginning and must not be appended to — appending would produce a file
51
+ // with a duplicated head that fails to extract for no visible reason. This is the state of any
52
+ // centre not yet updated for 026, and it works — only slower.
53
+ const serverResumed = response.status === 206;
54
+ const startedAt = serverResumed ? from : 0;
55
+ const total = release.sizeBytes > 0 ? release.sizeBytes : startedAt + Number(response.headers.get("content-length") ?? 0);
56
+ let received = startedAt;
57
+ options.onProgress?.({ received, total, resumed: serverResumed && from > 0 });
58
+ const source = Readable.fromWeb(response.body);
59
+ source.on("data", (chunk) => {
60
+ received += chunk.length;
61
+ options.onProgress?.({ received, total, resumed: serverResumed && from > 0 });
62
+ });
63
+ await pipeline(source, createWriteStream(target, { flags: serverResumed && from > 0 ? "a" : "w" }));
64
+ return target;
65
+ }
66
+ /** يُنادى بعد نجاح التركيب، أو بعد فشل بصمةٍ لا يُصلحه استئناف. */
67
+ export function discardPartial(release) {
68
+ const path = partialPathFor(release);
69
+ if (existsSync(path))
70
+ unlinkSync(path);
71
+ }
72
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/acquire/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export declare const ACTIVATION_HEADER = "X-Activation-Code";
2
+ export interface AvailableRelease {
3
+ version: string;
4
+ sha256: string;
5
+ sizeBytes: number;
6
+ fileName: string;
7
+ product: string;
8
+ /** فارغٌ لحزمٍ رُفعت قبل ٠٢٦. الواجهة تعامل الفراغ كـ«بلا اشتراط». */
9
+ minCliVersion: string;
10
+ }
11
+ export declare class CentralRefused extends Error {
12
+ readonly status: number;
13
+ constructor(status: number, message: string);
14
+ }
15
+ export declare function releaseUrl(path: string, product: string, platform?: string): string;
16
+ /**
17
+ * AR: يسأل المركز عن أحدث حزمة. **لا يُستعمل عميل HTTP خارجيّ**: ‎fetch‎ مدمجٌ في Node ‏20،
18
+ * والدستور يمنع عميلًا ثانيًا — وحزمةٌ إضافية هنا تُشحن إلى كل جهاز فنّيّ بلا مقابل.
19
+ * EN: Asks the centre for the newest bundle. **No external HTTP client is used**: `fetch` is built
20
+ * into Node 20 and the constitution forbids a second client — and an extra package here ships to
21
+ * every technician's machine for nothing.
22
+ */
23
+ export declare function fetchLatest(code: string, product: string, platform?: string): Promise<AvailableRelease>;
24
+ //# sourceMappingURL=latest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"latest.d.ts","sourceRoot":"","sources":["../../src/acquire/latest.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;CAKlB;AA+BD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,MAAM,CAGtF;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4BhH"}