feat(media): add type-specific upload preset validation

This commit is contained in:
2026-02-12 22:51:31 +01:00
parent 81983cfe40
commit c6ebf3759a
3 changed files with 68 additions and 51 deletions

View File

@@ -9,6 +9,56 @@ export const mediaAssetTypeSchema = z.enum([
"generic",
])
export type MediaUploadRule = {
maxBytes: number
allowedMimePrefix?: string
allowedMimeExact?: string[]
}
export const mediaUploadRulesByType: Record<MediaAssetType, MediaUploadRule> = {
artwork: {
maxBytes: 40 * 1024 * 1024,
allowedMimePrefix: "image/",
},
banner: {
maxBytes: 20 * 1024 * 1024,
allowedMimePrefix: "image/",
},
promotion: {
maxBytes: 20 * 1024 * 1024,
allowedMimePrefix: "image/",
},
video: {
maxBytes: 250 * 1024 * 1024,
allowedMimePrefix: "video/",
},
gif: {
maxBytes: 40 * 1024 * 1024,
allowedMimeExact: ["image/gif"],
},
generic: {
maxBytes: 50 * 1024 * 1024,
},
}
export function isMimeAllowedForMediaType(type: MediaAssetType, mimeType: string): boolean {
const rule = mediaUploadRulesByType[type]
if (rule.allowedMimeExact?.includes(mimeType)) {
return true
}
if (rule.allowedMimePrefix) {
return mimeType.startsWith(rule.allowedMimePrefix)
}
return true
}
export function getMediaUploadMaxBytes(type: MediaAssetType): number {
return mediaUploadRulesByType[type].maxBytes
}
export const artworkRenditionSlotSchema = z.enum(["thumbnail", "card", "full", "retina", "custom"])
export const createMediaAssetInputSchema = z.object({