From 528f80e9df5619bfa7e137dc87fd08370cf11cb9 Mon Sep 17 00:00:00 2001 From: Stefanos Anagnostou Date: Thu, 3 Apr 2025 10:37:47 +0300 Subject: [PATCH 1/3] fix(clerk-js): Emit captcha errors if the turnstile fails to execute --- .changeset/tough-crabs-sit.md | 5 +++++ .../clerk-js/src/utils/captcha/CaptchaChallenge.ts | 8 ++++---- packages/clerk-js/src/utils/captcha/turnstile.ts | 12 ++++++++---- 3 files changed, 17 insertions(+), 8 deletions(-) create mode 100644 .changeset/tough-crabs-sit.md diff --git a/.changeset/tough-crabs-sit.md b/.changeset/tough-crabs-sit.md new file mode 100644 index 00000000000..7a097dde3bb --- /dev/null +++ b/.changeset/tough-crabs-sit.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Emit captcha errors if the turnstile fails to execute diff --git a/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts b/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts index 3f3b5dfe278..94b1f1388ec 100644 --- a/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts +++ b/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts @@ -25,11 +25,11 @@ export class CaptchaChallenge { if (e.captchaError) { return { captchaError: e.captchaError }; } - return undefined; + return { captchaError: e?.message || e }; }); } - return undefined; + return { captchaError: 'invisible_captcha_unsupported' }; } /** @@ -55,11 +55,11 @@ export class CaptchaChallenge { if (e.captchaError) { return { captchaError: e.captchaError }; } - return undefined; + return { captchaError: e?.message || e }; }); } - return {}; + return { captchaError: 'captcha_unsupported' }; } /** diff --git a/packages/clerk-js/src/utils/captcha/turnstile.ts b/packages/clerk-js/src/utils/captcha/turnstile.ts index 80c0df70526..de2abf8a366 100644 --- a/packages/clerk-js/src/utils/captcha/turnstile.ts +++ b/packages/clerk-js/src/utils/captcha/turnstile.ts @@ -134,11 +134,15 @@ async function loadCaptchaFromCloudflareURL() { } function getCaptchaAttibutesFromElemenet(element: HTMLElement): CaptchaAttributes { - const theme = (element.getAttribute('data-cl-theme') as RenderOptions['theme']) || undefined; - const language = (element.getAttribute('data-cl-language') as RenderOptions['language']) || undefined; - const size = (element.getAttribute('data-cl-size') as RenderOptions['size']) || undefined; + try { + const theme = (element.getAttribute('data-cl-theme') as RenderOptions['theme']) || undefined; + const language = (element.getAttribute('data-cl-language') as RenderOptions['language']) || undefined; + const size = (element.getAttribute('data-cl-size') as RenderOptions['size']) || undefined; - return { theme, language, size }; + return { theme, language, size }; + } catch { + return { theme: undefined, language: undefined, size: undefined }; + } } /* From b4f802b826b1d2ae4edba09f8e6fac755aea6b8f Mon Sep 17 00:00:00 2001 From: Stefanos Anagnostou Date: Thu, 3 Apr 2025 11:05:15 +0300 Subject: [PATCH 2/3] Increase bundlewatch limit --- packages/clerk-js/bundlewatch.config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clerk-js/bundlewatch.config.json b/packages/clerk-js/bundlewatch.config.json index ac9865b0bd8..40611cd37a9 100644 --- a/packages/clerk-js/bundlewatch.config.json +++ b/packages/clerk-js/bundlewatch.config.json @@ -1,6 +1,6 @@ { "files": [ - { "path": "./dist/clerk.js", "maxSize": "584.6kB" }, + { "path": "./dist/clerk.js", "maxSize": "584.7kB" }, { "path": "./dist/clerk.browser.js", "maxSize": "81KB" }, { "path": "./dist/clerk.headless*.js", "maxSize": "55KB" }, { "path": "./dist/ui-common*.js", "maxSize": "96KB" }, From 24d866629f41245805c7fcb0b5693de9cb5d6866 Mon Sep 17 00:00:00 2001 From: Stefanos Anagnostou Date: Thu, 3 Apr 2025 13:34:10 +0300 Subject: [PATCH 3/3] Handle SignUp differently than Verify --- packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts b/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts index 94b1f1388ec..1455ca742e4 100644 --- a/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts +++ b/packages/clerk-js/src/utils/captcha/CaptchaChallenge.ts @@ -29,7 +29,7 @@ export class CaptchaChallenge { }); } - return { captchaError: 'invisible_captcha_unsupported' }; + return { captchaError: 'captcha_unavailable' }; } /** @@ -55,11 +55,11 @@ export class CaptchaChallenge { if (e.captchaError) { return { captchaError: e.captchaError }; } - return { captchaError: e?.message || e }; + return opts?.action === 'verify' ? { captchaError: e?.message || e } : undefined; }); } - return { captchaError: 'captcha_unsupported' }; + return opts?.action === 'verify' ? { captchaError: 'captcha_unavailable' } : {}; } /**