@seshuk/payload-storage-bunny
Version:
Payload storage adapter for Bunny.net
38 lines (37 loc) • 2.09 kB
JavaScript
import { posix } from 'node:path';
import { isImage } from './utils.js';
export const getAdminThumbnail = (collection, options)=>{
return ({ doc })=>{
const { adminThumbnail = true, storage, stream } = options.options;
let timestamp = '';
if (doc.updatedAt) {
timestamp = Date.parse(doc.updatedAt).toString();
} else if (doc.createdAt) {
timestamp = Date.parse(doc.createdAt).toString();
}
const collectionOptions = options.collections[collection.slug];
const usePayloadAccessControl = typeof collectionOptions === 'object' ? collectionOptions.disablePayloadAccessControl !== true : false;
if (doc.mimeType && isImage(doc.mimeType) && doc.filename && typeof doc.filename === 'string') {
const queryParams = new URLSearchParams();
if (timestamp) {
queryParams.append('t', timestamp);
}
if (adminThumbnail !== true && typeof adminThumbnail === 'object') {
if (adminThumbnail.queryParams) {
Object.entries(adminThumbnail.queryParams).forEach(([key, value])=>queryParams.append(key, String(value)));
}
if (adminThumbnail.appendTimestamp && timestamp && !queryParams.has('t')) {
queryParams.append('t', timestamp);
}
}
const baseUrl = usePayloadAccessControl ? `/api/${collection.slug}/file/${doc.filename}` : `https://${storage.hostname}/${posix.join(typeof doc.prefix === 'string' ? doc.prefix : '', doc.filename)}`;
const queryString = queryParams.toString();
return queryString ? `${baseUrl}?${queryString}` : baseUrl;
}
if (stream && doc.bunnyVideoId && typeof doc.bunnyVideoId === 'string') {
return usePayloadAccessControl ? `/api/${collection.slug}/file/bunny:stream:${doc.bunnyVideoId}:thumbnail.jpg` : `https://${stream.hostname}/${doc.bunnyVideoId}/thumbnail.jpg`;
}
return null;
};
};
//# sourceMappingURL=adminThumbnail.js.map