@clerk/react-router 2.0.3-canary.v20251006164457 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,7 +12,7 @@ import { useAwaitableNavigate } from "./useAwaitableNavigate.js";
12
12
  export * from "@clerk/clerk-react";
13
13
  var SDK_METADATA = {
14
14
  name: "@clerk/react-router",
15
- version: "2.0.3-canary.v20251006164457"
15
+ version: "2.1.0"
16
16
  };
17
17
  var awaitableNavigateRef = { current: void 0 };
18
18
  function ClerkProviderBase({ children, ...rest }) {
@@ -1,8 +1,8 @@
1
1
  import * as _clerk_backend from '@clerk/backend';
2
2
  import { DataFunctionArgs } from './loadOptions.js';
3
+ import '@clerk/backend/internal';
3
4
  import 'react-router';
4
5
  import './types.js';
5
- import '@clerk/backend/internal';
6
6
  import '@clerk/types';
7
7
 
8
8
  declare const clerkClient: (args: DataFunctionArgs) => _clerk_backend.ClerkClient;
@@ -13,7 +13,7 @@ var clerkClient = (args) => {
13
13
  domain,
14
14
  publishableKey,
15
15
  machineSecretKey,
16
- userAgent: `${"@clerk/react-router"}@${"2.0.3-canary.v20251006164457"}`
16
+ userAgent: `${"@clerk/react-router"}@${"2.1.0"}`
17
17
  });
18
18
  };
