{"version":3,"file":"static/chunks/36422.bc4a475622c92195.js","mappings":"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","sources":["webpack://_N_E/./src/hooks/useAuth/useAuth.tsx","webpack://_N_E/./src/analytics/events.tsx","webpack://_N_E/./src/styles/atomic.module.scss"],"sourcesContent":["import type { Auth } from \"firebase/auth\";\nimport { useEffect, useState } from \"react\";\nimport { IdentifyEmail } from \"src/analytics/events\";\n\nimport { getAuth } from \"#auth/utils\";\nimport { useRouterContext as useRouter } from \"#components/provider/Router\";\n\n// This prevents the useEffect identify call from being triggered every single\n// time a new component in the tree accesses auth via useAuth\nlet cachedIdx: string;\n\nconst useAuth = () => {\n const [auth, setAuth] = useState(null);\n const bypassEmailVerification = [\n \"local\",\n \"dev\",\n \"qa\",\n \"refi\",\n \"skyone\",\n ].includes(process.env.NEXT_PUBLIC_ENVIRONMENT || \"\"); // don't require email ver on Local or in QA for development/cypress testing purposes\n const [emailVerified, setEmailVerified] = useState(\n bypassEmailVerification,\n );\n useEffect(() => {\n (async () => {\n if (auth == null) {\n const realAuth = await getAuth();\n setAuth(realAuth);\n }\n // Keep emailVerification in state in sync with any updates to the currentUser in auth\n if (\n auth?.currentUser?.emailVerified !== emailVerified &&\n !bypassEmailVerification\n ) {\n setEmailVerified(auth?.currentUser?.emailVerified ?? false);\n }\n if (bypassEmailVerification) {\n setEmailVerified(true);\n }\n })();\n }, [auth, auth?.currentUser]);\n const authenticated = !!auth?.currentUser;\n const loading = false;\n const router = useRouter();\n\n const idx = auth?.currentUser?.email;\n\n useEffect(() => {\n if (idx && idx !== cachedIdx) {\n IdentifyEmail(idx, auth?.currentUser?.uid);\n cachedIdx = idx;\n }\n }, [idx]);\n\n return {\n /**\n * The Firebase Auth instance, as returned from `reactfire`'s `useAuth`.\n */\n auth,\n /**\n * Indicates if the user is authenticated\n */\n authenticated,\n register: async (email: string, password: string) => {\n const { createUserWithEmailAndPassword } = await import(\"firebase/auth\");\n return createUserWithEmailAndPassword(auth!, email, password);\n },\n /**\n * The email associated with the authenticated user in Firebase.\n */\n email: auth?.currentUser?.email,\n emailVerified,\n loading,\n /**\n * Returns a JSON Web Token (JWT) used to identify the user to Firebase. If\n * the token is five minutes or less from expiry (or has already expired),\n * it will be refreshed a new one will be returned.\n */\n getToken: async () => {\n if (!authenticated || !auth.currentUser) {\n // eslint-disable-next-line no-console\n console.warn(\"Attempted to get token while unauthenticated\");\n\n return null;\n }\n\n return auth.currentUser?.getIdToken();\n },\n logIn: async ({ email, password }: { email: string; password: string }) => {\n const { signInWithEmailAndPassword } = await import(\"firebase/auth\");\n return signInWithEmailAndPassword(auth!, email, password);\n },\n /**\n * Logs out the authenticated user, and redirect them to the home page.\n */\n logOut: async (shouldRedirect = true) => {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.clear();\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (window.Intercom) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n window.Intercom(\"shutdown\");\n }\n }\n await auth?.signOut();\n if (shouldRedirect)\n router.push(\"/\", {\n pathname: \"/\",\n query: {},\n });\n },\n refreshUserAuth: async () => {\n await auth?.currentUser?.reload();\n const refreshedAuth = await getAuth();\n setAuth(refreshedAuth);\n if (bypassEmailVerification) {\n // dev/qa logic\n setEmailVerified(true);\n if (refreshedAuth?.currentUser) {\n return {\n ...refreshedAuth.currentUser,\n emailVerified: true,\n };\n }\n return refreshedAuth?.currentUser;\n }\n // prod logic\n setEmailVerified(refreshedAuth?.currentUser?.emailVerified ?? false);\n return refreshedAuth?.currentUser;\n },\n };\n};\n\nexport default useAuth;\n","import * as Sentry from \"@sentry/nextjs\";\nimport LogRocket from \"logrocket\";\n\n// Segment analytics.identify() events:\nexport const IdentifyEmail = (email: string, uid?: string) => {\n try {\n Sentry.setContext(\"user\", {\n email,\n userId: uid,\n });\n if (uid != null) {\n LogRocket.identify(uid, {\n email,\n });\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(`Unable to set sentry user context, ${e as string}`);\n }\n try {\n window.analytics.identify(uid, {\n email,\n });\n\n // attempt to associate all anonymous a/b tests with the now identified user\n Object.keys(localStorage).forEach((key) => {\n if (key.startsWith(\"aabt-\")) {\n const [_, experiment, variant, bucket] = key.split(\"-\");\n window.analytics.track(\"anonymous-a-b-test\", {\n experiment,\n variant,\n bucket,\n email,\n });\n }\n });\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(err);\n }\n return \"err\";\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"relative\":\"atomic_relative__FfSxE\",\"absoluteCenter\":\"atomic_absoluteCenter__g9Cio\",\"absoluteFill\":\"atomic_absoluteFill__KE5RH\",\"fixedFill\":\"atomic_fixedFill__ZBUSX\",\"fullWidthPercent\":\"atomic_fullWidthPercent__RqaNM\",\"flexGrow\":\"atomic_flexGrow__6de9l\",\"flexColumn\":\"atomic_flexColumn__IjADC\",\"gap4\":\"atomic_gap4__Vh_HM\",\"gap8\":\"atomic_gap8__mr_J4\",\"gap10\":\"atomic_gap10__a0XPE\",\"gap12\":\"atomic_gap12__JjwQR\",\"gap16\":\"atomic_gap16__vNsa1\",\"gap20\":\"atomic_gap20__StyWJ\",\"gap24\":\"atomic_gap24__bM9Zk\",\"gap32\":\"atomic_gap32__ta6d6\",\"gap40\":\"atomic_gap40__59RKD\",\"gap64\":\"atomic_gap64__naDhM\",\"gap100\":\"atomic_gap100__Q0Kvr\"};"],"names":["cachedIdx","auth","setAuth","useState","bypassEmailVerification","includes","process","emailVerified","setEmailVerified","useEffect","realAuth","getAuth","currentUser","authenticated","router","useRouter","idx","email","uid","Sentry","userId","LogRocket","e","console","warn","window","analytics","identify","Object","keys","localStorage","forEach","key","startsWith","_","experiment","variant","bucket","split","track","err","IdentifyEmail","register","async","password","createUserWithEmailAndPassword","loading","getToken","getIdToken","logIn","signInWithEmailAndPassword","logOut","shouldRedirect","sessionStorage","clear","Intercom","signOut","push","pathname","query","refreshUserAuth","reload","refreshedAuth","module","exports"],"sourceRoot":""}