{"version":3,"file":"tusFolderHandler.mjs","names":[],"sources":["../../src/endpoints/tusFolderHandler.ts"],"sourcesContent":["import type { PayloadHandler } from 'payload'\nimport { useErrorHandler } from '../hooks/useErrorHandler'\nimport { MediaCloudErrors } from '../types/errors'\n\nimport { S3Store } from '../tus/stores/s3/s3Store'\nimport { sanitizeFilename } from '../utils/file'\n\ninterface GetTusFolderHandlerArgs {\n  getS3Store: () => S3Store\n  collection: string\n  folders: boolean\n}\n\nexport function getTusFolderHandler(\n  args: GetTusFolderHandlerArgs\n): PayloadHandler {\n  const { getS3Store, collection, folders } = args\n  const { throwError, logError } = useErrorHandler()\n\n  return async function (req) {\n    if (!folders) {\n      return Response.json(\n        { message: 'Folders are disabled, skipping …' },\n        { status: 200 }\n      )\n    }\n\n    try {\n      const { routeParams, payload } = req\n      const filename = routeParams?.filename as string\n\n      if (!filename) {\n        throwError(MediaCloudErrors.FILE_MISSING_NAME)\n      }\n\n      const sanitizedFilename = sanitizeFilename(filename)\n\n      const { docs } = await payload.find({\n        collection,\n        where: {\n          filename: {\n            equals: sanitizedFilename,\n          },\n        },\n        limit: 1,\n        pagination: false,\n      })\n\n      const media = docs?.[0]\n\n      if (!media) {\n        throwError(MediaCloudErrors.FILE_NOT_FOUND)\n      }\n\n      if (media.storage !== 's3') {\n        return Response.json(\n          { message: 'Asset not stored on S3, skipping …' },\n          { status: 200 }\n        )\n      }\n\n      const s3Store = getS3Store()\n      const file = await s3Store?.read(media.path ?? '').catch(() => null)\n\n      if (file) {\n        return Response.json(\n          { message: 'Asset already in correct location, skipping …' },\n          { status: 200 }\n        )\n      }\n\n      const oldKey = media.filename\n      const newKey = media.path\n\n      await s3Store?.copy(oldKey, newKey)\n      return Response.json({ message: 'Asset moved' }, { status: 200 })\n    } catch (_error) {\n      logError(MediaCloudErrors.S3_MOVE_ERROR.message)\n      return Response.json({ message: 'Failed to move asset' }, { status: 500 })\n    }\n  }\n}\n"],"mappings":";;;;;AAaA,SAAgB,oBACd,MACgB;CAChB,MAAM,EAAE,YAAY,YAAY,YAAY;CAC5C,MAAM,EAAE,YAAY,aAAa,iBAAiB;AAElD,QAAO,eAAgB,KAAK;AAC1B,MAAI,CAAC,QACH,QAAO,SAAS,KACd,EAAE,SAAS,oCAAoC,EAC/C,EAAE,QAAQ,KAAK,CAChB;AAGH,MAAI;GACF,MAAM,EAAE,aAAa,YAAY;GACjC,MAAM,WAAW,aAAa;AAE9B,OAAI,CAAC,SACH,YAAW,iBAAiB,kBAAkB;GAGhD,MAAM,oBAAoB,iBAAiB,SAAS;GAEpD,MAAM,EAAE,SAAS,MAAM,QAAQ,KAAK;IAClC;IACA,OAAO,EACL,UAAU,EACR,QAAQ,mBACT,EACF;IACD,OAAO;IACP,YAAY;IACb,CAAC;GAEF,MAAM,QAAQ,OAAO;AAErB,OAAI,CAAC,MACH,YAAW,iBAAiB,eAAe;AAG7C,OAAI,MAAM,YAAY,KACpB,QAAO,SAAS,KACd,EAAE,SAAS,sCAAsC,EACjD,EAAE,QAAQ,KAAK,CAChB;GAGH,MAAM,UAAU,YAAY;AAG5B,OAFa,MAAM,SAAS,KAAK,MAAM,QAAQ,GAAG,CAAC,YAAY,KAAK,CAGlE,QAAO,SAAS,KACd,EAAE,SAAS,iDAAiD,EAC5D,EAAE,QAAQ,KAAK,CAChB;GAGH,MAAM,SAAS,MAAM;GACrB,MAAM,SAAS,MAAM;AAErB,SAAM,SAAS,KAAK,QAAQ,OAAO;AACnC,UAAO,SAAS,KAAK,EAAE,SAAS,eAAe,EAAE,EAAE,QAAQ,KAAK,CAAC;WAC1D,QAAQ;AACf,YAAS,iBAAiB,cAAc,QAAQ;AAChD,UAAO,SAAS,KAAK,EAAE,SAAS,wBAAwB,EAAE,EAAE,QAAQ,KAAK,CAAC"}