kastell 1.17.0 → 2.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/CHANGELOG.md +62 -0
- package/README.md +2 -1
- package/README.tr.md +2 -1
- package/dist/adapters/factory.d.ts.map +1 -1
- package/dist/adapters/factory.js +3 -2
- package/dist/adapters/factory.js.map +1 -1
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +19 -17
- package/dist/adapters/shared.js.map +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +19 -3
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +42 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/fix.d.ts +1 -0
- package/dist/commands/fix.d.ts.map +1 -1
- package/dist/commands/fix.js +8 -2
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/maintain.d.ts.map +1 -1
- package/dist/commands/maintain.js +10 -5
- package/dist/commands/maintain.js.map +1 -1
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +10 -5
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/restore.d.ts.map +1 -1
- package/dist/commands/restore.js +12 -5
- package/dist/commands/restore.js.map +1 -1
- package/dist/commands/secure.js +19 -9
- package/dist/commands/secure.js.map +1 -1
- package/dist/commands/snapshot.d.ts.map +1 -1
- package/dist/commands/snapshot.js +3 -0
- package/dist/commands/snapshot.js.map +1 -1
- package/dist/commands/ssh.d.ts.map +1 -1
- package/dist/commands/ssh.js +2 -1
- package/dist/commands/ssh.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -5
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/transfer.d.ts.map +1 -1
- package/dist/commands/transfer.js +22 -11
- package/dist/commands/transfer.js.map +1 -1
- package/dist/core/audit/checks/ddos.d.ts.map +1 -1
- package/dist/core/audit/checks/ddos.js +1 -5
- package/dist/core/audit/checks/ddos.js.map +1 -1
- package/dist/core/audit/checks/filesystem.d.ts.map +1 -1
- package/dist/core/audit/checks/filesystem.js +2 -0
- package/dist/core/audit/checks/filesystem.js.map +1 -1
- package/dist/core/audit/checks/index.d.ts.map +1 -1
- package/dist/core/audit/checks/index.js +32 -31
- package/dist/core/audit/checks/index.js.map +1 -1
- package/dist/core/audit/checks/kernel.d.ts.map +1 -1
- package/dist/core/audit/checks/kernel.js +1 -5
- package/dist/core/audit/checks/kernel.js.map +1 -1
- package/dist/core/audit/checks/network.d.ts.map +1 -1
- package/dist/core/audit/checks/network.js +2 -0
- package/dist/core/audit/checks/network.js.map +1 -1
- package/dist/core/audit/checks/shared/categories.d.ts +40 -0
- package/dist/core/audit/checks/shared/categories.d.ts.map +1 -0
- package/dist/core/audit/checks/shared/categories.js +39 -0
- package/dist/core/audit/checks/shared/categories.js.map +1 -0
- package/dist/core/audit/checks/shared/sysctl.d.ts +13 -0
- package/dist/core/audit/checks/shared/sysctl.d.ts.map +1 -0
- package/dist/core/audit/checks/shared/sysctl.js +19 -0
- package/dist/core/audit/checks/shared/sysctl.js.map +1 -0
- package/dist/core/audit/fix-history.d.ts +20 -0
- package/dist/core/audit/fix-history.d.ts.map +1 -1
- package/dist/core/audit/fix-history.js +38 -14
- package/dist/core/audit/fix-history.js.map +1 -1
- package/dist/core/audit/fix.js +2 -2
- package/dist/core/audit/fix.js.map +1 -1
- package/dist/core/audit/formatters/report.d.ts.map +1 -1
- package/dist/core/audit/formatters/report.js +2 -0
- package/dist/core/audit/formatters/report.js.map +1 -1
- package/dist/core/audit/handlers/aptUpgrade.js +1 -1
- package/dist/core/audit/handlers/aptUpgrade.js.map +1 -1
- package/dist/core/audit/handlers/sedReplace.d.ts.map +1 -1
- package/dist/core/audit/handlers/sedReplace.js +2 -1
- package/dist/core/audit/handlers/sedReplace.js.map +1 -1
- package/dist/core/audit/history.d.ts.map +1 -1
- package/dist/core/audit/history.js +7 -6
- package/dist/core/audit/history.js.map +1 -1
- package/dist/core/audit/index.d.ts.map +1 -1
- package/dist/core/audit/index.js +2 -1
- package/dist/core/audit/index.js.map +1 -1
- package/dist/core/audit/profiles.js +2 -2
- package/dist/core/audit/profiles.js.map +1 -1
- package/dist/core/audit/snapshot.d.ts +204 -0
- package/dist/core/audit/snapshot.d.ts.map +1 -1
- package/dist/core/audit/snapshot.js +11 -10
- package/dist/core/audit/snapshot.js.map +1 -1
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +4 -4
- package/dist/core/auth.js.map +1 -1
- package/dist/core/backup-commands.d.ts +15 -0
- package/dist/core/backup-commands.d.ts.map +1 -0
- package/dist/core/backup-commands.js +51 -0
- package/dist/core/backup-commands.js.map +1 -0
- package/dist/core/backup.d.ts +11 -23
- package/dist/core/backup.d.ts.map +1 -1
- package/dist/core/backup.js +11 -55
- package/dist/core/backup.js.map +1 -1
- package/dist/core/backupSchedule.d.ts.map +1 -1
- package/dist/core/backupSchedule.js +13 -10
- package/dist/core/backupSchedule.js.map +1 -1
- package/dist/core/bot/bot.d.ts.map +1 -1
- package/dist/core/bot/bot.js +2 -1
- package/dist/core/bot/bot.js.map +1 -1
- package/dist/core/bot/offset.d.ts +1 -1
- package/dist/core/bot/offset.d.ts.map +1 -1
- package/dist/core/bot/offset.js +8 -7
- package/dist/core/bot/offset.js.map +1 -1
- package/dist/core/configRepair.d.ts +22 -0
- package/dist/core/configRepair.d.ts.map +1 -0
- package/dist/core/configRepair.js +130 -0
- package/dist/core/configRepair.js.map +1 -0
- package/dist/core/deploy.d.ts.map +1 -1
- package/dist/core/deploy.js +3 -2
- package/dist/core/deploy.js.map +1 -1
- package/dist/core/doctor-local.d.ts.map +1 -1
- package/dist/core/doctor-local.js +7 -6
- package/dist/core/doctor-local.js.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +13 -11
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/domain.d.ts.map +1 -1
- package/dist/core/domain.js +2 -1
- package/dist/core/domain.js.map +1 -1
- package/dist/core/evidence.js +10 -8
- package/dist/core/evidence.js.map +1 -1
- package/dist/core/firewall.d.ts.map +1 -1
- package/dist/core/firewall.js +11 -7
- package/dist/core/firewall.js.map +1 -1
- package/dist/core/guard.d.ts +5 -0
- package/dist/core/guard.d.ts.map +1 -1
- package/dist/core/guard.js +14 -10
- package/dist/core/guard.js.map +1 -1
- package/dist/core/health.d.ts.map +1 -1
- package/dist/core/health.js +2 -1
- package/dist/core/health.js.map +1 -1
- package/dist/core/manage.d.ts +1 -1
- package/dist/core/manage.d.ts.map +1 -1
- package/dist/core/manage.js +7 -24
- package/dist/core/manage.js.map +1 -1
- package/dist/core/notify.d.ts.map +1 -1
- package/dist/core/notify.js +9 -7
- package/dist/core/notify.js.map +1 -1
- package/dist/core/notifyStore.d.ts.map +1 -1
- package/dist/core/notifyStore.js +9 -8
- package/dist/core/notifyStore.js.map +1 -1
- package/dist/core/scheduleManager.d.ts.map +1 -1
- package/dist/core/scheduleManager.js +36 -8
- package/dist/core/scheduleManager.js.map +1 -1
- package/dist/core/status.d.ts +1 -1
- package/dist/core/status.d.ts.map +1 -1
- package/dist/core/status.js +4 -3
- package/dist/core/status.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/serverAudit.d.ts +16 -0
- package/dist/mcp/tools/serverAudit.d.ts.map +1 -1
- package/dist/mcp/tools/serverAudit.js +83 -17
- package/dist/mcp/tools/serverAudit.js.map +1 -1
- package/dist/mcp/tools/serverBackup.d.ts +4 -4
- package/dist/mcp/tools/serverBackup.handlers.d.ts.map +1 -1
- package/dist/mcp/tools/serverBackup.handlers.js +5 -0
- package/dist/mcp/tools/serverBackup.handlers.js.map +1 -1
- package/dist/mcp/tools/serverBackup.js +2 -2
- package/dist/mcp/tools/serverBackup.js.map +1 -1
- package/dist/mcp/tools/serverDoctor.d.ts.map +1 -1
- package/dist/mcp/tools/serverDoctor.js +3 -5
- package/dist/mcp/tools/serverDoctor.js.map +1 -1
- package/dist/mcp/tools/serverEvidence.js +3 -3
- package/dist/mcp/tools/serverEvidence.js.map +1 -1
- package/dist/mcp/tools/serverFix.d.ts.map +1 -1
- package/dist/mcp/tools/serverFix.js +6 -4
- package/dist/mcp/tools/serverFix.js.map +1 -1
- package/dist/mcp/tools/serverFleet.d.ts +1 -1
- package/dist/mcp/tools/serverFleet.js +2 -2
- package/dist/mcp/tools/serverFleet.js.map +1 -1
- package/dist/mcp/tools/serverGuard.d.ts.map +1 -1
- package/dist/mcp/tools/serverGuard.js +4 -2
- package/dist/mcp/tools/serverGuard.js.map +1 -1
- package/dist/mcp/tools/serverInfo.d.ts.map +1 -1
- package/dist/mcp/tools/serverInfo.js +4 -3
- package/dist/mcp/tools/serverInfo.js.map +1 -1
- package/dist/mcp/tools/serverLock.d.ts.map +1 -1
- package/dist/mcp/tools/serverLock.js +4 -2
- package/dist/mcp/tools/serverLock.js.map +1 -1
- package/dist/mcp/tools/serverLogs.js +3 -3
- package/dist/mcp/tools/serverLogs.js.map +1 -1
- package/dist/mcp/tools/serverMaintain.d.ts.map +1 -1
- package/dist/mcp/tools/serverMaintain.js +9 -2
- package/dist/mcp/tools/serverMaintain.js.map +1 -1
- package/dist/mcp/tools/serverManage.d.ts.map +1 -1
- package/dist/mcp/tools/serverManage.js +79 -21
- package/dist/mcp/tools/serverManage.js.map +1 -1
- package/dist/mcp/tools/serverProvision.d.ts.map +1 -1
- package/dist/mcp/tools/serverProvision.js +5 -4
- package/dist/mcp/tools/serverProvision.js.map +1 -1
- package/dist/mcp/tools/serverSecure.d.ts.map +1 -1
- package/dist/mcp/tools/serverSecure.js +4 -2
- package/dist/mcp/tools/serverSecure.js.map +1 -1
- package/dist/mcp/utils.d.ts +13 -5
- package/dist/mcp/utils.d.ts.map +1 -1
- package/dist/mcp/utils.js +14 -3
- package/dist/mcp/utils.js.map +1 -1
- package/dist/providers/base.d.ts.map +1 -1
- package/dist/providers/base.js +21 -3
- package/dist/providers/base.js.map +1 -1
- package/dist/providers/digitalocean.d.ts +13 -0
- package/dist/providers/digitalocean.d.ts.map +1 -1
- package/dist/providers/digitalocean.js +19 -3
- package/dist/providers/digitalocean.js.map +1 -1
- package/dist/providers/hetzner.d.ts +12 -0
- package/dist/providers/hetzner.d.ts.map +1 -1
- package/dist/providers/hetzner.js +21 -7
- package/dist/providers/hetzner.js.map +1 -1
- package/dist/providers/linode.d.ts +6 -0
- package/dist/providers/linode.d.ts.map +1 -1
- package/dist/providers/linode.js +12 -4
- package/dist/providers/linode.js.map +1 -1
- package/dist/providers/vultr.d.ts +9 -0
- package/dist/providers/vultr.d.ts.map +1 -1
- package/dist/providers/vultr.js +16 -4
- package/dist/providers/vultr.js.map +1 -1
- package/dist/utils/backupPath.js +1 -1
- package/dist/utils/backupPath.js.map +1 -1
- package/dist/utils/config.d.ts +2 -4
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +24 -11
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/defaults.d.ts +1 -3
- package/dist/utils/defaults.d.ts.map +1 -1
- package/dist/utils/defaults.js +6 -7
- package/dist/utils/defaults.js.map +1 -1
- package/dist/utils/encryption.d.ts.map +1 -1
- package/dist/utils/encryption.js +9 -8
- package/dist/utils/encryption.js.map +1 -1
- package/dist/utils/errorMapper.d.ts +6 -0
- package/dist/utils/errorMapper.d.ts.map +1 -1
- package/dist/utils/errorMapper.js +18 -0
- package/dist/utils/errorMapper.js.map +1 -1
- package/dist/utils/errors.d.ts +18 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +20 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/fileLock.d.ts +2 -0
- package/dist/utils/fileLock.d.ts.map +1 -1
- package/dist/utils/fileLock.js +9 -0
- package/dist/utils/fileLock.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +13 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/migration.d.ts.map +1 -1
- package/dist/utils/migration.js +4 -3
- package/dist/utils/migration.js.map +1 -1
- package/dist/utils/paths.d.ts +4 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +4 -0
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/retry.d.ts.map +1 -1
- package/dist/utils/retry.js +22 -7
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/safeMode.d.ts +15 -0
- package/dist/utils/safeMode.d.ts.map +1 -0
- package/dist/utils/safeMode.js +85 -0
- package/dist/utils/safeMode.js.map +1 -0
- package/dist/utils/secureWrite.d.ts +11 -0
- package/dist/utils/secureWrite.d.ts.map +1 -0
- package/dist/utils/secureWrite.js +60 -0
- package/dist/utils/secureWrite.js.map +1 -0
- package/dist/utils/securityLogger.d.ts +24 -0
- package/dist/utils/securityLogger.d.ts.map +1 -0
- package/dist/utils/securityLogger.js +47 -0
- package/dist/utils/securityLogger.js.map +1 -0
- package/dist/utils/shellEscape.d.ts +7 -0
- package/dist/utils/shellEscape.d.ts.map +1 -0
- package/dist/utils/shellEscape.js +9 -0
- package/dist/utils/shellEscape.js.map +1 -0
- package/dist/utils/ssh.d.ts +2 -2
- package/dist/utils/ssh.d.ts.map +1 -1
- package/dist/utils/ssh.js +16 -10
- package/dist/utils/ssh.js.map +1 -1
- package/dist/utils/sshCommand.d.ts.map +1 -1
- package/dist/utils/sshCommand.js +3 -0
- package/dist/utils/sshCommand.js.map +1 -1
- package/dist/utils/sshKey.d.ts.map +1 -1
- package/dist/utils/sshKey.js +3 -2
- package/dist/utils/sshKey.js.map +1 -1
- package/dist/utils/updateCheck.d.ts.map +1 -1
- package/dist/utils/updateCheck.js +4 -3
- package/dist/utils/updateCheck.js.map +1 -1
- package/package.json +16 -12
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [2.0.0] - 2026-04-20
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **`classifyError` helper** — unified instanceof-based error branching for KastellError hierarchy (TransientError, ValidationError, BusinessError, PermissionError)
|
|
9
|
+
- **`logSafeModeBlock`** — structured security logging wired into all 9 `isSafeMode()` guard sites in commands/ and MCP tools
|
|
10
|
+
- **`secureWriteFileSync` / `secureMkdirSync` / `ensureSecureDir`** — platform-aware secure file operations with POSIX permission enforcement
|
|
11
|
+
- **`configRepair` core + CLI** — `kastell config repair` diagnoses and repairs corrupted config files
|
|
12
|
+
- **MCP audit enhancements** — snapshot save/compare, category/severity filter, threshold gate, profile filter for `server_audit`
|
|
13
|
+
- **`--checks` flag** — `kastell fix --checks KERN-SYNCOOKIES,...` for specific check IDs
|
|
14
|
+
- **Property-based tests** — fast-check arbitraries for MCP and config Zod schemas
|
|
15
|
+
- **Fuzz tests** — kernel, firewall, and filesystem parser fuzzing with fast-check
|
|
16
|
+
- **E2E nightly workflow** — CI provision→lock→audit→destroy end-to-end pipeline
|
|
17
|
+
- **Schema exports** — property-based snapshot tests for Zod schema stability
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- **Structured error migration (P107+P113)** — all 9 commands/ catch blocks use `instanceof` branching instead of string matching; mappers (mapProviderError, mapSshError, mapFileSystemError) preserved for backward compat
|
|
21
|
+
- **Security logging (P107)** — SecurityLogger module with JSON audit trail, throw-point migration
|
|
22
|
+
- **Audit DRY (P106)** — shared sysctl utility, typed audit categories, v1.12 review backlog closed
|
|
23
|
+
- **CONFIG_DIR→KASTELL_DIR (P105)** — unified path constant, inline paths eliminated
|
|
24
|
+
- **Code quality** — template literals, cleaner conditionals, import cleanup across codebase
|
|
25
|
+
- **MCP parity** — CLI/MCP feature gap closed (parity matrix verification tests added)
|
|
26
|
+
|
|
27
|
+
### Security
|
|
28
|
+
- **secureWrite migration (SEC-06)** — all credential files use `secureWriteFileSync` with 0o600 permissions
|
|
29
|
+
- **TOCTOU fix** — removed `existsSync` guard before `secureMkdirSync` in auth.ts
|
|
30
|
+
- **Path traversal guard** — server-side validation in `rollbackFix` for E2E JSON parse errors
|
|
31
|
+
- **ESLint security plugins (P108)** — Zod schemas for all 4 providers, shellEscape utility, retry resilience (502/503/ETIMEDOUT)
|
|
32
|
+
- **CI hardening** — explicit permissions blocks in all workflows, SHA-pinned checkout actions
|
|
33
|
+
- **Dependency updates** — axios 1.15.0 (CVE-2025-62718), follow-redirects 1.16.0, hono 4.12.14, actions/cache 5.0.5
|
|
34
|
+
|
|
35
|
+
### Tests
|
|
36
|
+
- 240 suites, 10127 tests, 12 snapshots (up from ~9500 in v1.17.1)
|
|
37
|
+
- Coverage threshold: 90% global, 95% audit, 90% provider, 90% MCP
|
|
38
|
+
|
|
39
|
+
## [1.17.1] - 2026-04-01
|
|
40
|
+
|
|
41
|
+
### Security
|
|
42
|
+
- **28 defence-in-depth fixes** from 5-skill security audit (security-audit, supply-chain, insecure-defaults, sharp-edges, code-review)
|
|
43
|
+
- **`sshExec` type narrowing** — accepts `SshCommand` only (removed `| string`), 33 callers wrapped with `raw()` for explicit shell trust
|
|
44
|
+
- **`SAFE_MODE` typo-safe** — accepts `"yes"`, `"1"`, `"on"` as truthy; warns on unrecognized values; `remove` action now gated
|
|
45
|
+
- **`sanitizedEnv()` expanded blocklist** — 10 secret patterns (up from 4): TOKEN, SECRET, PASSWORD, CREDENTIAL, API_KEY, APIKEY, AUTH_KEY, AUTHKEY, PRIVATE_KEY, ACCESS_KEY
|
|
46
|
+
- **Rollback SHA256 integrity** — `restore-commands.sh` checksum written during backup, verified before execution
|
|
47
|
+
- **MCP error sanitization** — all 12 tool handlers route errors through `sanitizeStderr` to prevent IP/path leakage
|
|
48
|
+
- **Path traversal guard** — `relPath` in rollback validated with allowlist regex (`/^[a-zA-Z0-9_./-]+$/`)
|
|
49
|
+
- **`backupPath` Zod regex** — format constraint prevents tampered `fix-history.json` from injecting shell commands
|
|
50
|
+
- **`SHELL_METACHAR`** — added `&` to block `&&` on fallback path
|
|
51
|
+
- **`sedReplace` path quoting** — POSIX single-quote escape for file paths
|
|
52
|
+
- **`DEBIAN_FRONTEND` scope** — applied to both `apt-get update` and `apt-get upgrade`
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
- **`scheduleManager` `execSync` → `spawnSync`** — temp file approach, no shell interpolation, `updateCrontab()` DRY helper
|
|
56
|
+
- **`encryption.ts` `execSync` → `spawnSync`** — array args for machine ID retrieval
|
|
57
|
+
- **Production deps pinned** — all 11 dependencies use exact versions (no caret ranges)
|
|
58
|
+
- **`isSafeMode()` extracted** to `src/utils/safeMode.ts` (re-exported from `manage.ts`)
|
|
59
|
+
- **Platform fallback** — detection failure defaults to `"bare"` (was `"coolify"`)
|
|
60
|
+
- **`cmd("")` throws** — empty string arguments rejected
|
|
61
|
+
- **`timeoutMs=0` guard** — falls back to default instead of instant kill
|
|
62
|
+
- **ControlMaster socket dir** — created with `mode: 0o700`
|
|
63
|
+
- **`debugLog` redaction** — sensitive keywords and objects redacted
|
|
64
|
+
- **`getServers()` hardened** — JSON.parse catch, provider validation against `SUPPORTED_PROVIDERS`
|
|
65
|
+
- **`warnIfPermissionError`** — shared helper for EACCES/EPERM distinction
|
|
66
|
+
|
|
5
67
|
## [1.17.0] - 2026-04-01
|
|
6
68
|
|
|
7
69
|
### Added
|
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
[](https://socket.dev/npm/package/kastell)
|
|
17
17
|
[](https://snyk.io/test/github/kastelldev/kastell)
|
|
18
18
|
[](https://kastell.dev)
|
|
19
|
+
[](https://deepwiki.com/kastelldev/kastell)
|
|
19
20
|

|
|
20
21
|
|
|
21
22
|
## Why Kastell?
|
|
@@ -45,7 +46,7 @@ Running `kastell` without any arguments launches an **interactive search menu**
|
|
|
45
46
|
██║ ██╗ ██║ ██║ ███████║ ██║ ███████╗███████╗███████╗
|
|
46
47
|
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚══════╝╚══════╝
|
|
47
48
|
|
|
48
|
-
KASTELL
|
|
49
|
+
KASTELL v2.0.0 · Your infrastructure, fortified.
|
|
49
50
|
|
|
50
51
|
$ kastell init --template production → deploy a new server
|
|
51
52
|
$ kastell status --all → check all servers
|
package/README.tr.md
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
[](https://socket.dev/npm/package/kastell)
|
|
17
17
|
[](https://snyk.io/test/github/kastelldev/kastell)
|
|
18
18
|
[](https://kastell.dev)
|
|
19
|
+
[](https://deepwiki.com/kastelldev/kastell)
|
|
19
20
|

|
|
20
21
|
|
|
21
22
|
## Neden Kastell?
|
|
@@ -45,7 +46,7 @@ npx kastell
|
|
|
45
46
|
██║ ██╗ ██║ ██║ ███████║ ██║ ███████╗███████╗███████╗
|
|
46
47
|
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═╝ ╚══════╝╚══════╝╚══════╝
|
|
47
48
|
|
|
48
|
-
KASTELL
|
|
49
|
+
KASTELL v2.0.0 · Your infrastructure, fortified.
|
|
49
50
|
|
|
50
51
|
$ kastell init --template production → deploy a new server
|
|
51
52
|
$ kastell status --all → check all servers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlD,YAAY,EAAE,QAAQ,EAAE,CAAC;AAEzB,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,CAiB3E;AAID,wBAAgB,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,eAAe,CAiB9D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAI1E"}
|
package/dist/adapters/factory.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { CoolifyAdapter } from "./coolify.js";
|
|
2
2
|
import { DokployAdapter } from "./dokploy.js";
|
|
3
3
|
import { assertValidIp, sshExec } from "../utils/ssh.js";
|
|
4
|
+
import { raw } from "../utils/sshCommand.js";
|
|
4
5
|
export async function detectPlatform(ip) {
|
|
5
6
|
assertValidIp(ip);
|
|
6
7
|
try {
|
|
7
8
|
// Check Dokploy first (newer platform, less likely false positive)
|
|
8
|
-
const dokployCheck = await sshExec(ip, "test -d /etc/dokploy && echo dokploy || echo no");
|
|
9
|
+
const dokployCheck = await sshExec(ip, raw("test -d /etc/dokploy && echo dokploy || echo no"));
|
|
9
10
|
if (dokployCheck.code === 0 && dokployCheck.stdout.trim() === "dokploy") {
|
|
10
11
|
return "dokploy";
|
|
11
12
|
}
|
|
12
13
|
// Check Coolify
|
|
13
|
-
const coolifyCheck = await sshExec(ip, "test -d /data/coolify/source && echo coolify || echo no");
|
|
14
|
+
const coolifyCheck = await sshExec(ip, raw("test -d /data/coolify/source && echo coolify || echo no"));
|
|
14
15
|
if (coolifyCheck.code === 0 && coolifyCheck.stdout.trim() === "coolify") {
|
|
15
16
|
return "coolify";
|
|
16
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/adapters/factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAI7C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EAAU;IAC7C,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC/F,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACxE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,gBAAgB;QAChB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACvG,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACxE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAA+C,EAAE,CAAC;AAEpE,MAAM,UAAU,UAAU,CAAC,QAAkB;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,OAAwB,CAAC;IAC7B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/B,MAAM;QACR,KAAK,SAAS;YACZ,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;YAC/B,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,YAAY,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;IAC5C,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC7C,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAsBvB;AASD,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CAoBvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC,CAS/B;AAID,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,QAAQ,EAAE,QAAQ,CAAC;IACnB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,QAAQ,EAAE,QAAQ,CAAC;IACnB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,gBAAgB,EAAE,MAAM,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAID;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAuF/B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,cAAc,EACzB,MAAM,EAAE,oBAAoB,EAC5B,QAAQ,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAiIhC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE7E"}
|
package/dist/adapters/shared.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { writeFileSync } from "fs";
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import axios from "axios";
|
|
4
4
|
import { assertValidIp, sshExec } from "../utils/ssh.js";
|
|
5
|
+
import { raw } from "../utils/sshCommand.js";
|
|
5
6
|
import { debugLog } from "../utils/logger.js";
|
|
6
7
|
import { HTTP_TIMEOUT_MS } from "../constants.js";
|
|
7
8
|
import { formatTimestamp, getBackupDir } from "../utils/backupPath.js";
|
|
8
9
|
import { scpDownload, scpUpload } from "../utils/scp.js";
|
|
9
10
|
import { getErrorMessage, mapSshError, sanitizeStderr } from "../utils/errorMapper.js";
|
|
11
|
+
import { secureMkdirSync } from "../utils/secureWrite.js";
|
|
10
12
|
/**
|
|
11
13
|
* Shared health check for platform adapters.
|
|
12
14
|
* Tries HTTPS via domain first (if provided), then falls back to HTTP on the given port.
|
|
@@ -45,7 +47,7 @@ const UPDATE_TIMEOUT_MS = 180_000;
|
|
|
45
47
|
export async function sharedUpdate(ip, updateCmd) {
|
|
46
48
|
assertValidIp(ip);
|
|
47
49
|
try {
|
|
48
|
-
const result = await sshExec(ip, updateCmd, { timeoutMs: UPDATE_TIMEOUT_MS });
|
|
50
|
+
const result = await sshExec(ip, raw(updateCmd), { timeoutMs: UPDATE_TIMEOUT_MS });
|
|
49
51
|
if (result.code === 0) {
|
|
50
52
|
return { success: true, output: result.stdout || undefined };
|
|
51
53
|
}
|
|
@@ -70,7 +72,7 @@ export async function sharedUpdate(ip, updateCmd) {
|
|
|
70
72
|
*/
|
|
71
73
|
export async function sharedGetStatus(ip, versionCmd, port, domain) {
|
|
72
74
|
assertValidIp(ip);
|
|
73
|
-
const versionResult = await sshExec(ip, versionCmd);
|
|
75
|
+
const versionResult = await sshExec(ip, raw(versionCmd));
|
|
74
76
|
const platformVersion = versionResult.code === 0 ? versionResult.stdout.trim() : "unknown";
|
|
75
77
|
const health = await sharedHealthCheck(ip, port, domain);
|
|
76
78
|
return {
|
|
@@ -87,10 +89,10 @@ export async function sharedCreateBackup(ip, serverName, provider, config) {
|
|
|
87
89
|
assertValidIp(ip);
|
|
88
90
|
try {
|
|
89
91
|
// Step 1: Get platform version (best-effort)
|
|
90
|
-
const versionResult = await sshExec(ip, config.versionCmd);
|
|
92
|
+
const versionResult = await sshExec(ip, raw(config.versionCmd));
|
|
91
93
|
const platformVersion = versionResult.code === 0 ? versionResult.stdout.trim() : "unknown";
|
|
92
94
|
// Step 2: Database backup
|
|
93
|
-
const dbResult = await sshExec(ip, config.pgDumpCmd);
|
|
95
|
+
const dbResult = await sshExec(ip, raw(config.pgDumpCmd));
|
|
94
96
|
if (dbResult.code !== 0) {
|
|
95
97
|
return {
|
|
96
98
|
success: false,
|
|
@@ -99,7 +101,7 @@ export async function sharedCreateBackup(ip, serverName, provider, config) {
|
|
|
99
101
|
};
|
|
100
102
|
}
|
|
101
103
|
// Step 3: Config backup
|
|
102
|
-
const configResult = await sshExec(ip, config.configTarCmd);
|
|
104
|
+
const configResult = await sshExec(ip, raw(config.configTarCmd));
|
|
103
105
|
if (configResult.code !== 0) {
|
|
104
106
|
return {
|
|
105
107
|
success: false,
|
|
@@ -110,7 +112,7 @@ export async function sharedCreateBackup(ip, serverName, provider, config) {
|
|
|
110
112
|
// Step 4: Create local directory and download
|
|
111
113
|
const timestamp = formatTimestamp(new Date());
|
|
112
114
|
const backupPath = join(getBackupDir(serverName), timestamp);
|
|
113
|
-
|
|
115
|
+
secureMkdirSync(backupPath, { recursive: true });
|
|
114
116
|
const dbDl = await scpDownload(ip, `/tmp/${config.dbFileName}`, join(backupPath, config.dbFileName));
|
|
115
117
|
if (dbDl.code !== 0) {
|
|
116
118
|
return {
|
|
@@ -139,7 +141,7 @@ export async function sharedCreateBackup(ip, serverName, provider, config) {
|
|
|
139
141
|
};
|
|
140
142
|
writeFileSync(join(backupPath, "manifest.json"), JSON.stringify(manifest, null, 2), { mode: 0o600 });
|
|
141
143
|
// Step 6: Cleanup remote (best-effort)
|
|
142
|
-
await sshExec(ip, config.cleanupCmd).catch((e) => debugLog?.("backup cleanup failed:", e));
|
|
144
|
+
await sshExec(ip, raw(config.cleanupCmd)).catch((e) => debugLog?.("backup cleanup failed:", e));
|
|
143
145
|
return { success: true, backupPath, manifest };
|
|
144
146
|
}
|
|
145
147
|
catch (error) {
|
|
@@ -193,7 +195,7 @@ export async function sharedRestoreBackup(ip, backupPath, _manifest, config, _op
|
|
|
193
195
|
steps.push({ name: "Upload config backup", status: "success" });
|
|
194
196
|
// Step 1: Stop platform
|
|
195
197
|
const platformLabel = adapterDisplayName({ name: config.platform });
|
|
196
|
-
const stopResult = await sshExec(ip, config.stopCmd);
|
|
198
|
+
const stopResult = await sshExec(ip, raw(config.stopCmd));
|
|
197
199
|
if (stopResult.code !== 0) {
|
|
198
200
|
steps.push({
|
|
199
201
|
name: `Stop ${platformLabel}`,
|
|
@@ -204,43 +206,43 @@ export async function sharedRestoreBackup(ip, backupPath, _manifest, config, _op
|
|
|
204
206
|
}
|
|
205
207
|
steps.push({ name: `Stop ${platformLabel}`, status: "success" });
|
|
206
208
|
// Step 2: Start DB only
|
|
207
|
-
const dbStartResult = await sshExec(ip, config.startDbCmd);
|
|
209
|
+
const dbStartResult = await sshExec(ip, raw(config.startDbCmd));
|
|
208
210
|
if (dbStartResult.code !== 0) {
|
|
209
211
|
steps.push({
|
|
210
212
|
name: "Start database",
|
|
211
213
|
status: "failure",
|
|
212
214
|
error: sanitizeStderr(dbStartResult.stderr),
|
|
213
215
|
});
|
|
214
|
-
await sshExec(ip, config.tryRestartCmd).catch((e) => debugLog?.("restart after db start failure:", e));
|
|
216
|
+
await sshExec(ip, raw(config.tryRestartCmd)).catch((e) => debugLog?.("restart after db start failure:", e));
|
|
215
217
|
return { success: false, steps, error: "Failed to start database" };
|
|
216
218
|
}
|
|
217
219
|
steps.push({ name: "Start database", status: "success" });
|
|
218
220
|
// Step 3: Restore database
|
|
219
|
-
const restoreDbResult = await sshExec(ip, config.restoreDbCmd);
|
|
221
|
+
const restoreDbResult = await sshExec(ip, raw(config.restoreDbCmd));
|
|
220
222
|
if (restoreDbResult.code !== 0) {
|
|
221
223
|
steps.push({
|
|
222
224
|
name: "Restore database",
|
|
223
225
|
status: "failure",
|
|
224
226
|
error: sanitizeStderr(restoreDbResult.stderr),
|
|
225
227
|
});
|
|
226
|
-
await sshExec(ip, config.tryRestartCmd).catch((e) => debugLog?.("restart after db restore failure:", e));
|
|
228
|
+
await sshExec(ip, raw(config.tryRestartCmd)).catch((e) => debugLog?.("restart after db restore failure:", e));
|
|
227
229
|
return { success: false, steps, error: "Database restore failed" };
|
|
228
230
|
}
|
|
229
231
|
steps.push({ name: "Restore database", status: "success" });
|
|
230
232
|
// Step 4: Restore config
|
|
231
|
-
const restoreConfigResult = await sshExec(ip, config.restoreConfigCmd);
|
|
233
|
+
const restoreConfigResult = await sshExec(ip, raw(config.restoreConfigCmd));
|
|
232
234
|
if (restoreConfigResult.code !== 0) {
|
|
233
235
|
steps.push({
|
|
234
236
|
name: "Restore config",
|
|
235
237
|
status: "failure",
|
|
236
238
|
error: sanitizeStderr(restoreConfigResult.stderr),
|
|
237
239
|
});
|
|
238
|
-
await sshExec(ip, config.tryRestartCmd).catch((e) => debugLog?.("restart after config restore failure:", e));
|
|
240
|
+
await sshExec(ip, raw(config.tryRestartCmd)).catch((e) => debugLog?.("restart after config restore failure:", e));
|
|
239
241
|
return { success: false, steps, error: "Config restore failed" };
|
|
240
242
|
}
|
|
241
243
|
steps.push({ name: "Restore config", status: "success" });
|
|
242
244
|
// Step 5: Start platform
|
|
243
|
-
const startResult = await sshExec(ip, config.startCmd);
|
|
245
|
+
const startResult = await sshExec(ip, raw(config.startCmd));
|
|
244
246
|
if (startResult.code !== 0) {
|
|
245
247
|
steps.push({
|
|
246
248
|
name: `Start ${platformLabel}`,
|
|
@@ -251,7 +253,7 @@ export async function sharedRestoreBackup(ip, backupPath, _manifest, config, _op
|
|
|
251
253
|
}
|
|
252
254
|
steps.push({ name: `Start ${platformLabel}`, status: "success" });
|
|
253
255
|
// Cleanup remote (best-effort)
|
|
254
|
-
await sshExec(ip, config.cleanupCmd).catch((e) => debugLog?.("restore cleanup failed:", e));
|
|
256
|
+
await sshExec(ip, raw(config.cleanupCmd)).catch((e) => debugLog?.("restore cleanup failed:", e));
|
|
255
257
|
return { success: true, steps };
|
|
256
258
|
}
|
|
257
259
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAU1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAU,EACV,IAAY,EACZ,MAAe;IAEf,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,EAAE;gBACnC,OAAO,EAAE,eAAe;gBACxB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;aAC3B,CAAC,CAAC;YACH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,EAAE;YACtC,OAAO,EAAE,eAAe;YACxB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;SAC3B,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAU,EACV,SAAiB;IAEjB,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnF,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,4BAA4B,MAAM,CAAC,IAAI,GAAG;YACjD,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAU,EACV,UAAkB,EAClB,IAAY,EACZ,MAAe;IAEf,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzD,OAAO;QACL,eAAe;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC;AA0CD,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAU,EACV,UAAkB,EAClB,QAAgB,EAChB,MAA2B;IAE3B,aAAa,CAAC,EAAE,CAAC,CAAC;IAElB,IAAI,CAAC;QACH,6CAA6C;QAC7C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAChE,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3F,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1D,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,wBAAwB;gBAC/B,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS;aACnD,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACjE,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS;aACvD,CAAC;QACJ,CAAC;QAED,8CAA8C;QAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7D,eAAe,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,EAAE,EACF,QAAQ,MAAM,CAAC,UAAU,EAAE,EAC3B,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CACpC,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,oCAAoC;gBAC3C,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS;aAC/C,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,EAAE,EACF,QAAQ,MAAM,CAAC,cAAc,EAAE,EAC/B,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,CACxC,CAAC;QACF,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,kCAAkC;gBACzC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS;aACnD,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,sFAAsF;QACtF,MAAM,QAAQ,GAAmB;YAC/B,UAAU;YACV,QAAQ;YACR,SAAS;YACT,cAAc,EAAE,eAAe;YAC/B,KAAK,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC;YACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;QACF,aAAa,CACX,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACjC,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;QAEF,uCAAuC;QACvC,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACjD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAU,EACV,UAAkB,EAClB,SAAyB,EACzB,MAA4B,EAC5B,QAA8B;IAE9B,aAAa,CAAC,EAAE,CAAC,CAAC;IAElB,MAAM,KAAK,GAIN,EAAE,CAAC;IAER,IAAI,CAAC;QACH,sEAAsE;QACtE,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,EAAE,EACF,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,EACnC,QAAQ,MAAM,CAAC,UAAU,EAAE,CAC5B,CAAC;QACF,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,wBAAwB;wBAC9B,MAAM,EAAE,SAAS;wBACjB,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;qBACvC;iBACF;gBACD,KAAK,EAAE,kCAAkC;aAC1C,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAElE,MAAM,YAAY,GAAG,MAAM,SAAS,CAClC,EAAE,EACF,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,cAAc,CAAC,EACvC,QAAQ,MAAM,CAAC,cAAc,EAAE,CAChC,CAAC;QACF,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,GAAG,KAAK;oBACR;wBACE,IAAI,EAAE,sBAAsB;wBAC5B,MAAM,EAAE,SAAS;wBACjB,KAAK,EAAE,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC;qBAC3C;iBACF;gBACD,KAAK,EAAE,gCAAgC;aACxC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhE,wBAAwB;QACxB,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,QAAQ,aAAa,EAAE;gBAC7B,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;aACzC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,aAAa,EAAE,EAAE,CAAC;QAC7E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,aAAa,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAEjE,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAChE,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC;aAC5C,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5G,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;QACtE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAE1D,2BAA2B;QAC3B,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACpE,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC;aAC9C,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9G,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAE5D,yBAAyB;QACzB,MAAM,mBAAmB,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC5E,IAAI,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC;aAClD,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;QACnE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAE1D,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5D,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,SAAS,aAAa,EAAE;gBAC9B,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC;aAC1C,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,aAAa,EAAE,EAAE,CAAC;QAC9E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,aAAa,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAElE,+BAA+B;QAC/B,MAAM,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK;YACL,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAkC;IACnE,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAsOA,wBAAsB,aAAa,CACjC,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAChF,OAAO,CAAC,IAAI,CAAC,CAiFf"}
|
package/dist/commands/backup.js
CHANGED
|
@@ -4,7 +4,7 @@ import { getServers } from "../utils/config.js";
|
|
|
4
4
|
import { resolveServer } from "../utils/serverSelect.js";
|
|
5
5
|
import { checkSshAvailable } from "../utils/ssh.js";
|
|
6
6
|
import { logger, createSpinner } from "../utils/logger.js";
|
|
7
|
-
import {
|
|
7
|
+
import { mapSshError, classifyError } from "../utils/errorMapper.js";
|
|
8
8
|
import { resolvePlatform } from "../adapters/factory.js";
|
|
9
9
|
import { formatTimestamp, getBackupDir, listBackups, backupServer, listOrphanBackups, cleanupServerBackups, } from "../core/backup.js";
|
|
10
10
|
import { scheduleBackup, listBackupSchedule, removeBackupSchedule, validateCronExpr, } from "../core/backupSchedule.js";
|
|
@@ -35,7 +35,15 @@ async function backupSingleServer(server, dryRun) {
|
|
|
35
35
|
}
|
|
36
36
|
catch (error) {
|
|
37
37
|
spinner.fail(`[${server.name}] Backup failed`);
|
|
38
|
-
|
|
38
|
+
const classified = classifyError(error);
|
|
39
|
+
logger.error(classified.message);
|
|
40
|
+
if (classified.hint)
|
|
41
|
+
logger.info(classified.hint);
|
|
42
|
+
if (!classified.isTyped) {
|
|
43
|
+
const hint = mapSshError(error, server.ip);
|
|
44
|
+
if (hint)
|
|
45
|
+
logger.info(hint);
|
|
46
|
+
}
|
|
39
47
|
return false;
|
|
40
48
|
}
|
|
41
49
|
}
|
|
@@ -262,7 +270,15 @@ export async function backupCommand(query, options) {
|
|
|
262
270
|
}
|
|
263
271
|
catch (error) {
|
|
264
272
|
spinner.fail("Backup failed");
|
|
265
|
-
|
|
273
|
+
const classified = classifyError(error);
|
|
274
|
+
logger.error(classified.message);
|
|
275
|
+
if (classified.hint)
|
|
276
|
+
logger.info(classified.hint);
|
|
277
|
+
if (!classified.isTyped) {
|
|
278
|
+
const hint = mapSshError(error, server.ip);
|
|
279
|
+
if (hint)
|
|
280
|
+
logger.info(hint);
|
|
281
|
+
}
|
|
266
282
|
}
|
|
267
283
|
}
|
|
268
284
|
//# sourceMappingURL=backup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAUA,wBAAsB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAUA,wBAAsB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgIvF"}
|
package/dist/commands/config.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getDefaults, setDefault, getDefault, resetDefaults, VALID_KEYS, } from "../utils/defaults.js";
|
|
2
2
|
import { logger } from "../utils/logger.js";
|
|
3
|
-
import {
|
|
3
|
+
import { classifyError } from "../utils/errorMapper.js";
|
|
4
4
|
export async function configCommand(subcommand, args) {
|
|
5
5
|
switch (subcommand) {
|
|
6
6
|
case "set": {
|
|
@@ -14,7 +14,10 @@ export async function configCommand(subcommand, args) {
|
|
|
14
14
|
logger.success(`Set ${key} = ${value}`);
|
|
15
15
|
}
|
|
16
16
|
catch (error) {
|
|
17
|
-
|
|
17
|
+
const classified = classifyError(error);
|
|
18
|
+
logger.error(classified.message);
|
|
19
|
+
if (classified.hint)
|
|
20
|
+
logger.info(classified.hint);
|
|
18
21
|
}
|
|
19
22
|
break;
|
|
20
23
|
}
|
|
@@ -76,13 +79,49 @@ export async function configCommand(subcommand, args) {
|
|
|
76
79
|
}
|
|
77
80
|
break;
|
|
78
81
|
}
|
|
82
|
+
case "repair": {
|
|
83
|
+
const { diagnoseConfig, repairConfig } = await import("../core/configRepair.js");
|
|
84
|
+
const { join } = await import("path");
|
|
85
|
+
const { KASTELL_DIR } = await import("../utils/paths.js");
|
|
86
|
+
const inquirer = await import("inquirer");
|
|
87
|
+
const serversFile = join(KASTELL_DIR, "servers.json");
|
|
88
|
+
const diagnosis = diagnoseConfig(serversFile);
|
|
89
|
+
if (diagnosis.status === "missing") {
|
|
90
|
+
logger.info("No servers.json found — nothing to repair");
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (diagnosis.status === "healthy") {
|
|
94
|
+
logger.success(`servers.json is healthy (${diagnosis.validCount} servers)`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
logger.warning(`Config status: ${diagnosis.status}`);
|
|
98
|
+
logger.info(` Total: ${diagnosis.totalCount}, Valid: ${diagnosis.validCount}, Invalid: ${diagnosis.invalidCount}, Auto-fixable: ${diagnosis.autoFixableCount}`);
|
|
99
|
+
for (const issue of diagnosis.issues) {
|
|
100
|
+
logger.warning(` ${issue.message}`);
|
|
101
|
+
}
|
|
102
|
+
const { proceed } = await inquirer.default.prompt([{
|
|
103
|
+
type: "confirm",
|
|
104
|
+
name: "proceed",
|
|
105
|
+
message: `Repair will drop ${diagnosis.invalidCount} invalid entries and auto-fix ${diagnosis.autoFixableCount}. Continue?`,
|
|
106
|
+
default: false,
|
|
107
|
+
}]);
|
|
108
|
+
if (!proceed) {
|
|
109
|
+
logger.info("Repair cancelled");
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const result = repairConfig(serversFile);
|
|
113
|
+
logger.success(`Repair complete: ${result.recoveredCount} recovered, ${result.autoFixedCount} auto-fixed, ${result.droppedCount} dropped`);
|
|
114
|
+
logger.info(`Backup saved: ${result.backupPath}`);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
79
117
|
default:
|
|
80
|
-
logger.error("Usage: kastell config <set|get|list|reset|validate>");
|
|
118
|
+
logger.error("Usage: kastell config <set|get|list|reset|validate|repair>");
|
|
81
119
|
logger.info(` set <key> <value> Set a default value`);
|
|
82
120
|
logger.info(` get <key> Get a default value`);
|
|
83
121
|
logger.info(` list Show all defaults`);
|
|
84
122
|
logger.info(` reset Clear all defaults`);
|
|
85
123
|
logger.info(` validate <path> Validate a kastell.yml config file`);
|
|
124
|
+
logger.info(` repair Diagnose and fix corrupt servers.json`);
|
|
86
125
|
logger.info(``);
|
|
87
126
|
logger.info(`Valid keys: ${VALID_KEYS.join(", ")}`);
|
|
88
127
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/fix.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAoCA;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAoCA;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CAmef"}
|
package/dist/commands/fix.js
CHANGED
|
@@ -12,7 +12,7 @@ import { buildImpactContext } from "../core/audit/scoring.js";
|
|
|
12
12
|
import { filterChecksByProfile, isValidProfile, listAllProfileNames } from "../core/audit/profiles.js";
|
|
13
13
|
import { writeFixReport } from "../utils/fixReport.js";
|
|
14
14
|
import { backupServer } from "../core/backup.js";
|
|
15
|
-
import {
|
|
15
|
+
import { classifyError } from "../utils/errorMapper.js";
|
|
16
16
|
import { loadFixHistory, saveFixHistory, saveRollbackEntry, generateFixId, backupFilesBeforeFix, rollbackFix, backupRemoteCleanup, rollbackAllFixes, rollbackToFix, } from "../core/audit/fix-history.js";
|
|
17
17
|
/**
|
|
18
18
|
* `kastell fix --safe` command.
|
|
@@ -217,6 +217,10 @@ export async function fixSafeCommand(query, options) {
|
|
|
217
217
|
}
|
|
218
218
|
selectedChecks = selectChecksForTarget(sortedChecks, auditResult.overallScore, parsedTarget);
|
|
219
219
|
}
|
|
220
|
+
else if (options.checks) {
|
|
221
|
+
const checkIds = new Set(options.checks.split(",").map((s) => s.trim()));
|
|
222
|
+
selectedChecks = sortedChecks.filter((c) => checkIds.has(c.id));
|
|
223
|
+
}
|
|
220
224
|
else {
|
|
221
225
|
selectedChecks = sortedChecks;
|
|
222
226
|
}
|
|
@@ -336,7 +340,9 @@ export async function fixSafeCommand(query, options) {
|
|
|
336
340
|
}
|
|
337
341
|
}
|
|
338
342
|
catch (err) {
|
|
339
|
-
|
|
343
|
+
const classified = classifyError(err);
|
|
344
|
+
const detail = classified.hint ? `${classified.message} (${classified.hint})` : classified.message;
|
|
345
|
+
errors.push(`${check.id}: ${detail}`);
|
|
340
346
|
}
|
|
341
347
|
}
|
|
342
348
|
fixSpinner.stop();
|