@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.
Files changed (61) hide show
  1. package/README.md +165 -250
  2. package/dist/adapter/collections.d.ts +52 -0
  3. package/dist/adapter/collections.d.ts.map +1 -0
  4. package/dist/adapter/collections.js +150 -0
  5. package/dist/adapter/collections.js.map +1 -0
  6. package/dist/adapter/index.d.ts +6 -9
  7. package/dist/adapter/index.d.ts.map +1 -0
  8. package/dist/adapter/index.js +399 -350
  9. package/dist/adapter/index.js.map +1 -1
  10. package/dist/components/BeforeLogin.d.ts +11 -0
  11. package/dist/components/BeforeLogin.d.ts.map +1 -0
  12. package/dist/components/BeforeLogin.js +25 -0
  13. package/dist/components/BeforeLogin.js.map +1 -0
  14. package/dist/components/LoginView.d.ts +21 -0
  15. package/dist/components/LoginView.d.ts.map +1 -0
  16. package/dist/components/LoginView.js +214 -0
  17. package/dist/components/LoginView.js.map +1 -0
  18. package/dist/components/LogoutButton.d.ts +7 -0
  19. package/dist/components/LogoutButton.d.ts.map +1 -0
  20. package/dist/components/LogoutButton.js +43 -0
  21. package/dist/components/LogoutButton.js.map +1 -0
  22. package/dist/exports/client.d.ts +6 -0
  23. package/dist/exports/client.d.ts.map +1 -0
  24. package/dist/exports/client.js +6 -0
  25. package/dist/exports/client.js.map +1 -0
  26. package/dist/exports/components.d.ts +12 -0
  27. package/dist/exports/components.d.ts.map +1 -0
  28. package/dist/exports/components.js +10 -0
  29. package/dist/exports/components.js.map +1 -0
  30. package/dist/index.d.ts +14 -115
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +18 -610
  33. package/dist/index.js.map +1 -1
  34. package/dist/plugin/index.d.ts +68 -16
  35. package/dist/plugin/index.d.ts.map +1 -0
  36. package/dist/plugin/index.js +268 -76
  37. package/dist/plugin/index.js.map +1 -1
  38. package/dist/utils/detectAuthConfig.d.ts +18 -0
  39. package/dist/utils/detectAuthConfig.d.ts.map +1 -0
  40. package/dist/utils/detectAuthConfig.js +31 -0
  41. package/dist/utils/detectAuthConfig.js.map +1 -0
  42. package/dist/utils/session.d.ts +63 -0
  43. package/dist/utils/session.d.ts.map +1 -0
  44. package/dist/utils/session.js +65 -0
  45. package/dist/utils/session.js.map +1 -0
  46. package/package.json +22 -23
  47. package/dist/adapter/index.d.mts +0 -70
  48. package/dist/adapter/index.mjs +0 -366
  49. package/dist/adapter/index.mjs.map +0 -1
  50. package/dist/client.d.mts +0 -1
  51. package/dist/client.d.ts +0 -1
  52. package/dist/client.js +0 -12
  53. package/dist/client.js.map +0 -1
  54. package/dist/client.mjs +0 -3
  55. package/dist/client.mjs.map +0 -1
  56. package/dist/index.d.mts +0 -120
  57. package/dist/index.mjs +0 -603
  58. package/dist/index.mjs.map +0 -1
  59. package/dist/plugin/index.d.mts +0 -78
  60. package/dist/plugin/index.mjs +0 -82
  61. package/dist/plugin/index.mjs.map +0 -1
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Auto-generate Payload collections from Better Auth schema
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import { getAuthTables } from 'better-auth/db';
7
+ const DEFAULT_SLUG_OVERRIDES = {
8
+ user: 'users',
9
+ session: 'sessions',
10
+ account: 'accounts',
11
+ verification: 'verifications',
12
+ };
13
+ function mapFieldType(type, fieldName, hasReferences) {
14
+ if (hasReferences) {
15
+ return 'relationship';
16
+ }
17
+ switch (type) {
18
+ case 'boolean':
19
+ return 'checkbox';
20
+ case 'number':
21
+ return 'number';
22
+ case 'date':
23
+ return 'date';
24
+ case 'string':
25
+ if (fieldName === 'email')
26
+ return 'email';
27
+ return 'text';
28
+ default:
29
+ return 'text';
30
+ }
31
+ }
32
+ function extractRelationTarget(fieldName, slugOverrides) {
33
+ const base = fieldName.replace(/(_id|Id)$/, '');
34
+ const pluralized = base.endsWith('s') ? base : `${base}s`;
35
+ return slugOverrides[base] ?? slugOverrides[pluralized] ?? pluralized;
36
+ }
37
+ function generateCollection(modelKey, table, slugOverrides, adminGroup, customAccess) {
38
+ const slug = slugOverrides[modelKey] ?? table.modelName ?? modelKey;
39
+ const fields = [];
40
+ for (const [fieldKey, fieldDef] of Object.entries(table.fields)) {
41
+ if (['id', 'createdAt', 'updatedAt'].includes(fieldKey)) {
42
+ continue;
43
+ }
44
+ const fieldName = fieldDef.fieldName ?? fieldKey;
45
+ const hasReferences = fieldDef.references !== undefined;
46
+ const fieldType = mapFieldType(fieldDef.type, fieldKey, hasReferences);
47
+ if (fieldType === 'relationship') {
48
+ const relationTo = fieldDef.references?.model
49
+ ? slugOverrides[fieldDef.references.model] ?? fieldDef.references.model
50
+ : extractRelationTarget(fieldKey, slugOverrides);
51
+ fields.push({
52
+ name: fieldName.replace(/(_id|Id)$/, ''),
53
+ type: 'relationship',
54
+ relationTo,
55
+ required: fieldDef.required ?? false,
56
+ index: true,
57
+ });
58
+ continue;
59
+ }
60
+ const field = {
61
+ name: fieldName,
62
+ type: fieldType,
63
+ };
64
+ if (fieldDef.required)
65
+ field.required = true;
66
+ if (fieldDef.unique) {
67
+ field.unique = true;
68
+ field.index = true;
69
+ }
70
+ if (fieldDef.defaultValue !== undefined) {
71
+ let defaultValue = fieldDef.defaultValue;
72
+ if (typeof defaultValue === 'function') {
73
+ try {
74
+ defaultValue = defaultValue();
75
+ }
76
+ catch {
77
+ defaultValue = undefined;
78
+ }
79
+ }
80
+ if (defaultValue !== undefined && defaultValue !== null) {
81
+ field.defaultValue = defaultValue;
82
+ }
83
+ }
84
+ fields.push(field);
85
+ }
86
+ const titleField = ['name', 'email', 'title', 'identifier'].find((f) => fields.some((field) => 'name' in field && field.name === f));
87
+ // Default access: admin-only read/delete, disabled create/update
88
+ const defaultAccess = {
89
+ read: ({ req }) => req.user?.role === 'admin',
90
+ create: () => false,
91
+ update: () => false,
92
+ delete: ({ req }) => req.user?.role === 'admin',
93
+ };
94
+ return {
95
+ slug,
96
+ admin: {
97
+ useAsTitle: titleField ?? 'id',
98
+ group: adminGroup,
99
+ description: `Auto-generated from Better Auth schema (${modelKey})`,
100
+ },
101
+ access: customAccess ?? defaultAccess,
102
+ fields,
103
+ timestamps: true,
104
+ };
105
+ }
106
+ /**
107
+ * Payload plugin that auto-generates collections from Better Auth schema.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * import { betterAuthCollections } from '@delmare/payload-better-auth'
112
+ *
113
+ * export default buildConfig({
114
+ * plugins: [
115
+ * betterAuthCollections({
116
+ * betterAuthOptions: { ... },
117
+ * skipCollections: ['user'], // Define Users yourself
118
+ * }),
119
+ * ],
120
+ * })
121
+ * ```
122
+ */
123
+ export function betterAuthCollections(options = {}) {
124
+ const { betterAuthOptions = {}, slugOverrides = {}, skipCollections = ['user'], adminGroup = 'Auth', access, } = options;
125
+ const finalSlugOverrides = { ...DEFAULT_SLUG_OVERRIDES, ...slugOverrides };
126
+ return (incomingConfig) => {
127
+ const existingCollectionSlugs = new Set((incomingConfig.collections ?? []).map((c) => c.slug));
128
+ const tables = getAuthTables(betterAuthOptions);
129
+ const generatedCollections = [];
130
+ for (const [modelKey, table] of Object.entries(tables)) {
131
+ if (skipCollections.includes(modelKey)) {
132
+ continue;
133
+ }
134
+ const slug = finalSlugOverrides[modelKey] ?? table.modelName ?? modelKey;
135
+ if (existingCollectionSlugs.has(slug)) {
136
+ continue;
137
+ }
138
+ const collection = generateCollection(modelKey, table, finalSlugOverrides, adminGroup, access);
139
+ generatedCollections.push(collection);
140
+ }
141
+ return {
142
+ ...incomingConfig,
143
+ collections: [
144
+ ...(incomingConfig.collections ?? []),
145
+ ...generatedCollections,
146
+ ],
147
+ };
148
+ };
149
+ }
150
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/adapter/collections.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- import { BetterAuthOptions, Adapter } from 'better-auth';
2
- export { Adapter, BetterAuthOptions } from 'better-auth';
3
- import { BasePayload } from 'payload';
4
-
5
1
  /**
6
2
  * Payload CMS Adapter for Better Auth
7
3
  *
@@ -10,8 +6,9 @@ import { BasePayload } from 'payload';
10
6
  *
11
7
  * @packageDocumentation
12
8
  */
