diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index b34a610957..6df52f50d0 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -22,7 +22,6 @@ import backendLogRoute from "./api/backend_log.js"; import clipperRoute from "./api/clipper.js"; import databaseRoute from "./api/database.js"; import etapiTokensApiRoutes from "./api/etapi_tokens.js"; -import exportRoute from "./api/export.js"; import filesRoute from "./api/files.js"; import fontsRoute from "./api/fonts.js"; import loginApiRoute from "./api/login.js"; @@ -130,10 +129,6 @@ function register(app: express.Application) { // TODO: Re-enable once we support route() // route(GET, "/api/revisions/:revisionId/download", [auth.checkApiAuthOrElectron], revisionsApiRoute.downloadRevision); - route(GET, "/api/branches/:branchId/export/:type/:format/:version/:taskId", [auth.checkApiAuthOrElectron], exportRoute.exportBranch); - - // :filename is not used by trilium, but instead used for "save as" to assign a human-readable filename - apiRoute(PST, "/api/password/change", passwordApiRoute.changePassword); apiRoute(PST, "/api/password/reset", passwordApiRoute.resetPassword); diff --git a/apps/server/src/routes/api/export.ts b/packages/trilium-core/src/routes/api/export.ts similarity index 90% rename from apps/server/src/routes/api/export.ts rename to packages/trilium-core/src/routes/api/export.ts index 9d90b49eaf..00600f67ed 100644 --- a/apps/server/src/routes/api/export.ts +++ b/packages/trilium-core/src/routes/api/export.ts @@ -1,13 +1,13 @@ -import { NotFoundError, ValidationError } from "@triliumnext/core"; import type { Request, Response } from "express"; import becca from "../../becca/becca.js"; import opmlExportService from "../../services/export/opml.js"; import singleExportService from "../../services/export/single.js"; import zipExportService from "../../services/export/zip.js"; -import log from "../../services/log.js"; +import { getLog } from "../../services/log.js"; import TaskContext from "../../services/task_context.js"; -import { safeExtractMessageAndStackFromError } from "../../services/utils.js"; +import { safeExtractMessageAndStackFromError } from "../../services/utils/index.js"; +import { NotFoundError, ValidationError } from "../../errors.js"; function exportBranch(req: Request<{ branchId: string; type: string; format: string; version: string; taskId: string }>, res: Response) { const { branchId, type, format, version, taskId } = req.params; @@ -15,7 +15,7 @@ function exportBranch(req: Request<{ branchId: string; type: string; format: str if (!branch) { const message = `Cannot export branch '${branchId}' since it does not exist.`; - log.error(message); + getLog().error(message); res.setHeader("Content-Type", "text/plain").status(500).send(message); return; @@ -41,7 +41,7 @@ function exportBranch(req: Request<{ branchId: string; type: string; format: str const message = `Export failed with following error: '${errMessage}'. More details might be in the logs.`; taskContext.reportError(message); - log.error(errMessage + errStack); + getLog().error(errMessage + errStack); res.setHeader("Content-Type", "text/plain").status(500).send(message); } diff --git a/packages/trilium-core/src/routes/index.ts b/packages/trilium-core/src/routes/index.ts index f5e9e3e6c7..e90351b980 100644 --- a/packages/trilium-core/src/routes/index.ts +++ b/packages/trilium-core/src/routes/index.ts @@ -26,6 +26,7 @@ import imageRoute from "./api/image"; import setupApiRoute from "./api/setup"; import filesRoute from "./api/files"; import importRoute from "./api/import"; +import exportRoute from "./api/export"; // TODO: Deduplicate with routes.ts const GET = "get", @@ -116,6 +117,7 @@ export function buildSharedApiRoutes({ route, asyncRoute, apiRoute, asyncApiRout apiRoute(PUT, "/api/branches/:branchId/set-prefix", branchesApiRoute.setPrefix); apiRoute(PUT, "/api/branches/set-prefix-batch", branchesApiRoute.setPrefixBatch); + // :filename is not used by trilium, but instead used for "save as" to assign a human-readable filename route(GET, "/api/revisions/:revisionId/image/:filename", [checkApiAuthOrElectron], imageRoute.returnImageFromRevision); route(GET, "/api/attachments/:attachmentId/image/:filename", [checkApiAuthOrElectron], imageRoute.returnAttachedImage); route(GET, "/api/images/:noteId/:filename", [checkApiAuthOrElectron], imageRoute.returnImageFromNote); @@ -139,8 +141,11 @@ export function buildSharedApiRoutes({ route, asyncRoute, apiRoute, asyncApiRout route(PST, "/api/sync/queue-sector/:entityName/:sector", [checkApiAuth], syncApiRoute.queueSector, apiResultHandler); route(GET, "/api/sync/stats", [], syncApiRoute.getStats, apiResultHandler); + //#region Import/export asyncRoute(PST, "/api/notes/:parentNoteId/notes-import", [checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], importRoute.importNotesToBranch, apiResultHandler); route(PST, "/api/notes/:parentNoteId/attachments-import", [checkApiAuthOrElectron, uploadMiddlewareWithErrorHandling, csrfMiddleware], importRoute.importAttachmentsToNote, apiResultHandler); + route(GET, "/api/branches/:branchId/export/:type/:format/:version/:taskId", [checkApiAuthOrElectron], exportRoute.exportBranch); + //#endregion apiRoute(GET, "/api/quick-search/:searchString", searchRoute.quickSearch); apiRoute(GET, "/api/search-note/:noteId", searchRoute.searchFromNote);