Skip to content

Conversation

@bratsos
Copy link
Member

@bratsos bratsos commented Nov 27, 2025

Description

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • New Features

    • Introduced getToken API across Astro, Next.js, Nuxt, React, React Router, TanStack React Start, and Vue SDKs for retrieving the current session token in the browser with automatic Clerk initialization handling.
  • Tests

    • Added comprehensive unit tests for getToken covering multiple Clerk states, loading scenarios, error conditions, and edge cases.

✏️ Tip: You can customize this high-level summary in your review settings.

@changeset-bot
Copy link

changeset-bot bot commented Nov 27, 2025

⚠️ No Changeset found

Latest commit: 46efb2c

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 27, 2025

📝 Walkthrough

Walkthrough

This pull request introduces a new getToken function to the Clerk SDK. The implementation, added to the shared package, retrieves the current session token from Clerk in browser environments with robust initialization handling. It includes polling logic to wait for Clerk availability, status-based event subscriptions, and specific error codes for various failure scenarios (not in browser, load timeout, initialization error). The function is then re-exported across all framework packages (Astro, Next.js, Nuxt, React, React Router, Tan Stack React Start, and Vue) to expose it as part of their public APIs. Comprehensive unit tests cover success paths, error conditions, timeout behavior, and state transitions.

Pre-merge checks

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(repo): Make gettoken callable outside of react' clearly summarizes the main objective of the PR: exposing getToken as a callable function across multiple frameworks/packages, not just within React components.

📜 Recent review details

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between e76d248 and 46efb2c.

⛔ Files ignored due to path filters (2)
  • packages/react-router/src/__tests__/__snapshots__/exports.test.ts.snap is excluded by !**/*.snap
  • packages/tanstack-react-start/src/__tests__/__snapshots__/exports.test.ts.snap is excluded by !**/*.snap
📒 Files selected for processing (9)
  • packages/astro/src/client/index.ts (1 hunks)
  • packages/nextjs/src/index.ts (1 hunks)
  • packages/nuxt/src/runtime/client/index.ts (1 hunks)
  • packages/react-router/src/index.ts (1 hunks)
  • packages/react/src/index.ts (1 hunks)
  • packages/shared/src/__tests__/getToken.spec.ts (1 hunks)
  • packages/shared/src/getToken.ts (1 hunks)
  • packages/tanstack-react-start/src/index.ts (1 hunks)
  • packages/vue/src/index.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (13)
**/*.{js,jsx,ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

All code must pass ESLint checks with the project's configuration

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*.{js,jsx,ts,tsx,json,md,yml,yaml}

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

Use Prettier for consistent code formatting

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
packages/**/src/**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

TypeScript is required for all packages

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

Follow established naming conventions (PascalCase for components, camelCase for variables)

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
packages/**/src/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

packages/**/src/**/*.{ts,tsx,js,jsx}: Maintain comprehensive JSDoc comments for public APIs
Use tree-shaking friendly exports
Validate all inputs and sanitize outputs
All public APIs must be documented with JSDoc
Use dynamic imports for optional features
Provide meaningful error messages to developers
Include error recovery suggestions where applicable
Log errors appropriately for debugging
Lazy load components and features when possible
Implement proper caching strategies
Use efficient data structures and algorithms
Implement proper logging with different levels

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*.ts?(x)

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

Use proper TypeScript error types

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/typescript.mdc)

