@delmaredigital/payload-better-auth 0.3.7 → 0.3.8

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 (160) hide show
  1. package/README.md +12 -1
  2. package/dist/adapter/collections.d.ts.map +1 -1
  3. package/dist/adapter/collections.js +126 -88
  4. package/dist/adapter/collections.js.map +1 -1
  5. package/dist/adapter/index.js +197 -150
  6. package/dist/adapter/index.js.map +1 -1
  7. package/dist/components/BeforeLogin.d.ts +1 -1
  8. package/dist/components/BeforeLogin.d.ts.map +1 -1
  9. package/dist/components/BeforeLogin.js +15 -7
  10. package/dist/components/BeforeLogin.js.map +1 -1
  11. package/dist/components/LoginView.d.ts +2 -2
  12. package/dist/components/LoginView.d.ts.map +1 -1
  13. package/dist/components/LoginView.js +660 -218
  14. package/dist/components/LoginView.js.map +1 -1
  15. package/dist/components/LoginViewWrapper.d.ts +1 -1
  16. package/dist/components/LoginViewWrapper.d.ts.map +1 -1
  17. package/dist/components/LoginViewWrapper.js +14 -4
  18. package/dist/components/LoginViewWrapper.js.map +1 -1
  19. package/dist/components/LogoutButton.d.ts +1 -1
  20. package/dist/components/LogoutButton.d.ts.map +1 -1
  21. package/dist/components/LogoutButton.js +19 -11
  22. package/dist/components/LogoutButton.js.map +1 -1
  23. package/dist/components/PasskeyRegisterButton.d.ts +2 -2
  24. package/dist/components/PasskeyRegisterButton.d.ts.map +1 -1
  25. package/dist/components/PasskeyRegisterButton.js +20 -16
  26. package/dist/components/PasskeyRegisterButton.js.map +1 -1
  27. package/dist/components/PasskeySignInButton.d.ts +2 -2
  28. package/dist/components/PasskeySignInButton.d.ts.map +1 -1
  29. package/dist/components/PasskeySignInButton.js +14 -12
  30. package/dist/components/PasskeySignInButton.js.map +1 -1
  31. package/dist/components/auth/ForgotPasswordView.d.ts +1 -1
  32. package/dist/components/auth/ForgotPasswordView.d.ts.map +1 -1
  33. package/dist/components/auth/ForgotPasswordView.js +133 -43
  34. package/dist/components/auth/ForgotPasswordView.js.map +1 -1
  35. package/dist/components/auth/ResetPasswordView.d.ts +1 -1
  36. package/dist/components/auth/ResetPasswordView.d.ts.map +1 -1
  37. package/dist/components/auth/ResetPasswordView.js +154 -50
  38. package/dist/components/auth/ResetPasswordView.js.map +1 -1
  39. package/dist/components/auth/index.js +2 -2
  40. package/dist/components/auth/index.js.map +1 -1
  41. package/dist/components/management/ApiKeysManagementClient.d.ts +2 -2
  42. package/dist/components/management/ApiKeysManagementClient.d.ts.map +1 -1
  43. package/dist/components/management/ApiKeysManagementClient.js +539 -222
  44. package/dist/components/management/ApiKeysManagementClient.js.map +1 -1
  45. package/dist/components/management/PasskeysManagementClient.d.ts +2 -2
  46. package/dist/components/management/PasskeysManagementClient.d.ts.map +1 -1
  47. package/dist/components/management/PasskeysManagementClient.js +215 -92
  48. package/dist/components/management/PasskeysManagementClient.js.map +1 -1
  49. package/dist/components/management/SecurityNavLinks.d.ts +1 -1
  50. package/dist/components/management/SecurityNavLinks.d.ts.map +1 -1
  51. package/dist/components/management/SecurityNavLinks.js +51 -24
  52. package/dist/components/management/SecurityNavLinks.js.map +1 -1
  53. package/dist/components/management/TwoFactorManagementClient.d.ts +2 -2
  54. package/dist/components/management/TwoFactorManagementClient.d.ts.map +1 -1
  55. package/dist/components/management/TwoFactorManagementClient.js +270 -111
  56. package/dist/components/management/TwoFactorManagementClient.js.map +1 -1
  57. package/dist/components/management/index.js +2 -2
  58. package/dist/components/management/index.js.map +1 -1
  59. package/dist/components/management/views/ApiKeysView.d.ts +1 -1
  60. package/dist/components/management/views/ApiKeysView.d.ts.map +1 -1
  61. package/dist/components/management/views/ApiKeysView.js +19 -4
  62. package/dist/components/management/views/ApiKeysView.js.map +1 -1
  63. package/dist/components/management/views/PasskeysView.d.ts +1 -1
  64. package/dist/components/management/views/PasskeysView.d.ts.map +1 -1
  65. package/dist/components/management/views/PasskeysView.js +16 -4
  66. package/dist/components/management/views/PasskeysView.js.map +1 -1
  67. package/dist/components/management/views/TwoFactorView.d.ts +1 -1
  68. package/dist/components/management/views/TwoFactorView.d.ts.map +1 -1
  69. package/dist/components/management/views/TwoFactorView.js +16 -4
  70. package/dist/components/management/views/TwoFactorView.js.map +1 -1
  71. package/dist/components/management/views/index.js +2 -2
  72. package/dist/components/management/views/index.js.map +1 -1
  73. package/dist/components/twoFactor/TwoFactorSetupView.d.ts +1 -1
  74. package/dist/components/twoFactor/TwoFactorSetupView.d.ts.map +1 -1
  75. package/dist/components/twoFactor/TwoFactorSetupView.js +240 -87
  76. package/dist/components/twoFactor/TwoFactorSetupView.js.map +1 -1
  77. package/dist/components/twoFactor/TwoFactorVerifyView.d.ts +1 -1
  78. package/dist/components/twoFactor/TwoFactorVerifyView.d.ts.map +1 -1
  79. package/dist/components/twoFactor/TwoFactorVerifyView.js +108 -45
  80. package/dist/components/twoFactor/TwoFactorVerifyView.js.map +1 -1
  81. package/dist/components/twoFactor/index.js +2 -2
  82. package/dist/components/twoFactor/index.js.map +1 -1
  83. package/dist/exports/client.js +9 -10
  84. package/dist/exports/client.js.map +1 -1
  85. package/dist/exports/components.js +2 -2
  86. package/dist/exports/components.js.map +1 -1
  87. package/dist/exports/management.js +3 -3
  88. package/dist/exports/management.js.map +1 -1
  89. package/dist/exports/rsc.js +2 -2
  90. package/dist/exports/rsc.js.map +1 -1
  91. package/dist/generated-types.js +4 -2
  92. package/dist/generated-types.js.map +1 -1
  93. package/dist/index.js +6 -6
  94. package/dist/index.js.map +1 -1
  95. package/dist/plugin/index.js +198 -162
  96. package/dist/plugin/index.js.map +1 -1
  97. package/dist/scripts/generate-types.js +66 -50
  98. package/dist/scripts/generate-types.js.map +1 -1
  99. package/dist/types/apiKey.js +7 -2
  100. package/dist/types/apiKey.js.map +1 -1
  101. package/dist/types/betterAuth.js +23 -2
  102. package/dist/types/betterAuth.js.map +1 -1
  103. package/dist/utils/access.js +78 -81
  104. package/dist/utils/access.js.map +1 -1
  105. package/dist/utils/apiKeyAccess.js +65 -72
  106. package/dist/utils/apiKeyAccess.js.map +1 -1
  107. package/dist/utils/betterAuthDefaults.js +8 -8
  108. package/dist/utils/betterAuthDefaults.js.map +1 -1
  109. package/dist/utils/detectAuthConfig.js +8 -11
  110. package/dist/utils/detectAuthConfig.js.map +1 -1
  111. package/dist/utils/detectEnabledPlugins.js +6 -7
  112. package/dist/utils/detectEnabledPlugins.js.map +1 -1
  113. package/dist/utils/firstUserAdmin.js +18 -20
  114. package/dist/utils/firstUserAdmin.js.map +1 -1
  115. package/dist/utils/generateScopes.js +40 -41
  116. package/dist/utils/generateScopes.js.map +1 -1
  117. package/dist/utils/session.js +8 -9
  118. package/dist/utils/session.js.map +1 -1
  119. package/package.json +97 -26
  120. package/src/adapter/collections.ts +621 -0
  121. package/src/adapter/index.ts +712 -0
  122. package/src/components/BeforeLogin.tsx +39 -0
  123. package/src/components/LoginView.tsx +1516 -0
  124. package/src/components/LoginViewWrapper.tsx +35 -0
  125. package/src/components/LogoutButton.tsx +58 -0
  126. package/src/components/PasskeyRegisterButton.tsx +105 -0
  127. package/src/components/PasskeySignInButton.tsx +96 -0
  128. package/src/components/auth/ForgotPasswordView.tsx +274 -0
  129. package/src/components/auth/ResetPasswordView.tsx +331 -0
  130. package/src/components/auth/index.ts +8 -0
  131. package/src/components/management/ApiKeysManagementClient.tsx +988 -0
  132. package/src/components/management/PasskeysManagementClient.tsx +409 -0
  133. package/src/components/management/SecurityNavLinks.tsx +117 -0
  134. package/src/components/management/TwoFactorManagementClient.tsx +560 -0
  135. package/src/components/management/index.ts +20 -0
  136. package/src/components/management/views/ApiKeysView.tsx +57 -0
  137. package/src/components/management/views/PasskeysView.tsx +42 -0
  138. package/src/components/management/views/TwoFactorView.tsx +42 -0
  139. package/src/components/management/views/index.ts +10 -0
  140. package/src/components/twoFactor/TwoFactorSetupView.tsx +515 -0
  141. package/src/components/twoFactor/TwoFactorVerifyView.tsx +238 -0
  142. package/src/components/twoFactor/index.ts +8 -0
  143. package/src/exports/client.ts +77 -0
  144. package/src/exports/components.ts +30 -0
  145. package/src/exports/management.ts +25 -0
  146. package/src/exports/rsc.ts +11 -0
  147. package/src/generated-types.ts +269 -0
  148. package/src/index.ts +135 -0
  149. package/src/plugin/index.ts +834 -0
  150. package/src/scripts/generate-types.ts +269 -0
  151. package/src/types/apiKey.ts +63 -0
  152. package/src/types/betterAuth.ts +253 -0
  153. package/src/utils/access.ts +410 -0
  154. package/src/utils/apiKeyAccess.ts +443 -0
  155. package/src/utils/betterAuthDefaults.ts +102 -0
  156. package/src/utils/detectAuthConfig.ts +47 -0
  157. package/src/utils/detectEnabledPlugins.ts +69 -0
  158. package/src/utils/firstUserAdmin.ts +164 -0
  159. package/src/utils/generateScopes.ts +150 -0
  160. package/src/utils/session.ts +91 -0
