@maas/payload-plugin-media-cloud 0.0.30 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/handleDelete.d.mts +3 -3
- package/dist/adapter/handleDelete.mjs +6 -6
- package/dist/adapter/handleDelete.mjs.map +1 -1
- package/dist/adapter/staticHandler.d.mts +5 -3
- package/dist/adapter/staticHandler.mjs +8 -7
- package/dist/adapter/staticHandler.mjs.map +1 -1
- package/dist/adapter/storageAdapter.d.mts +3 -3
- package/dist/adapter/storageAdapter.mjs +4 -4
- package/dist/adapter/storageAdapter.mjs.map +1 -1
- package/dist/collectionHooks/afterChange.d.mts +7 -0
- package/dist/collectionHooks/afterChange.mjs +39 -0
- package/dist/collectionHooks/afterChange.mjs.map +1 -0
- package/dist/collectionHooks/beforeChange.d.mts +7 -0
- package/dist/collectionHooks/beforeChange.mjs +33 -0
- package/dist/collectionHooks/beforeChange.mjs.map +1 -0
- package/dist/collections/mediaCollection.d.mts +3 -2
- package/dist/collections/mediaCollection.mjs +46 -198
- package/dist/collections/mediaCollection.mjs.map +1 -1
- package/dist/components/folderFileCard/folderFileCard.d.mts +13 -0
- package/dist/components/folderFileCard/folderFileCard.mjs +30 -0
- package/dist/components/folderFileCard/folderFileCard.mjs.map +1 -0
- package/dist/components/gridContext/gridContext.d.mts +51 -0
- package/dist/components/gridContext/gridContext.mjs +227 -0
- package/dist/components/gridContext/gridContext.mjs.map +1 -0
- package/dist/components/gridView/gridView.css +50 -0
- package/dist/components/gridView/gridView.d.mts +16 -0
- package/dist/components/gridView/gridView.mjs +124 -0
- package/dist/components/gridView/gridView.mjs.map +1 -0
- package/dist/components/gridView/index.d.mts +2 -0
- package/dist/components/gridView/index.mjs +3 -0
- package/dist/components/index.d.mts +9 -7
- package/dist/components/index.mjs +5 -4
- package/dist/components/itemCardGrid/itemCardGrid.css +12 -0
- package/dist/components/itemCardGrid/itemCardGrid.d.mts +18 -0
- package/dist/components/itemCardGrid/itemCardGrid.mjs +22 -0
- package/dist/components/itemCardGrid/itemCardGrid.mjs.map +1 -0
- package/dist/components/muxPreview/index.d.mts +2 -0
- package/dist/components/muxPreview/index.mjs +3 -0
- package/dist/components/{mux-preview/mux-preview.d.mts → muxPreview/muxPreview.d.mts} +2 -2
- package/dist/components/{mux-preview/mux-preview.mjs → muxPreview/muxPreview.mjs} +2 -2
- package/dist/components/muxPreview/muxPreview.mjs.map +1 -0
- package/dist/components/uploadHandler/index.d.mts +2 -0
- package/dist/components/uploadHandler/index.mjs +3 -0
- package/dist/components/uploadHandler/uploadHandler.d.mts +20 -0
- package/dist/components/{upload-handler/upload-handler.mjs → uploadHandler/uploadHandler.mjs} +82 -52
- package/dist/components/uploadHandler/uploadHandler.mjs.map +1 -0
- package/dist/components/uploadManager/index.d.mts +2 -0
- package/dist/components/uploadManager/index.mjs +3 -0
- package/dist/components/{upload-manager/upload-manager.d.mts → uploadManager/uploadManager.d.mts} +3 -3
- package/dist/components/{upload-manager/upload-manager.mjs → uploadManager/uploadManager.mjs} +3 -3
- package/dist/components/uploadManager/uploadManager.mjs.map +1 -0
- package/dist/endpoints/fileExistsHandler.d.mts +12 -0
- package/dist/endpoints/{tusFileExistsHandler.mjs → fileExistsHandler.mjs} +7 -7
- package/dist/endpoints/fileExistsHandler.mjs.map +1 -0
- package/dist/endpoints/muxAssetHandler.d.mts +1 -0
- package/dist/endpoints/muxAssetHandler.mjs +3 -3
- package/dist/endpoints/muxAssetHandler.mjs.map +1 -1
- package/dist/endpoints/muxWebhookHandler.d.mts +1 -0
- package/dist/endpoints/muxWebhookHandler.mjs +6 -5
- package/dist/endpoints/muxWebhookHandler.mjs.map +1 -1
- package/dist/endpoints/tusCleanupHandler.d.mts +3 -2
- package/dist/endpoints/tusCleanupHandler.mjs +4 -4
- package/dist/endpoints/tusCleanupHandler.mjs.map +1 -1
- package/dist/endpoints/tusFolderHandler.d.mts +12 -0
- package/dist/endpoints/tusFolderHandler.mjs +39 -0
- package/dist/endpoints/tusFolderHandler.mjs.map +1 -0
- package/dist/endpoints/tusPostProcessorHandler.d.mts +3 -2
- package/dist/endpoints/tusPostProcessorHandler.mjs +6 -5
- package/dist/endpoints/tusPostProcessorHandler.mjs.map +1 -1
- package/dist/fields/alt.d.mts +7 -0
- package/dist/fields/alt.mjs +10 -0
- package/dist/fields/alt.mjs.map +1 -0
- package/dist/fields/filename.d.mts +7 -0
- package/dist/fields/filename.mjs +14 -0
- package/dist/fields/filename.mjs.map +1 -0
- package/dist/fields/height.d.mts +7 -0
- package/dist/fields/height.mjs +15 -0
- package/dist/fields/height.mjs.map +1 -0
- package/dist/fields/mux.d.mts +7 -0
- package/dist/fields/mux.mjs +149 -0
- package/dist/fields/mux.mjs.map +1 -0
- package/dist/fields/path.d.mts +7 -0
- package/dist/fields/path.mjs +14 -0
- package/dist/fields/path.mjs.map +1 -0
- package/dist/fields/storage.d.mts +7 -0
- package/dist/fields/storage.mjs +18 -0
- package/dist/fields/storage.mjs.map +1 -0
- package/dist/fields/thumbnail.d.mts +7 -0
- package/dist/fields/thumbnail.mjs +17 -0
- package/dist/fields/thumbnail.mjs.map +1 -0
- package/dist/fields/width.d.mts +7 -0
- package/dist/fields/width.mjs +15 -0
- package/dist/fields/width.mjs.map +1 -0
- package/dist/hooks/useErrorHandler.d.mts +1 -1
- package/dist/hooks/useErrorHandler.mjs +4 -2
- package/dist/hooks/useErrorHandler.mjs.map +1 -1
- package/dist/plugin.d.mts +5 -4
- package/dist/plugin.mjs +53 -29
- package/dist/plugin.mjs.map +1 -1
- package/dist/tus/stores/s3/{expiration-manager.d.mts → expirationManager.d.mts} +4 -3
- package/dist/tus/stores/s3/{expiration-manager.mjs → expirationManager.mjs} +6 -3
- package/dist/tus/stores/s3/expirationManager.mjs.map +1 -0
- package/dist/tus/stores/s3/{file-operations.d.mts → fileOperations.d.mts} +2 -2
- package/dist/tus/stores/s3/{file-operations.mjs → fileOperations.mjs} +2 -2
- package/dist/tus/stores/s3/fileOperations.mjs.map +1 -0
- package/dist/tus/stores/s3/index.d.mts +1 -1
- package/dist/tus/stores/s3/index.mjs +20 -9
- package/dist/tus/stores/s3/index.mjs.map +1 -1
- package/dist/tus/stores/s3/{metadata-manager.d.mts → metadataManager.d.mts} +4 -2
- package/dist/tus/stores/s3/{metadata-manager.mjs → metadataManager.mjs} +6 -5
- package/dist/tus/stores/s3/metadataManager.mjs.map +1 -0
- package/dist/tus/stores/s3/{parts-manager.d.mts → partsManager.d.mts} +4 -4
- package/dist/tus/stores/s3/{parts-manager.mjs → partsManager.mjs} +67 -29
- package/dist/tus/stores/s3/partsManager.mjs.map +1 -0
- package/dist/tus/stores/s3/{s3-store.d.mts → s3Store.d.mts} +38 -32
- package/dist/tus/stores/s3/{s3-store.mjs → s3Store.mjs} +102 -57
- package/dist/tus/stores/s3/s3Store.mjs.map +1 -0
- package/dist/types/errors.d.mts +32 -0
- package/dist/types/errors.mjs +32 -0
- package/dist/types/errors.mjs.map +1 -1
- package/dist/types/index.d.mts +42 -4
- package/dist/utils/buildS3Path.d.mts +10 -0
- package/dist/utils/buildS3Path.mjs +16 -0
- package/dist/utils/buildS3Path.mjs.map +1 -0
- package/dist/utils/buildThumbnailURL.d.mts +14 -0
- package/dist/utils/buildThumbnailURL.mjs +10 -0
- package/dist/utils/buildThumbnailURL.mjs.map +1 -0
- package/dist/utils/defaultOptions.d.mts +7 -0
- package/dist/utils/defaultOptions.mjs +12 -0
- package/dist/utils/defaultOptions.mjs.map +1 -0
- package/dist/utils/file.d.mts +16 -2
- package/dist/utils/file.mjs +58 -6
- package/dist/utils/file.mjs.map +1 -1
- package/dist/utils/mux.mjs +19 -8
- package/dist/utils/mux.mjs.map +1 -1
- package/dist/utils/tus.d.mts +9 -6
- package/dist/utils/tus.mjs +31 -11
- package/dist/utils/tus.mjs.map +1 -1
- package/package.json +9 -4
- package/dist/components/mux-preview/index.d.mts +0 -2
- package/dist/components/mux-preview/index.mjs +0 -3
- package/dist/components/mux-preview/mux-preview.mjs.map +0 -1
- package/dist/components/upload-handler/index.d.mts +0 -2
- package/dist/components/upload-handler/index.mjs +0 -3
- package/dist/components/upload-handler/upload-handler.d.mts +0 -22
- package/dist/components/upload-handler/upload-handler.mjs.map +0 -1
- package/dist/components/upload-manager/index.d.mts +0 -2
- package/dist/components/upload-manager/index.mjs +0 -3
- package/dist/components/upload-manager/upload-manager.mjs.map +0 -1
- package/dist/endpoints/tusFileExistsHandler.d.mts +0 -11
- package/dist/endpoints/tusFileExistsHandler.mjs.map +0 -1
- package/dist/tus/stores/s3/expiration-manager.mjs.map +0 -1
- package/dist/tus/stores/s3/file-operations.mjs.map +0 -1
- package/dist/tus/stores/s3/metadata-manager.mjs.map +0 -1
- package/dist/tus/stores/s3/parts-manager.mjs.map +0 -1
- package/dist/tus/stores/s3/s3-store.mjs.map +0 -1
- /package/dist/components/{upload-manager/upload-manager.css → uploadManager/uploadManager.css} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/endpoints/muxAssetHandler.ts
|
|
2
2
|
function getMuxAssetHandler(args) {
|
|
3
|
-
const { getMuxClient } = args;
|
|
3
|
+
const { getMuxClient, collection } = args;
|
|
4
4
|
return async (req) => {
|
|
5
5
|
try {
|
|
6
6
|
const mux = getMuxClient();
|
|
@@ -15,7 +15,7 @@ function getMuxAssetHandler(args) {
|
|
|
15
15
|
if (asset.status === "ready") {
|
|
16
16
|
const { payload } = req;
|
|
17
17
|
const { docs } = await payload.find({
|
|
18
|
-
collection
|
|
18
|
+
collection,
|
|
19
19
|
where: { "mux.uploadId": { equals: uploadId } },
|
|
20
20
|
limit: 1,
|
|
21
21
|
pagination: false
|
|
@@ -25,7 +25,7 @@ function getMuxAssetHandler(args) {
|
|
|
25
25
|
const width = Array.from(asset.tracks ?? []).reduce((max, track) => track.type === "video" && track.max_width ? Math.max(max, track.max_width) : max, 0);
|
|
26
26
|
const height = Array.from(asset.tracks ?? []).reduce((max, track) => track.type === "video" && track.max_height ? Math.max(max, track.max_height) : max, 0);
|
|
27
27
|
await payload.update({
|
|
28
|
-
collection
|
|
28
|
+
collection,
|
|
29
29
|
id,
|
|
30
30
|
data: {
|
|
31
31
|
mux: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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}\n\nexport function getMuxAssetHandler(\n args: GetMuxAssetHandlerArgs\n): PayloadHandler {\n const { getMuxClient } = args\n\n return async (req) => {\n try {\n const mux = 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 mux.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
|
|
1
|
+
{"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 mux = 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 mux.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,MAAM,cAAc;GAC1B,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,IAAI,MAAM,OAAO,KAAK;IACzC,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"}
|
|
@@ -4,6 +4,7 @@ import { PayloadHandler } from "payload";
|
|
|
4
4
|
//#region src/endpoints/muxWebhookHandler.d.ts
|
|
5
5
|
interface GetMuxWebhookHandlerArgs {
|
|
6
6
|
getMuxClient: () => Mux$1;
|
|
7
|
+
collection: string;
|
|
7
8
|
}
|
|
8
9
|
declare function getMuxWebhookHandler(args: GetMuxWebhookHandlerArgs): PayloadHandler;
|
|
9
10
|
//#endregion
|
|
@@ -4,7 +4,7 @@ import { useErrorHandler } from "../hooks/useErrorHandler.mjs";
|
|
|
4
4
|
//#region src/endpoints/muxWebhookHandler.ts
|
|
5
5
|
const { logError, log } = useErrorHandler();
|
|
6
6
|
function getMuxWebhookHandler(args) {
|
|
7
|
-
const { getMuxClient } = args;
|
|
7
|
+
const { getMuxClient, collection } = args;
|
|
8
8
|
return async (req) => {
|
|
9
9
|
const mux = getMuxClient();
|
|
10
10
|
try {
|
|
@@ -24,7 +24,8 @@ function getMuxWebhookHandler(args) {
|
|
|
24
24
|
case "video.asset.static_renditions.deleted":
|
|
25
25
|
await updateMuxAsset({
|
|
26
26
|
asset: event.object,
|
|
27
|
-
payload: req.payload
|
|
27
|
+
payload: req.payload,
|
|
28
|
+
collection
|
|
28
29
|
});
|
|
29
30
|
break;
|
|
30
31
|
}
|
|
@@ -35,10 +36,10 @@ function getMuxWebhookHandler(args) {
|
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
38
|
async function updateMuxAsset(args) {
|
|
38
|
-
const { asset, payload } = args;
|
|
39
|
+
const { asset, payload, collection } = args;
|
|
39
40
|
if (asset.status === "ready") {
|
|
40
41
|
const { docs } = await payload.find({
|
|
41
|
-
collection
|
|
42
|
+
collection,
|
|
42
43
|
where: { "mux.assetId": { equals: asset.id } },
|
|
43
44
|
limit: 1,
|
|
44
45
|
pagination: false
|
|
@@ -48,7 +49,7 @@ async function updateMuxAsset(args) {
|
|
|
48
49
|
const width = Array.from(asset.tracks ?? []).reduce((max, track) => track.type === "video" && track.max_width ? Math.max(max, track.max_width) : max, 0);
|
|
49
50
|
const height = Array.from(asset.tracks ?? []).reduce((max, track) => track.type === "video" && track.max_height ? Math.max(max, track.max_height) : max, 0);
|
|
50
51
|
await payload.update({
|
|
51
|
-
collection
|
|
52
|
+
collection,
|
|
52
53
|
id,
|
|
53
54
|
data: {
|
|
54
55
|
mux: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxWebhookHandler.mjs","names":[],"sources":["../../src/endpoints/muxWebhookHandler.ts"],"sourcesContent":["import { useErrorHandler } from '../hooks/useErrorHandler'\nimport { MediaCloudErrors } from '../types/errors'\n\nimport type { Mux } from '@mux/mux-node'\nimport type { BasePayload, PayloadHandler } from 'payload'\nimport type { StaticRenditions } from '../types'\n\ninterface GetMuxWebhookHandlerArgs {\n getMuxClient: () => Mux\n}\n\nconst { logError, log } = useErrorHandler()\n\nexport function getMuxWebhookHandler(\n args: GetMuxWebhookHandlerArgs\n): PayloadHandler {\n const { getMuxClient } = args\n\n return async (req) => {\n const mux = getMuxClient()\n\n try {\n const body = req.text ? await req.text() : ''\n const headers = req.headers\n\n if (!body) {\n logError(MediaCloudErrors.MUX_WEBHOOK_BODY_INVALID.message)\n }\n\n // Verify the webhook signature\n mux.webhooks.verifySignature(body, headers)\n\n // Parse the request body\n const event = JSON.parse(body)\n\n // Handle the event\n switch (event.type) {\n case 'video.asset.created':\n case 'video.asset.errored':\n case 'video.asset.deleted':\n log(`Received Mux webhook: ${event.type}, ${event.object.id}`)\n break\n case 'video.asset.ready':\n case 'video.asset.static_renditions.ready':\n case 'video.asset.static_renditions.deleted':\n await updateMuxAsset({
|
|
1
|
+
{"version":3,"file":"muxWebhookHandler.mjs","names":[],"sources":["../../src/endpoints/muxWebhookHandler.ts"],"sourcesContent":["import { useErrorHandler } from '../hooks/useErrorHandler'\nimport { MediaCloudErrors } from '../types/errors'\n\nimport type { Mux } from '@mux/mux-node'\nimport type { BasePayload, PayloadHandler } from 'payload'\nimport type { StaticRenditions } from '../types'\n\ninterface GetMuxWebhookHandlerArgs {\n getMuxClient: () => Mux\n collection: string\n}\n\nconst { logError, log } = useErrorHandler()\n\nexport function getMuxWebhookHandler(\n args: GetMuxWebhookHandlerArgs\n): PayloadHandler {\n const { getMuxClient, collection } = args\n\n return async (req) => {\n const mux = getMuxClient()\n\n try {\n const body = req.text ? await req.text() : ''\n const headers = req.headers\n\n if (!body) {\n logError(MediaCloudErrors.MUX_WEBHOOK_BODY_INVALID.message)\n }\n\n // Verify the webhook signature\n mux.webhooks.verifySignature(body, headers)\n\n // Parse the request body\n const event = JSON.parse(body)\n\n // Handle the event\n switch (event.type) {\n case 'video.asset.created':\n case 'video.asset.errored':\n case 'video.asset.deleted':\n log(`Received Mux webhook: ${event.type}, ${event.object.id}`)\n break\n case 'video.asset.ready':\n case 'video.asset.static_renditions.ready':\n case 'video.asset.static_renditions.deleted':\n await updateMuxAsset({\n asset: event.object,\n payload: req.payload,\n collection,\n })\n break\n }\n\n return Response.json({ message: 'Webhook received' }, { status: 200 })\n } catch (error) {\n return Response.json(\n { message: error instanceof Error ? error.message : String(error) },\n { status: 500 }\n )\n }\n }\n}\n\ninterface UpdateMuxAssetArgs {\n asset: Mux.Video.Asset\n payload: BasePayload\n collection: string\n}\n\nasync function updateMuxAsset(args: UpdateMuxAssetArgs): Promise<void> {\n const { asset, payload, collection } = args\n\n if (asset.status === 'ready') {\n const { docs } = await payload.find({\n collection,\n where: {\n 'mux.assetId': {\n equals: asset.id,\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}\n"],"mappings":";;;;AAYA,MAAM,EAAE,UAAU,QAAQ,iBAAiB;AAE3C,SAAgB,qBACd,MACgB;CAChB,MAAM,EAAE,cAAc,eAAe;AAErC,QAAO,OAAO,QAAQ;EACpB,MAAM,MAAM,cAAc;AAE1B,MAAI;GACF,MAAM,OAAO,IAAI,OAAO,MAAM,IAAI,MAAM,GAAG;GAC3C,MAAM,UAAU,IAAI;AAEpB,OAAI,CAAC,KACH,UAAS,iBAAiB,yBAAyB,QAAQ;AAI7D,OAAI,SAAS,gBAAgB,MAAM,QAAQ;GAG3C,MAAM,QAAQ,KAAK,MAAM,KAAK;AAG9B,WAAQ,MAAM,MAAd;IACE,KAAK;IACL,KAAK;IACL,KAAK;AACH,SAAI,yBAAyB,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK;AAC9D;IACF,KAAK;IACL,KAAK;IACL,KAAK;AACH,WAAM,eAAe;MACnB,OAAO,MAAM;MACb,SAAS,IAAI;MACb;MACD,CAAC;AACF;;AAGJ,UAAO,SAAS,KAAK,EAAE,SAAS,oBAAoB,EAAE,EAAE,QAAQ,KAAK,CAAC;WAC/D,OAAO;AACd,UAAO,SAAS,KACd,EAAE,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAAE,EACnE,EAAE,QAAQ,KAAK,CAChB;;;;AAWP,eAAe,eAAe,MAAyC;CACrE,MAAM,EAAE,OAAO,SAAS,eAAe;AAEvC,KAAI,MAAM,WAAW,SAAS;EAC5B,MAAM,EAAE,SAAS,MAAM,QAAQ,KAAK;GAClC;GACA,OAAO,EACL,eAAe,EACb,QAAQ,MAAM,IACf,EACF;GACD,OAAO;GACP,YAAY;GACb,CAAC;AAEF,MAAI,KAAK,SAAS,GAAG;GACnB,MAAM,EAAE,OAAO,KAAK;GAEpB,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;GAED,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,SAAM,QAAQ,OAAO;IACnB;IACA;IACA,MAAM;KACJ,KAAK;MACH,QAAQ,MAAM;MACd,SAAS,MAAM;MACf,YAAY,MAAM,eAAe,IAAI;MACrC,aAAa,MAAM;MACnB,UAAU,MAAM;MAChB,QAAQ,MAAM;MACd,mBAAmB,MAAM;MACzB,cAAc,MAAM;MACpB,kBAAkB,MAAM;MACzB;KACD;KACA;KACD;IACF,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S3Store } from "../tus/stores/s3/s3Store.mjs";
|
|
2
2
|
import { PayloadHandler } from "payload";
|
|
3
3
|
|
|
4
4
|
//#region src/endpoints/tusCleanupHandler.d.ts
|
|
5
5
|
interface GetTusCleanupHandlerArgs {
|
|
6
|
-
|
|
6
|
+
getS3Store: () => S3Store;
|
|
7
|
+
collection: string;
|
|
7
8
|
}
|
|
8
9
|
declare function getTusCleanupHandler(args: GetTusCleanupHandlerArgs): PayloadHandler;
|
|
9
10
|
//#endregion
|
|
@@ -4,20 +4,20 @@ import { useErrorHandler } from "../hooks/useErrorHandler.mjs";
|
|
|
4
4
|
//#region src/endpoints/tusCleanupHandler.ts
|
|
5
5
|
const { logError } = useErrorHandler();
|
|
6
6
|
function getTusCleanupHandler(args) {
|
|
7
|
-
const {
|
|
7
|
+
const { getS3Store, collection } = args;
|
|
8
8
|
return async (req) => {
|
|
9
9
|
try {
|
|
10
10
|
const { filename } = await req.json?.();
|
|
11
11
|
if (!filename) return new Response("Missing filename", { status: 400 });
|
|
12
|
-
await
|
|
12
|
+
await getS3Store().remove(filename);
|
|
13
13
|
const payload = req.payload;
|
|
14
14
|
const { docs } = await req.payload.find({
|
|
15
|
-
collection
|
|
15
|
+
collection,
|
|
16
16
|
where: { filename: { equals: filename } },
|
|
17
17
|
limit: 1
|
|
18
18
|
});
|
|
19
19
|
if (docs?.length > 0) await payload.delete({
|
|
20
|
-
collection
|
|
20
|
+
collection,
|
|
21
21
|
id: docs[0].id
|
|
22
22
|
});
|
|
23
23
|
return new Response("Cleanup successful", { status: 200 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tusCleanupHandler.mjs","names":[],"sources":["../../src/endpoints/tusCleanupHandler.ts"],"sourcesContent":["import type { PayloadHandler } from 'payload'\nimport { useErrorHandler } from '../hooks/useErrorHandler'\nimport {
|
|
1
|
+
{"version":3,"file":"tusCleanupHandler.mjs","names":[],"sources":["../../src/endpoints/tusCleanupHandler.ts"],"sourcesContent":["import type { PayloadHandler } from 'payload'\nimport { useErrorHandler } from '../hooks/useErrorHandler'\nimport { MediaCloudErrors } from '../types/errors'\nimport type { S3Store } from '../tus/stores/s3/s3Store'\n\ninterface GetTusCleanupHandlerArgs {\n getS3Store: () => S3Store\n collection: string\n}\n\nconst { logError } = useErrorHandler()\n\nexport function getTusCleanupHandler(\n args: GetTusCleanupHandlerArgs\n): PayloadHandler {\n const { getS3Store, collection } = args\n\n return async (req) => {\n try {\n const data = await req.json?.()\n const { filename } = data\n\n if (!filename) {\n return new Response('Missing filename', { status: 400 })\n }\n\n // Abort the multipart upload and delete S3 objects (.info, .part)\n await getS3Store().remove(filename)\n\n // Find and delete the Payload document\n const payload = req.payload\n const { docs } = await req.payload.find({\n collection,\n where: {\n filename: {\n equals: filename,\n },\n },\n limit: 1,\n })\n\n if (docs?.length > 0) {\n await payload.delete({\n collection,\n id: docs[0].id,\n })\n }\n\n return new Response('Cleanup successful', { status: 200 })\n } catch {\n logError(MediaCloudErrors.TUS_CLEANUP_ERROR.message)\n return new Response('Cleanup failed', { status: 500 })\n }\n }\n}\n"],"mappings":";;;;AAUA,MAAM,EAAE,aAAa,iBAAiB;AAEtC,SAAgB,qBACd,MACgB;CAChB,MAAM,EAAE,YAAY,eAAe;AAEnC,QAAO,OAAO,QAAQ;AACpB,MAAI;GAEF,MAAM,EAAE,aADK,MAAM,IAAI,QAAQ;AAG/B,OAAI,CAAC,SACH,QAAO,IAAI,SAAS,oBAAoB,EAAE,QAAQ,KAAK,CAAC;AAI1D,SAAM,YAAY,CAAC,OAAO,SAAS;GAGnC,MAAM,UAAU,IAAI;GACpB,MAAM,EAAE,SAAS,MAAM,IAAI,QAAQ,KAAK;IACtC;IACA,OAAO,EACL,UAAU,EACR,QAAQ,UACT,EACF;IACD,OAAO;IACR,CAAC;AAEF,OAAI,MAAM,SAAS,EACjB,OAAM,QAAQ,OAAO;IACnB;IACA,IAAI,KAAK,GAAG;IACb,CAAC;AAGJ,UAAO,IAAI,SAAS,sBAAsB,EAAE,QAAQ,KAAK,CAAC;UACpD;AACN,YAAS,iBAAiB,kBAAkB,QAAQ;AACpD,UAAO,IAAI,SAAS,kBAAkB,EAAE,QAAQ,KAAK,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S3Store } from "../tus/stores/s3/s3Store.mjs";
|
|
2
|
+
import { PayloadHandler } from "payload";
|
|
3
|
+
|
|
4
|
+
//#region src/endpoints/tusFolderHandler.d.ts
|
|
5
|
+
interface GetTusPostProcessorHandlerArgs {
|
|
6
|
+
getS3Store: () => S3Store;
|
|
7
|
+
collection: string;
|
|
8
|
+
}
|
|
9
|
+
declare function getTusFolderHandler(args: GetTusPostProcessorHandlerArgs): PayloadHandler;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { getTusFolderHandler };
|
|
12
|
+
//# sourceMappingURL=tusFolderHandler.d.mts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { MediaCloudErrors } from "../types/errors.mjs";
|
|
2
|
+
import { useErrorHandler } from "../hooks/useErrorHandler.mjs";
|
|
3
|
+
import { sanitizeFilename } from "../utils/file.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/endpoints/tusFolderHandler.ts
|
|
6
|
+
function getTusFolderHandler(args) {
|
|
7
|
+
const { getS3Store, collection } = args;
|
|
8
|
+
const { throwError, logError } = useErrorHandler();
|
|
9
|
+
return async function(req) {
|
|
10
|
+
try {
|
|
11
|
+
const { routeParams, payload } = req;
|
|
12
|
+
const filename = routeParams?.filename;
|
|
13
|
+
if (!filename) throwError(MediaCloudErrors.FILE_MISSING_NAME);
|
|
14
|
+
const sanitizedFilename = sanitizeFilename(filename);
|
|
15
|
+
const { docs } = await payload.find({
|
|
16
|
+
collection,
|
|
17
|
+
where: { filename: { equals: sanitizedFilename } },
|
|
18
|
+
limit: 1,
|
|
19
|
+
pagination: false
|
|
20
|
+
});
|
|
21
|
+
const media = docs?.[0];
|
|
22
|
+
if (!media) throwError(MediaCloudErrors.FILE_NOT_FOUND);
|
|
23
|
+
if (media.storage !== "s3") return Response.json({ message: "Asset not stored on S3, skipping …" }, { status: 200 });
|
|
24
|
+
const s3Store = getS3Store();
|
|
25
|
+
if (await s3Store?.read(media.path).catch(() => null)) return Response.json({ message: "Asset already in correct location, skipping …" }, { status: 200 });
|
|
26
|
+
const oldKey = media.filename;
|
|
27
|
+
const newKey = media.path;
|
|
28
|
+
await s3Store?.copy(oldKey, newKey);
|
|
29
|
+
return Response.json({ message: "Asset moved" }, { status: 200 });
|
|
30
|
+
} catch (_error) {
|
|
31
|
+
logError(MediaCloudErrors.S3_MOVE_ERROR.message);
|
|
32
|
+
return Response.json({ message: "Failed to move asset" }, { status: 500 });
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { getTusFolderHandler };
|
|
39
|
+
//# sourceMappingURL=tusFolderHandler.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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 GetTusPostProcessorHandlerArgs {\n getS3Store: () => S3Store\n collection: string\n}\n\nexport function getTusFolderHandler(\n args: GetTusPostProcessorHandlerArgs\n): PayloadHandler {\n const { getS3Store, collection } = args\n const { throwError, logError } = useErrorHandler()\n\n return async function (req) {\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":";;;;;AAYA,SAAgB,oBACd,MACgB;CAChB,MAAM,EAAE,YAAY,eAAe;CACnC,MAAM,EAAE,YAAY,aAAa,iBAAiB;AAElD,QAAO,eAAgB,KAAK;AAC1B,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,KAAK,CAAC,YAAY,KAAK,CAG5D,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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { S3Store } from "../tus/stores/s3/
|
|
1
|
+
import { S3Store } from "../tus/stores/s3/s3Store.mjs";
|
|
2
2
|
import { PayloadHandler } from "payload";
|
|
3
3
|
|
|
4
4
|
//#region src/endpoints/tusPostProcessorHandler.d.ts
|
|
5
5
|
interface GetTusPostProcessorHandlerArgs {
|
|
6
|
-
|
|
6
|
+
getS3Store: () => S3Store;
|
|
7
|
+
collection: string;
|
|
7
8
|
}
|
|
8
9
|
declare function getTusPostProcessorHandler(args: GetTusPostProcessorHandlerArgs): PayloadHandler;
|
|
9
10
|
//#endregion
|
|
@@ -5,7 +5,7 @@ import { imageSize } from "image-size";
|
|
|
5
5
|
|
|
6
6
|
//#region src/endpoints/tusPostProcessorHandler.ts
|
|
7
7
|
function getTusPostProcessorHandler(args) {
|
|
8
|
-
const {
|
|
8
|
+
const { getS3Store, collection } = args;
|
|
9
9
|
const { throwError, logError } = useErrorHandler();
|
|
10
10
|
return async function(req) {
|
|
11
11
|
try {
|
|
@@ -14,20 +14,21 @@ function getTusPostProcessorHandler(args) {
|
|
|
14
14
|
if (!filename) throwError(MediaCloudErrors.FILE_MISSING_NAME);
|
|
15
15
|
const sanitizedFilename = sanitizeFilename(filename);
|
|
16
16
|
const { docs } = await payload.find({
|
|
17
|
-
collection
|
|
17
|
+
collection,
|
|
18
18
|
where: { filename: { equals: sanitizedFilename } },
|
|
19
19
|
limit: 1,
|
|
20
20
|
pagination: false
|
|
21
21
|
});
|
|
22
22
|
const media = docs?.[0];
|
|
23
23
|
if (!media) throwError(MediaCloudErrors.FILE_NOT_FOUND);
|
|
24
|
-
if (media.storage !== "s3") return Response.json({ message: "Asset not stored on S3, skipping
|
|
24
|
+
if (media.storage !== "s3") return Response.json({ message: "Asset not stored on S3, skipping …" }, { status: 200 });
|
|
25
|
+
const s3Store = getS3Store();
|
|
25
26
|
const matchedId = media?.id;
|
|
26
|
-
const url = s3Store
|
|
27
|
+
const url = s3Store?.getUrl(filename);
|
|
27
28
|
const arrayBuffer = await (await fetch(url)).arrayBuffer();
|
|
28
29
|
const { width, height } = imageSize(Buffer.from(arrayBuffer));
|
|
29
30
|
if (width && height) await payload.update({
|
|
30
|
-
collection
|
|
31
|
+
collection,
|
|
31
32
|
id: matchedId,
|
|
32
33
|
data: {
|
|
33
34
|
width,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tusPostProcessorHandler.mjs","names":[],"sources":["../../src/endpoints/tusPostProcessorHandler.ts"],"sourcesContent":["import type { PayloadHandler } from 'payload'\nimport { useErrorHandler } from '../hooks/useErrorHandler'\nimport { MediaCloudErrors } from '../types/errors'\n\nimport { S3Store } from '../tus/stores/s3/
|
|
1
|
+
{"version":3,"file":"tusPostProcessorHandler.mjs","names":[],"sources":["../../src/endpoints/tusPostProcessorHandler.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 { imageSize } from 'image-size'\nimport { sanitizeFilename } from '../utils/file'\n\ninterface GetTusPostProcessorHandlerArgs {\n getS3Store: () => S3Store\n collection: string\n}\n\nexport function getTusPostProcessorHandler(\n args: GetTusPostProcessorHandlerArgs\n): PayloadHandler {\n const { getS3Store, collection } = args\n const { throwError, logError } = useErrorHandler()\n\n return async function (req) {\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 matchedId = media?.id\n\n const url = s3Store?.getUrl(filename)\n const response = await fetch(url)\n const arrayBuffer = await response.arrayBuffer()\n const buffer = Buffer.from(arrayBuffer)\n\n const dimensions = imageSize(buffer)\n const { width, height } = dimensions\n\n if (width && height) {\n await payload.update({\n collection,\n id: matchedId,\n data: {\n width,\n height,\n },\n })\n }\n\n return Response.json({ message: 'Asset processed' }, { status: 200 })\n } catch (_error) {\n logError(MediaCloudErrors.FILE_DIMENSIONS_ERROR.message)\n return Response.json(\n { message: 'Failed to process asset' },\n { status: 500 }\n )\n }\n }\n}\n"],"mappings":";;;;;;AAaA,SAAgB,2BACd,MACgB;CAChB,MAAM,EAAE,YAAY,eAAe;CACnC,MAAM,EAAE,YAAY,aAAa,iBAAiB;AAElD,QAAO,eAAgB,KAAK;AAC1B,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;GAC5B,MAAM,YAAY,OAAO;GAEzB,MAAM,MAAM,SAAS,OAAO,SAAS;GAErC,MAAM,cAAc,OADH,MAAM,MAAM,IAAI,EACE,aAAa;GAIhD,MAAM,EAAE,OAAO,WADI,UAFJ,OAAO,KAAK,YAAY,CAEH;AAGpC,OAAI,SAAS,OACX,OAAM,QAAQ,OAAO;IACnB;IACA,IAAI;IACJ,MAAM;KACJ;KACA;KACD;IACF,CAAC;AAGJ,UAAO,SAAS,KAAK,EAAE,SAAS,mBAAmB,EAAE,EAAE,QAAQ,KAAK,CAAC;WAC9D,QAAQ;AACf,YAAS,iBAAiB,sBAAsB,QAAQ;AACxD,UAAO,SAAS,KACd,EAAE,SAAS,2BAA2B,EACtC,EAAE,QAAQ,KAAK,CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alt.mjs","names":["altField: TextField"],"sources":["../../src/fields/alt.ts"],"sourcesContent":["import type { TextField } from 'payload'\n\nexport const altField: TextField = {\n name: 'alt',\n label: 'Alternative Text',\n type: 'text',\n}\n"],"mappings":";AAEA,MAAaA,WAAsB;CACjC,MAAM;CACN,OAAO;CACP,MAAM;CACP"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/fields/filename.ts
|
|
2
|
+
const filenameField = {
|
|
3
|
+
type: "text",
|
|
4
|
+
name: "filename",
|
|
5
|
+
unique: true,
|
|
6
|
+
admin: {
|
|
7
|
+
hidden: false,
|
|
8
|
+
readOnly: false
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { filenameField };
|
|
14
|
+
//# sourceMappingURL=filename.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filename.mjs","names":["filenameField: TextField"],"sources":["../../src/fields/filename.ts"],"sourcesContent":["import type { TextField } from 'payload'\n\nexport const filenameField: TextField = {\n type: 'text',\n name: 'filename',\n unique: true,\n admin: {\n hidden: false,\n readOnly: false,\n },\n}\n"],"mappings":";AAEA,MAAaA,gBAA2B;CACtC,MAAM;CACN,MAAM;CACN,QAAQ;CACR,OAAO;EACL,QAAQ;EACR,UAAU;EACX;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/fields/height.ts
|
|
2
|
+
const heightField = {
|
|
3
|
+
name: "height",
|
|
4
|
+
label: "Height",
|
|
5
|
+
type: "text",
|
|
6
|
+
admin: {
|
|
7
|
+
readOnly: true,
|
|
8
|
+
hidden: false,
|
|
9
|
+
width: "50%"
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { heightField };
|
|
15
|
+
//# sourceMappingURL=height.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"height.mjs","names":["heightField: TextField"],"sources":["../../src/fields/height.ts"],"sourcesContent":["import type { TextField } from 'payload'\n\nexport const heightField: TextField = {\n name: 'height',\n label: 'Height',\n type: 'text',\n admin: {\n readOnly: true,\n hidden: false,\n width: '50%',\n },\n}\n"],"mappings":";AAEA,MAAaA,cAAyB;CACpC,MAAM;CACN,OAAO;CACP,MAAM;CACN,OAAO;EACL,UAAU;EACV,QAAQ;EACR,OAAO;EACR;CACF"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
//#region src/fields/mux.ts
|
|
2
|
+
const muxField = {
|
|
3
|
+
name: "mux",
|
|
4
|
+
label: "Mux",
|
|
5
|
+
type: "group",
|
|
6
|
+
admin: {
|
|
7
|
+
disableListColumn: true,
|
|
8
|
+
disableBulkEdit: true,
|
|
9
|
+
disableListFilter: true,
|
|
10
|
+
readOnly: true,
|
|
11
|
+
condition: (data) => {
|
|
12
|
+
return data.storage === "mux";
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
fields: [
|
|
16
|
+
{
|
|
17
|
+
name: "preview",
|
|
18
|
+
type: "ui",
|
|
19
|
+
admin: {
|
|
20
|
+
condition: (data) => {
|
|
21
|
+
return data.storage === "mux";
|
|
22
|
+
},
|
|
23
|
+
disableListColumn: true,
|
|
24
|
+
components: { Field: "@maas/payload-plugin-media-cloud/components#MuxPreview" }
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "status",
|
|
29
|
+
label: "Status",
|
|
30
|
+
type: "text"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "uploadId",
|
|
34
|
+
label: "Upload ID",
|
|
35
|
+
type: "text"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "assetId",
|
|
39
|
+
label: "Asset ID",
|
|
40
|
+
type: "text"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "playbackId",
|
|
44
|
+
label: "Playback ID",
|
|
45
|
+
type: "text"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: "aspectRatio",
|
|
49
|
+
label: "Aspect Ratio",
|
|
50
|
+
type: "text"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "duration",
|
|
54
|
+
label: "Duration",
|
|
55
|
+
type: "number"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "tracks",
|
|
59
|
+
label: "Tracks",
|
|
60
|
+
type: "json",
|
|
61
|
+
typescriptSchema: [({ jsonSchema }) => ({
|
|
62
|
+
...jsonSchema,
|
|
63
|
+
type: "array",
|
|
64
|
+
items: [{
|
|
65
|
+
type: "object",
|
|
66
|
+
properties: {
|
|
67
|
+
type: {
|
|
68
|
+
type: "string",
|
|
69
|
+
enum: ["audio", "video"]
|
|
70
|
+
},
|
|
71
|
+
id: { type: "string" },
|
|
72
|
+
duration: { type: "number" },
|
|
73
|
+
primary: { type: "boolean" },
|
|
74
|
+
max_channels: { type: "number" },
|
|
75
|
+
max_channel_layout: { type: "string" },
|
|
76
|
+
max_width: { type: "number" },
|
|
77
|
+
max_height: { type: "number" },
|
|
78
|
+
max_frame_rate: { type: "number" }
|
|
79
|
+
},
|
|
80
|
+
required: [
|
|
81
|
+
"type",
|
|
82
|
+
"id",
|
|
83
|
+
"duration",
|
|
84
|
+
"primary",
|
|
85
|
+
"max_channels",
|
|
86
|
+
"max_channel_layout",
|
|
87
|
+
"max_width",
|
|
88
|
+
"max_height",
|
|
89
|
+
"max_frame_rate"
|
|
90
|
+
]
|
|
91
|
+
}]
|
|
92
|
+
})]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: "maxResolutionTier",
|
|
96
|
+
label: "Max Resolution Tier",
|
|
97
|
+
type: "text"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: "videoQuality",
|
|
101
|
+
label: "Video Quality",
|
|
102
|
+
type: "text"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "staticRenditions",
|
|
106
|
+
label: "Static Renditions",
|
|
107
|
+
type: "json",
|
|
108
|
+
typescriptSchema: [({ jsonSchema }) => ({
|
|
109
|
+
...jsonSchema,
|
|
110
|
+
type: "object",
|
|
111
|
+
properties: { files: {
|
|
112
|
+
type: "array",
|
|
113
|
+
items: {
|
|
114
|
+
type: "object",
|
|
115
|
+
properties: {
|
|
116
|
+
type: { type: "string" },
|
|
117
|
+
status: { type: "string" },
|
|
118
|
+
resolution: { type: "string" },
|
|
119
|
+
name: { type: "string" },
|
|
120
|
+
id: { type: "string" },
|
|
121
|
+
ext: { type: "string" },
|
|
122
|
+
width: { type: "number" },
|
|
123
|
+
height: { type: "number" },
|
|
124
|
+
filesize: { type: "string" },
|
|
125
|
+
bitrate: { type: "number" }
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
required: [
|
|
129
|
+
"type",
|
|
130
|
+
"status",
|
|
131
|
+
"resolution",
|
|
132
|
+
"name",
|
|
133
|
+
"id",
|
|
134
|
+
"ext",
|
|
135
|
+
"width",
|
|
136
|
+
"height",
|
|
137
|
+
"filesize",
|
|
138
|
+
"bitrate"
|
|
139
|
+
]
|
|
140
|
+
} },
|
|
141
|
+
required: ["files"]
|
|
142
|
+
})]
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
//#endregion
|
|
148
|
+
export { muxField };
|
|
149
|
+
//# sourceMappingURL=mux.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mux.mjs","names":["muxField: GroupField"],"sources":["../../src/fields/mux.ts"],"sourcesContent":["import type { GroupField } from 'payload'\n\nexport const muxField: GroupField = {\n name: 'mux',\n label: 'Mux',\n type: 'group',\n admin: {\n disableListColumn: true,\n disableBulkEdit: true,\n disableListFilter: true,\n readOnly: true,\n condition: (data) => {\n return data.storage === 'mux'\n },\n },\n fields: [\n {\n name: 'preview',\n type: 'ui',\n admin: {\n condition: (data) => {\n return data.storage === 'mux'\n },\n disableListColumn: true,\n components: {\n Field: '@maas/payload-plugin-media-cloud/components#MuxPreview',\n },\n },\n },\n {\n name: 'status',\n label: 'Status',\n type: 'text',\n },\n {\n name: 'uploadId',\n label: 'Upload ID',\n type: 'text',\n },\n {\n name: 'assetId',\n label: 'Asset ID',\n type: 'text',\n },\n {\n name: 'playbackId',\n label: 'Playback ID',\n type: 'text',\n },\n {\n name: 'aspectRatio',\n label: 'Aspect Ratio',\n type: 'text',\n },\n {\n name: 'duration',\n label: 'Duration',\n type: 'number',\n },\n {\n name: 'tracks',\n label: 'Tracks',\n type: 'json',\n typescriptSchema: [\n ({ jsonSchema }) => ({\n ...jsonSchema,\n type: 'array',\n items: [\n {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['audio', 'video'],\n },\n id: {\n type: 'string',\n },\n duration: {\n type: 'number',\n },\n primary: {\n type: 'boolean',\n },\n max_channels: {\n type: 'number',\n },\n max_channel_layout: {\n type: 'string',\n },\n max_width: {\n type: 'number',\n },\n max_height: {\n type: 'number',\n },\n max_frame_rate: {\n type: 'number',\n },\n },\n required: [\n 'type',\n 'id',\n 'duration',\n 'primary',\n 'max_channels',\n 'max_channel_layout',\n 'max_width',\n 'max_height',\n 'max_frame_rate',\n ],\n },\n ],\n }),\n ],\n },\n {\n name: 'maxResolutionTier',\n label: 'Max Resolution Tier',\n type: 'text',\n },\n {\n name: 'videoQuality',\n label: 'Video Quality',\n type: 'text',\n },\n {\n name: 'staticRenditions',\n label: 'Static Renditions',\n type: 'json',\n typescriptSchema: [\n ({ jsonSchema }) => ({\n ...jsonSchema,\n type: 'object',\n properties: {\n files: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n },\n status: {\n type: 'string',\n },\n resolution: {\n type: 'string',\n },\n name: {\n type: 'string',\n },\n id: {\n type: 'string',\n },\n ext: {\n type: 'string',\n },\n width: {\n type: 'number',\n },\n height: {\n type: 'number',\n },\n filesize: {\n type: 'string',\n },\n bitrate: {\n type: 'number',\n },\n },\n },\n required: [\n 'type',\n 'status',\n 'resolution',\n 'name',\n 'id',\n 'ext',\n 'width',\n 'height',\n 'filesize',\n 'bitrate',\n ],\n },\n },\n required: ['files'],\n }),\n ],\n },\n ],\n}\n"],"mappings":";AAEA,MAAaA,WAAuB;CAClC,MAAM;CACN,OAAO;CACP,MAAM;CACN,OAAO;EACL,mBAAmB;EACnB,iBAAiB;EACjB,mBAAmB;EACnB,UAAU;EACV,YAAY,SAAS;AACnB,UAAO,KAAK,YAAY;;EAE3B;CACD,QAAQ;EACN;GACE,MAAM;GACN,MAAM;GACN,OAAO;IACL,YAAY,SAAS;AACnB,YAAO,KAAK,YAAY;;IAE1B,mBAAmB;IACnB,YAAY,EACV,OAAO,0DACR;IACF;GACF;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACN,kBAAkB,EACf,EAAE,kBAAkB;IACnB,GAAG;IACH,MAAM;IACN,OAAO,CACL;KACE,MAAM;KACN,YAAY;MACV,MAAM;OACJ,MAAM;OACN,MAAM,CAAC,SAAS,QAAQ;OACzB;MACD,IAAI,EACF,MAAM,UACP;MACD,UAAU,EACR,MAAM,UACP;MACD,SAAS,EACP,MAAM,WACP;MACD,cAAc,EACZ,MAAM,UACP;MACD,oBAAoB,EAClB,MAAM,UACP;MACD,WAAW,EACT,MAAM,UACP;MACD,YAAY,EACV,MAAM,UACP;MACD,gBAAgB,EACd,MAAM,UACP;MACF;KACD,UAAU;MACR;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACD;KACF,CACF;IACF,EACF;GACF;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACP;EACD;GACE,MAAM;GACN,OAAO;GACP,MAAM;GACN,kBAAkB,EACf,EAAE,kBAAkB;IACnB,GAAG;IACH,MAAM;IACN,YAAY,EACV,OAAO;KACL,MAAM;KACN,OAAO;MACL,MAAM;MACN,YAAY;OACV,MAAM,EACJ,MAAM,UACP;OACD,QAAQ,EACN,MAAM,UACP;OACD,YAAY,EACV,MAAM,UACP;OACD,MAAM,EACJ,MAAM,UACP;OACD,IAAI,EACF,MAAM,UACP;OACD,KAAK,EACH,MAAM,UACP;OACD,OAAO,EACL,MAAM,UACP;OACD,QAAQ,EACN,MAAM,UACP;OACD,UAAU,EACR,MAAM,UACP;OACD,SAAS,EACP,MAAM,UACP;OACF;MACF;KACD,UAAU;MACR;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACD;KACF,EACF;IACD,UAAU,CAAC,QAAQ;IACpB,EACF;GACF;EACF;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.mjs","names":["pathField: TextField"],"sources":["../../src/fields/path.ts"],"sourcesContent":["import type { TextField } from 'payload'\n\nexport const pathField: TextField = {\n type: 'text',\n name: 'path',\n unique: true,\n admin: {\n hidden: true,\n readOnly: true,\n },\n}\n"],"mappings":";AAEA,MAAaA,YAAuB;CAClC,MAAM;CACN,MAAM;CACN,QAAQ;CACR,OAAO;EACL,QAAQ;EACR,UAAU;EACX;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/fields/storage.ts
|
|
2
|
+
const storageField = {
|
|
3
|
+
name: "storage",
|
|
4
|
+
label: "Storage",
|
|
5
|
+
type: "select",
|
|
6
|
+
options: [{
|
|
7
|
+
label: "Mux",
|
|
8
|
+
value: "mux"
|
|
9
|
+
}, {
|
|
10
|
+
label: "S3",
|
|
11
|
+
value: "s3"
|
|
12
|
+
}],
|
|
13
|
+
admin: { readOnly: true }
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { storageField };
|
|
18
|
+
//# sourceMappingURL=storage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.mjs","names":["storageField: SelectField"],"sources":["../../src/fields/storage.ts"],"sourcesContent":["import type { SelectField } from 'payload'\n\nexport const storageField: SelectField = {\n name: 'storage',\n label: 'Storage',\n type: 'select',\n options: [\n {\n label: 'Mux',\n value: 'mux',\n },\n {\n label: 'S3',\n value: 's3',\n },\n ],\n admin: {\n readOnly: true,\n },\n}\n"],"mappings":";AAEA,MAAaA,eAA4B;CACvC,MAAM;CACN,OAAO;CACP,MAAM;CACN,SAAS,CACP;EACE,OAAO;EACP,OAAO;EACR,EACD;EACE,OAAO;EACP,OAAO;EACR,CACF;CACD,OAAO,EACL,UAAU,MACX;CACF"}
|