From 10e0f9c661e6b3dda2952ad47a703f534f7241dd Mon Sep 17 00:00:00 2001 From: Rajat Saxena Date: Sun, 2 Nov 2025 15:35:30 +0530 Subject: [PATCH] sending media object in header on tus upload finished hook --- apps/api/src/tus/finalize.ts | 6 ++++-- apps/api/src/tus/tus-server.ts | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apps/api/src/tus/finalize.ts b/apps/api/src/tus/finalize.ts index 1e437bae..6814325a 100644 --- a/apps/api/src/tus/finalize.ts +++ b/apps/api/src/tus/finalize.ts @@ -34,7 +34,9 @@ import { hasEnoughStorage } from "../media/storage-middleware"; import { NOT_ENOUGH_STORAGE } from "../config/strings"; import { removeTusFiles } from "./utils"; -export default async function finalizeUpload(uploadId: string) { +export default async function finalizeUpload( + uploadId: string, +): Promise { const tusUpload = await getTusUpload(uploadId); if (!tusUpload) { throw new Error(`Tus upload not found: ${uploadId}`); @@ -42,7 +44,7 @@ export default async function finalizeUpload(uploadId: string) { if (tusUpload.isComplete) { logger.info({ uploadId }, "Upload already finalized"); - return; + return ""; } const { userId, apikey, metadata, uploadLength, tempFilePath, signature } = diff --git a/apps/api/src/tus/tus-server.ts b/apps/api/src/tus/tus-server.ts index 9fa83b21..5f954286 100644 --- a/apps/api/src/tus/tus-server.ts +++ b/apps/api/src/tus/tus-server.ts @@ -16,6 +16,7 @@ import { getUser } from "../user/queries"; import { hasEnoughStorage } from "../media/storage-middleware"; import { createTusUpload, updateTusUploadOffset } from "./queries"; import getMaxFileUploadSize from "../media/utils/get-max-file-upload-size"; +import mediaService from "../media/service"; const store = new FileStore({ directory: `${tempFileDirForUploads}/tus-uploads`, @@ -25,6 +26,7 @@ export const server = new Server({ path: "/media/create/resumable", datastore: store, respectForwardedHeaders: true, + exposedHeaders: ["media"], onIncomingRequest: async (req: any) => { try { const response = await getUserAndAPIKey(req); @@ -80,15 +82,24 @@ export const server = new Server({ onUploadFinish: async (req: any, upload: any) => { try { console.time("finalize"); - await finalizeUpload(upload.id); + const mediaId = await finalizeUpload(upload.id); console.timeEnd("finalize"); - return {}; + const media = await mediaService.getMediaDetails({ + userId: req.user._id, + apikey: req.apikey, + mediaId, + }); + return { + headers: { + media: JSON.stringify(media), + }, + }; } catch (err: any) { logger.error( { err, uploadId: upload.id }, "Error finalizing tus upload", ); - return { + throw { status_code: 403, body: err.message, };