import { currentUser } from "@clerk/nextjs"; import { createUploadthing, type FileRouter } from "uploadthing/next"; const f = createUploadthing(); const getUser = async () => await currentUser(); // FileRouter for your app, can contain multiple FileRoutes export const ourFileRouter = { // Define as many FileRoutes as you like, each with a unique routeSlug imageUploader: f({ image: { maxFileSize: "1MB", maxFileCount: 5 } }) // Set permissions and file types for this FileRoute .middleware(async (req) => { // This code runs on your server before upload const user = await getUser(); // If you throw, the user will not be able to upload if (!user) throw new Error("Unauthorized"); // Whatever is returned here is accessible in onUploadComplete as `metadata` return { storeId: user.privateMetadata.storeId }; // add product id metadata here too. }) .onUploadComplete(async ({ metadata, file }) => { // This code RUNS ON YOUR SERVER after upload console.log("Upload complete for userId:", metadata.storeId); console.log("file url", file.url); }), } satisfies FileRouter; export type OurFileRouter = typeof ourFileRouter;