@rpcbase/auth 0.158.0 → 0.159.0

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.
Files changed (41) hide show
  1. package/dist/api/request-password-reset/handler.d.ts +4 -1
  2. package/dist/api/request-password-reset/handler.d.ts.map +1 -1
  3. package/dist/api/request-password-reset/index.d.ts +1 -0
  4. package/dist/api/request-password-reset/index.d.ts.map +1 -1
  5. package/dist/components/ResendCodeButton/index.d.ts +1 -1
  6. package/dist/components/ResendCodeButton/index.d.ts.map +1 -1
  7. package/dist/{handler-BIFPHnwb.js → handler-B_lItxOC.js} +2 -2
  8. package/dist/{handler-BIFPHnwb.js.map → handler-B_lItxOC.js.map} +1 -1
  9. package/dist/{handler-4-ccxPqk.js → handler-BuwKXMOu.js} +2 -2
  10. package/dist/{handler-4-ccxPqk.js.map → handler-BuwKXMOu.js.map} +1 -1
  11. package/dist/{handler-BOCOLt9O.js → handler-C-hPxnHG.js} +2 -2
  12. package/dist/{handler-BOCOLt9O.js.map → handler-C-hPxnHG.js.map} +1 -1
  13. package/dist/{handler-DZiCZNkX.js → handler-CYL3nA6F.js} +40 -15
  14. package/dist/handler-CYL3nA6F.js.map +1 -0
  15. package/dist/{handler-Y6JMPCW0.js → handler-CoHpAhui.js} +2 -2
  16. package/dist/{handler-Y6JMPCW0.js.map → handler-CoHpAhui.js.map} +1 -1
  17. package/dist/{handler-DG8GMWwR.js → handler-DBafWh0I.js} +2 -2
  18. package/dist/{handler-DG8GMWwR.js.map → handler-DBafWh0I.js.map} +1 -1
  19. package/dist/{handler-BvztD8II.js → handler-DfZwgoA4.js} +2 -2
  20. package/dist/{handler-BvztD8II.js.map → handler-DfZwgoA4.js.map} +1 -1
  21. package/dist/{handler-BlhyOTyk.js → handler-Duy5AFEH.js} +2 -2
  22. package/dist/{handler-BlhyOTyk.js.map → handler-Duy5AFEH.js.map} +1 -1
  23. package/dist/{handler-Dbkf3cD8.js → handler-Eyjkxj9l.js} +2 -2
  24. package/dist/{handler-Dbkf3cD8.js.map → handler-Eyjkxj9l.js.map} +1 -1
  25. package/dist/{handler-EYTkh4N4.js → handler-U3df_2Al.js} +2 -2
  26. package/dist/{handler-EYTkh4N4.js.map → handler-U3df_2Al.js.map} +1 -1
  27. package/dist/{index-sfjvVpg9.js → index-1_ZKABa_.js} +2 -2
  28. package/dist/{index-sfjvVpg9.js.map → index-1_ZKABa_.js.map} +1 -1
  29. package/dist/{index-DznfuMJi.js → index-D94-1Zwh.js} +2 -2
  30. package/dist/{index-DznfuMJi.js.map → index-D94-1Zwh.js.map} +1 -1
  31. package/dist/index.d.ts +1 -0
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +100 -28
  34. package/dist/index.js.map +1 -1
  35. package/dist/passwordReset.d.ts +21 -0
  36. package/dist/passwordReset.d.ts.map +1 -0
  37. package/dist/routes.js +1 -1
  38. package/dist/{schemas-BYptELX5.js → schemas--f80aXK7.js} +372 -1
  39. package/dist/{schemas-BYptELX5.js.map → schemas--f80aXK7.js.map} +1 -1
  40. package/package.json +12 -1
  41. package/dist/handler-DZiCZNkX.js.map +0 -1
package/dist/index.js CHANGED
@@ -3,9 +3,9 @@ import { c } from "react/compiler-runtime";
3
3
  import { useLocation, Link, useNavigate, useSearchParams } from "@rpcbase/router";
4
4
  import clsx from "clsx";
5
5
  import { useFormContext, useForm, zodResolver, FormProvider } from "@rpcbase/form";
6
- import { r as requestSchema } from "./index-DznfuMJi.js";
7
- import { useState, useContext, createContext, forwardRef, createElement, useEffect } from "react";
8
- import { r as requestSchema$1 } from "./index-sfjvVpg9.js";
6
+ import { r as requestSchema } from "./index-D94-1Zwh.js";
7
+ import { useState, useContext, createContext, forwardRef, createElement, useEffect, useRef } from "react";
8
+ import { r as requestSchema$1 } from "./index-1_ZKABa_.js";
9
9
  import { r, a, b } from "./middleware-8IfSkEEy.js";
