@delmaredigital/payload-better-auth 0.1.5 → 0.2.2
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/README.md +165 -250
- package/dist/adapter/collections.d.ts +52 -0
- package/dist/adapter/collections.d.ts.map +1 -0
- package/dist/adapter/collections.js +150 -0
- package/dist/adapter/collections.js.map +1 -0
- package/dist/adapter/index.d.ts +6 -9
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +399 -350
- package/dist/adapter/index.js.map +1 -1
- package/dist/components/BeforeLogin.d.ts +11 -0
- package/dist/components/BeforeLogin.d.ts.map +1 -0
- package/dist/components/BeforeLogin.js +25 -0
- package/dist/components/BeforeLogin.js.map +1 -0
- package/dist/components/LoginView.d.ts +21 -0
- package/dist/components/LoginView.d.ts.map +1 -0
- package/dist/components/LoginView.js +214 -0
- package/dist/components/LoginView.js.map +1 -0
- package/dist/components/LogoutButton.d.ts +7 -0
- package/dist/components/LogoutButton.d.ts.map +1 -0
- package/dist/components/LogoutButton.js +43 -0
- package/dist/components/LogoutButton.js.map +1 -0
- package/dist/exports/client.d.ts +6 -0
- package/dist/exports/client.d.ts.map +1 -0
- package/dist/exports/client.js +6 -0
- package/dist/exports/client.js.map +1 -0
- package/dist/exports/components.d.ts +12 -0
- package/dist/exports/components.d.ts.map +1 -0
- package/dist/exports/components.js +10 -0
- package/dist/exports/components.js.map +1 -0
- package/dist/index.d.ts +14 -115
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -610
- package/dist/index.js.map +1 -1
- package/dist/plugin/index.d.ts +68 -16
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +268 -76
- package/dist/plugin/index.js.map +1 -1
- package/dist/utils/detectAuthConfig.d.ts +18 -0
- package/dist/utils/detectAuthConfig.d.ts.map +1 -0
- package/dist/utils/detectAuthConfig.js +31 -0
- package/dist/utils/detectAuthConfig.js.map +1 -0
- package/dist/utils/session.d.ts +63 -0
- package/dist/utils/session.d.ts.map +1 -0
- package/dist/utils/session.js +65 -0
- package/dist/utils/session.js.map +1 -0
- package/package.json +22 -23
- package/dist/adapter/index.d.mts +0 -70
- package/dist/adapter/index.mjs +0 -366
- package/dist/adapter/index.mjs.map +0 -1
- package/dist/client.d.mts +0 -1
- package/dist/client.d.ts +0 -1
- package/dist/client.js +0 -12
- package/dist/client.js.map +0 -1
- package/dist/client.mjs +0 -3
- package/dist/client.mjs.map +0 -1
- package/dist/index.d.mts +0 -120
- package/dist/index.mjs +0 -603
- package/dist/index.mjs.map +0 -1
- package/dist/plugin/index.d.mts +0 -78
- package/dist/plugin/index.mjs +0 -82
- package/dist/plugin/index.mjs.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter/index.ts","../src/adapter/collections.ts","../src/plugin/index.ts","../src/utils/session.ts"],"names":["result","doc","getAuthTables"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Payload CMS Adapter for Better Auth\n *\n * A clean adapter that bridges Better Auth to Payload collections.\n * Follows the same factory pattern as payload-auth for compatibility.\n *\n * @packageDocumentation\n */\n\nimport type { Adapter, BetterAuthOptions, Where } from 'better-auth'\nimport type { BasePayload, Where as PayloadWhere, CollectionSlug } from 'payload'\n\nexport type PayloadAdapterConfig = {\n /**\n * The Payload instance or a function that returns it.\n * Use a function for lazy initialization.\n */\n payloadClient: BasePayload | (() => Promise<BasePayload>)\n\n /**\n * Adapter configuration options\n */\n adapterConfig: {\n /**\n * Map Better Auth model names to Payload collection slugs.\n * Defaults: { user: 'users', session: 'sessions', account: 'accounts', verification: 'verifications' }\n */\n collections?: Record<string, string>\n\n /**\n * Enable debug logging for troubleshooting\n */\n enableDebugLogs?: boolean\n\n /**\n * ID type used by Payload\n * - 'number' for SERIAL/auto-increment (recommended - Payload default)\n * - 'text' for UUID (requires idType: 'uuid' in Payload's db adapter)\n */\n idType: 'number' | 'text'\n }\n}\n\nconst DEFAULT_COLLECTIONS: Record<string, string> = {\n user: 'users',\n session: 'sessions',\n account: 'accounts',\n verification: 'verifications',\n}\n\n/**\n * Creates a Better Auth adapter that uses Payload CMS as the database.\n *\n * Returns a factory function that Better Auth calls with its options.\n * This matches the pattern used by other Better Auth adapters.\n *\n * @example\n * ```ts\n * import { payloadAdapter } from '@delmare/payload-better-auth/adapter'\n *\n * const auth = betterAuth({\n * database: payloadAdapter({\n * payloadClient: payload,\n * adapterConfig: {\n * idType: 'number', // Use Payload's default SERIAL IDs\n * collections: { user: 'users' },\n * },\n * }),\n * // Required when using serial/integer IDs\n * advanced: {\n * database: {\n * generateId: 'serial',\n * },\n * },\n * })\n * ```\n */\nexport function payloadAdapter({\n payloadClient,\n adapterConfig,\n}: PayloadAdapterConfig): (options: BetterAuthOptions) => Adapter {\n const { collections = {}, enableDebugLogs = false, idType } = adapterConfig\n const finalCollections = { ...DEFAULT_COLLECTIONS, ...collections }\n\n const log = (...args: unknown[]) => {\n if (enableDebugLogs) console.log('[payload-adapter]', ...args)\n }\n\n async function resolvePayloadClient(): Promise<BasePayload> {\n return typeof payloadClient === 'function'\n ? await payloadClient()\n : payloadClient\n }\n\n function getCollection(model: string): CollectionSlug {\n return (finalCollections[model] ?? model) as CollectionSlug\n }\n\n /**\n * Transform field name for where clause (Better Auth → Payload)\n * Converts relationship fields like `userId` to `user`\n */\n function transformFieldName(fieldName: string): string {\n if (\n fieldName.endsWith('Id') &&\n fieldName !== 'id' &&\n fieldName !== 'accountId' &&\n fieldName !== 'providerId'\n ) {\n return fieldName.slice(0, -2)\n }\n return fieldName\n }\n\n /**\n * Convert Better Auth where clause to Payload where clause\n */\n function convertWhere(where?: Where[]): PayloadWhere {\n if (!where || where.length === 0) return {}\n\n if (where.length === 1) {\n const w = where[0]\n return {\n [transformFieldName(w.field)]: convertOperator(w.operator, w.value),\n }\n }\n\n const andConditions = where.filter((w) => w.connector !== 'OR')\n const orConditions = where.filter((w) => w.connector === 'OR')\n\n const result: PayloadWhere = {}\n\n if (andConditions.length > 0) {\n result.and = andConditions.map((w) => ({\n [transformFieldName(w.field)]: convertOperator(w.operator, w.value),\n }))\n }\n\n if (orConditions.length > 0) {\n result.or = orConditions.map((w) => ({\n [transformFieldName(w.field)]: convertOperator(w.operator, w.value),\n }))\n }\n\n return result\n }\n\n function convertOperator(\n operator: string | undefined,\n value: unknown\n ): Record<string, unknown> {\n switch (operator) {\n case 'eq':\n return { equals: value }\n case 'ne':\n return { not_equals: value }\n case 'gt':\n return { greater_than: value }\n case 'gte':\n return { greater_than_equal: value }\n case 'lt':\n return { less_than: value }\n case 'lte':\n return { less_than_equal: value }\n case 'in':\n return { in: value }\n case 'contains':\n return { contains: value }\n case 'starts_with':\n return { like: `${value}%` }\n case 'ends_with':\n return { like: `%${value}` }\n default:\n return { equals: value }\n }\n }\n\n function extractSingleId(where: PayloadWhere): string | number | null {\n if ('and' in where || 'or' in where) return null\n\n const idCondition = where.id\n if (\n idCondition &&\n typeof idCondition === 'object' &&\n 'equals' in idCondition\n ) {\n const value = idCondition.equals\n if (typeof value === 'string' || typeof value === 'number') {\n return value\n }\n }\n\n return null\n }\n\n /**\n * Transform input data (Better Auth → Payload field names)\n * Also converts relationship IDs to the correct type based on idType\n */\n function transformInput(\n data: Record<string, unknown>\n ): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(data)) {\n if (\n key.endsWith('Id') &&\n key !== 'id' &&\n key !== 'accountId' &&\n key !== 'providerId'\n ) {\n // Transform userId -> user and convert to correct ID type for relationships\n const fieldName = key.slice(0, -2)\n if (idType === 'number' && typeof value === 'string') {\n const num = parseInt(value, 10)\n result[fieldName] = isNaN(num) ? value : num\n } else {\n result[fieldName] = value\n }\n } else {\n result[key] = value\n }\n }\n\n return result\n }\n\n /**\n * Transform output data (Payload → Better Auth field names)\n */\n function transformOutput<T>(doc: T): T {\n if (!doc || typeof doc !== 'object') return doc\n\n const result = { ...doc } as Record<string, unknown>\n\n if ('id' in result && result.id !== undefined) {\n result.id = String(result.id)\n }\n\n for (const [key, value] of Object.entries(result)) {\n if (value && typeof value === 'object' && 'id' in value) {\n result[`${key}Id`] = String((value as { id: unknown }).id)\n delete result[key]\n } else if (\n typeof value === 'string' &&\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(value)\n ) {\n result[key] = new Date(value)\n }\n }\n\n return result as T\n }\n\n function convertId(id: string | number): string | number {\n if (idType === 'number' && typeof id === 'string') {\n const num = parseInt(id, 10)\n return isNaN(num) ? id : num\n }\n if (idType === 'text' && typeof id === 'number') {\n return String(id)\n }\n return id\n }\n\n /**\n * Handle join requests - fetch related data\n */\n async function handleJoins(\n payload: BasePayload,\n doc: Record<string, unknown>,\n model: string,\n join: Record<string, boolean | { limit?: number }>\n ): Promise<Record<string, unknown>> {\n const result = { ...doc }\n\n for (const [joinKey, joinConfig] of Object.entries(join)) {\n if (!joinConfig) continue\n\n const limit = typeof joinConfig === 'object' ? joinConfig.limit : undefined\n\n log('handleJoins', { model, joinKey, docId: doc.id })\n\n if (model === 'user' && joinKey === 'account') {\n const accounts = await payload.find({\n collection: getCollection('account'),\n where: { user: { equals: doc.id } },\n limit: limit ?? 100,\n depth: 0,\n })\n result[joinKey] = accounts.docs.map((a) => transformOutput(a))\n } else if (model === 'session' && joinKey === 'user') {\n const userId = doc.userId as string\n if (userId) {\n try {\n const user = await payload.findByID({\n collection: getCollection('user'),\n id: userId,\n depth: 0,\n })\n result[joinKey] = transformOutput(user)\n } catch {\n result[joinKey] = null\n }\n }\n } else if (model === 'account' && joinKey === 'user') {\n const userId = doc.userId as string\n if (userId) {\n try {\n const user = await payload.findByID({\n collection: getCollection('user'),\n id: userId,\n depth: 0,\n })\n result[joinKey] = transformOutput(user)\n } catch {\n result[joinKey] = null\n }\n }\n }\n // Extensibility: Add more join patterns here for plugins\n }\n\n return result\n }\n\n return (_options: BetterAuthOptions): Adapter => {\n log('Adapter initialized', { collections: finalCollections })\n\n return {\n id: 'payload-adapter',\n\n async create<T extends Record<string, unknown>, R = T>({\n model,\n data,\n }: {\n model: string\n data: Omit<T, 'id'>\n select?: string[]\n forceAllowId?: boolean\n }): Promise<R> {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const transformedData = transformInput(data as Record<string, unknown>)\n\n log('create', { collection, data: transformedData })\n\n try {\n const result = await payload.create({\n collection,\n data: transformedData,\n depth: 0,\n })\n return transformOutput(result) as R\n } catch (error) {\n console.error('[payload-adapter] create failed:', {\n collection,\n model,\n error: error instanceof Error ? error.message : error,\n })\n throw error\n }\n },\n\n async findOne<T>({\n model,\n where,\n select: _select,\n join,\n }: {\n model: string\n where: Where[]\n select?: string[]\n join?: Record<string, boolean | { limit?: number }>\n }): Promise<T | null> {\n try {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const payloadWhere = convertWhere(where)\n\n const id = extractSingleId(payloadWhere)\n if (id) {\n try {\n const result = await payload.findByID({\n collection,\n id: convertId(id),\n depth: 1,\n })\n let doc = transformOutput(result) as unknown as Record<\n string,\n unknown\n >\n if (join) {\n doc = await handleJoins(payload, doc, model, join)\n }\n return doc as unknown as T\n } catch (error) {\n if (\n error instanceof Error &&\n 'status' in error &&\n (error as Error & { status: number }).status === 404\n ) {\n return null\n }\n throw error\n }\n }\n\n const result = await payload.find({\n collection,\n where: payloadWhere,\n limit: 1,\n depth: 1,\n })\n\n let doc: Record<string, unknown> | null = result.docs[0]\n ? (transformOutput(result.docs[0]) as unknown as Record<\n string,\n unknown\n >)\n : null\n\n if (doc && join) {\n doc = await handleJoins(payload, doc, model, join)\n }\n\n return doc as unknown as T | null\n } catch (error) {\n console.error('[payload-adapter] findOne FAILED', {\n model,\n where,\n error,\n })\n throw error\n }\n },\n\n async findMany<T>({\n model,\n where,\n limit,\n offset,\n sortBy,\n }: {\n model: string\n where?: Where[]\n limit?: number\n sortBy?: { field: string; direction: 'asc' | 'desc' }\n offset?: number\n join?: Record<string, boolean | { limit?: number }>\n }): Promise<T[]> {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const payloadWhere = convertWhere(where)\n\n const result = await payload.find({\n collection,\n where: payloadWhere,\n limit: limit ?? 100,\n page: offset ? Math.floor(offset / (limit ?? 100)) + 1 : 1,\n sort: sortBy\n ? `${sortBy.direction === 'desc' ? '-' : ''}${sortBy.field}`\n : undefined,\n depth: 1,\n })\n\n return result.docs.map((doc) => transformOutput(doc)) as T[]\n },\n\n async update<T>({\n model,\n where,\n update: data,\n }: {\n model: string\n where: Where[]\n update: Record<string, unknown>\n }): Promise<T | null> {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const payloadWhere = convertWhere(where)\n const transformedData = transformInput(data)\n\n const id = extractSingleId(payloadWhere)\n if (id) {\n const result = await payload.update({\n collection,\n id: convertId(id),\n data: transformedData,\n depth: 1,\n })\n return transformOutput(result) as T\n }\n\n const result = await payload.update({\n collection,\n where: payloadWhere,\n data: transformedData,\n depth: 1,\n })\n\n return result.docs[0] ? (transformOutput(result.docs[0]) as T) : null\n },\n\n async updateMany({\n model,\n where,\n update: data,\n }: {\n model: string\n where: Where[]\n update: Record<string, unknown>\n }): Promise<number> {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const payloadWhere = convertWhere(where)\n const transformedData = transformInput(data)\n\n const result = await payload.update({\n collection,\n where: payloadWhere,\n data: transformedData,\n depth: 0,\n })\n\n return result.docs.length\n },\n\n async delete({ model, where }: { model: string; where: Where[] }): Promise<void> {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const payloadWhere = convertWhere(where)\n\n const id = extractSingleId(payloadWhere)\n if (id) {\n await payload.delete({ collection, id: convertId(id) })\n return\n }\n\n await payload.delete({ collection, where: payloadWhere })\n },\n\n async deleteMany({\n model,\n where,\n }: {\n model: string\n where: Where[]\n }): Promise<number> {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const payloadWhere = convertWhere(where)\n\n const result = await payload.delete({\n collection,\n where: payloadWhere,\n })\n\n return result.docs.length\n },\n\n async count({\n model,\n where,\n }: {\n model: string\n where?: Where[]\n }): Promise<number> {\n const payload = await resolvePayloadClient()\n const collection = getCollection(model)\n const payloadWhere = convertWhere(where)\n\n const result = await payload.count({\n collection,\n where: payloadWhere,\n })\n\n return result.totalDocs\n },\n\n async transaction(callback) {\n return callback(this)\n },\n }\n }\n}\n\nexport type { Adapter, BetterAuthOptions }\n","/**\n * Auto-generate Payload collections from Better Auth schema\n *\n * @packageDocumentation\n */\n\nimport type { Config, CollectionConfig, Field, Plugin } from 'payload'\nimport type { BetterAuthOptions } from 'better-auth'\nimport { getAuthTables } from 'better-auth/db'\n\nexport type BetterAuthCollectionsOptions = {\n /**\n * Better Auth options. Pass the same options you use for betterAuth().\n * The plugin reads the schema to generate collections.\n */\n betterAuthOptions?: BetterAuthOptions\n\n /**\n * Override collection slugs (e.g., { user: 'users', session: 'sessions' })\n */\n slugOverrides?: Record<string, string>\n\n /**\n * Collections to skip (they already exist in your config)\n * Default: ['user'] - assumes you have a Users collection\n */\n skipCollections?: string[]\n\n /**\n * Admin group name for generated collections\n * Default: 'Auth'\n */\n adminGroup?: string\n\n /**\n * Custom access control for generated collections.\n * By default, only admins can read/delete, and create/update are disabled.\n */\n access?: CollectionConfig['access']\n}\n\nconst DEFAULT_SLUG_OVERRIDES: Record<string, string> = {\n user: 'users',\n session: 'sessions',\n account: 'accounts',\n verification: 'verifications',\n}\n\nfunction mapFieldType(\n type: string,\n fieldName: string,\n hasReferences: boolean\n): Field['type'] {\n if (hasReferences) {\n return 'relationship'\n }\n\n switch (type) {\n case 'boolean':\n return 'checkbox'\n case 'number':\n return 'number'\n case 'date':\n return 'date'\n case 'string':\n if (fieldName === 'email') return 'email'\n return 'text'\n default:\n return 'text'\n }\n}\n\nfunction extractRelationTarget(\n fieldName: string,\n slugOverrides: Record<string, string>\n): string {\n const base = fieldName.replace(/(_id|Id)$/, '')\n const pluralized = base.endsWith('s') ? base : `${base}s`\n return slugOverrides[base] ?? slugOverrides[pluralized] ?? pluralized\n}\n\nfunction generateCollection(\n modelKey: string,\n table: ReturnType<typeof getAuthTables>[string],\n slugOverrides: Record<string, string>,\n adminGroup: string,\n customAccess?: BetterAuthCollectionsOptions['access']\n): CollectionConfig {\n const slug = slugOverrides[modelKey] ?? table.modelName ?? modelKey\n const fields: Field[] = []\n\n for (const [fieldKey, fieldDef] of Object.entries(table.fields)) {\n if (['id', 'createdAt', 'updatedAt'].includes(fieldKey)) {\n continue\n }\n\n const fieldName = fieldDef.fieldName ?? fieldKey\n const hasReferences = fieldDef.references !== undefined\n const fieldType = mapFieldType(fieldDef.type as string, fieldKey, hasReferences)\n\n if (fieldType === 'relationship') {\n const relationTo = fieldDef.references?.model\n ? slugOverrides[fieldDef.references.model] ?? fieldDef.references.model\n : extractRelationTarget(fieldKey, slugOverrides)\n\n fields.push({\n name: fieldName.replace(/(_id|Id)$/, ''),\n type: 'relationship',\n relationTo,\n required: fieldDef.required ?? false,\n index: true,\n } as Field)\n continue\n }\n\n const field: Record<string, unknown> = {\n name: fieldName,\n type: fieldType,\n }\n\n if (fieldDef.required) field.required = true\n if (fieldDef.unique) {\n field.unique = true\n field.index = true\n }\n\n if (fieldDef.defaultValue !== undefined) {\n let defaultValue: unknown = fieldDef.defaultValue\n if (typeof defaultValue === 'function') {\n try {\n defaultValue = (defaultValue as () => unknown)()\n } catch {\n defaultValue = undefined\n }\n }\n if (defaultValue !== undefined && defaultValue !== null) {\n field.defaultValue = defaultValue\n }\n }\n\n fields.push(field as Field)\n }\n\n const titleField = ['name', 'email', 'title', 'identifier'].find((f) =>\n fields.some((field) => 'name' in field && field.name === f)\n )\n\n // Default access: admin-only read/delete, disabled create/update\n const defaultAccess: CollectionConfig['access'] = {\n read: ({ req }) => (req.user as { role?: string } | undefined)?.role === 'admin',\n create: () => false,\n update: () => false,\n delete: ({ req }) => (req.user as { role?: string } | undefined)?.role === 'admin',\n }\n\n return {\n slug,\n admin: {\n useAsTitle: titleField ?? 'id',\n group: adminGroup,\n description: `Auto-generated from Better Auth schema (${modelKey})`,\n },\n access: customAccess ?? defaultAccess,\n fields,\n timestamps: true,\n }\n}\n\n/**\n * Payload plugin that auto-generates collections from Better Auth schema.\n *\n * @example\n * ```ts\n * import { betterAuthCollections } from '@delmare/payload-better-auth'\n *\n * export default buildConfig({\n * plugins: [\n * betterAuthCollections({\n * betterAuthOptions: { ... },\n * skipCollections: ['user'], // Define Users yourself\n * }),\n * ],\n * })\n * ```\n */\nexport function betterAuthCollections(\n options: BetterAuthCollectionsOptions = {}\n): Plugin {\n const {\n betterAuthOptions = {},\n slugOverrides = {},\n skipCollections = ['user'],\n adminGroup = 'Auth',\n access,\n } = options\n\n const finalSlugOverrides = { ...DEFAULT_SLUG_OVERRIDES, ...slugOverrides }\n\n return (incomingConfig: Config): Config => {\n const existingCollectionSlugs = new Set(\n (incomingConfig.collections ?? []).map((c) => c.slug)\n )\n\n const tables = getAuthTables(betterAuthOptions)\n const generatedCollections: CollectionConfig[] = []\n\n for (const [modelKey, table] of Object.entries(tables)) {\n if (skipCollections.includes(modelKey)) {\n continue\n }\n\n const slug = finalSlugOverrides[modelKey] ?? table.modelName ?? modelKey\n\n if (existingCollectionSlugs.has(slug)) {\n continue\n }\n\n const collection = generateCollection(\n modelKey,\n table,\n finalSlugOverrides,\n adminGroup,\n access\n )\n\n generatedCollections.push(collection)\n }\n\n\n return {\n ...incomingConfig,\n collections: [\n ...(incomingConfig.collections ?? []),\n ...generatedCollections,\n ],\n }\n }\n}\n","/**\n * Payload Plugins for Better Auth\n *\n * @packageDocumentation\n */\n\nimport type { Plugin, AuthStrategy, Payload, BasePayload } from 'payload'\nimport type { betterAuth } from 'better-auth'\n\nexport type Auth = ReturnType<typeof betterAuth>\nexport type PayloadWithAuth = BasePayload & { betterAuth: Auth }\n\nexport type CreateAuthFunction = (payload: BasePayload) => Auth\n\nexport type BetterAuthPluginOptions = {\n /**\n * Function that creates the Better Auth instance.\n * Called during Payload's onInit lifecycle.\n */\n createAuth: CreateAuthFunction\n}\n\n// Track auth instance for HMR\nlet authInstance: Auth | null = null\n\n/**\n * Payload plugin that initializes Better Auth.\n *\n * Better Auth is created in onInit (after Payload is ready) to avoid\n * circular dependency issues. The auth instance is then attached to\n * payload.betterAuth for access throughout the app.\n *\n * @example\n * ```ts\n * import { createBetterAuthPlugin } from '@delmare/payload-better-auth/plugin'\n *\n * export default buildConfig({\n * plugins: [\n * createBetterAuthPlugin({\n * createAuth: (payload) => betterAuth({\n * database: payloadAdapter({ payloadClient: payload, ... }),\n * // ... other options\n * }),\n * }),\n * ],\n * })\n * ```\n */\nexport function createBetterAuthPlugin(\n options: BetterAuthPluginOptions\n): Plugin {\n const { createAuth } = options\n\n return (incomingConfig) => {\n const existingOnInit = incomingConfig.onInit\n\n return {\n ...incomingConfig,\n onInit: async (payload) => {\n if (existingOnInit) {\n await existingOnInit(payload)\n }\n\n // Check if already attached (HMR scenario)\n if ('betterAuth' in payload) {\n return\n }\n\n // Reuse or create auth instance\n if (!authInstance) {\n try {\n authInstance = createAuth(payload)\n } catch (error) {\n console.error('[better-auth] Failed to create auth:', error)\n throw error\n }\n }\n\n // Attach to payload for global access\n Object.defineProperty(payload, 'betterAuth', {\n value: authInstance,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n },\n }\n }\n}\n\nexport type BetterAuthStrategyOptions = {\n /**\n * The collection slug for users\n * Default: 'users'\n */\n usersCollection?: string\n}\n\n/**\n * Payload auth strategy that uses Better Auth for authentication.\n *\n * Use this in your Users collection to authenticate via Better Auth sessions.\n *\n * @example\n * ```ts\n * import { betterAuthStrategy } from '@delmare/payload-better-auth/plugin'\n *\n * export const Users: CollectionConfig = {\n * slug: 'users',\n * auth: {\n * disableLocalStrategy: true,\n * strategies: [betterAuthStrategy()],\n * },\n * // ...\n * }\n * ```\n */\nexport function betterAuthStrategy(\n options: BetterAuthStrategyOptions = {}\n): AuthStrategy {\n const { usersCollection = 'users' } = options\n\n return {\n name: 'better-auth',\n authenticate: async ({\n payload,\n headers,\n }: {\n payload: Payload\n headers: Headers\n }) => {\n try {\n const payloadWithAuth = payload as PayloadWithAuth\n const auth = payloadWithAuth.betterAuth\n\n if (!auth) {\n console.error('Better Auth not initialized on payload instance')\n return { user: null }\n }\n\n const session = await auth.api.getSession({ headers })\n\n if (!session?.user?.id) {\n return { user: null }\n }\n\n const users = await payload.find({\n collection: usersCollection,\n where: { id: { equals: session.user.id } },\n limit: 1,\n depth: 0,\n })\n\n if (users.docs.length === 0) {\n return { user: null }\n }\n\n return {\n user: {\n ...users.docs[0],\n collection: usersCollection,\n _strategy: 'better-auth',\n },\n }\n } catch (error) {\n console.error('Better Auth strategy error:', error)\n return { user: null }\n }\n },\n }\n}\n\n/**\n * Reset the auth instance (useful for testing)\n */\nexport function resetAuthInstance(): void {\n authInstance = null\n}\n","/**\n * Server-side session utilities\n *\n * @packageDocumentation\n */\n\nimport type { BasePayload } from 'payload'\nimport type { PayloadWithAuth } from '../plugin'\n\nexport type Session = {\n user: {\n id: string\n email: string\n name?: string\n image?: string\n [key: string]: unknown\n }\n session: {\n id: string\n expiresAt: Date\n [key: string]: unknown\n }\n}\n\n/**\n * Get the current session from headers.\n *\n * @example\n * ```ts\n * import { headers } from 'next/headers'\n * import { getServerSession } from '@delmare/payload-better-auth'\n *\n * export default async function Page() {\n * const headersList = await headers()\n * const session = await getServerSession(payload, headersList)\n *\n * if (!session) {\n * redirect('/login')\n * }\n *\n * return <div>Hello {session.user.name}</div>\n * }\n * ```\n */\nexport async function getServerSession(\n payload: BasePayload,\n headers: Headers\n): Promise<Session | null> {\n try {\n const payloadWithAuth = payload as PayloadWithAuth\n\n if (!payloadWithAuth.betterAuth) {\n console.error('[session] Better Auth not initialized')\n return null\n }\n\n const session = await payloadWithAuth.betterAuth.api.getSession({ headers })\n return session as Session | null\n } catch (error) {\n console.error('[session] Error getting session:', error)\n return null\n }\n}\n\n/**\n * Get the current user from the session.\n *\n * @example\n * ```ts\n * import { headers } from 'next/headers'\n * import { getServerUser } from '@delmare/payload-better-auth'\n *\n * export default async function Page() {\n * const headersList = await headers()\n * const user = await getServerUser(payload, headersList)\n *\n * if (!user) {\n * redirect('/login')\n * }\n *\n * return <div>Hello {user.name}</div>\n * }\n * ```\n */\nexport async function getServerUser(\n payload: BasePayload,\n headers: Headers\n): Promise<Session['user'] | null> {\n const session = await getServerSession(payload, headers)\n return session?.user ?? null\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,8BAA8B;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAGhE,8BAA8B;AAC9B,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAA;AAU1B,gCAAgC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAG9D,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/plugin/index.d.ts
CHANGED
|
@@ -1,23 +1,71 @@
|
|
|
1
|
-
import { BasePayload, Plugin, AuthStrategy } from 'payload';
|
|
2
|
-
import { betterAuth } from 'better-auth';
|
|
3
|
-
|
|
4
1
|
/**
|
|
5
2
|
* Payload Plugins for Better Auth
|
|
6
3
|
*
|
|
7
4
|
* @packageDocumentation
|
|
8
5
|
*/
|
|
9
|
-
|
|
10
|
-
type
|
|
11
|
-
type
|
|
6
|
+
import type { Plugin, AuthStrategy, BasePayload } from 'payload';
|
|
7
|
+
import type { betterAuth } from 'better-auth';
|
|
8
|
+
export type Auth = ReturnType<typeof betterAuth>;
|
|
9
|
+
export type PayloadWithAuth = BasePayload & {
|
|
12
10
|
betterAuth: Auth;
|
|
13
11
|
};
|
|
14
|
-
type CreateAuthFunction = (payload: BasePayload) => Auth;
|
|
15
|
-
type
|
|
12
|
+
export type CreateAuthFunction = (payload: BasePayload) => Auth;
|
|
13
|
+
export type BetterAuthPluginAdminOptions = {
|
|
14
|
+
/** Disable auto-injection of logout button */
|
|
15
|
+
disableLogoutButton?: boolean;
|
|
16
|
+
/** Disable auto-injection of BeforeLogin redirect */
|
|
17
|
+
disableBeforeLogin?: boolean;
|
|
18
|
+
/** Disable auto-injection of login view */
|
|
19
|
+
disableLoginView?: boolean;
|
|
20
|
+
/** Login page customization */
|
|
21
|
+
login?: {
|
|
22
|
+
/** Custom title for login page */
|
|
23
|
+
title?: string;
|
|
24
|
+
/** Path to redirect after successful login. Default: '/admin' */
|
|
25
|
+
afterLoginPath?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Required role for admin access. Default: 'admin'.
|
|
28
|
+
* Set to null to disable role checking.
|
|
29
|
+
* For complex RBAC (multiple roles, permissions), disable the login view
|
|
30
|
+
* and create your own with custom logic.
|
|
31
|
+
*/
|
|
32
|
+
requiredRole?: string | null;
|
|
33
|
+
};
|
|
34
|
+
/** Path to custom logout button component (import map format) */
|
|
35
|
+
logoutButtonComponent?: string;
|
|
36
|
+
/** Path to custom BeforeLogin component (import map format) */
|
|
37
|
+
beforeLoginComponent?: string;
|
|
38
|
+
/** Path to custom login view component (import map format) */
|
|
39
|
+
loginViewComponent?: string;
|
|
40
|
+
};
|
|
41
|
+
export type BetterAuthPluginOptions = {
|
|
16
42
|
/**
|
|
17
43
|
* Function that creates the Better Auth instance.
|
|
18
44
|
* Called during Payload's onInit lifecycle.
|
|
19
45
|
*/
|
|
20
46
|
createAuth: CreateAuthFunction;
|
|
47
|
+
/**
|
|
48
|
+
* Base path for auth API endpoints (registered via Payload endpoints).
|
|
49
|
+
* @default '/auth'
|
|
50
|
+
*/
|
|
51
|
+
authBasePath?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Auto-register auth API endpoints via Payload's endpoint system.
|
|
54
|
+
* Set to false if you need custom route-level handling (rare).
|
|
55
|
+
* Note: All Better Auth customization (hooks, plugins, callbacks)
|
|
56
|
+
* is done in createAuth - the route handler is just a passthrough.
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
59
|
+
autoRegisterEndpoints?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Auto-inject admin components when disableLocalStrategy is detected.
|
|
62
|
+
* @default true
|
|
63
|
+
*/
|
|
64
|
+
autoInjectAdminComponents?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Admin UI customization options.
|
|
67
|
+
*/
|
|
68
|
+
admin?: BetterAuthPluginAdminOptions;
|
|
21
69
|
};
|
|
22
70
|
/**
|
|
23
71
|
* Payload plugin that initializes Better Auth.
|
|
@@ -26,9 +74,14 @@ type BetterAuthPluginOptions = {
|
|
|
26
74
|
* circular dependency issues. The auth instance is then attached to
|
|
27
75
|
* payload.betterAuth for access throughout the app.
|
|
28
76
|
*
|
|
77
|
+
* Features:
|
|
78
|
+
* - Auto-registers auth API endpoints (configurable)
|
|
79
|
+
* - Auto-injects admin components when disableLocalStrategy is detected
|
|
80
|
+
* - Handles HMR gracefully
|
|
81
|
+
*
|
|
29
82
|
* @example
|
|
30
83
|
* ```ts
|
|
31
|
-
* import { createBetterAuthPlugin } from '@
|
|
84
|
+
* import { createBetterAuthPlugin } from '@delmaredigital/payload-better-auth/plugin'
|
|
32
85
|
*
|
|
33
86
|
* export default buildConfig({
|
|
34
87
|
* plugins: [
|
|
@@ -42,8 +95,8 @@ type BetterAuthPluginOptions = {
|
|
|
42
95
|
* })
|
|
43
96
|
* ```
|
|
44
97
|
*/
|
|
45
|
-
declare function createBetterAuthPlugin(options: BetterAuthPluginOptions): Plugin;
|
|
46
|
-
type BetterAuthStrategyOptions = {
|
|
98
|
+
export declare function createBetterAuthPlugin(options: BetterAuthPluginOptions): Plugin;
|
|
99
|
+
export type BetterAuthStrategyOptions = {
|
|
47
100
|
/**
|
|
48
101
|
* The collection slug for users
|
|
49
102
|
* Default: 'users'
|
|
@@ -57,7 +110,7 @@ type BetterAuthStrategyOptions = {
|
|
|
57
110
|
*
|
|
58
111
|
* @example
|
|
59
112
|
* ```ts
|
|
60
|
-
* import { betterAuthStrategy } from '@
|
|
113
|
+
* import { betterAuthStrategy } from '@delmaredigital/payload-better-auth/plugin'
|
|
61
114
|
*
|
|
62
115
|
* export const Users: CollectionConfig = {
|
|
63
116
|
* slug: 'users',
|
|
@@ -69,10 +122,9 @@ type BetterAuthStrategyOptions = {
|
|
|
69
122
|
* }
|
|
70
123
|
* ```
|
|
71
124
|
*/
|
|
72
|
-
declare function betterAuthStrategy(options?: BetterAuthStrategyOptions): AuthStrategy;
|
|
125
|
+
export declare function betterAuthStrategy(options?: BetterAuthStrategyOptions): AuthStrategy;
|
|
73
126
|
/**
|
|
74
127
|
* Reset the auth instance (useful for testing)
|
|
75
128
|
*/
|
|
76
|
-
declare function resetAuthInstance(): void;
|
|
77
|
-
|
|
78
|
-
export { type Auth, type BetterAuthPluginOptions, type BetterAuthStrategyOptions, type CreateAuthFunction, type PayloadWithAuth, betterAuthStrategy, createBetterAuthPlugin, resetAuthInstance };
|
|
129
|
+
export declare function resetAuthInstance(): void;
|
|
130
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EAEZ,WAAW,EAIZ,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAG7C,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;AAChD,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAAE,UAAU,EAAE,IAAI,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;AAE/D,MAAM,MAAM,4BAA4B,GAAG;IACzC,8CAA8C;IAC9C,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,qDAAqD;IACrD,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,+BAA+B;IAC/B,KAAK,CAAC,EAAE;QACN,kCAAkC;QAClC,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,iEAAiE;QACjE,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC7B,CAAA;IACD,iEAAiE;IACjE,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,8DAA8D;IAC9D,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;OAGG;IACH,UAAU,EAAE,kBAAkB,CAAA;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAE/B;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAA;IAEnC;;OAEG;IACH,KAAK,CAAC,EAAE,4BAA4B,CAAA;CACrC,CAAA;AAkKD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CA2DR;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,YAAY,CAmDd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
package/dist/plugin/index.js
CHANGED
|
@@ -1,86 +1,278 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if ("betterAuth" in payload) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
if (!authInstance) {
|
|
19
|
-
try {
|
|
20
|
-
authInstance = createAuth(payload);
|
|
21
|
-
} catch (error) {
|
|
22
|
-
console.error("[better-auth] Failed to create auth:", error);
|
|
23
|
-
throw error;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
Object.defineProperty(payload, "betterAuth", {
|
|
27
|
-
value: authInstance,
|
|
28
|
-
writable: false,
|
|
29
|
-
enumerable: false,
|
|
30
|
-
configurable: false
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function betterAuthStrategy(options = {}) {
|
|
37
|
-
const { usersCollection = "users" } = options;
|
|
38
|
-
return {
|
|
39
|
-
name: "better-auth",
|
|
40
|
-
authenticate: async ({
|
|
41
|
-
payload,
|
|
42
|
-
headers
|
|
43
|
-
}) => {
|
|
44
|
-
try {
|
|
45
|
-
const payloadWithAuth = payload;
|
|
1
|
+
/**
|
|
2
|
+
* Payload Plugins for Better Auth
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import { detectAuthConfig } from '../utils/detectAuthConfig.js';
|
|
7
|
+
// Track auth instance for HMR
|
|
8
|
+
let authInstance = null;
|
|
9
|
+
/**
|
|
10
|
+
* Creates the auth endpoint handler that proxies requests to Better Auth.
|
|
11
|
+
*/
|
|
12
|
+
function createAuthEndpointHandler() {
|
|
13
|
+
return async (req) => {
|
|
14
|
+
const payloadWithAuth = req.payload;
|
|
46
15
|
const auth = payloadWithAuth.betterAuth;
|
|
47
16
|
if (!auth) {
|
|
48
|
-
|
|
49
|
-
return { user: null };
|
|
17
|
+
return new Response(JSON.stringify({ error: 'Better Auth not initialized' }), { status: 500, headers: { 'Content-Type': 'application/json' } });
|
|
50
18
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
19
|
+
try {
|
|
20
|
+
// Construct the full URL for Better Auth
|
|
21
|
+
// PayloadRequest provides these properties
|
|
22
|
+
const protocol = req.headers.get('x-forwarded-proto') || 'http';
|
|
23
|
+
const host = req.headers.get('host') || 'localhost';
|
|
24
|
+
const pathname = req.pathname || '';
|
|
25
|
+
const search = req.search ||
|
|
26
|
+
req.url?.split('?')[1] ||
|
|
27
|
+
'';
|
|
28
|
+
const url = new URL(pathname, `${protocol}://${host}`);
|
|
29
|
+
if (search) {
|
|
30
|
+
url.search = search.startsWith('?') ? search : `?${search}`;
|
|
31
|
+
}
|
|
32
|
+
// Get request body for non-GET methods
|
|
33
|
+
let body;
|
|
34
|
+
if (req.method && !['GET', 'HEAD'].includes(req.method)) {
|
|
35
|
+
try {
|
|
36
|
+
// Try to get body from request
|
|
37
|
+
if (typeof req.text === 'function') {
|
|
38
|
+
body = await req.text();
|
|
39
|
+
}
|
|
40
|
+
else if (req.data) {
|
|
41
|
+
body = JSON.stringify(req.data);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Body might already be consumed, try data property
|
|
46
|
+
if (req.data) {
|
|
47
|
+
body = JSON.stringify(req.data);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Create a new Request for Better Auth
|
|
52
|
+
const request = new Request(url.toString(), {
|
|
53
|
+
method: req.method || 'GET',
|
|
54
|
+
headers: req.headers,
|
|
55
|
+
body,
|
|
56
|
+
});
|
|
57
|
+
return auth.handler(request);
|
|
54
58
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
limit: 1,
|
|
59
|
-
depth: 0
|
|
60
|
-
});
|
|
61
|
-
if (users.docs.length === 0) {
|
|
62
|
-
return { user: null };
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error('[better-auth] Endpoint handler error:', error);
|
|
61
|
+
return new Response(JSON.stringify({ error: 'Internal server error' }), { status: 500, headers: { 'Content-Type': 'application/json' } });
|
|
63
62
|
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Generates Payload endpoints for Better Auth.
|
|
67
|
+
*/
|
|
68
|
+
function generateAuthEndpoints(basePath) {
|
|
69
|
+
const handler = createAuthEndpointHandler();
|
|
70
|
+
const methods = ['get', 'post', 'patch', 'put', 'delete'];
|
|
71
|
+
return methods.map((method) => ({
|
|
72
|
+
path: `${basePath}/:path*`,
|
|
73
|
+
method,
|
|
74
|
+
handler,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Injects admin components into the Payload config when disableLocalStrategy is detected.
|
|
79
|
+
*/
|
|
80
|
+
function injectAdminComponents(config, options) {
|
|
81
|
+
const authDetection = detectAuthConfig(config);
|
|
82
|
+
// Skip if not using disableLocalStrategy or auto-injection is disabled
|
|
83
|
+
if (!authDetection.hasDisableLocalStrategy ||
|
|
84
|
+
options.autoInjectAdminComponents === false) {
|
|
85
|
+
return config;
|
|
86
|
+
}
|
|
87
|
+
const adminOptions = options.admin ?? {};
|
|
88
|
+
const existingComponents = config.admin?.components ?? {};
|
|
89
|
+
// Build logout button config
|
|
90
|
+
const logoutButton = adminOptions.disableLogoutButton
|
|
91
|
+
? existingComponents.logout?.Button
|
|
92
|
+
: adminOptions.logoutButtonComponent ??
|
|
93
|
+
'@delmaredigital/payload-better-auth/components#LogoutButton';
|
|
94
|
+
// Build beforeLogin config
|
|
95
|
+
const existingBeforeLogin = existingComponents.beforeLogin ?? [];
|
|
96
|
+
const beforeLogin = adminOptions.disableBeforeLogin
|
|
97
|
+
? existingBeforeLogin
|
|
98
|
+
: [
|
|
99
|
+
...(Array.isArray(existingBeforeLogin)
|
|
100
|
+
? existingBeforeLogin
|
|
101
|
+
: [existingBeforeLogin]),
|
|
102
|
+
adminOptions.beforeLoginComponent ??
|
|
103
|
+
'@delmaredigital/payload-better-auth/components#BeforeLogin',
|
|
104
|
+
];
|
|
105
|
+
// Build login view config
|
|
106
|
+
const existingViews = existingComponents.views ?? {};
|
|
107
|
+
const newLoginView = adminOptions.disableLoginView
|
|
108
|
+
? undefined
|
|
109
|
+
: {
|
|
110
|
+
Component: adminOptions.loginViewComponent ??
|
|
111
|
+
'@delmaredigital/payload-better-auth/components#LoginView',
|
|
112
|
+
path: '/login',
|
|
113
|
+
};
|
|
114
|
+
const views = {
|
|
115
|
+
...existingViews,
|
|
116
|
+
...(newLoginView ? { login: newLoginView } : {}),
|
|
117
|
+
};
|
|
118
|
+
return {
|
|
119
|
+
...config,
|
|
120
|
+
admin: {
|
|
121
|
+
...config.admin,
|
|
122
|
+
components: {
|
|
123
|
+
...existingComponents,
|
|
124
|
+
logout: logoutButton
|
|
125
|
+
? {
|
|
126
|
+
...(typeof existingComponents.logout === 'object'
|
|
127
|
+
? existingComponents.logout
|
|
128
|
+
: {}),
|
|
129
|
+
Button: logoutButton,
|
|
130
|
+
}
|
|
131
|
+
: existingComponents.logout,
|
|
132
|
+
beforeLogin,
|
|
133
|
+
views,
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Payload plugin that initializes Better Auth.
|
|
140
|
+
*
|
|
141
|
+
* Better Auth is created in onInit (after Payload is ready) to avoid
|
|
142
|
+
* circular dependency issues. The auth instance is then attached to
|
|
143
|
+
* payload.betterAuth for access throughout the app.
|
|
144
|
+
*
|
|
145
|
+
* Features:
|
|
146
|
+
* - Auto-registers auth API endpoints (configurable)
|
|
147
|
+
* - Auto-injects admin components when disableLocalStrategy is detected
|
|
148
|
+
* - Handles HMR gracefully
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* import { createBetterAuthPlugin } from '@delmaredigital/payload-better-auth/plugin'
|
|
153
|
+
*
|
|
154
|
+
* export default buildConfig({
|
|
155
|
+
* plugins: [
|
|
156
|
+
* createBetterAuthPlugin({
|
|
157
|
+
* createAuth: (payload) => betterAuth({
|
|
158
|
+
* database: payloadAdapter({ payloadClient: payload, ... }),
|
|
159
|
+
* // ... other options
|
|
160
|
+
* }),
|
|
161
|
+
* }),
|
|
162
|
+
* ],
|
|
163
|
+
* })
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export function createBetterAuthPlugin(options) {
|
|
167
|
+
const { createAuth, authBasePath = '/auth', autoRegisterEndpoints = true, autoInjectAdminComponents = true, } = options;
|
|
168
|
+
return (incomingConfig) => {
|
|
169
|
+
// Inject admin components if enabled
|
|
170
|
+
let config = autoInjectAdminComponents
|
|
171
|
+
? injectAdminComponents(incomingConfig, options)
|
|
172
|
+
: incomingConfig;
|
|
173
|
+
// Generate auth endpoints if enabled
|
|
174
|
+
const authEndpoints = autoRegisterEndpoints
|
|
175
|
+
? generateAuthEndpoints(authBasePath)
|
|
176
|
+
: [];
|
|
177
|
+
// Merge endpoints
|
|
178
|
+
const existingEndpoints = config.endpoints ?? [];
|
|
179
|
+
// Get existing onInit
|
|
180
|
+
const existingOnInit = config.onInit;
|
|
64
181
|
return {
|
|
65
|
-
|
|
66
|
-
...
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
182
|
+
...config,
|
|
183
|
+
endpoints: [...existingEndpoints, ...authEndpoints],
|
|
184
|
+
onInit: async (payload) => {
|
|
185
|
+
if (existingOnInit) {
|
|
186
|
+
await existingOnInit(payload);
|
|
187
|
+
}
|
|
188
|
+
// Check if already attached (HMR scenario)
|
|
189
|
+
if ('betterAuth' in payload) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Reuse or create auth instance
|
|
193
|
+
if (!authInstance) {
|
|
194
|
+
try {
|
|
195
|
+
authInstance = createAuth(payload);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
console.error('[better-auth] Failed to create auth:', error);
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// Attach to payload for global access
|
|
203
|
+
Object.defineProperty(payload, 'betterAuth', {
|
|
204
|
+
value: authInstance,
|
|
205
|
+
writable: false,
|
|
206
|
+
enumerable: false,
|
|
207
|
+
configurable: false,
|
|
208
|
+
});
|
|
209
|
+
},
|
|
70
210
|
};
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Payload auth strategy that uses Better Auth for authentication.
|
|
215
|
+
*
|
|
216
|
+
* Use this in your Users collection to authenticate via Better Auth sessions.
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```ts
|
|
220
|
+
* import { betterAuthStrategy } from '@delmaredigital/payload-better-auth/plugin'
|
|
221
|
+
*
|
|
222
|
+
* export const Users: CollectionConfig = {
|
|
223
|
+
* slug: 'users',
|
|
224
|
+
* auth: {
|
|
225
|
+
* disableLocalStrategy: true,
|
|
226
|
+
* strategies: [betterAuthStrategy()],
|
|
227
|
+
* },
|
|
228
|
+
* // ...
|
|
229
|
+
* }
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
export function betterAuthStrategy(options = {}) {
|
|
233
|
+
const { usersCollection = 'users' } = options;
|
|
234
|
+
return {
|
|
235
|
+
name: 'better-auth',
|
|
236
|
+
authenticate: async ({ payload, headers, }) => {
|
|
237
|
+
try {
|
|
238
|
+
const payloadWithAuth = payload;
|
|
239
|
+
const auth = payloadWithAuth.betterAuth;
|
|
240
|
+
if (!auth) {
|
|
241
|
+
console.error('Better Auth not initialized on payload instance');
|
|
242
|
+
return { user: null };
|
|
243
|
+
}
|
|
244
|
+
const session = await auth.api.getSession({ headers });
|
|
245
|
+
if (!session?.user?.id) {
|
|
246
|
+
return { user: null };
|
|
247
|
+
}
|
|
248
|
+
const users = await payload.find({
|
|
249
|
+
collection: usersCollection,
|
|
250
|
+
where: { id: { equals: session.user.id } },
|
|
251
|
+
limit: 1,
|
|
252
|
+
depth: 0,
|
|
253
|
+
});
|
|
254
|
+
if (users.docs.length === 0) {
|
|
255
|
+
return { user: null };
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
user: {
|
|
259
|
+
...users.docs[0],
|
|
260
|
+
collection: usersCollection,
|
|
261
|
+
_strategy: 'better-auth',
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
console.error('Better Auth strategy error:', error);
|
|
267
|
+
return { user: null };
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
};
|
|
77
271
|
}
|
|
78
|
-
|
|
79
|
-
|
|
272
|
+
/**
|
|
273
|
+
* Reset the auth instance (useful for testing)
|
|
274
|
+
*/
|
|
275
|
+
export function resetAuthInstance() {
|
|
276
|
+
authInstance = null;
|
|
80
277
|
}
|
|
81
|
-
|
|
82
|
-
exports.betterAuthStrategy = betterAuthStrategy;
|
|
83
|
-
exports.createBetterAuthPlugin = createBetterAuthPlugin;
|
|
84
|
-
exports.resetAuthInstance = resetAuthInstance;
|
|
85
|
-
//# sourceMappingURL=index.js.map
|
|
86
278
|
//# sourceMappingURL=index.js.map
|
package/dist/plugin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugin/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
|