**/*.{ts,tsx}: Always define explicit return types for functions, especially public APIs
Use proper type annotations for variables and parameters where inference isn't clear
Avoid any type - prefer unknown when type is uncertain, then narrow with type guards
Implement type guards for unknown types using the pattern function isType(value: unknown): value is Type
Use interface for object shapes that might be extended
Use type for unions, primitives, and computed types
Prefer readonly properties for immutable data structures
Use private for internal implementation details in classes
Use protected for inheritance hierarchies
Use public explicitly for clarity in public APIs
Use mixins for shared behavior across unrelated classes in TypeScript
Use generic constraints with bounded type parameters like <T extends { id: string }>
Use utility types like Omit, Partial, and Pick for data transformation instead of manual type construction
Use discriminated unions instead of boolean flags for state management and API responses
Use mapped types for transforming object types
Use conditional types for type-level logic
Leverage template literal types for string manipulation at the type level
Use ES6 imports/exports consistently
Use default exports sparingly, prefer named exports
Document functions with JSDoc comments including @param, @returns, @throws, and @example tags
Create custom error classes that extend Error for specific error types
Use the Result pattern for error handling instead of throwing exceptions
Use optional chaining (?.) and nullish coalescing (??) operators for safe property access
Let TypeScript infer obvious types to reduce verbosity
Use const assertions with as const for literal types
Use satisfies operator for type checking without widening types
Declare readonly arrays and objects for immutable data structures
Use spread operator and array spread for immutable updates instead of mutations
Use lazy loading for large types...

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/index.ts

📄 CodeRabbit inference engine (.cursor/rules/typescript.mdc)

Avoid barrel files (index.ts re-exports) as they can cause circular dependencies

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/astro/src/client/index.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*.{js,ts,jsx,tsx}

📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)

Use ESLint with custom configurations tailored for different package types

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*.{js,ts,jsx,tsx,json,md,yml,yaml}

📄 CodeRabbit inference engine (.cursor/rules/monorepo.mdc)

Use Prettier for code formatting across all packages

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*

⚙️ CodeRabbit configuration file

If there are no tests added or modified as part of the PR, please suggest that tests be added to cover the changes.

**/*: Only comment on issues that would block merging, ignore minor or stylistic concerns.
Restrict feedback to errors, security risks, or functionality-breaking problems.
Do not post comments on code style, formatting, or non-critical improvements.
Keep reviews short: flag only issues that make the PR unsafe to merge.
Group similar issues into a single comment instead of posting multiple notes.
Skip repetition: if a pattern repeats, mention it once at a summary level only.
Do not add general suggestions, focus strictly on merge-blocking concerns.
If there are no critical problems, respond with minimal approval (e.g., 'Looks good'). Do not add additional review.
Avoid line-by-line commentary unless it highlights a critical bug or security hole.
Highlight only issues that could cause runtime errors, data loss, or severe maintainability issues.
Ignore minor optimization opportunities, focus solely on correctness and safety.
Provide a top-level summary of critical blockers rather than detailed per-line notes.
Comment only when the issue must be resolved before merge, otherwise remain silent.
When in doubt, err on the side of fewer comments, brevity and blocking issues only.
Avoid posting any refactoring issues.

Files:

  • packages/vue/src/index.ts
  • packages/react-router/src/index.ts
  • packages/react/src/index.ts
  • packages/tanstack-react-start/src/index.ts
  • packages/shared/src/getToken.ts
  • packages/astro/src/client/index.ts
  • packages/shared/src/__tests__/getToken.spec.ts
  • packages/nextjs/src/index.ts
  • packages/nuxt/src/runtime/client/index.ts
**/*.{test,spec}.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

**/*.{test,spec}.{ts,tsx,js,jsx}: Unit tests are required for all new functionality
Verify proper error handling and edge cases
Include tests for all new features

Files:

  • packages/shared/src/__tests__/getToken.spec.ts
