diff --git a/.changeset/long-rabbits-ring.md b/.changeset/long-rabbits-ring.md new file mode 100644 index 00000000000..7df6cfed757 --- /dev/null +++ b/.changeset/long-rabbits-ring.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Collect captcha token on load diff --git a/packages/clerk-js/src/core/auth/AuthCookieService.ts b/packages/clerk-js/src/core/auth/AuthCookieService.ts index 28871661801..514f2bd9a66 100644 --- a/packages/clerk-js/src/core/auth/AuthCookieService.ts +++ b/packages/clerk-js/src/core/auth/AuthCookieService.ts @@ -1,10 +1,12 @@ import { setDevBrowserJWTInURL } from '@clerk/shared/devBrowser'; import { is4xxError, isClerkAPIResponseError, isNetworkError } from '@clerk/shared/error'; -import type { Clerk, EnvironmentResource } from '@clerk/types'; +import type { EnvironmentResource } from '@clerk/types'; import { clerkCoreErrorTokenRefreshFailed, clerkMissingDevBrowserJwt } from '../errors'; import { eventBus, events } from '../events'; import type { FapiClient } from '../fapiClient'; +import type { Clerk } from '../resources/internal'; +import { SessionTokenCache } from '../tokenCache'; import type { ClientUatCookieHandler } from './cookies/clientUat'; import { createClientUatCookie } from './cookies/clientUat'; import type { SessionCookieHandler } from './cookies/session'; @@ -103,6 +105,19 @@ export class AuthCookieService { return setDevBrowserJWTInURL(url, devBrowserJwt); } + /** + * Will refresh the session token immediately once + * if the captcha heartbeat flag is enabled. + * We want to do this to ensure that we collect at least one token + * even for short-lived sessions. + */ + public forceRefreshSessionToken() { + if (this.clerk.__unstable__environment?.displayConfig.captchaHeartbeat) { + SessionTokenCache.clear(); + void this.refreshSessionToken(); + } + } + private startPollingForToken() { if (!this.poller) { this.poller = new SessionCookiePoller(); diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index db377ee7cc3..536c5ab7bff 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1828,8 +1828,8 @@ export class Clerk implements ClerkInterface { } } + this.#authService?.forceRefreshSessionToken(); this.#clearClerkQueryParams(); - this.#handleImpersonationFab(); return true; };