MCPcopy Index your code
hub / github.com/simstudioai/sim / useVerification

Function useVerification

apps/sim/app/(auth)/verify/use-verification.ts:42–257  ·  view source on GitHub ↗
({
  hasEmailService,
  isProduction,
  isEmailVerificationEnabled,
}: UseVerificationParams)

Source from the content-addressed store, hash-verified

40}
41
42export function useVerification({
43 hasEmailService,
44 isProduction,
45 isEmailVerificationEnabled,
46}: UseVerificationParams): UseVerificationReturn {
47 const router = useRouter()
48 const searchParams = useSearchParams()
49 const { refetch: refetchSession } = useSession()
50 const [otp, setOtp] = useState('')
51 const [email, setEmail] = useState('')
52 const [status, setStatus] = useState<VerificationStatus>('idle')
53 const [isResending, setIsResending] = useState(false)
54 const [isSendingInitialOtp, setIsSendingInitialOtp] = useState(false)
55 const [errorMessage, setErrorMessage] = useState('')
56 const [redirectUrl, setRedirectUrl] = useState<string | null>(null)
57 const [isInviteFlow, setIsInviteFlow] = useState(false)
58
59 useEffect(() => {
60 if (typeof window !== 'undefined') {
61 const storedEmail = sessionStorage.getItem('verificationEmail')
62 if (storedEmail) {
63 setEmail(storedEmail)
64 }
65
66 const storedRedirectUrl = sessionStorage.getItem('inviteRedirectUrl')
67 if (storedRedirectUrl && validateCallbackUrl(storedRedirectUrl)) {
68 setRedirectUrl(storedRedirectUrl)
69 } else if (storedRedirectUrl) {
70 logger.warn('Ignoring unsafe stored invite redirect URL', { url: storedRedirectUrl })
71 sessionStorage.removeItem('inviteRedirectUrl')
72 }
73
74 const storedIsInviteFlow = sessionStorage.getItem('isInviteFlow')
75 if (storedIsInviteFlow === 'true') {
76 setIsInviteFlow(true)
77 }
78 }
79
80 const redirectParam = searchParams.get('redirectAfter')
81 if (redirectParam) {
82 if (validateCallbackUrl(redirectParam)) {
83 setRedirectUrl(redirectParam)
84 } else {
85 logger.warn('Ignoring unsafe redirectAfter parameter', { url: redirectParam })
86 }
87 }
88
89 const inviteFlowParam = searchParams.get('invite_flow')
90 if (inviteFlowParam === 'true') {
91 setIsInviteFlow(true)
92 }
93 }, [searchParams])
94
95 useEffect(() => {
96 if (email && !isSendingInitialOtp && hasEmailService) {
97 setIsSendingInitialOtp(true)
98 }
99 }, [email, isSendingInitialOtp, hasEmailService])

Callers 1

VerificationFormFunction · 0.90

Calls 8

useSessionFunction · 0.90
validateCallbackUrlFunction · 0.90
handleRedirectFunction · 0.85
getItemMethod · 0.80
removeItemMethod · 0.80
verifyCodeFunction · 0.70
warnMethod · 0.65
getMethod · 0.65

Tested by

no test coverage detected