@delmaredigital/payload-better-auth 0.3.6 → 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.
- package/README.md +60 -12
- 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.d.ts +2356 -2
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +48 -8
- 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.d.ts +35 -2
- package/dist/plugin/index.d.ts.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 +97 -26
- package/src/adapter/collections.ts +621 -0
- package/src/adapter/index.ts +712 -0
- package/src/components/BeforeLogin.tsx +39 -0
- package/src/components/LoginView.tsx +1516 -0
- package/src/components/LoginViewWrapper.tsx +35 -0
- package/src/components/LogoutButton.tsx +58 -0
- package/src/components/PasskeyRegisterButton.tsx +105 -0
- package/src/components/PasskeySignInButton.tsx +96 -0
- package/src/components/auth/ForgotPasswordView.tsx +274 -0
- package/src/components/auth/ResetPasswordView.tsx +331 -0
- package/src/components/auth/index.ts +8 -0
- package/src/components/management/ApiKeysManagementClient.tsx +988 -0
- package/src/components/management/PasskeysManagementClient.tsx +409 -0
- package/src/components/management/SecurityNavLinks.tsx +117 -0
- package/src/components/management/TwoFactorManagementClient.tsx +560 -0
- package/src/components/management/index.ts +20 -0
- package/src/components/management/views/ApiKeysView.tsx +57 -0
- package/src/components/management/views/PasskeysView.tsx +42 -0
- package/src/components/management/views/TwoFactorView.tsx +42 -0
- package/src/components/management/views/index.ts +10 -0
- package/src/components/twoFactor/TwoFactorSetupView.tsx +515 -0
- package/src/components/twoFactor/TwoFactorVerifyView.tsx +238 -0
- package/src/components/twoFactor/index.ts +8 -0
- package/src/exports/client.ts +77 -0
- package/src/exports/components.ts +30 -0
- package/src/exports/management.ts +25 -0
- package/src/exports/rsc.ts +11 -0
- package/src/generated-types.ts +269 -0
- package/src/index.ts +135 -0
- package/src/plugin/index.ts +834 -0
- package/src/scripts/generate-types.ts +269 -0
- package/src/types/apiKey.ts +63 -0
- package/src/types/betterAuth.ts +253 -0
- package/src/utils/access.ts +410 -0
- package/src/utils/apiKeyAccess.ts +443 -0
- package/src/utils/betterAuthDefaults.ts +102 -0
- package/src/utils/detectAuthConfig.ts +47 -0
- package/src/utils/detectEnabledPlugins.ts +69 -0
- package/src/utils/firstUserAdmin.ts +164 -0
- package/src/utils/generateScopes.ts +150 -0
- package/src/utils/session.ts +91 -0
|
@@ -5,8 +5,7 @@ import { useState, useEffect } from 'react';
|
|
|
5
5
|
* Two-factor authentication setup component.
|
|
6
6
|
* Displays QR code for TOTP apps and allows verification.
|
|
7
7
|
* Uses Better Auth's twoFactor plugin endpoints.
|
|
8
|
-
*/
|
|
9
|
-
export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentication', afterSetupPath = '/admin', onSetupComplete, }) {
|
|
8
|
+
*/ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentication', afterSetupPath = '/admin', onSetupComplete }) {
|
|
10
9
|
const [step, setStep] = useState('loading');
|
|
11
10
|
const [totpUri, setTotpUri] = useState(null);
|
|
12
11
|
const [secret, setSecret] = useState(null);
|
|
@@ -14,14 +13,16 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
14
13
|
const [verificationCode, setVerificationCode] = useState('');
|
|
15
14
|
const [error, setError] = useState(null);
|
|
16
15
|
const [loading, setLoading] = useState(false);
|
|
17
|
-
useEffect(()
|
|
16
|
+
useEffect(()=>{
|
|
18
17
|
async function enableTwoFactor() {
|
|
19
18
|
try {
|
|
20
19
|
const response = await fetch('/api/auth/two-factor/enable', {
|
|
21
20
|
method: 'POST',
|
|
22
|
-
headers: {
|
|
21
|
+
headers: {
|
|
22
|
+
'Content-Type': 'application/json'
|
|
23
|
+
},
|
|
23
24
|
credentials: 'include',
|
|
24
|
-
body: JSON.stringify({})
|
|
25
|
+
body: JSON.stringify({})
|
|
25
26
|
});
|
|
26
27
|
if (response.ok) {
|
|
27
28
|
const data = await response.json();
|
|
@@ -29,14 +30,12 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
29
30
|
setSecret(data.secret);
|
|
30
31
|
setBackupCodes(data.backupCodes || []);
|
|
31
32
|
setStep('qr');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const data = await response.json().catch(() => ({}));
|
|
33
|
+
} else {
|
|
34
|
+
const data = await response.json().catch(()=>({}));
|
|
35
35
|
setError(data.message || 'Failed to enable two-factor authentication.');
|
|
36
36
|
setStep('qr');
|
|
37
37
|
}
|
|
38
|
-
}
|
|
39
|
-
catch {
|
|
38
|
+
} catch {
|
|
40
39
|
setError('An error occurred. Please try again.');
|
|
41
40
|
setStep('qr');
|
|
42
41
|
}
|
|
@@ -50,28 +49,28 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
50
49
|
try {
|
|
51
50
|
const response = await fetch('/api/auth/two-factor/verify-totp', {
|
|
52
51
|
method: 'POST',
|
|
53
|
-
headers: {
|
|
52
|
+
headers: {
|
|
53
|
+
'Content-Type': 'application/json'
|
|
54
|
+
},
|
|
54
55
|
credentials: 'include',
|
|
55
|
-
body: JSON.stringify({
|
|
56
|
+
body: JSON.stringify({
|
|
57
|
+
code: verificationCode
|
|
58
|
+
})
|
|
56
59
|
});
|
|
57
60
|
if (response.ok) {
|
|
58
61
|
if (backupCodes.length > 0) {
|
|
59
62
|
setStep('backup');
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
63
|
+
} else {
|
|
62
64
|
setStep('complete');
|
|
63
65
|
onSetupComplete?.();
|
|
64
66
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const data = await response.json().catch(() => ({}));
|
|
67
|
+
} else {
|
|
68
|
+
const data = await response.json().catch(()=>({}));
|
|
68
69
|
setError(data.message || 'Invalid verification code. Please try again.');
|
|
69
70
|
}
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
71
|
+
} catch {
|
|
72
72
|
setError('An error occurred. Please try again.');
|
|
73
|
-
}
|
|
74
|
-
finally {
|
|
73
|
+
} finally{
|
|
75
74
|
setLoading(false);
|
|
76
75
|
}
|
|
77
76
|
}
|
|
@@ -81,42 +80,72 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
81
80
|
}
|
|
82
81
|
// Loading state
|
|
83
82
|
if (step === 'loading') {
|
|
84
|
-
return
|
|
83
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
84
|
+
style: {
|
|
85
85
|
minHeight: '100vh',
|
|
86
86
|
display: 'flex',
|
|
87
87
|
alignItems: 'center',
|
|
88
88
|
justifyContent: 'center',
|
|
89
|
-
background: 'var(--theme-bg)'
|
|
90
|
-
},
|
|
89
|
+
background: 'var(--theme-bg)'
|
|
90
|
+
},
|
|
91
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
92
|
+
style: {
|
|
93
|
+
color: 'var(--theme-text)',
|
|
94
|
+
opacity: 0.7
|
|
95
|
+
},
|
|
96
|
+
children: "Setting up two-factor authentication..."
|
|
97
|
+
})
|
|
98
|
+
});
|
|
91
99
|
}
|
|
92
100
|
// Complete state
|
|
93
101
|
if (step === 'complete') {
|
|
94
|
-
return
|
|
102
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
103
|
+
style: {
|
|
95
104
|
minHeight: '100vh',
|
|
96
105
|
display: 'flex',
|
|
97
106
|
alignItems: 'center',
|
|
98
107
|
justifyContent: 'center',
|
|
99
108
|
background: 'var(--theme-bg)',
|
|
100
|
-
padding: 'var(--base)'
|
|
101
|
-
},
|
|
109
|
+
padding: 'var(--base)'
|
|
110
|
+
},
|
|
111
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
112
|
+
style: {
|
|
102
113
|
background: 'var(--theme-elevation-50)',
|
|
103
114
|
padding: 'calc(var(--base) * 2)',
|
|
104
115
|
borderRadius: 'var(--style-radius-m)',
|
|
105
116
|
boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',
|
|
106
117
|
width: '100%',
|
|
107
118
|
maxWidth: '400px',
|
|
108
|
-
textAlign: 'center'
|
|
109
|
-
},
|
|
119
|
+
textAlign: 'center'
|
|
120
|
+
},
|
|
121
|
+
children: [
|
|
122
|
+
logo && /*#__PURE__*/ _jsx("div", {
|
|
123
|
+
style: {
|
|
124
|
+
marginBottom: 'calc(var(--base) * 1.5)'
|
|
125
|
+
},
|
|
126
|
+
children: logo
|
|
127
|
+
}),
|
|
128
|
+
/*#__PURE__*/ _jsx("h1", {
|
|
129
|
+
style: {
|
|
110
130
|
color: 'var(--theme-success-500)',
|
|
111
131
|
fontSize: 'var(--font-size-h3)',
|
|
112
132
|
fontWeight: 600,
|
|
113
|
-
margin: '0 0 var(--base) 0'
|
|
114
|
-
},
|
|
133
|
+
margin: '0 0 var(--base) 0'
|
|
134
|
+
},
|
|
135
|
+
children: "Two-Factor Enabled!"
|
|
136
|
+
}),
|
|
137
|
+
/*#__PURE__*/ _jsx("p", {
|
|
138
|
+
style: {
|
|
115
139
|
color: 'var(--theme-text)',
|
|
116
140
|
opacity: 0.8,
|
|
117
141
|
marginBottom: 'calc(var(--base) * 1.5)',
|
|
118
|
-
fontSize: 'var(--font-size-small)'
|
|
119
|
-
},
|
|
142
|
+
fontSize: 'var(--font-size-small)'
|
|
143
|
+
},
|
|
144
|
+
children: "Your account is now protected with two-factor authentication."
|
|
145
|
+
}),
|
|
146
|
+
/*#__PURE__*/ _jsx("a", {
|
|
147
|
+
href: afterSetupPath,
|
|
148
|
+
style: {
|
|
120
149
|
display: 'inline-block',
|
|
121
150
|
padding: 'calc(var(--base) * 0.75) calc(var(--base) * 1.5)',
|
|
122
151
|
background: 'var(--theme-elevation-800)',
|
|
@@ -125,57 +154,91 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
125
154
|
color: 'var(--theme-elevation-50)',
|
|
126
155
|
fontSize: 'var(--font-size-base)',
|
|
127
156
|
fontWeight: 500,
|
|
128
|
-
textDecoration: 'none'
|
|
129
|
-
},
|
|
157
|
+
textDecoration: 'none'
|
|
158
|
+
},
|
|
159
|
+
children: "Continue"
|
|
160
|
+
})
|
|
161
|
+
]
|
|
162
|
+
})
|
|
163
|
+
});
|
|
130
164
|
}
|
|
131
165
|
// Backup codes state
|
|
132
166
|
if (step === 'backup') {
|
|
133
|
-
return
|
|
167
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
168
|
+
style: {
|
|
134
169
|
minHeight: '100vh',
|
|
135
170
|
display: 'flex',
|
|
136
171
|
alignItems: 'center',
|
|
137
172
|
justifyContent: 'center',
|
|
138
173
|
background: 'var(--theme-bg)',
|
|
139
|
-
padding: 'var(--base)'
|
|
140
|
-
},
|
|
174
|
+
padding: 'var(--base)'
|
|
175
|
+
},
|
|
176
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
177
|
+
style: {
|
|
141
178
|
background: 'var(--theme-elevation-50)',
|
|
142
179
|
padding: 'calc(var(--base) * 2)',
|
|
143
180
|
borderRadius: 'var(--style-radius-m)',
|
|
144
181
|
boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',
|
|
145
182
|
width: '100%',
|
|
146
|
-
maxWidth: '450px'
|
|
147
|
-
},
|
|
183
|
+
maxWidth: '450px'
|
|
184
|
+
},
|
|
185
|
+
children: [
|
|
186
|
+
logo && /*#__PURE__*/ _jsx("div", {
|
|
187
|
+
style: {
|
|
148
188
|
textAlign: 'center',
|
|
149
|
-
marginBottom: 'calc(var(--base) * 1.5)'
|
|
150
|
-
},
|
|
189
|
+
marginBottom: 'calc(var(--base) * 1.5)'
|
|
190
|
+
},
|
|
191
|
+
children: logo
|
|
192
|
+
}),
|
|
193
|
+
/*#__PURE__*/ _jsx("h1", {
|
|
194
|
+
style: {
|
|
151
195
|
color: 'var(--theme-text)',
|
|
152
196
|
fontSize: 'var(--font-size-h3)',
|
|
153
197
|
fontWeight: 600,
|
|
154
198
|
margin: '0 0 calc(var(--base) * 0.5) 0',
|
|
155
|
-
textAlign: 'center'
|
|
156
|
-
},
|
|
199
|
+
textAlign: 'center'
|
|
200
|
+
},
|
|
201
|
+
children: "Save Your Backup Codes"
|
|
202
|
+
}),
|
|
203
|
+
/*#__PURE__*/ _jsx("p", {
|
|
204
|
+
style: {
|
|
157
205
|
color: 'var(--theme-text)',
|
|
158
206
|
opacity: 0.7,
|
|
159
207
|
fontSize: 'var(--font-size-small)',
|
|
160
208
|
textAlign: 'center',
|
|
161
|
-
marginBottom: 'calc(var(--base) * 1.5)'
|
|
162
|
-
},
|
|
209
|
+
marginBottom: 'calc(var(--base) * 1.5)'
|
|
210
|
+
},
|
|
211
|
+
children: "Store these codes safely. You can use them to access your account if you lose your authenticator."
|
|
212
|
+
}),
|
|
213
|
+
/*#__PURE__*/ _jsx("div", {
|
|
214
|
+
style: {
|
|
163
215
|
background: 'var(--theme-elevation-100)',
|
|
164
216
|
padding: 'var(--base)',
|
|
165
217
|
borderRadius: 'var(--style-radius-s)',
|
|
166
218
|
marginBottom: 'calc(var(--base) * 1.5)',
|
|
167
219
|
fontFamily: 'monospace',
|
|
168
|
-
fontSize: 'var(--font-size-small)'
|
|
169
|
-
},
|
|
220
|
+
fontSize: 'var(--font-size-small)'
|
|
221
|
+
},
|
|
222
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
223
|
+
style: {
|
|
170
224
|
display: 'grid',
|
|
171
225
|
gridTemplateColumns: 'repeat(2, 1fr)',
|
|
172
|
-
gap: 'calc(var(--base) * 0.5)'
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
226
|
+
gap: 'calc(var(--base) * 0.5)'
|
|
227
|
+
},
|
|
228
|
+
children: backupCodes.map((code, index)=>/*#__PURE__*/ _jsx("div", {
|
|
229
|
+
style: {
|
|
230
|
+
color: 'var(--theme-text)',
|
|
231
|
+
padding: 'calc(var(--base) * 0.25)'
|
|
232
|
+
},
|
|
233
|
+
children: code
|
|
234
|
+
}, index))
|
|
235
|
+
})
|
|
236
|
+
}),
|
|
237
|
+
/*#__PURE__*/ _jsx("button", {
|
|
238
|
+
onClick: ()=>{
|
|
177
239
|
navigator.clipboard.writeText(backupCodes.join('\n'));
|
|
178
|
-
},
|
|
240
|
+
},
|
|
241
|
+
style: {
|
|
179
242
|
width: '100%',
|
|
180
243
|
padding: 'calc(var(--base) * 0.5)',
|
|
181
244
|
background: 'var(--theme-elevation-150)',
|
|
@@ -184,8 +247,13 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
184
247
|
color: 'var(--theme-text)',
|
|
185
248
|
fontSize: 'var(--font-size-small)',
|
|
186
249
|
cursor: 'pointer',
|
|
187
|
-
marginBottom: 'var(--base)'
|
|
188
|
-
},
|
|
250
|
+
marginBottom: 'var(--base)'
|
|
251
|
+
},
|
|
252
|
+
children: "Copy to Clipboard"
|
|
253
|
+
}),
|
|
254
|
+
/*#__PURE__*/ _jsx("button", {
|
|
255
|
+
onClick: handleBackupContinue,
|
|
256
|
+
style: {
|
|
189
257
|
width: '100%',
|
|
190
258
|
padding: 'calc(var(--base) * 0.75)',
|
|
191
259
|
background: 'var(--theme-elevation-800)',
|
|
@@ -194,56 +262,94 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
194
262
|
color: 'var(--theme-elevation-50)',
|
|
195
263
|
fontSize: 'var(--font-size-base)',
|
|
196
264
|
fontWeight: 500,
|
|
197
|
-
cursor: 'pointer'
|
|
198
|
-
},
|
|
265
|
+
cursor: 'pointer'
|
|
266
|
+
},
|
|
267
|
+
children: "I've Saved My Codes"
|
|
268
|
+
})
|
|
269
|
+
]
|
|
270
|
+
})
|
|
271
|
+
});
|
|
199
272
|
}
|
|
200
273
|
// QR code and verify state
|
|
201
|
-
return
|
|
274
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
275
|
+
style: {
|
|
202
276
|
minHeight: '100vh',
|
|
203
277
|
display: 'flex',
|
|
204
278
|
alignItems: 'center',
|
|
205
279
|
justifyContent: 'center',
|
|
206
280
|
background: 'var(--theme-bg)',
|
|
207
|
-
padding: 'var(--base)'
|
|
208
|
-
},
|
|
281
|
+
padding: 'var(--base)'
|
|
282
|
+
},
|
|
283
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
284
|
+
style: {
|
|
209
285
|
background: 'var(--theme-elevation-50)',
|
|
210
286
|
padding: 'calc(var(--base) * 2)',
|
|
211
287
|
borderRadius: 'var(--style-radius-m)',
|
|
212
288
|
boxShadow: '0 2px 20px rgba(0, 0, 0, 0.1)',
|
|
213
289
|
width: '100%',
|
|
214
|
-
maxWidth: '400px'
|
|
215
|
-
},
|
|
290
|
+
maxWidth: '400px'
|
|
291
|
+
},
|
|
292
|
+
children: [
|
|
293
|
+
logo && /*#__PURE__*/ _jsx("div", {
|
|
294
|
+
style: {
|
|
216
295
|
textAlign: 'center',
|
|
217
|
-
marginBottom: 'calc(var(--base) * 1.5)'
|
|
218
|
-
},
|
|
296
|
+
marginBottom: 'calc(var(--base) * 1.5)'
|
|
297
|
+
},
|
|
298
|
+
children: logo
|
|
299
|
+
}),
|
|
300
|
+
/*#__PURE__*/ _jsx("h1", {
|
|
301
|
+
style: {
|
|
219
302
|
color: 'var(--theme-text)',
|
|
220
303
|
fontSize: 'var(--font-size-h3)',
|
|
221
304
|
fontWeight: 600,
|
|
222
305
|
margin: '0 0 calc(var(--base) * 0.5) 0',
|
|
223
|
-
textAlign: 'center'
|
|
224
|
-
},
|
|
306
|
+
textAlign: 'center'
|
|
307
|
+
},
|
|
308
|
+
children: title
|
|
309
|
+
}),
|
|
310
|
+
/*#__PURE__*/ _jsx("p", {
|
|
311
|
+
style: {
|
|
225
312
|
color: 'var(--theme-text)',
|
|
226
313
|
opacity: 0.7,
|
|
227
314
|
fontSize: 'var(--font-size-small)',
|
|
228
315
|
textAlign: 'center',
|
|
229
|
-
marginBottom: 'calc(var(--base) * 1.5)'
|
|
230
|
-
},
|
|
316
|
+
marginBottom: 'calc(var(--base) * 1.5)'
|
|
317
|
+
},
|
|
318
|
+
children: "Scan the QR code with your authenticator app, then enter the code below."
|
|
319
|
+
}),
|
|
320
|
+
totpUri && /*#__PURE__*/ _jsx("div", {
|
|
321
|
+
style: {
|
|
231
322
|
textAlign: 'center',
|
|
232
|
-
marginBottom: 'calc(var(--base) * 1.5)'
|
|
233
|
-
},
|
|
323
|
+
marginBottom: 'calc(var(--base) * 1.5)'
|
|
324
|
+
},
|
|
325
|
+
children: /*#__PURE__*/ _jsx("img", {
|
|
326
|
+
src: `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(totpUri)}`,
|
|
327
|
+
alt: "QR Code for authenticator app",
|
|
328
|
+
style: {
|
|
234
329
|
width: '200px',
|
|
235
330
|
height: '200px',
|
|
236
331
|
border: '1px solid var(--theme-elevation-150)',
|
|
237
|
-
borderRadius: 'var(--style-radius-s)'
|
|
238
|
-
}
|
|
332
|
+
borderRadius: 'var(--style-radius-s)'
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
}),
|
|
336
|
+
secret && /*#__PURE__*/ _jsxs("div", {
|
|
337
|
+
style: {
|
|
239
338
|
marginBottom: 'calc(var(--base) * 1.5)',
|
|
240
|
-
textAlign: 'center'
|
|
241
|
-
},
|
|
339
|
+
textAlign: 'center'
|
|
340
|
+
},
|
|
341
|
+
children: [
|
|
342
|
+
/*#__PURE__*/ _jsx("p", {
|
|
343
|
+
style: {
|
|
242
344
|
color: 'var(--theme-text)',
|
|
243
345
|
opacity: 0.7,
|
|
244
346
|
fontSize: 'var(--font-size-small)',
|
|
245
|
-
marginBottom: 'calc(var(--base) * 0.5)'
|
|
246
|
-
},
|
|
347
|
+
marginBottom: 'calc(var(--base) * 0.5)'
|
|
348
|
+
},
|
|
349
|
+
children: "Or enter this code manually:"
|
|
350
|
+
}),
|
|
351
|
+
/*#__PURE__*/ _jsx("code", {
|
|
352
|
+
style: {
|
|
247
353
|
display: 'inline-block',
|
|
248
354
|
padding: 'calc(var(--base) * 0.5)',
|
|
249
355
|
background: 'var(--theme-elevation-100)',
|
|
@@ -251,14 +357,42 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
251
357
|
fontFamily: 'monospace',
|
|
252
358
|
fontSize: 'var(--font-size-small)',
|
|
253
359
|
color: 'var(--theme-text)',
|
|
254
|
-
wordBreak: 'break-all'
|
|
255
|
-
},
|
|
360
|
+
wordBreak: 'break-all'
|
|
361
|
+
},
|
|
362
|
+
children: secret
|
|
363
|
+
})
|
|
364
|
+
]
|
|
365
|
+
}),
|
|
366
|
+
/*#__PURE__*/ _jsxs("form", {
|
|
367
|
+
onSubmit: handleVerify,
|
|
368
|
+
children: [
|
|
369
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
370
|
+
style: {
|
|
371
|
+
marginBottom: 'calc(var(--base) * 1.5)'
|
|
372
|
+
},
|
|
373
|
+
children: [
|
|
374
|
+
/*#__PURE__*/ _jsx("label", {
|
|
375
|
+
htmlFor: "code",
|
|
376
|
+
style: {
|
|
256
377
|
display: 'block',
|
|
257
378
|
color: 'var(--theme-text)',
|
|
258
379
|
marginBottom: 'calc(var(--base) * 0.5)',
|
|
259
380
|
fontSize: 'var(--font-size-small)',
|
|
260
|
-
fontWeight: 500
|
|
261
|
-
},
|
|
381
|
+
fontWeight: 500
|
|
382
|
+
},
|
|
383
|
+
children: "Verification Code"
|
|
384
|
+
}),
|
|
385
|
+
/*#__PURE__*/ _jsx("input", {
|
|
386
|
+
id: "code",
|
|
387
|
+
type: "text",
|
|
388
|
+
inputMode: "numeric",
|
|
389
|
+
pattern: "[0-9]*",
|
|
390
|
+
autoComplete: "one-time-code",
|
|
391
|
+
value: verificationCode,
|
|
392
|
+
onChange: (e)=>setVerificationCode(e.target.value.replace(/\D/g, '').slice(0, 6)),
|
|
393
|
+
required: true,
|
|
394
|
+
placeholder: "000000",
|
|
395
|
+
style: {
|
|
262
396
|
width: '100%',
|
|
263
397
|
padding: 'calc(var(--base) * 0.75)',
|
|
264
398
|
background: 'var(--theme-input-bg)',
|
|
@@ -270,16 +404,27 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
270
404
|
textAlign: 'center',
|
|
271
405
|
letterSpacing: '0.5em',
|
|
272
406
|
outline: 'none',
|
|
273
|
-
boxSizing: 'border-box'
|
|
274
|
-
}
|
|
407
|
+
boxSizing: 'border-box'
|
|
408
|
+
}
|
|
409
|
+
})
|
|
410
|
+
]
|
|
411
|
+
}),
|
|
412
|
+
error && /*#__PURE__*/ _jsx("div", {
|
|
413
|
+
style: {
|
|
275
414
|
color: 'var(--theme-error-500)',
|
|
276
415
|
marginBottom: 'var(--base)',
|
|
277
416
|
fontSize: 'var(--font-size-small)',
|
|
278
417
|
padding: 'calc(var(--base) * 0.5)',
|
|
279
418
|
background: 'var(--theme-error-50)',
|
|
280
419
|
borderRadius: 'var(--style-radius-s)',
|
|
281
|
-
border: '1px solid var(--theme-error-200)'
|
|
282
|
-
},
|
|
420
|
+
border: '1px solid var(--theme-error-200)'
|
|
421
|
+
},
|
|
422
|
+
children: error
|
|
423
|
+
}),
|
|
424
|
+
/*#__PURE__*/ _jsx("button", {
|
|
425
|
+
type: "submit",
|
|
426
|
+
disabled: loading || verificationCode.length !== 6,
|
|
427
|
+
style: {
|
|
283
428
|
width: '100%',
|
|
284
429
|
padding: 'calc(var(--base) * 0.75)',
|
|
285
430
|
background: 'var(--theme-elevation-800)',
|
|
@@ -290,8 +435,16 @@ export function TwoFactorSetupView({ logo, title = 'Set Up Two-Factor Authentica
|
|
|
290
435
|
fontWeight: 500,
|
|
291
436
|
cursor: loading || verificationCode.length !== 6 ? 'not-allowed' : 'pointer',
|
|
292
437
|
opacity: loading || verificationCode.length !== 6 ? 0.7 : 1,
|
|
293
|
-
transition: 'opacity 150ms ease'
|
|
294
|
-
},
|
|
438
|
+
transition: 'opacity 150ms ease'
|
|
439
|
+
},
|
|
440
|
+
children: loading ? 'Verifying...' : 'Verify and Enable'
|
|
441
|
+
})
|
|
442
|
+
]
|
|
443
|
+
})
|
|
444
|
+
]
|
|
445
|
+
})
|
|
446
|
+
});
|
|
295
447
|
}
|
|
296
448
|
export default TwoFactorSetupView;
|
|
449
|
+
|
|
297
450
|
//# sourceMappingURL=TwoFactorSetupView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorSetupView.js","sourceRoot":"","sources":["../../../src/components/twoFactor/TwoFactorSetupView.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/twoFactor/TwoFactorSetupView.tsx"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, type FormEvent } from 'react'\n\nexport type TwoFactorSetupViewProps = {\n /** Custom logo element */\n logo?: React.ReactNode\n /** Page title. Default: 'Set Up Two-Factor Authentication' */\n title?: string\n /** Path to redirect after successful setup. Default: '/admin' */\n afterSetupPath?: string\n /** Callback after successful setup */\n onSetupComplete?: () => void\n}\n\n/**\n * Two-factor authentication setup component.\n * Displays QR code for TOTP apps and allows verification.\n * Uses Better Auth's twoFactor plugin endpoints.\n */\nexport function TwoFactorSetupView({\n logo,\n title = 'Set Up Two-Factor Authentication',\n afterSetupPath = '/admin',\n onSetupComplete,\n}: TwoFactorSetupViewProps) {\n const [step, setStep] = useState<'loading' | 'qr' | 'verify' | 'backup' | 'complete'>('loading')\n const [totpUri, setTotpUri] = useState<string | null>(null)\n const [secret, setSecret] = useState<string | null>(null)\n const [backupCodes, setBackupCodes] = useState<string[]>([])\n const [verificationCode, setVerificationCode] = useState('')\n const [error, setError] = useState<string | null>(null)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n async function enableTwoFactor() {\n try {\n const response = await fetch('/api/auth/two-factor/enable', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({}),\n })\n\n if (response.ok) {\n const data = await response.json()\n setTotpUri(data.totpURI)\n setSecret(data.secret)\n setBackupCodes(data.backupCodes || [])\n setStep('qr')\n } else {\n const data = await response.json().catch(() => ({}))\n setError(data.message || 'Failed to enable two-factor authentication.')\n setStep('qr')\n }\n } catch {\n setError('An error occurred. Please try again.')\n setStep('qr')\n }\n }\n enableTwoFactor()\n }, [])\n\n async function handleVerify(e: FormEvent) {\n e.preventDefault()\n setLoading(true)\n setError(null)\n\n try {\n const response = await fetch('/api/auth/two-factor/verify-totp', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ code: verificationCode }),\n })\n\n if (response.ok) {\n if (backupCodes.length > 0) {\n setStep('backup')\n } else {\n setStep('complete')\n onSetupComplete?.()\n }\n } else {\n const data = await response.json().catch(() => ({}))\n setError(data.message || 'Invalid verification code. Please try again.')\n }\n } catch {\n setError('An error occurred. Please try again.')\n } finally {\n setLoading(false)\n }\n }\n\n function handleBackupContinue() {\n setStep('complete')\n onSetupComplete?.()\n }\n\n // Loading state\n if (step === 'loading') {\n return (\n <div\n style={{\n minHeight: '100vh',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--theme-bg)',\n }}\n >\n <div style={{ color: 'var(--theme-text)', opacity: 0.7 }}>\n Setting up two-factor authentication...\n </div>\n </div>\n )\n }\n\n // Complete state\n if (step === 'complete') {\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 textAlign: 'center',\n }}\n >\n {logo && (\n <div style={{ marginBottom: 'calc(var(--base) * 1.5)' }}>\n {logo}\n </div>\n )}\n\n <h1\n style={{\n color: 'var(--theme-success-500)',\n fontSize: 'var(--font-size-h3)',\n fontWeight: 600,\n margin: '0 0 var(--base) 0',\n }}\n >\n Two-Factor Enabled!\n </h1>\n\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.8,\n marginBottom: 'calc(var(--base) * 1.5)',\n fontSize: 'var(--font-size-small)',\n }}\n >\n Your account is now protected with two-factor authentication.\n </p>\n\n <a\n href={afterSetupPath}\n style={{\n display: 'inline-block',\n padding: 'calc(var(--base) * 0.75) calc(var(--base) * 1.5)',\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 textDecoration: 'none',\n }}\n >\n Continue\n </a>\n </div>\n </div>\n )\n }\n\n // Backup codes state\n if (step === 'backup') {\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: '450px',\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 Save Your Backup Codes\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 Store these codes safely. You can use them to access your account if you lose your authenticator.\n </p>\n\n <div\n style={{\n background: 'var(--theme-elevation-100)',\n padding: 'var(--base)',\n borderRadius: 'var(--style-radius-s)',\n marginBottom: 'calc(var(--base) * 1.5)',\n fontFamily: 'monospace',\n fontSize: 'var(--font-size-small)',\n }}\n >\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(2, 1fr)',\n gap: 'calc(var(--base) * 0.5)',\n }}\n >\n {backupCodes.map((code, index) => (\n <div\n key={index}\n style={{\n color: 'var(--theme-text)',\n padding: 'calc(var(--base) * 0.25)',\n }}\n >\n {code}\n </div>\n ))}\n </div>\n </div>\n\n <button\n onClick={() => {\n navigator.clipboard.writeText(backupCodes.join('\\n'))\n }}\n style={{\n width: '100%',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-elevation-150)',\n border: 'none',\n borderRadius: 'var(--style-radius-s)',\n color: 'var(--theme-text)',\n fontSize: 'var(--font-size-small)',\n cursor: 'pointer',\n marginBottom: 'var(--base)',\n }}\n >\n Copy to Clipboard\n </button>\n\n <button\n onClick={handleBackupContinue}\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: 'pointer',\n }}\n >\n I've Saved My Codes\n </button>\n </div>\n </div>\n )\n }\n\n // QR code and verify state\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 Scan the QR code with your authenticator app, then enter the code below.\n </p>\n\n {totpUri && (\n <div\n style={{\n textAlign: 'center',\n marginBottom: 'calc(var(--base) * 1.5)',\n }}\n >\n {/* QR code using QRServer.com API */}\n <img\n src={`https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${encodeURIComponent(totpUri)}`}\n alt=\"QR Code for authenticator app\"\n style={{\n width: '200px',\n height: '200px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: 'var(--style-radius-s)',\n }}\n />\n </div>\n )}\n\n {secret && (\n <div\n style={{\n marginBottom: 'calc(var(--base) * 1.5)',\n textAlign: 'center',\n }}\n >\n <p\n style={{\n color: 'var(--theme-text)',\n opacity: 0.7,\n fontSize: 'var(--font-size-small)',\n marginBottom: 'calc(var(--base) * 0.5)',\n }}\n >\n Or enter this code manually:\n </p>\n <code\n style={{\n display: 'inline-block',\n padding: 'calc(var(--base) * 0.5)',\n background: 'var(--theme-elevation-100)',\n borderRadius: 'var(--style-radius-s)',\n fontFamily: 'monospace',\n fontSize: 'var(--font-size-small)',\n color: 'var(--theme-text)',\n wordBreak: 'break-all',\n }}\n >\n {secret}\n </code>\n </div>\n )}\n\n <form onSubmit={handleVerify}>\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 Verification Code\n </label>\n <input\n id=\"code\"\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n autoComplete=\"one-time-code\"\n value={verificationCode}\n onChange={(e) => setVerificationCode(e.target.value.replace(/\\D/g, '').slice(0, 6))}\n required\n placeholder=\"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: '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 || verificationCode.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 || verificationCode.length !== 6 ? 'not-allowed' : 'pointer',\n opacity: loading || verificationCode.length !== 6 ? 0.7 : 1,\n transition: 'opacity 150ms ease',\n }}\n >\n {loading ? 'Verifying...' : 'Verify and Enable'}\n </button>\n </form>\n </div>\n </div>\n )\n}\n\nexport default TwoFactorSetupView\n"],"names":["useState","useEffect","TwoFactorSetupView","logo","title","afterSetupPath","onSetupComplete","step","setStep","totpUri","setTotpUri","secret","setSecret","backupCodes","setBackupCodes","verificationCode","setVerificationCode","error","setError","loading","setLoading","enableTwoFactor","response","fetch","method","headers","credentials","body","JSON","stringify","ok","data","json","totpURI","catch","message","handleVerify","e","preventDefault","code","length","handleBackupContinue","div","style","minHeight","display","alignItems","justifyContent","background","color","opacity","padding","borderRadius","boxShadow","width","maxWidth","textAlign","marginBottom","h1","fontSize","fontWeight","margin","p","a","href","border","textDecoration","fontFamily","gridTemplateColumns","gap","map","index","button","onClick","navigator","clipboard","writeText","join","cursor","img","src","encodeURIComponent","alt","height","wordBreak","form","onSubmit","label","htmlFor","input","id","type","inputMode","pattern","autoComplete","value","onChange","target","replace","slice","required","placeholder","letterSpacing","outline","boxSizing","disabled","transition"],"mappings":"AAAA;;AAEA,SAASA,QAAQ,EAAEC,SAAS,QAAwB,QAAO;AAa3D;;;;CAIC,GACD,OAAO,SAASC,mBAAmB,EACjCC,IAAI,EACJC,QAAQ,kCAAkC,EAC1CC,iBAAiB,QAAQ,EACzBC,eAAe,EACS;IACxB,MAAM,CAACC,MAAMC,QAAQ,GAAGR,SAA8D;IACtF,MAAM,CAACS,SAASC,WAAW,GAAGV,SAAwB;IACtD,MAAM,CAACW,QAAQC,UAAU,GAAGZ,SAAwB;IACpD,MAAM,CAACa,aAAaC,eAAe,GAAGd,SAAmB,EAAE;IAC3D,MAAM,CAACe,kBAAkBC,oBAAoB,GAAGhB,SAAS;IACzD,MAAM,CAACiB,OAAOC,SAAS,GAAGlB,SAAwB;IAClD,MAAM,CAACmB,SAASC,WAAW,GAAGpB,SAAS;IAEvCC,UAAU;QACR,eAAeoB;YACb,IAAI;gBACF,MAAMC,WAAW,MAAMC,MAAM,+BAA+B;oBAC1DC,QAAQ;oBACRC,SAAS;wBAAE,gBAAgB;oBAAmB;oBAC9CC,aAAa;oBACbC,MAAMC,KAAKC,SAAS,CAAC,CAAC;gBACxB;gBAEA,IAAIP,SAASQ,EAAE,EAAE;oBACf,MAAMC,OAAO,MAAMT,SAASU,IAAI;oBAChCtB,WAAWqB,KAAKE,OAAO;oBACvBrB,UAAUmB,KAAKpB,MAAM;oBACrBG,eAAeiB,KAAKlB,WAAW,IAAI,EAAE;oBACrCL,QAAQ;gBACV,OAAO;oBACL,MAAMuB,OAAO,MAAMT,SAASU,IAAI,GAAGE,KAAK,CAAC,IAAO,CAAA,CAAC,CAAA;oBACjDhB,SAASa,KAAKI,OAAO,IAAI;oBACzB3B,QAAQ;gBACV;YACF,EAAE,OAAM;gBACNU,SAAS;gBACTV,QAAQ;YACV;QACF;QACAa;IACF,GAAG,EAAE;IAEL,eAAee,aAAaC,CAAY;QACtCA,EAAEC,cAAc;QAChBlB,WAAW;QACXF,SAAS;QAET,IAAI;YACF,MAAMI,WAAW,MAAMC,MAAM,oCAAoC;gBAC/DC,QAAQ;gBACRC,SAAS;oBAAE,gBAAgB;gBAAmB;gBAC9CC,aAAa;gBACbC,MAAMC,KAAKC,SAAS,CAAC;oBAAEU,MAAMxB;gBAAiB;YAChD;YAEA,IAAIO,SAASQ,EAAE,EAAE;gBACf,IAAIjB,YAAY2B,MAAM,GAAG,GAAG;oBAC1BhC,QAAQ;gBACV,OAAO;oBACLA,QAAQ;oBACRF;gBACF;YACF,OAAO;gBACL,MAAMyB,OAAO,MAAMT,SAASU,IAAI,GAAGE,KAAK,CAAC,IAAO,CAAA,CAAC,CAAA;gBACjDhB,SAASa,KAAKI,OAAO,IAAI;YAC3B;QACF,EAAE,OAAM;YACNjB,SAAS;QACX,SAAU;YACRE,WAAW;QACb;IACF;IAEA,SAASqB;QACPjC,QAAQ;QACRF;IACF;IAEA,gBAAgB;IAChB,IAAIC,SAAS,WAAW;QACtB,qBACE,KAACmC;YACCC,OAAO;gBACLC,WAAW;gBACXC,SAAS;gBACTC,YAAY;gBACZC,gBAAgB;gBAChBC,YAAY;YACd;sBAEA,cAAA,KAACN;gBAAIC,OAAO;oBAAEM,OAAO;oBAAqBC,SAAS;gBAAI;0BAAG;;;IAKhE;IAEA,iBAAiB;IACjB,IAAI3C,SAAS,YAAY;QACvB,qBACE,KAACmC;YACCC,OAAO;gBACLC,WAAW;gBACXC,SAAS;gBACTC,YAAY;gBACZC,gBAAgB;gBAChBC,YAAY;gBACZG,SAAS;YACX;sBAEA,cAAA,MAACT;gBACCC,OAAO;oBACLK,YAAY;oBACZG,SAAS;oBACTC,cAAc;oBACdC,WAAW;oBACXC,OAAO;oBACPC,UAAU;oBACVC,WAAW;gBACb;;oBAECrD,sBACC,KAACuC;wBAAIC,OAAO;4BAAEc,cAAc;wBAA0B;kCACnDtD;;kCAIL,KAACuD;wBACCf,OAAO;4BACLM,OAAO;4BACPU,UAAU;4BACVC,YAAY;4BACZC,QAAQ;wBACV;kCACD;;kCAID,KAACC;wBACCnB,OAAO;4BACLM,OAAO;4BACPC,SAAS;4BACTO,cAAc;4BACdE,UAAU;wBACZ;kCACD;;kCAID,KAACI;wBACCC,MAAM3D;wBACNsC,OAAO;4BACLE,SAAS;4BACTM,SAAS;4BACTH,YAAY;4BACZiB,QAAQ;4BACRb,cAAc;4BACdH,OAAO;4BACPU,UAAU;4BACVC,YAAY;4BACZM,gBAAgB;wBAClB;kCACD;;;;;IAMT;IAEA,qBAAqB;IACrB,IAAI3D,SAAS,UAAU;QACrB,qBACE,KAACmC;YACCC,OAAO;gBACLC,WAAW;gBACXC,SAAS;gBACTC,YAAY;gBACZC,gBAAgB;gBAChBC,YAAY;gBACZG,SAAS;YACX;sBAEA,cAAA,MAACT;gBACCC,OAAO;oBACLK,YAAY;oBACZG,SAAS;oBACTC,cAAc;oBACdC,WAAW;oBACXC,OAAO;oBACPC,UAAU;gBACZ;;oBAECpD,sBACC,KAACuC;wBACCC,OAAO;4BACLa,WAAW;4BACXC,cAAc;wBAChB;kCAECtD;;kCAIL,KAACuD;wBACCf,OAAO;4BACLM,OAAO;4BACPU,UAAU;4BACVC,YAAY;4BACZC,QAAQ;4BACRL,WAAW;wBACb;kCACD;;kCAID,KAACM;wBACCnB,OAAO;4BACLM,OAAO;4BACPC,SAAS;4BACTS,UAAU;4BACVH,WAAW;4BACXC,cAAc;wBAChB;kCACD;;kCAID,KAACf;wBACCC,OAAO;4BACLK,YAAY;4BACZG,SAAS;4BACTC,cAAc;4BACdK,cAAc;4BACdU,YAAY;4BACZR,UAAU;wBACZ;kCAEA,cAAA,KAACjB;4BACCC,OAAO;gCACLE,SAAS;gCACTuB,qBAAqB;gCACrBC,KAAK;4BACP;sCAECxD,YAAYyD,GAAG,CAAC,CAAC/B,MAAMgC,sBACtB,KAAC7B;oCAECC,OAAO;wCACLM,OAAO;wCACPE,SAAS;oCACX;8CAECZ;mCANIgC;;;kCAYb,KAACC;wBACCC,SAAS;4BACPC,UAAUC,SAAS,CAACC,SAAS,CAAC/D,YAAYgE,IAAI,CAAC;wBACjD;wBACAlC,OAAO;4BACLW,OAAO;4BACPH,SAAS;4BACTH,YAAY;4BACZiB,QAAQ;4BACRb,cAAc;4BACdH,OAAO;4BACPU,UAAU;4BACVmB,QAAQ;4BACRrB,cAAc;wBAChB;kCACD;;kCAID,KAACe;wBACCC,SAAShC;wBACTE,OAAO;4BACLW,OAAO;4BACPH,SAAS;4BACTH,YAAY;4BACZiB,QAAQ;4BACRb,cAAc;4BACdH,OAAO;4BACPU,UAAU;4BACVC,YAAY;4BACZkB,QAAQ;wBACV;kCACD;;;;;IAMT;IAEA,2BAA2B;IAC3B,qBACE,KAACpC;QACCC,OAAO;YACLC,WAAW;YACXC,SAAS;YACTC,YAAY;YACZC,gBAAgB;YAChBC,YAAY;YACZG,SAAS;QACX;kBAEA,cAAA,MAACT;YACCC,OAAO;gBACLK,YAAY;gBACZG,SAAS;gBACTC,cAAc;gBACdC,WAAW;gBACXC,OAAO;gBACPC,UAAU;YACZ;;gBAECpD,sBACC,KAACuC;oBACCC,OAAO;wBACLa,WAAW;wBACXC,cAAc;oBAChB;8BAECtD;;8BAIL,KAACuD;oBACCf,OAAO;wBACLM,OAAO;wBACPU,UAAU;wBACVC,YAAY;wBACZC,QAAQ;wBACRL,WAAW;oBACb;8BAECpD;;8BAGH,KAAC0D;oBACCnB,OAAO;wBACLM,OAAO;wBACPC,SAAS;wBACTS,UAAU;wBACVH,WAAW;wBACXC,cAAc;oBAChB;8BACD;;gBAIAhD,yBACC,KAACiC;oBACCC,OAAO;wBACLa,WAAW;wBACXC,cAAc;oBAChB;8BAGA,cAAA,KAACsB;wBACCC,KAAK,CAAC,8DAA8D,EAAEC,mBAAmBxE,UAAU;wBACnGyE,KAAI;wBACJvC,OAAO;4BACLW,OAAO;4BACP6B,QAAQ;4BACRlB,QAAQ;4BACRb,cAAc;wBAChB;;;gBAKLzC,wBACC,MAAC+B;oBACCC,OAAO;wBACLc,cAAc;wBACdD,WAAW;oBACb;;sCAEA,KAACM;4BACCnB,OAAO;gCACLM,OAAO;gCACPC,SAAS;gCACTS,UAAU;gCACVF,cAAc;4BAChB;sCACD;;sCAGD,KAAClB;4BACCI,OAAO;gCACLE,SAAS;gCACTM,SAAS;gCACTH,YAAY;gCACZI,cAAc;gCACde,YAAY;gCACZR,UAAU;gCACVV,OAAO;gCACPmC,WAAW;4BACb;sCAECzE;;;;8BAKP,MAAC0E;oBAAKC,UAAUlD;;sCACd,MAACM;4BAAIC,OAAO;gCAAEc,cAAc;4BAA0B;;8CACpD,KAAC8B;oCACCC,SAAQ;oCACR7C,OAAO;wCACLE,SAAS;wCACTI,OAAO;wCACPQ,cAAc;wCACdE,UAAU;wCACVC,YAAY;oCACd;8CACD;;8CAGD,KAAC6B;oCACCC,IAAG;oCACHC,MAAK;oCACLC,WAAU;oCACVC,SAAQ;oCACRC,cAAa;oCACbC,OAAOhF;oCACPiF,UAAU,CAAC3D,IAAMrB,oBAAoBqB,EAAE4D,MAAM,CAACF,KAAK,CAACG,OAAO,CAAC,OAAO,IAAIC,KAAK,CAAC,GAAG;oCAChFC,QAAQ;oCACRC,aAAY;oCACZ1D,OAAO;wCACLW,OAAO;wCACPH,SAAS;wCACTH,YAAY;wCACZiB,QAAQ;wCACRb,cAAc;wCACdH,OAAO;wCACPU,UAAU;wCACVQ,YAAY;wCACZX,WAAW;wCACX8C,eAAe;wCACfC,SAAS;wCACTC,WAAW;oCACb;;;;wBAIHvF,uBACC,KAACyB;4BACCC,OAAO;gCACLM,OAAO;gCACPQ,cAAc;gCACdE,UAAU;gCACVR,SAAS;gCACTH,YAAY;gCACZI,cAAc;gCACda,QAAQ;4BACV;sCAEChD;;sCAIL,KAACuD;4BACCmB,MAAK;4BACLc,UAAUtF,WAAWJ,iBAAiByB,MAAM,KAAK;4BACjDG,OAAO;gCACLW,OAAO;gCACPH,SAAS;gCACTH,YAAY;gCACZiB,QAAQ;gCACRb,cAAc;gCACdH,OAAO;gCACPU,UAAU;gCACVC,YAAY;gCACZkB,QAAQ3D,WAAWJ,iBAAiByB,MAAM,KAAK,IAAI,gBAAgB;gCACnEU,SAAS/B,WAAWJ,iBAAiByB,MAAM,KAAK,IAAI,MAAM;gCAC1DkE,YAAY;4BACd;sCAECvF,UAAU,iBAAiB;;;;;;;AAMxC;AAEA,eAAejB,mBAAkB"}
|
|
@@ -13,6 +13,6 @@ export type TwoFactorVerifyViewProps = {
|
|
|
13
13
|
* Used during login flow when 2FA is enabled on the account.
|
|
14
14
|
* Uses Better Auth's twoFactor plugin endpoints.
|
|
15
15
|
*/
|
|
16
|
-
export declare function TwoFactorVerifyView({ logo, title, afterVerifyPath, onVerifyComplete, }: TwoFactorVerifyViewProps): import("react
|
|
16
|
+
export declare function TwoFactorVerifyView({ logo, title, afterVerifyPath, onVerifyComplete, }: TwoFactorVerifyViewProps): import("react").JSX.Element;
|
|
17
17
|
export default TwoFactorVerifyView;
|
|
18
18
|
//# sourceMappingURL=TwoFactorVerifyView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorVerifyView.d.ts","sourceRoot":"","sources":["../../../src/components/twoFactor/TwoFactorVerifyView.tsx"],"names":[],"mappings":"AAKA,MAAM,MAAM,wBAAwB,GAAG;IACrC,0BAA0B;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,KAAmC,EACnC,eAA0B,EAC1B,gBAAgB,GACjB,EAAE,wBAAwB
|
|
1
|
+
{"version":3,"file":"TwoFactorVerifyView.d.ts","sourceRoot":"","sources":["../../../src/components/twoFactor/TwoFactorVerifyView.tsx"],"names":[],"mappings":"AAKA,MAAM,MAAM,wBAAwB,GAAG;IACrC,0BAA0B;IAC1B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,KAAmC,EACnC,eAA0B,EAC1B,gBAAgB,GACjB,EAAE,wBAAwB,+BAiN1B;AAED,eAAe,mBAAmB,CAAA"}
|