Skip to content

Commit 0e4dcec

Browse files
waleedlatif1claude
andcommitted
fix(auth): add 15s timeout to Turnstile captcha promise
Prevents form from hanging indefinitely if Turnstile never fires onSuccess/onError (e.g. script fails to load, network drop). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3f64772 commit 0e4dcec

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

apps/sim/app/(auth)/login/login-form.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,16 @@ export default function LoginPage({
189189
if (turnstileSiteKey && turnstileRef.current) {
190190
try {
191191
turnstileRef.current.reset()
192-
token = await new Promise<string>((resolve, reject) => {
193-
captchaResolveRef.current = resolve
194-
captchaRejectRef.current = reject
195-
turnstileRef.current?.execute()
196-
})
192+
token = await Promise.race([
193+
new Promise<string>((resolve, reject) => {
194+
captchaResolveRef.current = resolve
195+
captchaRejectRef.current = reject
196+
turnstileRef.current?.execute()
197+
}),
198+
new Promise<string>((_, reject) =>
199+
setTimeout(() => reject(new Error('Captcha timed out')), 15_000)
200+
),
201+
])
197202
} catch {
198203
setPasswordErrors(['Captcha verification failed. Please try again.'])
199204
setShowValidationError(true)

apps/sim/app/(auth)/signup/signup-form.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,16 @@ function SignupFormContent({
256256
if (turnstileSiteKey && turnstileRef.current) {
257257
try {
258258
turnstileRef.current.reset()
259-
token = await new Promise<string>((resolve, reject) => {
260-
captchaResolveRef.current = resolve
261-
captchaRejectRef.current = reject
262-
turnstileRef.current?.execute()
263-
})
259+
token = await Promise.race([
260+
new Promise<string>((resolve, reject) => {
261+
captchaResolveRef.current = resolve
262+
captchaRejectRef.current = reject
263+
turnstileRef.current?.execute()
264+
}),
265+
new Promise<string>((_, reject) =>
266+
setTimeout(() => reject(new Error('Captcha timed out')), 15_000)
267+
),
268+
])
264269
} catch {
265270
setPasswordErrors(['Captcha verification failed. Please try again.'])
266271
setShowValidationError(true)

0 commit comments

Comments
 (0)