@@ -6,8 +6,7 @@ import { useRouter } from 'next/navigation.js';
6
6
  * Two-factor authentication verification component.
7
7
  * Used during login flow when 2FA is enabled on the account.
8
8
  * Uses Better Auth's twoFactor plugin endpoints.
9
- */
10
- export function TwoFactorVerifyView({ logo, title = 'Two-Factor Authentication', afterVerifyPath = '/admin', onVerifyComplete, }) {
9
+ */ export function TwoFactorVerifyView({ logo, title = 'Two-Factor Authentication', afterVerifyPath = '/admin', onVerifyComplete }) {
11
10
  const router = useRouter();
12
11
  const [code, setCode] = useState('');
13
12
  const [error, setError] = useState(null);
@@ -18,77 +17,113 @@ export function TwoFactorVerifyView({ logo, title = 'Two-Factor Authentication',
18
17
  setLoading(true);
19
18
  setError(null);
20
19
  try {
21
- const endpoint = useBackupCode
22
- ? '/api/auth/two-factor/verify-backup-code'
23
- : '/api/auth/two-factor/verify-totp';
20
+ const endpoint = useBackupCode ? '/api/auth/two-factor/verify-backup-code' : '/api/auth/two-factor/verify-totp';
24
21
  const response = await fetch(endpoint, {
25
22
  method: 'POST',
26
- headers: { 'Content-Type': 'application/json' },
23
+ headers: {
24
+ 'Content-Type': 'application/json'
25
+ },
27
26
  credentials: 'include',
28
- body: JSON.stringify({ code }),
27
+ body: JSON.stringify({
28
+ code
29
+ })
29
30
  });
30
31
  if (response.ok) {
31
32
  onVerifyComplete?.();
32
33
  router.push(afterVerifyPath);
33
34
  router.refresh();
34
- }
35
- else {
36
- const data = await response.json().catch(() => ({}));
35
+ } else {
36
+ const data = await response.json().catch(()=>({}));
37
37
  setError(data.message || 'Invalid code. Please try again.');
38
38
  }
39
- }
40
- catch {
39
+ } catch {
41
40
  setError('An error occurred. Please try again.');
42
- }
43
- finally {
41
+ } finally{
44
42
  setLoading(false);
45
43
  }
46
44
  }
47
- return (_jsx("div", { style: {
45
+ return /*#__PURE__*/ _jsx("div", {
46
+ style: {
48
47
  minHeight: '100vh',
49
48
  display: 'flex',
50
49
  alignItems: 'center',
51
50
  justifyContent: 'center',
52
51
  background: 'var(--theme-bg)',
53
- padding: 'var(--base)',
54
- }, children: _jsxs("div", { style: {
52
+ padding: 'var(--base)'
53
+ },
54
+ children: /*#__PURE__*/ _jsxs("div", {
55
+ style: {
55
56
  background: 'var(--theme-elevation-50)',
56
57
  padding: 'calc(var(--base) * 2)',
57
58
  borderRadius: 'var(--style-radius-m)',
58
59
  boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',
59
60
  width: '100%',
60
- maxWidth: '400px',
61
- }, children: [logo && (_jsx("div", { style: {
61
+ maxWidth: '400px'
62
+ },
63
+ children: [
64
+ logo && /*#__PURE__*/ _jsx("div", {
65
+ style: {
62
66
  textAlign: 'center',
63
- marginBottom: 'calc(var(--base) * 1.5)',
64
- }, children: logo })), _jsx("h1", { style: {
67
+ marginBottom: 'calc(var(--base) * 1.5)'
68
+ },
69
+ children: logo
70
+ }),
71
+ /*#__PURE__*/ _jsx("h1", {
72
+ style: {
65
73
  color: 'var(--theme-text)',
66
74
  fontSize: 'var(--font-size-h3)',
67
75
  fontWeight: 600,
68
76
  margin: '0 0 calc(var(--base) * 0.5) 0',
69
- textAlign: 'center',
70
- }, children: title }), _jsx("p", { style: {
77
+ textAlign: 'center'
78
+ },
79
+ children: title
80
+ }),
81
+ /*#__PURE__*/ _jsx("p", {
82
+ style: {
71
83
  color: 'var(--theme-text)',
72
84
  opacity: 0.7,
73
85
  fontSize: 'var(--font-size-small)',
74
86
  textAlign: 'center',
75
- marginBottom: 'calc(var(--base) * 1.5)',
76
- }, children: useBackupCode
77
- ? 'Enter one of your backup codes.'
78
- : 'Enter the code from your authenticator app.' }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { style: { marginBottom: 'calc(var(--base) * 1.5)' }, children: [_jsx("label", { htmlFor: "code", style: {
87
+ marginBottom: 'calc(var(--base) * 1.5)'
88
+ },
89
+ children: useBackupCode ? 'Enter one of your backup codes.' : 'Enter the code from your authenticator app.'
90
+ }),
91
+ /*#__PURE__*/ _jsxs("form", {
92
+ onSubmit: handleSubmit,
93
+ children: [
94
+ /*#__PURE__*/ _jsxs("div", {
95
+ style: {
96
+ marginBottom: 'calc(var(--base) * 1.5)'
97
+ },
98
+ children: [
99
+ /*#__PURE__*/ _jsx("label", {
100
+ htmlFor: "code",
101
+ style: {
79
102
  display: 'block',
80
103
  color: 'var(--theme-text)',
81
104
  marginBottom: 'calc(var(--base) * 0.5)',
82
105
  fontSize: 'var(--font-size-small)',
83
- fontWeight: 500,
84
- }, children: useBackupCode ? 'Backup Code' : 'Verification Code' }), _jsx("input", { id: "code", type: "text", inputMode: useBackupCode ? 'text' : 'numeric', pattern: useBackupCode ? undefined : '[0-9]*', autoComplete: "one-time-code", value: code, onChange: (e) => {
106
+ fontWeight: 500
107
+ },
108
+ children: useBackupCode ? 'Backup Code' : 'Verification Code'
109
+ }),
110
+ /*#__PURE__*/ _jsx("input", {
111
+ id: "code",
112
+ type: "text",
113
+ inputMode: useBackupCode ? 'text' : 'numeric',
114
+ pattern: useBackupCode ? undefined : '[0-9]*',
115
+ autoComplete: "one-time-code",
116
+ value: code,
117
+ onChange: (e)=>{
85
118
  if (useBackupCode) {
86
119
  setCode(e.target.value);
87
- }
88
- else {
120
+ } else {
89
121
  setCode(e.target.value.replace(/\D/g, '').slice(0, 6));
90
122
  }
91
- }, required: true, placeholder: useBackupCode ? 'xxxxxxxx' : '000000', style: {
123
+ },
124
+ required: true,
125
+ placeholder: useBackupCode ? 'xxxxxxxx' : '000000',
126
+ style: {
92
127
  width: '100%',
93
128
  padding: 'calc(var(--base) * 0.75)',
94
129
  background: 'var(--theme-input-bg)',
@@ -100,16 +135,27 @@ export function TwoFactorVerifyView({ logo, title = 'Two-Factor Authentication',
100
135
  textAlign: 'center',
101
136
  letterSpacing: useBackupCode ? '0.2em' : '0.5em',
102
137
  outline: 'none',
103
- boxSizing: 'border-box',
104
- } })] }), error && (_jsx("div", { style: {
138
+ boxSizing: 'border-box'
139
+ }
140
+ })
141
+ ]
142
+ }),
143
+ error && /*#__PURE__*/ _jsx("div", {
144
+ style: {
105
145
  color: 'var(--theme-error-500)',
106
146
  marginBottom: 'var(--base)',
107
147
  fontSize: 'var(--font-size-small)',
108
148
  padding: 'calc(var(--base) * 0.5)',
109
149
  background: 'var(--theme-error-50)',
110
150
  borderRadius: 'var(--style-radius-s)',
111
- border: '1px solid var(--theme-error-200)',
112
- }, children: error })), _jsx("button", { type: "submit", disabled: loading || (!useBackupCode && code.length !== 6), style: {
151
+ border: '1px solid var(--theme-error-200)'
152
+ },
153
+ children: error
154
+ }),
155
+ /*#__PURE__*/ _jsx("button", {
156
+ type: "submit",
157
+ disabled: loading || !useBackupCode && code.length !== 6,
158
+ style: {
113
159
  width: '100%',
114
160
  padding: 'calc(var(--base) * 0.75)',
115
161
  background: 'var(--theme-elevation-800)',
@@ -118,15 +164,25 @@ export function TwoFactorVerifyView({ logo, title = 'Two-Factor Authentication',
118
164
  color: 'var(--theme-elevation-50)',
119
165
  fontSize: 'var(--font-size-base)',
120
166
  fontWeight: 500,
121
- cursor: loading || (!useBackupCode && code.length !== 6) ? 'not-allowed' : 'pointer',
122
- opacity: loading || (!useBackupCode && code.length !== 6) ? 0.7 : 1,
167
+ cursor: loading || !useBackupCode && code.length !== 6 ? 'not-allowed' : 'pointer',
168
+ opacity: loading || !useBackupCode && code.length !== 6 ? 0.7 : 1,
123
169
  transition: 'opacity 150ms ease',
124
- marginBottom: 'var(--base)',
125
- }, children: loading ? 'Verifying...' : 'Verify' }), _jsx("div", { style: { textAlign: 'center' }, children: _jsx("button", { type: "button", onClick: () => {
170
+ marginBottom: 'var(--base)'
171
+ },
172
+ children: loading ? 'Verifying...' : 'Verify'
173
+ }),
174
+ /*#__PURE__*/ _jsx("div", {
175
+ style: {
176
+ textAlign: 'center'
177
+ },
178
+ children: /*#__PURE__*/ _jsx("button", {
179
+ type: "button",
180
+ onClick: ()=>{
126
181
  setUseBackupCode(!useBackupCode);
127
182
  setCode('');
128
183
  setError(null);
129
- }, style: {
184
+ },
185
+ style: {
130
186
  background: 'none',
131
187
  border: 'none',
132
188
  color: 'var(--theme-text)',
@@ -134,10 +190,17 @@ export function TwoFactorVerifyView({ logo, title = 'Two-Factor Authentication',
134
190
  fontSize: 'var(--font-size-small)',
135
191
  textDecoration: 'underline',
136
192
  cursor: 'pointer',
137
- padding: 0,
138
- }, children: useBackupCode
139
- ? 'Use authenticator app instead'
140
- : 'Use a backup code instead' }) })] })] }) }));
193
+ padding: 0
194
+ },
195
+ children: useBackupCode ? 'Use authenticator app instead' : 'Use a backup code instead'
196
+ })
197
+ })
198
+ ]
199
+ })
200
+ ]
201
+ })
202
+ });
141
203
  }
142
204
  export default TwoFactorVerifyView;
205
+
143
206
  //# sourceMappingURL=TwoFactorVerifyView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TwoFactorVerifyView.js","sourceRoot":"","sources":["../../../src/components/twoFactor/TwoFactorVerifyView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/components/twoFactor/TwoFactorVerifyView.tsx"],"sourcesContent":["'use client'\n\nimport { useState, type FormEvent } from 'react'\nimport { useRouter } from 'next/navigation.js'\n\nexport type TwoFactorVerifyViewProps = {\n /** Custom logo element */\n logo?: React.ReactNode\n /** Page title. Default: 'Two-Factor Authentication' */\n title?: string\n /** Path to redirect after successful verification. Default: '/admin' */\n afterVerifyPath?: string\n /** Callback after successful verification */\n onVerifyComplete?: () => void\n}\n\n/**\n * Two-factor authentication verification component.\n * Used during login flow when 2FA is enabled on the account.\n * Uses Better Auth's twoFactor plugin endpoints.\n */\nexport function TwoFactorVerifyView({\n logo,\n title = 'Two-Factor Authentication',\n afterVerifyPath = '/admin',\n onVerifyComplete,\n}: TwoFactorVerifyViewProps) {\n const router = useRouter()\n const [code, setCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [loading, setLoading] = useState(false)\n const [useBackupCode, setUseBackupCode] = useState(false)\n\n async function handleSubmit(e: FormEvent) {\n e.preventDefault()\n setLoading(true)\n setError(null)\n\n try {\n const endpoint = useBackupCode\n ? '/api/auth/two-factor/verify-backup-code'\n : '/api/auth/two-factor/verify-totp'\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ code }),\n })\n\n if (response.ok) {\n onVerifyComplete?.()\n router.push(afterVerifyPath)\n router.refresh()\n } else {\n const data = await response.json().catch(() => ({}))\n setError(data.message || 'Invalid code. Please try again.')\n }\n } catch {\n setError('An error occurred. Please try again.')\n } finally {\n setLoading(false)\n }\n }\n\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n padding: 'var(--base)',\n }}\n >\n <div\n style={{\n background: 'var(--theme-elevation-50)',\n padding: 'calc(var(--base) * 2)',\n borderRadius: 'var(--style-radius-m)',\n boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',\n width: '100%',\n maxWidth: '400px',\n }}\n >\n {logo && (\n <div\n style={{\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {logo}\n </div>\n )}\n\n <h1\n style={{\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n margin: '0 0 calc(var(--base) * 0.5) 0',\n textAlign: 'center',\n }}\n >\n {title}\n </h1>\n\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {useBackupCode\n ? 'Enter one of your backup codes.'\n : 'Enter the code from your authenticator app.'}\n </p>\n\n <form onSubmit={handleSubmit}>\n <div style={{ marginBottom: 'calc(var(--base) * 1.5)' }}>\n <label\n htmlFor=\"code\"\n style={{\n display: 'block',\n color: 'var(--theme-text)',\n marginBottom: 'calc(var(--base) * 0.5)',\n fontSize: 'var(--font-size-small)',\n fontWeight: 500,\n }}\n >\n {useBackupCode ? 'Backup Code' : 'Verification Code'}\n </label>\n <input\n id=\"code\"\n type=\"text\"\n inputMode={useBackupCode ? 'text' : 'numeric'}\n pattern={useBackupCode ? undefined : '[0-9]*'}\n autoComplete=\"one-time-code\"\n value={code}\n onChange={(e) => {\n if (useBackupCode) {\n setCode(e.target.value)\n } else {\n setCode(e.target.value.replace(/\\D/g, '').slice(0, 6))\n }\n }}\n required\n placeholder={useBackupCode ? 'xxxxxxxx' : '000000'}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-input-bg)',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-h4)',\n fontFamily: 'monospace',\n textAlign: 'center',\n letterSpacing: useBackupCode ? '0.2em' : '0.5em',\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {error && (\n <div\n style={{\n color: 'var(--theme-error-500)',\n marginBottom: 'var(--base)',\n fontSize: 'var(--font-size-small)',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-error-50)',\n borderRadius: 'var(--style-radius-s)',\n border: '1px solid var(--theme-error-200)',\n }}\n >\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={loading || (!useBackupCode && code.length !== 6)}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.75)',\n background: 'var(--theme-elevation-800)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-elevation-50)',\n fontSize: 'var(--font-size-base)',\n fontWeight: 500,\n cursor: loading || (!useBackupCode && code.length !== 6) ? 'not-allowed' : 'pointer',\n opacity: loading || (!useBackupCode && code.length !== 6) ? 0.7 : 1,\n transition: 'opacity 150ms ease',\n marginBottom: 'var(--base)',\n }}\n >\n {loading ? 'Verifying...' : 'Verify'}\n </button>\n\n <div style={{ textAlign: 'center' }}>\n <button\n type=\"button\"\n onClick={() => {\n setUseBackupCode(!useBackupCode)\n setCode('')\n setError(null)\n }}\n style={{\n background: 'none',\n border: 'none',\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n textDecoration: 'underline',\n cursor: 'pointer',\n padding: 0,\n }}\n >\n {useBackupCode\n ? 'Use authenticator app instead'\n : 'Use a backup code instead'}\n </button>\n </div>\n </form>\n </div>\n </div>\n )\n}\n\nexport default TwoFactorVerifyView\n"],"names":["useState","useRouter","TwoFactorVerifyView","logo","title","afterVerifyPath","onVerifyComplete","router","code","setCode","error","setError","loading","setLoading","useBackupCode","setUseBackupCode","handleSubmit","e","preventDefault","endpoint","response","fetch","method","headers","credentials","body","JSON","stringify","ok","push","refresh","data","json","catch","message","div","style","minHeight","display","alignItems","justifyContent","background","padding","borderRadius","boxShadow","width","maxWidth","textAlign","marginBottom","h1","color","fontSize","fontWeight","margin","p","opacity","form","onSubmit","label","htmlFor","input","id","type","inputMode","pattern","undefined","autoComplete","value","onChange","target","replace","slice","required","placeholder","border","fontFamily","letterSpacing","outline","boxSizing","button","disabled","length","cursor","transition","onClick","textDecoration"],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Two-factor authentication UI components
3
3
  *
4
4
  * @packageDocumentation
5
- */
6
- export { TwoFactorSetupView } from './TwoFactorSetupView.js';
5
+ */ export { TwoFactorSetupView } from './TwoFactorSetupView.js';
7
6
  export { TwoFactorVerifyView } from './TwoFactorVerifyView.js';
7
+
8
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/twoFactor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,mBAAmB,EAAiC,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"sources":["../../../src/components/twoFactor/index.ts"],"sourcesContent":["/**\n * Two-factor authentication UI components\n *\n * @packageDocumentation\n */\n\nexport { TwoFactorSetupView, type TwoFactorSetupViewProps } from './TwoFactorSetupView.js'\nexport { TwoFactorVerifyView, type TwoFactorVerifyViewProps } from './TwoFactorVerifyView.js'\n"],"names":["TwoFactorSetupView","TwoFactorVerifyView"],"mappings":"AAAA;;;;CAIC,GAED,SAASA,kBAAkB,QAAsC,0BAAyB;AAC1F,SAASC,mBAAmB,QAAuC,2BAA0B"}
@@ -1,8 +1,7 @@
1
1
  /**
2
2
  * Client-side auth utilities
3
3
  * Re-exports createAuthClient from better-auth/react and common plugins
4
- */
5
- import { createAuthClient } from 'better-auth/react';
4
+ */ import { createAuthClient } from 'better-auth/react';
6
5
  import { twoFactorClient, apiKeyClient } from 'better-auth/client/plugins';
7
6
  import { passkeyClient } from '@better-auth/passkey/client';
8
7
  // Re-export createAuthClient and common plugins
@@ -24,11 +23,10 @@ export { passkeyClient } from '@better-auth/passkey/client';
24
23
  *
25
24
  * // authClient.subscription is fully typed!
26
25
  * ```
27
- */
28
- export const payloadAuthPlugins = [
26
+ */ export const payloadAuthPlugins = [
29
27
  twoFactorClient(),
30
28
  apiKeyClient(),
31
- passkeyClient(),
29
+ passkeyClient()
32
30
  ];
33
31
  /**
34
32
  * Create a pre-configured auth client with default plugins (twoFactor, apiKey, passkey).
@@ -55,12 +53,13 @@ export const payloadAuthPlugins = [
55
53
  * plugins: [...payloadAuthPlugins, stripeClient({ subscription: true })],
56
54
  * })
57
55
  * ```
58
- */
59
- export function createPayloadAuthClient(options) {
56
+ */ export function createPayloadAuthClient(options) {
60
57
  return createAuthClient({
61
- baseURL: options?.baseURL ??
62
- (typeof window !== 'undefined' ? window.location.origin : ''),
63
- plugins: [...payloadAuthPlugins],
58
+ baseURL: options?.baseURL ?? (typeof window !== 'undefined' ? window.location.origin : ''),
59
+ plugins: [
60
+ ...payloadAuthPlugins
61
+ ]
64
62
  });
65
63
  }
64
+
66
65
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,gDAAgD;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,eAAe,EAAE;IACjB,YAAY,EAAE;IACd,aAAa,EAAE;CACP,CAAA;AAOV;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAkC;IACxE,OAAO,gBAAgB,CAAC;QACtB,OAAO,EACL,OAAO,EAAE,OAAO;YAChB,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC,GAAG,kBAAkB,CAAC;KACjC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["/**\n * Client-side auth utilities\n * Re-exports createAuthClient from better-auth/react and common plugins\n */\n\nimport { createAuthClient } from 'better-auth/react'\nimport { twoFactorClient, apiKeyClient } from 'better-auth/client/plugins'\nimport { passkeyClient } from '@better-auth/passkey/client'\n\n// Re-export createAuthClient and common plugins\nexport { createAuthClient } from 'better-auth/react'\nexport { twoFactorClient, apiKeyClient } from 'better-auth/client/plugins'\nexport { passkeyClient } from '@better-auth/passkey/client'\n\n/**\n * Default plugins included with Payload Better Auth.\n * Use this with createAuthClient when you need custom plugins with full type safety.\n *\n * @example With custom plugins (full type safety)\n * ```typescript\n * import { createAuthClient, payloadAuthPlugins } from '@delmaredigital/payload-better-auth/client'\n * import { stripeClient } from '@better-auth/stripe/client'\n *\n * export const authClient = createAuthClient({\n * plugins: [...payloadAuthPlugins, stripeClient({ subscription: true })],\n * })\n *\n * // authClient.subscription is fully typed!\n * ```\n */\nexport const payloadAuthPlugins = [\n twoFactorClient(),\n apiKeyClient(),\n passkeyClient(),\n] as const\n\nexport interface PayloadAuthClientOptions {\n /** Base URL for auth endpoints (defaults to window.location.origin) */\n baseURL?: string\n}\n\n/**\n * Create a pre-configured auth client with default plugins (twoFactor, apiKey, passkey).\n *\n * This is a convenience wrapper for simple setups. For custom plugins with full type\n * safety, use `createAuthClient` with `payloadAuthPlugins` instead.\n *\n * @param options - Optional configuration\n * @param options.baseURL - Base URL for auth endpoints (defaults to window.location.origin)\n *\n * @example Basic usage (no custom plugins)\n * ```typescript\n * import { createPayloadAuthClient } from '@delmaredigital/payload-better-auth/client'\n *\n * export const authClient = createPayloadAuthClient()\n * ```\n *\n * @example With custom plugins (use createAuthClient for full type safety)\n * ```typescript\n * import { createAuthClient, payloadAuthPlugins } from '@delmaredigital/payload-better-auth/client'\n * import { stripeClient } from '@better-auth/stripe/client'\n *\n * export const authClient = createAuthClient({\n * plugins: [...payloadAuthPlugins, stripeClient({ subscription: true })],\n * })\n * ```\n */\nexport function createPayloadAuthClient(options?: PayloadAuthClientOptions) {\n return createAuthClient({\n baseURL:\n options?.baseURL ??\n (typeof window !== 'undefined' ? window.location.origin : ''),\n plugins: [...payloadAuthPlugins],\n })\n}\n\nexport type PayloadAuthClient = ReturnType<typeof createPayloadAuthClient>\n"],"names":["createAuthClient","twoFactorClient","apiKeyClient","passkeyClient","payloadAuthPlugins","createPayloadAuthClient","options","baseURL","window","location","origin","plugins"],"mappings":"AAAA;;;CAGC,GAED,SAASA,gBAAgB,QAAQ,oBAAmB;AACpD,SAASC,eAAe,EAAEC,YAAY,QAAQ,6BAA4B;AAC1E,SAASC,aAAa,QAAQ,8BAA6B;AAE3D,gDAAgD;AAChD,SAASH,gBAAgB,QAAQ,oBAAmB;AACpD,SAASC,eAAe,EAAEC,YAAY,QAAQ,6BAA4B;AAC1E,SAASC,aAAa,QAAQ,8BAA6B;AAE3D;;;;;;;;;;;;;;;CAeC,GACD,OAAO,MAAMC,qBAAqB;IAChCH;IACAC;IACAC;CACD,CAAS;AAOV;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,SAASE,wBAAwBC,OAAkC;IACxE,OAAON,iBAAiB;QACtBO,SACED,SAASC,WACR,CAAA,OAAOC,WAAW,cAAcA,OAAOC,QAAQ,CAACC,MAAM,GAAG,EAAC;QAC7DC,SAAS;eAAIP;SAAmB;IAClC;AACF"}
@@ -3,8 +3,7 @@
3
3
  *
4
4
  * These components are auto-injected when disableLocalStrategy is detected.
5
5
  * They can also be used standalone or customized.
6
- */
7
- export { LogoutButton } from '../components/LogoutButton.js';
6
+ */ export { LogoutButton } from '../components/LogoutButton.js';
8
7
  export { BeforeLogin } from '../components/BeforeLogin.js';
9
8
  export { LoginView } from '../components/LoginView.js';
10
9
  export { ForgotPasswordView } from '../components/auth/ForgotPasswordView.js';
@@ -13,4 +12,5 @@ export { TwoFactorSetupView } from '../components/twoFactor/TwoFactorSetupView.j
13
12
  export { TwoFactorVerifyView } from '../components/twoFactor/TwoFactorVerifyView.js';
14
13
  export { PasskeySignInButton } from '../components/PasskeySignInButton.js';
15
14
  export { PasskeyRegisterButton } from '../components/PasskeyRegisterButton.js';
15
+
16
16
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/exports/components.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAItD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAA;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAI3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+CAA+C,CAAA;AAElF,OAAO,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAA;AAIpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAE1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAA"}
1
+ {"version":3,"sources":["../../src/exports/components.ts"],"sourcesContent":["/**\n * Admin Components for Better Auth\n *\n * These components are auto-injected when disableLocalStrategy is detected.\n * They can also be used standalone or customized.\n */\n\nexport { LogoutButton } from '../components/LogoutButton.js'\nexport type { BeforeLoginProps } from '../components/BeforeLogin.js'\nexport { BeforeLogin } from '../components/BeforeLogin.js'\nexport type { LoginViewProps } from '../components/LoginView.js'\nexport { LoginView } from '../components/LoginView.js'\n\n// Password reset components\nexport type { ForgotPasswordViewProps } from '../components/auth/ForgotPasswordView.js'\nexport { ForgotPasswordView } from '../components/auth/ForgotPasswordView.js'\nexport type { ResetPasswordViewProps } from '../components/auth/ResetPasswordView.js'\nexport { ResetPasswordView } from '../components/auth/ResetPasswordView.js'\n\n// Two-factor authentication components\nexport type { TwoFactorSetupViewProps } from '../components/twoFactor/TwoFactorSetupView.js'\nexport { TwoFactorSetupView } from '../components/twoFactor/TwoFactorSetupView.js'\nexport type { TwoFactorVerifyViewProps } from '../components/twoFactor/TwoFactorVerifyView.js'\nexport { TwoFactorVerifyView } from '../components/twoFactor/TwoFactorVerifyView.js'\n\n// Passkey authentication\nexport type { PasskeySignInButtonProps } from '../components/PasskeySignInButton.js'\nexport { PasskeySignInButton } from '../components/PasskeySignInButton.js'\nexport type { PasskeyRegisterButtonProps } from '../components/PasskeyRegisterButton.js'\nexport { PasskeyRegisterButton } from '../components/PasskeyRegisterButton.js'\n"],"names":["LogoutButton","BeforeLogin","LoginView","ForgotPasswordView","ResetPasswordView","TwoFactorSetupView","TwoFactorVerifyView","PasskeySignInButton","PasskeyRegisterButton"],"mappings":"AAAA;;;;;CAKC,GAED,SAASA,YAAY,QAAQ,gCAA+B;AAE5D,SAASC,WAAW,QAAQ,+BAA8B;AAE1D,SAASC,SAAS,QAAQ,6BAA4B;AAItD,SAASC,kBAAkB,QAAQ,2CAA0C;AAE7E,SAASC,iBAAiB,QAAQ,0CAAyC;AAI3E,SAASC,kBAAkB,QAAQ,gDAA+C;AAElF,SAASC,mBAAmB,QAAQ,iDAAgD;AAIpF,SAASC,mBAAmB,QAAQ,uCAAsC;AAE1E,SAASC,qBAAqB,QAAQ,yCAAwC"}
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * Client components for managing security features in the Payload admin panel.
5
5
  * For server component views, use the './rsc' export.
6
- */
7
- // Client components
8
- export { SecurityNavLinks, TwoFactorManagementClient, ApiKeysManagementClient, PasskeysManagementClient, } from '../components/management/index.js';
6
+ */ // Client components
7
+ export { SecurityNavLinks, TwoFactorManagementClient, ApiKeysManagementClient, PasskeysManagementClient } from '../components/management/index.js';
9
8
  // Re-export plugin detection utility
10
9
  export { detectEnabledPlugins } from '../utils/detectEnabledPlugins.js';
10
+
11
11
  //# sourceMappingURL=management.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"management.js","sourceRoot":"","sources":["../../src/exports/management.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,mCAAmC,CAAA;AAS1C,qCAAqC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"sources":["../../src/exports/management.ts"],"sourcesContent":["/**\n * Management UI Components Export\n *\n * Client components for managing security features in the Payload admin panel.\n * For server component views, use the './rsc' export.\n */\n\n// Client components\nexport {\n SecurityNavLinks,\n TwoFactorManagementClient,\n ApiKeysManagementClient,\n PasskeysManagementClient,\n} from '../components/management/index.js'\n\nexport type {\n SecurityNavLinksProps,\n TwoFactorManagementClientProps,\n ApiKeysManagementClientProps,\n PasskeysManagementClientProps,\n} from '../components/management/index.js'\n\n// Re-export plugin detection utility\nexport { detectEnabledPlugins } from '../utils/detectEnabledPlugins.js'\nexport type { EnabledPluginsResult } from '../utils/detectEnabledPlugins.js'\n"],"names":["SecurityNavLinks","TwoFactorManagementClient","ApiKeysManagementClient","PasskeysManagementClient","detectEnabledPlugins"],"mappings":"AAAA;;;;;CAKC,GAED,oBAAoB;AACpB,SACEA,gBAAgB,EAChBC,yBAAyB,EACzBC,uBAAuB,EACvBC,wBAAwB,QACnB,oCAAmC;AAS1C,qCAAqC;AACrC,SAASC,oBAAoB,QAAQ,mCAAkC"}
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * These async server components use DefaultTemplate for proper
5
5
  * integration with Payload's admin panel layout.
6
- */
7
- export { LoginViewWrapper } from '../components/LoginViewWrapper.js';
6
+ */ export { LoginViewWrapper } from '../components/LoginViewWrapper.js';
8
7
  export { TwoFactorView } from '../components/management/views/TwoFactorView.js';
9
8
  export { ApiKeysView } from '../components/management/views/ApiKeysView.js';
10
9
  export { PasskeysView } from '../components/management/views/PasskeysView.js';
10
+
11
11
  //# sourceMappingURL=rsc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rsc.js","sourceRoot":"","sources":["../../src/exports/rsc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAA"}
1
+ {"version":3,"sources":["../../src/exports/rsc.ts"],"sourcesContent":["/**\n * React Server Component Views for Better Auth\n *\n * These async server components use DefaultTemplate for proper\n * integration with Payload's admin panel layout.\n */\n\nexport { LoginViewWrapper } from '../components/LoginViewWrapper.js'\nexport { TwoFactorView } from '../components/management/views/TwoFactorView.js'\nexport { ApiKeysView } from '../components/management/views/ApiKeysView.js'\nexport { PasskeysView } from '../components/management/views/PasskeysView.js'\n"],"names":["LoginViewWrapper","TwoFactorView","ApiKeysView","PasskeysView"],"mappings":"AAAA;;;;;CAKC,GAED,SAASA,gBAAgB,QAAQ,oCAAmC;AACpE,SAASC,aAAa,QAAQ,kDAAiD;AAC/E,SAASC,WAAW,QAAQ,gDAA+C;AAC3E,SAASC,YAAY,QAAQ,iDAAgD"}
@@ -4,6 +4,8 @@
4
4
  *
5
5
  * Generated from Better Auth schema introspection.
6
6
  * Contains types for all supported plugins and their field additions.
7
- */
8
- export {};
7
+ */ /**
8
+ * Union of all model names in the schema.
9
+ */ export { };
10
+
9
11
  //# sourceMappingURL=generated-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated-types.js","sourceRoot":"","sources":["../src/generated-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
1
+ {"version":3,"sources":["../src/generated-types.ts"],"sourcesContent":["/**\n * Auto-generated Better Auth types.\n * DO NOT EDIT - Run `pnpm generate:types` to regenerate.\n *\n * Generated from Better Auth schema introspection.\n * Contains types for all supported plugins and their field additions.\n */\n\nexport type BaseUserFields = {\n name: string\n email: string\n emailVerified: boolean\n image?: string\n createdAt: Date\n updatedAt: Date\n role?: string\n}\n\nexport type UserPluginFields = {\n \"username\": {\n username?: string\n displayUsername?: string\n }\n \"admin\": {\n banned?: boolean\n banReason?: string\n banExpires?: Date\n }\n \"phone-number\": {\n phoneNumber?: string\n phoneNumberVerified?: boolean\n }\n \"anonymous\": {\n isAnonymous?: boolean\n }\n \"two-factor\": {\n twoFactorEnabled?: boolean\n }\n}\n\nexport type User = BaseUserFields & UserPluginFields[\"username\"] & UserPluginFields[\"admin\"] & UserPluginFields[\"phone-number\"] & UserPluginFields[\"anonymous\"] & UserPluginFields[\"two-factor\"]\n\nexport type BaseSessionFields = {\n expiresAt: Date\n token: string\n createdAt: Date\n updatedAt: Date\n ipAddress?: string\n userAgent?: string\n userId: string\n}\n\nexport type SessionPluginFields = {\n \"admin\": {\n impersonatedBy?: string\n }\n \"organization\": {\n activeOrganizationId?: string\n activeTeamId?: string\n }\n}\n\nexport type Session = BaseSessionFields & SessionPluginFields[\"admin\"] & SessionPluginFields[\"organization\"]\n\nexport type BaseAccountFields = {\n accountId: string\n providerId: string\n userId: string\n accessToken?: string\n refreshToken?: string\n idToken?: string\n accessTokenExpiresAt?: Date\n refreshTokenExpiresAt?: Date\n scope?: string\n password?: string\n createdAt: Date\n updatedAt: Date\n}\n\nexport type Account = BaseAccountFields\n\nexport type BaseVerificationFields = {\n identifier: string\n value: string\n expiresAt: Date\n createdAt: Date\n updatedAt: Date\n}\n\nexport type Verification = BaseVerificationFields\n\nexport type ApikeyFields = {\n name?: string\n start?: string\n prefix?: string\n key: string\n userId: string\n refillInterval?: number\n refillAmount?: number\n lastRefillAt?: Date\n enabled?: boolean\n rateLimitEnabled?: boolean\n rateLimitTimeWindow?: number\n rateLimitMax?: number\n requestCount?: number\n remaining?: number\n lastRequest?: Date\n expiresAt?: Date\n createdAt: Date\n updatedAt: Date\n permissions?: string\n metadata?: string\n}\n\nexport type Apikey = ApikeyFields\n\nexport type PasskeyFields = {\n name?: string\n publicKey: string\n userId: string\n credentialID: string\n counter: number\n deviceType: string\n backedUp: boolean\n transports?: string\n createdAt?: Date\n aaguid?: string\n}\n\nexport type Passkey = PasskeyFields\n\nexport type OauthApplicationFields = {\n name?: string\n icon?: string\n metadata?: string\n clientId?: string\n clientSecret?: string\n redirectUrls?: string\n type?: string\n disabled?: boolean\n userId?: string\n createdAt?: Date\n updatedAt?: Date\n}\n\nexport type OauthApplication = OauthApplicationFields\n\nexport type OauthAccessTokenFields = {\n accessToken?: string\n refreshToken?: string\n accessTokenExpiresAt?: Date\n refreshTokenExpiresAt?: Date\n clientId?: string\n userId?: string\n scopes?: string\n createdAt?: Date\n updatedAt?: Date\n}\n\nexport type OauthAccessToken = OauthAccessTokenFields\n\nexport type OauthConsentFields = {\n clientId?: string\n userId?: string\n scopes?: string\n createdAt?: Date\n updatedAt?: Date\n consentGiven?: boolean\n}\n\nexport type OauthConsent = OauthConsentFields\n\nexport type OrganizationFields = {\n name: string\n slug: string\n logo?: string\n createdAt: Date\n metadata?: string\n}\n\nexport type Organization = OrganizationFields\n\nexport type TeamFields = {\n name: string\n organizationId: string\n createdAt: Date\n updatedAt?: Date\n}\n\nexport type Team = TeamFields\n\nexport type TeamMemberFields = {\n teamId: string\n userId: string\n createdAt?: Date\n}\n\nexport type TeamMember = TeamMemberFields\n\nexport type MemberFields = {\n organizationId: string\n userId: string\n role: string\n createdAt: Date\n}\n\nexport type Member = MemberFields\n\nexport type InvitationFields = {\n organizationId: string\n email: string\n role?: string\n teamId?: string\n status: string\n expiresAt: Date\n createdAt: Date\n inviterId: string\n}\n\nexport type Invitation = InvitationFields\n\nexport type JwksFields = {\n publicKey: string\n privateKey: string\n createdAt: Date\n expiresAt?: Date\n}\n\nexport type Jwks = JwksFields\n\nexport type TwoFactorFields = {\n secret: string\n backupCodes: string\n userId: string\n}\n\nexport type TwoFactor = TwoFactorFields\n\n/**\n * Union of all supported plugin identifiers.\n */\nexport type PluginId = \"username\" | \"admin\" | \"api-key\" | \"passkey\" | \"bearer\" | \"email-otp\" | \"magic-link\" | \"phone-number\" | \"one-tap\" | \"anonymous\" | \"multi-session\" | \"one-time-token\" | \"oidc\" | \"generic-oauth\" | \"open-api\" | \"organization\" | \"jwt\" | \"two-factor\"\n\n/**\n * Complete schema mapping of all models to their types.\n */\nexport type BetterAuthFullSchema = {\n \"user\": User\n \"session\": Session\n \"account\": Account\n \"verification\": Verification\n \"apikey\": Apikey\n \"passkey\": Passkey\n \"oauthApplication\": OauthApplication\n \"oauthAccessToken\": OauthAccessToken\n \"oauthConsent\": OauthConsent\n \"organization\": Organization\n \"team\": Team\n \"teamMember\": TeamMember\n \"member\": Member\n \"invitation\": Invitation\n \"jwks\": Jwks\n \"twoFactor\": TwoFactor\n}\n\n/**\n * Union of all model names in the schema.\n */\nexport type ModelKey = keyof BetterAuthFullSchema\n"],"names":[],"mappings":"AAAA;;;;;;CAMC,GAmQD;;CAEC,GACD,WAAiD"}
package/dist/index.js CHANGED
@@ -5,19 +5,18 @@
5
5
  * Enables seamless integration between Better Auth and Payload.
6
6
  *
7
7
  * @packageDocumentation
8
- */
9
- // Adapter
8
+ */ // Adapter
10
9
  export { payloadAdapter } from './adapter/index.js';
11
10
  // Collection generator plugin
12
11
  export { betterAuthCollections } from './adapter/collections.js';
13
12
  // Payload plugin and strategy
14
- export { createBetterAuthPlugin, betterAuthStrategy, resetAuthInstance, getApiKeyScopesConfig, } from './plugin/index.js';
13
+ export { createBetterAuthPlugin, betterAuthStrategy, resetAuthInstance, getApiKeyScopesConfig } from './plugin/index.js';
15
14
  // Scope utilities
16
- export { generateScopesFromCollections, buildAvailableScopes, scopesToPermissions, } from './utils/generateScopes.js';
15
+ export { generateScopesFromCollections, buildAvailableScopes, scopesToPermissions } from './utils/generateScopes.js';
17
16
  // Access control utilities
18
- export { normalizeRoles, hasAnyRole, hasAllRoles, hasAdminRoles, isAdmin, isAdminField, isAdminOrSelf, canUpdateOwnFields, isAuthenticated, isAuthenticatedField, hasRole, hasRoleField, requireAllRoles, } from './utils/access.js';
17
+ export { normalizeRoles, hasAnyRole, hasAllRoles, hasAdminRoles, isAdmin, isAdminField, isAdminOrSelf, canUpdateOwnFields, isAuthenticated, isAuthenticatedField, hasRole, hasRoleField, requireAllRoles } from './utils/access.js';
19
18
  // API key scope enforcement utilities
20
- export { extractApiKeyFromRequest, getApiKeyInfo, hasScope, hasAnyScope as hasAnyScopeKey, hasAllScopes as hasAllScopesKey, requireScope, requireAnyScope, requireAllScopes as requireAllScopesKey, allowSessionOrScope, allowSessionOrAnyScope, validateApiKey, } from './utils/apiKeyAccess.js';
19
+ export { extractApiKeyFromRequest, getApiKeyInfo, hasScope, hasAnyScope as hasAnyScopeKey, hasAllScopes as hasAllScopesKey, requireScope, requireAnyScope, requireAllScopes as requireAllScopesKey, allowSessionOrScope, allowSessionOrAnyScope, validateApiKey } from './utils/apiKeyAccess.js';
21
20
  // Auth config detection utility
22
21
  export { detectAuthConfig } from './utils/detectAuthConfig.js';
23
22
  // Session utilities
@@ -26,4 +25,5 @@ export { getServerSession, getServerUser } from './utils/session.js';
26
25
  export { firstUserAdminHooks } from './utils/firstUserAdmin.js';
27
26
  // Better Auth defaults utility
28
27
  export { withBetterAuthDefaults, apiKeyWithDefaults } from './utils/betterAuthDefaults.js';
28
+
29
29
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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,EACjB,qBAAqB,GACtB,MAAM,mBAAmB,CAAA;AAkD1B,kBAAkB;AAClB,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,2BAA2B,CAAA;AAElC,2BAA2B;AAC3B,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,OAAO,EACP,YAAY,EACZ,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAO1B,sCAAsC;AACtC,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,QAAQ,EACR,WAAW,IAAI,cAAc,EAC7B,YAAY,IAAI,eAAe,EAC/B,YAAY,EACZ,eAAe,EACf,gBAAgB,IAAI,mBAAmB,EACvC,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,GACf,MAAM,yBAAyB,CAAA;AAMhC,gCAAgC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAG9D,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGpE,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAG/D,+BAA+B;AAC/B,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @delmare/payload-better-auth\n *\n * Better Auth adapter and plugins for Payload CMS.\n * Enables seamless integration between Better Auth and Payload.\n *\n * @packageDocumentation\n */\n\n// Adapter\nexport { payloadAdapter } from './adapter/index.js'\nexport type { PayloadAdapterConfig } from './adapter/index.js'\n\n// Collection generator plugin\nexport { betterAuthCollections } from './adapter/collections.js'\nexport type { BetterAuthCollectionsOptions } from './adapter/collections.js'\n\n// Payload plugin and strategy\nexport {\n createBetterAuthPlugin,\n betterAuthStrategy,\n resetAuthInstance,\n getApiKeyScopesConfig,\n} from './plugin/index.js'\nexport type {\n Auth,\n CreateAuthFunction,\n BetterAuthPluginOptions,\n BetterAuthPluginAdminOptions,\n BetterAuthStrategyOptions,\n} from './plugin/index.js'\n\n// Enhanced Better Auth types with inference\nexport type {\n BetterAuthReturn,\n PayloadWithAuth,\n PayloadRequestWithBetterAuth,\n CollectionHookWithBetterAuth,\n EndpointWithBetterAuth,\n RoleArray,\n} from './types/betterAuth.js'\n\n// Generated schema types\nexport type {\n User,\n Session as BetterAuthSession,\n Account,\n Verification,\n Apikey,\n Passkey,\n Organization,\n Member,\n Invitation,\n Team,\n TeamMember,\n TwoFactor,\n BaseUserFields,\n BaseSessionFields,\n BaseAccountFields,\n UserPluginFields,\n SessionPluginFields,\n BetterAuthFullSchema,\n ModelKey,\n PluginId,\n} from './generated-types.js'\n\n// API key scope types\nexport type {\n ScopeDefinition,\n ApiKeyScopesConfig,\n AvailableScope,\n} from './types/apiKey.js'\n\n// Scope utilities\nexport {\n generateScopesFromCollections,\n buildAvailableScopes,\n scopesToPermissions,\n} from './utils/generateScopes.js'\n\n// Access control utilities\nexport {\n normalizeRoles,\n hasAnyRole,\n hasAllRoles,\n hasAdminRoles,\n isAdmin,\n isAdminField,\n isAdminOrSelf,\n canUpdateOwnFields,\n isAuthenticated,\n isAuthenticatedField,\n hasRole,\n hasRoleField,\n requireAllRoles,\n} from './utils/access.js'\nexport type {\n RoleCheckConfig,\n SelfAccessConfig,\n FieldUpdateConfig,\n} from './utils/access.js'\n\n// API key scope enforcement utilities\nexport {\n extractApiKeyFromRequest,\n getApiKeyInfo,\n hasScope,\n hasAnyScope as hasAnyScopeKey,\n hasAllScopes as hasAllScopesKey,\n requireScope,\n requireAnyScope,\n requireAllScopes as requireAllScopesKey,\n allowSessionOrScope,\n allowSessionOrAnyScope,\n validateApiKey,\n} from './utils/apiKeyAccess.js'\nexport type {\n ApiKeyInfo,\n ApiKeyAccessConfig,\n} from './utils/apiKeyAccess.js'\n\n// Auth config detection utility\nexport { detectAuthConfig } from './utils/detectAuthConfig.js'\nexport type { AuthDetectionResult } from './utils/detectAuthConfig.js'\n\n// Session utilities\nexport { getServerSession, getServerUser } from './utils/session.js'\nexport type { Session } from './utils/session.js'\n\n// First user admin hook utility\nexport { firstUserAdminHooks } from './utils/firstUserAdmin.js'\nexport type { FirstUserAdminOptions } from './utils/firstUserAdmin.js'\n\n// Better Auth defaults utility\nexport { withBetterAuthDefaults, apiKeyWithDefaults } from './utils/betterAuthDefaults.js'\n"],"names":["payloadAdapter","betterAuthCollections","createBetterAuthPlugin","betterAuthStrategy","resetAuthInstance","getApiKeyScopesConfig","generateScopesFromCollections","buildAvailableScopes","scopesToPermissions","normalizeRoles","hasAnyRole","hasAllRoles","hasAdminRoles","isAdmin","isAdminField","isAdminOrSelf","canUpdateOwnFields","isAuthenticated","isAuthenticatedField","hasRole","hasRoleField","requireAllRoles","extractApiKeyFromRequest","getApiKeyInfo","hasScope","hasAnyScope","hasAnyScopeKey","hasAllScopes","hasAllScopesKey","requireScope","requireAnyScope","requireAllScopes","requireAllScopesKey","allowSessionOrScope","allowSessionOrAnyScope","validateApiKey","detectAuthConfig","getServerSession","getServerUser","firstUserAdminHooks","withBetterAuthDefaults","apiKeyWithDefaults"],"mappings":"AAAA;;;;;;;CAOC,GAED,UAAU;AACV,SAASA,cAAc,QAAQ,qBAAoB;AAGnD,8BAA8B;AAC9B,SAASC,qBAAqB,QAAQ,2BAA0B;AAGhE,8BAA8B;AAC9B,SACEC,sBAAsB,EACtBC,kBAAkB,EAClBC,iBAAiB,EACjBC,qBAAqB,QAChB,oBAAmB;AAkD1B,kBAAkB;AAClB,SACEC,6BAA6B,EAC7BC,oBAAoB,EACpBC,mBAAmB,QACd,4BAA2B;AAElC,2BAA2B;AAC3B,SACEC,cAAc,EACdC,UAAU,EACVC,WAAW,EACXC,aAAa,EACbC,OAAO,EACPC,YAAY,EACZC,aAAa,EACbC,kBAAkB,EAClBC,eAAe,EACfC,oBAAoB,EACpBC,OAAO,EACPC,YAAY,EACZC,eAAe,QACV,oBAAmB;AAO1B,sCAAsC;AACtC,SACEC,wBAAwB,EACxBC,aAAa,EACbC,QAAQ,EACRC,eAAeC,cAAc,EAC7BC,gBAAgBC,eAAe,EAC/BC,YAAY,EACZC,eAAe,EACfC,oBAAoBC,mBAAmB,EACvCC,mBAAmB,EACnBC,sBAAsB,EACtBC,cAAc,QACT,0BAAyB;AAMhC,gCAAgC;AAChC,SAASC,gBAAgB,QAAQ,8BAA6B;AAG9D,oBAAoB;AACpB,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,qBAAoB;AAGpE,gCAAgC;AAChC,SAASC,mBAAmB,QAAQ,4BAA2B;AAG/D,+BAA+B;AAC/B,SAASC,sBAAsB,EAAEC,kBAAkB,QAAQ,gCAA+B"}