signalk-backup 0.5.0 → 0.6.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 +35 -27
- package/package.json +4 -2
- package/plugin/config/image-tag.d.ts +1 -1
- package/plugin/config/image-tag.d.ts.map +1 -1
- package/plugin/config/image-tag.js +6 -13
- package/plugin/config/image-tag.js.map +1 -1
- package/plugin/config/schema.js +1 -1
- package/plugin/config/schema.js.map +1 -1
- package/plugin/database-export/staging-routes.d.ts +19 -0
- package/plugin/database-export/staging-routes.d.ts.map +1 -0
- package/plugin/database-export/staging-routes.js +205 -0
- package/plugin/database-export/staging-routes.js.map +1 -0
- package/plugin/index.d.ts.map +1 -1
- package/plugin/index.js +32 -2
- package/plugin/index.js.map +1 -1
- package/plugin/restore-host-write.d.ts +26 -0
- package/plugin/restore-host-write.d.ts.map +1 -0
- package/plugin/restore-host-write.js +363 -0
- package/plugin/restore-host-write.js.map +1 -0
- package/public/assets/{index-BbZnGesz.js → index-C8j20cZ-.js} +2 -2
- package/public/assets/{index-BbZnGesz.js.map → index-C8j20cZ-.js.map} +1 -1
- package/public/assets/main-B53J3gmZ.js +11 -0
- package/public/assets/main-B53J3gmZ.js.map +1 -0
- package/public/index.html +1 -1
- package/public/assets/main-Bb6YhYnz.js +0 -11
- package/public/assets/main-Bb6YhYnz.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
# signalk-backup
|
|
2
2
|
|
|
3
|
-
Scheduled deduplicated backups of your SignalK config (and optionally history) to local storage
|
|
3
|
+
Scheduled deduplicated backups of your SignalK config (and optionally history) to local storage, USB / NAS, or Google Drive — with a tree-browser that lets you restore individual files from any snapshot, anywhere your user can write.
|
|
4
4
|
|
|
5
|
-
The plugin
|
|
5
|
+
The plugin runs a React webapp inside the SignalK Admin UI and orchestrates a separate backup-engine container ([signalk-backup-server](https://github.com/dirkwa/signalk-backup-server)). All Kopia snapshot work happens in the container; the plugin handles the UI, the database-export tick, and host-side file writes for restores that target paths the container can't see.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- **Content-addressable deduplication** — Kopia stores file blobs once across all snapshots; identical config files between hourly/daily/weekly retention tiers cost nothing
|
|
10
|
-
- **Cloud sync to Google Drive** — optional, opt-in. Uses rclone with `drive.file` scope (the app only sees files it created)
|
|
11
10
|
- **Scheduled backups** — hourly / daily / weekly / on-startup tiers, each with independent retention
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
11
|
+
- **Cloud + local destinations** — Google Drive (rclone, `drive.file` scope, opt-in OAuth), USB / NAS via local-fs, or SMB share. Snapshots stay in the local Kopia repo even when cloud sync is configured
|
|
12
|
+
- **Selective restore** — browse any backup's file tree, download a single file or whole subdirectory, or restore in-place. The trailing slash on a custom path means "land inside as a directory", so `tmp/` plus a file source writes `tmp/<filename>` instead of overwriting `tmp` as a file
|
|
13
|
+
- **Restore-anywhere** — custom-path restores stream through the plugin and write under the SignalK user's permissions, so you can land restored bytes in `/tmp`, `/media/usb/...`, or your home directory — anywhere your user can write
|
|
14
|
+
- **Restore with safety backup** — every full restore creates a snapshot of the current state first; partial restores stash the existing target as a sibling before overwriting. Both flows can be rolled back automatically on failure
|
|
15
|
+
- **Database export pipeline** — opt-in exporters for [signalk-questdb](https://github.com/dirkwa/signalk-questdb), [signalk-grafana](https://github.com/dirkwa/signalk-grafana), and [signalk-database](https://github.com/dirkwa/signalk-database) periodically write consistent snapshots (parquet, SQLite checkpoint, provisioning YAML) to a staging dir that Kopia includes in every snapshot. Live DB files are excluded from filesystem backup to avoid torn-write hazards. The dedicated "Database exports" tab also extracts the export subtree from any historical backup without pulling the whole snapshot — a direct answer to "QuestDB shards bloat the full zip"
|
|
14
16
|
- **First-run safe default** — installs with a daily local-only schedule already seeded; no surprise data egress
|
|
15
17
|
- **Update detection** — checks ghcr.io for new container images via signalk-container's centralized update service
|
|
16
18
|
|
|
@@ -18,7 +20,7 @@ The plugin is a thin shell: it asks [signalk-container](https://github.com/dirkw
|
|
|
18
20
|
|
|
19
21
|
- SignalK Server ≥ 2.24.0
|
|
20
22
|
- Node 22 or newer (24 recommended)
|
|
21
|
-
- [signalk-container](https://github.com/dirkwa/signalk-container) ≥
|
|
23
|
+
- [signalk-container](https://github.com/dirkwa/signalk-container) ≥ 1.6.0 (provides the container runtime)
|
|
22
24
|
- Podman or Docker on the host
|
|
23
25
|
|
|
24
26
|
## Install
|
|
@@ -28,38 +30,44 @@ The plugin is a thin shell: it asks [signalk-container](https://github.com/dirkw
|
|
|
28
30
|
# (auto-enables on install — first-run schedules a daily local backup)
|
|
29
31
|
```
|
|
30
32
|
|
|
31
|
-
The plugin pulls `ghcr.io/dirkwa/signalk-backup-server
|
|
33
|
+
The plugin pulls `ghcr.io/dirkwa/signalk-backup-server` at a server version it pins itself (see [src/config/image-tag.ts](src/config/image-tag.ts)). Plugin releases and server releases are decoupled — you can pin or float either independently via the plugin's `imageTag` setting.
|
|
32
34
|
|
|
33
35
|
## How it works
|
|
34
36
|
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
└── /
|
|
38
|
-
└── plugin
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
```text
|
|
38
|
+
Browser
|
|
39
|
+
└── /signalk-backup/ ← plugin webapp (React)
|
|
40
|
+
└── /plugins/signalk-backup/api/* ← plugin's reverse proxy
|
|
41
|
+
├── /api/db-export/staging ← plugin-local (file lister)
|
|
42
|
+
├── /api/restore-partial-host ← plugin-local (writes to host fs)
|
|
43
|
+
└── /api/backups/*, /api/cloud/*, … ← proxied to backup-server container
|
|
44
|
+
└── http://127.0.0.1:<port>/api/*
|
|
45
|
+
(Kopia snapshots, restore-with-rollback,
|
|
46
|
+
partial-restore state machine, cloud sync)
|
|
41
47
|
```
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
The plugin is most of the user experience:
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
- The **webapp** at `/signalk-backup/` is a React SPA bundled by Vite. It runs in the SignalK admin origin and reads/writes via `fetch('/plugins/signalk-backup/api/*')`. No CORS dance, no separate auth — it inherits SignalK's.
|
|
52
|
+
- The **plugin process** owns three things directly: the database-export scheduler tick, an HTTP route that lists / streams files from the staging tree (so the webapp can show "live" exports), and an HTTP route that performs host-side file writes for custom-path restores.
|
|
53
|
+
- Everything else — Kopia snapshots, restore-with-rollback, cloud sync, scheduling — runs in the [signalk-backup-server](https://github.com/dirkwa/signalk-backup-server) container. The plugin reverse-proxies `/api/*` through to it, and adds a small set of explicit overrides above the catch-all proxy.
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
The webapp has four tabs:
|
|
48
56
|
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
- Cloud sync
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
- Snapshot browser, restore wizard
|
|
57
|
+
- **Dashboard** — status, recent backups, scheduler next-run times
|
|
58
|
+
- **Backups** — create, list, download, restore (full or selective), upload a ZIP, delete
|
|
59
|
+
- **Database exports** — live staging table (one row per exporter file currently on disk) plus a "pick a backup → browse the database-exports subtree" extractor for grabbing historical shards without pulling the whole snapshot
|
|
60
|
+
- **Cloud sync** — provider chooser (Google Drive / local / SMB), credentials, sync mode, on-demand sync
|
|
61
|
+
|
|
62
|
+
## Configuration
|
|
56
63
|
|
|
57
|
-
The SignalK Admin UI
|
|
64
|
+
Most settings live in the **webapp** under Settings. The plugin's SignalK Admin UI config panel is intentionally small and handles only deployment-level options (the schema in [src/config/schema.ts](src/config/schema.ts) is the source of truth — update this list if you bump it):
|
|
58
65
|
|
|
59
|
-
- `managedContainer` —
|
|
60
|
-
- `imageTag` — pin a specific version or use
|
|
66
|
+
- `managedContainer` — let the plugin manage the backup-server container (default), or point at an external instance
|
|
67
|
+
- `imageTag` — pin a specific version or use `auto` (default — resolves to the BACKUP_SERVER_VERSION constant)
|
|
61
68
|
- `externalUrl` — only used when `managedContainer: false`
|
|
62
|
-
- `
|
|
69
|
+
- `databaseExport.{questdb, grafana, signalkDatabase}` — enable per-exporter (default off; users opt in once their DB plugin is producing data)
|
|
70
|
+
- `databaseExport.intervalMinutes` — how often the export tick runs (5–1440)
|
|
63
71
|
|
|
64
72
|
## License
|
|
65
73
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "signalk-backup",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Scheduled deduplicated backups of SignalK config to local storage and Google Drive (via Kopia + rclone)",
|
|
5
5
|
"main": "plugin/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -49,7 +49,8 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@sinclair/typebox": "^0.34.0",
|
|
52
|
-
"bonjour-service": "^1.3.0"
|
|
52
|
+
"bonjour-service": "^1.3.0",
|
|
53
|
+
"unzipper": "^0.12.3"
|
|
53
54
|
},
|
|
54
55
|
"peerDependencies": {
|
|
55
56
|
"signalk-container": ">=1.6.0"
|
|
@@ -68,6 +69,7 @@
|
|
|
68
69
|
"@types/react": "^19.2.14",
|
|
69
70
|
"@types/react-dom": "^19.2.3",
|
|
70
71
|
"@types/supertest": "^7.2.0",
|
|
72
|
+
"@types/unzipper": "^0.10.11",
|
|
71
73
|
"@vitejs/plugin-react": "^6.0.1",
|
|
72
74
|
"bootstrap": "^5.3.8",
|
|
73
75
|
"eslint": "^10.3.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-tag.d.ts","sourceRoot":"","sources":["../../src/config/image-tag.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"image-tag.d.ts","sourceRoot":"","sources":["../../src/config/image-tag.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,UAAU,CAAA;AAE5C,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const raw = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
7
|
-
if (typeof raw.version !== 'string') {
|
|
8
|
-
throw new Error('signalk-backup package.json has no version field');
|
|
9
|
-
}
|
|
10
|
-
return raw.version;
|
|
11
|
-
})();
|
|
12
|
-
// 'auto' resolves to PLUGIN_VERSION so the container tracks plugin upgrades; other tags pass through.
|
|
1
|
+
// The signalk-backup-server image version that "auto" resolves to.
|
|
2
|
+
// Bump this when a new signalk-backup-server release is published to ghcr.io.
|
|
3
|
+
// Independent of signalk-backup's own package.json version — the two repos
|
|
4
|
+
// release on independent cadences. See AGENTS.md "Gotchas" for rationale.
|
|
5
|
+
export const BACKUP_SERVER_VERSION = '0.5.0';
|
|
13
6
|
export function resolveImageTag(tag) {
|
|
14
|
-
return tag === 'auto' ?
|
|
7
|
+
return tag === 'auto' ? BACKUP_SERVER_VERSION : tag;
|
|
15
8
|
}
|
|
16
9
|
//# sourceMappingURL=image-tag.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-tag.js","sourceRoot":"","sources":["../../src/config/image-tag.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"image-tag.js","sourceRoot":"","sources":["../../src/config/image-tag.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,8EAA8E;AAC9E,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAA;AAE5C,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAA;AACrD,CAAC"}
|
package/plugin/config/schema.js
CHANGED
|
@@ -19,7 +19,7 @@ export const ConfigSchema = Type.Object({
|
|
|
19
19
|
imageTag: Type.String({
|
|
20
20
|
default: 'auto',
|
|
21
21
|
title: 'Container image tag',
|
|
22
|
-
description: '"auto" (default) tracks the
|
|
22
|
+
description: '"auto" (default) tracks the signalk-backup-server version this plugin release was tested against. ' +
|
|
23
23
|
'Pin to a specific version (e.g. "0.4.0") or use a floating tag (e.g. "latest") to override.'
|
|
24
24
|
}),
|
|
25
25
|
externalUrl: Type.String({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,mBAAmB,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,+CAA+C;QACtD,WAAW,EACT,0FAA0F;YAC1F,4EAA4E;KAC/E,CAAC;IACF,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAU,MAAM,mBAAmB,CAAA;AAEhD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IACtC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,+CAA+C;QACtD,WAAW,EACT,0FAA0F;YAC1F,4EAA4E;KAC/E,CAAC;IACF,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,oGAAoG;YACpG,6FAA6F;KAChG,CAAC;IACF,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;QACvB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,8EAA8E;YAC9E,0CAA0C;KAC7C,CAAC;IACF,oEAAoE;IACpE,mEAAmE;IACnE,cAAc,EAAE,IAAI,CAAC,MAAM,CACzB;QACE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACzC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACjD,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KACzE,EACD;QACE,OAAO,EAAE;YACP,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,eAAe,EAAE,KAAK;YACtB,eAAe,EAAE,EAAE;SACpB;KACF,CACF;CACF,CAAC,CAAA;AAIF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAW;IACrC,gBAAgB,EAAE,IAAI;IACtB,QAAQ,EAAE,MAAM;IAChB,WAAW,EAAE,EAAE;IACf,cAAc,EAAE;QACd,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;QACd,eAAe,EAAE,KAAK;QACtB,eAAe,EAAE,EAAE;KACpB;CACF,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { IRouter } from 'express';
|
|
2
|
+
export interface StagingEntry {
|
|
3
|
+
path: string;
|
|
4
|
+
size: number;
|
|
5
|
+
mtime: string;
|
|
6
|
+
}
|
|
7
|
+
export interface StagingRoutesOptions {
|
|
8
|
+
getStagingRoot: () => string;
|
|
9
|
+
log?: (msg: string) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function registerStagingRoutes(router: IRouter, opts: StagingRoutesOptions): void;
|
|
12
|
+
export declare function listStagingFiles(stagingRoot: string): Promise<StagingEntry[]>;
|
|
13
|
+
export declare class StagingPathError extends Error {
|
|
14
|
+
readonly code: 'INVALID_FILE' | 'OUTSIDE_ROOT';
|
|
15
|
+
readonly status: number;
|
|
16
|
+
constructor(message: string, code: 'INVALID_FILE' | 'OUTSIDE_ROOT', status: number);
|
|
17
|
+
}
|
|
18
|
+
export declare function resolveStagingFile(stagingRoot: string, file: string): Promise<string>;
|
|
19
|
+
//# sourceMappingURL=staging-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging-routes.d.ts","sourceRoot":"","sources":["../../src/database-export/staging-routes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5B;AAGD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAyGvF;AAID,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAMnF;AA8BD,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,IAAI,EAAE,cAAc,GAAG,cAAc;aACrC,MAAM,EAAE,MAAM;gBAF9B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,cAAc,GAAG,cAAc,EACrC,MAAM,EAAE,MAAM;CAKjC;AAID,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B3F"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// stagingRoot is hard-pinned by the caller; the file query param is
|
|
2
|
+
// realpath-resolved against it so a manipulated request can't escape.
|
|
3
|
+
import { createReadStream } from 'node:fs';
|
|
4
|
+
import { lstat, readdir, realpath, stat } from 'node:fs/promises';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
// Must register before /api/* proxy catch-all to avoid forwarding to backup-server.
|
|
7
|
+
export function registerStagingRoutes(router, opts) {
|
|
8
|
+
router.get('/api/db-export/staging', async (_req, res) => {
|
|
9
|
+
const root = opts.getStagingRoot();
|
|
10
|
+
try {
|
|
11
|
+
const entries = await listStagingFiles(root);
|
|
12
|
+
res.json({
|
|
13
|
+
success: true,
|
|
14
|
+
data: { stagingRoot: root, entries },
|
|
15
|
+
timestamp: new Date().toISOString()
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
opts.log?.(`staging list failed: ${errMsg(err)}`);
|
|
20
|
+
if (isENOENT(err)) {
|
|
21
|
+
res.json({
|
|
22
|
+
success: true,
|
|
23
|
+
data: { stagingRoot: root, entries: [] },
|
|
24
|
+
timestamp: new Date().toISOString()
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
res.status(500).json({
|
|
29
|
+
success: false,
|
|
30
|
+
error: { code: 'STAGING_LIST_FAILED', message: errMsg(err) },
|
|
31
|
+
timestamp: new Date().toISOString()
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
router.get('/api/db-export/staging/download', async (req, res) => {
|
|
36
|
+
const fileParam = typeof req.query.file === 'string' ? req.query.file : '';
|
|
37
|
+
if (!fileParam) {
|
|
38
|
+
res.status(400).json({
|
|
39
|
+
success: false,
|
|
40
|
+
error: {
|
|
41
|
+
code: 'INVALID_INPUT',
|
|
42
|
+
message: 'file query parameter is required'
|
|
43
|
+
},
|
|
44
|
+
timestamp: new Date().toISOString()
|
|
45
|
+
});
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const root = opts.getStagingRoot();
|
|
49
|
+
let absoluteFile;
|
|
50
|
+
try {
|
|
51
|
+
absoluteFile = await resolveStagingFile(root, fileParam);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const status = err instanceof StagingPathError ? err.status : 500;
|
|
55
|
+
res.status(status).json({
|
|
56
|
+
success: false,
|
|
57
|
+
error: {
|
|
58
|
+
code: err instanceof StagingPathError ? err.code : 'INTERNAL',
|
|
59
|
+
message: errMsg(err)
|
|
60
|
+
},
|
|
61
|
+
timestamp: new Date().toISOString()
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Stat is the final gate: if the resolved path is a directory we
|
|
66
|
+
// refuse — directory downloads go through the server's zip-subtree
|
|
67
|
+
// endpoint, not here.
|
|
68
|
+
let s;
|
|
69
|
+
try {
|
|
70
|
+
s = await stat(absoluteFile);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const status = isENOENT(err) ? 404 : 500;
|
|
74
|
+
res.status(status).json({
|
|
75
|
+
success: false,
|
|
76
|
+
error: {
|
|
77
|
+
code: status === 404 ? 'FILE_NOT_FOUND' : 'STAT_FAILED',
|
|
78
|
+
message: errMsg(err)
|
|
79
|
+
},
|
|
80
|
+
timestamp: new Date().toISOString()
|
|
81
|
+
});
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (!s.isFile()) {
|
|
85
|
+
res.status(400).json({
|
|
86
|
+
success: false,
|
|
87
|
+
error: {
|
|
88
|
+
code: 'NOT_A_FILE',
|
|
89
|
+
message: 'staging download only serves regular files; use the snapshot subtree endpoint for directories'
|
|
90
|
+
},
|
|
91
|
+
timestamp: new Date().toISOString()
|
|
92
|
+
});
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const safeName = path.basename(fileParam).replace(/[^A-Za-z0-9._-]/g, '_') || 'staging-file';
|
|
96
|
+
res.setHeader('Content-Type', 'application/octet-stream');
|
|
97
|
+
res.setHeader('Content-Disposition', `attachment; filename="${safeName}"`);
|
|
98
|
+
res.setHeader('Content-Length', String(s.size));
|
|
99
|
+
const stream = createReadStream(absoluteFile);
|
|
100
|
+
stream.on('error', (err) => {
|
|
101
|
+
opts.log?.(`staging stream error for ${absoluteFile}: ${errMsg(err)}`);
|
|
102
|
+
if (!res.headersSent) {
|
|
103
|
+
res.status(500).end();
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
res.end();
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
stream.pipe(res);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// Recursively lists regular files under stagingRoot; throws ENOENT if
|
|
113
|
+
// root is missing (route handler maps that to an empty response).
|
|
114
|
+
export async function listStagingFiles(stagingRoot) {
|
|
115
|
+
const root = await realpath(stagingRoot);
|
|
116
|
+
const out = [];
|
|
117
|
+
await walk(root, root, out);
|
|
118
|
+
out.sort((a, b) => a.path.localeCompare(b.path));
|
|
119
|
+
return out;
|
|
120
|
+
}
|
|
121
|
+
async function walk(root, current, out) {
|
|
122
|
+
let entries;
|
|
123
|
+
try {
|
|
124
|
+
entries = await readdir(current, { withFileTypes: true });
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
if (isENOENT(err))
|
|
128
|
+
return;
|
|
129
|
+
throw err;
|
|
130
|
+
}
|
|
131
|
+
for (const entry of entries) {
|
|
132
|
+
const child = path.join(current, entry.name);
|
|
133
|
+
if (entry.isDirectory()) {
|
|
134
|
+
await walk(root, child, out);
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (!entry.isFile())
|
|
138
|
+
continue;
|
|
139
|
+
// lstat (not stat) so a symlink swapped in between readdir and here
|
|
140
|
+
// doesn't get followed; re-verify isFile after the lstat in case the
|
|
141
|
+
// entry was replaced.
|
|
142
|
+
const s = await lstat(child);
|
|
143
|
+
if (!s.isFile())
|
|
144
|
+
continue;
|
|
145
|
+
out.push({
|
|
146
|
+
path: path.relative(root, child).split(path.sep).join('/'),
|
|
147
|
+
size: s.size,
|
|
148
|
+
mtime: s.mtime.toISOString()
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export class StagingPathError extends Error {
|
|
153
|
+
code;
|
|
154
|
+
status;
|
|
155
|
+
constructor(message, code, status) {
|
|
156
|
+
super(message);
|
|
157
|
+
this.code = code;
|
|
158
|
+
this.status = status;
|
|
159
|
+
this.name = 'StagingPathError';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Realpath both ends so a symlink-hop in the middle is resolved before
|
|
163
|
+
// we compare paths — otherwise a symlink could escape stagingRoot.
|
|
164
|
+
export async function resolveStagingFile(stagingRoot, file) {
|
|
165
|
+
if (file.includes('\0')) {
|
|
166
|
+
throw new StagingPathError('file must not contain NUL bytes', 'INVALID_FILE', 400);
|
|
167
|
+
}
|
|
168
|
+
if (path.isAbsolute(file)) {
|
|
169
|
+
throw new StagingPathError('file must be a relative path under the staging root', 'INVALID_FILE', 400);
|
|
170
|
+
}
|
|
171
|
+
// Normalize separators so callers can pass forward-slash paths on Windows too.
|
|
172
|
+
const normalized = file.split(/[/\\]/).filter((p) => p.length > 0);
|
|
173
|
+
if (normalized.some((p) => p === '..')) {
|
|
174
|
+
throw new StagingPathError('file must not contain ".." segments', 'INVALID_FILE', 400);
|
|
175
|
+
}
|
|
176
|
+
const root = await realpath(stagingRoot);
|
|
177
|
+
const joined = path.join(root, ...normalized);
|
|
178
|
+
// Walk up until we find an ancestor that exists; realpath that so a
|
|
179
|
+
// symlink hop in the middle of the path is resolved before the check.
|
|
180
|
+
const resolvedAncestor = await resolveExistingAncestor(joined);
|
|
181
|
+
const rel = path.relative(root, resolvedAncestor);
|
|
182
|
+
if (rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
183
|
+
throw new StagingPathError(`file ${file} resolves outside the staging root`, 'OUTSIDE_ROOT', 403);
|
|
184
|
+
}
|
|
185
|
+
return joined;
|
|
186
|
+
}
|
|
187
|
+
async function resolveExistingAncestor(target) {
|
|
188
|
+
let current = target;
|
|
189
|
+
while (current !== path.dirname(current)) {
|
|
190
|
+
try {
|
|
191
|
+
return await realpath(current);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
current = path.dirname(current);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return await realpath(current);
|
|
198
|
+
}
|
|
199
|
+
function isENOENT(err) {
|
|
200
|
+
return typeof err === 'object' && err !== null && err.code === 'ENOENT';
|
|
201
|
+
}
|
|
202
|
+
function errMsg(err) {
|
|
203
|
+
return err instanceof Error ? err.message : String(err);
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=staging-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging-routes.js","sourceRoot":"","sources":["../../src/database-export/staging-routes.ts"],"names":[],"mappings":"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"}
|
package/plugin/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAK5C,OAAO,EACL,eAAe,EAKhB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAK5C,OAAO,EACL,eAAe,EAKhB,MAAM,YAAY,CAAA;AA6GnB,MAAM,CAAC,OAAO,WAAW,GAAG,EAAE,eAAe,GAAG,MAAM,CA8oBrD"}
|
package/plugin/index.js
CHANGED
|
@@ -6,6 +6,8 @@ import { discoverSmbHosts, shutdownSmbDiscovery } from './smb-discovery.js';
|
|
|
6
6
|
import { ConfigSchema, SCHEMA_DEFAULTS } from './config/schema.js';
|
|
7
7
|
import { resolveImageTag } from './config/image-tag.js';
|
|
8
8
|
import { runAllExports } from './database-export/index.js';
|
|
9
|
+
import { registerStagingRoutes } from './database-export/staging-routes.js';
|
|
10
|
+
import { registerHostRestoreRoutes } from './restore-host-write.js';
|
|
9
11
|
const BACKUP_IMAGE = 'ghcr.io/dirkwa/signalk-backup-server';
|
|
10
12
|
const CONTAINER_NAME = 'signalk-backup-server';
|
|
11
13
|
const PLUGIN_ID = 'signalk-backup';
|
|
@@ -246,13 +248,19 @@ export default function (app) {
|
|
|
246
248
|
if (!containerImage) {
|
|
247
249
|
containerImage = `${BACKUP_IMAGE}:${resolveImageTag(currentSettings?.imageTag ?? 'auto')}`;
|
|
248
250
|
}
|
|
251
|
+
// pathMapping: translate backup-server container paths back to host paths for restore banners.
|
|
252
|
+
const managed = currentSettings?.managedContainer !== false;
|
|
253
|
+
const pathMapping = managed
|
|
254
|
+
? { containerPath: SK_MOUNT, hostPath: resolveSignalkConfigRoot() }
|
|
255
|
+
: undefined;
|
|
249
256
|
res.json({
|
|
250
257
|
container: {
|
|
251
258
|
state: containerState,
|
|
252
259
|
image: containerImage,
|
|
253
|
-
managed
|
|
260
|
+
managed
|
|
254
261
|
},
|
|
255
|
-
ready: client !== null
|
|
262
|
+
ready: client !== null,
|
|
263
|
+
...(pathMapping ? { pathMapping } : {})
|
|
256
264
|
});
|
|
257
265
|
});
|
|
258
266
|
// Update detection — delegated to signalk-container's centralized
|
|
@@ -408,6 +416,28 @@ export default function (app) {
|
|
|
408
416
|
startDbExportTimer();
|
|
409
417
|
res.json({ success: true, data: next, timestamp: new Date().toISOString() });
|
|
410
418
|
});
|
|
419
|
+
// Live staging tree — files the plugin's own db-export tick wrote
|
|
420
|
+
// to <getDataDirPath()>/database-exports/<sourcePluginId>/. The
|
|
421
|
+
// root is hard-pinned here; the route handlers refuse anything
|
|
422
|
+
// that resolves outside it. Snapshotted shards (from older
|
|
423
|
+
// backups) go through the backup-server's /download-subtree.
|
|
424
|
+
registerStagingRoutes(router, {
|
|
425
|
+
getStagingRoot: () => path.join(app.getDataDirPath(), 'database-exports'),
|
|
426
|
+
log: (msg) => {
|
|
427
|
+
app.debug(msg);
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
// Host-side restore for "Custom path" targets — bypasses the
|
|
431
|
+
// backup-server container's filesystem so the user can land
|
|
432
|
+
// restored files anywhere the SignalK process can write.
|
|
433
|
+
// Original-location restores still go through the proxy to the
|
|
434
|
+
// server's restore-partial route.
|
|
435
|
+
registerHostRestoreRoutes(router, {
|
|
436
|
+
getUpstreamBase: () => containerAddress,
|
|
437
|
+
log: (msg) => {
|
|
438
|
+
app.debug(msg);
|
|
439
|
+
}
|
|
440
|
+
});
|
|
411
441
|
// Discovery runs here, not in the container, so multicast doesn't
|
|
412
442
|
// have to traverse the backup-server's network namespace.
|
|
413
443
|
router.get('/api/cloud/smb/discover', async (_req, res) => {
|
package/plugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|