diff --git a/src/pages/api/content/index.ts b/src/pages/api/content/index.ts index 39cedad..f7d60c6 100644 --- a/src/pages/api/content/index.ts +++ b/src/pages/api/content/index.ts @@ -2,6 +2,7 @@ import { createClient } from "@supabase/supabase-js" import type { APIRoute } from "astro" import { createKysely } from "@vercel/postgres-kysely" import { customAlphabet } from "nanoid" +import sharpService from "astro/assets/services/sharp" import type { Database } from "@/lib/db" @@ -37,11 +38,20 @@ export const POST: APIRoute = async ({ request }) => { const randomImageId = nanoid() - const imageName = `${image.name.replace(/\.[^/.]+$/, "")}${randomImageId}.jpg` + const imageName = `${image.name.replace(/\.[^/.]+$/, "")}${randomImageId}.webp` - const { error } = await supabase.storage.from("images").upload(`public/${imageName}`, image, { + const imageBuf = await image.arrayBuffer() + + const { data } = await sharpService.transform( + new Uint8Array(imageBuf), + { src: imageName }, + { domains: [], remotePatterns: [], service: { entrypoint: "", config: { limitInputPixels: false } } } + ) + + const { error } = await supabase.storage.from("images").upload(`public/${imageName}`, data, { cacheControl: "3600", - upsert: false + upsert: false, + contentType: "image/webp" }) if (error) {