@vilio/auth-module 0.0.3 → 0.0.5
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/actions/basic.d.ts +1 -0
- package/dist/actions/basic.d.ts.map +1 -0
- package/dist/actions/basic.js +45 -0
- package/dist/actions/basic.js.map +1 -0
- package/dist/actions/email.d.ts +1 -0
- package/dist/actions/email.d.ts.map +1 -0
- package/dist/actions/email.js +138 -0
- package/dist/actions/email.js.map +1 -0
- package/dist/actions/index.d.ts +1 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +3 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{index.mjs → index.js} +10 -9
- package/dist/index.js.map +1 -0
- package/dist/routes.d.ts +1 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +51 -0
- package/dist/routes.js.map +1 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/forgot-password/components.d.ts +2 -2
- package/dist/ui/forgot-password/components.d.ts.map +1 -0
- package/dist/ui/forgot-password/components.js +42 -0
- package/dist/ui/forgot-password/components.js.map +1 -0
- package/dist/ui/forgot-password/page.d.ts +2 -2
- package/dist/ui/forgot-password/page.d.ts.map +1 -0
- package/dist/ui/forgot-password/page.js +6 -0
- package/dist/ui/forgot-password/page.js.map +1 -0
- package/dist/ui/layout.d.ts +2 -1
- package/dist/ui/layout.d.ts.map +1 -0
- package/dist/ui/layout.js +13 -0
- package/dist/ui/layout.js.map +1 -0
- package/dist/ui/reset-password/components.d.ts +2 -2
- package/dist/ui/reset-password/components.d.ts.map +1 -0
- package/dist/ui/reset-password/components.js +43 -0
- package/dist/ui/reset-password/components.js.map +1 -0
- package/dist/ui/reset-password/page.d.ts +2 -2
- package/dist/ui/reset-password/page.d.ts.map +1 -0
- package/dist/ui/reset-password/page.js +20 -0
- package/dist/ui/reset-password/page.js.map +1 -0
- package/dist/ui/reset-password/verify-email/components.d.ts +2 -2
- package/dist/ui/reset-password/verify-email/components.d.ts.map +1 -0
- package/dist/ui/reset-password/verify-email/components.js +38 -0
- package/dist/ui/reset-password/verify-email/components.js.map +1 -0
- package/dist/ui/reset-password/verify-email/page.d.ts +2 -2
- package/dist/ui/reset-password/verify-email/page.d.ts.map +1 -0
- package/dist/ui/reset-password/verify-email/page.js +19 -0
- package/dist/ui/reset-password/verify-email/page.js.map +1 -0
- package/dist/ui/signin/components.d.ts +2 -1
- package/dist/ui/signin/components.d.ts.map +1 -0
- package/dist/ui/signin/components.js +49 -0
- package/dist/ui/signin/components.js.map +1 -0
- package/dist/ui/signin/page.d.ts +2 -2
- package/dist/ui/signin/page.d.ts.map +1 -0
- package/dist/ui/signin/page.js +21 -0
- package/dist/ui/signin/page.js.map +1 -0
- package/dist/ui/signup/components.d.ts +2 -1
- package/dist/ui/signup/components.d.ts.map +1 -0
- package/dist/ui/signup/components.js +49 -0
- package/dist/ui/signup/components.js.map +1 -0
- package/dist/ui/signup/page.d.ts +2 -2
- package/dist/ui/signup/page.d.ts.map +1 -0
- package/dist/ui/signup/page.js +15 -0
- package/dist/ui/signup/page.js.map +1 -0
- package/dist/ui/verify-email/components.d.ts +3 -2
- package/dist/ui/verify-email/components.d.ts.map +1 -0
- package/dist/ui/verify-email/components.js +55 -0
- package/dist/ui/verify-email/components.js.map +1 -0
- package/dist/ui/verify-email/page.d.ts +2 -2
- package/dist/ui/verify-email/page.d.ts.map +1 -0
- package/dist/ui/verify-email/page.js +18 -0
- package/dist/ui/verify-email/page.js.map +1 -0
- package/dist/validation.d.ts +1 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +42 -0
- package/dist/validation.js.map +1 -0
- package/locales/en/global.json +2 -1
- package/locales/pl/global.json +2 -1
- package/package.json +17 -28
- package/dist/actions/basic.cjs +0 -46
- package/dist/actions/basic.mjs +0 -32
- package/dist/actions/email.cjs +0 -209
- package/dist/actions/email.mjs +0 -186
- package/dist/actions/index.cjs +0 -27
- package/dist/actions/index.mjs +0 -2
- package/dist/index.cjs +0 -22
- package/dist/intl.d.ts +0 -9
- package/dist/routes.cjs +0 -46
- package/dist/routes.mjs +0 -48
- package/dist/types.cjs +0 -1
- package/dist/types.mjs +0 -0
- package/dist/ui/forgot-password/components.cjs +0 -91
- package/dist/ui/forgot-password/components.mjs +0 -63
- package/dist/ui/forgot-password/page.cjs +0 -13
- package/dist/ui/forgot-password/page.mjs +0 -5
- package/dist/ui/layout.cjs +0 -39
- package/dist/ui/layout.mjs +0 -18
- package/dist/ui/reset-password/components.cjs +0 -109
- package/dist/ui/reset-password/components.mjs +0 -84
- package/dist/ui/reset-password/page.cjs +0 -29
- package/dist/ui/reset-password/page.mjs +0 -21
- package/dist/ui/reset-password/verify-email/components.cjs +0 -106
- package/dist/ui/reset-password/verify-email/components.mjs +0 -62
- package/dist/ui/reset-password/verify-email/page.cjs +0 -31
- package/dist/ui/reset-password/verify-email/page.mjs +0 -21
- package/dist/ui/signin/components.cjs +0 -172
- package/dist/ui/signin/components.mjs +0 -134
- package/dist/ui/signin/page.cjs +0 -41
- package/dist/ui/signin/page.mjs +0 -39
- package/dist/ui/signup/components.cjs +0 -193
- package/dist/ui/signup/components.mjs +0 -150
- package/dist/ui/signup/page.cjs +0 -37
- package/dist/ui/signup/page.mjs +0 -35
- package/dist/ui/verify-email/components.cjs +0 -129
- package/dist/ui/verify-email/components.mjs +0 -76
- package/dist/ui/verify-email/page.cjs +0 -29
- package/dist/ui/verify-email/page.mjs +0 -21
- package/dist/validation.cjs +0 -43
- package/dist/validation.mjs +0 -37
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
4
|
+
import { useTranslation } from "@vilio/intl";
|
|
5
|
+
import { Button } from "@vilio/ui/components/button";
|
|
6
|
+
import { Field, FieldError, FieldGroup, } from "@vilio/ui/components/field";
|
|
7
|
+
import { InputOTP, InputOTPGroup, InputOTPSlot, } from "@vilio/ui/components/input-otp";
|
|
8
|
+
import { cn } from "@vilio/ui/lib/utils";
|
|
9
|
+
import { Loader } from "@vilio/ui/shared/loader";
|
|
10
|
+
import { AlertCircle } from "lucide-react";
|
|
11
|
+
import { useState } from "react";
|
|
12
|
+
import { Controller, useForm } from "react-hook-form";
|
|
13
|
+
import { toast } from "sonner";
|
|
14
|
+
import { verifyPasswordResetEmailAction } from "../../../actions/index";
|
|
15
|
+
import { verifyEmailSchema } from "../../../validation";
|
|
16
|
+
export function PasswordResetEmailVerificationForm({ email = "" }) {
|
|
17
|
+
const [generalError, setGeneralError] = useState("");
|
|
18
|
+
const { t } = useTranslation();
|
|
19
|
+
const form = useForm({
|
|
20
|
+
resolver: zodResolver(verifyEmailSchema),
|
|
21
|
+
});
|
|
22
|
+
async function onSubmit(data) {
|
|
23
|
+
setGeneralError("");
|
|
24
|
+
try {
|
|
25
|
+
const response = await verifyPasswordResetEmailAction(data);
|
|
26
|
+
if (response.error) {
|
|
27
|
+
setGeneralError(response.message || t("Verification failed. Please try again."));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
toast(response.message);
|
|
31
|
+
}
|
|
32
|
+
catch (_error) {
|
|
33
|
+
// setGeneralError(t("error_occurred"));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return (_jsxs("div", { className: cn("flex flex-col space-y-3"), children: [_jsxs("div", { className: "space-y-2 text-center", children: [_jsx("h1", { className: "text-3xl font-semibold", children: t("Verify your email address") }), _jsx("p", { className: "text-muted-foreground", children: t("We sent an 6-digit code to {email}.", { email }) })] }), _jsxs("div", { className: "grid gap-5", children: [generalError && (_jsxs("div", { className: "flex gap-2 p-3 bg-red-50 border border-red-200 rounded-lg", children: [_jsx(AlertCircle, { className: "w-4 h-4 text-red-600 flex-shrink-0 mt-0.5" }), _jsx("p", { className: "text-sm text-red-600", children: generalError })] })), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "grid gap-6", children: [_jsx(FieldGroup, { className: "w-full mx-auto", children: _jsx(Controller, { name: "code", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { className: "w-full", "data-invalid": fieldState.invalid, children: [_jsx(InputOTP, { ...field, className: "mx-auto w-full", maxLength: 6, autoFocus: true, inputMode: "text", children: _jsxs(InputOTPGroup, { className: "mx-auto", children: [_jsx(InputOTPSlot, { index: 0 }), _jsx(InputOTPSlot, { index: 1 }), _jsx(InputOTPSlot, { index: 2 }), _jsx(InputOTPSlot, { index: 3 }), _jsx(InputOTPSlot, { index: 4 }), _jsx(InputOTPSlot, { index: 5 })] }) }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) }) }), _jsxs(Button, { disabled: form.formState.isSubmitting, className: "w-full", children: [form.formState.isSubmitting ? t("Please wait...") : t("Verify"), form.formState.isSubmitting && _jsx(Loader, { variant: "dark" })] })] })] })] }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../../src/ui/reset-password/verify-email/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export default function Page(): Promise<import("react/jsx-runtime").JSX.Element>;
|
|
2
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/ui/reset-password/verify-email/page.tsx"],"names":[],"mappings":"AAQA,wBAA8B,IAAI,qDAgBjC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { checkSecurity, getCurrentPasswordResetSession, } from "@vilio/core/server";
|
|
3
|
+
import { redirect } from "next/navigation";
|
|
4
|
+
import { PasswordResetEmailVerificationForm } from "./components";
|
|
5
|
+
export default async function Page() {
|
|
6
|
+
const { session, user } = await getCurrentPasswordResetSession();
|
|
7
|
+
if (session === null || user === null) {
|
|
8
|
+
return redirect("/forgot-password");
|
|
9
|
+
}
|
|
10
|
+
if (session.emailVerified) {
|
|
11
|
+
const security = await checkSecurity(session, user);
|
|
12
|
+
if (!security.satisfied && security.redirect) {
|
|
13
|
+
return redirect(security.redirect);
|
|
14
|
+
}
|
|
15
|
+
return redirect("/reset-password");
|
|
16
|
+
}
|
|
17
|
+
return _jsx(PasswordResetEmailVerificationForm, { email: session.email });
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../src/ui/reset-password/verify-email/page.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EACb,8BAA8B,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,IAAI;IAChC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,8BAA8B,EAAE,CAAC;IAEjE,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAc,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7C,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,KAAC,kCAAkC,IAAC,KAAK,EAAE,OAAO,CAAC,KAAK,GAAI,CAAC;AACtE,CAAC"}
|
|
@@ -8,4 +8,5 @@ export declare function LoginForm({ extraButtons, extraFields, hasAllowedExtensi
|
|
|
8
8
|
hasAllowedExtensions?: boolean;
|
|
9
9
|
extraButtons?: React.ReactNode;
|
|
10
10
|
extraFields?: React.ReactNode;
|
|
11
|
-
}):
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/ui/signin/components.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,EAAE,KAAK,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAMhE,wBAAgB,YAAY;UAHpB,aAAa,CAAC,UAAU,CAAC;EAShC;AAED,wBAAgB,SAAS,CAAC,EACxB,YAAY,EACZ,WAAW,EACX,oBAAoB,GACrB,EAAE;IACD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC/B,2CAwKA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
4
|
+
import { useTranslation } from "@vilio/intl";
|
|
5
|
+
import { Button } from "@vilio/ui/components/button";
|
|
6
|
+
import { Checkbox } from "@vilio/ui/components/checkbox";
|
|
7
|
+
import { Field, FieldError, FieldGroup, FieldLabel, } from "@vilio/ui/components/field";
|
|
8
|
+
import { Input } from "@vilio/ui/components/input";
|
|
9
|
+
import { Separator } from "@vilio/ui/components/separator";
|
|
10
|
+
import { cn } from "@vilio/ui/lib/utils";
|
|
11
|
+
import { Loader } from "@vilio/ui/shared/loader";
|
|
12
|
+
import { AlertCircle } from "lucide-react";
|
|
13
|
+
import Link from "next/link";
|
|
14
|
+
import { createContext, useContext, useState } from "react";
|
|
15
|
+
import { Controller, useForm } from "react-hook-form";
|
|
16
|
+
import { toast } from "sonner";
|
|
17
|
+
import { loginAction } from "../../actions/index";
|
|
18
|
+
import { loginSchema } from "../../validation";
|
|
19
|
+
const LoginFormContext = createContext(null);
|
|
20
|
+
export function useLoginForm() {
|
|
21
|
+
const context = useContext(LoginFormContext);
|
|
22
|
+
if (!context) {
|
|
23
|
+
throw new Error("useLoginForm must be used within a LoginForm");
|
|
24
|
+
}
|
|
25
|
+
return context;
|
|
26
|
+
}
|
|
27
|
+
export function LoginForm({ extraButtons, extraFields, hasAllowedExtensions, }) {
|
|
28
|
+
const [generalError, setGeneralError] = useState("");
|
|
29
|
+
const { t } = useTranslation();
|
|
30
|
+
const form = useForm({
|
|
31
|
+
resolver: zodResolver(loginSchema),
|
|
32
|
+
});
|
|
33
|
+
async function onSubmit(data) {
|
|
34
|
+
setGeneralError("");
|
|
35
|
+
try {
|
|
36
|
+
const response = await loginAction(data);
|
|
37
|
+
if (response.error) {
|
|
38
|
+
setGeneralError(response.message || t("error_occurred"));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
toast(response.message);
|
|
42
|
+
}
|
|
43
|
+
catch (_error) {
|
|
44
|
+
// setGeneralError(t("error_occurred"));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return (_jsx(LoginFormContext.Provider, { value: { form }, children: _jsxs("div", { className: cn("flex flex-col space-y-6"), children: [_jsxs("div", { className: "space-y-2 text-center", children: [_jsx("h1", { className: "text-3xl font-semibold", children: t("Sign In") }), _jsx("p", { className: "text-muted-foreground", children: t("Sign in to access your dashboard, settings and projects.") })] }), _jsxs("div", { className: "grid gap-5", children: [hasAllowedExtensions && (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex flex-col gap-2", children: extraButtons }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Separator, { className: "flex-1" }), _jsx("span", { className: "text-sm text-muted-foreground", children: t("or sign in with email") }), _jsx(Separator, { className: "flex-1" })] })] })), generalError && (_jsxs("div", { className: "flex gap-2 p-3 bg-red-50 border border-red-200 rounded-lg", children: [_jsx(AlertCircle, { className: "w-4 h-4 text-red-600 flex-shrink-0 mt-0.5" }), _jsx("p", { className: "text-sm text-red-600", children: generalError })] })), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "grid gap-6", children: [_jsxs(FieldGroup, { children: [_jsx(Controller, { name: "email", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { "data-invalid": fieldState.invalid, children: [_jsx(FieldLabel, { htmlFor: "email", children: t("Email address") }), _jsx(Input, { ...field, id: "email", type: "email", "aria-invalid": fieldState.invalid, placeholder: t("Email address"), autoComplete: "off" }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) }), _jsx(Controller, { name: "password", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { "data-invalid": fieldState.invalid, children: [_jsxs("div", { className: "flex items-center", children: [_jsx(FieldLabel, { htmlFor: "password", children: t("Password") }), _jsx(Link, { href: "/forgot-password", className: "ml-auto text-sm text-primary! underline-offset-4 hover:underline", children: t("Forgot your password?") })] }), _jsx(Input, { ...field, id: "password", type: "password", "aria-invalid": fieldState.invalid, placeholder: "********", autoComplete: "off" }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) }), extraFields, _jsx(Controller, { name: "remember", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { "data-invalid": fieldState.invalid, className: "flex items-center space-x-2", children: [_jsxs("div", { className: "flex items-center space-x-2", children: [_jsx(Checkbox, { id: "remember-me", "aria-invalid": fieldState.invalid, checked: field.value, onCheckedChange: (checked) => field.onChange(checked) }), _jsx(FieldLabel, { htmlFor: "remember-me", className: "text-sm text-muted-foreground", children: t("Remember me") })] }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) })] }), _jsxs(Button, { disabled: form.formState.isSubmitting, className: "w-full", children: [form.formState.isSubmitting ? t("Please wait...") : t("Sign In"), form.formState.isSubmitting && _jsx(Loader, { variant: "dark" })] })] }), _jsxs("div", { className: "text-center text-sm", children: [t("No account?"), " ", _jsx(Link, { href: "/signup", className: "underline underline-offset-4", children: t("Sign Up") }, "signup")] })] })] }) }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/ui/signin/components.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAmB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhE,MAAM,gBAAgB,GAAG,aAAa,CAE5B,IAAI,CAAC,CAAC;AAEhB,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,YAAY,EACZ,WAAW,EACX,oBAAoB,GAKrB;IACC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAa;QAC/B,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC;KACnC,CAAC,CAAC;IAEH,KAAK,UAAU,QAAQ,CAAC,IAAgB;QACtC,eAAe,CAAC,EAAE,CAAC,CAAC;QAEpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,eAAe,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YAED,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,YACxC,eAAK,SAAS,EAAE,EAAE,CAAC,yBAAyB,CAAC,aAC3C,eAAK,SAAS,EAAC,uBAAuB,aACpC,aAAI,SAAS,EAAC,wBAAwB,YAAE,CAAC,CAAC,SAAS,CAAC,GAAM,EAC1D,YAAG,SAAS,EAAC,uBAAuB,YACjC,CAAC,CAAC,0DAA0D,CAAC,GAC5D,IACA,EAEN,eAAK,SAAS,EAAC,YAAY,aACxB,oBAAoB,IAAI,CACvB,8BACE,cAAK,SAAS,EAAC,qBAAqB,YAAE,YAAY,GAAO,EAEzD,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,SAAS,IAAC,SAAS,EAAC,QAAQ,GAAG,EAChC,eAAM,SAAS,EAAC,+BAA+B,YAC5C,CAAC,CAAC,uBAAuB,CAAC,GACtB,EACP,KAAC,SAAS,IAAC,SAAS,EAAC,QAAQ,GAAG,IAC5B,IACL,CACJ,EAEA,YAAY,IAAI,CACf,eAAK,SAAS,EAAC,2DAA2D,aACxE,KAAC,WAAW,IAAC,SAAS,EAAC,2CAA2C,GAAG,EACrE,YAAG,SAAS,EAAC,sBAAsB,YAAE,YAAY,GAAK,IAClD,CACP,EAED,gBAAM,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAC,YAAY,aACjE,MAAC,UAAU,eACT,KAAC,UAAU,IACT,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CACjC,MAAC,KAAK,oBAAe,UAAU,CAAC,OAAO,aACrC,KAAC,UAAU,IAAC,OAAO,EAAC,OAAO,YACxB,CAAC,CAAC,eAAe,CAAC,GACR,EACb,KAAC,KAAK,OACA,KAAK,EACT,EAAE,EAAC,OAAO,EACV,IAAI,EAAC,OAAO,kBACE,UAAU,CAAC,OAAO,EAChC,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,EAC/B,YAAY,EAAC,KAAK,GAClB,EACD,UAAU,CAAC,OAAO,IAAI,CACrB,KAAC,UAAU,IAAC,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAI,CAC3C,IACK,CACT,GACD,EAEF,KAAC,UAAU,IACT,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CACjC,MAAC,KAAK,oBAAe,UAAU,CAAC,OAAO,aACrC,eAAK,SAAS,EAAC,mBAAmB,aAChC,KAAC,UAAU,IAAC,OAAO,EAAC,UAAU,YAC3B,CAAC,CAAC,UAAU,CAAC,GACH,EAEb,KAAC,IAAI,IACH,IAAI,EAAC,kBAAkB,EACvB,SAAS,EAAC,kEAAkE,YAE3E,CAAC,CAAC,uBAAuB,CAAC,GACtB,IACH,EAEN,KAAC,KAAK,OACA,KAAK,EACT,EAAE,EAAC,UAAU,EACb,IAAI,EAAC,UAAU,kBACD,UAAU,CAAC,OAAO,EAChC,WAAW,EAAC,UAAU,EACtB,YAAY,EAAC,KAAK,GAClB,EACD,UAAU,CAAC,OAAO,IAAI,CACrB,KAAC,UAAU,IAAC,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAI,CAC3C,IACK,CACT,GACD,EAED,WAAW,EAEZ,KAAC,UAAU,IACT,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CACjC,MAAC,KAAK,oBACU,UAAU,CAAC,OAAO,EAChC,SAAS,EAAC,6BAA6B,aAEvC,eAAK,SAAS,EAAC,6BAA6B,aAC1C,KAAC,QAAQ,IACP,EAAE,EAAC,aAAa,kBACF,UAAU,CAAC,OAAO,EAChC,OAAO,EAAE,KAAK,CAAC,KAAK,EACpB,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GACrD,EACF,KAAC,UAAU,IACT,OAAO,EAAC,aAAa,EACrB,SAAS,EAAC,+BAA+B,YAExC,CAAC,CAAC,aAAa,CAAC,GACN,IACT,EAEL,UAAU,CAAC,OAAO,IAAI,CACrB,KAAC,UAAU,IAAC,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAI,CAC3C,IACK,CACT,GACD,IACS,EAEb,MAAC,MAAM,IAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,EAAC,QAAQ,aAC9D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAChE,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,KAAC,MAAM,IAAC,OAAO,EAAC,MAAM,GAAG,IAClD,IACJ,EAEP,eAAK,SAAS,EAAC,qBAAqB,aACjC,CAAC,CAAC,aAAa,CAAC,EAAE,GAAG,EACtB,KAAC,IAAI,IAEH,IAAI,EAAC,SAAS,EACd,SAAS,EAAC,8BAA8B,YAEvC,CAAC,CAAC,SAAS,CAAC,IAJT,QAAQ,CAKP,IACH,IACF,IACF,GACoB,CAC7B,CAAC;AACJ,CAAC"}
|
package/dist/ui/signin/page.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export default function Page(): Promise<import("react/jsx-runtime").JSX.Element>;
|
|
2
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/ui/signin/page.tsx"],"names":[],"mappings":"AAQA,wBAA8B,IAAI,qDAiCjC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// import { ExtensionPoint } from "@vilio/ui/shared/extension-point";
|
|
3
|
+
import { checkSecurity, getCurrentSession } from "@vilio/core/server";
|
|
4
|
+
import { ExtensionPoint } from "@vilio/modules";
|
|
5
|
+
import { hasExtension } from "@vilio/modules/server";
|
|
6
|
+
import { redirect } from "next/navigation";
|
|
7
|
+
import { LoginForm } from "./components";
|
|
8
|
+
export default async function Page() {
|
|
9
|
+
const { session, user } = await getCurrentSession();
|
|
10
|
+
if (session !== null && user !== null) {
|
|
11
|
+
// Check if there are any pending security requirements (like 2FA)
|
|
12
|
+
const security = await checkSecurity(session, user);
|
|
13
|
+
if (!security.satisfied && security.redirect) {
|
|
14
|
+
return redirect(security.redirect);
|
|
15
|
+
}
|
|
16
|
+
return redirect("/");
|
|
17
|
+
}
|
|
18
|
+
const hasAllowed = await hasExtension("auth", "signin:extra-buttons");
|
|
19
|
+
return (_jsx(LoginForm, { hasAllowedExtensions: hasAllowed, extraButtons: _jsx(ExtensionPoint, { module: "auth", point: "signin:extra-buttons", className: "flex flex-col gap-2" }), extraFields: _jsx(ExtensionPoint, { module: "auth", point: "signin:extra-fields", className: "flex flex-col gap-4" }) }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/ui/signin/page.tsx"],"names":[],"mappings":";AAAA,qEAAqE;AACrE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,IAAI;IAChC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEpD,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACtC,kEAAkE;QAClE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC7C,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAEtE,OAAO,CACL,KAAC,SAAS,IACR,oBAAoB,EAAE,UAAU,EAChC,YAAY,EACV,KAAC,cAAc,IACb,MAAM,EAAC,MAAM,EACb,KAAK,EAAC,sBAAsB,EAC5B,SAAS,EAAC,qBAAqB,GAC/B,EAEJ,WAAW,EACT,KAAC,cAAc,IACb,MAAM,EAAC,MAAM,EACb,KAAK,EAAC,qBAAqB,EAC3B,SAAS,EAAC,qBAAqB,GAC/B,GAEJ,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -8,4 +8,5 @@ export declare function SignUpForm({ extraButtons, extraFields, hasAllowedExtraB
|
|
|
8
8
|
extraButtons?: React.ReactNode;
|
|
9
9
|
extraFields?: React.ReactNode;
|
|
10
10
|
hasAllowedExtraButtons?: boolean;
|
|
11
|
-
}):
|
|
11
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/ui/signup/components.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAMtE,wBAAgB,aAAa;UAHrB,aAAa,CAAC,aAAa,CAAC;EASnC;AAED,wBAAgB,UAAU,CAAC,EACzB,YAAY,EACZ,WAAW,EACX,sBAAsB,GACvB,EAAE;IACD,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,2CAwLA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
4
|
+
import { useTranslation } from "@vilio/intl";
|
|
5
|
+
import { Button } from "@vilio/ui/components/button";
|
|
6
|
+
import { Checkbox } from "@vilio/ui/components/checkbox";
|
|
7
|
+
import { Field, FieldError, FieldGroup, FieldLabel, } from "@vilio/ui/components/field";
|
|
8
|
+
import { Input } from "@vilio/ui/components/input";
|
|
9
|
+
import { Separator } from "@vilio/ui/components/separator";
|
|
10
|
+
import { cn } from "@vilio/ui/lib/utils";
|
|
11
|
+
import { Loader } from "@vilio/ui/shared/loader";
|
|
12
|
+
import { AlertCircle } from "lucide-react";
|
|
13
|
+
import Link from "next/link";
|
|
14
|
+
import { createContext, useContext, useState } from "react";
|
|
15
|
+
import { Controller, useForm } from "react-hook-form";
|
|
16
|
+
import { toast } from "sonner";
|
|
17
|
+
import { signupAction } from "../../actions/index";
|
|
18
|
+
import { registerSchema } from "../../validation";
|
|
19
|
+
const SignUpFormContext = createContext(null);
|
|
20
|
+
export function useSignUpForm() {
|
|
21
|
+
const context = useContext(SignUpFormContext);
|
|
22
|
+
if (!context) {
|
|
23
|
+
throw new Error("useSignUpForm must be used within a SignUpForm");
|
|
24
|
+
}
|
|
25
|
+
return context;
|
|
26
|
+
}
|
|
27
|
+
export function SignUpForm({ extraButtons, extraFields, hasAllowedExtraButtons, }) {
|
|
28
|
+
const [generalError, setGeneralError] = useState("");
|
|
29
|
+
const { t } = useTranslation();
|
|
30
|
+
const form = useForm({
|
|
31
|
+
resolver: zodResolver(registerSchema),
|
|
32
|
+
});
|
|
33
|
+
async function onSubmit(data) {
|
|
34
|
+
setGeneralError("");
|
|
35
|
+
try {
|
|
36
|
+
const response = await signupAction(data);
|
|
37
|
+
if (response.error) {
|
|
38
|
+
setGeneralError(response.message || t("error_occurred"));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
toast(response.message);
|
|
42
|
+
}
|
|
43
|
+
catch (_error) {
|
|
44
|
+
// setGeneralError(t("error_occurred"));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return (_jsx(SignUpFormContext.Provider, { value: { form }, children: _jsxs("div", { className: cn("flex flex-col space-y-6"), children: [_jsxs("div", { className: "space-y-2 text-center", children: [_jsx("h1", { className: "text-3xl font-semibold", children: t("Sign Up") }), _jsx("p", { className: "text-muted-foreground", children: t("Sign up to access your dashboard, settings and projects.") })] }), _jsxs("div", { className: "grid gap-5", children: [hasAllowedExtraButtons && (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex flex-col gap-2", children: extraButtons }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Separator, { className: "flex-1" }), _jsx("span", { className: "text-sm text-muted-foreground", children: t("or sign up with email") }), _jsx(Separator, { className: "flex-1" })] })] })), generalError && (_jsxs("div", { className: "flex gap-2 p-3 bg-red-50 border border-red-200 rounded-lg", children: [_jsx(AlertCircle, { className: "w-4 h-4 text-red-600 flex-shrink-0 mt-0.5" }), _jsx("p", { className: "text-sm text-red-600", children: generalError })] })), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "grid gap-6", children: [_jsxs(FieldGroup, { children: [_jsx(Controller, { name: "email", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { "data-invalid": fieldState.invalid, children: [_jsx(FieldLabel, { htmlFor: "email", children: t("Email address") }), _jsx(Input, { ...field, id: "email", type: "email", "aria-invalid": fieldState.invalid, placeholder: t("Email address"), autoComplete: "off" }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) }), _jsx(Controller, { name: "username", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { "data-invalid": fieldState.invalid, children: [_jsx(FieldLabel, { htmlFor: "username", children: t("Username") }), _jsx(Input, { ...field, id: "username", type: "text", "aria-invalid": fieldState.invalid, placeholder: t("Username"), autoComplete: "off" }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) }), _jsx(Controller, { name: "password", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { "data-invalid": fieldState.invalid, children: [_jsx(FieldLabel, { htmlFor: "password", children: t("Password") }), _jsx(Input, { ...field, id: "password", type: "password", "aria-invalid": fieldState.invalid, placeholder: t("Password"), autoComplete: "off" }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) }), extraFields, _jsx(Controller, { name: "terms", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { "data-invalid": fieldState.invalid, className: "flex items-center space-x-2", children: [_jsxs("div", { className: "flex items-center space-x-2", children: [_jsx(Checkbox, { id: "terms", "aria-invalid": fieldState.invalid, checked: field.value, onCheckedChange: (checked) => field.onChange(checked) }), _jsxs(FieldLabel, { htmlFor: "terms", className: "text-sm text-muted-foreground", children: [t("I agree to the"), " ", _jsx(Link, { href: "#", className: "text-primary hover:underline", children: t("Terms") }), " ", t("and"), " ", _jsx(Link, { href: "#", className: "text-primary hover:underline", children: t("Privacy Policy") })] })] }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) })] }), _jsxs(Button, { disabled: form.formState.isSubmitting, className: "w-full", children: [form.formState.isSubmitting ? t("Please wait...") : t("Sign Up"), form.formState.isSubmitting && _jsx(Loader, { variant: "dark" })] })] }), _jsxs("div", { className: "text-center text-sm", children: [t("Already have an account?"), " ", _jsx(Link, { href: "/signin", className: "underline underline-offset-4", children: t("Sign In") }, "signin")] })] })] }) }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/ui/signup/components.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/signup/page.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export default function Page(): Promise<import("react/jsx-runtime").JSX.Element>;
|
|
2
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/ui/signup/page.tsx"],"names":[],"mappings":"AAOA,wBAA8B,IAAI,qDA2BjC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { getCurrentSession } from "@vilio/core/server";
|
|
3
|
+
import { ExtensionPoint } from "@vilio/modules";
|
|
4
|
+
import { hasExtension } from "@vilio/modules/server";
|
|
5
|
+
import { redirect } from "next/navigation";
|
|
6
|
+
import { SignUpForm } from "./components";
|
|
7
|
+
export default async function Page() {
|
|
8
|
+
const { session, user } = await getCurrentSession();
|
|
9
|
+
if (session !== null && user !== null) {
|
|
10
|
+
return redirect("/");
|
|
11
|
+
}
|
|
12
|
+
const hasAllowed = await hasExtension("auth", "signup:extra-buttons");
|
|
13
|
+
return (_jsx(SignUpForm, { hasAllowedExtraButtons: hasAllowed, extraButtons: _jsx(ExtensionPoint, { module: "auth", point: "signup:extra-buttons", className: "flex flex-col gap-2 mt-4" }), extraFields: _jsx(ExtensionPoint, { module: "auth", point: "signup:extra-fields", className: "flex flex-col gap-4" }) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/ui/signup/page.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,IAAI;IAChC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEpD,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAEtE,OAAO,CACL,KAAC,UAAU,IACT,sBAAsB,EAAE,UAAU,EAClC,YAAY,EACV,KAAC,cAAc,IACb,MAAM,EAAC,MAAM,EACb,KAAK,EAAC,sBAAsB,EAC5B,SAAS,EAAC,0BAA0B,GACpC,EAEJ,WAAW,EACT,KAAC,cAAc,IACb,MAAM,EAAC,MAAM,EACb,KAAK,EAAC,qBAAqB,EAC3B,SAAS,EAAC,qBAAqB,GAC/B,GAEJ,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function EmailVerificationForm({ email }: {
|
|
2
2
|
email?: string | undefined;
|
|
3
|
-
}):
|
|
4
|
-
export declare function ResendEmailVerificationCodeForm():
|
|
3
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
export declare function ResendEmailVerificationCodeForm(): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/ui/verify-email/components.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,qBAAqB,CAAC,EAAE,KAAU,EAAE;;CAAA,2CAqFnD;AAMD,wBAAgB,+BAA+B,4CAqB9C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
4
|
+
import { useTranslation } from "@vilio/intl";
|
|
5
|
+
import { Button } from "@vilio/ui/components/button";
|
|
6
|
+
import { Field, FieldError, FieldGroup } from "@vilio/ui/components/field";
|
|
7
|
+
import { InputOTP, InputOTPGroup, InputOTPSlot, } from "@vilio/ui/components/input-otp";
|
|
8
|
+
import { cn } from "@vilio/ui/lib/utils";
|
|
9
|
+
import { Loader } from "@vilio/ui/shared/loader";
|
|
10
|
+
import { AlertCircle } from "lucide-react";
|
|
11
|
+
import { useActionState, useEffect, useState } from "react";
|
|
12
|
+
import { Controller, useForm } from "react-hook-form";
|
|
13
|
+
import { toast } from "sonner";
|
|
14
|
+
import { resendEmailVerificationCodeAction, verifyEmailAction, } from "../../actions/index";
|
|
15
|
+
import { verifyEmailSchema } from "../../validation";
|
|
16
|
+
export function EmailVerificationForm({ email = "" }) {
|
|
17
|
+
const [generalError, setGeneralError] = useState("");
|
|
18
|
+
const { t } = useTranslation();
|
|
19
|
+
const form = useForm({
|
|
20
|
+
resolver: zodResolver(verifyEmailSchema),
|
|
21
|
+
});
|
|
22
|
+
async function onSubmit(data) {
|
|
23
|
+
setGeneralError("");
|
|
24
|
+
try {
|
|
25
|
+
const response = await verifyEmailAction(data);
|
|
26
|
+
if (response.error) {
|
|
27
|
+
setGeneralError(response.message || t("error_occurred"));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
toast(response.message);
|
|
31
|
+
}
|
|
32
|
+
catch (_error) {
|
|
33
|
+
// setGeneralError(t("error_occurred"));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return (_jsxs("div", { className: cn("flex flex-col space-y-6"), children: [_jsxs("div", { className: "space-y-2 text-center", children: [_jsx("h1", { className: "text-3xl font-semibold", children: t("Verify email") }), _jsx("p", { className: "text-muted-foreground", children: t("We've sent a verification code to your email address: {email}", {
|
|
37
|
+
email,
|
|
38
|
+
}) })] }), _jsxs("div", { className: "grid gap-6", children: [generalError && (_jsxs("div", { className: "flex gap-2 p-3 bg-red-50 border border-red-200 rounded-lg", children: [_jsx(AlertCircle, { className: "w-4 h-4 text-red-600 flex-shrink-0 mt-0.5" }), _jsx("p", { className: "text-sm text-red-600", children: generalError })] })), _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "grid gap-5", children: [_jsx(FieldGroup, { className: "w-full mx-auto", children: _jsx(Controller, { name: "code", control: form.control, render: ({ field, fieldState }) => (_jsxs(Field, { className: "w-full", "data-invalid": fieldState.invalid, children: [_jsx(InputOTP, { ...field, className: "mx-auto w-full", maxLength: 6, autoFocus: true, inputMode: "text", children: _jsxs(InputOTPGroup, { className: "mx-auto", children: [_jsx(InputOTPSlot, { index: 0 }), _jsx(InputOTPSlot, { index: 1 }), _jsx(InputOTPSlot, { index: 2 }), _jsx(InputOTPSlot, { index: 3 }), _jsx(InputOTPSlot, { index: 4 }), _jsx(InputOTPSlot, { index: 5 })] }) }), fieldState.invalid && (_jsx(FieldError, { errors: [fieldState.error] }))] })) }) }), _jsxs(Button, { disabled: form.formState.isSubmitting, className: "w-full", children: [form.formState.isSubmitting
|
|
39
|
+
? t("Please wait...")
|
|
40
|
+
: t("Verify Email"), form.formState.isSubmitting && _jsx(Loader, { variant: "dark" })] })] })] })] }));
|
|
41
|
+
}
|
|
42
|
+
const resendEmailInitialState = {
|
|
43
|
+
message: "",
|
|
44
|
+
};
|
|
45
|
+
export function ResendEmailVerificationCodeForm() {
|
|
46
|
+
const { t } = useTranslation();
|
|
47
|
+
const [state, action, isPending] = useActionState(resendEmailVerificationCodeAction, resendEmailInitialState);
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (state.message) {
|
|
50
|
+
toast.success(state.message);
|
|
51
|
+
}
|
|
52
|
+
}, [state]);
|
|
53
|
+
return (_jsx("form", { action: action, children: _jsxs(Button, { disabled: isPending, variant: "ghost", className: "w-full", children: [isPending ? t("Please wait...") : t("Resend verification email"), isPending && _jsx(Loader, { variant: "default" })] }) }));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/ui/verify-email/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export default function Page(): Promise<import("react/jsx-runtime").JSX.Element>;
|
|
2
|
+
//# sourceMappingURL=page.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/ui/verify-email/page.tsx"],"names":[],"mappings":"AAYA,wBAA8B,IAAI,qDAuBjC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getCurrentSession, getUserEmailVerificationRequestFromRequest, } from "@vilio/core/server";
|
|
3
|
+
import { redirect } from "next/navigation";
|
|
4
|
+
import { EmailVerificationForm, ResendEmailVerificationCodeForm, } from "./components";
|
|
5
|
+
export default async function Page() {
|
|
6
|
+
const { user } = await getCurrentSession();
|
|
7
|
+
if (user === null) {
|
|
8
|
+
return redirect("/signin");
|
|
9
|
+
}
|
|
10
|
+
// TODO: Ideally we'd sent a new verification email automatically if the previous one is expired,
|
|
11
|
+
// but we can't set cookies inside server components.
|
|
12
|
+
const verificationRequest = await getUserEmailVerificationRequestFromRequest();
|
|
13
|
+
if (verificationRequest === null && user.emailVerifiedAt) {
|
|
14
|
+
return redirect("/?verified");
|
|
15
|
+
}
|
|
16
|
+
return (_jsxs("div", { className: "space-y-3", children: [_jsx(EmailVerificationForm, { email: verificationRequest?.email ?? user.email }), _jsx(ResendEmailVerificationCodeForm, {})] }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/ui/verify-email/page.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,iBAAiB,EACjB,0CAA0C,GAC3C,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EACL,qBAAqB,EACrB,+BAA+B,GAChC,MAAM,cAAc,CAAC;AAEtB,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,IAAI;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE3C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED,iGAAiG;IACjG,qDAAqD;IACrD,MAAM,mBAAmB,GACvB,MAAM,0CAA0C,EAAE,CAAC;IAErD,IAAI,mBAAmB,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,qBAAqB,IAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,GAAI,EAE1E,KAAC,+BAA+B,KAAG,IAC/B,CACP,CAAC;AACJ,CAAC"}
|
package/dist/validation.d.ts
CHANGED
|
@@ -95,3 +95,4 @@ export type TOTPVerifyInput = z.infer<typeof totpVerifySchema>;
|
|
|
95
95
|
export type PasskeysSetupInput = z.infer<typeof passkeysSetupSchema>;
|
|
96
96
|
export type VerifyEmailInput = z.infer<typeof verifyEmailSchema>;
|
|
97
97
|
export type RecoveryVerifyInput = z.infer<typeof recoveryCodeVerifySchema>;
|
|
98
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,WAAW;;;;;;;;;;;;EAItB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;EAKzB,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAQ5B,CAAC;AAEL,eAAO,MAAM,iBAAiB;;;;;;EAE5B,CAAC;AAGH,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;EAE3B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AAGH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC7D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACrE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACjE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
// Auth validation schemas - CLEAN (No DB dependencies for client-side)
|
|
3
|
+
export const loginSchema = z.object({
|
|
4
|
+
email: z.string().email("Invalid email address"),
|
|
5
|
+
password: z.string().min(8),
|
|
6
|
+
remember: z.boolean().optional(),
|
|
7
|
+
});
|
|
8
|
+
export const registerSchema = z.object({
|
|
9
|
+
username: z.string().min(2, "Name must be at least 2 characters"),
|
|
10
|
+
email: z.string().email("Invalid email address"),
|
|
11
|
+
password: z.string().min(8, "Password must be at least 8 characters"),
|
|
12
|
+
terms: z.boolean().refine((val) => val === true, "You must accept the terms"),
|
|
13
|
+
});
|
|
14
|
+
export const forgotPasswordSchema = z.object({
|
|
15
|
+
email: z.string().email("Invalid email address"),
|
|
16
|
+
});
|
|
17
|
+
export const resetPasswordSchema = z
|
|
18
|
+
.object({
|
|
19
|
+
password: z.string().min(8, "Password must be at least 8 characters"),
|
|
20
|
+
confirm: z.string(),
|
|
21
|
+
})
|
|
22
|
+
.refine((data) => data.password === data.confirm, {
|
|
23
|
+
message: "Passwords do not match",
|
|
24
|
+
path: ["confirm"],
|
|
25
|
+
});
|
|
26
|
+
export const verifyEmailSchema = z.object({
|
|
27
|
+
code: z.string().min(6).max(6),
|
|
28
|
+
});
|
|
29
|
+
// mfa validation schemas
|
|
30
|
+
export const totpSetupSchema = z.object({
|
|
31
|
+
code: z.string().regex(/^\d{6}$/, "Code must be 6 digits"),
|
|
32
|
+
});
|
|
33
|
+
export const totpVerifySchema = z.object({
|
|
34
|
+
code: z.string().regex(/^\d{6}$/, "Code must be 6 digits"),
|
|
35
|
+
});
|
|
36
|
+
export const passkeysSetupSchema = z.object({
|
|
37
|
+
name: z.string().min(1, "Passkey name is required"),
|
|
38
|
+
});
|
|
39
|
+
export const recoveryCodeVerifySchema = z.object({
|
|
40
|
+
code: z.string().min(16, "Recovery code is required").max(16),
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,uEAAuE;AACvE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wCAAwC,CAAC;IACrE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,EAAE,2BAA2B,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,CAAC;CACjD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,wCAAwC,CAAC;IACrE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC;KACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,EAAE;IAChD,OAAO,EAAE,wBAAwB;IACjC,IAAI,EAAE,CAAC,SAAS,CAAC;CAClB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEH,yBAAyB;AACzB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,uBAAuB,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,2BAA2B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;CAC9D,CAAC,CAAC"}
|
package/locales/en/global.json
CHANGED
|
@@ -31,5 +31,6 @@
|
|
|
31
31
|
"Verification failed. Please try again.": "Verification failed. Please try again.",
|
|
32
32
|
"Verify your email address": "Verify your email address",
|
|
33
33
|
"We sent an 6-digit code to {email}.": "We sent an 6-digit code to {email}.",
|
|
34
|
-
"Verify": "Verify"
|
|
34
|
+
"Verify": "Verify",
|
|
35
|
+
"Please wait...": "Please wait..."
|
|
35
36
|
}
|
package/locales/pl/global.json
CHANGED
|
@@ -31,5 +31,6 @@
|
|
|
31
31
|
"Verification failed. Please try again.": "Weryfikacja nie powiodła się. Spróbuj ponownie.",
|
|
32
32
|
"Verify your email address": "Zweryfikuj swój adres e-mail",
|
|
33
33
|
"We sent an 6-digit code to {email}.": "Wysłaliśmy 6-cyfrowy kod na adres {email}.",
|
|
34
|
-
"Verify": "Zweryfikować"
|
|
34
|
+
"Verify": "Zweryfikować",
|
|
35
|
+
"Please wait...": "Proszę czekać..."
|
|
35
36
|
}
|
package/package.json
CHANGED
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vilio/auth-module",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Auth module for Vilio framework",
|
|
5
|
-
"
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./package.json": "./package.json",
|
|
8
|
-
".":
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"require": "./dist/index.cjs"
|
|
12
|
-
},
|
|
13
|
-
"./actions": {
|
|
14
|
-
"types": "./dist/actions/index.d.ts",
|
|
15
|
-
"import": "./dist/actions/index.mjs",
|
|
16
|
-
"require": "./dist/actions/index.cjs"
|
|
17
|
-
}
|
|
8
|
+
".": "./dist/index.js",
|
|
9
|
+
"./actions": "./dist/actions/index.js",
|
|
10
|
+
"./client": "./dist/client.js"
|
|
18
11
|
},
|
|
19
12
|
"files": [
|
|
20
13
|
"dist",
|
|
@@ -24,14 +17,12 @@
|
|
|
24
17
|
"scripts": {
|
|
25
18
|
"release": "npm publish --access public --no-git-checks",
|
|
26
19
|
"clean": "rm -rf ./dist",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"dev": "unbuild --stub",
|
|
30
|
-
"build": "unbuild"
|
|
20
|
+
"dev": "tsc --watch",
|
|
21
|
+
"build": "tsc"
|
|
31
22
|
},
|
|
32
23
|
"dependencies": {
|
|
33
|
-
"@vilio/modules": "^0.0.
|
|
34
|
-
"@vilio/ui": "^0.0.
|
|
24
|
+
"@vilio/modules": "^0.0.6",
|
|
25
|
+
"@vilio/ui": "^0.0.6",
|
|
35
26
|
"@hookform/resolvers": "^3.10.0",
|
|
36
27
|
"lucide-react": "^0.475.0",
|
|
37
28
|
"react-hook-form": "^7.54.2",
|
|
@@ -39,19 +30,17 @@
|
|
|
39
30
|
"zod": "^3.24.1"
|
|
40
31
|
},
|
|
41
32
|
"devDependencies": {
|
|
42
|
-
"@vilio/core": "^0.0.
|
|
33
|
+
"@vilio/core": "^0.0.9",
|
|
43
34
|
"@types/react": "^19",
|
|
44
|
-
"next": "16.1.
|
|
35
|
+
"next": "16.1.6",
|
|
45
36
|
"react": "^19.0.0",
|
|
46
|
-
"typescript": "
|
|
47
|
-
"unbuild": "^3.6.1"
|
|
37
|
+
"typescript": "5.9.2"
|
|
48
38
|
},
|
|
49
39
|
"peerDependencies": {
|
|
50
|
-
"@vilio/core": "^0.0.
|
|
51
|
-
"@vilio/intl": "^0.0.
|
|
52
|
-
"@vilio/ui": "^0.0.
|
|
53
|
-
"next": "
|
|
40
|
+
"@vilio/core": "^0.0.9",
|
|
41
|
+
"@vilio/intl": "^0.0.7",
|
|
42
|
+
"@vilio/ui": "^0.0.6",
|
|
43
|
+
"next": "16.1.6",
|
|
54
44
|
"react": "^19.0.0"
|
|
55
|
-
}
|
|
56
|
-
"main": "./dist/index.mjs"
|
|
45
|
+
}
|
|
57
46
|
}
|