**/*.{test,spec,e2e}.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/development.mdc)

Use real Clerk instances for integration tests

Files:

  • packages/shared/src/__tests__/getToken.spec.ts
🧬 Code graph analysis (2)
packages/shared/src/getToken.ts (3)
packages/shared/src/types/clerk.ts (1)
  • ClerkStatus (175-175)
packages/shared/src/retry.ts (1)
  • retry (95-129)
packages/shared/src/types/session.ts (1)
  • GetTokenOptions (341-346)
packages/shared/src/__tests__/getToken.spec.ts (1)
packages/shared/src/getToken.ts (1)
  • getToken (133-141)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (27)
  • GitHub Check: Integration Tests (nuxt, chrome)
  • GitHub Check: Integration Tests (nextjs, chrome, 16, RQ)
  • GitHub Check: Integration Tests (quickstart, chrome, 16)
  • GitHub Check: Integration Tests (handshake, chrome)
  • GitHub Check: Integration Tests (nextjs, chrome, 15)
  • GitHub Check: Integration Tests (react-router, chrome)
  • GitHub Check: Integration Tests (sessions:staging, chrome)
  • GitHub Check: Integration Tests (handshake:staging, chrome)
  • GitHub Check: Integration Tests (ap-flows, chrome)
  • GitHub Check: Integration Tests (custom, chrome)
  • GitHub Check: Integration Tests (sessions, chrome)
  • GitHub Check: Integration Tests (quickstart, chrome, 15)
  • GitHub Check: Integration Tests (tanstack-react-start, chrome)
  • GitHub Check: Integration Tests (nextjs, chrome, 16)
  • GitHub Check: Integration Tests (vue, chrome)
  • GitHub Check: Integration Tests (billing, chrome, RQ)
  • GitHub Check: Integration Tests (machine, chrome)
  • GitHub Check: Integration Tests (billing, chrome)
  • GitHub Check: Integration Tests (machine, chrome, RQ)
  • GitHub Check: Integration Tests (astro, chrome)
  • GitHub Check: Integration Tests (express, chrome)
  • GitHub Check: Integration Tests (generic, chrome)
  • GitHub Check: Integration Tests (localhost, chrome)
  • GitHub Check: Formatting | Dedupe | Changeset
  • GitHub Check: Build Packages
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: semgrep-cloud-platform/scan
🔇 Additional comments (1)
packages/shared/src/getToken.ts (1)

1-141: LGTM!

The implementation is solid:

  • Proper use of the shared retry helper for polling
  • Clean resource management in waitForClerkStatus with the settled flag preventing race conditions and ensuring timeout/listener cleanup
  • Comprehensive error handling with unique ClerkRuntimeError codes
  • Good backward compatibility for legacy clerk-js (lines 94-96)
  • Well-documented public API with JSDoc including @throws and @example

Comment @coderabbitai help to get the list of available commands and usage tips.

@vercel
Copy link

vercel bot commented Nov 27, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Dec 19, 2025 10:37pm

@bratsos bratsos changed the base branch from main to vincent-and-the-doctor November 27, 2025 19:05
@bratsos bratsos changed the title feat: Make gettoken callable outside of react feat(repo): Make gettoken callable outside of react Nov 28, 2025
@bratsos bratsos marked this pull request as ready for review November 28, 2025 15:02
@panteliselef
Copy link
Contributor

@bratsos fyi people wanted to use this in expo (web/mobile) as well :)

@bratsos
Copy link
Member Author

bratsos commented Dec 1, 2025

@bratsos fyi people wanted to use this in expo (web/mobile) as well :)

Hm, the issue here is that our solution depends on window.Clerk which is not available in react native. I think users in expo/react-native can use getClerkInstance().session?.getToken() instead.

@Ephem Ephem self-requested a review December 1, 2025 17:03
Comment on lines 149 to 151
if (!clerk.session) {
return null;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think null is appropriate here, but wanted to flag just in case: Do you think we should throw an error in this case so the developer knows that a user is signed out? I'm debating both approaches and I'm not totally positive which one might be better. Leaning towards null...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the question we need to answer is what is the responsibility of this function, to report the auth state, or to provide a token? If the answer is to report the auth state (which is what I think the intention was by using getX), then returning null seems the better option.

Plus we don't want to penalize the happy path by forcing devs to always have to wrap this with a try/catch.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was one of the people asking for this, as it would make things nicer in our own dashboard, but thinking about this again now, I think it might be problematic to introduce this API and I'm sorry I didn't realize it earlier. 😞

The reason is that I think this is fundamentally incompatible with any concurrent features in frameworks, like transitions in React. If we let people access this directly, they kind of bypass any SDK integrations we design to work well with transitions.

If we'd for example leverage transitions to get rid of our transitive state in React, if users were using this we would not be able to control the token they see based on the transition. We want the current page to keep the old token, and the new page to use the new token, but this helper would always return whatever the current value is.

We are still some ways away from being able to fully support concurrent features, but I think this PR would introduce an API that could lead users away from the happy path and make that harder for us to do in the future. At least I think there might be enough uncertainty whether this is a good idea long term that we should hold it until we know for sure?

Another way to say this is, in the framework SDKs we usually lead users away from relying on the clerk singleton directly, as that bypasses the SDK layer we've designed for this framework, which can be unsafe. I think this is another version of that?

@brkalow

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've been thinking about this some more and I'm not sure we can ever make auth state fork since cookies are involved. If we decide that auth state ultimately needs to be synchronous state, this PR still makes sense. I'm not sure we're in a place to decide either way just yet though, but wanted to update on my thinking. 😄

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the thoughtful feedback @Ephem!

So if I understand this correctly, this is an existing issue as:

  • users can access window.Clerk.session.getToken directly
  • users can access _session cookie directly
  • createGetToken in our react hooks is accessing isomorphicClerk.session.getToken(options) which is also not concurrency-safe

We could ship this helper for the intended use cases (axios interceptors, react-query etc) that run outside React's render phase, with clear documentation that framework-specific hooks should be preferred for use within components.

Re:concurrent features and transitions, even though it's not part of this implementation you raised a great point. Just to test my understanding, wouldn't the following be sufficient to handle this (as a future iteration, of course):

  • use useSyncExternalStore for our react hook to safely get the current session
  • introduce a way to maintain "versioned state generations" to handle transitions where different renders need different token values

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, this is tricky, but I'll try to provide some more details around my current thinking. Happy to hop on a call as well.

users can access window.Clerk.session.getToken directly

Yes, but this is something we explicitly advice against. Same with useClerk. When you use those, you step outside of approved path and there be dragons.

users can access _session cookie directly

Accessing this directly in code is also advised against (I think? should be), but it's accessed implicitly when doing same-domain API calls, which is the main problem for supporting transitions, see later comment.

createGetToken in our react hooks is accessing isomorphicClerk.session.getToken(options) which is also not concurrency-safe

Yes, today this is the case. Because it's behind our React hook, we can transparently change this implementation if we want though, which is my point. The hooks are a React-level facade that guarantees we can use React-level features in the future, even if we are not today.

We could ship this helper for the intended use cases (axios interceptors, react-query etc) that run outside React's render phase, with clear documentation that framework-specific hooks should be preferred for use within components.

This wont help unfortunately. Since react-query etc can be triggered from within the render phase anyway (when using suspense), this getToken implementation would still be tied to the render phase and the transition that triggered it. If people start using this for example with RQ, and we later want to update getToken to be transition-compatible via some React-level API, we couldn't do it since they are relying on this outside function.


All this said, the tricky thing here is the cookie. Even if we could fork the state itself, the cookie is not forkable. The transition that uses the "new" state might do suspenseful data fetching during the render phase, so it would need the cookie to already be set to do so. If we set the cookie when triggering the transition, we run into the problem that any synchronous interrupt that might happen that triggers new data fetching in the current state fork of the world now has the wrong cookie value. This is all from the point of view of our current model of dealing with all this on the client.

If we consider the canonical way to do this in a RSC framework, that's likely by moving the auth state change to a server function. These are not quite synchronous, as the request itself is async and the app can still update while they are in progress (with existing state), but they happen in serial and they apply kinda synchronously in that auth state and cookie and UI would update together. More research is needed though and I'm not sure how this would affect this PR and new API. 🤔

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the detailed response! I want to make sure we're aligned on what this is trying to solve.

I think we might be approaching the "users can access window.Clerk directly" point from different angles. My thinking is that these users already exist - people using vanilla JS, or non-concurrent frameworks - and they're already accessing window.Clerk directly or reading cookies because there's no other option for them. They'll likely continue to exist even with better RSC auth support. Right now the experience involves implementing their own timing/retry logic to wait for Clerk to load.
This PR is really about providing a shared SDK utility for those users, rather than replacing framework-specific hooks as the recommended approach.

On the React hooks being a facade - I think we're actually in agreement here! Having a framework-agnostic getToken() wouldn't mean our React SDK has to use it internally. The React hooks could continue to have their own implementation that evolves toward transition support, using useSyncExternalStore or whatever approach makes sense. The standalone function would serve non-React use cases, while useAuth().getToken() remains the recommended path for React users.

Regarding the concern about React Query users - I wonder if those users would have used our hooks anyway, or if they're the same folks already using window.Clerk today.

It also feels like requiring a component tree structure to access something that's globally available might be more friction than necessary for cases like configuring an Axios interceptor at app initialization.

I guess my main question is: is the concern primarily about encouraging React users away from hooks (which could potentially be addressed through documentation), or is there a deeper architectural issue with having a non-concurrent-aware getToken exist alongside the React implementation?

Happy to dig into either - I just want to make sure we're solving for the right thing.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Dec 4, 2025

Open in StackBlitz

@clerk/agent-toolkit

npm i https://pkg.pr.new/@clerk/agent-toolkit@7325

@clerk/astro

npm i https://pkg.pr.new/@clerk/astro@7325

@clerk/backend

npm i https://pkg.pr.new/@clerk/backend@7325

@clerk/chrome-extension

npm i https://pkg.pr.new/@clerk/chrome-extension@7325

@clerk/clerk-js

npm i https://pkg.pr.new/@clerk/clerk-js@7325

@clerk/dev-cli

npm i https://pkg.pr.new/@clerk/dev-cli@7325

@clerk/expo

npm i https://pkg.pr.new/@clerk/expo@7325

@clerk/expo-passkeys

npm i https://pkg.pr.new/@clerk/expo-passkeys@7325

@clerk/express

npm i https://pkg.pr.new/@clerk/express@7325

@clerk/fastify

npm i https://pkg.pr.new/@clerk/fastify@7325

@clerk/localizations

npm i https://pkg.pr.new/@clerk/localizations@7325

@clerk/nextjs

npm i https://pkg.pr.new/@clerk/nextjs@7325

@clerk/nuxt

npm i https://pkg.pr.new/@clerk/nuxt@7325

@clerk/react

npm i https://pkg.pr.new/@clerk/react@7325

@clerk/react-router

npm i https://pkg.pr.new/@clerk/react-router@7325

@clerk/shared

npm i https://pkg.pr.new/@clerk/shared@7325

@clerk/tanstack-react-start

npm i https://pkg.pr.new/@clerk/tanstack-react-start@7325

@clerk/testing

npm i https://pkg.pr.new/@clerk/testing@7325

@clerk/ui

npm i https://pkg.pr.new/@clerk/ui@7325

@clerk/upgrade

npm i https://pkg.pr.new/@clerk/upgrade@7325

@clerk/vue

npm i https://pkg.pr.new/@clerk/vue@7325

commit: 46efb2c

@bratsos bratsos force-pushed the alexbratsos/user-4045-make-gettoken-callable-outside-of-react branch from a3303fc to 8938fb2 Compare December 5, 2025 13:01
@bratsos bratsos force-pushed the alexbratsos/user-4045-make-gettoken-callable-outside-of-react branch from 8938fb2 to ea3ef70 Compare December 5, 2025 16:35
@bratsos bratsos force-pushed the alexbratsos/user-4045-make-gettoken-callable-outside-of-react branch from 7733626 to 41a623b Compare December 8, 2025 14:22
@nikosdouvlis nikosdouvlis force-pushed the vincent-and-the-doctor branch from d24d455 to 12a12f5 Compare December 8, 2025 17:40
@nikosdouvlis nikosdouvlis deleted the branch main December 8, 2025 19:21
@bratsos bratsos reopened this Dec 19, 2025
@bratsos bratsos changed the base branch from vincent-and-the-doctor to main December 19, 2025 22:36
@bratsos bratsos force-pushed the alexbratsos/user-4045-make-gettoken-callable-outside-of-react branch from 41a623b to 46efb2c Compare December 19, 2025 22:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants