payload-auth 1.7.1 → 1.8.0-canary.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/better-auth/adapter/index.d.ts +1 -1
- package/dist/better-auth/adapter/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/index.js +57 -7
- package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/transform/index.js +47 -7
- package/dist/better-auth/generated-types.d.ts +13 -11
- package/dist/better-auth/generated-types.d.ts.map +1 -1
- package/dist/better-auth/generated-types.js +1 -1
- package/dist/better-auth/plugin/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/index.js +3 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +3 -2
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +5 -5
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +31 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +3 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +17 -8
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.d.ts +14 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/apply-save-to-jwt-returned.js +38 -0
- package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/alternative-methods.js +197 -0
- package/dist/better-auth/plugin/payload/components/login-form/context.d.ts +49 -0
- package/dist/better-auth/plugin/payload/components/login-form/context.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/context.js +94 -0
- package/dist/better-auth/plugin/payload/components/login-form/credentials-form.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/login-form/credentials-form.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/credentials-form.js +167 -0
- package/dist/better-auth/plugin/payload/components/login-form/index.d.ts +4 -0
- package/dist/better-auth/plugin/payload/components/login-form/index.d.ts.map +1 -0
- package/dist/better-auth/plugin/payload/components/login-form/index.js +6 -0
- package/dist/better-auth/plugin/payload/components/{social-provider-buttons → login-form}/index.scss +17 -12
- package/dist/better-auth/plugin/payload/components/passkeys/add-button.js +2 -2
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts +1 -0
- package/dist/better-auth/plugin/payload/components/rsc-redirect.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/components/rsc-redirect.js +7 -2
- package/dist/better-auth/plugin/payload/exports/client.d.ts +3 -2
- package/dist/better-auth/plugin/payload/exports/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/exports/client.js +4 -3
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts +11 -7
- package/dist/better-auth/plugin/payload/views/admin-login/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/client.js +17 -193
- package/dist/better-auth/plugin/payload/views/admin-login/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-login/index.js +25 -8
- package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts +6 -0
- package/dist/better-auth/plugin/payload/views/admin-signup/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-signup/client.js +12 -10
- package/dist/better-auth/plugin/payload/views/admin-signup/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/admin-signup/index.js +22 -3
- package/dist/better-auth/plugin/payload/views/forgot-password/client.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/views/forgot-password/client.js +17 -5
- package/dist/better-auth/plugin/payload/views/reset-password/index.js +2 -2
- package/dist/better-auth/scripts/generate-types.js +2 -2
- package/dist/index.js +2 -2
- package/dist/shared/form/fields/text-field.d.ts +2 -1
- package/dist/shared/form/fields/text-field.d.ts.map +1 -1
- package/dist/shared/form/fields/text-field.js +6 -3
- package/dist/shared/form/validation.d.ts +9 -69
- package/dist/shared/form/validation.d.ts.map +1 -1
- package/dist/shared/form/validation.js +11 -24
- package/package.json +40 -13
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +0 -16
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +0 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +0 -41
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts +0 -16
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.d.ts.map +0 -1
- package/dist/better-auth/plugin/payload/components/social-provider-buttons/index.js +0 -144
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { socialProviders } from "../../../constants";
|
|
4
|
+
import { Icons } from "../../../../../shared/components/icons";
|
|
5
|
+
import { isValidEmail } from "../../../../../shared/form/validation";
|
|
6
|
+
import { Button, toast } from "@payloadcms/ui";
|
|
7
|
+
import { Key, Mail } from "lucide-react";
|
|
8
|
+
import { useRouter } from "next/navigation";
|
|
9
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
10
|
+
import { useLoginForm } from "./context";
|
|
11
|
+
import "./index.scss";
|
|
12
|
+
const baseClass = 'login-form-methods';
|
|
13
|
+
const MagicLinkButton = ()=>{
|
|
14
|
+
const { email, authClient, redirectUrl, showIconOnly } = useLoginForm();
|
|
15
|
+
const [loading, setLoading] = useState(false);
|
|
16
|
+
const [sent, setSent] = useState(false);
|
|
17
|
+
const sentEmailRef = useRef('');
|
|
18
|
+
useEffect(()=>{
|
|
19
|
+
if (sent && email !== sentEmailRef.current) {
|
|
20
|
+
setSent(false);
|
|
21
|
+
}
|
|
22
|
+
}, [
|
|
23
|
+
email,
|
|
24
|
+
sent
|
|
25
|
+
]);
|
|
26
|
+
const handleClick = async ()=>{
|
|
27
|
+
if (!email) {
|
|
28
|
+
toast.error('Please enter your email address');
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (!isValidEmail(email)) {
|
|
32
|
+
toast.error('Please enter a valid email address');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
setLoading(true);
|
|
36
|
+
try {
|
|
37
|
+
const { error } = await authClient.signIn.magicLink({
|
|
38
|
+
email,
|
|
39
|
+
callbackURL: redirectUrl
|
|
40
|
+
});
|
|
41
|
+
if (error) {
|
|
42
|
+
toast.error(error.message || 'Failed to send magic link');
|
|
43
|
+
} else {
|
|
44
|
+
sentEmailRef.current = email;
|
|
45
|
+
setSent(true);
|
|
46
|
+
toast.success('Magic link sent! Check your email.');
|
|
47
|
+
}
|
|
48
|
+
} catch (error) {
|
|
49
|
+
toast.error(error?.message || 'Failed to send magic link');
|
|
50
|
+
} finally{
|
|
51
|
+
setLoading(false);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const label = sent ? 'Resend Magic Link' : 'Magic Link';
|
|
55
|
+
return /*#__PURE__*/ _jsx(Button, {
|
|
56
|
+
type: "button",
|
|
57
|
+
size: "large",
|
|
58
|
+
className: `${baseClass}__button provider--magic-link`,
|
|
59
|
+
onClick: handleClick,
|
|
60
|
+
disabled: loading,
|
|
61
|
+
iconPosition: "left",
|
|
62
|
+
icon: /*#__PURE__*/ _jsx(Mail, {
|
|
63
|
+
className: `${baseClass}__icon`
|
|
64
|
+
}),
|
|
65
|
+
tooltip: showIconOnly ? 'Sign in with Magic Link' : undefined,
|
|
66
|
+
children: !showIconOnly && /*#__PURE__*/ _jsx("span", {
|
|
67
|
+
children: loading ? 'Sending...' : label
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
const PasskeyButton = ({ setLoading })=>{
|
|
72
|
+
const router = useRouter();
|
|
73
|
+
const { authClient, redirectUrl, showIconOnly } = useLoginForm();
|
|
74
|
+
const handleClick = async ()=>{
|
|
75
|
+
setLoading(true);
|
|
76
|
+
try {
|
|
77
|
+
await authClient.signIn.passkey({
|
|
78
|
+
fetchOptions: {
|
|
79
|
+
onSuccess () {
|
|
80
|
+
if (redirectUrl) router.push(redirectUrl);
|
|
81
|
+
},
|
|
82
|
+
onError (context) {
|
|
83
|
+
toast.error(context.error.message || 'Failed to sign in with passkey');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
} catch (error) {
|
|
88
|
+
toast.error(error?.message || 'Failed to sign in with passkey');
|
|
89
|
+
} finally{
|
|
90
|
+
setLoading(false);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return /*#__PURE__*/ _jsx(Button, {
|
|
94
|
+
type: "button",
|
|
95
|
+
size: "large",
|
|
96
|
+
className: `${baseClass}__button provider--passkey`,
|
|
97
|
+
onClick: handleClick,
|
|
98
|
+
iconPosition: "left",
|
|
99
|
+
icon: /*#__PURE__*/ _jsx(Key, {
|
|
100
|
+
className: `${baseClass}__icon`
|
|
101
|
+
}),
|
|
102
|
+
tooltip: showIconOnly ? 'Sign in with Passkey' : undefined,
|
|
103
|
+
children: !showIconOnly && /*#__PURE__*/ _jsx("span", {
|
|
104
|
+
children: "Passkey"
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
const SocialButton = ({ provider, setLoading })=>{
|
|
109
|
+
const { authClient, redirectUrl, isSignup, showIconOnly, adminInviteToken, newUserCallbackURL } = useLoginForm();
|
|
110
|
+
const Icon = Icons[provider] ?? null;
|
|
111
|
+
const providerName = provider.charAt(0).toUpperCase() + provider.slice(1);
|
|
112
|
+
const handleClick = async ()=>{
|
|
113
|
+
setLoading(true);
|
|
114
|
+
try {
|
|
115
|
+
const { error } = await authClient.signIn.social({
|
|
116
|
+
provider,
|
|
117
|
+
fetchOptions: {
|
|
118
|
+
query: {
|
|
119
|
+
...isSignup && {
|
|
120
|
+
adminInviteToken
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
errorCallbackURL: window.location.href,
|
|
125
|
+
callbackURL: redirectUrl,
|
|
126
|
+
newUserCallbackURL,
|
|
127
|
+
...isSignup && {
|
|
128
|
+
requestSignUp: true
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
if (error) {
|
|
132
|
+
toast.error(error.message);
|
|
133
|
+
}
|
|
134
|
+
} catch {
|
|
135
|
+
toast.error(`Failed to sign in with ${providerName}`);
|
|
136
|
+
} finally{
|
|
137
|
+
setLoading(false);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
return /*#__PURE__*/ _jsx(Button, {
|
|
141
|
+
type: "button",
|
|
142
|
+
size: "large",
|
|
143
|
+
className: `${baseClass}__button provider--${provider}`,
|
|
144
|
+
onClick: handleClick,
|
|
145
|
+
iconPosition: "left",
|
|
146
|
+
icon: Icon ? /*#__PURE__*/ _jsx(Icon, {
|
|
147
|
+
className: `${baseClass}__icon`
|
|
148
|
+
}) : undefined,
|
|
149
|
+
tooltip: showIconOnly ? `Sign in with ${providerName}` : undefined,
|
|
150
|
+
children: !showIconOnly && /*#__PURE__*/ _jsx("span", {
|
|
151
|
+
children: providerName
|
|
152
|
+
})
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
export const AlternativeMethods = ()=>{
|
|
156
|
+
const { alternativeMethods, hasMethod, isSignup, showIconOnly } = useLoginForm();
|
|
157
|
+
const [loading, setLoading] = useState(false);
|
|
158
|
+
if (alternativeMethods.length === 0) return null;
|
|
159
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
160
|
+
children: [
|
|
161
|
+
hasMethod('emailPassword') && /*#__PURE__*/ _jsx("div", {
|
|
162
|
+
className: `${baseClass}__divider`,
|
|
163
|
+
children: /*#__PURE__*/ _jsxs("span", {
|
|
164
|
+
children: [
|
|
165
|
+
"Or ",
|
|
166
|
+
isSignup ? 'sign up' : 'login',
|
|
167
|
+
" with"
|
|
168
|
+
]
|
|
169
|
+
})
|
|
170
|
+
}),
|
|
171
|
+
/*#__PURE__*/ _jsx("div", {
|
|
172
|
+
className: `${baseClass} ${baseClass}--count-${showIconOnly ? 'many' : alternativeMethods.length}`,
|
|
173
|
+
children: alternativeMethods.map((method)=>{
|
|
174
|
+
if (method === 'passkey') {
|
|
175
|
+
if (isSignup) return null;
|
|
176
|
+
return /*#__PURE__*/ _jsx(PasskeyButton, {
|
|
177
|
+
setLoading: setLoading
|
|
178
|
+
}, method);
|
|
179
|
+
}
|
|
180
|
+
if (method === 'magicLink') {
|
|
181
|
+
if (isSignup) return null;
|
|
182
|
+
return /*#__PURE__*/ _jsx(MagicLinkButton, {}, method);
|
|
183
|
+
}
|
|
184
|
+
if (socialProviders.includes(method)) {
|
|
185
|
+
return /*#__PURE__*/ _jsx(SocialButton, {
|
|
186
|
+
provider: method,
|
|
187
|
+
setLoading: setLoading
|
|
188
|
+
}, method);
|
|
189
|
+
}
|
|
190
|
+
return null;
|
|
191
|
+
})
|
|
192
|
+
})
|
|
193
|
+
]
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9jb21wb25lbnRzL2xvZ2luLWZvcm0vYWx0ZXJuYXRpdmUtbWV0aG9kcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHNvY2lhbFByb3ZpZGVycyB9IGZyb20gJ0AvYmV0dGVyLWF1dGgvcGx1Z2luL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgU29jaWFsUHJvdmlkZXIgfSBmcm9tICdAL2JldHRlci1hdXRoL3BsdWdpbi90eXBlcydcbmltcG9ydCB7IEljb25zIH0gZnJvbSAnQC9zaGFyZWQvY29tcG9uZW50cy9pY29ucydcbmltcG9ydCB7IGlzVmFsaWRFbWFpbCB9IGZyb20gJ0Avc2hhcmVkL2Zvcm0vdmFsaWRhdGlvbidcbmltcG9ydCB7IEJ1dHRvbiwgdG9hc3QgfSBmcm9tICdAcGF5bG9hZGNtcy91aSdcbmltcG9ydCB7IEtleSwgTWFpbCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbidcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUxvZ2luRm9ybSB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnbG9naW4tZm9ybS1tZXRob2RzJ1xuXG5jb25zdCBNYWdpY0xpbmtCdXR0b246IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IGVtYWlsLCBhdXRoQ2xpZW50LCByZWRpcmVjdFVybCwgc2hvd0ljb25Pbmx5IH0gPSB1c2VMb2dpbkZvcm0oKVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbnQsIHNldFNlbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHNlbnRFbWFpbFJlZiA9IHVzZVJlZignJylcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZW50ICYmIGVtYWlsICE9PSBzZW50RW1haWxSZWYuY3VycmVudCkge1xuICAgICAgc2V0U2VudChmYWxzZSlcbiAgICB9XG4gIH0sIFtlbWFpbCwgc2VudF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFlbWFpbCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1BsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghaXNWYWxpZEVtYWlsKGVtYWlsKSkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1BsZWFzZSBlbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBhdXRoQ2xpZW50LnNpZ25Jbi5tYWdpY0xpbmsoeyBlbWFpbCwgY2FsbGJhY2tVUkw6IHJlZGlyZWN0VXJsIH0pXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoZXJyb3IubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHNlbmQgbWFnaWMgbGluaycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZW50RW1haWxSZWYuY3VycmVudCA9IGVtYWlsXG4gICAgICAgIHNldFNlbnQodHJ1ZSlcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnTWFnaWMgbGluayBzZW50ISBDaGVjayB5b3VyIGVtYWlsLicpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdG9hc3QuZXJyb3IoZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzZW5kIG1hZ2ljIGxpbmsnKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxhYmVsID0gc2VudCA/ICdSZXNlbmQgTWFnaWMgTGluaycgOiAnTWFnaWMgTGluaydcblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYnV0dG9uIHByb3ZpZGVyLS1tYWdpYy1saW5rYH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgZGlzYWJsZWQ9e2xvYWRpbmd9XG4gICAgICBpY29uUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgIGljb249ezxNYWlsIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faWNvbmB9IC8+fVxuICAgICAgdG9vbHRpcD17c2hvd0ljb25Pbmx5ID8gJ1NpZ24gaW4gd2l0aCBNYWdpYyBMaW5rJyA6IHVuZGVmaW5lZH0+XG4gICAgICB7IXNob3dJY29uT25seSAmJiA8c3Bhbj57bG9hZGluZyA/ICdTZW5kaW5nLi4uJyA6IGxhYmVsfTwvc3Bhbj59XG4gICAgPC9CdXR0b24+XG4gIClcbn1cblxudHlwZSBQYXNza2V5QnV0dG9uUHJvcHMgPSB7XG4gIHNldExvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB2b2lkXG59XG5cbmNvbnN0IFBhc3NrZXlCdXR0b246IFJlYWN0LkZDPFBhc3NrZXlCdXR0b25Qcm9wcz4gPSAoeyBzZXRMb2FkaW5nIH0pID0+IHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcbiAgY29uc3QgeyBhdXRoQ2xpZW50LCByZWRpcmVjdFVybCwgc2hvd0ljb25Pbmx5IH0gPSB1c2VMb2dpbkZvcm0oKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gYXN5bmMgKCkgPT4ge1xuICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXV0aENsaWVudC5zaWduSW4ucGFzc2tleSh7XG4gICAgICAgIGZldGNoT3B0aW9uczoge1xuICAgICAgICAgIG9uU3VjY2VzcygpIHtcbiAgICAgICAgICAgIGlmIChyZWRpcmVjdFVybCkgcm91dGVyLnB1c2gocmVkaXJlY3RVcmwpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yKGNvbnRleHQ6IGFueSkge1xuICAgICAgICAgICAgdG9hc3QuZXJyb3IoY29udGV4dC5lcnJvci5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gc2lnbiBpbiB3aXRoIHBhc3NrZXknKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICB0b2FzdC5lcnJvcihlcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHNpZ24gaW4gd2l0aCBwYXNza2V5JylcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYnV0dG9uIHByb3ZpZGVyLS1wYXNza2V5YH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgaWNvblBvc2l0aW9uPVwibGVmdFwiXG4gICAgICBpY29uPXs8S2V5IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faWNvbmB9IC8+fVxuICAgICAgdG9vbHRpcD17c2hvd0ljb25Pbmx5ID8gJ1NpZ24gaW4gd2l0aCBQYXNza2V5JyA6IHVuZGVmaW5lZH0+XG4gICAgICB7IXNob3dJY29uT25seSAmJiA8c3Bhbj5QYXNza2V5PC9zcGFuPn1cbiAgICA8L0J1dHRvbj5cbiAgKVxufVxuXG50eXBlIFNvY2lhbEJ1dHRvblByb3BzID0ge1xuICBwcm92aWRlcjogU29jaWFsUHJvdmlkZXJcbiAgc2V0TG9hZGluZzogKGxvYWRpbmc6IGJvb2xlYW4pID0+IHZvaWRcbn1cblxuY29uc3QgU29jaWFsQnV0dG9uOiBSZWFjdC5GQzxTb2NpYWxCdXR0b25Qcm9wcz4gPSAoeyBwcm92aWRlciwgc2V0TG9hZGluZyB9KSA9PiB7XG4gIGNvbnN0IHsgYXV0aENsaWVudCwgcmVkaXJlY3RVcmwsIGlzU2lnbnVwLCBzaG93SWNvbk9ubHksIGFkbWluSW52aXRlVG9rZW4sIG5ld1VzZXJDYWxsYmFja1VSTCB9ID0gdXNlTG9naW5Gb3JtKClcbiAgY29uc3QgSWNvbiA9IEljb25zW3Byb3ZpZGVyIGFzIGtleW9mIHR5cGVvZiBJY29uc10gPz8gbnVsbFxuICBjb25zdCBwcm92aWRlck5hbWUgPSBwcm92aWRlci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3ZpZGVyLnNsaWNlKDEpXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBhdXRoQ2xpZW50LnNpZ25Jbi5zb2NpYWwoe1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgZmV0Y2hPcHRpb25zOiB7XG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLihpc1NpZ251cCAmJiB7IGFkbWluSW52aXRlVG9rZW4gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yQ2FsbGJhY2tVUkw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICBjYWxsYmFja1VSTDogcmVkaXJlY3RVcmwsXG4gICAgICAgIG5ld1VzZXJDYWxsYmFja1VSTCxcbiAgICAgICAgLi4uKGlzU2lnbnVwICYmIHsgcmVxdWVzdFNpZ25VcDogdHJ1ZSB9KVxuICAgICAgfSlcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICB0b2FzdC5lcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdG9hc3QuZXJyb3IoYEZhaWxlZCB0byBzaWduIGluIHdpdGggJHtwcm92aWRlck5hbWV9YClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYnV0dG9uIHByb3ZpZGVyLS0ke3Byb3ZpZGVyfWB9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgaWNvbj17SWNvbiA/IDxJY29uIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9faWNvbmB9IC8+IDogdW5kZWZpbmVkfVxuICAgICAgdG9vbHRpcD17c2hvd0ljb25Pbmx5ID8gYFNpZ24gaW4gd2l0aCAke3Byb3ZpZGVyTmFtZX1gIDogdW5kZWZpbmVkfT5cbiAgICAgIHshc2hvd0ljb25Pbmx5ICYmIDxzcGFuPntwcm92aWRlck5hbWV9PC9zcGFuPn1cbiAgICA8L0J1dHRvbj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQWx0ZXJuYXRpdmVNZXRob2RzOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBhbHRlcm5hdGl2ZU1ldGhvZHMsIGhhc01ldGhvZCwgaXNTaWdudXAsIHNob3dJY29uT25seSB9ID0gdXNlTG9naW5Gb3JtKClcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIFxuICBpZiAoYWx0ZXJuYXRpdmVNZXRob2RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGxcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzTWV0aG9kKCdlbWFpbFBhc3N3b3JkJykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZGl2aWRlcmB9PlxuICAgICAgICAgIDxzcGFuPk9yIHtpc1NpZ251cCA/ICdzaWduIHVwJyA6ICdsb2dpbid9IHdpdGg8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9ICR7YmFzZUNsYXNzfS0tY291bnQtJHtzaG93SWNvbk9ubHkgPyAnbWFueScgOiBhbHRlcm5hdGl2ZU1ldGhvZHMubGVuZ3RofWB9PlxuICAgICAgICB7YWx0ZXJuYXRpdmVNZXRob2RzLm1hcCgobWV0aG9kKSA9PiB7XG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3Bhc3NrZXknKSB7XG4gICAgICAgICAgICBpZiAoaXNTaWdudXApIHJldHVybiBudWxsXG4gICAgICAgICAgICByZXR1cm4gPFBhc3NrZXlCdXR0b24ga2V5PXttZXRob2R9IHNldExvYWRpbmc9e3NldExvYWRpbmd9IC8+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ21hZ2ljTGluaycpIHtcbiAgICAgICAgICAgIGlmIChpc1NpZ251cCkgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIHJldHVybiA8TWFnaWNMaW5rQnV0dG9uIGtleT17bWV0aG9kfSAvPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzb2NpYWxQcm92aWRlcnMuaW5jbHVkZXMobWV0aG9kIGFzIFNvY2lhbFByb3ZpZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxTb2NpYWxCdXR0b24ga2V5PXttZXRob2R9IHByb3ZpZGVyPXttZXRob2QgYXMgU29jaWFsUHJvdmlkZXJ9IHNldExvYWRpbmc9e3NldExvYWRpbmd9IC8+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKVxufVxuXG4iXSwibmFtZXMiOlsic29jaWFsUHJvdmlkZXJzIiwiSWNvbnMiLCJpc1ZhbGlkRW1haWwiLCJCdXR0b24iLCJ0b2FzdCIsIktleSIsIk1haWwiLCJ1c2VSb3V0ZXIiLCJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwidXNlTG9naW5Gb3JtIiwiYmFzZUNsYXNzIiwiTWFnaWNMaW5rQnV0dG9uIiwiZW1haWwiLCJhdXRoQ2xpZW50IiwicmVkaXJlY3RVcmwiLCJzaG93SWNvbk9ubHkiLCJsb2FkaW5nIiwic2V0TG9hZGluZyIsInNlbnQiLCJzZXRTZW50Iiwic2VudEVtYWlsUmVmIiwiY3VycmVudCIsImhhbmRsZUNsaWNrIiwiZXJyb3IiLCJzaWduSW4iLCJtYWdpY0xpbmsiLCJjYWxsYmFja1VSTCIsIm1lc3NhZ2UiLCJzdWNjZXNzIiwibGFiZWwiLCJ0eXBlIiwic2l6ZSIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJkaXNhYmxlZCIsImljb25Qb3NpdGlvbiIsImljb24iLCJ0b29sdGlwIiwidW5kZWZpbmVkIiwic3BhbiIsIlBhc3NrZXlCdXR0b24iLCJyb3V0ZXIiLCJwYXNza2V5IiwiZmV0Y2hPcHRpb25zIiwib25TdWNjZXNzIiwicHVzaCIsIm9uRXJyb3IiLCJjb250ZXh0IiwiU29jaWFsQnV0dG9uIiwicHJvdmlkZXIiLCJpc1NpZ251cCIsImFkbWluSW52aXRlVG9rZW4iLCJuZXdVc2VyQ2FsbGJhY2tVUkwiLCJJY29uIiwicHJvdmlkZXJOYW1lIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInNvY2lhbCIsInF1ZXJ5IiwiZXJyb3JDYWxsYmFja1VSTCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsInJlcXVlc3RTaWduVXAiLCJBbHRlcm5hdGl2ZU1ldGhvZHMiLCJhbHRlcm5hdGl2ZU1ldGhvZHMiLCJoYXNNZXRob2QiLCJsZW5ndGgiLCJkaXYiLCJtYXAiLCJtZXRob2QiLCJpbmNsdWRlcyJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsU0FBU0EsZUFBZSxRQUFRLHFCQUFnQztBQUVoRSxTQUFTQyxLQUFLLFFBQVEseUNBQTJCO0FBQ2pELFNBQVNDLFlBQVksUUFBUSx3Q0FBMEI7QUFDdkQsU0FBU0MsTUFBTSxFQUFFQyxLQUFLLFFBQVEs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
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { LoginMethod } from '@/better-auth/plugin/types';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
type LoginFormContextValue = {
|
|
4
|
+
loginMethods: LoginMethod[];
|
|
5
|
+
email: string;
|
|
6
|
+
setEmail: (email: string) => void;
|
|
7
|
+
redirectUrl: string;
|
|
8
|
+
isSignup: boolean;
|
|
9
|
+
authClient: any;
|
|
10
|
+
loginType: 'email' | 'username' | 'emailOrUsername';
|
|
11
|
+
hasMethod: (method: LoginMethod) => boolean;
|
|
12
|
+
alternativeMethods: LoginMethod[];
|
|
13
|
+
showIconOnly: boolean;
|
|
14
|
+
adminInviteToken?: string;
|
|
15
|
+
newUserCallbackURL?: string;
|
|
16
|
+
prefill: {
|
|
17
|
+
email?: string;
|
|
18
|
+
password?: string;
|
|
19
|
+
username?: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
type Prefill = {
|
|
23
|
+
email?: string;
|
|
24
|
+
password?: string;
|
|
25
|
+
username?: string;
|
|
26
|
+
};
|
|
27
|
+
type Plugins = {
|
|
28
|
+
username?: boolean;
|
|
29
|
+
passkey?: boolean;
|
|
30
|
+
magicLink?: boolean;
|
|
31
|
+
};
|
|
32
|
+
type LoginIdentifier = 'email' | 'username';
|
|
33
|
+
export type LoginFormProviderProps = {
|
|
34
|
+
children: React.ReactNode;
|
|
35
|
+
loginMethods: LoginMethod[];
|
|
36
|
+
redirectUrl: string;
|
|
37
|
+
baseURL?: string;
|
|
38
|
+
basePath?: string;
|
|
39
|
+
isSignup?: boolean;
|
|
40
|
+
loginIdentifiers: LoginIdentifier[];
|
|
41
|
+
plugins?: Plugins;
|
|
42
|
+
prefill?: Prefill;
|
|
43
|
+
adminInviteToken?: string;
|
|
44
|
+
newUserCallbackURL?: string;
|
|
45
|
+
};
|
|
46
|
+
export declare const LoginFormProvider: React.FC<LoginFormProviderProps>;
|
|
47
|
+
export declare const useLoginForm: () => LoginFormContextValue;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../../../src/better-auth/plugin/payload/components/login-form/context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,KAAuD,MAAM,OAAO,CAAA;AAO3E,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,GAAG,CAAA;IACf,SAAS,EAAE,OAAO,GAAG,UAAU,GAAG,iBAAiB,CAAA;IACnD,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAA;IAC3C,kBAAkB,EAAE,WAAW,EAAE,CAAA;IACjC,YAAY,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF,CAAA;AAID,KAAK,OAAO,GAAG;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,KAAK,OAAO,GAAG;IACb,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,KAAK,eAAe,GAAG,OAAO,GAAG,UAAU,CAAA;AAE3C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAgF9D,CAAA;AAED,eAAO,MAAM,YAAY,6BAMxB,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React, { createContext, useContext, useMemo, useState } from "react";
|
|
4
|
+
import { createAuthClient } from "better-auth/react";
|
|
5
|
+
import { usernameClient, twoFactorClient, magicLinkClient } from "better-auth/client/plugins";
|
|
6
|
+
import { passkeyClient } from "@better-auth/passkey/client";
|
|
7
|
+
import { useRouter } from "next/navigation";
|
|
8
|
+
import { adminRoutes } from "../../../constants";
|
|
9
|
+
const LoginFormContext = /*#__PURE__*/ createContext(null);
|
|
10
|
+
export const LoginFormProvider = ({ children, loginMethods, redirectUrl, baseURL, basePath, isSignup = false, loginIdentifiers, plugins, prefill, adminInviteToken, newUserCallbackURL })=>{
|
|
11
|
+
const { username: hasUsernamePlugin = false, passkey: hasPasskeyPlugin = false, magicLink: hasMagicLinkPlugin = false } = plugins ?? {};
|
|
12
|
+
const resolvedPrefill = prefill ?? {};
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
const [email, setEmail] = useState(resolvedPrefill.email ?? '');
|
|
15
|
+
const authClient = useMemo(()=>createAuthClient({
|
|
16
|
+
baseURL,
|
|
17
|
+
basePath,
|
|
18
|
+
plugins: [
|
|
19
|
+
usernameClient(),
|
|
20
|
+
twoFactorClient({
|
|
21
|
+
onTwoFactorRedirect () {
|
|
22
|
+
router.push(`${redirectUrl.split('?')[0]}${adminRoutes.twoFactorVerify}?redirect=${redirectUrl}`);
|
|
23
|
+
}
|
|
24
|
+
}),
|
|
25
|
+
...hasPasskeyPlugin ? [
|
|
26
|
+
passkeyClient()
|
|
27
|
+
] : [],
|
|
28
|
+
...hasMagicLinkPlugin || loginMethods.includes('magicLink') ? [
|
|
29
|
+
magicLinkClient()
|
|
30
|
+
] : []
|
|
31
|
+
]
|
|
32
|
+
}), [
|
|
33
|
+
baseURL,
|
|
34
|
+
basePath,
|
|
35
|
+
hasMagicLinkPlugin,
|
|
36
|
+
hasPasskeyPlugin,
|
|
37
|
+
loginMethods,
|
|
38
|
+
redirectUrl,
|
|
39
|
+
router
|
|
40
|
+
]);
|
|
41
|
+
const canLoginWithEmail = loginIdentifiers.includes('email');
|
|
42
|
+
const canLoginWithUsername = loginIdentifiers.includes('username');
|
|
43
|
+
const loginType = useMemo(()=>{
|
|
44
|
+
if (canLoginWithEmail && canLoginWithUsername && hasUsernamePlugin) return 'emailOrUsername';
|
|
45
|
+
if (canLoginWithUsername && hasUsernamePlugin) return 'username';
|
|
46
|
+
return 'email';
|
|
47
|
+
}, [
|
|
48
|
+
canLoginWithEmail,
|
|
49
|
+
canLoginWithUsername,
|
|
50
|
+
hasUsernamePlugin
|
|
51
|
+
]);
|
|
52
|
+
const hasMethod = (method)=>loginMethods.includes(method);
|
|
53
|
+
const alternativeMethods = useMemo(()=>loginMethods.filter((m)=>{
|
|
54
|
+
if (m === 'emailPassword') return false;
|
|
55
|
+
if (isSignup && (m === 'passkey' || m === 'magicLink')) return false;
|
|
56
|
+
return true;
|
|
57
|
+
}), [
|
|
58
|
+
loginMethods,
|
|
59
|
+
isSignup
|
|
60
|
+
]);
|
|
61
|
+
const showIconOnly = alternativeMethods.length >= 3;
|
|
62
|
+
const value = {
|
|
63
|
+
loginMethods,
|
|
64
|
+
email,
|
|
65
|
+
setEmail,
|
|
66
|
+
redirectUrl,
|
|
67
|
+
isSignup,
|
|
68
|
+
authClient,
|
|
69
|
+
loginType,
|
|
70
|
+
hasMethod,
|
|
71
|
+
alternativeMethods,
|
|
72
|
+
showIconOnly,
|
|
73
|
+
adminInviteToken,
|
|
74
|
+
newUserCallbackURL,
|
|
75
|
+
prefill: {
|
|
76
|
+
email: resolvedPrefill.email,
|
|
77
|
+
password: resolvedPrefill.password,
|
|
78
|
+
username: resolvedPrefill.username
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
return /*#__PURE__*/ _jsx(LoginFormContext.Provider, {
|
|
82
|
+
value: value,
|
|
83
|
+
children: children
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
export const useLoginForm = ()=>{
|
|
87
|
+
const context = useContext(LoginFormContext);
|
|
88
|
+
if (!context) {
|
|
89
|
+
throw new Error('useLoginForm must be used within a LoginFormProvider');
|
|
90
|
+
}
|
|
91
|
+
return context;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9jb21wb25lbnRzL2xvZ2luLWZvcm0vY29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB0eXBlIHsgTG9naW5NZXRob2QgfSBmcm9tICdAL2JldHRlci1hdXRoL3BsdWdpbi90eXBlcydcbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlQXV0aENsaWVudCB9IGZyb20gJ2JldHRlci1hdXRoL3JlYWN0J1xuaW1wb3J0IHsgdXNlcm5hbWVDbGllbnQsIHR3b0ZhY3RvckNsaWVudCwgbWFnaWNMaW5rQ2xpZW50IH0gZnJvbSAnYmV0dGVyLWF1dGgvY2xpZW50L3BsdWdpbnMnXG5pbXBvcnQgeyBwYXNza2V5Q2xpZW50IH0gZnJvbSAnQGJldHRlci1hdXRoL3Bhc3NrZXkvY2xpZW50J1xuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSAnbmV4dC9uYXZpZ2F0aW9uJ1xuaW1wb3J0IHsgYWRtaW5Sb3V0ZXMgfSBmcm9tICdAL2JldHRlci1hdXRoL3BsdWdpbi9jb25zdGFudHMnXG5cbnR5cGUgTG9naW5Gb3JtQ29udGV4dFZhbHVlID0ge1xuICBsb2dpbk1ldGhvZHM6IExvZ2luTWV0aG9kW11cbiAgZW1haWw6IHN0cmluZ1xuICBzZXRFbWFpbDogKGVtYWlsOiBzdHJpbmcpID0+IHZvaWRcbiAgcmVkaXJlY3RVcmw6IHN0cmluZ1xuICBpc1NpZ251cDogYm9vbGVhblxuICBhdXRoQ2xpZW50OiBhbnlcbiAgbG9naW5UeXBlOiAnZW1haWwnIHwgJ3VzZXJuYW1lJyB8ICdlbWFpbE9yVXNlcm5hbWUnXG4gIGhhc01ldGhvZDogKG1ldGhvZDogTG9naW5NZXRob2QpID0+IGJvb2xlYW5cbiAgYWx0ZXJuYXRpdmVNZXRob2RzOiBMb2dpbk1ldGhvZFtdXG4gIHNob3dJY29uT25seTogYm9vbGVhblxuICBhZG1pbkludml0ZVRva2VuPzogc3RyaW5nXG4gIG5ld1VzZXJDYWxsYmFja1VSTD86IHN0cmluZ1xuICBwcmVmaWxsOiB7XG4gICAgZW1haWw/OiBzdHJpbmdcbiAgICBwYXNzd29yZD86IHN0cmluZ1xuICAgIHVzZXJuYW1lPzogc3RyaW5nXG4gIH1cbn1cblxuY29uc3QgTG9naW5Gb3JtQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8TG9naW5Gb3JtQ29udGV4dFZhbHVlIHwgbnVsbD4obnVsbClcblxudHlwZSBQcmVmaWxsID0ge1xuICBlbWFpbD86IHN0cmluZ1xuICBwYXNzd29yZD86IHN0cmluZ1xuICB1c2VybmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFBsdWdpbnMgPSB7XG4gIHVzZXJuYW1lPzogYm9vbGVhblxuICBwYXNza2V5PzogYm9vbGVhblxuICBtYWdpY0xpbms/OiBib29sZWFuXG59XG5cbnR5cGUgTG9naW5JZGVudGlmaWVyID0gJ2VtYWlsJyB8ICd1c2VybmFtZSdcblxuZXhwb3J0IHR5cGUgTG9naW5Gb3JtUHJvdmlkZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBsb2dpbk1ldGhvZHM6IExvZ2luTWV0aG9kW11cbiAgcmVkaXJlY3RVcmw6IHN0cmluZ1xuICBiYXNlVVJMPzogc3RyaW5nXG4gIGJhc2VQYXRoPzogc3RyaW5nXG4gIGlzU2lnbnVwPzogYm9vbGVhblxuICBsb2dpbklkZW50aWZpZXJzOiBMb2dpbklkZW50aWZpZXJbXVxuICBwbHVnaW5zPzogUGx1Z2luc1xuICBwcmVmaWxsPzogUHJlZmlsbFxuICBhZG1pbkludml0ZVRva2VuPzogc3RyaW5nXG4gIG5ld1VzZXJDYWxsYmFja1VSTD86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTG9naW5Gb3JtUHJvdmlkZXI6IFJlYWN0LkZDPExvZ2luRm9ybVByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGxvZ2luTWV0aG9kcyxcbiAgcmVkaXJlY3RVcmwsXG4gIGJhc2VVUkwsXG4gIGJhc2VQYXRoLFxuICBpc1NpZ251cCA9IGZhbHNlLFxuICBsb2dpbklkZW50aWZpZXJzLFxuICBwbHVnaW5zLFxuICBwcmVmaWxsLFxuICBhZG1pbkludml0ZVRva2VuLFxuICBuZXdVc2VyQ2FsbGJhY2tVUkxcbn0pID0+IHtcbiAgY29uc3QgeyB1c2VybmFtZTogaGFzVXNlcm5hbWVQbHVnaW4gPSBmYWxzZSwgcGFzc2tleTogaGFzUGFzc2tleVBsdWdpbiA9IGZhbHNlLCBtYWdpY0xpbms6IGhhc01hZ2ljTGlua1BsdWdpbiA9IGZhbHNlIH0gPSBwbHVnaW5zID8/IHt9XG4gIGNvbnN0IHJlc29sdmVkUHJlZmlsbDogUHJlZmlsbCA9IHByZWZpbGwgPz8ge31cblxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuICBjb25zdCBbZW1haWwsIHNldEVtYWlsXSA9IHVzZVN0YXRlKHJlc29sdmVkUHJlZmlsbC5lbWFpbCA/PyAnJylcblxuICBjb25zdCBhdXRoQ2xpZW50ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY3JlYXRlQXV0aENsaWVudCh7XG4gICAgICAgIGJhc2VVUkwsXG4gICAgICAgIGJhc2VQYXRoLFxuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgdXNlcm5hbWVDbGllbnQoKSxcbiAgICAgICAgICB0d29GYWN0b3JDbGllbnQoe1xuICAgICAgICAgICAgb25Ud29GYWN0b3JSZWRpcmVjdCgpIHtcbiAgICAgICAgICAgICAgcm91dGVyLnB1c2goYCR7cmVkaXJlY3RVcmwuc3BsaXQoJz8nKVswXX0ke2FkbWluUm91dGVzLnR3b0ZhY3RvclZlcmlmeX0/cmVkaXJlY3Q9JHtyZWRpcmVjdFVybH1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihoYXNQYXNza2V5UGx1Z2luID8gW3Bhc3NrZXlDbGllbnQoKV0gOiBbXSksXG4gICAgICAgICAgLi4uKGhhc01hZ2ljTGlua1BsdWdpbiB8fCBsb2dpbk1ldGhvZHMuaW5jbHVkZXMoJ21hZ2ljTGluaycpID8gW21hZ2ljTGlua0NsaWVudCgpXSA6IFtdKVxuICAgICAgICBdXG4gICAgICB9KSxcbiAgICBbYmFzZVVSTCwgYmFzZVBhdGgsIGhhc01hZ2ljTGlua1BsdWdpbiwgaGFzUGFzc2tleVBsdWdpbiwgbG9naW5NZXRob2RzLCByZWRpcmVjdFVybCwgcm91dGVyXVxuICApXG5cbiAgY29uc3QgY2FuTG9naW5XaXRoRW1haWwgPSBsb2dpbklkZW50aWZpZXJzLmluY2x1ZGVzKCdlbWFpbCcpXG4gIGNvbnN0IGNhbkxvZ2luV2l0aFVzZXJuYW1lID0gbG9naW5JZGVudGlmaWVycy5pbmNsdWRlcygndXNlcm5hbWUnKVxuXG4gIGNvbnN0IGxvZ2luVHlwZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChjYW5Mb2dpbldpdGhFbWFpbCAmJiBjYW5Mb2dpbldpdGhVc2VybmFtZSAmJiBoYXNVc2VybmFtZVBsdWdpbikgcmV0dXJuICdlbWFpbE9yVXNlcm5hbWUnXG4gICAgaWYgKGNhbkxvZ2luV2l0aFVzZXJuYW1lICYmIGhhc1VzZXJuYW1lUGx1Z2luKSByZXR1cm4gJ3VzZXJuYW1lJ1xuICAgIHJldHVybiAnZW1haWwnXG4gIH0sIFtjYW5Mb2dpbldpdGhFbWFpbCwgY2FuTG9naW5XaXRoVXNlcm5hbWUsIGhhc1VzZXJuYW1lUGx1Z2luXSlcblxuICBjb25zdCBoYXNNZXRob2QgPSAobWV0aG9kOiBMb2dpbk1ldGhvZCkgPT4gbG9naW5NZXRob2RzLmluY2x1ZGVzKG1ldGhvZClcbiAgY29uc3QgYWx0ZXJuYXRpdmVNZXRob2RzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbG9naW5NZXRob2RzLmZpbHRlcigobSkgPT4ge1xuICAgICAgICBpZiAobSA9PT0gJ2VtYWlsUGFzc3dvcmQnKSByZXR1cm4gZmFsc2VcbiAgICAgICAgaWYgKGlzU2lnbnVwICYmIChtID09PSAncGFzc2tleScgfHwgbSA9PT0gJ21hZ2ljTGluaycpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pLFxuICAgIFtsb2dpbk1ldGhvZHMsIGlzU2lnbnVwXVxuICApXG4gIGNvbnN0IHNob3dJY29uT25seSA9IGFsdGVybmF0aXZlTWV0aG9kcy5sZW5ndGggPj0gM1xuXG4gIGNvbnN0IHZhbHVlOiBMb2dpbkZvcm1Db250ZXh0VmFsdWUgPSB7XG4gICAgbG9naW5NZXRob2RzLFxuICAgIGVtYWlsLFxuICAgIHNldEVtYWlsLFxuICAgIHJlZGlyZWN0VXJsLFxuICAgIGlzU2lnbnVwLFxuICAgIGF1dGhDbGllbnQsXG4gICAgbG9naW5UeXBlLFxuICAgIGhhc01ldGhvZCxcbiAgICBhbHRlcm5hdGl2ZU1ldGhvZHMsXG4gICAgc2hvd0ljb25Pbmx5LFxuICAgIGFkbWluSW52aXRlVG9rZW4sXG4gICAgbmV3VXNlckNhbGxiYWNrVVJMLFxuICAgIHByZWZpbGw6IHtcbiAgICAgIGVtYWlsOiByZXNvbHZlZFByZWZpbGwuZW1haWwsXG4gICAgICBwYXNzd29yZDogcmVzb2x2ZWRQcmVmaWxsLnBhc3N3b3JkLFxuICAgICAgdXNlcm5hbWU6IHJlc29sdmVkUHJlZmlsbC51c2VybmFtZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiA8TG9naW5Gb3JtQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PntjaGlsZHJlbn08L0xvZ2luRm9ybUNvbnRleHQuUHJvdmlkZXI+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VMb2dpbkZvcm0gPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KExvZ2luRm9ybUNvbnRleHQpXG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlTG9naW5Gb3JtIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBMb2dpbkZvcm1Qcm92aWRlcicpXG4gIH1cbiAgcmV0dXJuIGNvbnRleHRcbn1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiY3JlYXRlQXV0aENsaWVudCIsInVzZXJuYW1lQ2xpZW50IiwidHdvRmFjdG9yQ2xpZW50IiwibWFnaWNMaW5rQ2xpZW50IiwicGFzc2tleUNsaWVudCIsInVzZVJvdXRlciIsImFkbWluUm91dGVzIiwiTG9naW5Gb3JtQ29udGV4dCIsIkxvZ2luRm9ybVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJsb2dpbk1ldGhvZHMiLCJyZWRpcmVjdFVybCIsImJhc2VVUkwiLCJiYXNlUGF0aCIsImlzU2lnbnVwIiwibG9naW5JZGVudGlmaWVycyIsInBsdWdpbnMiLCJwcmVmaWxsIiwiYWRtaW5JbnZpdGVUb2tlbiIsIm5ld1VzZXJDYWxsYmFja1VSTCIsInVzZXJuYW1lIiwiaGFzVXNlcm5hbWVQbHVnaW4iLCJwYXNza2V5IiwiaGFzUGFzc2tleVBsdWdpbiIsIm1hZ2ljTGluayIsImhhc01hZ2ljTGlua1BsdWdpbiIsInJlc29sdmVkUHJlZmlsbCIsInJvdXRlciIsImVtYWlsIiwic2V0RW1haWwiLCJhdXRoQ2xpZW50Iiwib25Ud29GYWN0b3JSZWRpcmVjdCIsInB1c2giLCJzcGxpdCIsInR3b0ZhY3RvclZlcmlmeSIsImluY2x1ZGVzIiwiY2FuTG9naW5XaXRoRW1haWwiLCJjYW5Mb2dpbldpdGhVc2VybmFtZSIsImxvZ2luVHlwZSIsImhhc01ldGhvZCIsIm1ldGhvZCIsImFsdGVybmF0aXZlTWV0aG9kcyIsImZpbHRlciIsIm0iLCJzaG93SWNvbk9ubHkiLCJsZW5ndGgiLCJ2YWx1ZSIsInBhc3N3b3JkIiwiUHJvdmlkZXIiLCJ1c2VMb2dpbkZvcm0iLCJjb250ZXh0IiwiRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOztBQUdBLE9BQU9BLFNBQVNDLGFBQWEsRUFBRUMsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBUSxRQUFPO0FBQzNFLFNBQVNDLGdCQUFnQixRQUFRLG9CQUFtQjtBQUNwRCxTQUFT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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials-form.d.ts","sourceRoot":"","sources":["../../../../../../src/better-auth/plugin/payload/components/login-form/credentials-form.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAyHnC,CAAA"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { adminRoutes } from "../../../constants";
|
|
4
|
+
import { useAppForm } from "../../../../../shared/form";
|
|
5
|
+
import { Form, FormError, FormInputWrap } from "../../../../../shared/form/ui";
|
|
6
|
+
import { FormHeader } from "../../../../../shared/form/ui/header";
|
|
7
|
+
import { createLoginSchema, isValidEmail } from "../../../../../shared/form/validation";
|
|
8
|
+
import { valueOrDefaultString } from "../../../../../shared/utils/value-or-default";
|
|
9
|
+
import { useConfig, Link, toast, useTranslation } from "@payloadcms/ui";
|
|
10
|
+
import { formatAdminURL } from "payload/shared";
|
|
11
|
+
import React, { useState } from "react";
|
|
12
|
+
import { useLoginForm } from "./context";
|
|
13
|
+
import "./index.scss";
|
|
14
|
+
const baseClass = 'login__form';
|
|
15
|
+
export const CredentialsForm = ()=>{
|
|
16
|
+
const { config } = useConfig();
|
|
17
|
+
const { t } = useTranslation();
|
|
18
|
+
const { authClient, loginType, hasMethod, setEmail, redirectUrl, prefill } = useLoginForm();
|
|
19
|
+
const adminRoute = valueOrDefaultString(config?.routes?.admin, '/admin');
|
|
20
|
+
const hasEmailPassword = hasMethod('emailPassword');
|
|
21
|
+
const hasMagicLink = hasMethod('magicLink');
|
|
22
|
+
const showEmailField = hasEmailPassword || hasMagicLink;
|
|
23
|
+
const showPasswordField = hasEmailPassword;
|
|
24
|
+
const [requireEmailVerification, setRequireEmailVerification] = useState(false);
|
|
25
|
+
const [searchParamError] = useState(()=>{
|
|
26
|
+
if (typeof window !== 'undefined') {
|
|
27
|
+
const params = new URLSearchParams(window.location.search);
|
|
28
|
+
return params.get('error');
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
});
|
|
32
|
+
const forgotPasswordUrl = formatAdminURL({
|
|
33
|
+
adminRoute,
|
|
34
|
+
path: adminRoutes?.forgotPassword
|
|
35
|
+
});
|
|
36
|
+
const loginSchema = createLoginSchema({
|
|
37
|
+
t,
|
|
38
|
+
loginType,
|
|
39
|
+
canLoginWithUsername: loginType !== 'email'
|
|
40
|
+
});
|
|
41
|
+
const form = useAppForm({
|
|
42
|
+
defaultValues: {
|
|
43
|
+
login: prefill.email ?? prefill.username ?? '',
|
|
44
|
+
password: prefill.password ?? ''
|
|
45
|
+
},
|
|
46
|
+
onSubmit: async ({ value })=>{
|
|
47
|
+
if (!showPasswordField) return;
|
|
48
|
+
const { login, password } = value;
|
|
49
|
+
const isEmail = isValidEmail(login);
|
|
50
|
+
console.log(value);
|
|
51
|
+
try {
|
|
52
|
+
const { data, error } = await (loginType === 'email' || loginType === 'emailOrUsername' && isEmail ? authClient.signIn.email({
|
|
53
|
+
email: login,
|
|
54
|
+
password,
|
|
55
|
+
callbackURL: redirectUrl
|
|
56
|
+
}) : authClient.signIn.username({
|
|
57
|
+
username: login,
|
|
58
|
+
password
|
|
59
|
+
}));
|
|
60
|
+
if (error) {
|
|
61
|
+
if (error.code === 'EMAIL_NOT_VERIFIED') {
|
|
62
|
+
setRequireEmailVerification(true);
|
|
63
|
+
}
|
|
64
|
+
if (error.message) {
|
|
65
|
+
toast.error(error.message.charAt(0).toUpperCase() + error.message.slice(1));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (data?.token) {
|
|
69
|
+
toast.success(t('general:success'));
|
|
70
|
+
window.location.href = redirectUrl;
|
|
71
|
+
}
|
|
72
|
+
} catch {
|
|
73
|
+
toast.error(t('error:unknown') || 'An unexpected error occurred');
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
validators: showPasswordField ? {
|
|
77
|
+
onSubmit: loginSchema
|
|
78
|
+
} : undefined
|
|
79
|
+
});
|
|
80
|
+
if (!showEmailField) return null;
|
|
81
|
+
if (requireEmailVerification) {
|
|
82
|
+
return /*#__PURE__*/ _jsx(FormHeader, {
|
|
83
|
+
heading: "Please verify your email",
|
|
84
|
+
description: t('authentication:emailSent'),
|
|
85
|
+
style: {
|
|
86
|
+
textAlign: 'center'
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const getLoginTypeLabel = ()=>{
|
|
91
|
+
const labels = {
|
|
92
|
+
email: t('general:email') || 'Email',
|
|
93
|
+
username: t('authentication:username') || 'Username',
|
|
94
|
+
emailOrUsername: t('authentication:emailOrUsername') || 'Email or Username'
|
|
95
|
+
};
|
|
96
|
+
return labels[loginType];
|
|
97
|
+
};
|
|
98
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
99
|
+
className: `${baseClass}__wrapper`,
|
|
100
|
+
children: [
|
|
101
|
+
searchParamError === 'signup_disabled' && /*#__PURE__*/ _jsx(FormError, {
|
|
102
|
+
errors: [
|
|
103
|
+
'Sign up is disabled.'
|
|
104
|
+
]
|
|
105
|
+
}),
|
|
106
|
+
/*#__PURE__*/ _jsxs(Form, {
|
|
107
|
+
className: baseClass,
|
|
108
|
+
onSubmit: (e)=>{
|
|
109
|
+
e.preventDefault();
|
|
110
|
+
if (showPasswordField) {
|
|
111
|
+
void form.handleSubmit();
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
children: [
|
|
115
|
+
/*#__PURE__*/ _jsxs(FormInputWrap, {
|
|
116
|
+
className: baseClass,
|
|
117
|
+
children: [
|
|
118
|
+
/*#__PURE__*/ _jsx(form.AppField, {
|
|
119
|
+
name: "login",
|
|
120
|
+
children: (field)=>/*#__PURE__*/ _jsx(field.TextField, {
|
|
121
|
+
type: "text",
|
|
122
|
+
className: "email",
|
|
123
|
+
autoComplete: "email",
|
|
124
|
+
label: getLoginTypeLabel(),
|
|
125
|
+
onValueChange: setEmail
|
|
126
|
+
})
|
|
127
|
+
}),
|
|
128
|
+
showPasswordField && /*#__PURE__*/ _jsx(form.AppField, {
|
|
129
|
+
name: "password",
|
|
130
|
+
children: (field)=>/*#__PURE__*/ _jsx(field.TextField, {
|
|
131
|
+
type: "password",
|
|
132
|
+
className: "password",
|
|
133
|
+
autoComplete: "password",
|
|
134
|
+
label: t('general:password')
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
]
|
|
138
|
+
}),
|
|
139
|
+
showPasswordField && /*#__PURE__*/ _jsxs(_Fragment, {
|
|
140
|
+
children: [
|
|
141
|
+
/*#__PURE__*/ _jsx(Link, {
|
|
142
|
+
href: forgotPasswordUrl,
|
|
143
|
+
prefetch: false,
|
|
144
|
+
children: t('authentication:forgotPasswordQuestion')
|
|
145
|
+
}),
|
|
146
|
+
/*#__PURE__*/ _jsx("button", {
|
|
147
|
+
type: "submit",
|
|
148
|
+
style: {
|
|
149
|
+
display: 'none'
|
|
150
|
+
},
|
|
151
|
+
tabIndex: -1
|
|
152
|
+
}),
|
|
153
|
+
/*#__PURE__*/ _jsx(form.AppForm, {
|
|
154
|
+
children: /*#__PURE__*/ _jsx(form.Submit, {
|
|
155
|
+
label: t('authentication:login'),
|
|
156
|
+
loadingLabel: t('general:loading')
|
|
157
|
+
})
|
|
158
|
+
})
|
|
159
|
+
]
|
|
160
|
+
})
|
|
161
|
+
]
|
|
162
|
+
})
|
|
163
|
+
]
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9jb21wb25lbnRzL2xvZ2luLWZvcm0vY3JlZGVudGlhbHMtZm9ybS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGFkbWluUm91dGVzIH0gZnJvbSAnQC9iZXR0ZXItYXV0aC9wbHVnaW4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgdXNlQXBwRm9ybSB9IGZyb20gJ0Avc2hhcmVkL2Zvcm0nXG5pbXBvcnQgeyBGb3JtLCBGb3JtRXJyb3IsIEZvcm1JbnB1dFdyYXAgfSBmcm9tICdAL3NoYXJlZC9mb3JtL3VpJ1xuaW1wb3J0IHsgRm9ybUhlYWRlciB9IGZyb20gJ0Avc2hhcmVkL2Zvcm0vdWkvaGVhZGVyJ1xuaW1wb3J0IHsgY3JlYXRlTG9naW5TY2hlbWEsIGlzVmFsaWRFbWFpbCB9IGZyb20gJ0Avc2hhcmVkL2Zvcm0vdmFsaWRhdGlvbidcbmltcG9ydCB7IHZhbHVlT3JEZWZhdWx0U3RyaW5nIH0gZnJvbSAnQC9zaGFyZWQvdXRpbHMvdmFsdWUtb3ItZGVmYXVsdCdcbmltcG9ydCB7IHVzZUNvbmZpZywgTGluaywgdG9hc3QsIHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnQHBheWxvYWRjbXMvdWknXG5pbXBvcnQgeyBmb3JtYXRBZG1pblVSTCB9IGZyb20gJ3BheWxvYWQvc2hhcmVkJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VMb2dpbkZvcm0gfSBmcm9tICcuL2NvbnRleHQnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2xvZ2luX19mb3JtJ1xuXG5leHBvcnQgY29uc3QgQ3JlZGVudGlhbHNGb3JtOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCB7IGF1dGhDbGllbnQsIGxvZ2luVHlwZSwgaGFzTWV0aG9kLCBzZXRFbWFpbCwgcmVkaXJlY3RVcmwsIHByZWZpbGwgfSA9IHVzZUxvZ2luRm9ybSgpXG4gIGNvbnN0IGFkbWluUm91dGUgPSB2YWx1ZU9yRGVmYXVsdFN0cmluZyhjb25maWc/LnJvdXRlcz8uYWRtaW4sICcvYWRtaW4nKVxuXG4gIGNvbnN0IGhhc0VtYWlsUGFzc3dvcmQgPSBoYXNNZXRob2QoJ2VtYWlsUGFzc3dvcmQnKVxuICBjb25zdCBoYXNNYWdpY0xpbmsgPSBoYXNNZXRob2QoJ21hZ2ljTGluaycpXG4gIGNvbnN0IHNob3dFbWFpbEZpZWxkID0gaGFzRW1haWxQYXNzd29yZCB8fCBoYXNNYWdpY0xpbmtcbiAgY29uc3Qgc2hvd1Bhc3N3b3JkRmllbGQgPSBoYXNFbWFpbFBhc3N3b3JkXG5cbiAgY29uc3QgW3JlcXVpcmVFbWFpbFZlcmlmaWNhdGlvbiwgc2V0UmVxdWlyZUVtYWlsVmVyaWZpY2F0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VhcmNoUGFyYW1FcnJvcl0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpXG4gICAgICByZXR1cm4gcGFyYW1zLmdldCgnZXJyb3InKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9KVxuXG4gIGNvbnN0IGZvcmdvdFBhc3N3b3JkVXJsID0gZm9ybWF0QWRtaW5VUkwoe1xuICAgIGFkbWluUm91dGUsXG4gICAgcGF0aDogYWRtaW5Sb3V0ZXM/LmZvcmdvdFBhc3N3b3JkIGFzIGAvJHtzdHJpbmd9YFxuICB9KVxuXG4gIGNvbnN0IGxvZ2luU2NoZW1hID0gY3JlYXRlTG9naW5TY2hlbWEoeyB0LCBsb2dpblR5cGUsIGNhbkxvZ2luV2l0aFVzZXJuYW1lOiBsb2dpblR5cGUgIT09ICdlbWFpbCcgfSlcblxuICBjb25zdCBmb3JtID0gdXNlQXBwRm9ybSh7XG4gICAgZGVmYXVsdFZhbHVlczoge1xuICAgICAgbG9naW46IHByZWZpbGwuZW1haWwgPz8gcHJlZmlsbC51c2VybmFtZSA/PyAnJyxcbiAgICAgIHBhc3N3b3JkOiBwcmVmaWxsLnBhc3N3b3JkID8/ICcnXG4gICAgfSxcbiAgICBvblN1Ym1pdDogYXN5bmMgKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgaWYgKCFzaG93UGFzc3dvcmRGaWVsZCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbG9naW4sIHBhc3N3b3JkIH0gPSB2YWx1ZVxuICAgICAgY29uc3QgaXNFbWFpbCA9IGlzVmFsaWRFbWFpbChsb2dpbilcbiAgICAgIGNvbnNvbGUubG9nKHZhbHVlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgKGxvZ2luVHlwZSA9PT0gJ2VtYWlsJyB8fCAobG9naW5UeXBlID09PSAnZW1haWxPclVzZXJuYW1lJyAmJiBpc0VtYWlsKVxuICAgICAgICAgID8gYXV0aENsaWVudC5zaWduSW4uZW1haWwoeyBlbWFpbDogbG9naW4sIHBhc3N3b3JkLCBjYWxsYmFja1VSTDogcmVkaXJlY3RVcmwgfSlcbiAgICAgICAgICA6IGF1dGhDbGllbnQuc2lnbkluLnVzZXJuYW1lKHsgdXNlcm5hbWU6IGxvZ2luLCBwYXNzd29yZCB9KSlcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFTUFJTF9OT1RfVkVSSUZJRUQnKSB7XG4gICAgICAgICAgICBzZXRSZXF1aXJlRW1haWxWZXJpZmljYXRpb24odHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRvYXN0LmVycm9yKGVycm9yLm1lc3NhZ2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBlcnJvci5tZXNzYWdlLnNsaWNlKDEpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YT8udG9rZW4pIHtcbiAgICAgICAgICB0b2FzdC5zdWNjZXNzKHQoJ2dlbmVyYWw6c3VjY2VzcycpKVxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmxcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOnVua25vd24nKSB8fCAnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBzaG93UGFzc3dvcmRGaWVsZCA/IHsgb25TdWJtaXQ6IGxvZ2luU2NoZW1hIH0gOiB1bmRlZmluZWRcbiAgfSlcblxuICBpZiAoIXNob3dFbWFpbEZpZWxkKSByZXR1cm4gbnVsbFxuXG4gIGlmIChyZXF1aXJlRW1haWxWZXJpZmljYXRpb24pIHtcbiAgICByZXR1cm4gPEZvcm1IZWFkZXIgaGVhZGluZz1cIlBsZWFzZSB2ZXJpZnkgeW91ciBlbWFpbFwiIGRlc2NyaXB0aW9uPXt0KCdhdXRoZW50aWNhdGlvbjplbWFpbFNlbnQnKX0gc3R5bGU9e3sgdGV4dEFsaWduOiAnY2VudGVyJyB9fSAvPlxuICB9XG5cbiAgY29uc3QgZ2V0TG9naW5UeXBlTGFiZWwgPSAoKSA9PiB7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgZW1haWw6IHQoJ2dlbmVyYWw6ZW1haWwnKSB8fCAnRW1haWwnLFxuICAgICAgdXNlcm5hbWU6IHQoJ2F1dGhlbnRpY2F0aW9uOnVzZXJuYW1lJykgfHwgJ1VzZXJuYW1lJyxcbiAgICAgIGVtYWlsT3JVc2VybmFtZTogdCgnYXV0aGVudGljYXRpb246ZW1haWxPclVzZXJuYW1lJykgfHwgJ0VtYWlsIG9yIFVzZXJuYW1lJ1xuICAgIH1cbiAgICByZXR1cm4gbGFiZWxzW2xvZ2luVHlwZV1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3dyYXBwZXJgfT5cbiAgICAgIHtzZWFyY2hQYXJhbUVycm9yID09PSAnc2lnbnVwX2Rpc2FibGVkJyAmJiA8Rm9ybUVycm9yIGVycm9ycz17WydTaWduIHVwIGlzIGRpc2FibGVkLiddfSAvPn1cbiAgICAgIDxGb3JtXG4gICAgICAgIGNsYXNzTmFtZT17YmFzZUNsYXNzfVxuICAgICAgICBvblN1Ym1pdD17KGUpID0+IHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICBpZiAoc2hvd1Bhc3N3b3JkRmllbGQpIHtcbiAgICAgICAgICAgIHZvaWQgZm9ybS5oYW5kbGVTdWJtaXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfX0+XG4gICAgICAgIDxGb3JtSW5wdXRXcmFwIGNsYXNzTmFtZT17YmFzZUNsYXNzfT5cbiAgICAgICAgICA8Zm9ybS5BcHBGaWVsZFxuICAgICAgICAgICAgbmFtZT1cImxvZ2luXCJcbiAgICAgICAgICAgIGNoaWxkcmVuPXsoZmllbGQpID0+IChcbiAgICAgICAgICAgICAgPGZpZWxkLlRleHRGaWVsZFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgYXV0b0NvbXBsZXRlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIGxhYmVsPXtnZXRMb2dpblR5cGVMYWJlbCgpfVxuICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e3NldEVtYWlsfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtzaG93UGFzc3dvcmRGaWVsZCAmJiAoXG4gICAgICAgICAgICA8Zm9ybS5BcHBGaWVsZFxuICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICBjaGlsZHJlbj17KGZpZWxkKSA9PiAoXG4gICAgICAgICAgICAgICAgPGZpZWxkLlRleHRGaWVsZCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzc05hbWU9XCJwYXNzd29yZFwiIGF1dG9Db21wbGV0ZT1cInBhc3N3b3JkXCIgbGFiZWw9e3QoJ2dlbmVyYWw6cGFzc3dvcmQnKX0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9Gb3JtSW5wdXRXcmFwPlxuICAgICAgICB7c2hvd1Bhc3N3b3JkRmllbGQgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8TGluayBocmVmPXtmb3Jnb3RQYXNzd29yZFVybH0gcHJlZmV0Y2g9e2ZhbHNlfT5cbiAgICAgICAgICAgICAge3QoJ2F1dGhlbnRpY2F0aW9uOmZvcmdvdFBhc3N3b3JkUXVlc3Rpb24nKX1cbiAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fSB0YWJJbmRleD17LTF9IC8+XG4gICAgICAgICAgICA8Zm9ybS5BcHBGb3JtIGNoaWxkcmVuPXs8Zm9ybS5TdWJtaXQgbGFiZWw9e3QoJ2F1dGhlbnRpY2F0aW9uOmxvZ2luJyl9IGxvYWRpbmdMYWJlbD17dCgnZ2VuZXJhbDpsb2FkaW5nJyl9IC8+fSAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9Gb3JtPlxuICAgIDwvZGl2PlxuICApXG59XG5cbiJdLCJuYW1lcyI6WyJhZG1pblJvdXRlcyIsInVzZUFwcEZvcm0iLCJGb3JtIiwiRm9ybUVycm9yIiwiRm9ybUlucHV0V3JhcCIsIkZvcm1IZWFkZXIiLCJjcmVhdGVMb2dpblNjaGVtYSIsImlzVmFsaWRFbWFpbCIsInZhbHVlT3JEZWZhdWx0U3RyaW5nIiwidXNlQ29uZmlnIiwiTGluayIsInRvYXN0IiwidXNlVHJhbnNsYXRpb24iLCJmb3JtYXRBZG1pblVSTCIsIlJlYWN0IiwidXNlU3RhdGUiLCJ1c2VMb2dpbkZvcm0iLCJiYXNlQ2xhc3MiLCJDcmVkZW50aWFsc0Zvcm0iLCJjb25maWciLCJ0IiwiYXV0aENsaWVudCIsImxvZ2luVHlwZSIsImhhc01ldGhvZCIsInNldEVtYWlsIiwicmVkaXJlY3RVcmwiLCJwcmVmaWxsIiwiYWRtaW5Sb3V0ZSIsInJvdXRlcyIsImFkbWluIiwiaGFzRW1haWxQYXNzd29yZCIsImhhc01hZ2ljTGluayIsInNob3dFbWFpbEZpZWxkIiwic2hvd1Bhc3N3b3JkRmllbGQiLCJyZXF1aXJlRW1haWxWZXJpZmljYXRpb24iLCJzZXRSZXF1aXJlRW1haWxWZXJpZmljYXRpb24iLCJzZWFyY2hQYXJhbUVycm9yIiwid2luZG93IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJmb3Jnb3RQYXNzd29yZFVybCIsInBhdGgiLCJmb3Jnb3RQYXNzd29yZCIsImxvZ2luU2NoZW1hIiwiY2FuTG9naW5XaXRoVXNlcm5hbWUiLCJmb3JtIiwiZGVmYXVsdFZhbHVlcyIsImxvZ2luIiwiZW1haWwiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwib25TdWJtaXQiLCJ2YWx1ZSIsImlzRW1haWwiLCJjb25zb2xlIiwibG9nIiwiZGF0YSIsImVycm9yIiwic2lnbkluIiwiY2FsbGJhY2tVUkwiLCJjb2RlIiwibWVzc2FnZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJ0b2tlbiIsInN1Y2Nlc3MiLCJocmVmIiwidmFsaWRhdG9ycyIsInVuZGVmaW5lZCIsImhlYWRpbmciLCJkZXNjcmlwdGlvbiIsInN0eWxlIiwidGV4dEFsaWduIiwiZ2V0TG9naW5UeXBlTGFiZWwiLCJsYWJlbHMiLCJlbWFpbE9yVXNlcm5hbWUiLCJkaXYiLCJjbGFzc05hbWUiLCJlcnJvcnMiLCJlIiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVTdWJtaXQiLCJBcHBGaWVsZCIsIm5hbWUiLCJjaGlsZHJlbiIsImZpZWxkIiwiVGV4dEZpZWxkIiwidHlwZSIsImF1dG9Db21wbGV0ZSIsImxhYmVsIiwib25WYWx1ZUNoYW5nZSIsInByZWZldGNoIiwiYnV0dG9uIiwiZGlzcGxheSIsInRhYkluZGV4IiwiQXBwRm9ybSIsIlN1Ym1pdCIsImxvYWRpbmdMYWJlbCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUEsU0FBU0EsV0FBVyxRQUFRLHFCQUFnQztBQUM1RCxTQUFTQyxVQUFVLFFBQVEsNkJBQWU7QUFDMUMsU0FBU0MsSUFBSSxFQUFFQyxTQUFTLEVBQUVDLGFBQWEsUUFBUSxnQ0FBa0I7QUFDakUsU0FBU0MsVUFBVSxRQUFRLHVDQUF5QjtBQUNwRCxTQUFTQyxpQkFBaUIsRUFBRUMsWUFBWSxRQUFRLHdDQUEwQjtBQUMxRSxTQUFTQyxvQkFBb0IsUUFBUSwrQ0FBaUM7QUFDdEUsU0FBU0MsU0FBUyxFQUFFQyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsY0FBYyxRQUFRLGlCQUFnQjtBQUN2RSxTQUFTQyxjQUFjLFFBQVEsaUJBQWdCO0FBQy9DLE9BQU9DLFNBQVNDLFFBQVEsUUFBUSxRQUFPO0FBQ3ZDLFNBQVNDLFlBQVksUUFBUSxZQUFXO0FBQ3hDLE9BQU8sZUFBYztBQUVyQixNQUFNQyxZQUFZO0FBRWxCLE9BQU8sTUFBTUMsa0JBQTRCO0lBQ3ZDLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdWO0lBQ25CLE1BQU0sRUFBRVcsQ0FBQyxFQUFFLEdBQUdSO0lBQ2QsTUFBTSxFQUFFUyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxFQUFFLEdBQUdWO0lBQzdFLE1BQU1XLGFBQWFuQixxQkFBcUJXLFFBQVFTLFFBQVFDLE9BQU87SUFFL0QsTUFBTUMsbUJBQW1CUCxVQUFVO0lBQ25DLE1BQU1RLGVBQWVSLFVBQVU7SUFDL0IsTUFBTVMsaUJBQWlCRixvQkFBb0JDO0lBQzNDLE1BQU1FLG9CQUFvQkg7SUFFMUIsTUFBTSxDQUFDSSwwQkFBMEJDLDRCQUE0QixHQUFHcEIsU0FBUztJQUN6RSxNQUFNLENBQUNxQixpQkFBaUIsR0FBR3JCLFNB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/better-auth/plugin/payload/components/login-form/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAA;AACxF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
export { LoginFormProvider, useLoginForm } from "./context";
|
|
3
|
+
export { CredentialsForm } from "./credentials-form";
|
|
4
|
+
export { AlternativeMethods } from "./alternative-methods";
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vcGF5bG9hZC9jb21wb25lbnRzL2xvZ2luLWZvcm0vaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5leHBvcnQgeyBMb2dpbkZvcm1Qcm92aWRlciwgdXNlTG9naW5Gb3JtLCB0eXBlIExvZ2luRm9ybVByb3ZpZGVyUHJvcHMgfSBmcm9tICcuL2NvbnRleHQnXG5leHBvcnQgeyBDcmVkZW50aWFsc0Zvcm0gfSBmcm9tICcuL2NyZWRlbnRpYWxzLWZvcm0nXG5leHBvcnQgeyBBbHRlcm5hdGl2ZU1ldGhvZHMgfSBmcm9tICcuL2FsdGVybmF0aXZlLW1ldGhvZHMnXG5cbiJdLCJuYW1lcyI6WyJMb2dpbkZvcm1Qcm92aWRlciIsInVzZUxvZ2luRm9ybSIsIkNyZWRlbnRpYWxzRm9ybSIsIkFsdGVybmF0aXZlTWV0aG9kcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFFQSxTQUFTQSxpQkFBaUIsRUFBRUMsWUFBWSxRQUFxQyxZQUFXO0FBQ3hGLFNBQVNDLGVBQWUsUUFBUSxxQkFBb0I7QUFDcEQsU0FBU0Msa0JBQWtCLFFBQVEsd0JBQXVCIn0=
|