import { mongooseAdapter } from '@payloadcms/db-mongodb' import sharp from 'sharp' import path from 'path' import { buildConfig, PayloadRequest } from 'payload' import { fileURLToPath } from 'url' import { Logo } from '@/components/Logo' import { Icon } from '@/components/Icon' import { Categories } from './collections/Categories' import { Media } from './collections/Media' import { Pages } from './collections/Pages' import { Posts } from './collections/Posts' import { Users } from './collections/Users' import { Footer } from './Footer/config' import { Header } from './Header/config' import { plugins } from './plugins' import { defaultLexical } from '@/fields/defaultLexical' import { getServerSideURL } from './utilities/getURL' const filename = fileURLToPath(import.meta.url) const dirname = path.dirname(filename) export default buildConfig({ admin: { components: { beforeLogin: ['@/components/BeforeLogin'], beforeDashboard: ['@/components/BeforeDashboard'], graphics: { Logo, Icon, }, }, importMap: { baseDir: path.resolve(dirname), }, user: Users.slug, livePreview: { url: ({ data, collectionConfig, globalConfig }) => { const baseURL = getServerSideURL() const secret = process.env.PREVIEW_SECRET if (globalConfig) { return `${baseURL}/preview/globals/${globalConfig.slug}?previewSecret=${secret}` } return `${baseURL}/preview/${collectionConfig?.slug}/${data?.slug ?? data?.id}?previewSecret=${secret}` }, collections: ['pages', 'posts'], globals: ['header', 'footer'], breakpoints: [ { label: 'Mobile', name: 'mobile', width: 375, height: 667, }, { label: 'Tablet', name: 'tablet', width: 768, height: 1024, }, { label: 'Desktop', name: 'desktop', width: 1440, height: 900, }, ], }, meta: { titleSuffix: '- ByMackie', favicon: '/favicon.svg', ogImage: '/favicon.svg', }, }, editor: defaultLexical, db: mongooseAdapter({ url: process.env.DATABASE_URI || '', }), collections: [Pages, Posts, Media, Categories, Users], cors: [getServerSideURL()].filter(Boolean), globals: [Header, Footer], plugins, secret: process.env.PAYLOAD_SECRET!, sharp, typescript: { outputFile: path.resolve(dirname, 'payload-types.ts'), }, jobs: { access: { run: ({ req }: { req: PayloadRequest }): boolean => { if (req.user) return true const secret = process.env.CRON_SECRET if (!secret) return false const authHeader = req.headers.get('authorization') return authHeader === `Bearer ${secret}` }, }, tasks: [], }, })