19
19
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/clerkClient.ts"],"sourcesContent":["import { createClerkClient } from '@clerk/backend';\n\nimport { type DataFunctionArgs, loadOptions } from './loadOptions';\n\nexport const clerkClient = (args: DataFunctionArgs) => {\n const options = loadOptions(args);\n\n const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey, machineSecretKey } = options;\n\n return createClerkClient({\n apiUrl,\n secretKey,\n jwtKey,\n proxyUrl,\n isSatellite,\n domain,\n publishableKey,\n machineSecretKey,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n });\n};\n"],"mappings":";AAAA,SAAS,yBAAyB;AAElC,SAAgC,mBAAmB;AAE5C,IAAM,cAAc,CAAC,SAA2B;AACrD,QAAM,UAAU,YAAY,IAAI;AAEhC,QAAM,EAAE,QAAQ,WAAW,QAAQ,UAAU,aAAa,QAAQ,gBAAgB,iBAAiB,IAAI;AAEvG,SAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,GAAG,qBAAY,IAAI,8BAAe;AAAA,EAC/C,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../src/server/clerkClient.ts"],"sourcesContent":["import { createClerkClient } from '@clerk/backend';\n\nimport { type DataFunctionArgs, loadOptions } from './loadOptions';\n\nexport const clerkClient = (args: DataFunctionArgs) => {\n const options = loadOptions(args);\n\n const { apiUrl, secretKey, jwtKey, proxyUrl, isSatellite, domain, publishableKey, machineSecretKey } = options;\n\n return createClerkClient({\n apiUrl,\n secretKey,\n jwtKey,\n proxyUrl,\n isSatellite,\n domain,\n publishableKey,\n machineSecretKey,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n });\n};\n"],"mappings":";AAAA,SAAS,yBAAyB;AAElC,SAAgC,mBAAmB;AAE5C,IAAM,cAAc,CAAC,SAA2B;AACrD,QAAM,UAAU,YAAY,IAAI;AAEhC,QAAM,EAAE,QAAQ,WAAW,QAAQ,UAAU,aAAa,QAAQ,gBAAgB,iBAAiB,IAAI;AAEvG,SAAO,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,GAAG,qBAAY,IAAI,OAAe;AAAA,EAC/C,CAAC;AACH;","names":[]}
@@ -13,7 +13,9 @@ var clerkMiddleware = (options) => {
13
13
  const loadedOptions = loadOptions(args, options);
14
14
  const { audience, authorizedParties } = loadedOptions;
15
15
  const { signInUrl, signUpUrl, afterSignInUrl, afterSignUpUrl } = loadedOptions;
16
+ const { organizationSyncOptions } = loadedOptions;
16
17
  const requestState = await clerkClient(args).authenticateRequest(clerkRequest, {
18
+ organizationSyncOptions,
17
19
  audience,
18
20
  authorizedParties,
19
21
  signInUrl,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/clerkMiddleware.ts"],"sourcesContent":["import type { AuthObject } from '@clerk/backend';\nimport type { RequestState } from '@clerk/backend/internal';\nimport { AuthStatus, constants, createClerkRequest } from '@clerk/backend/internal';\nimport { handleNetlifyCacheInDevInstance } from '@clerk/shared/netlifyCacheHandler';\nimport type { PendingSessionOptions } from '@clerk/types';\nimport type { MiddlewareFunction } from 'react-router';\nimport { createContext } from 'react-router';\n\nimport { clerkClient } from './clerkClient';\nimport { loadOptions } from './loadOptions';\nimport type { ClerkMiddlewareOptions } from './types';\nimport { patchRequest } from './utils';\n\nexport const authFnContext = createContext<((options?: PendingSessionOptions) => AuthObject) | null>(null);\nexport const requestStateContext = createContext<RequestState<any> | null>(null);\n\n/**\n * Middleware that integrates Clerk authentication into your React Router application.\n * It checks the request's cookies and headers for a session JWT and, if found,\n * attaches the Auth object to a context.\n *\n * @example\n * // react-router.config.ts\n * export default {\n * future: {\n * v8_middleware: true,\n * },\n * }\n *\n * // root.tsx\n * export const middleware: Route.MiddlewareFunction[] = [clerkMiddleware()]\n */\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): MiddlewareFunction<Response> => {\n return async (args, next) => {\n const clerkRequest = createClerkRequest(patchRequest(args.request));\n const loadedOptions = loadOptions(args, options);\n const { audience, authorizedParties } = loadedOptions;\n const { signInUrl, signUpUrl, afterSignInUrl, afterSignUpUrl } = loadedOptions;\n const requestState = await clerkClient(args).authenticateRequest(clerkRequest, {\n audience,\n authorizedParties,\n signInUrl,\n signUpUrl,\n afterSignInUrl,\n afterSignUpUrl,\n acceptsToken: 'any',\n });\n\n const locationHeader = requestState.headers.get(constants.Headers.Location);\n if (locationHeader) {\n handleNetlifyCacheInDevInstance({\n locationHeader,\n requestStateHeaders: requestState.headers,\n publishableKey: requestState.publishableKey,\n });\n // Trigger a handshake redirect\n return new Response(null, { status: 307, headers: requestState.headers });\n }\n\n if (requestState.status === AuthStatus.Handshake) {\n throw new Error('Clerk: handshake status without redirect');\n }\n\n args.context.set(authFnContext, (options?: PendingSessionOptions) => requestState.toAuth(options));\n args.context.set(requestStateContext, requestState);\n\n const response = await next();\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n response.headers.append(key, value);\n });\n }\n\n return response;\n };\n};\n"],"mappings":";AAEA,SAAS,YAAY,WAAW,0BAA0B;AAC1D,SAAS,uCAAuC;AAGhD,SAAS,qBAAqB;AAE9B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAE5B,SAAS,oBAAoB;AAEtB,IAAM,gBAAgB,cAAwE,IAAI;AAClG,IAAM,sBAAsB,cAAwC,IAAI;AAkBxE,IAAM,kBAAkB,CAAC,YAAmE;AACjG,SAAO,OAAO,MAAM,SAAS;AAC3B,UAAM,eAAe,mBAAmB,aAAa,KAAK,OAAO,CAAC;AAClE,UAAM,gBAAgB,YAAY,MAAM,OAAO;AAC/C,UAAM,EAAE,UAAU,kBAAkB,IAAI;AACxC,UAAM,EAAE,WAAW,WAAW,gBAAgB,eAAe,IAAI;AACjE,UAAM,eAAe,MAAM,YAAY,IAAI,EAAE,oBAAoB,cAAc;AAAA,MAC7E;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAED,UAAM,iBAAiB,aAAa,QAAQ,IAAI,UAAU,QAAQ,QAAQ;AAC1E,QAAI,gBAAgB;AAClB,sCAAgC;AAAA,QAC9B;AAAA,QACA,qBAAqB,aAAa;AAAA,QAClC,gBAAgB,aAAa;AAAA,MAC/B,CAAC;AAED,aAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,SAAS,aAAa,QAAQ,CAAC;AAAA,IAC1E;AAEA,QAAI,aAAa,WAAW,WAAW,WAAW;AAChD,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AAEA,SAAK,QAAQ,IAAI,eAAe,CAACA,aAAoC,aAAa,OAAOA,QAAO,CAAC;AACjG,SAAK,QAAQ,IAAI,qBAAqB,YAAY;AAElD,UAAM,WAAW,MAAM,KAAK;AAE5B,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC3C,iBAAS,QAAQ,OAAO,KAAK,KAAK;AAAA,MACpC,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;","names":["options"]}
1
+ {"version":3,"sources":["../../src/server/clerkMiddleware.ts"],"sourcesContent":["import type { AuthObject } from '@clerk/backend';\nimport type { RequestState } from '@clerk/backend/internal';\nimport { AuthStatus, constants, createClerkRequest } from '@clerk/backend/internal';\nimport { handleNetlifyCacheInDevInstance } from '@clerk/shared/netlifyCacheHandler';\nimport type { PendingSessionOptions } from '@clerk/types';\nimport type { MiddlewareFunction } from 'react-router';\nimport { createContext } from 'react-router';\n\nimport { clerkClient } from './clerkClient';\nimport { loadOptions } from './loadOptions';\nimport type { ClerkMiddlewareOptions } from './types';\nimport { patchRequest } from './utils';\n\nexport const authFnContext = createContext<((options?: PendingSessionOptions) => AuthObject) | null>(null);\nexport const requestStateContext = createContext<RequestState<any> | null>(null);\n\n/**\n * Middleware that integrates Clerk authentication into your React Router application.\n * It checks the request's cookies and headers for a session JWT and, if found,\n * attaches the Auth object to a context.\n *\n * @example\n * // react-router.config.ts\n * export default {\n * future: {\n * v8_middleware: true,\n * },\n * }\n *\n * // root.tsx\n * export const middleware: Route.MiddlewareFunction[] = [clerkMiddleware()]\n */\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): MiddlewareFunction<Response> => {\n return async (args, next) => {\n const clerkRequest = createClerkRequest(patchRequest(args.request));\n const loadedOptions = loadOptions(args, options);\n const { audience, authorizedParties } = loadedOptions;\n const { signInUrl, signUpUrl, afterSignInUrl, afterSignUpUrl } = loadedOptions;\n const { organizationSyncOptions } = loadedOptions;\n const requestState = await clerkClient(args).authenticateRequest(clerkRequest, {\n organizationSyncOptions,\n audience,\n authorizedParties,\n signInUrl,\n signUpUrl,\n afterSignInUrl,\n afterSignUpUrl,\n acceptsToken: 'any',\n });\n\n const locationHeader = requestState.headers.get(constants.Headers.Location);\n if (locationHeader) {\n handleNetlifyCacheInDevInstance({\n locationHeader,\n requestStateHeaders: requestState.headers,\n publishableKey: requestState.publishableKey,\n });\n // Trigger a handshake redirect\n return new Response(null, { status: 307, headers: requestState.headers });\n }\n\n if (requestState.status === AuthStatus.Handshake) {\n throw new Error('Clerk: handshake status without redirect');\n }\n\n args.context.set(authFnContext, (options?: PendingSessionOptions) => requestState.toAuth(options));\n args.context.set(requestStateContext, requestState);\n\n const response = await next();\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n response.headers.append(key, value);\n });\n }\n\n return response;\n };\n};\n"],"mappings":";AAEA,SAAS,YAAY,WAAW,0BAA0B;AAC1D,SAAS,uCAAuC;AAGhD,SAAS,qBAAqB;AAE9B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAE5B,SAAS,oBAAoB;AAEtB,IAAM,gBAAgB,cAAwE,IAAI;AAClG,IAAM,sBAAsB,cAAwC,IAAI;AAkBxE,IAAM,kBAAkB,CAAC,YAAmE;AACjG,SAAO,OAAO,MAAM,SAAS;AAC3B,UAAM,eAAe,mBAAmB,aAAa,KAAK,OAAO,CAAC;AAClE,UAAM,gBAAgB,YAAY,MAAM,OAAO;AAC/C,UAAM,EAAE,UAAU,kBAAkB,IAAI;AACxC,UAAM,EAAE,WAAW,WAAW,gBAAgB,eAAe,IAAI;AACjE,UAAM,EAAE,wBAAwB,IAAI;AACpC,UAAM,eAAe,MAAM,YAAY,IAAI,EAAE,oBAAoB,cAAc;AAAA,MAC7E;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAED,UAAM,iBAAiB,aAAa,QAAQ,IAAI,UAAU,QAAQ,QAAQ;AAC1E,QAAI,gBAAgB;AAClB,sCAAgC;AAAA,QAC9B;AAAA,QACA,qBAAqB,aAAa;AAAA,QAClC,gBAAgB,aAAa;AAAA,MAC/B,CAAC;AAED,aAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,SAAS,aAAa,QAAQ,CAAC;AAAA,IAC1E;AAEA,QAAI,aAAa,WAAW,WAAW,WAAW;AAChD,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AAEA,SAAK,QAAQ,IAAI,eAAe,CAACA,aAAoC,aAAa,OAAOA,QAAO,CAAC;AACjG,SAAK,QAAQ,IAAI,qBAAqB,YAAY;AAElD,UAAM,WAAW,MAAM,KAAK;AAE5B,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC3C,iBAAS,QAAQ,OAAO,KAAK,KAAK;AAAA,MACpC,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;","names":["options"]}
@@ -1,7 +1,7 @@
1
+ import * as _clerk_backend_internal from '@clerk/backend/internal';
1
2
  import { MiddlewareFunction } from 'react-router';
2
3
  import { ClerkMiddlewareOptions } from './types.js';
3
4
  import '@clerk/backend';
4
- import '@clerk/backend/internal';
5
5
  import '@clerk/types';
6
6
 
7
7
  type DataFunctionArgs = Parameters<MiddlewareFunction<Response>>[0];
@@ -22,6 +22,7 @@ declare const loadOptions: (args: DataFunctionArgs, overrides?: ClerkMiddlewareO
22
22
  signUpForceRedirectUrl: string;
23
23
  signInFallbackRedirectUrl: string;
24
24
  signUpFallbackRedirectUrl: string;
25
+ organizationSyncOptions?: _clerk_backend_internal.OrganizationSyncOptions;
25
26
  audience?: string | string[] | undefined;
26
27
  authorizedParties?: string[] | undefined;
27
28
  redirectUrl?: string | null;
@@ -42,6 +43,7 @@ declare const loadOptions: (args: DataFunctionArgs, overrides?: ClerkMiddlewareO
42
43
  signUpForceRedirectUrl: string;
43
44
  signInFallbackRedirectUrl: string;
44
45
  signUpFallbackRedirectUrl: string;
46
+ organizationSyncOptions?: _clerk_backend_internal.OrganizationSyncOptions;
45
47
  audience?: string | string[] | undefined;
46
48
  authorizedParties?: string[] | undefined;
47
49
  redirectUrl?: string | null;
@@ -62,6 +64,7 @@ declare const loadOptions: (args: DataFunctionArgs, overrides?: ClerkMiddlewareO
62
64
  signUpForceRedirectUrl: string;
63
65
  signInFallbackRedirectUrl: string;
64
66
  signUpFallbackRedirectUrl: string;
67
+ organizationSyncOptions?: _clerk_backend_internal.OrganizationSyncOptions;
65
68
  audience?: string | string[] | undefined;
66
69
  authorizedParties?: string[] | undefined;
67
70
  redirectUrl?: string | null;
@@ -1,5 +1,5 @@
1
1
  import { VerifyTokenOptions, Session, User, Organization } from '@clerk/backend';
2
- import { SignedInAuthObject, SignedOutAuthObject, RequestState } from '@clerk/backend/internal';
2
+ import { OrganizationSyncOptions, SignedInAuthObject, SignedOutAuthObject, RequestState } from '@clerk/backend/internal';
3
3
  import { MultiDomainAndOrProxy, SignInForceRedirectUrl, SignInFallbackRedirectUrl, SignUpForceRedirectUrl, SignUpFallbackRedirectUrl, LegacyRedirectProps } from '@clerk/types';
4
4
  import { LoaderFunctionArgs, UNSAFE_DataWithResponseInit, LoaderFunction } from 'react-router';
5
5
 
@@ -23,6 +23,12 @@ type ClerkMiddlewareOptions = {
23
23
  machineSecretKey?: string;
24
24
  signInUrl?: string;
25
25
  signUpUrl?: string;
26
+ /**
27
+ * Used to activate a specific [organization](https://clerk.com/docs/guides/organizations/overview) or [personal account](https://clerk.com/docs/guides/dashboard/overview) based on URL path parameters. If there's a mismatch between the active organization in the session (e.g., as reported by `auth()`) and the organization indicated by the URL, an attempt to activate the organization specified in the URL will be made.
28
+ *
29
+ * If the activation can't be performed, either because an organization doesn't exist or the user lacks access, the active organization in the session won't be changed. Ultimately, it's the responsibility of the page to verify that the resources are appropriate to render given the URL and handle mismatches appropriately (e.g., by returning a 404).
30
+ */
31
+ organizationSyncOptions?: OrganizationSyncOptions;
26
32
  } & Pick<VerifyTokenOptions, 'audience' | 'authorizedParties'> & MultiDomainAndOrProxy & SignInForceRedirectUrl & SignInFallbackRedirectUrl & SignUpForceRedirectUrl & SignUpFallbackRedirectUrl & LegacyRedirectProps;
27
33
  type RootAuthLoaderOptions = ClerkMiddlewareOptions & {
28
34
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clerk/react-router",
3
- "version": "2.0.3-canary.v20251006164457",
3
+ "version": "2.1.0",
4
4
  "description": "Clerk SDK for React Router",
5
5
  "keywords": [
6
6
  "clerk",
@@ -79,10 +79,10 @@
79
79
  "dependencies": {
80
80
  "cookie": "0.7.2",
81
81
  "tslib": "2.8.1",
82
- "@clerk/backend": "^2.17.2-canary.v20251006164457",
83
- "@clerk/clerk-react": "^5.51.0-canary.v20251006164457",
84
- "@clerk/shared": "^3.27.3-canary.v20251006164457",
85
- "@clerk/types": "^4.92.0-canary.v20251006164457"
82
+ "@clerk/backend": "^2.17.2",
83
+ "@clerk/clerk-react": "^5.51.0",
84
+ "@clerk/shared": "^3.27.3",
85
+ "@clerk/types": "^4.92.0"
86
86
  },
87
87
  "devDependencies": {
88
88
  "@types/cookie": "^0.6.0",