{"version":3,"file":"muxAssetHandler.mjs","names":[],"sources":["../../src/endpoints/muxAssetHandler.ts"],"sourcesContent":["import type { Mux } from '@mux/mux-node'\nimport type { PayloadHandler } from 'payload'\nimport type { StaticRenditions } from '../types'\n\ninterface GetMuxAssetHandlerArgs {\n  getMuxClient: () => Mux\n  collection: string\n}\n\nexport function getMuxAssetHandler(\n  args: GetMuxAssetHandlerArgs\n): PayloadHandler {\n  const { getMuxClient, collection } = args\n\n  return async (req) => {\n    try {\n      const muxClient = getMuxClient()\n      const { query } = req\n\n      const uploadId = query.upload_id as string\n\n      if (!uploadId) {\n        return Response.json(\n          { message: 'Upload ID is required' },\n          { status: 400 }\n        )\n      }\n\n      const assets = await muxClient.video.assets.list({\n        limit: 1,\n        upload_id: uploadId,\n      })\n\n      const asset = assets?.data[0]\n\n      if (!asset) {\n        return Response.json(\n          { message: 'No asset found for the given upload ID' },\n          { status: 404 }\n        )\n      }\n\n      if (asset.status === 'ready') {\n        const { payload } = req\n\n        const { docs } = await payload.find({\n          collection,\n          where: {\n            'mux.uploadId': {\n              equals: uploadId,\n            },\n          },\n          limit: 1,\n          pagination: false,\n        })\n\n        if (docs.length > 0) {\n          const { id } = docs[0]\n\n          const width = Array.from(asset.tracks ?? []).reduce(\n            (max, track) =>\n              track.type === 'video' && track.max_width\n                ? Math.max(max, track.max_width)\n                : max,\n            0\n          )\n\n          const height = Array.from(asset.tracks ?? []).reduce(\n            (max, track) =>\n              track.type === 'video' && track.max_height\n                ? Math.max(max, track.max_height)\n                : max,\n            0\n          )\n\n          await payload.update({\n            collection,\n            id,\n            data: {\n              mux: {\n                status: asset.status,\n                assetId: asset.id,\n                playbackId: asset.playback_ids?.[0]?.id,\n                aspectRatio: asset.aspect_ratio,\n                duration: asset.duration,\n                tracks: asset.tracks,\n                maxResolutionTier: asset.max_resolution_tier,\n                videoQuality: asset.video_quality,\n                staticRenditions: asset.static_renditions as StaticRenditions,\n              },\n              width,\n              height,\n            },\n          })\n        }\n\n        return Response.json(\n          {\n            ready: asset.status === 'ready',\n            asset,\n          },\n          { status: 200 }\n        )\n      } else {\n        return Response.json(\n          {\n            ready: false,\n            asset,\n          },\n          { status: 200 }\n        )\n      }\n    } catch (_error) {\n      return Response.json(\n        { message: 'Failed to fetch Mux asset' },\n        { status: 500 }\n      )\n    }\n  }\n}\n"],"mappings":";AASA,SAAgB,mBACd,MACgB;CAChB,MAAM,EAAE,cAAc,eAAe;AAErC,QAAO,OAAO,QAAQ;AACpB,MAAI;GACF,MAAM,YAAY,cAAc;GAChC,MAAM,EAAE,UAAU;GAElB,MAAM,WAAW,MAAM;AAEvB,OAAI,CAAC,SACH,QAAO,SAAS,KACd,EAAE,SAAS,yBAAyB,EACpC,EAAE,QAAQ,KAAK,CAChB;GAQH,MAAM,SALS,MAAM,UAAU,MAAM,OAAO,KAAK;IAC/C,OAAO;IACP,WAAW;IACZ,CAAC,GAEoB,KAAK;AAE3B,OAAI,CAAC,MACH,QAAO,SAAS,KACd,EAAE,SAAS,0CAA0C,EACrD,EAAE,QAAQ,KAAK,CAChB;AAGH,OAAI,MAAM,WAAW,SAAS;IAC5B,MAAM,EAAE,YAAY;IAEpB,MAAM,EAAE,SAAS,MAAM,QAAQ,KAAK;KAClC;KACA,OAAO,EACL,gBAAgB,EACd,QAAQ,UACT,EACF;KACD,OAAO;KACP,YAAY;KACb,CAAC;AAEF,QAAI,KAAK,SAAS,GAAG;KACnB,MAAM,EAAE,OAAO,KAAK;KAEpB,MAAM,QAAQ,MAAM,KAAK,MAAM,UAAU,EAAE,CAAC,CAAC,QAC1C,KAAK,UACJ,MAAM,SAAS,WAAW,MAAM,YAC5B,KAAK,IAAI,KAAK,MAAM,UAAU,GAC9B,KACN,EACD;KAED,MAAM,SAAS,MAAM,KAAK,MAAM,UAAU,EAAE,CAAC,CAAC,QAC3C,KAAK,UACJ,MAAM,SAAS,WAAW,MAAM,aAC5B,KAAK,IAAI,KAAK,MAAM,WAAW,GAC/B,KACN,EACD;AAED,WAAM,QAAQ,OAAO;MACnB;MACA;MACA,MAAM;OACJ,KAAK;QACH,QAAQ,MAAM;QACd,SAAS,MAAM;QACf,YAAY,MAAM,eAAe,IAAI;QACrC,aAAa,MAAM;QACnB,UAAU,MAAM;QAChB,QAAQ,MAAM;QACd,mBAAmB,MAAM;QACzB,cAAc,MAAM;QACpB,kBAAkB,MAAM;QACzB;OACD;OACA;OACD;MACF,CAAC;;AAGJ,WAAO,SAAS,KACd;KACE,OAAO,MAAM,WAAW;KACxB;KACD,EACD,EAAE,QAAQ,KAAK,CAChB;SAED,QAAO,SAAS,KACd;IACE,OAAO;IACP;IACD,EACD,EAAE,QAAQ,KAAK,CAChB;WAEI,QAAQ;AACf,UAAO,SAAS,KACd,EAAE,SAAS,6BAA6B,EACxC,EAAE,QAAQ,KAAK,CAChB"}