@delmaredigital/payload-better-auth 0.3.7 → 0.3.9
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 +12 -1
- package/dist/adapter/collections.d.ts.map +1 -1
- package/dist/adapter/collections.js +126 -88
- package/dist/adapter/collections.js.map +1 -1
- package/dist/adapter/index.js +197 -150
- package/dist/adapter/index.js.map +1 -1
- package/dist/components/BeforeLogin.d.ts +1 -1
- package/dist/components/BeforeLogin.d.ts.map +1 -1
- package/dist/components/BeforeLogin.js +15 -7
- package/dist/components/BeforeLogin.js.map +1 -1
- package/dist/components/LoginView.d.ts +2 -2
- package/dist/components/LoginView.d.ts.map +1 -1
- package/dist/components/LoginView.js +660 -218
- package/dist/components/LoginView.js.map +1 -1
- package/dist/components/LoginViewWrapper.d.ts +1 -1
- package/dist/components/LoginViewWrapper.d.ts.map +1 -1
- package/dist/components/LoginViewWrapper.js +14 -4
- package/dist/components/LoginViewWrapper.js.map +1 -1
- package/dist/components/LogoutButton.d.ts +1 -1
- package/dist/components/LogoutButton.d.ts.map +1 -1
- package/dist/components/LogoutButton.js +19 -11
- package/dist/components/LogoutButton.js.map +1 -1
- package/dist/components/PasskeyRegisterButton.d.ts +2 -2
- package/dist/components/PasskeyRegisterButton.d.ts.map +1 -1
- package/dist/components/PasskeyRegisterButton.js +20 -16
- package/dist/components/PasskeyRegisterButton.js.map +1 -1
- package/dist/components/PasskeySignInButton.d.ts +2 -2
- package/dist/components/PasskeySignInButton.d.ts.map +1 -1
- package/dist/components/PasskeySignInButton.js +14 -12
- package/dist/components/PasskeySignInButton.js.map +1 -1
- package/dist/components/auth/ForgotPasswordView.d.ts +1 -1
- package/dist/components/auth/ForgotPasswordView.d.ts.map +1 -1
- package/dist/components/auth/ForgotPasswordView.js +133 -43
- package/dist/components/auth/ForgotPasswordView.js.map +1 -1
- package/dist/components/auth/ResetPasswordView.d.ts +1 -1
- package/dist/components/auth/ResetPasswordView.d.ts.map +1 -1
- package/dist/components/auth/ResetPasswordView.js +154 -50
- package/dist/components/auth/ResetPasswordView.js.map +1 -1
- package/dist/components/auth/index.js +2 -2
- package/dist/components/auth/index.js.map +1 -1
- package/dist/components/management/ApiKeysManagementClient.d.ts +2 -2
- package/dist/components/management/ApiKeysManagementClient.d.ts.map +1 -1
- package/dist/components/management/ApiKeysManagementClient.js +539 -222
- package/dist/components/management/ApiKeysManagementClient.js.map +1 -1
- package/dist/components/management/PasskeysManagementClient.d.ts +2 -2
- package/dist/components/management/PasskeysManagementClient.d.ts.map +1 -1
- package/dist/components/management/PasskeysManagementClient.js +215 -92
- package/dist/components/management/PasskeysManagementClient.js.map +1 -1
- package/dist/components/management/SecurityNavLinks.d.ts +1 -1
- package/dist/components/management/SecurityNavLinks.d.ts.map +1 -1
- package/dist/components/management/SecurityNavLinks.js +51 -24
- package/dist/components/management/SecurityNavLinks.js.map +1 -1
- package/dist/components/management/TwoFactorManagementClient.d.ts +2 -2
- package/dist/components/management/TwoFactorManagementClient.d.ts.map +1 -1
- package/dist/components/management/TwoFactorManagementClient.js +270 -111
- package/dist/components/management/TwoFactorManagementClient.js.map +1 -1
- package/dist/components/management/index.js +2 -2
- package/dist/components/management/index.js.map +1 -1
- package/dist/components/management/views/ApiKeysView.d.ts +1 -1
- package/dist/components/management/views/ApiKeysView.d.ts.map +1 -1
- package/dist/components/management/views/ApiKeysView.js +19 -4
- package/dist/components/management/views/ApiKeysView.js.map +1 -1
- package/dist/components/management/views/PasskeysView.d.ts +1 -1
- package/dist/components/management/views/PasskeysView.d.ts.map +1 -1
- package/dist/components/management/views/PasskeysView.js +16 -4
- package/dist/components/management/views/PasskeysView.js.map +1 -1
- package/dist/components/management/views/TwoFactorView.d.ts +1 -1
- package/dist/components/management/views/TwoFactorView.d.ts.map +1 -1
- package/dist/components/management/views/TwoFactorView.js +16 -4
- package/dist/components/management/views/TwoFactorView.js.map +1 -1
- package/dist/components/management/views/index.js +2 -2
- package/dist/components/management/views/index.js.map +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.d.ts +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.d.ts.map +1 -1
- package/dist/components/twoFactor/TwoFactorSetupView.js +240 -87
- package/dist/components/twoFactor/TwoFactorSetupView.js.map +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.d.ts +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.d.ts.map +1 -1
- package/dist/components/twoFactor/TwoFactorVerifyView.js +108 -45
- package/dist/components/twoFactor/TwoFactorVerifyView.js.map +1 -1
- package/dist/components/twoFactor/index.js +2 -2
- package/dist/components/twoFactor/index.js.map +1 -1
- package/dist/exports/client.js +9 -10
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/components.js +2 -2
- package/dist/exports/components.js.map +1 -1
- package/dist/exports/management.js +3 -3
- package/dist/exports/management.js.map +1 -1
- package/dist/exports/rsc.js +2 -2
- package/dist/exports/rsc.js.map +1 -1
- package/dist/generated-types.js +4 -2
- package/dist/generated-types.js.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/plugin/index.js +198 -162
- package/dist/plugin/index.js.map +1 -1
- package/dist/scripts/generate-types.js +66 -50
- package/dist/scripts/generate-types.js.map +1 -1
- package/dist/types/apiKey.js +7 -2
- package/dist/types/apiKey.js.map +1 -1
- package/dist/types/betterAuth.js +23 -2
- package/dist/types/betterAuth.js.map +1 -1
- package/dist/utils/access.js +78 -81
- package/dist/utils/access.js.map +1 -1
- package/dist/utils/apiKeyAccess.js +65 -72
- package/dist/utils/apiKeyAccess.js.map +1 -1
- package/dist/utils/betterAuthDefaults.js +8 -8
- package/dist/utils/betterAuthDefaults.js.map +1 -1
- package/dist/utils/detectAuthConfig.js +8 -11
- package/dist/utils/detectAuthConfig.js.map +1 -1
- package/dist/utils/detectEnabledPlugins.js +6 -7
- package/dist/utils/detectEnabledPlugins.js.map +1 -1
- package/dist/utils/firstUserAdmin.js +18 -20
- package/dist/utils/firstUserAdmin.js.map +1 -1
- package/dist/utils/generateScopes.js +40 -41
- package/dist/utils/generateScopes.js.map +1 -1
- package/dist/utils/session.js +8 -9
- package/dist/utils/session.js.map +1 -1
- package/package.json +27 -13
|
@@ -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: {
|
|
23
|
+
headers: {
|
|
24
|
+
'Content-Type': 'application/json'
|
|
25
|
+
},
|
|
27
26
|
credentials: 'include',
|
|
28
|
-
body: JSON.stringify({
|
|
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
|
-
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
}
|
|
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
|
-
},
|
|
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 ||
|
|
122
|
-
opacity: loading ||
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
139
|
-
|
|
140
|
-
|
|
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,"
|
|
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"}
|
package/dist/exports/client.js
CHANGED
|
@@ -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
|
-
|
|
63
|
-
|
|
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,"
|
|
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,"
|
|
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
|
-
|
|
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,"
|
|
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"}
|
package/dist/exports/rsc.js
CHANGED
|
@@ -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
|
package/dist/exports/rsc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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"}
|
package/dist/generated-types.js
CHANGED
|
@@ -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
|
-
|
|
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,"
|
|
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
|
|
13
|
+
export { createBetterAuthPlugin, betterAuthStrategy, resetAuthInstance, getApiKeyScopesConfig } from './plugin/index.js';
|
|
15
14
|
// Scope utilities
|
|
16
|
-
export { generateScopesFromCollections, buildAvailableScopes, scopesToPermissions
|
|
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
|
|
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
|
|
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,"
|
|
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"}
|