@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 4.29 kB
Source Map (JSON)
{"version":3,"file":"validate-uploaded-media.mjs","names":[],"sources":["../../../../src/services/media/helpers/validate-uploaded-media.ts"],"sourcesContent":["import { copy } from \"../../../libs/i18n/index.js\";\nimport type {\n\tMediaAdapterInstance,\n\tMediaAdapterTenant,\n} from \"../../../libs/media/types.js\";\nimport type { MediaType } from \"../../../types/response.js\";\nimport type { FileMetadata } from \"../../../utils/media/index.js\";\nimport { getFileMetadata } from \"../../../utils/media/index.js\";\nimport type {\n\tServiceContext,\n\tServiceResponse,\n} from \"../../../utils/services/types.js\";\nimport detectStreamMimeType from \"./detect-stream-mime-type.js\";\n\n/**\n * Validates a stored upload using sniffed bytes where possible, while falling\n * back to adapter metadata for formats `file-type` cannot identify.\n */\nconst validateUploadedMedia = async (props: {\n\tcontext: ServiceContext;\n\tstream: MediaAdapterInstance[\"stream\"];\n\ttenant: MediaAdapterTenant;\n\tkey: string;\n\tfileName: string;\n\tmimeType: string | null;\n\tallowedType?: MediaType;\n\texpectedType?: MediaType;\n}): ServiceResponse<FileMetadata> => {\n\tconst detectedMimeType = await detectStreamMimeType(\n\t\tprops.context,\n\t\tprops.stream,\n\t\tprops.key,\n\t\tprops.tenant,\n\t);\n\tconst storedMetaRes = await getFileMetadata({\n\t\tmimeType: props.mimeType,\n\t\tfileName: props.fileName,\n\t});\n\tif (storedMetaRes.error) return storedMetaRes;\n\n\tconst detectedMetaRes = detectedMimeType\n\t\t? await getFileMetadata({\n\t\t\t\tmimeType: detectedMimeType,\n\t\t\t\tfileName: props.fileName,\n\t\t\t})\n\t\t: undefined;\n\tif (detectedMetaRes?.error) return detectedMetaRes;\n\n\tif (\n\t\tdetectedMetaRes?.data &&\n\t\tstoredMetaRes.data.type !== \"unknown\" &&\n\t\tdetectedMetaRes.data.type !== \"unknown\" &&\n\t\tstoredMetaRes.data.type !== detectedMetaRes.data.type\n\t) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tstatus: 400,\n\t\t\t\terrors: {\n\t\t\t\t\tfile: {\n\t\t\t\t\t\tcode: \"media_error\",\n\t\t\t\t\t\tmessage: copy(\"server:core.media.errors.detected.type.mismatch\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tconst fileMetaData = detectedMetaRes?.data ?? storedMetaRes.data;\n\n\tif (\n\t\tprops.allowedType !== undefined &&\n\t\tfileMetaData.type !== props.allowedType\n\t) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tstatus: 400,\n\t\t\t\terrors: {\n\t\t\t\t\tfile: {\n\t\t\t\t\t\tcode: \"media_error\",\n\t\t\t\t\t\tmessage: copy(\"server:core.media.errors.invalid.type\", {\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\ttype: props.allowedType,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\tif (\n\t\tprops.expectedType !== undefined &&\n\t\tfileMetaData.type !== props.expectedType\n\t) {\n\t\treturn {\n\t\t\terror: {\n\t\t\t\ttype: \"basic\",\n\t\t\t\tstatus: 400,\n\t\t\t\terrors: {\n\t\t\t\t\tfile: {\n\t\t\t\t\t\tcode: \"media_error\",\n\t\t\t\t\t\tmessage: copy(\"server:core.media.errors.type.change.not.allowed\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tdata: undefined,\n\t\t};\n\t}\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: fileMetaData,\n\t};\n};\n\nexport default validateUploadedMedia;\n"],"mappings":"0JAkBA,MAAM,EAAwB,KAAO,IASA,CACpC,IAAM,EAAmB,MAAM,EAC9B,EAAM,QACN,EAAM,OACN,EAAM,IACN,EAAM,MACP,EACM,EAAgB,MAAM,EAAgB,CAC3C,SAAU,EAAM,SAChB,SAAU,EAAM,QACjB,CAAC,EACD,GAAI,EAAc,MAAO,OAAO,EAEhC,IAAM,EAAkB,EACrB,MAAM,EAAgB,CACtB,SAAU,EACV,SAAU,EAAM,QACjB,CAAC,EACA,IAAA,GACH,GAAI,GAAiB,MAAO,OAAO,EAEnC,GACC,GAAiB,MACjB,EAAc,KAAK,OAAS,WAC5B,EAAgB,KAAK,OAAS,WAC9B,EAAc,KAAK,OAAS,EAAgB,KAAK,KAEjD,MAAO,CACN,MAAO,CACN,KAAM,QACN,OAAQ,IACR,OAAQ,CACP,KAAM,CACL,KAAM,cACN,QAAS,EAAK,iDAAiD,CAChE,CACD,CACD,EACA,KAAM,IAAA,EACP,EAGD,IAAM,EAAe,GAAiB,MAAQ,EAAc,KA4C5D,OAzCC,EAAM,cAAgB,IAAA,IACtB,EAAa,OAAS,EAAM,YAErB,CACN,MAAO,CACN,KAAM,QACN,OAAQ,IACR,OAAQ,CACP,KAAM,CACL,KAAM,cACN,QAAS,EAAK,wCAAyC,CACtD,KAAM,CACL,KAAM,EAAM,WACb,CACD,CAAC,CACF,CACD,CACD,EACA,KAAM,IAAA,EACP,EAIA,EAAM,eAAiB,IAAA,IACvB,EAAa,OAAS,EAAM,aAErB,CACN,MAAO,CACN,KAAM,QACN,OAAQ,IACR,OAAQ,CACP,KAAM,CACL,KAAM,cACN,QAAS,EAAK,kDAAkD,CACjE,CACD,CACD,EACA,KAAM,IAAA,EACP,EAGM,CACN,MAAO,IAAA,GACP,KAAM,CACP,CACD"}