diff --git a/.gitignore b/.gitignore index 3141815..f675395 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ node_modules .DS_Store .DS_Store .DS_Store +.env +.env.local \ No newline at end of file diff --git a/apps/client/.env b/apps/client/.env deleted file mode 100644 index 866e317..0000000 --- a/apps/client/.env +++ /dev/null @@ -1,31 +0,0 @@ -NEXT_PUBLIC_DEV_MODE=dev -NEXT_PUBLIC_BUILD_MODE=production -NEXT_PUBLIC_APP_VERSION=$npm_package_version -NEXT_PUBLIC_API_URL= - -NEXT_PUBLIC_ASSET_BASE_URL=https://prium.github.io/aurora - -NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN= - -NEXTAUTH_URL=http://localhost:3001 -NEXTAUTH_SECRET=secret - -AUTH0_CLIENT_ID= -AUTH0_CLIENT_SECRET= -AUTH0_DOMAIN= - -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= - -NEXT_PUBLIC_FIREBASE_API_KEY=your_api_key -NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com -NEXT_PUBLIC_FIREBASE_PROJECT_ID=your_project_id -NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.appspot.com -NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id -NEXT_PUBLIC_FIREBASE_APP_ID=your_app_id - -AZURE_AD_CLIENT_ID= -AZURE_AD_CLIENT_SECRET= -AZURE_AD_TENANT_ID= - -BASEPATH='' diff --git a/apps/client/.env.example b/apps/client/.env.example new file mode 100644 index 0000000..421ad33 --- /dev/null +++ b/apps/client/.env.example @@ -0,0 +1,13 @@ +NEXT_PUBLIC_DEV_MODE=dev +NEXT_PUBLIC_BUILD_MODE=production +NEXT_PUBLIC_APP_VERSION=$npm_package_version +NEXT_PUBLIC_API_URL= + +NEXT_PUBLIC_ASSET_BASE_URL=https://prium.github.io/aurora + +NEXT_PUBLIC_MAPBOX_ACCESS_TOKEN= + +NEXTAUTH_URL=http://localhost:3001 +NEXTAUTH_SECRET=secret + +BASEPATH='' diff --git a/apps/client/.gitignore b/apps/client/.gitignore index 348d3d8..d0921e0 100644 --- a/apps/client/.gitignore +++ b/apps/client/.gitignore @@ -36,5 +36,7 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts +.env +.env.local diff --git a/apps/client/package.json b/apps/client/package.json index 5016244..76def19 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -36,7 +36,6 @@ "axios": "^1.12.2", "clsx": "^2.1.1", "dayjs": "^1.11.18", - "firebase": "^12.4.0", "gsap": "^3.13.0", "i18next": "^25.6.0", "i18next-browser-languagedetector": "^8.2.0", diff --git a/apps/client/src/app/authentication/default/auth0/login/page.tsx b/apps/client/src/app/authentication/default/auth0/login/page.tsx deleted file mode 100644 index 7decf28..0000000 --- a/apps/client/src/app/authentication/default/auth0/login/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Login from 'components/sections/authentications/default/auth0/Login'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/firebase/forgot-password/page.tsx b/apps/client/src/app/authentication/default/firebase/forgot-password/page.tsx deleted file mode 100644 index f2dbf80..0000000 --- a/apps/client/src/app/authentication/default/firebase/forgot-password/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import ForgotPassword from 'components/sections/authentications/default/firebase/ForgotPassword'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/firebase/login/page.tsx b/apps/client/src/app/authentication/default/firebase/login/page.tsx deleted file mode 100644 index fb17f20..0000000 --- a/apps/client/src/app/authentication/default/firebase/login/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Login from 'components/sections/authentications/default/firebase/Login'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/firebase/sign-up/page.tsx b/apps/client/src/app/authentication/default/firebase/sign-up/page.tsx deleted file mode 100644 index f82c242..0000000 --- a/apps/client/src/app/authentication/default/firebase/sign-up/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Signup from 'components/sections/authentications/default/firebase/Signup'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/forgot-password/page.tsx b/apps/client/src/app/authentication/default/forgot-password/page.tsx new file mode 100644 index 0000000..6cf7355 --- /dev/null +++ b/apps/client/src/app/authentication/default/forgot-password/page.tsx @@ -0,0 +1,20 @@ +'use client'; + +import ForgotPasswordForm from 'components/sections/authentications/common/ForgotPasswordForm'; +import axiosInstance from 'services/axios/axiosInstance'; +import { apiEndpoints } from 'routes/paths'; + +const Page = () => { + const handleSendResetLink = async ({ email }: { email: string }) => { + try { + const res = await axiosInstance.post(apiEndpoints.forgotPassword, { email }); + return res.data; + } catch (error: any) { + throw new Error(error.response?.data?.message || 'Failed to send reset link'); + } + }; + + return ; +}; + +export default Page; diff --git a/apps/client/src/app/authentication/default/jwt/2fa/page.tsx b/apps/client/src/app/authentication/default/jwt/2fa/page.tsx deleted file mode 100644 index f24f00f..0000000 --- a/apps/client/src/app/authentication/default/jwt/2fa/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import TwoFAForm from 'components/sections/authentications/default/jwt/TwoFAForm'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/jwt/forgot-password/page.tsx b/apps/client/src/app/authentication/default/jwt/forgot-password/page.tsx deleted file mode 100644 index f2a8a26..0000000 --- a/apps/client/src/app/authentication/default/jwt/forgot-password/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import ForgotPassword from 'components/sections/authentications/default/jwt/ForgotPassword'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/jwt/login/page.tsx b/apps/client/src/app/authentication/default/jwt/login/page.tsx deleted file mode 100644 index 63eb0a4..0000000 --- a/apps/client/src/app/authentication/default/jwt/login/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import Login from 'components/sections/authentications/default/jwt/Login'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/jwt/set-password/page.tsx b/apps/client/src/app/authentication/default/jwt/set-password/page.tsx deleted file mode 100644 index 254787a..0000000 --- a/apps/client/src/app/authentication/default/jwt/set-password/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import SetPassword from 'components/sections/authentications/default/jwt/SetPassword'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/jwt/sign-up/page.tsx b/apps/client/src/app/authentication/default/jwt/sign-up/page.tsx deleted file mode 100644 index b4e858a..0000000 --- a/apps/client/src/app/authentication/default/jwt/sign-up/page.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import SignUp from 'components/sections/authentications/default/jwt/SignUp'; - -const Page = () => { - return ; -}; - -export default Page; diff --git a/apps/client/src/app/authentication/default/login/page.tsx b/apps/client/src/app/authentication/default/login/page.tsx new file mode 100644 index 0000000..0f71830 --- /dev/null +++ b/apps/client/src/app/authentication/default/login/page.tsx @@ -0,0 +1,29 @@ +'use client'; + +import { signIn } from 'next-auth/react'; +import LoginForm from 'components/sections/authentications/default/LoginForm'; +import paths from 'routes/paths'; +import { defaultJwtAuthCredentials } from 'config'; + +const Page = () => { + const handleLogin = async (data: { email: string; password: string }) => { + return await signIn('credentials', { + email: data.email, + password: data.password, + redirect: false, + }); + }; + + return ( + + ); +}; + +export default Page; diff --git a/apps/client/src/app/authentication/default/signup/page.tsx b/apps/client/src/app/authentication/default/signup/page.tsx new file mode 100644 index 0000000..2635c1f --- /dev/null +++ b/apps/client/src/app/authentication/default/signup/page.tsx @@ -0,0 +1,19 @@ +'use client'; + +import { signIn } from 'next-auth/react'; +import SignupForm from 'components/sections/authentications/default/SignupForm'; + +const Page = () => { + const handleSignup = async (data: { name: string; email: string; password: string }) => { + return await signIn('signup', { + name: data.name, + email: data.email, + password: data.password, + redirect: false, + }); + }; + + return ; +}; + +export default Page; diff --git a/apps/client/src/components/icons/Auth0Icon.tsx b/apps/client/src/components/icons/Auth0Icon.tsx deleted file mode 100644 index b8f7013..0000000 --- a/apps/client/src/components/icons/Auth0Icon.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { SvgIcon, SvgIconProps } from '@mui/material'; - -const Auth0Icon = (props: SvgIconProps) => { - return ( - - - - - - - - - - - ); -}; - -export default Auth0Icon; diff --git a/apps/client/src/components/icons/FirebaseIcon.tsx b/apps/client/src/components/icons/FirebaseIcon.tsx deleted file mode 100644 index e64eca1..0000000 --- a/apps/client/src/components/icons/FirebaseIcon.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import { SvgIconProps } from '@mui/material'; -import { SvgIcon } from '@mui/material'; - -const FirebaseIcon = (props: SvgIconProps) => { - return ( - - - - - - - ); -}; - -export default FirebaseIcon; diff --git a/apps/client/src/components/icons/JwtIcon.tsx b/apps/client/src/components/icons/JwtIcon.tsx deleted file mode 100644 index 750e370..0000000 --- a/apps/client/src/components/icons/JwtIcon.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { SvgIcon, SvgIconProps } from '@mui/material'; - -const JwtIcon = (props: SvgIconProps) => { - return ( - - - - - - - - ); -}; - -export default JwtIcon; diff --git a/apps/client/src/components/sections/authentications/common/ForgotPasswordForm.tsx b/apps/client/src/components/sections/authentications/common/ForgotPasswordForm.tsx index 5bfeb13..72239a3 100644 --- a/apps/client/src/components/sections/authentications/common/ForgotPasswordForm.tsx +++ b/apps/client/src/components/sections/authentications/common/ForgotPasswordForm.tsx @@ -9,10 +9,8 @@ import { useState } from "react"; import { useForm } from "react-hook-form"; import * as yup from "yup"; import CheckMailBoxDialog from "../CheckMailBoxDialog"; -import ViewOnlyAlert from "../common/ViewOnlyAlert"; interface ForgotPasswordFormProps { - provider?: "jwt" | "firebase"; handleSendResetLink: ({ email }: { email: string }) => Promise; } @@ -30,7 +28,6 @@ const schema = yup .required(); const ForgotPasswordForm = ({ - provider = "jwt", handleSendResetLink, }: ForgotPasswordFormProps) => { const [linkSent, setLinkSent] = useState(false); @@ -86,15 +83,6 @@ const ForgotPasswordForm = ({ p: { xs: 3, sm: 5 }, mb: 5, }}> - {provider === "firebase" && - process.env.NEXT_PUBLIC_BUILD_MODE === "production" && ( - - {" "} - - - )} Promise; - handleSignUp: () => Promise; -} - -const Auth0Login = ({ handleLogin, handleSignUp }: Auth0LoginProps) => { - const [loginLoading, setLoginLoading] = useState(false); - const [signupLoading, setSignupLoading] = useState(false); - - const handleLoginRedirect = async () => { - setLoginLoading(true); - await handleLogin(); - - setLoginLoading(false); - }; - - const handleSignupRedirect = async () => { - setSignupLoading(true); - await handleSignUp(); - setSignupLoading(false); - }; - - return ( - -
- - - - {process.env.NEXT_PUBLIC_BUILD_MODE === "production" && ( - - )} - - - Log in - - - Click redirect button to continue logging in with Auth0 - - - - - - - - - - - - - - - - Trouble signing in? - - - ); -}; - -export default Auth0Login; diff --git a/apps/client/src/components/sections/authentications/default/LoginForm.tsx b/apps/client/src/components/sections/authentications/default/LoginForm.tsx index f7ae6bd..168fa02 100644 --- a/apps/client/src/components/sections/authentications/default/LoginForm.tsx +++ b/apps/client/src/components/sections/authentications/default/LoginForm.tsx @@ -20,12 +20,10 @@ import Grid from '@mui/material/Grid'; import { rootPaths } from 'routes/paths'; import * as yup from 'yup'; import PasswordTextField from 'components/common/PasswordTextField'; -import ViewOnlyAlert from 'components/sections/authentications/common/ViewOnlyAlert'; import DefaultCredentialAlert from '../common/DefaultCredentialAlert'; import SocialAuth from './SocialAuth'; interface LoginFormProps { - provider?: 'jwt' | 'firebase'; handleLogin: (data: LoginFormValues) => Promise; signUpLink: string; socialAuth?: boolean; @@ -49,7 +47,6 @@ const schema = yup .required(); const LoginForm = ({ - provider = 'jwt', handleLogin, signUpLink, forgotPasswordLink, @@ -104,12 +101,6 @@ const LoginForm = ({ mb: 5, }} > - {provider === 'firebase' && process.env.NEXT_PUBLIC_BUILD_MODE === 'production' && ( - - - - )} - { try { const res = await handleSetPassword(data); enqueueSnackbar(res.message, { variant: 'success' }); - router.push(paths.defaultJwtLogin); + router.push(paths.login); } catch (error: any) { setError('root', { type: 'manual', message: error.message }); } diff --git a/apps/client/src/components/sections/authentications/default/SignupForm.tsx b/apps/client/src/components/sections/authentications/default/SignupForm.tsx index 827fd78..ae39919 100644 --- a/apps/client/src/components/sections/authentications/default/SignupForm.tsx +++ b/apps/client/src/components/sections/authentications/default/SignupForm.tsx @@ -14,7 +14,6 @@ import { import Grid from "@mui/material/Grid"; import IconifyIcon from "components/base/IconifyIcon"; import PasswordTextField from "components/common/PasswordTextField"; -import ViewOnlyAlert from "components/sections/authentications/common/ViewOnlyAlert"; import { SignInResponse } from "next-auth/react"; import { useForm } from "react-hook-form"; import paths from "routes/paths"; @@ -24,7 +23,6 @@ import SocialAuth from "./SocialAuth"; interface SignupFormProps { handleSignup: (data: SignupFormValues) => Promise; socialAuth?: boolean; - provider?: "jwt" | "firebase"; } export interface SignupFormValues { @@ -47,7 +45,6 @@ const schema = yup const SignupForm = ({ handleSignup, socialAuth = true, - provider = "jwt", }: SignupFormProps) => { const { register, @@ -89,14 +86,6 @@ const SignupForm = ({ p: { xs: 3, sm: 5 }, mb: 5, }}> - {provider === "firebase" && - process.env.NEXT_PUBLIC_BUILD_MODE === "production" && ( - - - - )} Already have an account? Log in diff --git a/apps/client/src/components/sections/authentications/default/auth0/Login.tsx b/apps/client/src/components/sections/authentications/default/auth0/Login.tsx deleted file mode 100644 index e88fac7..0000000 --- a/apps/client/src/components/sections/authentications/default/auth0/Login.tsx +++ /dev/null @@ -1,39 +0,0 @@ -'use client'; - -import { signIn } from 'next-auth/react'; -import { useSearchParams } from 'next/navigation'; -import { rootPaths } from 'routes/paths'; -import Auth0Login from 'components/sections/authentications/default/Auth0Login'; - -const Login = () => { - const searchParams = useSearchParams(); - const callbackUrl = searchParams.get('callbackUrl'); - - const handleLogin = async () => { - try { - const res = await signIn('auth0', { callbackUrl: callbackUrl || rootPaths.root }); - console.log({ res }); - } catch (error) { - console.error(error); - } - }; - - const handleSignUp = async () => { - try { - const res = await signIn( - 'auth0', - { callbackUrl: callbackUrl || rootPaths.root }, - { - screen_hint: 'signup', - }, - ); - console.log({ res }); - } catch (error) { - console.error(error); - } - }; - - return ; -}; - -export default Login; diff --git a/apps/client/src/components/sections/authentications/default/firebase/ForgotPassword.tsx b/apps/client/src/components/sections/authentications/default/firebase/ForgotPassword.tsx deleted file mode 100644 index 1f69ddf..0000000 --- a/apps/client/src/components/sections/authentications/default/firebase/ForgotPassword.tsx +++ /dev/null @@ -1,17 +0,0 @@ -'use client'; - -import React from 'react'; -import { sendPasswordResetEmail } from 'firebase/auth'; -import { firebaseAuth } from 'services/firebase/firebase'; -import ForgotPasswordForm from 'components/sections/authentications/common/ForgotPasswordForm'; - -const page = () => { - const handleSendResetLink = async ({ email }: { email: string }) => { - return await sendPasswordResetEmail(firebaseAuth, email).catch((error) => { - throw new Error(error.message); - }); - }; - return ; -}; - -export default page; diff --git a/apps/client/src/components/sections/authentications/default/firebase/Login.tsx b/apps/client/src/components/sections/authentications/default/firebase/Login.tsx deleted file mode 100644 index 9887dc4..0000000 --- a/apps/client/src/components/sections/authentications/default/firebase/Login.tsx +++ /dev/null @@ -1,30 +0,0 @@ -'use client'; - -import { signIn } from 'next-auth/react'; -import { defaultJwtAuthCredentials } from 'config'; -import paths from 'routes/paths'; -import LoginForm, { LoginFormValues } from 'components/sections/authentications/default/LoginForm'; - -const Login = () => { - const handleLogin = async (data: LoginFormValues) => { - return await signIn('firebase-login', { - email: data.email, - password: data.password, - redirect: false, - }); - }; - - return ( - <> - - - ); -}; - -export default Login; diff --git a/apps/client/src/components/sections/authentications/default/firebase/Signup.tsx b/apps/client/src/components/sections/authentications/default/firebase/Signup.tsx deleted file mode 100644 index 6ace89a..0000000 --- a/apps/client/src/components/sections/authentications/default/firebase/Signup.tsx +++ /dev/null @@ -1,29 +0,0 @@ -'use client'; - -import { signIn } from 'next-auth/react'; -import { useRouter } from 'next/navigation'; -import SignupForm, { - SignupFormValues, -} from 'components/sections/authentications/default/SignupForm'; - -const SignUp = () => { - const router = useRouter(); - - const handleSignup = async (data: SignupFormValues) => { - const res = await signIn('firebase-signup', { - email: data.email, - password: data.password, - name: data.name, - redirect: false, - callbackUrl: '/', - }); - if (res?.ok && res?.url) { - router.push(res.url); - } - return res; - }; - - return ; -}; - -export default SignUp; diff --git a/apps/client/src/components/sections/authentications/default/jwt/ForgotPassword.tsx b/apps/client/src/components/sections/authentications/default/jwt/ForgotPassword.tsx deleted file mode 100644 index e0885c2..0000000 --- a/apps/client/src/components/sections/authentications/default/jwt/ForgotPassword.tsx +++ /dev/null @@ -1,18 +0,0 @@ -'use client'; - -import { useSendPasswordResetLink } from 'services/api-hooks/useAuthApi'; -import ForgotPasswordForm from 'components/sections/authentications/common/ForgotPasswordForm'; - -const ForgotPassword = () => { - const { trigger } = useSendPasswordResetLink(); - - const handleSendResetLink = async (data: { email: string }) => { - return await trigger(data).catch((error) => { - throw new Error(error.data.message); - }); - }; - - return ; -}; - -export default ForgotPassword; diff --git a/apps/client/src/components/sections/authentications/default/jwt/Login.tsx b/apps/client/src/components/sections/authentications/default/jwt/Login.tsx deleted file mode 100644 index a7620d4..0000000 --- a/apps/client/src/components/sections/authentications/default/jwt/Login.tsx +++ /dev/null @@ -1,27 +0,0 @@ -'use client'; - -import { signIn as nextAuthSignIn } from 'next-auth/react'; -import { defaultJwtAuthCredentials } from 'config'; -import paths from 'routes/paths'; -import LoginForm, { LoginFormValues } from 'components/sections/authentications/default/LoginForm'; - -const Login = () => { - const handleLogin = async (data: LoginFormValues) => { - return await nextAuthSignIn('credentials', { - email: data.email, - password: data.password, - redirect: false, - }); - }; - - return ( - - ); -}; - -export default Login; diff --git a/apps/client/src/components/sections/authentications/default/jwt/SetPassword.tsx b/apps/client/src/components/sections/authentications/default/jwt/SetPassword.tsx deleted file mode 100644 index 775303f..0000000 --- a/apps/client/src/components/sections/authentications/default/jwt/SetPassword.tsx +++ /dev/null @@ -1,20 +0,0 @@ -'use client'; - -import { useResetPassword } from 'services/api-hooks/useAuthApi'; -import SetPasswordForm, { - SetPasswordFormValues, -} from 'components/sections/authentications/default/SetPassworForm'; - -const SetPassword = () => { - const { trigger: resetPassword } = useResetPassword(); - - const handleSetPassword = async (data: SetPasswordFormValues) => { - return await resetPassword(data).catch((error) => { - throw new Error(error.data.message); - }); - }; - - return ; -}; - -export default SetPassword; diff --git a/apps/client/src/components/sections/authentications/default/jwt/SignUp.tsx b/apps/client/src/components/sections/authentications/default/jwt/SignUp.tsx deleted file mode 100644 index 198e86c..0000000 --- a/apps/client/src/components/sections/authentications/default/jwt/SignUp.tsx +++ /dev/null @@ -1,29 +0,0 @@ -'use client'; - -import { signIn } from 'next-auth/react'; -import { useRouter } from 'next/navigation'; -import SignupForm, { - SignupFormValues, -} from 'components/sections/authentications/default/SignupForm'; - -const SignUp = () => { - const router = useRouter(); - - const handleSignup = async (data: SignupFormValues) => { - const res = await signIn('jwt-signup', { - email: data.email, - password: data.password, - name: data.name, - redirect: false, - }); - - if (res?.ok) { - router.push('/'); - } - return res; - }; - - return ; -}; - -export default SignUp; diff --git a/apps/client/src/components/sections/authentications/default/jwt/TwoFAForm.tsx b/apps/client/src/components/sections/authentications/default/jwt/TwoFAForm.tsx deleted file mode 100644 index 2084010..0000000 --- a/apps/client/src/components/sections/authentications/default/jwt/TwoFAForm.tsx +++ /dev/null @@ -1,231 +0,0 @@ -'use client'; - -import { ChangeEvent, Fragment, KeyboardEvent, useEffect, useRef, useState } from 'react'; -import { Box, Typography, Stack, Button, FormControlLabel, Checkbox, Link } from '@mui/material'; -import Grid from '@mui/material/Grid'; -import dayjs from 'dayjs'; -import useCountdown from 'hooks/useCountdown'; -import StyledTextField from 'components/styled/StyledTextField'; - -const totalInputLength = 6; - -const TwoFAForm = () => { - const [otp, setOtp] = useState(''); - const inputRefs = useRef<(HTMLInputElement | null)[]>([]); - const [otpSent, setOtpSent] = useState(false); - const { time, startTimer } = useCountdown(); - - const handleChange = (e: ChangeEvent, index: number): void => { - const { value } = e.target; - if (value) { - [...value].slice(0, totalInputLength).forEach((char, charIndex) => { - if (inputRefs.current && inputRefs.current[index + charIndex]) { - inputRefs.current[index + charIndex]!.value = char; - inputRefs.current[index + charIndex + 1]?.focus(); - } - }); - const updatedOtp = inputRefs.current.reduce((acc, input) => acc + (input?.value || ''), ''); - setOtp(updatedOtp); - } - }; - - const handleKeydown = (event: KeyboardEvent, index: number) => { - if (event.key === 'Backspace') { - inputRefs.current[index]!.value = ''; - inputRefs.current[index - 1]?.focus(); - inputRefs.current[index - 1]?.select(); - - const updatedOtp = inputRefs.current.reduce((acc, input) => acc + (input?.value || ''), ''); - setOtp(updatedOtp); - } - if (event.key === 'ArrowLeft') { - inputRefs.current[index - 1]?.focus(); - inputRefs.current[index - 1]?.select(); - } - if (event.key === 'ArrowRight') { - inputRefs.current[index + 1]?.focus(); - inputRefs.current[index + 1]?.select(); - } - }; - - const sentOtp = () => { - setOtpSent(true); - startTimer(30, () => { - setOtpSent(false); - }); - }; - - useEffect(() => { - sentOtp(); - }, []); - - return ( - - - - - - Enter the OTP - - - A 6-digit one time password (OTP) has been sent to your number{' '} - - +12 ** *** ***89 - - - - Didn't receive the code?{' '} - sentOtp()} - sx={{ - fontWeight: 'medium', - ml: 0.5, - }} - > - Send again {otpSent && <>in {dayjs(time * 1000).format('m:ss')} s} - - - - - - - - - {Array(totalInputLength) - .fill('') - .map((_, index) => ( - - - { - inputRefs.current[index] = el; - }} - type="number" - disabledSpinButton - sx={{ width: '42px', textAlign: 'center' }} - slotProps={{ - input: { - sx: { - '& .MuiInputBase-input': { - textAlign: 'center', - px: '12px !important', - }, - }, - }, - }} - onClick={() => inputRefs.current[index]?.select()} - onFocus={() => inputRefs.current[index]?.select()} - onKeyUp={(e) => handleKeydown(e, index)} - onChange={(e: ChangeEvent) => handleChange(e, index)} - size="large" - /> - - {index === totalInputLength / 2 - 1 && ( - - - )} - - ))} - - - - } - label={ - - Remember this device - - } - /> - - - - - - - Try alternate methods - - - - - - - - Trouble signing in? - - - ); -}; - -export default TwoFAForm; diff --git a/apps/client/src/layouts/auth-layout/DefaultAuthLayout.tsx b/apps/client/src/layouts/auth-layout/DefaultAuthLayout.tsx index 7318366..d65488f 100644 --- a/apps/client/src/layouts/auth-layout/DefaultAuthLayout.tsx +++ b/apps/client/src/layouts/auth-layout/DefaultAuthLayout.tsx @@ -1,31 +1,18 @@ 'use client'; import Lottie from 'lottie-react'; -import { PropsWithChildren, Suspense, useMemo } from 'react'; -import { useSelectedLayoutSegment } from 'next/navigation'; -import { Link, Stack, Tab, Tabs, tabsClasses } from '@mui/material'; +import { PropsWithChildren, Suspense } from 'react'; +import { Stack } from '@mui/material'; import Grid from '@mui/material/Grid'; import authDark from 'assets/json/auth-dark.json'; import auth from 'assets/json/auth.json'; import { useThemeMode } from 'hooks/useThemeMode'; -import { cssVarRgba } from 'lib/utils'; -import paths from 'routes/paths'; import Logo from 'components/common/Logo'; -import Auth0Icon from 'components/icons/Auth0Icon'; -import FirebaseIcon from 'components/icons/FirebaseIcon'; -import JwtIcon from 'components/icons/JwtIcon'; import DefaultLoader from 'components/loading/DefaultLoader'; const DefaultAuthLayout = ({ children }: PropsWithChildren) => { - const segment = useSelectedLayoutSegment(); - const { isDark } = useThemeMode(); - const activeTab = useMemo(() => { - if (segment === 'auth0' || segment === 'firebase' || segment === 'jwt') return segment; - return 'jwt'; - }, [segment]); - return ( { justifyContent: 'center', }} > - cssVarRgba(theme.vars.palette.primary.mainChannel, 0.1), - borderRadius: 12, - }, - }} - > - } - iconPosition="start" - disableRipple - sx={{ px: 1.75 }} - /> - } - iconPosition="start" - disableRipple - sx={{ px: 1.75 }} - /> - } - iconPosition="start" - disableRipple - sx={{ px: 1.75 }} - /> - + {/* Authentication UI */} diff --git a/apps/client/src/lib/next-auth/nextAuthOptions.ts b/apps/client/src/lib/next-auth/nextAuthOptions.ts index 4615a51..913cb32 100644 --- a/apps/client/src/lib/next-auth/nextAuthOptions.ts +++ b/apps/client/src/lib/next-auth/nextAuthOptions.ts @@ -1,15 +1,8 @@ import { NextAuthOptions, User } from 'next-auth'; -import Auth0Provider from 'next-auth/providers/auth0'; -import AzureADProvider from 'next-auth/providers/azure-ad'; import CredentialsProvider from 'next-auth/providers/credentials'; -import GoogleProvider from 'next-auth/providers/google'; import { users } from 'data/users'; import paths, { apiEndpoints } from 'routes/paths'; import axiosInstance from 'services/axios/axiosInstance'; -import { - firebaseLoginProviderConfig, - firebaseSignupProviderConfig, -} from 'services/firebase/firebase-provider'; export interface SessionUser extends User { email: string; @@ -30,6 +23,7 @@ export const demoUser: SessionUser = { export const authOptions: NextAuthOptions = { providers: [ CredentialsProvider({ + id: 'credentials', name: 'Credentials', credentials: { email: { label: 'Email', type: 'text' }, @@ -44,15 +38,15 @@ export const authOptions: NextAuthOptions = { }); return res; } catch (error: any) { - throw new Error(error.data?.message); + throw new Error(error.data?.message || 'Login failed'); } } return null; }, }), CredentialsProvider({ - id: 'jwt-signup', - name: 'Jwt Signup', + id: 'signup', + name: 'Signup', credentials: { name: { label: 'Name', type: 'text' }, email: { label: 'Email', type: 'text' }, @@ -66,35 +60,14 @@ export const authOptions: NextAuthOptions = { email: credentials.email, password: credentials.password, }); - return res; } catch (error: any) { - throw new Error(error.data?.message); + throw new Error(error.data?.message || 'Registration failed'); } } return null; }, }), - - CredentialsProvider(firebaseLoginProviderConfig), - CredentialsProvider(firebaseSignupProviderConfig), - - Auth0Provider({ - clientId: process.env.AUTH0_CLIENT_ID as string, - clientSecret: process.env.AUTH0_CLIENT_SECRET as string, - issuer: ('https://' + process.env.AUTH0_DOMAIN) as string, - }), - - GoogleProvider({ - clientId: process.env.GOOGLE_CLIENT_ID as string, - clientSecret: process.env.GOOGLE_CLIENT_SECRET as string, - }), - - AzureADProvider({ - clientId: process.env.AZURE_AD_CLIENT_ID as string, - clientSecret: process.env.AZURE_AD_CLIENT_SECRET as string, - tenantId: process.env.AZURE_AD_TENANT_ID as string, - }), ], session: { maxAge: 24 * 60 * 60, @@ -126,7 +99,7 @@ export const authOptions: NextAuthOptions = { }, pages: { - signIn: paths.defaultJwtLogin, + signIn: paths.login, signOut: paths.defaultLoggedOut, }, }; diff --git a/apps/client/src/middleware.ts b/apps/client/src/middleware.ts index baf89a0..2237528 100644 --- a/apps/client/src/middleware.ts +++ b/apps/client/src/middleware.ts @@ -3,7 +3,7 @@ import paths from 'routes/paths'; export default withAuth({ pages: { - signIn: paths.defaultJwtLogin, + signIn: paths.login, signOut: paths.defaultLoggedOut, }, }); diff --git a/apps/client/src/routes/paths.ts b/apps/client/src/routes/paths.ts index 7556fac..d9e14f1 100644 --- a/apps/client/src/routes/paths.ts +++ b/apps/client/src/routes/paths.ts @@ -2,26 +2,17 @@ export const rootPaths = { root: '/', pagesRoot: 'pages', authRoot: 'authentication', - authDefaultJwtRoot: 'default/jwt', - authDefaultFirebaseRoot: 'default/firebase', - authDefaultAuth0Root: 'default/auth0', + authDefaultRoot: 'default', errorRoot: 'error', }; const paths = { starter: `/${rootPaths.pagesRoot}/starter`, - defaultJwtLogin: `/${rootPaths.authRoot}/${rootPaths.authDefaultJwtRoot}/login`, - defaultJwtSignup: `/${rootPaths.authRoot}/${rootPaths.authDefaultJwtRoot}/sign-up`, - defaultJwtForgotPassword: `/${rootPaths.authRoot}/${rootPaths.authDefaultJwtRoot}/forgot-password`, - defaultJwt2FA: `/${rootPaths.authRoot}/${rootPaths.authDefaultJwtRoot}/2fa`, - defaultJwtSetPassword: `/${rootPaths.authRoot}/${rootPaths.authDefaultJwtRoot}/set-password`, - - defaultAuth0Login: `/${rootPaths.authRoot}/${rootPaths.authDefaultAuth0Root}/login`, - - defaultFirebaseLogin: `/${rootPaths.authRoot}/${rootPaths.authDefaultFirebaseRoot}/login`, - defaultFirebaseSignup: `/${rootPaths.authRoot}/${rootPaths.authDefaultFirebaseRoot}/sign-up`, - defaultFirebaseForgotPassword: `/${rootPaths.authRoot}/${rootPaths.authDefaultFirebaseRoot}/forgot-password`, + login: `/${rootPaths.authRoot}/${rootPaths.authDefaultRoot}/login`, + signup: `/${rootPaths.authRoot}/${rootPaths.authDefaultRoot}/signup`, + forgotPassword: `/${rootPaths.authRoot}/${rootPaths.authDefaultRoot}/forgot-password`, + notifications: `/${rootPaths.pagesRoot}/notifications`, defaultLoggedOut: `/${rootPaths.authRoot}/default/logged-out`, @@ -30,18 +21,9 @@ const paths = { }; export const authPaths = { - /* ---------------------------------JWT----------------------------------------- */ - login: paths.defaultJwtLogin, - signup: paths.defaultJwtSignup, - forgotPassword: paths.defaultJwtForgotPassword, - setNewPassword: paths.defaultJwtSetPassword, - twoFactorAuth: paths.defaultJwt2FA, - /* ---------------------------------Firebase----------------------------------------- */ - // login: paths.defaultFirebaseLogin, - // signup: paths.defaultFirebaseSignup, - // forgotPassword: paths.defaultFirebaseForgotPassword, - /* ---------------------------------Auth0----------------------------------------- */ - // login: paths.defaultAuth0Login, + login: paths.login, + signup: paths.signup, + forgotPassword: paths.forgotPassword, }; export const apiEndpoints = { diff --git a/apps/client/src/routes/sitemap.ts b/apps/client/src/routes/sitemap.ts index 092a0f2..11b707d 100644 --- a/apps/client/src/routes/sitemap.ts +++ b/apps/client/src/routes/sitemap.ts @@ -59,42 +59,26 @@ const sitemap: MenuItem[] = [ name: 'Login', key: 'login', icon: 'material-symbols:login', - path: paths.defaultJwtLogin, + path: paths.login, pathName: 'login', active: true, }, { name: 'Sign up', - key: 'sign_up', + key: 'signup', icon: 'material-symbols:person-add-outline', - path: paths.defaultJwtSignup, - pathName: 'sign-up', + path: paths.signup, + pathName: 'signup', active: true, }, { name: 'Forgot password', key: 'forgot_password', icon: 'material-symbols:key-outline', - path: paths.defaultJwtForgotPassword, + path: paths.forgotPassword, pathName: 'forgot-password', active: true, }, - { - name: '2FA', - key: '2FA', - icon: 'material-symbols:enhanced-encryption-outline', - path: paths.defaultJwt2FA, - pathName: '2FA', - active: true, - }, - { - name: 'Set password', - key: 'set_password', - icon: 'material-symbols:settings-outline', - path: paths.defaultJwtSetPassword, - pathName: 'default-set-password', - active: true, - }, ], }, { diff --git a/apps/client/src/services/firebase/firebase-provider.ts b/apps/client/src/services/firebase/firebase-provider.ts deleted file mode 100644 index 4aaa93c..0000000 --- a/apps/client/src/services/firebase/firebase-provider.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { FirebaseError } from 'firebase/app'; -import { - createUserWithEmailAndPassword, - signInWithEmailAndPassword, - updateProfile, -} from 'firebase/auth'; -import { firebaseAuth } from 'services/firebase/firebase'; - -export const firebaseLoginProviderConfig = { - id: 'firebase-login', - name: 'Firebase Login', - credentials: { - email: { label: 'Email', type: 'text' }, - password: { label: 'Password', type: 'password' }, - }, - - async authorize(credentials: Record<'email' | 'password', string> | undefined): Promise { - if (credentials) { - try { - const userCredential = await signInWithEmailAndPassword( - firebaseAuth, - credentials.email, - credentials.password, - ); - - const user = userCredential.user; - - return { - name: user.displayName, - email: user.email, - image: user.photoURL, - }; - } catch (error) { - console.log({ error }); - - throw new Error((error as FirebaseError).message); - } - } - return null; - }, -}; - -export const firebaseSignupProviderConfig = { - id: 'firebase-signup', - name: 'Firebase Signup', - credentials: { - name: { label: 'Name', type: 'text' }, - email: { label: 'Email', type: 'text' }, - password: { label: 'Password', type: 'password' }, - }, - - async authorize( - credentials: Record<'email' | 'password' | 'name', string> | undefined, - ): Promise { - if (credentials) { - try { - const userCredential = await createUserWithEmailAndPassword( - firebaseAuth, - credentials.email, - credentials.password, - ); - - const user = userCredential.user; - - if (user) { - await updateProfile(user, { - displayName: credentials.name, - }); - } - - return { - name: user.displayName, - email: user.email, - image: user.photoURL, - }; - } catch (error) { - console.log({ error }); - throw new Error((error as FirebaseError).message); - } - } - return null; - }, -}; diff --git a/apps/client/src/services/firebase/firebase.ts b/apps/client/src/services/firebase/firebase.ts deleted file mode 100644 index 4eabe3a..0000000 --- a/apps/client/src/services/firebase/firebase.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { initializeApp } from 'firebase/app'; -import { getAuth } from 'firebase/auth'; - -const firebaseConfig = { - apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY, - authDomain: process.env.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN, - projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID, - storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET, - messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID, - appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID, -}; - -export const firebaseApp = initializeApp(firebaseConfig); -export const firebaseAuth = getAuth(firebaseApp); -export const currentUser = firebaseAuth.currentUser; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5ed7dbc..3fd5168 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -105,9 +105,6 @@ importers: dayjs: specifier: ^1.11.18 version: 1.11.19 - firebase: - specifier: ^12.4.0 - version: 12.5.0 gsap: specifier: ^3.13.0 version: 3.13.0 @@ -831,216 +828,6 @@ packages: resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@firebase/ai@2.5.0': - resolution: {integrity: sha512-OXv/jZLRjV9jTejWA4KOvW8gM1hNsLvQSCPwKhi2CEfe0Nap3rM6z+Ial0PGqXga0WgzhpypEvJOFvaAUFX3kg==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app': 0.x - '@firebase/app-types': 0.x - - '@firebase/analytics-compat@0.2.25': - resolution: {integrity: sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/analytics-types@0.8.3': - resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==} - - '@firebase/analytics@0.10.19': - resolution: {integrity: sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/app-check-compat@0.4.0': - resolution: {integrity: sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/app-check-interop-types@0.3.3': - resolution: {integrity: sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==} - - '@firebase/app-check-types@0.5.3': - resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==} - - '@firebase/app-check@0.11.0': - resolution: {integrity: sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/app-compat@0.5.5': - resolution: {integrity: sha512-lVG/nRnXaot0rQSZazmTNqy83ti9O3+kdwoaE0d5wahRIWNoDirbIMcGVjDDgdmf4IE6FYreWOMh0L3DV1475w==} - engines: {node: '>=20.0.0'} - - '@firebase/app-types@0.9.3': - resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} - - '@firebase/app@0.14.5': - resolution: {integrity: sha512-zyNY77xJOGwcuB+xCxF8z8lSiHvD4ox7BCsqLEHEvgqQoRjxFZ0fkROR6NV5QyXmCqRLodMM8J5d2EStOocWIw==} - engines: {node: '>=20.0.0'} - - '@firebase/auth-compat@0.6.1': - resolution: {integrity: sha512-I0o2ZiZMnMTOQfqT22ur+zcGDVSAfdNZBHo26/Tfi8EllfR1BO7aTVo2rt/ts8o/FWsK8pOALLeVBGhZt8w/vg==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/auth-interop-types@0.2.4': - resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==} - - '@firebase/auth-types@0.13.0': - resolution: {integrity: sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - - '@firebase/auth@1.11.1': - resolution: {integrity: sha512-Mea0G/BwC1D0voSG+60Ylu3KZchXAFilXQ/hJXWCw3gebAu+RDINZA0dJMNeym7HFxBaBaByX8jSa7ys5+F2VA==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app': 0.x - '@react-native-async-storage/async-storage': ^1.18.1 - peerDependenciesMeta: - '@react-native-async-storage/async-storage': - optional: true - - '@firebase/component@0.7.0': - resolution: {integrity: sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==} - engines: {node: '>=20.0.0'} - - '@firebase/data-connect@0.3.11': - resolution: {integrity: sha512-G258eLzAD6im9Bsw+Qm1Z+P4x0PGNQ45yeUuuqe5M9B1rn0RJvvsQCRHXgE52Z+n9+WX1OJd/crcuunvOGc7Vw==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/database-compat@2.1.0': - resolution: {integrity: sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==} - engines: {node: '>=20.0.0'} - - '@firebase/database-types@1.0.16': - resolution: {integrity: sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==} - - '@firebase/database@1.1.0': - resolution: {integrity: sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==} - engines: {node: '>=20.0.0'} - - '@firebase/firestore-compat@0.4.2': - resolution: {integrity: sha512-cy7ov6SpFBx+PHwFdOOjbI7kH00uNKmIFurAn560WiPCZXy9EMnil1SOG7VF4hHZKdenC+AHtL4r3fNpirpm0w==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/firestore-types@3.0.3': - resolution: {integrity: sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - - '@firebase/firestore@4.9.2': - resolution: {integrity: sha512-iuA5+nVr/IV/Thm0Luoqf2mERUvK9g791FZpUJV1ZGXO6RL2/i/WFJUj5ZTVXy5pRjpWYO+ZzPcReNrlilmztA==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/functions-compat@0.4.1': - resolution: {integrity: sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/functions-types@0.6.3': - resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==} - - '@firebase/functions@0.13.1': - resolution: {integrity: sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/installations-compat@0.2.19': - resolution: {integrity: sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/installations-types@0.5.3': - resolution: {integrity: sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==} - peerDependencies: - '@firebase/app-types': 0.x - - '@firebase/installations@0.6.19': - resolution: {integrity: sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/logger@0.5.0': - resolution: {integrity: sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==} - engines: {node: '>=20.0.0'} - - '@firebase/messaging-compat@0.2.23': - resolution: {integrity: sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/messaging-interop-types@0.2.3': - resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==} - - '@firebase/messaging@0.12.23': - resolution: {integrity: sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/performance-compat@0.2.22': - resolution: {integrity: sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/performance-types@0.2.3': - resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==} - - '@firebase/performance@0.7.9': - resolution: {integrity: sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/remote-config-compat@0.2.20': - resolution: {integrity: sha512-P/ULS9vU35EL9maG7xp66uljkZgcPMQOxLj3Zx2F289baTKSInE6+YIkgHEi1TwHoddC/AFePXPpshPlEFkbgg==} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/remote-config-types@0.5.0': - resolution: {integrity: sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==} - - '@firebase/remote-config@0.7.0': - resolution: {integrity: sha512-dX95X6WlW7QlgNd7aaGdjAIZUiQkgWgNS+aKNu4Wv92H1T8Ue/NDUjZHd9xb8fHxLXIHNZeco9/qbZzr500MjQ==} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/storage-compat@0.4.0': - resolution: {integrity: sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app-compat': 0.x - - '@firebase/storage-types@0.8.3': - resolution: {integrity: sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - - '@firebase/storage@0.14.0': - resolution: {integrity: sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==} - engines: {node: '>=20.0.0'} - peerDependencies: - '@firebase/app': 0.x - - '@firebase/util@1.13.0': - resolution: {integrity: sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==} - engines: {node: '>=20.0.0'} - - '@firebase/webchannel-wrapper@1.0.5': - resolution: {integrity: sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==} - '@graphql-tools/merge@9.1.1': resolution: {integrity: sha512-BJ5/7Y7GOhTuvzzO5tSBFL4NGr7PVqTJY3KeIDlVTT8YLcTXtBR+hlrC3uyEym7Ragn+zyWdHeJ9ev+nRX1X2w==} engines: {node: '>=16.0.0'} @@ -3619,10 +3406,6 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -3669,9 +3452,6 @@ packages: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - firebase@12.5.0: - resolution: {integrity: sha512-Ak8JcpH7FL6kiv0STwkv5+3CYEROO9iFWSx7OCZVvc4kIIABAIyAGs1mPGaHRxGUIApFZdMCXA7baq17uS6Mow==} - flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -3946,9 +3726,6 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-parser-js@0.5.10: - resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - human-id@4.1.2: resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==} hasBin: true @@ -3981,9 +3758,6 @@ packages: resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} engines: {node: '>=0.10.0'} - idb@7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -5849,9 +5623,6 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-vitals@4.2.4: - resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} - webpack-node-externals@3.0.0: resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} engines: {node: '>=6'} @@ -5870,14 +5641,6 @@ packages: webpack-cli: optional: true - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -6708,324 +6471,6 @@ snapshots: '@eslint/core': 0.16.0 levn: 0.4.1 - '@firebase/ai@2.5.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/app-types': 0.9.3 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/analytics-compat@0.2.25(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5)': - dependencies: - '@firebase/analytics': 0.10.19(@firebase/app@0.14.5) - '@firebase/analytics-types': 0.8.3 - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/analytics-types@0.8.3': {} - - '@firebase/analytics@0.10.19(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.5) - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/app-check-compat@0.4.0(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-check': 0.11.0(@firebase/app@0.14.5) - '@firebase/app-check-types': 0.5.3 - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-check-interop-types@0.3.3': {} - - '@firebase/app-check-types@0.5.3': {} - - '@firebase/app-check@0.11.0(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/app-compat@0.5.5': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/app-types@0.9.3': {} - - '@firebase/app@0.14.5': - dependencies: - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - idb: 7.1.1 - tslib: 2.8.1 - - '@firebase/auth-compat@0.6.1(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/auth': 1.11.1(@firebase/app@0.14.5) - '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' - - '@react-native-async-storage/async-storage' - - '@firebase/auth-interop-types@0.2.4': {} - - '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.13.0)': - dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 - - '@firebase/auth@1.11.1(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/component@0.7.0': - dependencies: - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/data-connect@0.3.11(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/database-compat@2.1.0': - dependencies: - '@firebase/component': 0.7.0 - '@firebase/database': 1.1.0 - '@firebase/database-types': 1.0.16 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/database-types@1.0.16': - dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 - - '@firebase/database@1.1.0': - dependencies: - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - faye-websocket: 0.11.4 - tslib: 2.8.1 - - '@firebase/firestore-compat@0.4.2(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/firestore': 4.9.2(@firebase/app@0.14.5) - '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' - - '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0)': - dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 - - '@firebase/firestore@4.9.2(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - '@firebase/webchannel-wrapper': 1.0.5 - '@grpc/grpc-js': 1.9.15 - '@grpc/proto-loader': 0.7.15 - tslib: 2.8.1 - - '@firebase/functions-compat@0.4.1(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/functions': 0.13.1(@firebase/app@0.14.5) - '@firebase/functions-types': 0.6.3 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/functions-types@0.6.3': {} - - '@firebase/functions@0.13.1(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.0 - '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/installations-compat@0.2.19(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.5) - '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3) - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' - - '@firebase/installations-types@0.5.3(@firebase/app-types@0.9.3)': - dependencies: - '@firebase/app-types': 0.9.3 - - '@firebase/installations@0.6.19(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 - idb: 7.1.1 - tslib: 2.8.1 - - '@firebase/logger@0.5.0': - dependencies: - tslib: 2.8.1 - - '@firebase/messaging-compat@0.2.23(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/messaging': 0.12.23(@firebase/app@0.14.5) - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/messaging-interop-types@0.2.3': {} - - '@firebase/messaging@0.12.23(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.5) - '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.13.0 - idb: 7.1.1 - tslib: 2.8.1 - - '@firebase/performance-compat@0.2.22(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/performance': 0.7.9(@firebase/app@0.14.5) - '@firebase/performance-types': 0.2.3 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/performance-types@0.2.3': {} - - '@firebase/performance@0.7.9(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.5) - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - web-vitals: 4.2.4 - - '@firebase/remote-config-compat@0.2.20(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/logger': 0.5.0 - '@firebase/remote-config': 0.7.0(@firebase/app@0.14.5) - '@firebase/remote-config-types': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/remote-config-types@0.5.0': {} - - '@firebase/remote-config@0.7.0(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.5) - '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/storage-compat@0.4.0(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5)': - dependencies: - '@firebase/app-compat': 0.5.5 - '@firebase/component': 0.7.0 - '@firebase/storage': 0.14.0(@firebase/app@0.14.5) - '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) - '@firebase/util': 1.13.0 - tslib: 2.8.1 - transitivePeerDependencies: - - '@firebase/app' - - '@firebase/app-types' - - '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0)': - dependencies: - '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 - - '@firebase/storage@0.14.0(@firebase/app@0.14.5)': - dependencies: - '@firebase/app': 0.14.5 - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 - tslib: 2.8.1 - - '@firebase/util@1.13.0': - dependencies: - tslib: 2.8.1 - - '@firebase/webchannel-wrapper@1.0.5': {} - '@graphql-tools/merge@9.1.1(graphql@16.11.0)': dependencies: '@graphql-tools/utils': 10.9.1(graphql@16.11.0) @@ -7056,6 +6501,7 @@ snapshots: dependencies: '@grpc/proto-loader': 0.7.15 '@types/node': 24.9.2 + optional: true '@grpc/proto-loader@0.7.15': dependencies: @@ -7063,6 +6509,7 @@ snapshots: long: 5.3.2 protobufjs: 7.5.4 yargs: 17.7.2 + optional: true '@gsap/react@2.1.2(gsap@3.13.0)(react@19.2.0)': dependencies: @@ -8205,28 +7652,38 @@ snapshots: dependencies: '@prisma/debug': 6.18.0 - '@protobufjs/aspromise@1.1.2': {} + '@protobufjs/aspromise@1.1.2': + optional: true - '@protobufjs/base64@1.1.2': {} + '@protobufjs/base64@1.1.2': + optional: true - '@protobufjs/codegen@2.0.4': {} + '@protobufjs/codegen@2.0.4': + optional: true - '@protobufjs/eventemitter@1.1.0': {} + '@protobufjs/eventemitter@1.1.0': + optional: true '@protobufjs/fetch@1.1.0': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 + optional: true - '@protobufjs/float@1.0.2': {} + '@protobufjs/float@1.0.2': + optional: true - '@protobufjs/inquire@1.1.0': {} + '@protobufjs/inquire@1.1.0': + optional: true - '@protobufjs/path@1.1.2': {} + '@protobufjs/path@1.1.2': + optional: true - '@protobufjs/pool@1.1.0': {} + '@protobufjs/pool@1.1.0': + optional: true - '@protobufjs/utf8@1.1.0': {} + '@protobufjs/utf8@1.1.0': + optional: true '@rtsao/scc@1.1.0': {} @@ -9930,10 +9387,6 @@ snapshots: dependencies: reusify: 1.1.0 - faye-websocket@0.11.4: - dependencies: - websocket-driver: 0.7.4 - fb-watchman@2.0.2: dependencies: bser: 2.1.1 @@ -9990,39 +9443,6 @@ snapshots: path-exists: 5.0.0 unicorn-magic: 0.1.0 - firebase@12.5.0: - dependencies: - '@firebase/ai': 2.5.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.5) - '@firebase/analytics': 0.10.19(@firebase/app@0.14.5) - '@firebase/analytics-compat': 0.2.25(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5) - '@firebase/app': 0.14.5 - '@firebase/app-check': 0.11.0(@firebase/app@0.14.5) - '@firebase/app-check-compat': 0.4.0(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5) - '@firebase/app-compat': 0.5.5 - '@firebase/app-types': 0.9.3 - '@firebase/auth': 1.11.1(@firebase/app@0.14.5) - '@firebase/auth-compat': 0.6.1(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5) - '@firebase/data-connect': 0.3.11(@firebase/app@0.14.5) - '@firebase/database': 1.1.0 - '@firebase/database-compat': 2.1.0 - '@firebase/firestore': 4.9.2(@firebase/app@0.14.5) - '@firebase/firestore-compat': 0.4.2(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5) - '@firebase/functions': 0.13.1(@firebase/app@0.14.5) - '@firebase/functions-compat': 0.4.1(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5) - '@firebase/installations': 0.6.19(@firebase/app@0.14.5) - '@firebase/installations-compat': 0.2.19(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5) - '@firebase/messaging': 0.12.23(@firebase/app@0.14.5) - '@firebase/messaging-compat': 0.2.23(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5) - '@firebase/performance': 0.7.9(@firebase/app@0.14.5) - '@firebase/performance-compat': 0.2.22(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5) - '@firebase/remote-config': 0.7.0(@firebase/app@0.14.5) - '@firebase/remote-config-compat': 0.2.20(@firebase/app-compat@0.5.5)(@firebase/app@0.14.5) - '@firebase/storage': 0.14.0(@firebase/app@0.14.5) - '@firebase/storage-compat': 0.4.0(@firebase/app-compat@0.5.5)(@firebase/app-types@0.9.3)(@firebase/app@0.14.5) - '@firebase/util': 1.13.0 - transitivePeerDependencies: - - '@react-native-async-storage/async-storage' - flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -10310,8 +9730,6 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-parser-js@0.5.10: {} - human-id@4.1.2: {} human-signals@2.1.0: {} @@ -10336,8 +9754,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - idb@7.1.1: {} - ieee754@1.2.1: {} ignore@5.3.2: {} @@ -11058,7 +10474,8 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 - long@5.3.2: {} + long@5.3.2: + optional: true loose-envify@1.4.0: dependencies: @@ -11548,6 +10965,7 @@ snapshots: '@protobufjs/utf8': 1.1.0 '@types/node': 24.9.2 long: 5.3.2 + optional: true proxy-addr@2.0.7: dependencies: @@ -12437,8 +11855,6 @@ snapshots: dependencies: defaults: 1.0.4 - web-vitals@4.2.4: {} - webpack-node-externals@3.0.0: {} webpack-sources@3.3.3: {} @@ -12475,14 +11891,6 @@ snapshots: - esbuild - uglify-js - websocket-driver@0.7.4: - dependencies: - http-parser-js: 0.5.10 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - - websocket-extensions@0.1.4: {} - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0