@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
|
@@ -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"}
|