@maas/payload-plugin-media-cloud 0.0.31 → 0.0.33
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/handleUpload.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 +36 -187
- package/dist/collections/mediaCollection.mjs.map +1 -1
- package/dist/components/folderFileCard/folderFileCard.d.mts +13 -0
- package/dist/components/folderFileCard/folderFileCard.mjs +75 -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 +283 -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 +42 -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/muxPreview/muxPreview.mjs +65 -0
- 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/uploadManager/uploadManager.mjs +363 -0
- 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/muxCreateUploadHandler.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 +26 -7
- package/dist/hooks/useErrorHandler.mjs.map +1 -1
- package/dist/hooks/useMediaCloudEmitter.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} +104 -59
- package/dist/tus/stores/s3/s3Store.mjs.map +1 -0
- package/dist/tus/stores/s3/semaphore.mjs.map +1 -1
- 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 +11 -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 +0 -29
- 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 +0 -273
- 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
|
@@ -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":["GroupField","muxField","name","label","type","admin","disableListColumn","disableBulkEdit","disableListFilter","readOnly","condition","data","storage","fields","components","Field","typescriptSchema","jsonSchema","items","properties","enum","id","duration","primary","max_channels","max_channel_layout","max_width","max_height","max_frame_rate","required","files","status","resolution","ext","width","height","filesize","bitrate"],"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,MAAaC,WAAuB;CAClCC,MAAM;CACNC,OAAO;CACPC,MAAM;CACNC,OAAO;EACLC,mBAAmB;EACnBC,iBAAiB;EACjBC,mBAAmB;EACnBC,UAAU;EACVC,YAAYC,SAAS;AACnB,UAAOA,KAAKC,YAAY;;EAE3B;CACDC,QAAQ;EACN;GACEX,MAAM;GACNE,MAAM;GACNC,OAAO;IACLK,YAAYC,SAAS;AACnB,YAAOA,KAAKC,YAAY;;IAE1BN,mBAAmB;IACnBQ,YAAY,EACVC,OAAO,0DACT;IACF;GACD;EACD;GACEb,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACNY,kBAAkB,EACf,EAAEC,kBAAkB;IACnB,GAAGA;IACHb,MAAM;IACNc,OAAO,CACL;KACEd,MAAM;KACNe,YAAY;MACVf,MAAM;OACJA,MAAM;OACNgB,MAAM,CAAC,SAAS,QAAO;OACxB;MACDC,IAAI,EACFjB,MAAM,UACP;MACDkB,UAAU,EACRlB,MAAM,UACP;MACDmB,SAAS,EACPnB,MAAM,WACP;MACDoB,cAAc,EACZpB,MAAM,UACP;MACDqB,oBAAoB,EAClBrB,MAAM,UACP;MACDsB,WAAW,EACTtB,MAAM,UACP;MACDuB,YAAY,EACVvB,MAAM,UACP;MACDwB,gBAAgB,EACdxB,MAAM,UACR;MACD;KACDyB,UAAU;MACR;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MAAgB;KAEnB,CAAA;IAEJ,EAAC;GAEL;EACD;GACE3B,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACP;EACD;GACEF,MAAM;GACNC,OAAO;GACPC,MAAM;GACNY,kBAAkB,EACf,EAAEC,kBAAkB;IACnB,GAAGA;IACHb,MAAM;IACNe,YAAY,EACVW,OAAO;KACL1B,MAAM;KACNc,OAAO;MACLd,MAAM;MACNe,YAAY;OACVf,MAAM,EACJA,MAAM,UACP;OACD2B,QAAQ,EACN3B,MAAM,UACP;OACD4B,YAAY,EACV5B,MAAM,UACP;OACDF,MAAM,EACJE,MAAM,UACP;OACDiB,IAAI,EACFjB,MAAM,UACP;OACD6B,KAAK,EACH7B,MAAM,UACP;OACD8B,OAAO,EACL9B,MAAM,UACP;OACD+B,QAAQ,EACN/B,MAAM,UACP;OACDgC,UAAU,EACRhC,MAAM,UACP;OACDiC,SAAS,EACPjC,MAAM,UACR;OACF;MACD;KACDyB,UAAU;MACR;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MAAS;KAEb,EACD;IACDA,UAAU,CAAC,QAAO;IACnB,EAAC;GAEL;EAAA;CAEJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.mjs","names":["TextField","pathField","type","name","unique","admin","hidden","readOnly"],"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,MAAaC,YAAuB;CAClCC,MAAM;CACNC,MAAM;CACNC,QAAQ;CACRC,OAAO;EACLC,QAAQ;EACRC,UAAU;EACZ;CACD"}
|
|
@@ -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":["SelectField","storageField","name","label","type","options","value","admin","readOnly"],"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,MAAaC,eAA4B;CACvCC,MAAM;CACNC,OAAO;CACPC,MAAM;CACNC,SAAS,CACP;EACEF,OAAO;EACPG,OAAO;EACR,EACD;EACEH,OAAO;EACPG,OAAO;EACR,CACF;CACDC,OAAO,EACLC,UAAU,MACZ;CACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/fields/thumbnail.ts
|
|
2
|
+
const thumbnailField = {
|
|
3
|
+
type: "text",
|
|
4
|
+
name: "thumbnail",
|
|
5
|
+
admin: {
|
|
6
|
+
readOnly: true,
|
|
7
|
+
hidden: true,
|
|
8
|
+
disableListColumn: true,
|
|
9
|
+
disableListFilter: true,
|
|
10
|
+
disableBulkEdit: true,
|
|
11
|
+
disableGroupBy: true
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { thumbnailField };
|
|
17
|
+
//# sourceMappingURL=thumbnail.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thumbnail.mjs","names":["TextField","thumbnailField","type","name","admin","readOnly","hidden","disableListColumn","disableListFilter","disableBulkEdit","disableGroupBy"],"sources":["../../src/fields/thumbnail.ts"],"sourcesContent":["import { TextField } from 'payload'\n\nexport const thumbnailField: TextField = {\n type: 'text',\n name: 'thumbnail',\n admin: {\n readOnly: true,\n hidden: true,\n disableListColumn: true,\n disableListFilter: true,\n disableBulkEdit: true,\n disableGroupBy: true,\n },\n}\n"],"mappings":";AAEA,MAAaC,iBAA4B;CACvCC,MAAM;CACNC,MAAM;CACNC,OAAO;EACLC,UAAU;EACVC,QAAQ;EACRC,mBAAmB;EACnBC,mBAAmB;EACnBC,iBAAiB;EACjBC,gBAAgB;EAClB;CACD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/fields/width.ts
|
|
2
|
+
const widthField = {
|
|
3
|
+
name: "width",
|
|
4
|
+
label: "Width",
|
|
5
|
+
type: "text",
|
|
6
|
+
admin: {
|
|
7
|
+
readOnly: true,
|
|
8
|
+
hidden: false,
|
|
9
|
+
width: "50%"
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { widthField };
|
|
15
|
+
//# sourceMappingURL=width.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"width.mjs","names":["TextField","widthField","name","label","type","admin","readOnly","hidden","width"],"sources":["../../src/fields/width.ts"],"sourcesContent":["import type { TextField } from 'payload'\n\nexport const widthField: TextField = {\n name: 'width',\n label: 'Width',\n type: 'text',\n admin: {\n readOnly: true,\n hidden: false,\n width: '50%',\n },\n}\n"],"mappings":";AAEA,MAAaC,aAAwB;CACnCC,MAAM;CACNC,OAAO;CACPC,MAAM;CACNC,OAAO;EACLC,UAAU;EACVC,QAAQ;EACRC,OAAO;EACT;CACD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { UseMagicErrorReturn } from "@maas/error-handler";
|
|
2
2
|
|
|
3
3
|
//#region src/hooks/useErrorHandler.d.ts
|
|
4
|
-
declare function useErrorHandler(): Omit<UseMagicErrorReturn, '
|
|
4
|
+
declare function useErrorHandler(): Omit<UseMagicErrorReturn, 'MagicError'>;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { useErrorHandler };
|
|
7
7
|
//# sourceMappingURL=useErrorHandler.d.mts.map
|
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
import { useMagicError } from "../error-handler/dist/index.mjs";
|
|
2
|
+
import { c } from "react/compiler-runtime";
|
|
2
3
|
|
|
3
4
|
//#region src/hooks/useErrorHandler.ts
|
|
4
5
|
function useErrorHandler() {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
const $ = c(7);
|
|
7
|
+
let t0;
|
|
8
|
+
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
9
|
+
t0 = { prefix: "PLUGIN-MEDIA-CLOUD" };
|
|
10
|
+
$[0] = t0;
|
|
11
|
+
} else t0 = $[0];
|
|
12
|
+
const magicError = useMagicError(t0);
|
|
13
|
+
const { log, logError, throwError, logWarning } = magicError;
|
|
14
|
+
let t1;
|
|
15
|
+
if ($[1] !== log || $[2] !== logError || $[3] !== logWarning || $[4] !== magicError.assert || $[5] !== throwError) {
|
|
16
|
+
t1 = {
|
|
17
|
+
log,
|
|
18
|
+
logError,
|
|
19
|
+
throwError,
|
|
20
|
+
logWarning,
|
|
21
|
+
assert: magicError.assert
|
|
22
|
+
};
|
|
23
|
+
$[1] = log;
|
|
24
|
+
$[2] = logError;
|
|
25
|
+
$[3] = logWarning;
|
|
26
|
+
$[4] = magicError.assert;
|
|
27
|
+
$[5] = throwError;
|
|
28
|
+
$[6] = t1;
|
|
29
|
+
} else t1 = $[6];
|
|
30
|
+
return t1;
|
|
12
31
|
}
|
|
13
32
|
|
|
14
33
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useErrorHandler.mjs","names":[],"sources":["../../src/hooks/useErrorHandler.ts"],"sourcesContent":["import { useMagicError, type UseMagicErrorReturn } from '@maas/error-handler'\n\nexport function useErrorHandler(): Omit
|
|
1
|
+
{"version":3,"file":"useErrorHandler.mjs","names":["useMagicError","UseMagicErrorReturn","useErrorHandler","$","_c","t0","Symbol","for","prefix","magicError","log","logError","throwError","logWarning","t1","assert"],"sources":["../../src/hooks/useErrorHandler.ts"],"sourcesContent":["import { useMagicError, type UseMagicErrorReturn } from '@maas/error-handler'\n\nexport function useErrorHandler(): Omit<UseMagicErrorReturn, 'MagicError'> {\n const magicError: UseMagicErrorReturn = useMagicError({\n prefix: 'PLUGIN-MEDIA-CLOUD',\n })\n\n const { log, logError, throwError, logWarning } = magicError\n\n return {\n log,\n logError,\n throwError,\n logWarning,\n assert: magicError.assert,\n }\n}\n"],"mappings":";;;;AAEA,SAAOE,kBAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAG,OAAAC,IAAA,4BAAA,EAAA;AACiDF,OAAA,EAAAG,QAC5C,sBACT;AAAAL,IAAA,KAAAE;OAAAA,MAAAF,EAAA;CAFD,MAAAM,aAAwCT,cAAcK,GAEpD;CAEF,MAAA,EAAAK,KAAAC,UAAAC,YAAAC,eAAkDJ;CAAU,IAAAK;AAAA,KAAAX,EAAA,OAAAO,OAAAP,EAAA,OAAAQ,YAAAR,EAAA,OAAAU,cAAAV,EAAA,OAAAM,WAAAM,UAAAZ,EAAA,OAAAS,YAAA;AAErDE,OAAA;GAAAJ;GAAAC;GAAAC;GAAAC;GAAAE,QAKGN,WAAUM;GACnB;AAAAZ,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;AAAAR,IAAA,KAAAU;AAAAV,IAAA,KAAAM,WAAAM;AAAAZ,IAAA,KAAAS;AAAAT,IAAA,KAAAW;OAAAA,MAAAX,EAAA;AAAA,QANMW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaCloudEmitter.mjs","names":[],"sources":["../../src/hooks/useMediaCloudEmitter.ts"],"sourcesContent":["import mitt from 'mitt'\nimport type { MediaCloudEmitterEvents } from '../types'\n\nconst emitter = mitt<MediaCloudEmitterEvents>()\n\n/**\n * Hook to access the global event emitter for upload management\n * @returns An object with emitter methods (on, off, emit)\n */\nfunction useMediaCloudEmitter() {\n return {\n on: emitter.on,\n off: emitter.off,\n emit: emitter.emit,\n }\n}\n\nexport { useMediaCloudEmitter }\n"],"mappings":";;;AAGA,
|
|
1
|
+
{"version":3,"file":"useMediaCloudEmitter.mjs","names":["mitt","MediaCloudEmitterEvents","emitter","useMediaCloudEmitter","on","off","emit"],"sources":["../../src/hooks/useMediaCloudEmitter.ts"],"sourcesContent":["import mitt from 'mitt'\nimport type { MediaCloudEmitterEvents } from '../types'\n\nconst emitter = mitt<MediaCloudEmitterEvents>()\n\n/**\n * Hook to access the global event emitter for upload management\n * @returns An object with emitter methods (on, off, emit)\n */\nfunction useMediaCloudEmitter() {\n return {\n on: emitter.on,\n off: emitter.off,\n emit: emitter.emit,\n }\n}\n\nexport { useMediaCloudEmitter }\n"],"mappings":";;;AAGA,MAAME,UAAUF,MAA+B;;;;;AAM/C,SAASG,uBAAuB;AAC9B,QAAO;EACLC,IAAIF,QAAQE;EACZC,KAAKH,QAAQG;EACbC,MAAMJ,QAAQI;EACf"}
|
package/dist/plugin.d.mts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { MediaCloudPluginOptions } from "./types/index.mjs";
|
|
2
|
+
import { S3Store } from "./tus/stores/s3/s3Store.mjs";
|
|
2
3
|
import { Config } from "payload";
|
|
3
4
|
|
|
4
5
|
//#region src/plugin.d.ts
|
|
5
|
-
|
|
6
|
+
declare let s3Store: S3Store | null;
|
|
6
7
|
/**
|
|
7
8
|
* Media Cloud Plugin for Payload CMS
|
|
8
|
-
* @param
|
|
9
|
+
* @param options Configuration options
|
|
9
10
|
* @returns Payload config function
|
|
10
11
|
*/
|
|
11
|
-
declare function mediaCloudPlugin(
|
|
12
|
+
declare function mediaCloudPlugin(options: MediaCloudPluginOptions): (config: Config) => Config;
|
|
12
13
|
//#endregion
|
|
13
|
-
export { mediaCloudPlugin };
|
|
14
|
+
export { mediaCloudPlugin, s3Store };
|
|
14
15
|
//# sourceMappingURL=plugin.d.mts.map
|
package/dist/plugin.mjs
CHANGED
|
@@ -3,73 +3,92 @@ import { useErrorHandler } from "./hooks/useErrorHandler.mjs";
|
|
|
3
3
|
import { getStorageAdapter } from "./adapter/storageAdapter.mjs";
|
|
4
4
|
import { getMediaCollection } from "./collections/mediaCollection.mjs";
|
|
5
5
|
import { createS3Store } from "./tus/stores/s3/index.mjs";
|
|
6
|
-
import { createMuxClient, createMuxEndpoints
|
|
6
|
+
import { createMuxClient, createMuxEndpoints } from "./utils/mux.mjs";
|
|
7
|
+
import { createFileEndpoints } from "./utils/file.mjs";
|
|
7
8
|
import { createTusEndpoints, createTusServer } from "./utils/tus.mjs";
|
|
9
|
+
import { defaultOptions } from "./utils/defaultOptions.mjs";
|
|
10
|
+
import { defu } from "defu";
|
|
8
11
|
import { cloudStoragePlugin } from "@payloadcms/plugin-cloud-storage";
|
|
9
12
|
import { initClientUploads } from "@payloadcms/plugin-cloud-storage/utilities";
|
|
10
13
|
|
|
11
14
|
//#region src/plugin.ts
|
|
12
15
|
const { logError } = useErrorHandler();
|
|
13
16
|
let muxClient = null;
|
|
17
|
+
let s3Store = null;
|
|
18
|
+
let tusServer = null;
|
|
14
19
|
/**
|
|
15
20
|
* Media Cloud Plugin for Payload CMS
|
|
16
|
-
* @param
|
|
21
|
+
* @param options Configuration options
|
|
17
22
|
* @returns Payload config function
|
|
18
23
|
*/
|
|
19
|
-
function mediaCloudPlugin(
|
|
24
|
+
function mediaCloudPlugin(options) {
|
|
20
25
|
return function(config) {
|
|
21
|
-
if (!
|
|
26
|
+
if (!options) {
|
|
22
27
|
logError(MediaCloudErrors.PLUGIN_NOT_CONFIGURED.message);
|
|
23
28
|
return config;
|
|
24
29
|
}
|
|
30
|
+
const pluginOptions = defu(options, defaultOptions);
|
|
25
31
|
if (pluginOptions.enabled === false) return config;
|
|
26
32
|
/**
|
|
27
33
|
* Helper function to get or create Mux client instance
|
|
28
34
|
* @returns Mux client instance
|
|
29
35
|
*/
|
|
30
36
|
function getMuxClient() {
|
|
31
|
-
|
|
32
|
-
return createMuxClient(pluginOptions.mux);
|
|
37
|
+
return muxClient ?? createMuxClient(pluginOptions.mux);
|
|
33
38
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Helper function to get or create S3 store instance
|
|
41
|
+
* @returns S3 store instance
|
|
42
|
+
*/
|
|
43
|
+
function getS3Store() {
|
|
44
|
+
return s3Store ?? createS3Store(pluginOptions.s3);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Helper function to get or create tus server instance
|
|
48
|
+
* @returns TUS server instance
|
|
49
|
+
*/
|
|
50
|
+
function getTusServer() {
|
|
51
|
+
return tusServer ?? createTusServer({
|
|
52
|
+
getS3Store,
|
|
53
|
+
pluginOptions
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (pluginOptions.mux) muxClient = getMuxClient();
|
|
57
|
+
if (pluginOptions.s3) {
|
|
58
|
+
s3Store = getS3Store();
|
|
59
|
+
tusServer = getTusServer();
|
|
40
60
|
}
|
|
41
|
-
const s3Store = createS3Store(pluginOptions.s3);
|
|
42
|
-
const tusServer = createTusServer({
|
|
43
|
-
s3Store,
|
|
44
|
-
pluginOptions
|
|
45
|
-
});
|
|
46
61
|
const baseCollection = config.collections?.find(({ slug }) => slug === pluginOptions.collection);
|
|
62
|
+
const { view, folders } = pluginOptions;
|
|
47
63
|
const mediaCollection = getMediaCollection({
|
|
48
|
-
|
|
49
|
-
|
|
64
|
+
baseCollection,
|
|
65
|
+
view,
|
|
66
|
+
folders
|
|
50
67
|
});
|
|
51
68
|
if (baseCollection) config = {
|
|
52
69
|
...config,
|
|
53
|
-
collections: config.collections?.filter(({ slug }) => slug !== baseCollection?.slug)
|
|
70
|
+
collections: config.collections?.filter(({ slug }) => slug !== baseCollection?.slug) ?? []
|
|
54
71
|
};
|
|
55
72
|
initClientUploads({
|
|
73
|
+
config,
|
|
74
|
+
enabled: true,
|
|
56
75
|
clientHandler: "@maas/payload-plugin-media-cloud/components#UploadHandler",
|
|
57
|
-
collections: {
|
|
76
|
+
collections: { [mediaCollection.slug]: {
|
|
58
77
|
clientUploads: true,
|
|
59
|
-
disableLocalStorage: true
|
|
78
|
+
disableLocalStorage: true,
|
|
79
|
+
prefix: pluginOptions.s3?.prefix ?? ""
|
|
60
80
|
} },
|
|
61
|
-
|
|
62
|
-
enabled: true,
|
|
81
|
+
extraClientHandlerProps: () => ({ pluginOptions }),
|
|
63
82
|
serverHandler: () => {
|
|
64
83
|
return Response.json({ message: "Server handler is not implemented" }, { status: 501 });
|
|
65
84
|
},
|
|
66
85
|
serverHandlerPath: "/media-cloud/upload"
|
|
67
86
|
});
|
|
68
|
-
const cloudStorageConfig = { collections: {
|
|
87
|
+
const cloudStorageConfig = { collections: { [mediaCollection.slug]: {
|
|
69
88
|
adapter: getStorageAdapter({
|
|
70
89
|
getMuxClient,
|
|
71
90
|
pluginOptions,
|
|
72
|
-
|
|
91
|
+
getS3Store
|
|
73
92
|
}),
|
|
74
93
|
clientUploads: true,
|
|
75
94
|
disableLocalStorage: true
|
|
@@ -87,12 +106,17 @@ function mediaCloudPlugin(pluginOptions) {
|
|
|
87
106
|
endpoints: [
|
|
88
107
|
...config.endpoints ?? [],
|
|
89
108
|
...createTusEndpoints({
|
|
90
|
-
|
|
91
|
-
|
|
109
|
+
getTusServer,
|
|
110
|
+
getS3Store,
|
|
111
|
+
pluginOptions
|
|
92
112
|
}),
|
|
93
113
|
...createMuxEndpoints({
|
|
94
114
|
getMuxClient,
|
|
95
115
|
pluginOptions
|
|
116
|
+
}),
|
|
117
|
+
...createFileEndpoints({
|
|
118
|
+
getS3Store,
|
|
119
|
+
pluginOptions
|
|
96
120
|
})
|
|
97
121
|
]
|
|
98
122
|
};
|
|
@@ -101,5 +125,5 @@ function mediaCloudPlugin(pluginOptions) {
|
|
|
101
125
|
}
|
|
102
126
|
|
|
103
127
|
//#endregion
|
|
104
|
-
export { mediaCloudPlugin };
|
|
128
|
+
export { mediaCloudPlugin, s3Store };
|
|
105
129
|
//# sourceMappingURL=plugin.mjs.map
|
package/dist/plugin.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.mjs","names":["
|
|
1
|
+
{"version":3,"file":"plugin.mjs","names":["Mux","defu","cloudStoragePlugin","initClientUploads","MediaCloudErrors","getStorageAdapter","getMediaCollection","useErrorHandler","createS3Store","createMuxClient","createMuxEndpoints","createTusEndpoints","createTusServer","createFileEndpoints","defaultOptions","Config","Server","MediaCloudPluginOptions","S3Store","logError","muxClient","s3Store","tusServer","mediaCloudPlugin","options","config","PLUGIN_NOT_CONFIGURED","message","pluginOptions","enabled","getMuxClient","mux","getS3Store","s3","getTusServer","baseCollection","collections","find","slug","collection","view","folders","mediaCollection","filter","clientHandler","clientUploads","disableLocalStorage","prefix","extraClientHandlerProps","serverHandler","Response","json","status","serverHandlerPath","cloudStorageConfig","adapter","mergedConfig","admin","components","providers","endpoints"],"sources":["../src/plugin.ts"],"sourcesContent":["import Mux from '@mux/mux-node'\nimport { defu } from 'defu'\nimport { cloudStoragePlugin } from '@payloadcms/plugin-cloud-storage'\nimport { initClientUploads } from '@payloadcms/plugin-cloud-storage/utilities'\n\nimport { MediaCloudErrors } from './types/errors'\nimport { getStorageAdapter } from './adapter/storageAdapter'\nimport { getMediaCollection } from './collections/mediaCollection'\nimport { useErrorHandler } from './hooks/useErrorHandler'\nimport { createS3Store } from './tus/stores/s3'\nimport { createMuxClient, createMuxEndpoints } from './utils/mux'\nimport { createTusEndpoints, createTusServer } from './utils/tus'\nimport { createFileEndpoints } from './utils/file'\nimport { defaultOptions } from './utils/defaultOptions'\n\nimport type { Config } from 'payload'\nimport type { Server } from '@tus/server'\nimport type { MediaCloudPluginOptions } from './types'\nimport type { S3Store } from './tus/stores/s3/s3Store'\n\nconst { logError } = useErrorHandler()\n\nlet muxClient: Mux | null = null\nlet s3Store: S3Store | null = null\nlet tusServer: Server | null = null\n\n/**\n * Media Cloud Plugin for Payload CMS\n * @param options Configuration options\n * @returns Payload config function\n */\nexport function mediaCloudPlugin(options: MediaCloudPluginOptions) {\n return function (config: Config): Config {\n // Check if config is invalid or disabled\n if (!options) {\n logError(MediaCloudErrors.PLUGIN_NOT_CONFIGURED.message)\n return config\n }\n\n // Merge user options with default options\n const pluginOptions = defu(options, defaultOptions)\n\n // Check if the plugin is disabled\n if (pluginOptions.enabled === false) {\n return config\n }\n\n /**\n * Helper function to get or create Mux client instance\n * @returns Mux client instance\n */\n function getMuxClient(): Mux {\n return muxClient ?? createMuxClient(pluginOptions.mux)\n }\n\n /**\n * Helper function to get or create S3 store instance\n * @returns S3 store instance\n */\n function getS3Store(): S3Store {\n return s3Store ?? createS3Store(pluginOptions.s3)\n }\n\n /**\n * Helper function to get or create tus server instance\n * @returns TUS server instance\n */\n function getTusServer(): Server {\n return tusServer ?? createTusServer({ getS3Store, pluginOptions })\n }\n\n // Initialize Mux client if configuration is provided\n if (pluginOptions.mux) {\n muxClient = getMuxClient()\n }\n\n // Initialize S3 store and TUS server if configuration is provided\n if (pluginOptions.s3) {\n s3Store = getS3Store()\n tusServer = getTusServer()\n }\n\n // Check if base collection exists\n const baseCollection = config.collections?.find(\n ({ slug }) => slug === pluginOptions.collection\n )\n\n const { view, folders } = pluginOptions\n\n const mediaCollection = getMediaCollection({\n baseCollection,\n view,\n folders,\n })\n\n // Remove base collection\n // It’ll be replaced with the merged media collection\n if (baseCollection) {\n config = {\n ...config,\n collections:\n config.collections?.filter(\n ({ slug }) => slug !== baseCollection?.slug\n ) ?? [],\n }\n }\n\n initClientUploads({\n config,\n enabled: true,\n clientHandler:\n '@maas/payload-plugin-media-cloud/components#UploadHandler',\n collections: {\n [mediaCollection.slug]: {\n clientUploads: true,\n disableLocalStorage: true,\n prefix: pluginOptions.s3?.prefix ?? '',\n },\n },\n extraClientHandlerProps: () => ({\n pluginOptions,\n }),\n serverHandler: () => {\n return Response.json(\n { message: 'Server handler is not implemented' },\n { status: 501 }\n )\n },\n serverHandlerPath: '/media-cloud/upload',\n })\n\n const cloudStorageConfig = {\n collections: {\n [mediaCollection.slug]: {\n adapter: getStorageAdapter({\n getMuxClient,\n pluginOptions,\n getS3Store,\n }),\n clientUploads: true,\n disableLocalStorage: true,\n },\n },\n }\n\n const mergedConfig: Config = {\n ...config,\n admin: {\n ...config.admin,\n components: {\n ...config.admin?.components,\n providers: [\n ...(config.admin?.components?.providers ?? []),\n '@maas/payload-plugin-media-cloud/components#UploadManagerProvider',\n ],\n },\n },\n collections: [...(config.collections ?? []), mediaCollection],\n endpoints: [\n ...(config.endpoints ?? []),\n ...createTusEndpoints({ getTusServer, getS3Store, pluginOptions }),\n ...createMuxEndpoints({ getMuxClient, pluginOptions }),\n ...createFileEndpoints({ getS3Store, pluginOptions }),\n ],\n }\n\n return cloudStoragePlugin(cloudStorageConfig)(mergedConfig)\n }\n}\n\nexport { s3Store }\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,EAAEmB,aAAaZ,iBAAiB;AAEtC,IAAIa,YAAwB;AAC5B,IAAIC,UAA0B;AAC9B,IAAIC,YAA2B;;;;;;AAO/B,SAAgBC,iBAAiBC,SAAkC;AACjE,QAAO,SAAUC,QAAwB;AAEvC,MAAI,CAACD,SAAS;AACZL,YAASf,iBAAiBsB,sBAAsBC,QAAQ;AACxD,UAAOF;;EAIT,MAAMG,gBAAgB3B,KAAKuB,SAASV,eAAe;AAGnD,MAAIc,cAAcC,YAAY,MAC5B,QAAOJ;;;;;EAOT,SAASK,eAAoB;AAC3B,UAAOV,aAAaX,gBAAgBmB,cAAcG,IAAI;;;;;;EAOxD,SAASC,aAAsB;AAC7B,UAAOX,WAAWb,cAAcoB,cAAcK,GAAG;;;;;;EAOnD,SAASC,eAAuB;AAC9B,UAAOZ,aAAaV,gBAAgB;IAAEoB;IAAYJ;IAAe,CAAC;;AAIpE,MAAIA,cAAcG,IAChBX,aAAYU,cAAc;AAI5B,MAAIF,cAAcK,IAAI;AACpBZ,aAAUW,YAAY;AACtBV,eAAYY,cAAc;;EAI5B,MAAMC,iBAAiBV,OAAOW,aAAaC,MACxC,EAAEC,WAAWA,SAASV,cAAcW,WACtC;EAED,MAAM,EAAEC,MAAMC,YAAYb;EAE1B,MAAMc,kBAAkBpC,mBAAmB;GACzC6B;GACAK;GACAC;GACD,CAAC;AAIF,MAAIN,eACFV,UAAS;GACP,GAAGA;GACHW,aACEX,OAAOW,aAAaO,QACjB,EAAEL,WAAWA,SAASH,gBAAgBG,KACxC,IAAI,EAAA;GACR;AAGHnC,oBAAkB;GAChBsB;GACAI,SAAS;GACTe,eACE;GACFR,aAAa,GACVM,gBAAgBJ,OAAO;IACtBO,eAAe;IACfC,qBAAqB;IACrBC,QAAQnB,cAAcK,IAAIc,UAAU;IACtC,EACD;GACDC,gCAAgC,EAC9BpB,eACD;GACDqB,qBAAqB;AACnB,WAAOC,SAASC,KACd,EAAExB,SAAS,qCAAqC,EAChD,EAAEyB,QAAQ,KACZ,CAAC;;GAEHC,mBAAmB;GACpB,CAAC;EAEF,MAAMC,qBAAqB,EACzBlB,aAAa,GACVM,gBAAgBJ,OAAO;GACtBiB,SAASlD,kBAAkB;IACzByB;IACAF;IACAI;IACD,CAAC;GACFa,eAAe;GACfC,qBAAqB;GACvB,EACF,EACD;EAED,MAAMU,eAAuB;GAC3B,GAAG/B;GACHgC,OAAO;IACL,GAAGhC,OAAOgC;IACVC,YAAY;KACV,GAAGjC,OAAOgC,OAAOC;KACjBC,WAAW,CACT,GAAIlC,OAAOgC,OAAOC,YAAYC,aAAa,EAAE,EAC7C,oEAAmE;KAEvE;IACD;GACDvB,aAAa,CAAC,GAAIX,OAAOW,eAAe,EAAE,EAAGM,gBAAgB;GAC7DkB,WAAW;IACT,GAAInC,OAAOmC,aAAa,EAAE;IAC1B,GAAGjD,mBAAmB;KAAEuB;KAAcF;KAAYJ;KAAe,CAAC;IAClE,GAAGlB,mBAAmB;KAAEoB;KAAcF;KAAe,CAAC;IACtD,GAAGf,oBAAoB;KAAEmB;KAAYJ;KAAe,CAAC;IAAA;GAExD;AAED,SAAO1B,mBAAmBoD,mBAAmB,CAACE,aAAa"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { S3MetadataManager } from "./metadataManager.mjs";
|
|
1
2
|
import { S3 } from "@aws-sdk/client-s3";
|
|
2
3
|
|
|
3
|
-
//#region src/tus/stores/s3/
|
|
4
|
+
//#region src/tus/stores/s3/expirationManager.d.ts
|
|
4
5
|
type GetExpirationDateArgs = {
|
|
5
6
|
createdAt: string;
|
|
6
7
|
};
|
|
@@ -10,7 +11,7 @@ declare class S3ExpirationManager {
|
|
|
10
11
|
private expirationPeriodInMilliseconds;
|
|
11
12
|
private generateInfoKey;
|
|
12
13
|
private generatePartKey;
|
|
13
|
-
constructor(client: S3, bucket: string, expirationPeriodInMilliseconds: number, generateInfoKey:
|
|
14
|
+
constructor(client: S3, bucket: string, expirationPeriodInMilliseconds: number, generateInfoKey: S3MetadataManager['generateInfoKey'], generatePartKey: S3MetadataManager['generatePartKey']);
|
|
14
15
|
/**
|
|
15
16
|
* Calculates the expiration date for a file based on a creation date
|
|
16
17
|
* @param args - The function arguments
|
|
@@ -33,4 +34,4 @@ declare class S3ExpirationManager {
|
|
|
33
34
|
}
|
|
34
35
|
//#endregion
|
|
35
36
|
export { S3ExpirationManager };
|
|
36
|
-
//# sourceMappingURL=
|
|
37
|
+
//# sourceMappingURL=expirationManager.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region src/tus/stores/s3/
|
|
1
|
+
//#region src/tus/stores/s3/expirationManager.ts
|
|
2
2
|
var S3ExpirationManager = class {
|
|
3
3
|
constructor(client, bucket, expirationPeriodInMilliseconds, generateInfoKey, generatePartKey) {
|
|
4
4
|
this.client = client;
|
|
@@ -48,7 +48,10 @@ var S3ExpirationManager = class {
|
|
|
48
48
|
return initiatedDate && (/* @__PURE__ */ new Date()).getTime() > this.getExpirationDate({ createdAt: initiatedDate.toISOString() }).getTime();
|
|
49
49
|
}) || [];
|
|
50
50
|
const objectsToDelete = expiredUploads.reduce((all, expiredUpload) => {
|
|
51
|
-
all.push({ Key: this.generateInfoKey(expiredUpload.Key) }, { Key: this.generatePartKey(
|
|
51
|
+
all.push({ Key: this.generateInfoKey({ id: expiredUpload.Key }) }, { Key: this.generatePartKey({
|
|
52
|
+
id: expiredUpload.Key,
|
|
53
|
+
isIncomplete: true
|
|
54
|
+
}) });
|
|
52
55
|
return all;
|
|
53
56
|
}, []);
|
|
54
57
|
const deletions = [];
|
|
@@ -73,4 +76,4 @@ var S3ExpirationManager = class {
|
|
|
73
76
|
|
|
74
77
|
//#endregion
|
|
75
78
|
export { S3ExpirationManager };
|
|
76
|
-
//# sourceMappingURL=
|
|
79
|
+
//# sourceMappingURL=expirationManager.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expirationManager.mjs","names":["AWS","S3","S3MetadataManager","GetExpirationDateArgs","createdAt","S3ExpirationManager","constructor","client","bucket","expirationPeriodInMilliseconds","generateInfoKey","generatePartKey","getExpirationDate","args","Date","date","getTime","getExpiration","deleteExpired","Promise","keyMarker","undefined","uploadIdMarker","isTruncated","deleted","listResponse","ListMultipartUploadsCommandOutput","listMultipartUploads","Bucket","KeyMarker","UploadIdMarker","expiredUploads","Uploads","filter","multiPartUpload","MultipartUpload","initiatedDate","Initiated","toISOString","objectsToDelete","reduce","all","Key","expiredUpload","push","id","isIncomplete","deletions","DeleteObjectsCommandOutput","length","deleteObjects","Delete","Objects","abortions","map","abortMultipartUpload","UploadId","IsTruncated","NextKeyMarker","NextUploadIdMarker"],"sources":["../../../../src/tus/stores/s3/expirationManager.ts"],"sourcesContent":["import type AWS from '@aws-sdk/client-s3'\nimport type { S3 } from '@aws-sdk/client-s3'\nimport type { S3MetadataManager } from './metadataManager'\n\ntype GetExpirationDateArgs = {\n createdAt: string\n}\n\nexport class S3ExpirationManager {\n constructor(\n private client: S3,\n private bucket: string,\n private expirationPeriodInMilliseconds: number,\n private generateInfoKey: S3MetadataManager['generateInfoKey'],\n private generatePartKey: S3MetadataManager['generatePartKey']\n ) {}\n\n /**\n * Calculates the expiration date for a file based on a creation date\n * @param args - The function arguments\n * @param args.createdAt - The creation date as a string\n * @returns The expiration date\n */\n getExpirationDate(args: GetExpirationDateArgs): Date {\n const { createdAt } = args\n const date = new Date(createdAt)\n return new Date(date.getTime() + this.expirationPeriodInMilliseconds)\n }\n\n /**\n * Gets the expiration period in milliseconds\n * @returns The expiration period in milliseconds\n */\n getExpiration(): number {\n return this.expirationPeriodInMilliseconds\n }\n\n /**\n * Deletes expired incomplete uploads based on their initialization date.\n * Returns the number of deleted uploads.\n * @param args - The function arguments (empty object)\n * @returns Promise that resolves to the number of deleted uploads\n */\n async deleteExpired(): Promise<number> {\n // No arguments to destructure\n if (this.getExpiration() === 0) {\n return 0\n }\n\n let keyMarker: string | undefined = undefined\n let uploadIdMarker: string | undefined = undefined\n let isTruncated = true\n let deleted = 0\n\n while (isTruncated) {\n const listResponse: AWS.ListMultipartUploadsCommandOutput =\n await this.client.listMultipartUploads({\n Bucket: this.bucket,\n KeyMarker: keyMarker,\n UploadIdMarker: uploadIdMarker,\n })\n\n const expiredUploads =\n listResponse.Uploads?.filter((multiPartUpload: AWS.MultipartUpload) => {\n const initiatedDate = multiPartUpload.Initiated\n return (\n initiatedDate &&\n new Date().getTime() >\n this.getExpirationDate({\n createdAt: initiatedDate.toISOString(),\n }).getTime()\n )\n }) || []\n\n const objectsToDelete = expiredUploads.reduce(\n (all: { Key: string }[], expiredUpload: AWS.MultipartUpload) => {\n all.push(\n {\n Key: this.generateInfoKey({ id: expiredUpload.Key as string }),\n },\n {\n Key: this.generatePartKey({\n id: expiredUpload.Key as string,\n isIncomplete: true,\n }),\n }\n )\n return all\n },\n [] as { Key: string }[]\n )\n\n const deletions: Promise<AWS.DeleteObjectsCommandOutput>[] = []\n\n if (objectsToDelete.length > 0) {\n deletions.push(\n this.client.deleteObjects({\n Bucket: this.bucket,\n Delete: {\n Objects: objectsToDelete,\n },\n })\n )\n }\n\n const abortions = expiredUploads.map(\n (expiredUpload: AWS.MultipartUpload) =>\n this.client.abortMultipartUpload({\n Bucket: this.bucket,\n Key: expiredUpload.Key,\n UploadId: expiredUpload.UploadId,\n })\n )\n\n await Promise.all([...deletions, ...abortions])\n\n deleted += expiredUploads.length\n\n isTruncated = listResponse.IsTruncated || false\n keyMarker = listResponse.NextKeyMarker\n uploadIdMarker = listResponse.NextUploadIdMarker\n }\n\n return deleted\n }\n}\n"],"mappings":";AAQA,IAAaK,sBAAb,MAAiC;CAC/BC,YACE,AAAQC,QACR,AAAQC,QACR,AAAQC,gCACR,AAAQC,iBACR,AAAQC,iBACR;EALQJ;EACAC;EACAC;EACAC;EACAC;;;;;;;;CASVC,kBAAkBC,MAAmC;EACnD,MAAM,EAAET,cAAcS;EACtB,MAAME,OAAO,IAAID,KAAKV,UAAU;AAChC,SAAO,IAAIU,KAAKC,KAAKC,SAAS,GAAG,KAAKP,+BAA+B;;;;;;CAOvEQ,gBAAwB;AACtB,SAAO,KAAKR;;;;;;;;CASd,MAAMS,gBAAiC;AAErC,MAAI,KAAKD,eAAe,KAAK,EAC3B,QAAO;EAGT,IAAIG,YAAgCC;EACpC,IAAIC,iBAAqCD;EACzC,IAAIE,cAAc;EAClB,IAAIC,UAAU;AAEd,SAAOD,aAAa;GAClB,MAAME,eACJ,MAAM,KAAKlB,OAAOoB,qBAAqB;IACrCC,QAAQ,KAAKpB;IACbqB,WAAWT;IACXU,gBAAgBR;IACjB,CAAC;GAEJ,MAAMS,iBACJN,aAAaO,SAASC,QAAQC,oBAAyC;IACrE,MAAME,gBAAgBF,gBAAgBG;AACtC,WACED,kCACA,IAAItB,MAAM,EAACE,SAAS,GAClB,KAAKJ,kBAAkB,EACrBR,WAAWgC,cAAcE,aAAY,EACtC,CAAC,CAACtB,SAAS;KAEhB,IAAI,EAAE;GAEV,MAAMuB,kBAAkBR,eAAeS,QACpCC,KAAwBE,kBAAuC;AAC9DF,QAAIG,KACF,EACEF,KAAK,KAAKhC,gBAAgB,EAAEmC,IAAIF,cAAcD,KAAe,CAAA,EAC9D,EACD,EACEA,KAAK,KAAK/B,gBAAgB;KACxBkC,IAAIF,cAAcD;KAClBI,cAAc;KACf,CAAA,EAEL,CAAC;AACD,WAAOL;MAET,EAAE,CACH;GAED,MAAMM,YAAuD,EAAE;AAE/D,OAAIR,gBAAgBU,SAAS,EAC3BF,WAAUH,KACR,KAAKrC,OAAO2C,cAAc;IACxBtB,QAAQ,KAAKpB;IACb2C,QAAQ,EACNC,SAASb,iBACX;IACD,CACH,CAAC;GAGH,MAAMc,YAAYtB,eAAeuB,KAC9BX,kBACC,KAAKpC,OAAOgD,qBAAqB;IAC/B3B,QAAQ,KAAKpB;IACbkC,KAAKC,cAAcD;IACnBc,UAAUb,cAAca;IACzB,CACL,CAAC;AAED,SAAMrC,QAAQsB,IAAI,CAAC,GAAGM,WAAW,GAAGM,UAAU,CAAC;AAE/C7B,cAAWO,eAAekB;AAE1B1B,iBAAcE,aAAagC,eAAe;AAC1CrC,eAAYK,aAAaiC;AACzBpC,oBAAiBG,aAAakC;;AAGhC,SAAOnC"}
|