13
-
14
- type PayloadAdapterConfig = {
9
+ import type { Adapter, BetterAuthOptions } from 'better-auth';
10
+ import type { BasePayload } from 'payload';
11
+ export type PayloadAdapterConfig = {
15
12
  /**
16
13
  * The Payload instance or a function that returns it.
17
14
  * Use a function for lazy initialization.
@@ -65,6 +62,6 @@ type PayloadAdapterConfig = {
65
62
  * })
66
63
  * ```
67
64
  */
68
- declare function payloadAdapter({ payloadClient, adapterConfig, }: PayloadAdapterConfig): (options: BetterAuthOptions) => Adapter;
69
-
70
- export { type PayloadAdapterConfig, payloadAdapter };
65
+ export declare function payloadAdapter({ payloadClient, adapterConfig, }: PayloadAdapterConfig): (options: BetterAuthOptions) => Adapter;
66
+ export type { Adapter, BetterAuthOptions };
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAS,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAyC,MAAM,SAAS,CAAA;AAEjF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,aAAa,EAAE,WAAW,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;IAEzD;;OAEG;IACH,aAAa,EAAE;QACb;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAEpC;;WAEG;QACH,eAAe,CAAC,EAAE,OAAO,CAAA;QAEzB;;;;WAIG;QACH,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAA;KAC1B,CAAA;CACF,CAAA;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,EAC7B,aAAa,EACb,aAAa,GACd,EAAE,oBAAoB,GAAG,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAyfhE;AAED,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA"}