{"version":3,"file":"handleDelete.mjs","names":[],"sources":["../../src/adapter/handleDelete.ts"],"sourcesContent":["import { useErrorHandler } from '../hooks/useErrorHandler'\nimport { MediaCloudErrors } from '../types/errors'\n\nimport type { HandleDelete } from '@payloadcms/plugin-cloud-storage/types'\nimport type { Document } from 'payload'\nimport type { Mux } from '@mux/mux-node'\nimport type { S3Store } from '../tus/stores/s3/s3Store'\n\ninterface HandleDeleteArgs {\n  getS3Store: () => S3Store\n  getMuxClient: () => Mux\n}\n\ninterface DeleteMuxAssetArgs {\n  getMuxClient: () => Mux\n  uploadId: string\n}\n\ninterface DeleteS3FileArgs {\n  getS3Store: () => S3Store\n  filename: string\n}\n\nconst { logError } = useErrorHandler()\n\n/**\n * Deletes a Mux asset by upload ID\n * @param args - The arguments for deleting the Mux asset\n * @param args.getMuxClient - Function that returns a Mux client instance\n * @param args.uploadId - The upload ID of the Mux asset to delete\n * @returns Promise that resolves when the asset is deleted or rejects on error\n */\nasync function deleteMuxAsset(args: DeleteMuxAssetArgs): Promise<void> {\n  const { getMuxClient, uploadId } = args\n\n  try {\n    const mux = getMuxClient()\n    const assets = await mux.video.assets.list({ upload_id: uploadId })\n    if (assets.data.length > 0) {\n      const asset = assets.data[0]\n      await mux.video.assets.delete(asset.id)\n    }\n  } catch (_error) {\n    logError(MediaCloudErrors.MUX_ASSET_DELETE_ERROR.message)\n  }\n}\n\n/**\n * Deletes a file from S3 storage including its metadata info file\n * @param args - The arguments for deleting the S3 file\n * @param args.getS3Store - Function that returns an S3 client instance\n * @param args.filename - The filename of the file to delete from S3\n * @returns Promise that resolves when the file is deleted or rejects on error\n */\nasync function deleteS3File(args: DeleteS3FileArgs): Promise<void> {\n  const { getS3Store, filename } = args\n\n  try {\n    const { client, bucket } = getS3Store()\n    await client.deleteObjects({\n      Bucket: bucket,\n      Delete: {\n        Objects: [{ Key: filename }, { Key: `${filename}.info` }],\n      },\n    })\n  } catch (_error) {\n    logError(MediaCloudErrors.S3_DELETE_ERROR.message)\n  }\n}\n\n/**\n * Creates a handle delete function for processing file deletions from both Mux and S3 storage\n * @param args - The arguments for creating the delete handler\n * @param args.getS3Store - Function that returns an S3 client instance\n * @param args.getMuxClient - Function that returns a Mux client instance\n * @returns A HandleDelete function that processes deletion requests based on storage type\n */\nexport function getHandleDelete(args: HandleDeleteArgs): HandleDelete {\n  const { getS3Store, getMuxClient } = args\n  return async ({ doc, req }) => {\n    if (req?.method !== 'DELETE' || !doc) {\n      return\n    }\n\n    const media = doc as Document\n\n    switch (media?.storage) {\n      case 'mux':\n        if (media.mux?.uploadId) {\n          await deleteMuxAsset({ getMuxClient, uploadId: media.mux.uploadId })\n        }\n        break\n      case 's3':\n        if (media.filename) {\n          await deleteS3File({ getS3Store, filename: media.filename })\n        }\n        break\n      default:\n        logError(MediaCloudErrors.UNKNOWN_STORAGE_TYPE.message)\n    }\n  }\n}\n"],"mappings":";;;;AAuBA,MAAM,EAAE,aAAa,iBAAiB;;;;;;;;AAStC,eAAe,eAAe,MAAyC;CACrE,MAAM,EAAE,cAAc,aAAa;AAEnC,KAAI;EACF,MAAM,MAAM,cAAc;EAC1B,MAAM,SAAS,MAAM,IAAI,MAAM,OAAO,KAAK,EAAE,WAAW,UAAU,CAAC;AACnE,MAAI,OAAO,KAAK,SAAS,GAAG;GAC1B,MAAM,QAAQ,OAAO,KAAK;AAC1B,SAAM,IAAI,MAAM,OAAO,OAAO,MAAM,GAAG;;UAElC,QAAQ;AACf,WAAS,iBAAiB,uBAAuB,QAAQ;;;;;;;;;;AAW7D,eAAe,aAAa,MAAuC;CACjE,MAAM,EAAE,YAAY,aAAa;AAEjC,KAAI;EACF,MAAM,EAAE,QAAQ,WAAW,YAAY;AACvC,QAAM,OAAO,cAAc;GACzB,QAAQ;GACR,QAAQ,EACN,SAAS,CAAC,EAAE,KAAK,UAAU,EAAE,EAAE,KAAK,GAAG,SAAS,QAAQ,CAAC,EAC1D;GACF,CAAC;UACK,QAAQ;AACf,WAAS,iBAAiB,gBAAgB,QAAQ;;;;;;;;;;AAWtD,SAAgB,gBAAgB,MAAsC;CACpE,MAAM,EAAE,YAAY,iBAAiB;AACrC,QAAO,OAAO,EAAE,KAAK,UAAU;AAC7B,MAAI,KAAK,WAAW,YAAY,CAAC,IAC/B;EAGF,MAAM,QAAQ;AAEd,UAAQ,OAAO,SAAf;GACE,KAAK;AACH,QAAI,MAAM,KAAK,SACb,OAAM,eAAe;KAAE;KAAc,UAAU,MAAM,IAAI;KAAU,CAAC;AAEtE;GACF,KAAK;AACH,QAAI,MAAM,SACR,OAAM,aAAa;KAAE;KAAY,UAAU,MAAM;KAAU,CAAC;AAE9D;GACF,QACE,UAAS,iBAAiB,qBAAqB,QAAQ"}