UNPKG

@payload-auth/better-auth-plugin

Version:

A Payload CMS plugin for Better Auth

109 lines (108 loc) 4.19 kB
import { getPayload } from 'payload'; import { sanitizeBetterAuthOptions } from './lib/sanitize-auth-options.js'; import { getRequiredCollectionSlugs } from './lib/get-required-collection-slugs.js'; import { buildCollectionConfigs } from './lib/build-collection-configs.js'; import { payloadAdapter } from '@payload-auth/better-auth-db-adapter'; import { betterAuth } from 'better-auth'; export * from './types.js'; function initBetterAuth({ payload, options }) { const auth = betterAuth({ ...options, database: payloadAdapter(payload, { enableDebugLogs: options.enableDebugLogs ?? false }) }); return auth; } export function payloadBetterAuth(pluginOptions) { return (config)=>{ if (pluginOptions.disabled) { return config; } if (!config.collections) { config.collections = []; } const sanitzedBetterAuthOptions = sanitizeBetterAuthOptions(pluginOptions); // Determine which collections to add based on the options and plugins const requiredCollectionSlugs = getRequiredCollectionSlugs({ logTables: pluginOptions.logTables ?? false, pluginOptions, sanitizedBAOptions: sanitzedBetterAuthOptions }); // Update with the required collections + existing collections config.collections = buildCollectionConfigs({ incomingCollections: config.collections ?? [], requiredCollectionSlugs, pluginOptions, sanitizedBAOptions: sanitzedBetterAuthOptions }); // Initialize admin configuration with defaults using deep merge pattern config.admin = { ...config.admin, components: { ...config.admin?.components, afterLogin: [ { path: '@payload-auth/better-auth-plugin/rsc#LoginRedirect' }, ...config.admin?.components?.afterLogin || [] ], logout: { Button: '@payload-auth/better-auth-plugin/client#LogoutButton' }, views: { ...config.admin?.components?.views, login: { path: '/login', Component: { path: '@payload-auth/better-auth-plugin/rsc#Login', serverProps: { defaultAdminRole: pluginOptions.users?.adminRoles?.[0] } } }, createFirstAdmin: { path: '/create-first-admin', Component: { path: '@payload-auth/better-auth-plugin/rsc#CreateFirstAdmin', serverProps: { defaultAdminRole: pluginOptions.users?.adminRoles?.[0] } } } } }, routes: { ...config.admin?.routes, login: '/login-redirect' } }; const incomingOnInit = config.onInit; config.onInit = async (payload)=>{ // Ensure we are executing any existing onInit functions before running our own. if (incomingOnInit) { await incomingOnInit(payload); } // Initialize and set the betterAuth instance const auth = initBetterAuth({ payload, options: { ...sanitzedBetterAuthOptions, enableDebugLogs: pluginOptions.enableDebugLogs, plugins: [ ...sanitzedBetterAuthOptions.plugins ?? [] ] } }); payload.betterAuth = auth; }; return config; }; } export async function getPayloadWithAuth(config) { const payload = await getPayload({ config }); return payload; } //# sourceMappingURL=index.js.map