10
10
  const LINKS_REDIRECTION_MAP = {
11
11
  "/auth/sign-in": {
@@ -579,15 +579,16 @@ const PasswordInput = (t0) => {
579
579
  function _temp(prev) {
580
580
  return !prev;
581
581
  }
582
- const useResendCountdown = (t0) => {
582
+ const useResendCountdown = (t0, t1) => {
583
583
  const $ = c(14);
584
584
  const seconds = t0 === void 0 ? 60 : t0;
585
+ const initiallyCountingDown = t1 === void 0 ? true : t1;
585
586
  const [remaining, setRemaining] = useState(seconds);
586
- const [isCountingDown, setIsCountingDown] = useState(true);
587
- let t1;
587
+ const [isCountingDown, setIsCountingDown] = useState(initiallyCountingDown);
588
588
  let t2;
589
+ let t3;
589
590
  if ($[0] !== isCountingDown || $[1] !== seconds) {
590
- t1 = () => {
591
+ t2 = () => {
591
592
  if (!isCountingDown) {
592
593
  return;
593
594
  }
@@ -602,44 +603,44 @@ const useResendCountdown = (t0) => {
602
603
  }, 1e3);
603
604
  return () => clearInterval(timer);
604
605
  };
605
- t2 = [isCountingDown, seconds];
606
+ t3 = [isCountingDown, seconds];
606
607
  $[0] = isCountingDown;
607
608
  $[1] = seconds;
608
- $[2] = t1;
609
- $[3] = t2;
609
+ $[2] = t2;
610
+ $[3] = t3;
610
611
  } else {
611
- t1 = $[2];
612
- t2 = $[3];
612
+ t2 = $[2];
613
+ t3 = $[3];
613
614
  }
614
- useEffect(t1, t2);
615
- let t3;
615
+ useEffect(t2, t3);
616
+ let t4;
616
617
  if ($[4] !== seconds) {
617
- t3 = (nextSeconds) => {
618
+ t4 = (nextSeconds) => {
618
619
  const value = typeof nextSeconds === "number" ? nextSeconds : seconds;
619
620
  setRemaining(value);
620
621
  setIsCountingDown(true);
621
622
  };
622
623
  $[4] = seconds;
623
- $[5] = t3;
624
+ $[5] = t4;
624
625
  } else {
625
- t3 = $[5];
626
+ t4 = $[5];
626
627
  }
627
- const restart = t3;
628
+ const restart = t4;
628
629
  const minutes = Math.floor(remaining / 60);
629
630
  const secs = remaining % 60;
630
- let t4;
631
+ let t5;
631
632
  if ($[6] !== secs) {
632
- t4 = secs.toString().padStart(2, "0");
633
+ t5 = secs.toString().padStart(2, "0");
633
634
  $[6] = secs;
634
- $[7] = t4;
635
+ $[7] = t5;
635
636
  } else {
636
- t4 = $[7];
637
+ t5 = $[7];
637
638
  }
638
- const formatted = `${minutes}:${t4}`;
639
+ const formatted = `${minutes}:${t5}`;
639
640
  const canResend = !isCountingDown;
640
- let t5;
641
+ let t6;
641
642
  if ($[8] !== canResend || $[9] !== formatted || $[10] !== isCountingDown || $[11] !== remaining || $[12] !== restart) {
642
- t5 = {
643
+ t6 = {
643
644
  remaining,
644
645
  formatted,
645
646
  isCountingDown,
@@ -651,11 +652,11 @@ const useResendCountdown = (t0) => {
651
652
  $[10] = isCountingDown;
652
653
  $[11] = remaining;
653
654
  $[12] = restart;
654
- $[13] = t5;
655
+ $[13] = t6;
655
656
  } else {
656
- t5 = $[13];
657
+ t6 = $[13];
657
658
  }
658
- return t5;
659
+ return t6;
659
660
  };
660
661
  const ResendCodeButton = ({
661
662
  seconds = 60,
@@ -693,18 +694,89 @@ const ResendCodeButton = ({
693
694
  ] }) : null
694
695
  ] });
695
696
  };
697
+ const DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS = 60;
698
+ class PasswordResetCodeRequestError extends Error {
699
+ retryAfterSeconds;
700
+ constructor(retryAfterSeconds) {
701
+ super("Unable to request a password reset code");
702
+ this.name = "PasswordResetCodeRequestError";
703
+ this.retryAfterSeconds = retryAfterSeconds;
704
+ }
705
+ }
706
+ const parseRetryAfterSeconds = (value) => {
707
+ const seconds = typeof value === "number" ? value : Number(value);
708
+ if (!Number.isFinite(seconds) || seconds <= 0) return void 0;
709
+ return Math.ceil(seconds);
710
+ };
711
+ const requestPasswordResetCode = async (email) => {
712
+ const response = await fetch("/api/rb/auth/request-password-reset", {
713
+ method: "POST",
714
+ headers: {
715
+ "Content-Type": "application/json"
716
+ },
717
+ body: JSON.stringify({
718
+ email
719
+ })
720
+ });
721
+ const payload = await response.json().catch(() => null);
722
+ const retryAfterSeconds = parseRetryAfterSeconds(payload?.retryAfterSeconds) ?? parseRetryAfterSeconds(response.headers.get("Retry-After"));
723
+ if (!response.ok || payload?.success !== true) {
724
+ throw new PasswordResetCodeRequestError(retryAfterSeconds);
725
+ }
726
+ return {
727
+ retryAfterSeconds: retryAfterSeconds ?? DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS
728
+ };
729
+ };
730
+ const usePasswordResetResend = ({
731
+ email,
732
+ cooldownSeconds = DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS
733
+ }) => {
734
+ const countdown = useResendCountdown(cooldownSeconds);
735
+ const [isResending, setIsResending] = useState(false);
736
+ const isResendingRef = useRef(false);
737
+ const resend = async () => {
738
+ if (!email || !countdown.canResend || isResendingRef.current) return null;
739
+ isResendingRef.current = true;
740
+ setIsResending(true);
741
+ try {
742
+ const result = await requestPasswordResetCode(email);
743
+ countdown.restart(result.retryAfterSeconds);
744
+ return result;
745
+ } catch (error) {
746
+ if (error instanceof PasswordResetCodeRequestError && error.retryAfterSeconds) {
747
+ countdown.restart(error.retryAfterSeconds);
748
+ }
749
+ throw error;
750
+ } finally {
751
+ isResendingRef.current = false;
752
+ setIsResending(false);
753
+ }
754
+ };
755
+ return {
756
+ resend,
757
+ isResending,
758
+ remainingSeconds: countdown.remaining,
759
+ formatted: countdown.formatted,
760
+ isCountingDown: countdown.isCountingDown,
761
+ canResend: Boolean(email) && countdown.canResend && !isResending
762
+ };
763
+ };
696
764
  export {
697
765
  AppleSignInButton,
698
766
  AuthLayout,
767
+ DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS,
699
768
  EmailInput,
700
769
  PasswordInput,
770
+ PasswordResetCodeRequestError,
701
771
  RememberMeCheckbox,
702
772
  ResendCodeButton,
703
773
  SignInForm,
704
774
  SignUpForm,
705
775
  r as redirectAuthMiddleware,
776
+ requestPasswordResetCode,
706
777
  a as requireSession,
707
778
  b as restrictSessionMiddleware,
779
+ usePasswordResetResend,
708
780
  useResendCountdown
709
781
  };
710
782
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/AuthLayout/index.tsx","../src/components/AppleSignInButton/index.tsx","../src/components/EmailInput/index.tsx","../src/utils/sanitizeNextPath.ts","../src/components/SignInForm/index.tsx","../src/components/SignUpForm/index.tsx","../src/components/RememberMeCheckbox/index.tsx","../../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../../../node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../../../node_modules/lucide-react/dist/esm/context.mjs","../../../node_modules/lucide-react/dist/esm/Icon.mjs","../../../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../../../node_modules/lucide-react/dist/esm/icons/eye-off.mjs","../../../node_modules/lucide-react/dist/esm/icons/eye.mjs","../src/components/PasswordInput/index.tsx","../src/components/ResendCodeButton/index.tsx"],"sourcesContent":["import * as React from \"react\"\nimport {Link, useLocation } from \"@rpcbase/router\"\n\n\nconst LINKS_REDIRECTION_MAP = {\n \"/auth/sign-in\": {\n \"title\": \"Sign Up\",\n \"location\": \"/auth/sign-up\"\n },\n \"/auth/sign-up\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n },\n \"/auth/logout-success\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n }\n}\n\ntype Pathname = keyof typeof LINKS_REDIRECTION_MAP\n\nexport const AuthLayout = ({\n sidePanel = null,\n children,\n}: {\n sidePanel: React.ReactElement | null\n children: React.ReactNode\n}) => {\n const location = useLocation()\n\n const linkTitle = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.title\n const linkLocation = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.location\n\n return (\n <div className=\"container relative flex min-h-dvh flex-col items-center justify-center px-4 py-20 sm:px-6 md:px-8 lg:grid lg:h-dvh lg:w-full lg:max-w-none lg:grid-cols-2 lg:px-0 lg:py-0\">\n {/* Top-right redirection link */}\n {linkTitle && linkLocation ? (\n <Link\n className=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 absolute right-4 top-4 md:right-8 md:top-8\"\n to={linkLocation}\n >\n {linkTitle}\n </Link>\n ) : null}\n <div className=\"relative hidden h-full flex-col bg-muted p-10 text-white dark:border-r lg:flex\">\n {sidePanel}\n </div>\n <div className=\"mx-auto flex w-full flex-col justify-center gap-6 /*sm:w-[350px]*/\">\n {children}\n </div>\n </div>\n )\n}\n","import clsx from \"clsx\"\n\n\nexport const AppleSignInButton = ({\n onPress,\n className,\n}: {\n onPress: () => void;\n className?: string;\n}) => {\n\n return (\n <button\n onClick={onPress}\n className={clsx(`\n w-full\n bg-black text-white hover:bg-gray-800\n flex items-center justify-center\n px-6 py-2\n rounded-lg\n font-medium\n transition duration-150 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-black\n `, className)}\n >\n <svg\n className=\"w-5 h-5 mr-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"white\"\n >\n <path d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.539 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\" />\n </svg>\n <span>Continue with Apple</span>\n </button>\n )\n}\n","import {useFormContext} from \"@rpcbase/form\"\n\n\nexport const EmailInput = ({\n id,\n className,\n placeholder,\n}: {\n id: string\n className?: string\n placeholder?: string\n}) => {\n const {register, formState} = useFormContext()\n\n const error = formState.errors.email\n let errorMessage: string | undefined\n if (typeof error === \"string\") {\n errorMessage = error\n } else if (error && typeof error.message === \"string\") {\n errorMessage = error.message\n }\n\n return (\n <>\n <input\n id={id}\n type=\"email\"\n required\n autoComplete=\"email\"\n className={className}\n placeholder={placeholder}\n {...register(\"email\")}\n />\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","const hasUnsafeNextPathChars = (value: string) => {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n if (code === 92 || code <= 31 || code === 127) return true\n }\n return false\n}\n\nexport const sanitizeNextPath = (raw: string | null) => {\n if (!raw) return null\n\n const nextPath = raw.trim()\n if (!nextPath) return null\n\n if (!nextPath.startsWith(\"/\") || nextPath.startsWith(\"//\")) {\n return null\n }\n\n if (hasUnsafeNextPathChars(nextPath)) {\n return null\n }\n\n try {\n const base = new URL(\"http://localhost\")\n const url = new URL(nextPath, base)\n if (url.origin !== base.origin) {\n return null\n }\n return `${url.pathname}${url.search}${url.hash}`\n } catch {\n return null\n }\n}\n\n","import { ReactNode } from \"react\"\nimport { useNavigate, useSearchParams } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type { SubmitHandler } from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-in\"\nimport { sanitizeNextPath } from \"../../utils/sanitizeNextPath\"\n\n\ntype SignInFormValues = z.input<typeof requestSchema>\n\nexport const SignInForm = ({\n children,\n className\n}: {\n children: ReactNode,\n className?: string\n}) => {\n const navigate = useNavigate()\n const [searchParams] = useSearchParams()\n\n const methods = useForm<SignInFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignInFormValues> = async (data) => {\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-in\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json().catch(() => null) as { success?: boolean; error?: string } | null\n\n if (!res.ok || !json?.success) {\n const message = json?.error === \"invalid_credentials\"\n ? \"Invalid email or password.\"\n : \"Sign-in failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n const nextPath = sanitizeNextPath(searchParams.get(\"next\")) ?? \"/\"\n navigate(nextPath, { replace: true })\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import {ReactNode, useState} from \"react\"\nimport { useNavigate } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type {SubmitHandler} from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-up\"\n\n\ntype SignUpFormValues = z.input<typeof requestSchema>\n\n\nexport const SignUpForm = ({\n children,\n className,\n otpNextPath\n}: {\n children: ReactNode,\n className?: string\n otpNextPath?: string\n}) => {\n\n const navigate = useNavigate()\n\n const [serverMessage, setServerMessage] = useState<string | null>(null)\n const methods = useForm<SignUpFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignUpFormValues> = async (data) => {\n setServerMessage(null)\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-up\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json()\n\n if (!res.ok) {\n const message = json.error === \"user_exists\"\n ? \"An account already exists with this email.\"\n : \"Sign-up failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n if (!json.success) {\n methods.setError(\"root\", { type: \"server\", message: \"Sign-up failed. Please try again.\" })\n return\n }\n\n const search = new URLSearchParams({ email: data.email })\n if (otpNextPath) {\n search.set(\"next\", otpNextPath)\n }\n navigate(`/auth/sign-up-otp?${search.toString()}`)\n setServerMessage(\"Account created. Check your inbox to verify your email.\")\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n {serverMessage && (\n <p className=\"mt-2 text-sm text-green-700\" role=\"status\">\n {serverMessage}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import type { ElementType } from \"react\"\nimport {useFormContext} from \"@rpcbase/form\"\n\n\nexport const RememberMeCheckbox = ({\n label,\n as: Component = \"input\"\n}: {\n label: string,\n as?: ElementType\n}) => {\n const {register} = useFormContext()\n\n return (\n <>\n <Component\n id=\"rememberMe\"\n {...register(\"rememberMe\")}\n />\n <label\n htmlFor={\"rememberMe\"}\n className=\"pl-2 block text-sm/6 text-gray-900\"\n >\n {label}\n </label>\n </>\n )\n}\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.mjs.map\n","import { useState } from \"react\"\nimport { Eye, EyeOff } from \"lucide-react\"\nimport { useFormContext } from \"@rpcbase/form\"\n\n\ntype PasswordInputProps = {\n id: string\n name?: string\n className?: string\n placeholder?: string\n autoComplete?: string\n}\n\nexport const PasswordInput = ({\n id,\n name = \"password\",\n className,\n placeholder,\n autoComplete = \"current-password\",\n}: PasswordInputProps) => {\n const [showPassword, setShowPassword] = useState(false)\n const { register, formState } = useFormContext()\n\n const fieldError = formState.errors[name as keyof typeof formState.errors]\n const errorMessage =\n typeof fieldError === \"string\"\n ? fieldError\n : typeof fieldError?.message === \"string\"\n ? fieldError.message\n : undefined\n\n const inputClassName = className ? `${className} pr-11` : \"pr-11\"\n\n return (\n <>\n <div className=\"relative\">\n <input\n id={id}\n type={showPassword ? \"text\" : \"password\"}\n autoComplete={autoComplete}\n className={inputClassName}\n placeholder={placeholder}\n {...register(name as Parameters<typeof register>[0])}\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-500\"\n onClick={() => setShowPassword((prev) => !prev)}\n aria-label={showPassword ? \"Hide characters\" : \"Show characters\"}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" aria-hidden />\n ) : (\n <Eye className=\"h-5 w-5\" aria-hidden />\n )}\n </button>\n </div>\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","import {useCallback, useEffect, useMemo, useState} from \"react\"\nimport clsx from \"clsx\"\n\n\nexport const useResendCountdown = (seconds = 60) => {\n const [remaining, setRemaining] = useState(seconds)\n const [isCountingDown, setIsCountingDown] = useState(true)\n\n useEffect(() => {\n if (!isCountingDown) return\n\n const timer = setInterval(() => {\n setRemaining((prev) => {\n if (prev <= 1) {\n setIsCountingDown(false)\n return seconds\n }\n return prev - 1\n })\n }, 1000)\n\n return () => clearInterval(timer)\n }, [isCountingDown, seconds])\n\n const restart = useCallback((nextSeconds?: number) => {\n const value = typeof nextSeconds === \"number\" ? nextSeconds : seconds\n setRemaining(value)\n setIsCountingDown(true)\n }, [seconds])\n\n const formatted = useMemo(() => {\n const minutes = Math.floor(remaining / 60)\n const secs = remaining % 60\n return `${minutes}:${secs.toString().padStart(2, \"0\")}`\n }, [remaining])\n\n const canResend = !isCountingDown\n\n return {remaining, formatted, isCountingDown, canResend, restart}\n}\n\n\nexport const ResendCodeButton = ({\n seconds = 60,\n onResend,\n className,\n disabled,\n}: {\n seconds?: number\n onResend?: () => Promise<void> | void\n className?: string\n disabled?: boolean\n}) => {\n const [isSending, setIsSending] = useState(false)\n const {formatted, isCountingDown, restart, canResend} = useResendCountdown(seconds)\n\n const handleClick = async () => {\n if (!canResend || isSending || disabled) return\n\n try {\n setIsSending(true)\n if (onResend) {\n await onResend()\n }\n } finally {\n restart()\n setIsSending(false)\n }\n }\n\n const isDisabled = disabled || isCountingDown || isSending\n const showCountdown = isDisabled && (isCountingDown || isSending)\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isDisabled}\n aria-label=\"Resend code\"\n className={clsx(\n \"text-sm font-semibold text-sky-600 hover:underline disabled:cursor-not-allowed disabled:text-gray-400\",\n className\n )}\n >\n Resend code\n </button>\n {showCountdown ? (\n <span\n data-testid=\"resend-countdown\"\n className=\"text-sm text-gray-500\"\n aria-live=\"polite\"\n >\n ({formatted})\n </span>\n ) : null}\n </span>\n )\n}\n"],"names":["LINKS_REDIRECTION_MAP","AuthLayout","t0","$","_c","sidePanel","t1","children","undefined","location","useLocation","linkTitle","pathname","title","linkLocation","t2","t3","t4","t5","AppleSignInButton","onPress","className","clsx","Symbol","for","EmailInput","id","placeholder","register","formState","useFormContext","error","errors","email","errorMessage","message","hasUnsafeNextPathChars","value","i","length","code","charCodeAt","sanitizeNextPath","raw","nextPath","trim","startsWith","base","URL","url","origin","search","hash","SignInForm","navigate","useNavigate","searchParams","useSearchParams","methods","useForm","defaultValues","password","rememberMe","navigationGuard","resolver","zodResolver","requestSchema","onSubmit","data","clearErrors","res","fetch","method","headers","body","JSON","stringify","credentials","json","catch","ok","success","setError","type","get","replace","err","handleSubmit","root","SignUpForm","otpNextPath","serverMessage","setServerMessage","useState","URLSearchParams","set","toString","RememberMeCheckbox","label","as","Component","__iconNode","PasswordInput","name","autoComplete","showPassword","setShowPassword","fieldError","inputClassName","t6","t7","_temp","t8","t9","t10","t11","t12","t13","prev","useResendCountdown","seconds","remaining","setRemaining","isCountingDown","setIsCountingDown","timer","setInterval","clearInterval","useEffect","nextSeconds","restart","minutes","Math","floor","secs","padStart","formatted","canResend","ResendCodeButton","onResend","disabled","isSending","setIsSending","handleClick","isDisabled","showCountdown"],"mappings":"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","x_google_ignoreList":[7,8,9,10,11,12,13,14,15,16,17]}
1
+ {"version":3,"file":"index.js","sources":["../src/components/AuthLayout/index.tsx","../src/components/AppleSignInButton/index.tsx","../src/components/EmailInput/index.tsx","../src/utils/sanitizeNextPath.ts","../src/components/SignInForm/index.tsx","../src/components/SignUpForm/index.tsx","../src/components/RememberMeCheckbox/index.tsx","../../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs","../../../node_modules/lucide-react/dist/esm/defaultAttributes.mjs","../../../node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs","../../../node_modules/lucide-react/dist/esm/context.mjs","../../../node_modules/lucide-react/dist/esm/Icon.mjs","../../../node_modules/lucide-react/dist/esm/createLucideIcon.mjs","../../../node_modules/lucide-react/dist/esm/icons/eye-off.mjs","../../../node_modules/lucide-react/dist/esm/icons/eye.mjs","../src/components/PasswordInput/index.tsx","../src/components/ResendCodeButton/index.tsx","../src/passwordReset.ts"],"sourcesContent":["import * as React from \"react\"\nimport {Link, useLocation } from \"@rpcbase/router\"\n\n\nconst LINKS_REDIRECTION_MAP = {\n \"/auth/sign-in\": {\n \"title\": \"Sign Up\",\n \"location\": \"/auth/sign-up\"\n },\n \"/auth/sign-up\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n },\n \"/auth/logout-success\": {\n \"title\": \"Sign In\",\n \"location\": \"/auth/sign-in\"\n }\n}\n\ntype Pathname = keyof typeof LINKS_REDIRECTION_MAP\n\nexport const AuthLayout = ({\n sidePanel = null,\n children,\n}: {\n sidePanel: React.ReactElement | null\n children: React.ReactNode\n}) => {\n const location = useLocation()\n\n const linkTitle = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.title\n const linkLocation = LINKS_REDIRECTION_MAP[location.pathname as Pathname]?.location\n\n return (\n <div className=\"container relative flex min-h-dvh flex-col items-center justify-center px-4 py-20 sm:px-6 md:px-8 lg:grid lg:h-dvh lg:w-full lg:max-w-none lg:grid-cols-2 lg:px-0 lg:py-0\">\n {/* Top-right redirection link */}\n {linkTitle && linkLocation ? (\n <Link\n className=\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2 absolute right-4 top-4 md:right-8 md:top-8\"\n to={linkLocation}\n >\n {linkTitle}\n </Link>\n ) : null}\n <div className=\"relative hidden h-full flex-col bg-muted p-10 text-white dark:border-r lg:flex\">\n {sidePanel}\n </div>\n <div className=\"mx-auto flex w-full flex-col justify-center gap-6 /*sm:w-[350px]*/\">\n {children}\n </div>\n </div>\n )\n}\n","import clsx from \"clsx\"\n\n\nexport const AppleSignInButton = ({\n onPress,\n className,\n}: {\n onPress: () => void;\n className?: string;\n}) => {\n\n return (\n <button\n onClick={onPress}\n className={clsx(`\n w-full\n bg-black text-white hover:bg-gray-800\n flex items-center justify-center\n px-6 py-2\n rounded-lg\n font-medium\n transition duration-150 ease-in-out\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-black\n `, className)}\n >\n <svg\n className=\"w-5 h-5 mr-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"white\"\n >\n <path d=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.539 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\" />\n </svg>\n <span>Continue with Apple</span>\n </button>\n )\n}\n","import {useFormContext} from \"@rpcbase/form\"\n\n\nexport const EmailInput = ({\n id,\n className,\n placeholder,\n}: {\n id: string\n className?: string\n placeholder?: string\n}) => {\n const {register, formState} = useFormContext()\n\n const error = formState.errors.email\n let errorMessage: string | undefined\n if (typeof error === \"string\") {\n errorMessage = error\n } else if (error && typeof error.message === \"string\") {\n errorMessage = error.message\n }\n\n return (\n <>\n <input\n id={id}\n type=\"email\"\n required\n autoComplete=\"email\"\n className={className}\n placeholder={placeholder}\n {...register(\"email\")}\n />\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","const hasUnsafeNextPathChars = (value: string) => {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n if (code === 92 || code <= 31 || code === 127) return true\n }\n return false\n}\n\nexport const sanitizeNextPath = (raw: string | null) => {\n if (!raw) return null\n\n const nextPath = raw.trim()\n if (!nextPath) return null\n\n if (!nextPath.startsWith(\"/\") || nextPath.startsWith(\"//\")) {\n return null\n }\n\n if (hasUnsafeNextPathChars(nextPath)) {\n return null\n }\n\n try {\n const base = new URL(\"http://localhost\")\n const url = new URL(nextPath, base)\n if (url.origin !== base.origin) {\n return null\n }\n return `${url.pathname}${url.search}${url.hash}`\n } catch {\n return null\n }\n}\n\n","import { ReactNode } from \"react\"\nimport { useNavigate, useSearchParams } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type { SubmitHandler } from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-in\"\nimport { sanitizeNextPath } from \"../../utils/sanitizeNextPath\"\n\n\ntype SignInFormValues = z.input<typeof requestSchema>\n\nexport const SignInForm = ({\n children,\n className\n}: {\n children: ReactNode,\n className?: string\n}) => {\n const navigate = useNavigate()\n const [searchParams] = useSearchParams()\n\n const methods = useForm<SignInFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignInFormValues> = async (data) => {\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-in\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json().catch(() => null) as { success?: boolean; error?: string } | null\n\n if (!res.ok || !json?.success) {\n const message = json?.error === \"invalid_credentials\"\n ? \"Invalid email or password.\"\n : \"Sign-in failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n const nextPath = sanitizeNextPath(searchParams.get(\"next\")) ?? \"/\"\n navigate(nextPath, { replace: true })\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import {ReactNode, useState} from \"react\"\nimport { useNavigate } from \"@rpcbase/router\"\nimport { useForm, FormProvider, zodResolver } from \"@rpcbase/form\"\nimport type {SubmitHandler} from \"@rpcbase/form\"\nimport { z } from \"zod\"\n\nimport {requestSchema} from \"../../api/sign-up\"\n\n\ntype SignUpFormValues = z.input<typeof requestSchema>\n\n\nexport const SignUpForm = ({\n children,\n className,\n otpNextPath\n}: {\n children: ReactNode,\n className?: string\n otpNextPath?: string\n}) => {\n\n const navigate = useNavigate()\n\n const [serverMessage, setServerMessage] = useState<string | null>(null)\n const methods = useForm<SignUpFormValues>({\n defaultValues: {\n email: \"\",\n password: \"\",\n rememberMe: true,\n },\n navigationGuard: false,\n resolver: zodResolver(requestSchema)\n })\n\n const onSubmit: SubmitHandler<SignUpFormValues> = async (data) => {\n setServerMessage(null)\n methods.clearErrors(\"root\")\n\n try {\n const res = await fetch(\"/api/rb/auth/sign-up\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n credentials: \"include\",\n })\n\n const json = await res.json()\n\n if (!res.ok) {\n const message = json.error === \"user_exists\"\n ? \"An account already exists with this email.\"\n : \"Sign-up failed. Please try again.\"\n methods.setError(\"root\", { type: \"server\", message })\n return\n }\n\n if (!json.success) {\n methods.setError(\"root\", { type: \"server\", message: \"Sign-up failed. Please try again.\" })\n return\n }\n\n const search = new URLSearchParams({ email: data.email })\n if (otpNextPath) {\n search.set(\"next\", otpNextPath)\n }\n navigate(`/auth/sign-up-otp?${search.toString()}`)\n setServerMessage(\"Account created. Check your inbox to verify your email.\")\n } catch (err) {\n methods.setError(\"root\", { type: \"server\", message: \"Network error. Please try again.\" })\n }\n }\n\n return (\n <FormProvider {...methods}>\n <form method=\"post\" noValidate className={className} onSubmit={methods.handleSubmit(onSubmit)}>\n {children}\n {methods.formState.errors.root?.message && (\n <p className=\"mt-2 text-sm text-red-600\" role=\"alert\">\n {methods.formState.errors.root.message}\n </p>\n )}\n {serverMessage && (\n <p className=\"mt-2 text-sm text-green-700\" role=\"status\">\n {serverMessage}\n </p>\n )}\n </form>\n </FormProvider>\n )\n}\n","import type { ElementType } from \"react\"\nimport {useFormContext} from \"@rpcbase/form\"\n\n\nexport const RememberMeCheckbox = ({\n label,\n as: Component = \"input\"\n}: {\n label: string,\n as?: ElementType\n}) => {\n const {register} = useFormContext()\n\n return (\n <>\n <Component\n id=\"rememberMe\"\n {...register(\"rememberMe\")}\n />\n <label\n htmlFor={\"rememberMe\"}\n className=\"pl-2 block text-sm/6 text-gray-900\"\n >\n {label}\n </label>\n </>\n )\n}\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses };\n//# sourceMappingURL=mergeClasses.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { toKebabCase };\n//# sourceMappingURL=toKebabCase.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\nexport { toCamelCase };\n//# sourceMappingURL=toCamelCase.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { toCamelCase } from './toCamelCase.mjs';\n\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\nexport { toPascalCase };\n//# sourceMappingURL=toPascalCase.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\nexport { hasA11yProp };\n//# sourceMappingURL=hasA11yProp.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { createContext, useContext, useMemo, createElement } from 'react';\n\nconst LucideContext = createContext({});\nfunction LucideProvider({\n children,\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n}) {\n const value = useMemo(\n () => ({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n }),\n [size, color, strokeWidth, absoluteStrokeWidth, className]\n );\n return createElement(LucideContext.Provider, { value }, children);\n}\nconst useLucideContext = () => useContext(LucideContext);\n\nexport { LucideProvider, useLucideContext };\n//# sourceMappingURL=context.mjs.map\n","\"use strict\";\n\"use client\";\n/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.mjs';\nimport { hasA11yProp } from './shared/src/utils/hasA11yProp.mjs';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { useLucideContext } from './context.mjs';\n\nconst Icon = forwardRef(\n ({ color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest }, ref) => {\n const {\n size: contextSize = 24,\n strokeWidth: contextStrokeWidth = 2,\n absoluteStrokeWidth: contextAbsoluteStrokeWidth = false,\n color: contextColor = \"currentColor\",\n className: contextClass = \"\"\n } = useLucideContext() ?? {};\n const calculatedStrokeWidth = absoluteStrokeWidth ?? contextAbsoluteStrokeWidth ? Number(strokeWidth ?? contextStrokeWidth) * 24 / Number(size ?? contextSize) : strokeWidth ?? contextStrokeWidth;\n return createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size ?? contextSize ?? defaultAttributes.width,\n height: size ?? contextSize ?? defaultAttributes.height,\n stroke: color ?? contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: mergeClasses(\"lucide\", contextClass, className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n );\n }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses } from './shared/src/utils/mergeClasses.mjs';\nimport { toKebabCase } from './shared/src/utils/toKebabCase.mjs';\nimport { toPascalCase } from './shared/src/utils/toPascalCase.mjs';\nimport Icon from './Icon.mjs';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.mjs.map\n","import { useState } from \"react\"\nimport { Eye, EyeOff } from \"lucide-react\"\nimport { useFormContext } from \"@rpcbase/form\"\n\n\ntype PasswordInputProps = {\n id: string\n name?: string\n className?: string\n placeholder?: string\n autoComplete?: string\n}\n\nexport const PasswordInput = ({\n id,\n name = \"password\",\n className,\n placeholder,\n autoComplete = \"current-password\",\n}: PasswordInputProps) => {\n const [showPassword, setShowPassword] = useState(false)\n const { register, formState } = useFormContext()\n\n const fieldError = formState.errors[name as keyof typeof formState.errors]\n const errorMessage =\n typeof fieldError === \"string\"\n ? fieldError\n : typeof fieldError?.message === \"string\"\n ? fieldError.message\n : undefined\n\n const inputClassName = className ? `${className} pr-11` : \"pr-11\"\n\n return (\n <>\n <div className=\"relative\">\n <input\n id={id}\n type={showPassword ? \"text\" : \"password\"}\n autoComplete={autoComplete}\n className={inputClassName}\n placeholder={placeholder}\n {...register(name as Parameters<typeof register>[0])}\n />\n <button\n type=\"button\"\n className=\"absolute inset-y-0 right-0 flex items-center pr-3 text-gray-500\"\n onClick={() => setShowPassword((prev) => !prev)}\n aria-label={showPassword ? \"Hide characters\" : \"Show characters\"}\n >\n {showPassword ? (\n <EyeOff className=\"h-5 w-5\" aria-hidden />\n ) : (\n <Eye className=\"h-5 w-5\" aria-hidden />\n )}\n </button>\n </div>\n {errorMessage ? (\n <p className=\"mt-1 -mb-2 text-sm/6 text-red-500\">{errorMessage}</p>\n ) : null}\n </>\n )\n}\n","import {useEffect, useState} from \"react\"\nimport clsx from \"clsx\"\n\n\nexport const useResendCountdown = (seconds = 60, initiallyCountingDown = true) => {\n const [remaining, setRemaining] = useState(seconds)\n const [isCountingDown, setIsCountingDown] = useState(initiallyCountingDown)\n\n useEffect(() => {\n if (!isCountingDown) return\n\n const timer = setInterval(() => {\n setRemaining((prev) => {\n if (prev <= 1) {\n setIsCountingDown(false)\n return seconds\n }\n return prev - 1\n })\n }, 1000)\n\n return () => clearInterval(timer)\n }, [isCountingDown, seconds])\n\n const restart = (nextSeconds?: number) => {\n const value = typeof nextSeconds === \"number\" ? nextSeconds : seconds\n setRemaining(value)\n setIsCountingDown(true)\n }\n\n const minutes = Math.floor(remaining / 60)\n const secs = remaining % 60\n const formatted = `${minutes}:${secs.toString().padStart(2, \"0\")}`\n\n const canResend = !isCountingDown\n\n return {remaining, formatted, isCountingDown, canResend, restart}\n}\n\n\nexport const ResendCodeButton = ({\n seconds = 60,\n onResend,\n className,\n disabled,\n}: {\n seconds?: number\n onResend?: () => Promise<void> | void\n className?: string\n disabled?: boolean\n}) => {\n const [isSending, setIsSending] = useState(false)\n const {formatted, isCountingDown, restart, canResend} = useResendCountdown(seconds)\n\n const handleClick = async () => {\n if (!canResend || isSending || disabled) return\n\n try {\n setIsSending(true)\n if (onResend) {\n await onResend()\n }\n } finally {\n restart()\n setIsSending(false)\n }\n }\n\n const isDisabled = disabled || isCountingDown || isSending\n const showCountdown = isDisabled && (isCountingDown || isSending)\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isDisabled}\n aria-label=\"Resend code\"\n className={clsx(\n \"text-sm font-semibold text-sky-600 hover:underline disabled:cursor-not-allowed disabled:text-gray-400\",\n className\n )}\n >\n Resend code\n </button>\n {showCountdown ? (\n <span\n data-testid=\"resend-countdown\"\n className=\"text-sm text-gray-500\"\n aria-live=\"polite\"\n >\n ({formatted})\n </span>\n ) : null}\n </span>\n )\n}\n","import { useRef, useState } from \"react\"\n\nimport { useResendCountdown } from \"./components/ResendCodeButton\"\n\n\nexport const DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS = 60\n\nexport type PasswordResetCodeRequestResult = {\n retryAfterSeconds: number\n}\n\nexport class PasswordResetCodeRequestError extends Error {\n retryAfterSeconds?: number\n\n constructor(retryAfterSeconds?: number) {\n super(\"Unable to request a password reset code\")\n this.name = \"PasswordResetCodeRequestError\"\n this.retryAfterSeconds = retryAfterSeconds\n }\n}\n\nconst parseRetryAfterSeconds = (value: unknown) => {\n const seconds = typeof value === \"number\" ? value : Number(value)\n if (!Number.isFinite(seconds) || seconds <= 0) return undefined\n return Math.ceil(seconds)\n}\n\nexport const requestPasswordResetCode = async(email: string): Promise<PasswordResetCodeRequestResult> => {\n const response = await fetch(\"/api/rb/auth/request-password-reset\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ email }),\n })\n\n const payload = await response.json().catch(() => null) as {\n success?: unknown\n retryAfterSeconds?: unknown\n } | null\n const retryAfterSeconds = parseRetryAfterSeconds(payload?.retryAfterSeconds)\n ?? parseRetryAfterSeconds(response.headers.get(\"Retry-After\"))\n\n if (!response.ok || payload?.success !== true) {\n throw new PasswordResetCodeRequestError(retryAfterSeconds)\n }\n\n return {\n retryAfterSeconds: retryAfterSeconds ?? DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS,\n }\n}\n\nexport const usePasswordResetResend = ({\n email,\n cooldownSeconds = DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS,\n}: {\n email?: string | null\n cooldownSeconds?: number\n}) => {\n const countdown = useResendCountdown(cooldownSeconds)\n const [isResending, setIsResending] = useState(false)\n const isResendingRef = useRef(false)\n\n const resend = async() => {\n if (!email || !countdown.canResend || isResendingRef.current) return null\n\n isResendingRef.current = true\n setIsResending(true)\n\n try {\n const result = await requestPasswordResetCode(email)\n countdown.restart(result.retryAfterSeconds)\n return result\n } catch (error) {\n if (error instanceof PasswordResetCodeRequestError && error.retryAfterSeconds) {\n countdown.restart(error.retryAfterSeconds)\n }\n throw error\n } finally {\n isResendingRef.current = false\n setIsResending(false)\n }\n }\n\n return {\n resend,\n isResending,\n remainingSeconds: countdown.remaining,\n formatted: countdown.formatted,\n isCountingDown: countdown.isCountingDown,\n canResend: Boolean(email) && countdown.canResend && !isResending,\n }\n}\n"],"names":["LINKS_REDIRECTION_MAP","AuthLayout","t0","$","_c","sidePanel","t1","children","undefined","location","useLocation","linkTitle","pathname","title","linkLocation","t2","t3","t4","t5","AppleSignInButton","onPress","className","clsx","Symbol","for","EmailInput","id","placeholder","register","formState","useFormContext","error","errors","email","errorMessage","message","hasUnsafeNextPathChars","value","i","length","code","charCodeAt","sanitizeNextPath","raw","nextPath","trim","startsWith","base","URL","url","origin","search","hash","SignInForm","navigate","useNavigate","searchParams","useSearchParams","methods","useForm","defaultValues","password","rememberMe","navigationGuard","resolver","zodResolver","requestSchema","onSubmit","data","clearErrors","res","fetch","method","headers","body","JSON","stringify","credentials","json","catch","ok","success","setError","type","get","replace","err","handleSubmit","root","SignUpForm","otpNextPath","serverMessage","setServerMessage","useState","URLSearchParams","set","toString","RememberMeCheckbox","label","as","Component","__iconNode","PasswordInput","name","autoComplete","showPassword","setShowPassword","fieldError","inputClassName","t6","t7","_temp","t8","t9","t10","t11","t12","t13","prev","useResendCountdown","seconds","initiallyCountingDown","remaining","setRemaining","isCountingDown","setIsCountingDown","timer","setInterval","clearInterval","useEffect","nextSeconds","restart","minutes","Math","floor","secs","padStart","formatted","canResend","ResendCodeButton","onResend","disabled","isSending","setIsSending","handleClick","isDisabled","showCountdown","DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS","PasswordResetCodeRequestError","Error","retryAfterSeconds","constructor","parseRetryAfterSeconds","Number","isFinite","ceil","requestPasswordResetCode","response","payload","usePasswordResetResend","cooldownSeconds","countdown","isResending","setIsResending","isResendingRef","useRef","resend","current","result","remainingSeconds","Boolean"],"mappings":";;;;;;;;;AAIA,MAAMA,wBAAwB;AAAA,EAC5B,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,EAAA;AAAA,EAEd,iBAAiB;AAAA,IACf,SAAS;AAAA,IACT,YAAY;AAAA,EAAA;AAAA,EAEd,wBAAwB;AAAA,IACtB,SAAS;AAAA,IACT,YAAY;AAAA,EAAA;AAEhB;AAIO,MAAMC,aAAaC,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAAC,WAAAC;AAAAA,IAAAC;AAAAA,EAAAA,IAAAL;AACzB,QAAAG,YAAAC,OAAAE,SAAA,OAAAF;AAMA,QAAAG,WAAiBC,YAAAA;AAEjB,QAAAC,YAAkBX,sBAAsBS,SAAQG,QAAqB,GAAQC;AAC7E,QAAAC,eAAqBd,sBAAsBS,SAAQG,QAAqB,GAAWH;AAAA,MAAAM;AAAA,MAAAZ,EAAA,CAAA,MAAAW,gBAAAX,SAAAQ,WAAA;AAK9EI,SAAAJ,aAAAG,eACC,oBAAC,MAAA,EACW,WAAA,+YACNA,IAAAA,cAEHH,UAAAA,UAAAA,CACH,IAND;AAOOR,WAAAW;AAAAX,WAAAQ;AAAAR,WAAAY;AAAAA,EAAA,OAAA;AAAAA,SAAAZ,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAa;AAAA,MAAAb,SAAAE,WAAA;AACRW,SAAA,oBAAA,OAAA,EAAe,WAAA,kFACZX,UAAAA,WACH;AAAMF,WAAAE;AAAAF,WAAAa;AAAAA,EAAA,OAAA;AAAAA,SAAAb,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAc;AAAA,MAAAd,SAAAI,UAAA;AACNU,SAAA,oBAAA,OAAA,EAAe,WAAA,sEACZV,UACH;AAAMJ,WAAAI;AAAAJ,WAAAc;AAAAA,EAAA,OAAA;AAAAA,SAAAd,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAe;AAAA,MAAAf,EAAA,CAAA,MAAAY,MAAAZ,SAAAa,MAAAb,EAAA,CAAA,MAAAc,IAAA;AAfRC,uCAAe,WAAA,6KAEZH,UAAAA;AAAAA,MAAAA;AAAAA,MAQDC;AAAAA,MAGAC;AAAAA,IAAAA,GAGF;AAAMd,WAAAY;AAAAZ,WAAAa;AAAAb,WAAAc;AAAAd,YAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,EAAA,EAAA;AAAA,EAAA;AAAA,SAhBNe;AAgBM;AC/CH,MAAMC,oBAAoBjB,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAC,QAAA;AAAA,IAAAgB;AAAAA,IAAAC;AAAAA,EAAAA,IAAAnB;AAMjC,MAAAI;AAAA,MAAAH,SAAAkB,WAAA;AAKgBf,SAAAgB,KAAK,4SASbD,SAAS;AAAClB,WAAAkB;AAAAlB,WAAAG;AAAAA,EAAA,OAAA;AAAAA,SAAAH,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAY;AAAA,MAAAC;AAAA,MAAAb,EAAA,CAAA,MAAAoB,uBAAAC,IAAA,2BAAA,GAAA;AAEbT,SAAA,oBAAA,OAAA,EACY,WAAA,gBACJ,OAAA,8BACE,SAAA,aACH,MAAA,SAEL,UAAA,oBAAA,QAAA,EAAQ,GAAA,iiBAA+hB,GACziB;AACAC,SAAA,oBAAA,UAAM,UAAA,sBAAA,CAAmB;AAAOb,WAAAY;AAAAZ,WAAAa;AAAAA,EAAA,OAAA;AAAAD,SAAAZ,EAAA,CAAA;AAAAa,SAAAb,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAc;AAAA,MAAAd,EAAA,CAAA,MAAAiB,WAAAjB,SAAAG,IAAA;AArBlCW,SAAA,qBAAA,UAAA,EACWG,kBACE,WAAAd,IAWXS,UAAAA;AAAAA,MAAAA;AAAAA,MAQAC;AAAAA,IAAAA,GACF;AAASb,WAAAiB;AAAAjB,WAAAG;AAAAH,WAAAc;AAAAA,EAAA,OAAA;AAAAA,SAAAd,EAAA,CAAA;AAAA,EAAA;AAAA,SAtBTc;AAsBS;AC/BN,MAAMQ,aAAavB,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAAsB;AAAAA,IAAAL;AAAAA,IAAAM;AAAAA,EAAAA,IAAAzB;AASzB,QAAA;AAAA,IAAA0B;AAAAA,IAAAC;AAAAA,EAAAA,IAA8BC,eAAAA;AAE9B,QAAAC,QAAcF,UAASG,OAAOC;AAC1BC,MAAAA;AACJ,MAAI,OAAOH,UAAU,UAAQ;AAC3BG,mBAAeH;AAAAA,EAAH,OAAA;AACP,QAAIA,SAAS,OAAOA,MAAKI,YAAa,UAAQ;AACnDD,qBAAeH,MAAKI;AAAAA,IAAR;AAAA,EACb;AAAA,MAAA7B;AAAA,MAAAH,SAAAyB,UAAA;AAWStB,SAAAsB,SAAS,OAAO;AAACzB,WAAAyB;AAAAzB,WAAAG;AAAAA,EAAA,OAAA;AAAAA,SAAAH,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAY;AAAA,MAAAZ,EAAA,CAAA,MAAAkB,aAAAlB,EAAA,CAAA,MAAAuB,MAAAvB,EAAA,CAAA,MAAAwB,eAAAxB,SAAAG,IAAA;AAPvBS,SAAA,oBAAA,SAAA,EACMW,IACC,MAAA,SACL,UAAA,MACa,cAAA,SACFL,WACEM,aAAW,GACpBrB,GAAAA,CAAiB;AACrBH,WAAAkB;AAAAlB,WAAAuB;AAAAvB,WAAAwB;AAAAxB,WAAAG;AAAAH,WAAAY;AAAAA,EAAA,OAAA;AAAAA,SAAAZ,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAa;AAAA,MAAAb,SAAA+B,cAAA;AACDlB,SAAAkB,eACC,oBAAA,KAAA,EAAa,WAAA,6DAAkD,IADhE;AAEO/B,WAAA+B;AAAA/B,WAAAa;AAAAA,EAAA,OAAA;AAAAA,SAAAb,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAc;AAAA,MAAAd,EAAA,CAAA,MAAAY,MAAAZ,UAAAa,IAAA;AAZVC,0CACEF,UAAAA;AAAAA,MAAAA;AAAAA,MASCC;AAAAA,IAAAA,GAEO;AACPb,WAAAY;AAAAZ,YAAAa;AAAAb,YAAAc;AAAAA,EAAA,OAAA;AAAAA,SAAAd,EAAA,EAAA;AAAA,EAAA;AAAA,SAbHc;AAaG;ACpCP,MAAMmB,yBAAyBA,CAACC,UAAkB;AAChD,WAASC,IAAI,GAAGA,IAAID,MAAME,QAAQD,KAAK;AACrC,UAAME,OAAOH,MAAMI,WAAWH,CAAC;AAC/B,QAAIE,SAAS,MAAMA,QAAQ,MAAMA,SAAS,IAAK,QAAO;AAAA,EACxD;AACA,SAAO;AACT;AAEO,MAAME,mBAAmBA,CAACC,QAAuB;AACtD,MAAI,CAACA,IAAK,QAAO;AAEjB,QAAMC,WAAWD,IAAIE,KAAAA;AACrB,MAAI,CAACD,SAAU,QAAO;AAEtB,MAAI,CAACA,SAASE,WAAW,GAAG,KAAKF,SAASE,WAAW,IAAI,GAAG;AAC1D,WAAO;AAAA,EACT;AAEA,MAAIV,uBAAuBQ,QAAQ,GAAG;AACpC,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAMG,OAAO,IAAIC,IAAI,kBAAkB;AACvC,UAAMC,MAAM,IAAID,IAAIJ,UAAUG,IAAI;AAClC,QAAIE,IAAIC,WAAWH,KAAKG,QAAQ;AAC9B,aAAO;AAAA,IACT;AACA,WAAO,GAAGD,IAAIrC,QAAQ,GAAGqC,IAAIE,MAAM,GAAGF,IAAIG,IAAI;AAAA,EAChD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;ACpBO,MAAMC,aAAaA,CAAC;AAAA,EACzB9C;AAAAA,EACAc;AAIF,MAAM;AACJ,QAAMiC,WAAWC,YAAAA;AACjB,QAAM,CAACC,YAAY,IAAIC,gBAAAA;AAEvB,QAAMC,UAAUC,QAA0B;AAAA,IACxCC,eAAe;AAAA,MACb3B,OAAO;AAAA,MACP4B,UAAU;AAAA,MACVC,YAAY;AAAA,IAAA;AAAA,IAEdC,iBAAiB;AAAA,IACjBC,UAAUC,YAAYC,aAAa;AAAA,EAAA,CACpC;AAED,QAAMC,WAA4C,OAAOC,SAAS;AAChEV,YAAQW,YAAY,MAAM;AAE1B,QAAI;AACF,YAAMC,MAAM,MAAMC,MAAM,wBAAwB;AAAA,QAC9CC,QAAQ;AAAA,QACRC,SAAS;AAAA,UACP,gBAAgB;AAAA,QAAA;AAAA,QAElBC,MAAMC,KAAKC,UAAUR,IAAI;AAAA,QACzBS,aAAa;AAAA,MAAA,CACd;AAED,YAAMC,OAAO,MAAMR,IAAIQ,OAAOC,MAAM,MAAM,IAAI;AAE9C,UAAI,CAACT,IAAIU,MAAM,CAACF,MAAMG,SAAS;AAC7B,cAAM9C,UAAU2C,MAAM/C,UAAU,wBAC5B,+BACA;AACJ2B,gBAAQwB,SAAS,QAAQ;AAAA,UAAEC,MAAM;AAAA,UAAUhD;AAAAA,QAAAA,CAAS;AACpD;AAAA,MACF;AAEA,YAAMS,WAAWF,iBAAiBc,aAAa4B,IAAI,MAAM,CAAC,KAAK;AAC/D9B,eAASV,UAAU;AAAA,QAAEyC,SAAS;AAAA,MAAA,CAAM;AAAA,IACtC,SAASC,KAAK;AACZ5B,cAAQwB,SAAS,QAAQ;AAAA,QAAEC,MAAM;AAAA,QAAUhD,SAAS;AAAA,MAAA,CAAoC;AAAA,IAC1F;AAAA,EACF;AAEA,SACE,oBAAC,cAAA,EAAa,GAAIuB,SAChB,+BAAC,QAAA,EAAK,QAAO,QAAO,YAAU,MAAC,WAAsB,UAAUA,QAAQ6B,aAAapB,QAAQ,GACzF5D,UAAAA;AAAAA,IAAAA;AAAAA,IACAmD,QAAQ7B,UAAUG,OAAOwD,MAAMrD,WAC9B,oBAAC,KAAA,EAAE,WAAU,6BAA4B,MAAK,SAC3CuB,UAAAA,QAAQ7B,UAAUG,OAAOwD,KAAKrD,QAAAA,CACjC;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;AC9DO,MAAMsD,aAAaA,CAAC;AAAA,EACzBlF;AAAAA,EACAc;AAAAA,EACAqE;AAKF,MAAM;AAEJ,QAAMpC,WAAWC,YAAAA;AAEjB,QAAM,CAACoC,eAAeC,gBAAgB,IAAIC,SAAwB,IAAI;AACtE,QAAMnC,UAAUC,QAA0B;AAAA,IACxCC,eAAe;AAAA,MACb3B,OAAO;AAAA,MACP4B,UAAU;AAAA,MACVC,YAAY;AAAA,IAAA;AAAA,IAEdC,iBAAiB;AAAA,IACjBC,UAAUC,YAAYC,eAAa;AAAA,EAAA,CACpC;AAED,QAAMC,WAA4C,OAAOC,SAAS;AAChEwB,qBAAiB,IAAI;AACrBlC,YAAQW,YAAY,MAAM;AAE1B,QAAI;AACF,YAAMC,MAAM,MAAMC,MAAM,wBAAwB;AAAA,QAC9CC,QAAQ;AAAA,QACRC,SAAS;AAAA,UACP,gBAAgB;AAAA,QAAA;AAAA,QAElBC,MAAMC,KAAKC,UAAUR,IAAI;AAAA,QACzBS,aAAa;AAAA,MAAA,CACd;AAED,YAAMC,OAAO,MAAMR,IAAIQ,KAAAA;AAEvB,UAAI,CAACR,IAAIU,IAAI;AACX,cAAM7C,UAAU2C,KAAK/C,UAAU,gBAC3B,+CACA;AACJ2B,gBAAQwB,SAAS,QAAQ;AAAA,UAAEC,MAAM;AAAA,UAAUhD;AAAAA,QAAAA,CAAS;AACpD;AAAA,MACF;AAEA,UAAI,CAAC2C,KAAKG,SAAS;AACjBvB,gBAAQwB,SAAS,QAAQ;AAAA,UAAEC,MAAM;AAAA,UAAUhD,SAAS;AAAA,QAAA,CAAqC;AACzF;AAAA,MACF;AAEA,YAAMgB,SAAS,IAAI2C,gBAAgB;AAAA,QAAE7D,OAAOmC,KAAKnC;AAAAA,MAAAA,CAAO;AACxD,UAAIyD,aAAa;AACfvC,eAAO4C,IAAI,QAAQL,WAAW;AAAA,MAChC;AACApC,eAAS,qBAAqBH,OAAO6C,SAAAA,CAAU,EAAE;AACjDJ,uBAAiB,yDAAyD;AAAA,IAC5E,SAASN,KAAK;AACZ5B,cAAQwB,SAAS,QAAQ;AAAA,QAAEC,MAAM;AAAA,QAAUhD,SAAS;AAAA,MAAA,CAAoC;AAAA,IAC1F;AAAA,EACF;AAEA,SACE,oBAAC,cAAA,EAAa,GAAIuB,SAChB,+BAAC,QAAA,EAAK,QAAO,QAAO,YAAU,MAAC,WAAsB,UAAUA,QAAQ6B,aAAapB,QAAQ,GACzF5D,UAAAA;AAAAA,IAAAA;AAAAA,IACAmD,QAAQ7B,UAAUG,OAAOwD,MAAMrD,WAC9B,oBAAC,KAAA,EAAE,WAAU,6BAA4B,MAAK,SAC3CuB,UAAAA,QAAQ7B,UAAUG,OAAOwD,KAAKrD,SACjC;AAAA,IAEDwD,iBACC,oBAAC,KAAA,EAAE,WAAU,+BAA8B,MAAK,UAC7CA,UAAAA,cAAAA,CACH;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;ACxFO,MAAMM,qBAAqB/F,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAA8F;AAAAA,IAAAC,IAAA7F;AAAAA,EAAAA,IAAAJ;AAE7B,QAAAkG,YAAA9F,OAAAE,SAAA,UAAAF;AAKJ,QAAA;AAAA,IAAAsB;AAAAA,EAAAA,IAAmBE,eAAAA;AAAgB,MAAAf;AAAA,MAAAZ,SAAAyB,UAAA;AAMzBb,SAAAa,SAAS,YAAY;AAACzB,WAAAyB;AAAAzB,WAAAY;AAAAA,EAAA,OAAA;AAAAA,SAAAZ,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAa;AAAA,MAAAb,EAAA,CAAA,MAAAiG,aAAAjG,SAAAY,IAAA;AAF5BC,SAAA,oBAAC,WAAA,EACI,IAAA,cAAY,GACXD,IAAsB;AAC1BZ,WAAAiG;AAAAjG,WAAAY;AAAAZ,WAAAa;AAAAA,EAAA,OAAA;AAAAA,SAAAb,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAc;AAAA,MAAAd,SAAA+F,OAAA;AACFjF,6BAAA,SAAA,EACW,SAAA,cACC,WAAA,sCAETiF,UAAAA,OACH;AAAQ/F,WAAA+F;AAAA/F,WAAAc;AAAAA,EAAA,OAAA;AAAAA,SAAAd,EAAA,CAAA;AAAA,EAAA;AAAA,MAAAe;AAAA,MAAAf,EAAA,CAAA,MAAAa,MAAAb,SAAAc,IAAA;AAVVC,0CACEF,UAAAA;AAAAA,MAAAA;AAAAA,MAIAC;AAAAA,IAAAA,GAKQ;AACPd,WAAAa;AAAAb,WAAAc;AAAAd,WAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,EAAA,CAAA;AAAA,EAAA;AAAA,SAXHe;AAWG;AClBP,MAAM,eAAe,IAAI,YAAY,QAAQ,OAAO,CAAC,WAAW,OAAO,UAAU;AAC/E,SAAO,QAAQ,SAAS,KAAK,UAAU,KAAI,MAAO,MAAM,MAAM,QAAQ,SAAS,MAAM;AACvF,CAAC,EAAE,KAAK,GAAG,EAAE,KAAI;ACFjB,MAAM,cAAc,CAAC,WAAW,OAAO,QAAQ,sBAAsB,OAAO,EAAE,YAAW;ACAzF,MAAM,cAAc,CAAC,WAAW,OAAO;AAAA,EACrC;AAAA,EACA,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,YAAW,IAAK,GAAG,YAAW;AAC3D;ACDA,MAAM,eAAe,CAAC,WAAW;AAC/B,QAAM,YAAY,YAAY,MAAM;AACpC,SAAO,UAAU,OAAO,CAAC,EAAE,YAAW,IAAK,UAAU,MAAM,CAAC;AAC9D;ACLA,IAAI,oBAAoB;AAAA,EACtB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAClB;ACVA,MAAM,cAAc,CAAC,UAAU;AAC7B,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,WAAW,OAAO,KAAK,SAAS,UAAU,SAAS,SAAS;AACnE,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;ACHA,MAAM,gBAAgB,cAAc,EAAE;AAqBtC,MAAM,mBAAmB,MAAM,WAAW,aAAa;ACjBvD,MAAM,OAAO;AAAA,EACX,CAAC,EAAE,OAAO,MAAM,aAAa,qBAAqB,YAAY,IAAI,UAAU,UAAU,GAAG,KAAI,GAAI,QAAQ;AACvG,UAAM;AAAA,MACJ,MAAM,cAAc;AAAA,MACpB,aAAa,qBAAqB;AAAA,MAClC,qBAAqB,6BAA6B;AAAA,MAClD,OAAO,eAAe;AAAA,MACtB,WAAW,eAAe;AAAA,IAChC,IAAQ,iBAAgB,KAAM,CAAA;AAC1B,UAAM,wBAAwB,uBAAuB,6BAA6B,OAAO,eAAe,kBAAkB,IAAI,KAAK,OAAO,QAAQ,WAAW,IAAI,eAAe;AAChL,WAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE;AAAA,QACA,GAAG;AAAA,QACH,OAAO,QAAQ,eAAe,kBAAkB;AAAA,QAChD,QAAQ,QAAQ,eAAe,kBAAkB;AAAA,QACjD,QAAQ,SAAS;AAAA,QACjB,aAAa;AAAA,QACb,WAAW,aAAa,UAAU,cAAc,SAAS;AAAA,QACzD,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,KAAK,EAAE,eAAe,OAAM;AAAA,QAC7D,GAAG;AAAA,MACX;AAAA,MACM;AAAA,QACE,GAAG,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,cAAc,KAAK,KAAK,CAAC;AAAA,QAC3D,GAAG,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAAA,MACzD;AAAA,IACA;AAAA,EACE;AACF;AC/BA,MAAM,mBAAmB,CAAC,UAAU,aAAa;AAC/C,QAAM,YAAY;AAAA,IAChB,CAAC,EAAE,WAAW,GAAG,MAAK,GAAI,QAAQ,cAAc,MAAM;AAAA,MACpD;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,UAAU,YAAY,aAAa,QAAQ,CAAC,CAAC;AAAA,QAC7C,UAAU,QAAQ;AAAA,QAClB;AAAA,MACR;AAAA,MACM,GAAG;AAAA,IACT,CAAK;AAAA,EACL;AACE,YAAU,cAAc,aAAa,QAAQ;AAC7C,SAAO;AACT;ACnBA,MAAMmF,eAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,wCAAwC,KAAK,SAAQ,CAAE;AAAA,EACrE;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C;AACA,MAAM,SAAS,iBAAiB,WAAWA,YAAU;AClBrD,MAAM,aAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,SAAQ,CAAE;AAC1D;AACA,MAAM,MAAM,iBAAiB,OAAO,UAAU;ACNvC,MAAMC,gBAAgBpG,CAAAA,OAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAC,QAAA;AAAA,IAAAsB;AAAAA,IAAA6E,MAAAjG;AAAAA,IAAAe;AAAAA,IAAAM;AAAAA,IAAA6E,cAAAzF;AAAAA,EAAAA,IAAAb;AAE5B,QAAAqG,OAAAjG,OAAAE,SAAA,aAAAF;AAGA,QAAAkG,eAAAzF,OAAAP,SAAA,qBAAAO;AAEA,QAAA,CAAA0F,cAAAC,eAAA,IAAwCb,SAAS,KAAK;AACtD,QAAA;AAAA,IAAAjE;AAAAA,IAAAC;AAAAA,EAAAA,IAAgCC,eAAAA;AAEhC,QAAA6E,aAAmB9E,UAASG,OAAQuE,IAAqC;AACzE,QAAArE,eACE,OAAOyE,eAAe,WAAtBA,aAEI,OAAOA,YAAUxE,YAAc,WAC7BwE,WAAUxE,UADZ3B;AAIN,QAAAoG,iBAAuBvF,YAAA,GAAeA,SAAS,WAAxB;AAOT,QAAAL,KAAAyF,eAAA,SAAA;AAIO,QAAAxF,KAAAsF;AAAsC,MAAArF;AAAA,MAAAf,EAAA,CAAA,MAAAyB,YAAAzB,SAAAc,IAAA;AAA/CC,SAAAU,SAASX,EAAsC;AAACd,WAAAyB;AAAAzB,WAAAc;AAAAd,WAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,EAAA,CAAA;AAAA,EAAA;AAAA,MAAA0G;AAAA,MAAA1G,SAAAqG,gBAAArG,EAAA,CAAA,MAAAuB,MAAAvB,EAAA,CAAA,MAAAyG,kBAAAzG,EAAA,CAAA,MAAAwB,eAAAxB,SAAAa,MAAAb,EAAA,CAAA,MAAAe,IAAA;AANtD2F,SAAA,oBAAA,SAAA,EACMnF,IACE,MAAAV,IACQwF,cACHI,WAAAA,gBACEjF,aAAW,GACpBT,GAAAA,CAAgD;AACpDf,WAAAqG;AAAArG,WAAAuB;AAAAvB,WAAAyG;AAAAzG,WAAAwB;AAAAxB,WAAAa;AAAAb,WAAAe;AAAAf,WAAA0G;AAAAA,EAAA,OAAA;AAAAA,SAAA1G,EAAA,CAAA;AAAA,EAAA;AAAA,MAAA2G;AAAA,MAAA3G,EAAA,EAAA,MAAAoB,uBAAAC,IAAA,2BAAA,GAAA;AAISsF,SAAAA,MAAMJ,gBAAgBK,KAAe;AAAC5G,YAAA2G;AAAAA,EAAA,OAAA;AAAAA,SAAA3G,EAAA,EAAA;AAAA,EAAA;AACnC,QAAA6G,KAAAP,eAAA,oBAAA;AAAoD,MAAAQ;AAAA,MAAA9G,UAAAsG,cAAA;AAE/DQ,SAAAR,eACC,oBAAC,QAAA,EAAiB,WAAA,WAAU,eAAA,KAAA,CAAW,IAEvC,oBAAC,KAAA,EAAc,WAAA,WAAU,eAAA,MAAW;AACrCtG,YAAAsG;AAAAtG,YAAA8G;AAAAA,EAAA,OAAA;AAAAA,SAAA9G,EAAA,EAAA;AAAA,EAAA;AAAA,MAAA+G;AAAA,MAAA/G,EAAA,EAAA,MAAA6G,MAAA7G,UAAA8G,IAAA;AAVHC,UAAA,oBAAA,UAAA,EACO,MAAA,UACK,WAAA,mEACD,SAAAJ,IACG,cAAAE,IAEXC,UAAAA,GAAAA,CAKH;AAAS9G,YAAA6G;AAAA7G,YAAA8G;AAAA9G,YAAA+G;AAAAA,EAAA,OAAA;AAAAA,UAAA/G,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAgH;AAAA,MAAAhH,EAAA,EAAA,MAAA+G,OAAA/G,UAAA0G,IAAA;AApBXM,UAAA,qBAAA,OAAA,EAAe,WAAA,YACbN,UAAAA;AAAAA,MAAAA;AAAAA,MAQAK;AAAAA,IAAAA,GAYF;AAAM/G,YAAA+G;AAAA/G,YAAA0G;AAAA1G,YAAAgH;AAAAA,EAAA,OAAA;AAAAA,UAAAhH,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAiH;AAAA,MAAAjH,UAAA+B,cAAA;AACLkF,UAAAlF,eACC,oBAAA,KAAA,EAAa,WAAA,6DAAkD,IADhE;AAEO/B,YAAA+B;AAAA/B,YAAAiH;AAAAA,EAAA,OAAA;AAAAA,UAAAjH,EAAA,EAAA;AAAA,EAAA;AAAA,MAAAkH;AAAA,MAAAlH,EAAA,EAAA,MAAAgH,OAAAhH,UAAAiH,KAAA;AAzBVC,2CACEF,UAAAA;AAAAA,MAAAA;AAAAA,MAsBCC;AAAAA,IAAAA,GAEO;AACPjH,YAAAgH;AAAAhH,YAAAiH;AAAAjH,YAAAkH;AAAAA,EAAA,OAAA;AAAAA,UAAAlH,EAAA,EAAA;AAAA,EAAA;AAAA,SA1BHkH;AA0BG;AA/CsB,SAAAN,MAAAO,MAAA;AAAA,SAkCsB,CAACA;AAAI;AC3CjD,MAAMC,qBAAqBA,CAAArH,IAAAI,OAAA;AAAA,QAAAH,IAAAC,EAAA,EAAA;AAAC,QAAAoH,UAAAtH,OAAAM,SAAA,KAAAN;AAAc,QAAAuH,wBAAAnH,OAAAE,SAAA,OAAAF;AAC/C,QAAA,CAAAoH,WAAAC,YAAA,IAAkC9B,SAAS2B,OAAO;AAClD,QAAA,CAAAI,gBAAAC,iBAAA,IAA4ChC,SAAS4B,qBAAqB;AAAC,MAAA1G;AAAA,MAAAC;AAAA,MAAAb,EAAA,CAAA,MAAAyH,kBAAAzH,SAAAqH,SAAA;AAEjEzG,SAAAA,MAAA;AACR,UAAI,CAAC6G,gBAAc;AAAA;AAAA,MAAA;AAEnB,YAAAE,QAAcC,YAAY,MAAA;AACxBJ,qBAAaL,CAAAA,SAAA;AACX,cAAIA,QAAQ,GAAC;AACXO,8BAAkB,KAAK;AAAC,mBACjBL;AAAAA,UAAO;AACf,iBACMF,OAAO;AAAA,QAAC,CAChB;AAAA,MAAC,GACD,GAAI;AAAC,aAED,MAAMU,cAAcF,KAAK;AAAA,IAAC;AAChC9G,SAAA,CAAC4G,gBAAgBJ,OAAO;AAACrH,WAAAyH;AAAAzH,WAAAqH;AAAArH,WAAAY;AAAAZ,WAAAa;AAAAA,EAAA,OAAA;AAAAD,SAAAZ,EAAA,CAAA;AAAAa,SAAAb,EAAA,CAAA;AAAA,EAAA;AAd5B8H,YAAUlH,IAcPC,EAAyB;AAAC,MAAAC;AAAA,MAAAd,SAAAqH,SAAA;AAEbvG,SAAAiH,CAAAA,gBAAA;AACd,YAAA7F,QAAc,OAAO6F,gBAAgB,WAAvBA,cAAAV;AACdG,mBAAatF,KAAK;AAClBwF,wBAAkB,IAAI;AAAA,IAAC;AACxB1H,WAAAqH;AAAArH,WAAAc;AAAAA,EAAA,OAAA;AAAAA,SAAAd,EAAA,CAAA;AAAA,EAAA;AAJD,QAAAgI,UAAgBlH;AAMhB,QAAAmH,UAAgBC,KAAIC,MAAOZ,YAAY,EAAE;AACzC,QAAAa,OAAab,YAAY;AAAE,MAAAxG;AAAA,MAAAf,SAAAoI,MAAA;AACKrH,SAAAqH,KAAIvC,SAAAA,EAAWwC,SAAU,GAAG,GAAG;AAACrI,WAAAoI;AAAApI,WAAAe;AAAAA,EAAA,OAAA;AAAAA,SAAAf,EAAA,CAAA;AAAA,EAAA;AAAhE,QAAAsI,YAAkB,GAAGL,OAAO,IAAIlH,EAAgC;AAEhE,QAAAwH,YAAkB,CAACd;AAAc,MAAAf;AAAA,MAAA1G,EAAA,CAAA,MAAAuI,aAAAvI,EAAA,CAAA,MAAAsI,aAAAtI,EAAA,EAAA,MAAAyH,kBAAAzH,EAAA,EAAA,MAAAuH,aAAAvH,UAAAgI,SAAA;AAE1BtB,SAAA;AAAA,MAAAa;AAAAA,MAAAe;AAAAA,MAAAb;AAAAA,MAAAc;AAAAA,MAAAP;AAAAA,IAAAA;AAA0DhI,WAAAuI;AAAAvI,WAAAsI;AAAAtI,YAAAyH;AAAAzH,YAAAuH;AAAAvH,YAAAgI;AAAAhI,YAAA0G;AAAAA,EAAA,OAAA;AAAAA,SAAA1G,EAAA,EAAA;AAAA,EAAA;AAAA,SAA1D0G;AAA0D;AAI5D,MAAM8B,mBAAmBA,CAAC;AAAA,EAC/BnB,UAAU;AAAA,EACVoB;AAAAA,EACAvH;AAAAA,EACAwH;AAMF,MAAM;AACJ,QAAM,CAACC,WAAWC,YAAY,IAAIlD,SAAS,KAAK;AAChD,QAAM;AAAA,IAAC4C;AAAAA,IAAWb;AAAAA,IAAgBO;AAAAA,IAASO;AAAAA,EAAAA,IAAanB,mBAAmBC,OAAO;AAElF,QAAMwB,cAAc,YAAY;AAC9B,QAAI,CAACN,aAAaI,aAAaD,SAAU;AAEzC,QAAI;AACFE,mBAAa,IAAI;AACjB,UAAIH,UAAU;AACZ,cAAMA,SAAAA;AAAAA,MACR;AAAA,IACF,UAAA;AACET,cAAAA;AACAY,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,QAAME,aAAaJ,YAAYjB,kBAAkBkB;AACjD,QAAMI,gBAAgBD,eAAerB,kBAAkBkB;AAEvD,SACE,qBAAC,QAAA,EAAK,WAAU,kCACd,UAAA;AAAA,IAAA,oBAAC,UAAA,EACC,MAAK,UACL,SAASE,aACT,UAAUC,YACV,cAAW,eACX,WAAW3H,KACT,yGACAD,SACF,GAAE,UAAA,eAGJ;AAAA,IACC6H,qCACE,QAAA,EACC,eAAY,oBACZ,WAAU,yBACV,aAAU,UAAQ,UAAA;AAAA,MAAA;AAAA,MAEhBT;AAAAA,MAAU;AAAA,IAAA,EAAA,CACd,IACE;AAAA,EAAA,GACN;AAEJ;AC3FO,MAAMU,0CAA0C;AAMhD,MAAMC,sCAAsCC,MAAM;AAAA,EACvDC;AAAAA,EAEAC,YAAYD,mBAA4B;AACtC,UAAM,yCAAyC;AAC/C,SAAK/C,OAAO;AACZ,SAAK+C,oBAAoBA;AAAAA,EAC3B;AACF;AAEA,MAAME,yBAAyBA,CAACnH,UAAmB;AACjD,QAAMmF,UAAU,OAAOnF,UAAU,WAAWA,QAAQoH,OAAOpH,KAAK;AAChE,MAAI,CAACoH,OAAOC,SAASlC,OAAO,KAAKA,WAAW,EAAG,QAAOhH;AACtD,SAAO6H,KAAKsB,KAAKnC,OAAO;AAC1B;AAEO,MAAMoC,2BAA2B,OAAM3H,UAA2D;AACvG,QAAM4H,WAAW,MAAMtF,MAAM,uCAAuC;AAAA,IAClEC,QAAQ;AAAA,IACRC,SAAS;AAAA,MAAE,gBAAgB;AAAA,IAAA;AAAA,IAC3BC,MAAMC,KAAKC,UAAU;AAAA,MAAE3C;AAAAA,IAAAA,CAAO;AAAA,EAAA,CAC/B;AAED,QAAM6H,UAAU,MAAMD,SAAS/E,OAAOC,MAAM,MAAM,IAAI;AAItD,QAAMuE,oBAAoBE,uBAAuBM,SAASR,iBAAiB,KACtEE,uBAAuBK,SAASpF,QAAQW,IAAI,aAAa,CAAC;AAE/D,MAAI,CAACyE,SAAS7E,MAAM8E,SAAS7E,YAAY,MAAM;AAC7C,UAAM,IAAImE,8BAA8BE,iBAAiB;AAAA,EAC3D;AAEA,SAAO;AAAA,IACLA,mBAAmBA,qBAAqBH;AAAAA,EAAAA;AAE5C;AAEO,MAAMY,yBAAyBA,CAAC;AAAA,EACrC9H;AAAAA,EACA+H,kBAAkBb;AAIpB,MAAM;AACJ,QAAMc,YAAY1C,mBAAmByC,eAAe;AACpD,QAAM,CAACE,aAAaC,cAAc,IAAItE,SAAS,KAAK;AACpD,QAAMuE,iBAAiBC,OAAO,KAAK;AAEnC,QAAMC,SAAS,YAAW;AACxB,QAAI,CAACrI,SAAS,CAACgI,UAAUvB,aAAa0B,eAAeG,QAAS,QAAO;AAErEH,mBAAeG,UAAU;AACzBJ,mBAAe,IAAI;AAEnB,QAAI;AACF,YAAMK,SAAS,MAAMZ,yBAAyB3H,KAAK;AACnDgI,gBAAU9B,QAAQqC,OAAOlB,iBAAiB;AAC1C,aAAOkB;AAAAA,IACT,SAASzI,OAAO;AACd,UAAIA,iBAAiBqH,iCAAiCrH,MAAMuH,mBAAmB;AAC7EW,kBAAU9B,QAAQpG,MAAMuH,iBAAiB;AAAA,MAC3C;AACA,YAAMvH;AAAAA,IACR,UAAA;AACEqI,qBAAeG,UAAU;AACzBJ,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AAAA,IACLG;AAAAA,IACAJ;AAAAA,IACAO,kBAAkBR,UAAUvC;AAAAA,IAC5Be,WAAWwB,UAAUxB;AAAAA,IACrBb,gBAAgBqC,UAAUrC;AAAAA,IAC1Bc,WAAWgC,QAAQzI,KAAK,KAAKgI,UAAUvB,aAAa,CAACwB;AAAAA,EAAAA;AAEzD;","x_google_ignoreList":[7,8,9,10,11,12,13,14,15,16,17]}
@@ -0,0 +1,21 @@
1
+ export declare const DEFAULT_PASSWORD_RESET_COOLDOWN_SECONDS = 60;
2
+ export type PasswordResetCodeRequestResult = {
3
+ retryAfterSeconds: number;
4
+ };
5
+ export declare class PasswordResetCodeRequestError extends Error {
6
+ retryAfterSeconds?: number;
7
+ constructor(retryAfterSeconds?: number);
8
+ }
9
+ export declare const requestPasswordResetCode: (email: string) => Promise<PasswordResetCodeRequestResult>;
10
+ export declare const usePasswordResetResend: ({ email, cooldownSeconds, }: {
11
+ email?: string | null;
12
+ cooldownSeconds?: number;
13
+ }) => {
14
+ resend: () => Promise<PasswordResetCodeRequestResult | null>;
15
+ isResending: boolean;
16
+ remainingSeconds: number;
17
+ formatted: string;
18
+ isCountingDown: boolean;
19
+ canResend: boolean;
20
+ };
21
+ //# sourceMappingURL=passwordReset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passwordReset.d.ts","sourceRoot":"","sources":["../src/passwordReset.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,uCAAuC,KAAK,CAAA;AAEzD,MAAM,MAAM,8BAA8B,GAAG;IAC3C,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;gBAEd,iBAAiB,CAAC,EAAE,MAAM;CAKvC;AAQD,eAAO,MAAM,wBAAwB,GAAS,OAAO,MAAM,KAAG,OAAO,CAAC,8BAA8B,CAqBnG,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,6BAGpC;IACD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;;;;;;;CAkCA,CAAA"}
package/dist/routes.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const routes = Object.entries({
2
- .../* @__PURE__ */ Object.assign({ "./api/me/handler.ts": () => import("./handler-BOCOLt9O.js"), "./api/request-password-reset/handler.ts": () => import("./handler-DZiCZNkX.js"), "./api/resend-otp/handler.ts": () => import("./handler-DG8GMWwR.js"), "./api/set-active-account/handler.ts": () => import("./handler-BIFPHnwb.js"), "./api/set-new-password/handler.ts": () => import("./handler-EYTkh4N4.js"), "./api/sign-in/handler.ts": () => import("./handler-Y6JMPCW0.js"), "./api/sign-out/handler.ts": () => import("./handler-4-ccxPqk.js"), "./api/sign-up/handler.ts": () => import("./handler-BlhyOTyk.js"), "./api/verify-otp/handler.ts": () => import("./handler-BvztD8II.js"), "./api/verify-password-reset-otp/handler.ts": () => import("./handler-Dbkf3cD8.js") })
2
+ .../* @__PURE__ */ Object.assign({ "./api/me/handler.ts": () => import("./handler-C-hPxnHG.js"), "./api/request-password-reset/handler.ts": () => import("./handler-CYL3nA6F.js"), "./api/resend-otp/handler.ts": () => import("./handler-DBafWh0I.js"), "./api/set-active-account/handler.ts": () => import("./handler-B_lItxOC.js"), "./api/set-new-password/handler.ts": () => import("./handler-U3df_2Al.js"), "./api/sign-in/handler.ts": () => import("./handler-CoHpAhui.js"), "./api/sign-out/handler.ts": () => import("./handler-BuwKXMOu.js"), "./api/sign-up/handler.ts": () => import("./handler-Duy5AFEH.js"), "./api/verify-otp/handler.ts": () => import("./handler-DfZwgoA4.js"), "./api/verify-password-reset-otp/handler.ts": () => import("./handler-Eyjkxj9l.js") })
3
3
  }).reduce((acc, [path, mod]) => {
4
4
  acc[path.replace("./api/", "@rpcbase/auth/api/")] = mod;
5
5
  return acc;