aboutsummaryrefslogtreecommitdiffstats
path: root/packages/api/routes/assets.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/api/routes/assets.ts')
-rw-r--r--packages/api/routes/assets.ts55
1 files changed, 3 insertions, 52 deletions
diff --git a/packages/api/routes/assets.ts b/packages/api/routes/assets.ts
index de4e384d..9d9a60b3 100644
--- a/packages/api/routes/assets.ts
+++ b/packages/api/routes/assets.ts
@@ -1,18 +1,13 @@
import { zValidator } from "@hono/zod-validator";
import { and, eq } from "drizzle-orm";
import { Hono } from "hono";
-import { stream } from "hono/streaming";
import { z } from "zod";
import { assets } from "@karakeep/db/schema";
-import {
- createAssetReadStream,
- getAssetSize,
- readAssetMetadata,
-} from "@karakeep/shared/assetdb";
import { authMiddleware } from "../middlewares/auth";
-import { toWebReadableStream, uploadAsset } from "../utils/upload";
+import { serveAsset } from "../utils/assets";
+import { uploadAsset } from "../utils/upload";
const app = new Hono()
.use(authMiddleware)
@@ -47,51 +42,7 @@ const app = new Hono()
if (!assetDb) {
return c.json({ error: "Asset not found" }, { status: 404 });
}
-
- const [metadata, size] = await Promise.all([
- readAssetMetadata({
- userId: c.var.ctx.user.id,
- assetId,
- }),
-
- getAssetSize({
- userId: c.var.ctx.user.id,
- assetId,
- }),
- ]);
-
- const range = c.req.header("Range");
- if (range) {
- const parts = range.replace(/bytes=/, "").split("-");
- const start = parseInt(parts[0], 10);
- const end = parts[1] ? parseInt(parts[1], 10) : size - 1;
-
- const fStream = createAssetReadStream({
- userId: c.var.ctx.user.id,
- assetId,
- start,
- end,
- });
- c.status(206); // Partial Content
- c.header("Content-Range", `bytes ${start}-${end}/${size}`);
- c.header("Accept-Ranges", "bytes");
- c.header("Content-Length", (end - start + 1).toString());
- c.header("Content-type", metadata.contentType);
- return stream(c, async (stream) => {
- await stream.pipe(toWebReadableStream(fStream));
- });
- } else {
- const fStream = createAssetReadStream({
- userId: c.var.ctx.user.id,
- assetId,
- });
- c.status(200);
- c.header("Content-Length", size.toString());
- c.header("Content-type", metadata.contentType);
- return stream(c, async (stream) => {
- await stream.pipe(toWebReadableStream(fStream));
- });
- }
+ return await serveAsset(c, assetId, c.var.ctx.user.id);
});
export default app;