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