@oberoncms/plugin-uploadthing
Version:
An Puck component and OberonCMS plugin for embeding uploadthing images
35 lines (34 loc) • 1.25 kB
JavaScript
import { createUploadthing, createRouteHandler } from "uploadthing/next";
import { UploadThingError } from "uploadthing/server";
import { getImageSize } from "./get-image-size.js";
const f = createUploadthing();
const initFileRouter = ({ can }) => {
const imageMiddleware = async () => {
if (!await can("images", "write")) {
throw new UploadThingError("Unauthorized");
}
return { creator: "unkown" };
};
return {
// Define as many FileRoutes as you like, each with a unique routeSlug
imageUploader: f({ image: { maxFileSize: "4MB" } }).middleware(imageMiddleware).onUploadComplete(async ({ metadata: _metadata, file: { url } }) => {
const { width, height } = await getImageSize(url);
return { width, height };
}),
singleImageUploader: f({
image: { maxFileSize: "4MB", maxFileCount: 1 }
}).middleware(imageMiddleware).onUploadComplete(async ({ metadata: _metadata, file: { url } }) => {
const { width, height } = await getImageSize(url);
return { width, height };
})
};
};
function initRouteHandler(adapter) {
return createRouteHandler({
router: initFileRouter(adapter),
config: { callbackUrl: "/cms/api/uploadthing" }
});
}
export {
initRouteHandler
};