diff --git a/.changeset/tasty-socks-hide.md b/.changeset/tasty-socks-hide.md new file mode 100644 index 00000000000..2fdd7411363 --- /dev/null +++ b/.changeset/tasty-socks-hide.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Prevent infinite loop when the client is blocked diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 4eaddfe4fb4..5eb64d4940f 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1493,15 +1493,24 @@ export class Clerk implements ClerkInterface { if (!this.client || !this.session) { return; } - const newClient = await Client.getOrCreateInstance().fetch(); - this.updateClient(newClient); - if (this.session) { - return; - } - if (opts.broadcast) { - this.#broadcastSignOutEvent(); + try { + const newClient = await Client.getOrCreateInstance().fetch(); + this.updateClient(newClient); + if (this.session) { + return; + } + if (opts.broadcast) { + this.#broadcastSignOutEvent(); + } + return this.setActive({ session: null }); + } catch (err) { + // Handle the 403 Forbidden + if (err.status === 403) { + return this.setActive({ session: null }); + } else { + throw err; + } } - return this.setActive({ session: null }); }; public authenticateWithGoogleOneTap = async (