{"version":3,"file":"tus.mjs","names":["magicError: UseMagicErrorReturn","TusServer"],"sources":["../../src/utils/tus.ts"],"sourcesContent":["import { Server as TusServer } from '@tus/server'\n\nimport { getTusPostProcessorHandler } from '../endpoints/tusPostProcessorHandler'\nimport { getTusFolderHandler } from '../endpoints/tusFolderHandler'\nimport { getTusCleanupHandler } from '../endpoints/tusCleanupHandler'\nimport { generateUniqueFilename } from './file'\n\nimport { useMagicError, type UseMagicErrorReturn } from '@maas/error-handler'\nimport { MediaCloudErrors } from '../types/errors'\n\nimport type { PayloadRequest } from 'payload'\nimport type { S3Store } from '../tus/stores/s3/s3Store'\nimport type { MediaCloudPluginOptions } from '../types'\n\nconst magicError: UseMagicErrorReturn = useMagicError({\n  prefix: 'PLUGIN-MEDIA-CLOUD',\n})\n\n/**\n * Creates a TUS server instance with S3 storage\n * @param args.getS3Store - Function that returns an S3 client instance\n * @param args.pluginOptions - Media cloud plugin options\n * @returns A configured TusServer instance\n */\ninterface CreateTusServerArgs {\n  getS3Store: () => S3Store\n  pluginOptions: MediaCloudPluginOptions\n}\n\nexport function createTusServer(args: CreateTusServerArgs): TusServer {\n  const { getS3Store, pluginOptions } = args\n\n  const s3Store = getS3Store()\n\n  return new TusServer({\n    datastore: s3Store,\n    path: '/api/uploads',\n    respectForwardedHeaders: pluginOptions.s3?.respectForwardedHeaders ?? true,\n    namingFunction: async (_req, metadata) => {\n      return metadata?.filename ?? generateUniqueFilename('')\n    },\n    onUploadFinish: async (_req, upload) => {\n      // Clean up .part and .info files\n      const filename = upload.metadata?.filename ?? ''\n      await s3Store.cleanup(filename)\n\n      // Prevent type error\n      return Promise.resolve({})\n    },\n  })\n}\n\n/**\n * Creates TUS upload endpoints for file handling\n * @param args.getTusServer - Function that returns a TUS server instance\n * @param args.getS3Store - Function that returns an S3 client instance\n * @returns An array of endpoint configurations\n */\ninterface CreateTusEndpointsArgs {\n  getTusServer: () => TusServer\n  getS3Store: () => S3Store\n  pluginOptions: MediaCloudPluginOptions\n}\n\nexport function createTusEndpoints(args: CreateTusEndpointsArgs) {\n  const { getTusServer, getS3Store, pluginOptions } = args\n\n  const collection = pluginOptions.collection\n  magicError.assert(collection, MediaCloudErrors.COLLECTION_REQUIRED)\n\n  const folders = pluginOptions.folders ?? false\n\n  /**\n   * Handles TUS requests through the server\n   * @param req - The payload request object\n   * @returns The server response\n   */\n  function tusHandler(req: PayloadRequest) {\n    return getTusServer().handleWeb(req as Request)\n  }\n\n  return [\n    { handler: tusHandler, method: 'options' as const, path: '/uploads' },\n    { handler: tusHandler, method: 'post' as const, path: '/uploads' },\n    { handler: tusHandler, method: 'get' as const, path: '/uploads/:id' },\n    { handler: tusHandler, method: 'put' as const, path: '/uploads/:id' },\n    { handler: tusHandler, method: 'patch' as const, path: '/uploads/:id' },\n    { handler: tusHandler, method: 'delete' as const, path: '/uploads/:id' },\n    {\n      handler: getTusPostProcessorHandler({ getS3Store, collection }),\n      method: 'get' as const,\n      path: '/uploads/:filename/process',\n    },\n    {\n      handler: getTusFolderHandler({ getS3Store, collection, folders }),\n      method: 'get' as const,\n      path: '/uploads/:filename/folder',\n    },\n    {\n      handler: getTusCleanupHandler({ getS3Store, collection }),\n      method: 'post' as const,\n      path: '/uploads/cleanup',\n    },\n  ]\n}\n"],"mappings":";;;;;;;;;AAcA,MAAMA,aAAkC,cAAc,EACpD,QAAQ,sBACT,CAAC;AAaF,SAAgB,gBAAgB,MAAsC;CACpE,MAAM,EAAE,YAAY,kBAAkB;CAEtC,MAAM,UAAU,YAAY;AAE5B,QAAO,IAAIC,OAAU;EACnB,WAAW;EACX,MAAM;EACN,yBAAyB,cAAc,IAAI,2BAA2B;EACtE,gBAAgB,OAAO,MAAM,aAAa;AACxC,UAAO,UAAU,YAAY,uBAAuB,GAAG;;EAEzD,gBAAgB,OAAO,MAAM,WAAW;GAEtC,MAAM,WAAW,OAAO,UAAU,YAAY;AAC9C,SAAM,QAAQ,QAAQ,SAAS;AAG/B,UAAO,QAAQ,QAAQ,EAAE,CAAC;;EAE7B,CAAC;;AAeJ,SAAgB,mBAAmB,MAA8B;CAC/D,MAAM,EAAE,cAAc,YAAY,kBAAkB;CAEpD,MAAM,aAAa,cAAc;AACjC,YAAW,OAAO,YAAY,iBAAiB,oBAAoB;CAEnE,MAAM,UAAU,cAAc,WAAW;;;;;;CAOzC,SAAS,WAAW,KAAqB;AACvC,SAAO,cAAc,CAAC,UAAU,IAAe;;AAGjD,QAAO;EACL;GAAE,SAAS;GAAY,QAAQ;GAAoB,MAAM;GAAY;EACrE;GAAE,SAAS;GAAY,QAAQ;GAAiB,MAAM;GAAY;EAClE;GAAE,SAAS;GAAY,QAAQ;GAAgB,MAAM;GAAgB;EACrE;GAAE,SAAS;GAAY,QAAQ;GAAgB,MAAM;GAAgB;EACrE;GAAE,SAAS;GAAY,QAAQ;GAAkB,MAAM;GAAgB;EACvE;GAAE,SAAS;GAAY,QAAQ;GAAmB,MAAM;GAAgB;EACxE;GACE,SAAS,2BAA2B;IAAE;IAAY;IAAY,CAAC;GAC/D,QAAQ;GACR,MAAM;GACP;EACD;GACE,SAAS,oBAAoB;IAAE;IAAY;IAAY;IAAS,CAAC;GACjE,QAAQ;GACR,MAAM;GACP;EACD;GACE,SAAS,qBAAqB;IAAE;IAAY;IAAY,CAAC;GACzD,QAAQ;GACR,MAAM;GACP;EACF"}