From b921c3c587f78078bcbeff72dfb6384d277f90e8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 12 Apr 2026 18:20:58 +0300 Subject: [PATCH] chore(core): integrate backup routes --- apps/server/src/routes/routes.ts | 4 +--- packages/trilium-core/src/routes/api/backup.ts | 17 +++++++++++++++++ packages/trilium-core/src/routes/index.ts | 5 +++++ 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 packages/trilium-core/src/routes/api/backup.ts diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index e48286754e..b344f5958e 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -172,9 +172,7 @@ function register(app: express.Application) { asyncRoute(PST, "/api/database/rebuild/", [auth.checkApiAuthOrElectron], databaseRoute.rebuildIntegrationTestDatabase, apiResultHandler); } - // backup requires execution outside of transaction - asyncRoute(PST, "/api/database/backup-database", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.backupDatabase, apiResultHandler); - apiRoute(GET, "/api/database/backups", databaseRoute.getExistingBackups); + // backup/download is server-specific (uses Express res.download), backup-database and backups are in core route(GET, "/api/database/backup/download", [auth.checkApiAuthOrElectron], databaseRoute.downloadBackup); // VACUUM requires execution outside of transaction asyncRoute(PST, "/api/database/vacuum-database", [auth.checkApiAuthOrElectron, csrfMiddleware], databaseRoute.vacuumDatabase, apiResultHandler); diff --git a/packages/trilium-core/src/routes/api/backup.ts b/packages/trilium-core/src/routes/api/backup.ts new file mode 100644 index 0000000000..5e2c405369 --- /dev/null +++ b/packages/trilium-core/src/routes/api/backup.ts @@ -0,0 +1,17 @@ +import type { BackupDatabaseNowResponse, DatabaseBackup } from "@triliumnext/commons"; +import { getBackup } from "../../services/backup.js"; + +function getExistingBackups(): DatabaseBackup[] { + return getBackup().getExistingBackups(); +} + +async function backupDatabase(): Promise { + return { + backupFile: await getBackup().backupNow("now") + }; +} + +export default { + getExistingBackups, + backupDatabase +}; diff --git a/packages/trilium-core/src/routes/index.ts b/packages/trilium-core/src/routes/index.ts index 353204cf0e..ef34d25ec1 100644 --- a/packages/trilium-core/src/routes/index.ts +++ b/packages/trilium-core/src/routes/index.ts @@ -29,6 +29,7 @@ import importRoute from "./api/import"; import exportRoute from "./api/export"; import scriptRoute from "./api/script"; import backendLogRoute from "./api/backend_log"; +import backupRoute from "./api/backup"; // TODO: Deduplicate with routes.ts const GET = "get", @@ -201,6 +202,10 @@ export function buildSharedApiRoutes({ route, asyncRoute, apiRoute, asyncApiRout apiRoute(GET, "/api/app-info", appInfoRoute.getAppInfo); asyncApiRoute(GET, "/api/backend-log", backendLogRoute.getBackendLog); + // Backup routes + apiRoute(GET, "/api/database/backups", backupRoute.getExistingBackups); + asyncApiRoute(PST, "/api/database/backup-database", backupRoute.backupDatabase); + apiRoute(GET, "/api/other/icon-usage", otherRoute.getIconUsage); apiRoute(PST, "/api/other/render-markdown", otherRoute.renderMarkdown); apiRoute(PST, "/api/other/to-markdown", otherRoute.toMarkdown);