@clerk/tanstack-react-start 1.0.0-snapshot.v20260120164554 → 1.0.0-snapshot.v20260121133427

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 { jsxs, Fragment, jsx } from 'react/jsx-runtime';
12
12
  // src/client/ClerkProvider.tsx
13
13
  var SDK_METADATA = {
14
14
  name: "@clerk/tanstack-react-start",
15
- version: "1.0.0-snapshot.v20260120164554"
15
+ version: "1.0.0-snapshot.v20260121133427"
16
16
  };
17
17
  var awaitableNavigateRef = { current: void 0 };
18
18
  function ClerkProvider({
@@ -25,11 +25,17 @@ function ClerkProvider({
25
25
  awaitableNavigateRef.current = awaitableNavigate;
26
26
  }, [awaitableNavigate]);
27
27
  const clerkInitState = isClient() ? window.__clerk_init_state : clerkInitialState;
28
- const { clerkSsrState, ...restInitState } = pickFromClerkInitState(clerkInitState?.__internal_clerk_state);
28
+ const { clerkSsrState, __keylessClaimUrl, __keylessApiKeysUrl, ...restInitState } = pickFromClerkInitState(
29
+ clerkInitState?.__internal_clerk_state
30
+ );
29
31
  const mergedProps = {
30
32
  ...mergeWithPublicEnvs(restInitState),
31
33
  ...providerProps
32
34
  };
35
+ const keylessProps = __keylessClaimUrl ? {
36
+ __internal_keyless_claimKeylessApplicationUrl: __keylessClaimUrl,
37
+ __internal_keyless_copyInstanceKeysUrl: __keylessApiKeysUrl
38
+ } : {};
33
39
  return /* @__PURE__ */ jsxs(Fragment, { children: [
34
40
  /* @__PURE__ */ jsx(ScriptOnce, { children: `window.__clerk_init_state = ${JSON.stringify(clerkInitialState)};` }),
35
41
  /* @__PURE__ */ jsx(ClerkOptionsProvider, { options: mergedProps, children: /* @__PURE__ */ jsx(
@@ -46,6 +52,7 @@ function ClerkProvider({
46
52
  replace: true
47
53
  }),
48
54
  ...mergedProps,
55
+ ...keylessProps,
49
56
  children
50
57
  }
51
58
  ) })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/ClerkProvider.tsx"],"names":["ReactClerkProvider"],"mappings":";;;;;;;;;;;;AAcA,IAAM,YAAA,GAAe;AAAA,EACnB,IAAA,EAAM,6BAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,oBAAA,GAAyF,EAAE,OAAA,EAAS,MAAA,EAAU;AAE7G,SAAS,aAAA,CAAmC;AAAA,EACjD,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAE/C,EAAA,MAAM,iBAAA,GAAoB,qBAAA,EAAsB,EAAG,iBAAA,IAAqB,EAAC;AAEzE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,oBAAA,CAAqB,OAAA,GAAU,iBAAA;AAAA,EACjC,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,MAAM,cAAA,GAAiB,QAAA,EAAS,GAAK,MAAA,CAAe,kBAAA,GAAqB,iBAAA;AAEzE,EAAA,MAAM,EAAE,aAAA,EAAe,GAAG,eAAc,GAAI,sBAAA,CAAuB,gBAAgB,sBAAsB,CAAA;AAEzG,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,oBAAoB,aAAa,CAAA;AAAA,IACpC,GAAG;AAAA,GACL;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAY,QAAA,EAAA,CAAA,4BAAA,EAA+B,IAAA,CAAK,SAAA,CAAU,iBAAiB,CAAC,CAAA,CAAA,CAAA,EAAI,CAAA;AAAA,oBACjF,GAAA,CAAC,oBAAA,EAAA,EAAqB,OAAA,EAAS,WAAA,EAC7B,QAAA,kBAAA,GAAA;AAAA,MAACA,eAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,aAAA;AAAA,QACd,WAAA,EAAa,YAAA;AAAA,QACb,UAAA,EAAY,CAAC,EAAA,KACX,oBAAA,CAAqB,OAAA,GAAU;AAAA,UAC7B,EAAA;AAAA,UACA,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,QAEH,aAAA,EAAe,CAAC,EAAA,KACd,oBAAA,CAAqB,OAAA,GAAU;AAAA,UAC7B,EAAA;AAAA,UACA,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,QAEF,GAAG,WAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AACA,aAAA,CAAc,WAAA,GAAc,eAAA","file":"ClerkProvider.js","sourcesContent":["import { ClerkProvider as ReactClerkProvider } from '@clerk/react';\nimport type { Ui } from '@clerk/react/internal';\nimport { ScriptOnce } from '@tanstack/react-router';\nimport { getGlobalStartContext } from '@tanstack/react-start';\nimport { useEffect } from 'react';\n\nimport { isClient } from '../utils';\nimport { ClerkOptionsProvider } from './OptionsContext';\nimport type { TanstackStartClerkProviderProps } from './types';\nimport { useAwaitableNavigate } from './useAwaitableNavigate';\nimport { mergeWithPublicEnvs, pickFromClerkInitState } from './utils';\n\nexport * from '@clerk/react';\n\nconst SDK_METADATA = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nconst awaitableNavigateRef: { current: ReturnType<typeof useAwaitableNavigate> | undefined } = { current: undefined };\n\nexport function ClerkProvider<TUi extends Ui = Ui>({\n children,\n ...providerProps\n}: TanstackStartClerkProviderProps<TUi>): JSX.Element {\n const awaitableNavigate = useAwaitableNavigate();\n // @ts-expect-error: Untyped internal Clerk initial state\n const clerkInitialState = getGlobalStartContext()?.clerkInitialState ?? {};\n\n useEffect(() => {\n awaitableNavigateRef.current = awaitableNavigate;\n }, [awaitableNavigate]);\n\n const clerkInitState = isClient() ? (window as any).__clerk_init_state : clerkInitialState;\n\n const { clerkSsrState, ...restInitState } = pickFromClerkInitState(clerkInitState?.__internal_clerk_state);\n\n const mergedProps = {\n ...mergeWithPublicEnvs(restInitState),\n ...providerProps,\n };\n\n return (\n <>\n <ScriptOnce>{`window.__clerk_init_state = ${JSON.stringify(clerkInitialState)};`}</ScriptOnce>\n <ClerkOptionsProvider options={mergedProps}>\n <ReactClerkProvider\n initialState={clerkSsrState}\n sdkMetadata={SDK_METADATA}\n routerPush={(to: string) =>\n awaitableNavigateRef.current?.({\n to,\n replace: false,\n })\n }\n routerReplace={(to: string) =>\n awaitableNavigateRef.current?.({\n to,\n replace: true,\n })\n }\n {...mergedProps}\n >\n {children}\n </ReactClerkProvider>\n </ClerkOptionsProvider>\n </>\n );\n}\nClerkProvider.displayName = 'ClerkProvider';\n"]}
1
+ {"version":3,"sources":["../../src/client/ClerkProvider.tsx"],"names":["ReactClerkProvider"],"mappings":";;;;;;;;;;;;AAcA,IAAM,YAAA,GAAe;AAAA,EACnB,IAAA,EAAM,6BAAA;AAAA,EACN,OAAA,EAAS;AACX,CAAA;AAEA,IAAM,oBAAA,GAAyF,EAAE,OAAA,EAAS,MAAA,EAAU;AAE7G,SAAS,aAAA,CAAmC;AAAA,EACjD,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsD;AACpD,EAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAE/C,EAAA,MAAM,iBAAA,GAAoB,qBAAA,EAAsB,EAAG,iBAAA,IAAqB,EAAC;AAEzE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,oBAAA,CAAqB,OAAA,GAAU,iBAAA;AAAA,EACjC,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,MAAM,cAAA,GAAiB,QAAA,EAAS,GAAK,MAAA,CAAe,kBAAA,GAAqB,iBAAA;AAEzE,EAAA,MAAM,EAAE,aAAA,EAAe,iBAAA,EAAmB,mBAAA,EAAqB,GAAG,eAAc,GAAI,sBAAA;AAAA,IAClF,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,GAAG,oBAAoB,aAAa,CAAA;AAAA,IACpC,GAAG;AAAA,GACL;AAGA,EAAA,MAAM,eAAe,iBAAA,GACjB;AAAA,IACE,6CAAA,EAA+C,iBAAA;AAAA,IAC/C,sCAAA,EAAwC;AAAA,MAE1C,EAAC;AAEL,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAY,QAAA,EAAA,CAAA,4BAAA,EAA+B,IAAA,CAAK,SAAA,CAAU,iBAAiB,CAAC,CAAA,CAAA,CAAA,EAAI,CAAA;AAAA,oBACjF,GAAA,CAAC,oBAAA,EAAA,EAAqB,OAAA,EAAS,WAAA,EAC7B,QAAA,kBAAA,GAAA;AAAA,MAACA,eAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAc,aAAA;AAAA,QACd,WAAA,EAAa,YAAA;AAAA,QACb,UAAA,EAAY,CAAC,EAAA,KACX,oBAAA,CAAqB,OAAA,GAAU;AAAA,UAC7B,EAAA;AAAA,UACA,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,QAEH,aAAA,EAAe,CAAC,EAAA,KACd,oBAAA,CAAqB,OAAA,GAAU;AAAA,UAC7B,EAAA;AAAA,UACA,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,QAEF,GAAG,WAAA;AAAA,QACH,GAAG,YAAA;AAAA,QAEH;AAAA;AAAA,KACH,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AACA,aAAA,CAAc,WAAA,GAAc,eAAA","file":"ClerkProvider.js","sourcesContent":["import { ClerkProvider as ReactClerkProvider } from '@clerk/react';\nimport type { Ui } from '@clerk/react/internal';\nimport { ScriptOnce } from '@tanstack/react-router';\nimport { getGlobalStartContext } from '@tanstack/react-start';\nimport { useEffect } from 'react';\n\nimport { isClient } from '../utils';\nimport { ClerkOptionsProvider } from './OptionsContext';\nimport type { TanstackStartClerkProviderProps } from './types';\nimport { useAwaitableNavigate } from './useAwaitableNavigate';\nimport { mergeWithPublicEnvs, pickFromClerkInitState } from './utils';\n\nexport * from '@clerk/react';\n\nconst SDK_METADATA = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nconst awaitableNavigateRef: { current: ReturnType<typeof useAwaitableNavigate> | undefined } = { current: undefined };\n\nexport function ClerkProvider<TUi extends Ui = Ui>({\n children,\n ...providerProps\n}: TanstackStartClerkProviderProps<TUi>): JSX.Element {\n const awaitableNavigate = useAwaitableNavigate();\n // @ts-expect-error: Untyped internal Clerk initial state\n const clerkInitialState = getGlobalStartContext()?.clerkInitialState ?? {};\n\n useEffect(() => {\n awaitableNavigateRef.current = awaitableNavigate;\n }, [awaitableNavigate]);\n\n const clerkInitState = isClient() ? (window as any).__clerk_init_state : clerkInitialState;\n\n const { clerkSsrState, __keylessClaimUrl, __keylessApiKeysUrl, ...restInitState } = pickFromClerkInitState(\n clerkInitState?.__internal_clerk_state,\n );\n\n const mergedProps = {\n ...mergeWithPublicEnvs(restInitState),\n ...providerProps,\n };\n\n // Add keyless mode props if present\n const keylessProps = __keylessClaimUrl\n ? {\n __internal_keyless_claimKeylessApplicationUrl: __keylessClaimUrl,\n __internal_keyless_copyInstanceKeysUrl: __keylessApiKeysUrl,\n }\n : {};\n\n return (\n <>\n <ScriptOnce>{`window.__clerk_init_state = ${JSON.stringify(clerkInitialState)};`}</ScriptOnce>\n <ClerkOptionsProvider options={mergedProps}>\n <ReactClerkProvider\n initialState={clerkSsrState}\n sdkMetadata={SDK_METADATA}\n routerPush={(to: string) =>\n awaitableNavigateRef.current?.({\n to,\n replace: false,\n })\n }\n routerReplace={(to: string) =>\n awaitableNavigateRef.current?.({\n to,\n replace: true,\n })\n }\n {...mergedProps}\n {...keylessProps}\n >\n {children}\n </ReactClerkProvider>\n </ClerkOptionsProvider>\n </>\n );\n}\nClerkProvider.displayName = 'ClerkProvider';\n"]}
@@ -1,6 +1,8 @@
1
1
  export { ClerkProvider } from './ClerkProvider.js';
2
2
  export { OrganizationList, OrganizationProfile, SignIn, SignUp, UserProfile } from './uiComponents.js';
3
3
  export * from '@clerk/react';
4
+ export { UNSAFE_PortalProvider } from '@clerk/react';
5
+ import '@clerk/shared/getToken';
4
6
  import '@clerk/react/internal';
5
7
  import './types.js';
6
8
  import '@clerk/shared/types';
@@ -1,4 +1,5 @@
1
1
  export * from './ClerkProvider.js';
2
2
  export { OrganizationList, OrganizationProfile, SignIn, SignUp, UserProfile } from './uiComponents.js';
3
+ export { UNSAFE_PortalProvider } from '@clerk/react';
3
4
  //# sourceMappingURL=index.js.map
4
5
  //# sourceMappingURL=index.js.map
@@ -7,6 +7,8 @@ import 'react';
7
7
  type TanStackProviderAndInitialProps = Omit<TanstackStartClerkProviderProps, 'children'>;
8
8
  declare const pickFromClerkInitState: (clerkInitState: any) => TanStackProviderAndInitialProps & {
9
9
  clerkSsrState: any;
10
+ __keylessClaimUrl?: string;
11
+ __keylessApiKeysUrl?: string;
10
12
  };
11
13
  declare const mergeWithPublicEnvs: (restInitState: any) => any;
12
14
 
@@ -18,7 +18,9 @@ var pickFromClerkInitState = (clerkInitState) => {
18
18
  __signInForceRedirectUrl,
19
19
  __signUpForceRedirectUrl,
20
20
  __signInFallbackRedirectUrl,
21
- __signUpFallbackRedirectUrl
21
+ __signUpFallbackRedirectUrl,
22
+ __keylessClaimUrl,
23
+ __keylessApiKeysUrl
22
24
  } = clerkInitState || {};
23
25
  return {
24
26
  clerkSsrState: __clerk_ssr_state,
@@ -38,7 +40,9 @@ var pickFromClerkInitState = (clerkInitState) => {
38
40
  signInForceRedirectUrl: __signInForceRedirectUrl,
39
41
  signUpForceRedirectUrl: __signUpForceRedirectUrl,
40
42
  signInFallbackRedirectUrl: __signInFallbackRedirectUrl,
41
- signUpFallbackRedirectUrl: __signUpFallbackRedirectUrl
43
+ signUpFallbackRedirectUrl: __signUpFallbackRedirectUrl,
44
+ __keylessClaimUrl,
45
+ __keylessApiKeysUrl
42
46
  };
43
47
  };
44
48
  var mergeWithPublicEnvs = (restInitState) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/utils.ts"],"names":[],"mappings":";;;AAKO,IAAM,sBAAA,GAAyB,CACpC,cAAA,KAGG;AACH,EAAA,MAAM;AAAA,IACJ,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,wBAAA;AAAA,IACA,wBAAA;AAAA,IACA,2BAAA;AAAA,IACA;AAAA,GACF,GAAI,kBAAkB,EAAC;AAEvB,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,iBAAA;AAAA,IACf,cAAA,EAAgB,gBAAA;AAAA,IAChB,QAAA,EAAU,UAAA;AAAA,IACV,MAAA,EAAQ,QAAA;AAAA,IACR,WAAA,EAAa,CAAC,CAAC,aAAA;AAAA,IACf,SAAA,EAAW,WAAA;AAAA,IACX,SAAA,EAAW,WAAA;AAAA,IACX,UAAA,EAAY,YAAA;AAAA,IACZ,UAAA,EAAY,YAAA;AAAA,IACZ,cAAA,EAAgB,gBAAA;AAAA,IAChB,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,mBAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA,IACA,sBAAA,EAAwB,wBAAA;AAAA,IACxB,sBAAA,EAAwB,wBAAA;AAAA,IACxB,yBAAA,EAA2B,2BAAA;AAAA,IAC3B,yBAAA,EAA2B;AAAA,GAC7B;AACF;AAEO,IAAM,mBAAA,GAAsB,CAAC,aAAA,KAAuB;AACzD,EAAA,OAAO;AAAA,IACL,GAAG,aAAA;AAAA,IACH,cAAA,EAAgB,aAAA,CAAc,cAAA,IAAkB,qBAAA,EAAsB,CAAE,cAAA;AAAA,IACxE,MAAA,EAAQ,aAAA,CAAc,MAAA,IAAU,qBAAA,EAAsB,CAAE,MAAA;AAAA,IACxD,WAAA,EAAa,aAAA,CAAc,WAAA,IAAe,qBAAA,EAAsB,CAAE,WAAA;AAAA,IAClE,SAAA,EAAW,aAAA,CAAc,SAAA,IAAa,qBAAA,EAAsB,CAAE,SAAA;AAAA,IAC9D,SAAA,EAAW,aAAA,CAAc,SAAA,IAAa,qBAAA,EAAsB,CAAE,SAAA;AAAA,IAC9D,UAAA,EAAY,aAAA,CAAc,UAAA,IAAc,qBAAA,EAAsB,CAAE,UAAA;AAAA,IAChE,UAAA,EAAY,aAAA,CAAc,UAAA,IAAc,qBAAA,EAAsB,CAAE,UAAA;AAAA,IAChE,cAAA,EAAgB,aAAA,CAAc,cAAA,IAAkB,qBAAA,EAAsB,CAAE,cAAA;AAAA,IACxE,wBAAwB,aAAA,CAAc,sBAAA;AAAA,IACtC,cAAA,EAAgB,aAAA,CAAc,cAAA,IAAkB,qBAAA,EAAsB,CAAE;AAAA,GAC1E;AACF","file":"utils.js","sourcesContent":["import { getPublicEnvVariables } from '../utils/env';\nimport type { TanstackStartClerkProviderProps } from './types';\n\ntype TanStackProviderAndInitialProps = Omit<TanstackStartClerkProviderProps, 'children'>;\n\nexport const pickFromClerkInitState = (\n clerkInitState: any,\n): TanStackProviderAndInitialProps & {\n clerkSsrState: any;\n} => {\n const {\n __clerk_ssr_state,\n __publishableKey,\n __proxyUrl,\n __domain,\n __isSatellite,\n __signInUrl,\n __signUpUrl,\n __clerkJSUrl,\n __clerkUiUrl,\n __clerkJSVersion,\n __telemetryDisabled,\n __telemetryDebug,\n __signInForceRedirectUrl,\n __signUpForceRedirectUrl,\n __signInFallbackRedirectUrl,\n __signUpFallbackRedirectUrl,\n } = clerkInitState || {};\n\n return {\n clerkSsrState: __clerk_ssr_state,\n publishableKey: __publishableKey,\n proxyUrl: __proxyUrl,\n domain: __domain,\n isSatellite: !!__isSatellite,\n signInUrl: __signInUrl,\n signUpUrl: __signUpUrl,\n clerkJSUrl: __clerkJSUrl,\n clerkUiUrl: __clerkUiUrl,\n clerkJSVersion: __clerkJSVersion,\n telemetry: {\n disabled: __telemetryDisabled,\n debug: __telemetryDebug,\n },\n signInForceRedirectUrl: __signInForceRedirectUrl,\n signUpForceRedirectUrl: __signUpForceRedirectUrl,\n signInFallbackRedirectUrl: __signInFallbackRedirectUrl,\n signUpFallbackRedirectUrl: __signUpFallbackRedirectUrl,\n };\n};\n\nexport const mergeWithPublicEnvs = (restInitState: any) => {\n return {\n ...restInitState,\n publishableKey: restInitState.publishableKey || getPublicEnvVariables().publishableKey,\n domain: restInitState.domain || getPublicEnvVariables().domain,\n isSatellite: restInitState.isSatellite || getPublicEnvVariables().isSatellite,\n signInUrl: restInitState.signInUrl || getPublicEnvVariables().signInUrl,\n signUpUrl: restInitState.signUpUrl || getPublicEnvVariables().signUpUrl,\n clerkJSUrl: restInitState.clerkJSUrl || getPublicEnvVariables().clerkJsUrl,\n clerkUiUrl: restInitState.clerkUiUrl || getPublicEnvVariables().clerkUiUrl,\n clerkJSVersion: restInitState.clerkJSVersion || getPublicEnvVariables().clerkJsVersion,\n signInForceRedirectUrl: restInitState.signInForceRedirectUrl,\n clerkJSVariant: restInitState.clerkJSVariant || getPublicEnvVariables().clerkJsVariant,\n };\n};\n"]}
1
+ {"version":3,"sources":["../../src/client/utils.ts"],"names":[],"mappings":";;;AAKO,IAAM,sBAAA,GAAyB,CACpC,cAAA,KAKG;AACH,EAAA,MAAM;AAAA,IACJ,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,wBAAA;AAAA,IACA,wBAAA;AAAA,IACA,2BAAA;AAAA,IACA,2BAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF,GAAI,kBAAkB,EAAC;AAEvB,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,iBAAA;AAAA,IACf,cAAA,EAAgB,gBAAA;AAAA,IAChB,QAAA,EAAU,UAAA;AAAA,IACV,MAAA,EAAQ,QAAA;AAAA,IACR,WAAA,EAAa,CAAC,CAAC,aAAA;AAAA,IACf,SAAA,EAAW,WAAA;AAAA,IACX,SAAA,EAAW,WAAA;AAAA,IACX,UAAA,EAAY,YAAA;AAAA,IACZ,UAAA,EAAY,YAAA;AAAA,IACZ,cAAA,EAAgB,gBAAA;AAAA,IAChB,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,mBAAA;AAAA,MACV,KAAA,EAAO;AAAA,KACT;AAAA,IACA,sBAAA,EAAwB,wBAAA;AAAA,IACxB,sBAAA,EAAwB,wBAAA;AAAA,IACxB,yBAAA,EAA2B,2BAAA;AAAA,IAC3B,yBAAA,EAA2B,2BAAA;AAAA,IAC3B,iBAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,IAAM,mBAAA,GAAsB,CAAC,aAAA,KAAuB;AACzD,EAAA,OAAO;AAAA,IACL,GAAG,aAAA;AAAA,IACH,cAAA,EAAgB,aAAA,CAAc,cAAA,IAAkB,qBAAA,EAAsB,CAAE,cAAA;AAAA,IACxE,MAAA,EAAQ,aAAA,CAAc,MAAA,IAAU,qBAAA,EAAsB,CAAE,MAAA;AAAA,IACxD,WAAA,EAAa,aAAA,CAAc,WAAA,IAAe,qBAAA,EAAsB,CAAE,WAAA;AAAA,IAClE,SAAA,EAAW,aAAA,CAAc,SAAA,IAAa,qBAAA,EAAsB,CAAE,SAAA;AAAA,IAC9D,SAAA,EAAW,aAAA,CAAc,SAAA,IAAa,qBAAA,EAAsB,CAAE,SAAA;AAAA,IAC9D,UAAA,EAAY,aAAA,CAAc,UAAA,IAAc,qBAAA,EAAsB,CAAE,UAAA;AAAA,IAChE,UAAA,EAAY,aAAA,CAAc,UAAA,IAAc,qBAAA,EAAsB,CAAE,UAAA;AAAA,IAChE,cAAA,EAAgB,aAAA,CAAc,cAAA,IAAkB,qBAAA,EAAsB,CAAE,cAAA;AAAA,IACxE,wBAAwB,aAAA,CAAc,sBAAA;AAAA,IACtC,cAAA,EAAgB,aAAA,CAAc,cAAA,IAAkB,qBAAA,EAAsB,CAAE;AAAA,GAC1E;AACF","file":"utils.js","sourcesContent":["import { getPublicEnvVariables } from '../utils/env';\nimport type { TanstackStartClerkProviderProps } from './types';\n\ntype TanStackProviderAndInitialProps = Omit<TanstackStartClerkProviderProps, 'children'>;\n\nexport const pickFromClerkInitState = (\n clerkInitState: any,\n): TanStackProviderAndInitialProps & {\n clerkSsrState: any;\n __keylessClaimUrl?: string;\n __keylessApiKeysUrl?: string;\n} => {\n const {\n __clerk_ssr_state,\n __publishableKey,\n __proxyUrl,\n __domain,\n __isSatellite,\n __signInUrl,\n __signUpUrl,\n __clerkJSUrl,\n __clerkUiUrl,\n __clerkJSVersion,\n __telemetryDisabled,\n __telemetryDebug,\n __signInForceRedirectUrl,\n __signUpForceRedirectUrl,\n __signInFallbackRedirectUrl,\n __signUpFallbackRedirectUrl,\n __keylessClaimUrl,\n __keylessApiKeysUrl,\n } = clerkInitState || {};\n\n return {\n clerkSsrState: __clerk_ssr_state,\n publishableKey: __publishableKey,\n proxyUrl: __proxyUrl,\n domain: __domain,\n isSatellite: !!__isSatellite,\n signInUrl: __signInUrl,\n signUpUrl: __signUpUrl,\n clerkJSUrl: __clerkJSUrl,\n clerkUiUrl: __clerkUiUrl,\n clerkJSVersion: __clerkJSVersion,\n telemetry: {\n disabled: __telemetryDisabled,\n debug: __telemetryDebug,\n },\n signInForceRedirectUrl: __signInForceRedirectUrl,\n signUpForceRedirectUrl: __signUpForceRedirectUrl,\n signInFallbackRedirectUrl: __signInFallbackRedirectUrl,\n signUpFallbackRedirectUrl: __signUpFallbackRedirectUrl,\n __keylessClaimUrl,\n __keylessApiKeysUrl,\n };\n};\n\nexport const mergeWithPublicEnvs = (restInitState: any) => {\n return {\n ...restInitState,\n publishableKey: restInitState.publishableKey || getPublicEnvVariables().publishableKey,\n domain: restInitState.domain || getPublicEnvVariables().domain,\n isSatellite: restInitState.isSatellite || getPublicEnvVariables().isSatellite,\n signInUrl: restInitState.signInUrl || getPublicEnvVariables().signInUrl,\n signUpUrl: restInitState.signUpUrl || getPublicEnvVariables().signUpUrl,\n clerkJSUrl: restInitState.clerkJSUrl || getPublicEnvVariables().clerkJsUrl,\n clerkUiUrl: restInitState.clerkUiUrl || getPublicEnvVariables().clerkUiUrl,\n clerkJSVersion: restInitState.clerkJSVersion || getPublicEnvVariables().clerkJsVersion,\n signInForceRedirectUrl: restInitState.signInForceRedirectUrl,\n clerkJSVariant: restInitState.clerkJSVariant || getPublicEnvVariables().clerkJsVariant,\n };\n};\n"]}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export { ClerkProvider } from './client/ClerkProvider.js';
2
2
  export { OrganizationList, OrganizationProfile, SignIn, SignUp, UserProfile } from './client/uiComponents.js';
3
3
  export * from '@clerk/react';
4
+ export { UNSAFE_PortalProvider } from '@clerk/react';
5
+ export { getToken } from '@clerk/shared/getToken';
4
6
  import '@clerk/react/internal';
5
7
  import './client/types.js';
6
8
  import '@clerk/shared/types';
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './client/index.js';
2
+ export { getToken } from '@clerk/shared/getToken';
2
3
  import { setErrorThrowerOptions } from '@clerk/react/internal';
3
4
 
4
5
  // src/index.ts
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;AAIA,sBAAA,CAAuB,EAAE,WAAA,EAAa,6BAAA,EAAc,CAAA","file":"index.js","sourcesContent":["export * from './client/index';\n\n// Override Clerk React error thrower to show that errors come from @clerk/tanstack-react-start\nimport { setErrorThrowerOptions } from '@clerk/react/internal';\nsetErrorThrowerOptions({ packageName: PACKAGE_NAME });\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAKA,sBAAA,CAAuB,EAAE,WAAA,EAAa,6BAAA,EAAc,CAAA","file":"index.js","sourcesContent":["export * from './client/index';\nexport { getToken } from '@clerk/shared/getToken';\n\n// Override Clerk React error thrower to show that errors come from @clerk/tanstack-react-start\nimport { setErrorThrowerOptions } from '@clerk/react/internal';\nsetErrorThrowerOptions({ packageName: PACKAGE_NAME });\n"]}
@@ -10,7 +10,7 @@ var clerkClient = (options) => {
10
10
  publishableKey: commonEnv.PUBLISHABLE_KEY,
11
11
  apiUrl: commonEnv.API_URL,
12
12
  apiVersion: commonEnv.API_VERSION,
13
- userAgent: `${"@clerk/tanstack-react-start"}@${"1.0.0-snapshot.v20260120164554"}`,
13
+ userAgent: `${"@clerk/tanstack-react-start"}@${"1.0.0-snapshot.v20260121133427"}`,
14
14
  proxyUrl: commonEnv.PROXY_URL,
15
15
  domain: commonEnv.DOMAIN,
16
16
  isSatellite: commonEnv.IS_SATELLITE,
@@ -1,15 +1,33 @@
1
1
  import { createClerkRequest, constants, AuthStatus } from '@clerk/backend/internal';
2
2
  import { handleNetlifyCacheInDevInstance } from '@clerk/shared/netlifyCacheHandler';
3
3
  import { createMiddleware, json } from '@tanstack/react-start';
4
+ import { canUseKeyless } from '../utils/feature-flags.js';
4
5
  import { clerkClient } from './clerkClient.js';
6
+ import { resolveKeysWithKeylessFallback } from './keyless/utils.js';
5
7
  import { loadOptions } from './loadOptions.js';
6
8
  import { patchRequest, getResponseClerkState } from './utils/index.js';
7
9
 
8
10
  // src/server/clerkMiddleware.ts
9
11
  var clerkMiddleware = (options) => {
10
- return createMiddleware().server(async (args) => {
11
- const clerkRequest = createClerkRequest(patchRequest(args.request));
12
- const loadedOptions = loadOptions(clerkRequest, options);
12
+ return createMiddleware().server(async ({ request, next }) => {
13
+ const clerkRequest = createClerkRequest(patchRequest(request));
14
+ const loadedOptions = loadOptions(clerkRequest, {
15
+ ...options,
16
+ publishableKey: options?.publishableKey,
17
+ secretKey: options?.secretKey
18
+ });
19
+ const {
20
+ publishableKey,
21
+ secretKey,
22
+ claimUrl: keylessClaimUrl,
23
+ apiKeysUrl: keylessApiKeysUrl
24
+ } = await resolveKeysWithKeylessFallback(loadedOptions.publishableKey, loadedOptions.secretKey);
25
+ if (publishableKey) {
26
+ loadedOptions.publishableKey = publishableKey;
27
+ }
28
+ if (secretKey) {
29
+ loadedOptions.secretKey = secretKey;
30
+ }
13
31
  const requestState = await clerkClient().authenticateRequest(clerkRequest, {
14
32
  ...loadedOptions,
15
33
  acceptsToken: "any"
@@ -27,7 +45,14 @@ var clerkMiddleware = (options) => {
27
45
  throw new Error("Clerk: handshake status without redirect");
28
46
  }
29
47
  const clerkInitialState = getResponseClerkState(requestState, loadedOptions);
30
- const result = await args.next({
48
+ if (canUseKeyless && keylessClaimUrl) {
49
+ clerkInitialState.__internal_clerk_state = {
50
+ ...clerkInitialState.__internal_clerk_state,
51
+ __keylessClaimUrl: keylessClaimUrl,
52
+ __keylessApiKeysUrl: keylessApiKeysUrl
53
+ };
54
+ }
55
+ const result = await next({
31
56
  context: {
32
57
  clerkInitialState,
33
58
  auth: (opts) => requestState.toAuth(opts)
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/clerkMiddleware.ts"],"names":[],"mappings":";;;;;;;;AAYO,IAAM,eAAA,GAAkB,CAAC,OAAA,KAA2D;AACzF,EAAA,OAAO,gBAAA,EAAiB,CAAE,MAAA,CAAO,OAAM,IAAA,KAAQ;AAC7C,IAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,YAAA,CAAa,IAAA,CAAK,OAAO,CAAC,CAAA;AAClE,IAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,YAAA,EAAc,OAAO,CAAA;AACvD,IAAA,MAAM,YAAA,GAAe,MAAM,WAAA,EAAY,CAAE,oBAAoB,YAAA,EAAc;AAAA,MACzE,GAAG,aAAA;AAAA,MACH,YAAA,EAAc;AAAA,KACf,CAAA;AAED,IAAA,MAAM,iBAAiB,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,QAAQ,QAAQ,CAAA;AAC1E,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,+BAAA,CAAgC;AAAA,QAC9B,cAAA;AAAA,QACA,qBAAqB,YAAA,CAAa,OAAA;AAAA,QAClC,gBAAgB,YAAA,CAAa;AAAA,OAC9B,CAAA;AAGD,MAAA,MAAM,IAAA,CAAK,MAAM,EAAE,MAAA,EAAQ,KAAK,OAAA,EAAS,YAAA,CAAa,SAAS,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI,YAAA,CAAa,MAAA,KAAW,UAAA,CAAW,SAAA,EAAW;AAChD,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,MAAM,iBAAA,GAAoB,qBAAA,CAAsB,YAAA,EAA8B,aAAa,CAAA;AAE3F,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAK;AAAA,MAC7B,OAAA,EAAS;AAAA,QACP,iBAAA;AAAA,QACA,IAAA,EAAM,CAAC,IAAA,KAAiC,YAAA,CAAa,OAAO,IAAI;AAAA;AAClE,KACD,CAAA;AAED,IAAA,IAAI,aAAa,OAAA,EAAS;AACxB,MAAA,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3C,QAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH","file":"clerkMiddleware.js","sourcesContent":["import 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/shared/types';\nimport type { AnyRequestMiddleware } from '@tanstack/react-start';\nimport { createMiddleware, json } from '@tanstack/react-start';\n\nimport { clerkClient } from './clerkClient';\nimport { loadOptions } from './loadOptions';\nimport type { ClerkMiddlewareOptions } from './types';\nimport { getResponseClerkState, patchRequest } from './utils';\n\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): AnyRequestMiddleware => {\n return createMiddleware().server(async args => {\n const clerkRequest = createClerkRequest(patchRequest(args.request));\n const loadedOptions = loadOptions(clerkRequest, options);\n const requestState = await clerkClient().authenticateRequest(clerkRequest, {\n ...loadedOptions,\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 // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw json(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 const clerkInitialState = getResponseClerkState(requestState as RequestState, loadedOptions);\n\n const result = await args.next({\n context: {\n clerkInitialState,\n auth: (opts?: PendingSessionOptions) => requestState.toAuth(opts),\n },\n });\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n result.response.headers.append(key, value);\n });\n }\n\n return result;\n });\n};\n"]}
1
+ {"version":3,"sources":["../../src/server/clerkMiddleware.ts"],"names":[],"mappings":";;;;;;;;;;AAcO,IAAM,eAAA,GAAkB,CAAC,OAAA,KAA2D;AACzF,EAAA,OAAO,kBAAiB,CAAE,MAAA,CAAO,OAAO,EAAE,OAAA,EAAS,MAAK,KAAM;AAC5D,IAAA,MAAM,YAAA,GAAe,kBAAA,CAAmB,YAAA,CAAa,OAAO,CAAC,CAAA;AAG7D,IAAA,MAAM,aAAA,GAAgB,YAAY,YAAA,EAAc;AAAA,MAC9C,GAAG,OAAA;AAAA,MACH,gBAAgB,OAAA,EAAS,cAAA;AAAA,MACzB,WAAW,OAAA,EAAS;AAAA,KACrB,CAAA;AAGD,IAAA,MAAM;AAAA,MACJ,cAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA,EAAU,eAAA;AAAA,MACV,UAAA,EAAY;AAAA,QACV,MAAM,8BAAA,CAA+B,aAAA,CAAc,cAAA,EAAgB,cAAc,SAAS,CAAA;AAE9F,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,aAAA,CAAc,cAAA,GAAiB,cAAA;AAAA,IACjC;AACA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,aAAA,CAAc,SAAA,GAAY,SAAA;AAAA,IAC5B;AAEA,IAAA,MAAM,YAAA,GAAe,MAAM,WAAA,EAAY,CAAE,oBAAoB,YAAA,EAAc;AAAA,MACzE,GAAG,aAAA;AAAA,MACH,YAAA,EAAc;AAAA,KACf,CAAA;AAED,IAAA,MAAM,iBAAiB,YAAA,CAAa,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,QAAQ,QAAQ,CAAA;AAC1E,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,+BAAA,CAAgC;AAAA,QAC9B,cAAA;AAAA,QACA,qBAAqB,YAAA,CAAa,OAAA;AAAA,QAClC,gBAAgB,YAAA,CAAa;AAAA,OAC9B,CAAA;AAGD,MAAA,MAAM,IAAA,CAAK,MAAM,EAAE,MAAA,EAAQ,KAAK,OAAA,EAAS,YAAA,CAAa,SAAS,CAAA;AAAA,IACjE;AAEA,IAAA,IAAI,YAAA,CAAa,MAAA,KAAW,UAAA,CAAW,SAAA,EAAW;AAChD,MAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,IAC5D;AAEA,IAAA,MAAM,iBAAA,GAAoB,qBAAA,CAAsB,YAAA,EAA8B,aAAa,CAAA;AAG3F,IAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,MAAC,kBAA8C,sBAAA,GAAyB;AAAA,QACtE,GAAK,iBAAA,CAA8C,sBAAA;AAAA,QACnD,iBAAA,EAAmB,eAAA;AAAA,QACnB,mBAAA,EAAqB;AAAA,OACvB;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK;AAAA,MACxB,OAAA,EAAS;AAAA,QACP,iBAAA;AAAA,QACA,IAAA,EAAM,CAAC,IAAA,KAAiC,YAAA,CAAa,OAAO,IAAI;AAAA;AAClE,KACD,CAAA;AAED,IAAA,IAAI,aAAa,OAAA,EAAS;AACxB,MAAA,YAAA,CAAa,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AAC3C,QAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,GAAA,EAAK,KAAK,CAAA;AAAA,MAC3C,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT,CAAC,CAAA;AACH","file":"clerkMiddleware.js","sourcesContent":["import 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/shared/types';\nimport type { AnyRequestMiddleware } from '@tanstack/react-start';\nimport { createMiddleware, json } from '@tanstack/react-start';\n\nimport { canUseKeyless } from '../utils/feature-flags';\nimport { clerkClient } from './clerkClient';\nimport { resolveKeysWithKeylessFallback } from './keyless/utils';\nimport { loadOptions } from './loadOptions';\nimport type { ClerkMiddlewareOptions } from './types';\nimport { getResponseClerkState, patchRequest } from './utils';\n\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): AnyRequestMiddleware => {\n return createMiddleware().server(async ({ request, next }) => {\n const clerkRequest = createClerkRequest(patchRequest(request));\n\n // Load options with resolved keys\n const loadedOptions = loadOptions(clerkRequest, {\n ...options,\n publishableKey: options?.publishableKey,\n secretKey: options?.secretKey,\n });\n\n // Get keys - either from options, env, or keyless mode\n const {\n publishableKey,\n secretKey,\n claimUrl: keylessClaimUrl,\n apiKeysUrl: keylessApiKeysUrl,\n } = await resolveKeysWithKeylessFallback(loadedOptions.publishableKey, loadedOptions.secretKey);\n\n if (publishableKey) {\n loadedOptions.publishableKey = publishableKey;\n }\n if (secretKey) {\n loadedOptions.secretKey = secretKey;\n }\n\n const requestState = await clerkClient().authenticateRequest(clerkRequest, {\n ...loadedOptions,\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 // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw json(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 const clerkInitialState = getResponseClerkState(requestState as RequestState, loadedOptions);\n\n // Include keyless mode URLs if applicable\n if (canUseKeyless && keylessClaimUrl) {\n (clerkInitialState as Record<string, unknown>).__internal_clerk_state = {\n ...((clerkInitialState as Record<string, unknown>).__internal_clerk_state as Record<string, unknown>),\n __keylessClaimUrl: keylessClaimUrl,\n __keylessApiKeysUrl: keylessApiKeysUrl,\n };\n }\n\n const result = await next({\n context: {\n clerkInitialState,\n auth: (opts?: PendingSessionOptions) => requestState.toAuth(opts),\n },\n });\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n result.response.headers.append(key, value);\n });\n }\n\n return result;\n });\n};\n"]}
@@ -27,7 +27,7 @@ var commonEnvs = () => {
27
27
  API_URL: getEnvVariable("CLERK_API_URL") || apiUrlFromPublishableKey(publicEnvs.publishableKey),
28
28
  SDK_METADATA: {
29
29
  name: "@clerk/tanstack-react-start",
30
- version: "1.0.0-snapshot.v20260120164554",
30
+ version: "1.0.0-snapshot.v20260121133427",
31
31
  environment: getEnvVariable("NODE_ENV")
32
32
  }
33
33
  };
@@ -0,0 +1,9 @@
1
+ import { KeylessStorage } from '@clerk/shared/keyless';
2
+ export { KeylessStorage } from '@clerk/shared/keyless';
3
+
4
+ interface FileStorageOptions {
5
+ cwd?: () => string;
6
+ }
7
+ declare function createFileStorage(options?: FileStorageOptions): KeylessStorage;
8
+
9
+ export { type FileStorageOptions, createFileStorage };
@@ -0,0 +1,16 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { createNodeFileStorage } from '@clerk/shared/keyless';
4
+
5
+ // src/server/keyless/fileStorage.ts
6
+ function createFileStorage(options = {}) {
7
+ const { cwd = () => process.cwd() } = options;
8
+ return createNodeFileStorage(fs, path, {
9
+ cwd,
10
+ frameworkPackageName: "@clerk/tanstack-react-start"
11
+ });
12
+ }
13
+
14
+ export { createFileStorage };
15
+ //# sourceMappingURL=fileStorage.js.map
16
+ //# sourceMappingURL=fileStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/keyless/fileStorage.ts"],"names":[],"mappings":";;;;;AAWO,SAAS,iBAAA,CAAkB,OAAA,GAA8B,EAAC,EAAmB;AAClF,EAAA,MAAM,EAAE,GAAA,GAAM,MAAM,OAAA,CAAQ,GAAA,IAAM,GAAI,OAAA;AAEtC,EAAA,OAAO,qBAAA,CAAsB,IAAI,IAAA,EAAM;AAAA,IACrC,GAAA;AAAA,IACA,oBAAA,EAAsB;AAAA,GACvB,CAAA;AACH","file":"fileStorage.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { createNodeFileStorage, type KeylessStorage } from '@clerk/shared/keyless';\n\nexport type { KeylessStorage };\n\nexport interface FileStorageOptions {\n cwd?: () => string;\n}\n\nexport function createFileStorage(options: FileStorageOptions = {}): KeylessStorage {\n const { cwd = () => process.cwd() } = options;\n\n return createNodeFileStorage(fs, path, {\n cwd,\n frameworkPackageName: '@clerk/tanstack-react-start',\n });\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import * as _clerk_shared_keyless from '@clerk/shared/keyless';
2
+
3
+ declare function keyless(): _clerk_shared_keyless.KeylessService;
4
+
5
+ export { keyless };
@@ -0,0 +1,39 @@
1
+ import { createKeylessService } from '@clerk/shared/keyless';
2
+ import { clerkClient } from '../clerkClient.js';
3
+ import { createFileStorage } from './fileStorage.js';
4
+
5
+ // src/server/keyless/index.ts
6
+ var keylessServiceInstance = null;
7
+ function keyless() {
8
+ if (!keylessServiceInstance) {
9
+ keylessServiceInstance = createKeylessService({
10
+ storage: createFileStorage(),
11
+ api: {
12
+ async createAccountlessApplication(requestHeaders) {
13
+ try {
14
+ return await clerkClient().__experimental_accountlessApplications.createAccountlessApplication({
15
+ requestHeaders
16
+ });
17
+ } catch {
18
+ return null;
19
+ }
20
+ },
21
+ async completeOnboarding(requestHeaders) {
22
+ try {
23
+ return await clerkClient().__experimental_accountlessApplications.completeAccountlessApplicationOnboarding({
24
+ requestHeaders
25
+ });
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+ },
31
+ framework: "tanstack-react-start"
32
+ });
33
+ }
34
+ return keylessServiceInstance;
35
+ }
36
+
37
+ export { keyless };
38
+ //# sourceMappingURL=index.js.map
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/keyless/index.ts"],"names":[],"mappings":";;;;;AAMA,IAAI,sBAAA,GAAyE,IAAA;AAEtE,SAAS,OAAA,GAAU;AACxB,EAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,IAAA,sBAAA,GAAyB,oBAAA,CAAqB;AAAA,MAC5C,SAAS,iBAAA,EAAkB;AAAA,MAC3B,GAAA,EAAK;AAAA,QACH,MAAM,6BAA6B,cAAA,EAA0B;AAC3D,UAAA,IAAI;AACF,YAAA,OAAO,MAAM,WAAA,EAAY,CAAE,sCAAA,CAAuC,4BAAA,CAA6B;AAAA,cAC7F;AAAA,aACD,CAAA;AAAA,UACH,CAAA,CAAA,MAAQ;AACN,YAAA,OAAO,IAAA;AAAA,UACT;AAAA,QACF,CAAA;AAAA,QACA,MAAM,mBAAmB,cAAA,EAA0B;AACjD,UAAA,IAAI;AACF,YAAA,OAAO,MAAM,WAAA,EAAY,CAAE,sCAAA,CAAuC,wCAAA,CAAyC;AAAA,cACzG;AAAA,aACD,CAAA;AAAA,UACH,CAAA,CAAA,MAAQ;AACN,YAAA,OAAO,IAAA;AAAA,UACT;AAAA,QACF;AAAA,OACF;AAAA,MACA,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AACA,EAAA,OAAO,sBAAA;AACT","file":"index.js","sourcesContent":["import { createKeylessService } from '@clerk/shared/keyless';\n\nimport { clerkClient } from '../clerkClient';\nimport { createFileStorage } from './fileStorage';\n\n// Lazily initialized keyless service singleton\nlet keylessServiceInstance: ReturnType<typeof createKeylessService> | null = null;\n\nexport function keyless() {\n if (!keylessServiceInstance) {\n keylessServiceInstance = createKeylessService({\n storage: createFileStorage(),\n api: {\n async createAccountlessApplication(requestHeaders?: Headers) {\n try {\n return await clerkClient().__experimental_accountlessApplications.createAccountlessApplication({\n requestHeaders,\n });\n } catch {\n return null;\n }\n },\n async completeOnboarding(requestHeaders?: Headers) {\n try {\n return await clerkClient().__experimental_accountlessApplications.completeAccountlessApplicationOnboarding({\n requestHeaders,\n });\n } catch {\n return null;\n }\n },\n },\n framework: 'tanstack-react-start',\n });\n }\n return keylessServiceInstance;\n}\n"]}
@@ -0,0 +1,16 @@
1
+ interface KeylessResult {
2
+ publishableKey: string | undefined;
3
+ secretKey: string | undefined;
4
+ claimUrl: string | undefined;
5
+ apiKeysUrl: string | undefined;
6
+ }
7
+ /**
8
+ * Resolves Clerk keys, falling back to keyless mode in development if configured keys are missing.
9
+ *
10
+ * @param configuredPublishableKey - The publishable key from options or environment
11
+ * @param configuredSecretKey - The secret key from options or environment
12
+ * @returns The resolved keys (either configured or from keyless mode)
13
+ */
14
+ declare function resolveKeysWithKeylessFallback(configuredPublishableKey: string | undefined, configuredSecretKey: string | undefined): Promise<KeylessResult>;
15
+
16
+ export { type KeylessResult, resolveKeysWithKeylessFallback };
@@ -0,0 +1,50 @@
1
+ import { clerkDevelopmentCache, createConfirmationMessage, createKeylessModeMessage } from '@clerk/shared/keyless';
2
+ import { canUseKeyless } from '../../utils/feature-flags.js';
3
+ import { keyless } from './index.js';
4
+
5
+ // src/server/keyless/utils.ts
6
+ async function resolveKeysWithKeylessFallback(configuredPublishableKey, configuredSecretKey) {
7
+ let publishableKey = configuredPublishableKey;
8
+ let secretKey = configuredSecretKey;
9
+ let claimUrl;
10
+ let apiKeysUrl;
11
+ if (!canUseKeyless) {
12
+ return { publishableKey, secretKey, claimUrl, apiKeysUrl };
13
+ }
14
+ const keylessService = keyless();
15
+ const locallyStoredKeys = keylessService.readKeys();
16
+ const runningWithClaimedKeys = Boolean(configuredPublishableKey) && configuredPublishableKey === locallyStoredKeys?.publishableKey;
17
+ if (runningWithClaimedKeys && locallyStoredKeys) {
18
+ try {
19
+ await clerkDevelopmentCache?.run(() => keylessService.completeOnboarding(), {
20
+ cacheKey: `${locallyStoredKeys.publishableKey}_complete`,
21
+ onSuccessStale: 24 * 60 * 60 * 1e3
22
+ // 24 hours
23
+ });
24
+ } catch {
25
+ }
26
+ clerkDevelopmentCache?.log({
27
+ cacheKey: `${locallyStoredKeys.publishableKey}_claimed`,
28
+ msg: createConfirmationMessage()
29
+ });
30
+ return { publishableKey, secretKey, claimUrl, apiKeysUrl };
31
+ }
32
+ if (!publishableKey || !secretKey) {
33
+ const keylessApp = await keylessService.getOrCreateKeys();
34
+ if (keylessApp) {
35
+ publishableKey = publishableKey || keylessApp.publishableKey;
36
+ secretKey = secretKey || keylessApp.secretKey;
37
+ claimUrl = keylessApp.claimUrl;
38
+ apiKeysUrl = keylessApp.apiKeysUrl;
39
+ clerkDevelopmentCache?.log({
40
+ cacheKey: keylessApp.publishableKey,
41
+ msg: createKeylessModeMessage(keylessApp)
42
+ });
43
+ }
44
+ }
45
+ return { publishableKey, secretKey, claimUrl, apiKeysUrl };
46
+ }
47
+
48
+ export { resolveKeysWithKeylessFallback };
49
+ //# sourceMappingURL=utils.js.map
50
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/server/keyless/utils.ts"],"names":[],"mappings":";;;;;AAoBA,eAAsB,8BAAA,CACpB,0BACA,mBAAA,EACwB;AACxB,EAAA,IAAI,cAAA,GAAiB,wBAAA;AACrB,EAAA,IAAI,SAAA,GAAY,mBAAA;AAChB,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,UAAA;AAEJ,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,OAAO,EAAE,cAAA,EAAgB,SAAA,EAAW,QAAA,EAAU,UAAA,EAAW;AAAA,EAC3D;AAEA,EAAA,MAAM,iBAAiB,OAAA,EAAQ;AAC/B,EAAA,MAAM,iBAAA,GAAoB,eAAe,QAAA,EAAS;AAGlD,EAAA,MAAM,sBAAA,GACJ,OAAA,CAAQ,wBAAwB,CAAA,IAAK,6BAA6B,iBAAA,EAAmB,cAAA;AAEvF,EAAA,IAAI,0BAA0B,iBAAA,EAAmB;AAE/C,IAAA,IAAI;AACF,MAAA,MAAM,qBAAA,EAAuB,GAAA,CAAI,MAAM,cAAA,CAAe,oBAAmB,EAAG;AAAA,QAC1E,QAAA,EAAU,CAAA,EAAG,iBAAA,CAAkB,cAAc,CAAA,SAAA,CAAA;AAAA,QAC7C,cAAA,EAAgB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK;AAAA;AAAA,OAChC,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,qBAAA,EAAuB,GAAA,CAAI;AAAA,MACzB,QAAA,EAAU,CAAA,EAAG,iBAAA,CAAkB,cAAc,CAAA,QAAA,CAAA;AAAA,MAC7C,KAAK,yBAAA;AAA0B,KAChC,CAAA;AAED,IAAA,OAAO,EAAE,cAAA,EAAgB,SAAA,EAAW,QAAA,EAAU,UAAA,EAAW;AAAA,EAC3D;AAGA,EAAA,IAAI,CAAC,cAAA,IAAkB,CAAC,SAAA,EAAW;AACjC,IAAA,MAAM,UAAA,GAA4C,MAAM,cAAA,CAAe,eAAA,EAAgB;AAEvF,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,cAAA,GAAiB,kBAAkB,UAAA,CAAW,cAAA;AAC9C,MAAA,SAAA,GAAY,aAAa,UAAA,CAAW,SAAA;AACpC,MAAA,QAAA,GAAW,UAAA,CAAW,QAAA;AACtB,MAAA,UAAA,GAAa,UAAA,CAAW,UAAA;AAExB,MAAA,qBAAA,EAAuB,GAAA,CAAI;AAAA,QACzB,UAAU,UAAA,CAAW,cAAA;AAAA,QACrB,GAAA,EAAK,yBAAyB,UAAU;AAAA,OACzC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,cAAA,EAAgB,SAAA,EAAW,QAAA,EAAU,UAAA,EAAW;AAC3D","file":"utils.js","sourcesContent":["import type { AccountlessApplication } from '@clerk/shared/keyless';\nimport { clerkDevelopmentCache, createConfirmationMessage, createKeylessModeMessage } from '@clerk/shared/keyless';\n\nimport { canUseKeyless } from '../../utils/feature-flags';\nimport { keyless } from './index';\n\nexport interface KeylessResult {\n publishableKey: string | undefined;\n secretKey: string | undefined;\n claimUrl: string | undefined;\n apiKeysUrl: string | undefined;\n}\n\n/**\n * Resolves Clerk keys, falling back to keyless mode in development if configured keys are missing.\n *\n * @param configuredPublishableKey - The publishable key from options or environment\n * @param configuredSecretKey - The secret key from options or environment\n * @returns The resolved keys (either configured or from keyless mode)\n */\nexport async function resolveKeysWithKeylessFallback(\n configuredPublishableKey: string | undefined,\n configuredSecretKey: string | undefined,\n): Promise<KeylessResult> {\n let publishableKey = configuredPublishableKey;\n let secretKey = configuredSecretKey;\n let claimUrl: string | undefined;\n let apiKeysUrl: string | undefined;\n\n if (!canUseKeyless) {\n return { publishableKey, secretKey, claimUrl, apiKeysUrl };\n }\n\n const keylessService = keyless();\n const locallyStoredKeys = keylessService.readKeys();\n\n // Check if running with claimed keys (configured keys match locally stored keyless keys)\n const runningWithClaimedKeys =\n Boolean(configuredPublishableKey) && configuredPublishableKey === locallyStoredKeys?.publishableKey;\n\n if (runningWithClaimedKeys && locallyStoredKeys) {\n // Complete onboarding when running with claimed keys\n try {\n await clerkDevelopmentCache?.run(() => keylessService.completeOnboarding(), {\n cacheKey: `${locallyStoredKeys.publishableKey}_complete`,\n onSuccessStale: 24 * 60 * 60 * 1000, // 24 hours\n });\n } catch {\n // noop\n }\n\n clerkDevelopmentCache?.log({\n cacheKey: `${locallyStoredKeys.publishableKey}_claimed`,\n msg: createConfirmationMessage(),\n });\n\n return { publishableKey, secretKey, claimUrl, apiKeysUrl };\n }\n\n // In keyless mode, try to read/create keys from the file system\n if (!publishableKey || !secretKey) {\n const keylessApp: AccountlessApplication | null = await keylessService.getOrCreateKeys();\n\n if (keylessApp) {\n publishableKey = publishableKey || keylessApp.publishableKey;\n secretKey = secretKey || keylessApp.secretKey;\n claimUrl = keylessApp.claimUrl;\n apiKeysUrl = keylessApp.apiKeysUrl;\n\n clerkDevelopmentCache?.log({\n cacheKey: keylessApp.publishableKey,\n msg: createKeylessModeMessage(keylessApp),\n });\n }\n }\n\n return { publishableKey, secretKey, claimUrl, apiKeysUrl };\n}\n"]}
@@ -4,6 +4,7 @@ import { isDevelopmentFromSecretKey } from '@clerk/shared/keys';
4
4
  import { isProxyUrlRelative, isHttpOrHttps } from '@clerk/shared/proxy';
5
5
  import { handleValueOrFn } from '@clerk/shared/utils';
6
6
  import { errorThrower } from '../utils/index.js';
7
+ import { canUseKeyless } from '../utils/feature-flags.js';
7
8
  import { commonEnvs } from './constants.js';
8
9
 
9
10
  // src/server/loadOptions.ts
@@ -25,13 +26,13 @@ var loadOptions = (request, overrides = {}) => {
25
26
  } else {
26
27
  proxyUrl = relativeOrAbsoluteProxyUrl;
27
28
  }
28
- if (!secretKey) {
29
+ if (!secretKey && !canUseKeyless) {
29
30
  throw errorThrower.throw("Clerk: no secret key provided");
30
31
  }
31
32
  if (isSatellite && !proxyUrl && !domain) {
32
33
  throw errorThrower.throw("Clerk: satellite mode requires a proxy URL or domain");
33
34
  }
34
- if (isSatellite && !isHttpOrHttps(signInUrl) && isDevelopmentFromSecretKey(secretKey)) {
35
+ if (isSatellite && secretKey && !isHttpOrHttps(signInUrl) && isDevelopmentFromSecretKey(secretKey)) {
35
36
  throw errorThrower.throw("Clerk: satellite mode requires a sign-in URL in production");
36
37
  }
37
38
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server/loadOptions.ts"],"names":[],"mappings":";;;;;;;;;AAWO,IAAM,WAAA,GAAc,CAAC,OAAA,EAAuB,SAAA,GAA2B,EAAC,KAAM;AACnF,EAAA,MAAM,YAAY,UAAA,EAAW;AAC7B,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,UAAA;AACnD,EAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,gBAAA,IAAoB,SAAA,CAAU,kBAAA;AACjE,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,cAAA,IAAkB,SAAA,CAAU,eAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,IAAU,SAAA,CAAU,aAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,eAAe,CAAA,IAAK,yBAAyB,cAAc,CAAA;AACzF,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,SAAA,CAAU,MAAA,EAAQ,IAAI,IAAI,OAAA,CAAQ,GAAG,CAAC,CAAA,IAAK,SAAA,CAAU,MAAA;AACpF,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,SAAA,CAAU,WAAA,EAAa,IAAI,IAAI,OAAA,CAAQ,GAAG,CAAC,CAAA,IAAK,SAAA,CAAU,YAAA;AAC9F,EAAA,MAAM,6BAA6B,eAAA,CAAgB,SAAA,EAAW,UAAU,OAAA,CAAQ,QAAA,EAAU,UAAU,SAAS,CAAA;AAC7G,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,WAAA;AACnD,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,WAAA;AAEnD,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,CAAC,CAAC,0BAAA,IAA8B,kBAAA,CAAmB,0BAA0B,CAAA,EAAG;AAClF,IAAA,QAAA,GAAW,IAAI,GAAA,CAAI,0BAAA,EAA4B,OAAA,CAAQ,QAAQ,EAAE,QAAA,EAAS;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,QAAA,GAAW,0BAAA;AAAA,EACb;AAEA,EAAA,IAAI,CAAC,SAAA,EAAW;AAEd,IAAA,MAAM,YAAA,CAAa,MAAM,+BAA+B,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,WAAA,IAAe,CAAC,QAAA,IAAY,CAAC,MAAA,EAAQ;AAEvC,IAAA,MAAM,YAAA,CAAa,MAAM,sDAAsD,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,eAAe,CAAC,aAAA,CAAc,SAAS,CAAA,IAAK,0BAAA,CAA2B,SAAS,CAAA,EAAG;AAErF,IAAA,MAAM,YAAA,CAAa,MAAM,4DAA4D,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,GAAG,SAAA;AAAA,IACH,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF","file":"loadOptions.js","sourcesContent":["import type { ClerkRequest } from '@clerk/backend/internal';\nimport { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey';\nimport { getEnvVariable } from '@clerk/shared/getEnvVariable';\nimport { isDevelopmentFromSecretKey } from '@clerk/shared/keys';\nimport { isHttpOrHttps, isProxyUrlRelative } from '@clerk/shared/proxy';\nimport { handleValueOrFn } from '@clerk/shared/utils';\n\nimport { errorThrower } from '../utils';\nimport { commonEnvs } from './constants';\nimport type { LoaderOptions } from './types';\n\nexport const loadOptions = (request: ClerkRequest, overrides: LoaderOptions = {}) => {\n const commonEnv = commonEnvs();\n const secretKey = overrides.secretKey || commonEnv.SECRET_KEY;\n const machineSecretKey = overrides.machineSecretKey || commonEnv.MACHINE_SECRET_KEY;\n const publishableKey = overrides.publishableKey || commonEnv.PUBLISHABLE_KEY;\n const jwtKey = overrides.jwtKey || commonEnv.CLERK_JWT_KEY;\n const apiUrl = getEnvVariable('CLERK_API_URL') || apiUrlFromPublishableKey(publishableKey);\n const domain = handleValueOrFn(overrides.domain, new URL(request.url)) || commonEnv.DOMAIN;\n const isSatellite = handleValueOrFn(overrides.isSatellite, new URL(request.url)) || commonEnv.IS_SATELLITE;\n const relativeOrAbsoluteProxyUrl = handleValueOrFn(overrides?.proxyUrl, request.clerkUrl, commonEnv.PROXY_URL);\n const signInUrl = overrides.signInUrl || commonEnv.SIGN_IN_URL;\n const signUpUrl = overrides.signUpUrl || commonEnv.SIGN_UP_URL;\n\n let proxyUrl;\n if (!!relativeOrAbsoluteProxyUrl && isProxyUrlRelative(relativeOrAbsoluteProxyUrl)) {\n proxyUrl = new URL(relativeOrAbsoluteProxyUrl, request.clerkUrl).toString();\n } else {\n proxyUrl = relativeOrAbsoluteProxyUrl;\n }\n\n if (!secretKey) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw errorThrower.throw('Clerk: no secret key provided');\n }\n\n if (isSatellite && !proxyUrl && !domain) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw errorThrower.throw('Clerk: satellite mode requires a proxy URL or domain');\n }\n\n if (isSatellite && !isHttpOrHttps(signInUrl) && isDevelopmentFromSecretKey(secretKey)) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw errorThrower.throw('Clerk: satellite mode requires a sign-in URL in production');\n }\n\n return {\n // used to append options that are not initialized from env\n ...overrides,\n secretKey,\n machineSecretKey,\n publishableKey,\n jwtKey,\n apiUrl,\n domain,\n isSatellite,\n proxyUrl,\n signInUrl,\n signUpUrl,\n };\n};\n"]}
1
+ {"version":3,"sources":["../../src/server/loadOptions.ts"],"names":[],"mappings":";;;;;;;;;;AAYO,IAAM,WAAA,GAAc,CAAC,OAAA,EAAuB,SAAA,GAA2B,EAAC,KAAM;AACnF,EAAA,MAAM,YAAY,UAAA,EAAW;AAC7B,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,UAAA;AACnD,EAAA,MAAM,gBAAA,GAAmB,SAAA,CAAU,gBAAA,IAAoB,SAAA,CAAU,kBAAA;AACjE,EAAA,MAAM,cAAA,GAAiB,SAAA,CAAU,cAAA,IAAkB,SAAA,CAAU,eAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,IAAU,SAAA,CAAU,aAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,eAAe,CAAA,IAAK,yBAAyB,cAAc,CAAA;AACzF,EAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,SAAA,CAAU,MAAA,EAAQ,IAAI,IAAI,OAAA,CAAQ,GAAG,CAAC,CAAA,IAAK,SAAA,CAAU,MAAA;AACpF,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,SAAA,CAAU,WAAA,EAAa,IAAI,IAAI,OAAA,CAAQ,GAAG,CAAC,CAAA,IAAK,SAAA,CAAU,YAAA;AAC9F,EAAA,MAAM,6BAA6B,eAAA,CAAgB,SAAA,EAAW,UAAU,OAAA,CAAQ,QAAA,EAAU,UAAU,SAAS,CAAA;AAC7G,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,WAAA;AACnD,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,IAAa,SAAA,CAAU,WAAA;AAEnD,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,CAAC,CAAC,0BAAA,IAA8B,kBAAA,CAAmB,0BAA0B,CAAA,EAAG;AAClF,IAAA,QAAA,GAAW,IAAI,GAAA,CAAI,0BAAA,EAA4B,OAAA,CAAQ,QAAQ,EAAE,QAAA,EAAS;AAAA,EAC5E,CAAA,MAAO;AACL,IAAA,QAAA,GAAW,0BAAA;AAAA,EACb;AAGA,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,aAAA,EAAe;AAEhC,IAAA,MAAM,YAAA,CAAa,MAAM,+BAA+B,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,WAAA,IAAe,CAAC,QAAA,IAAY,CAAC,MAAA,EAAQ;AAEvC,IAAA,MAAM,YAAA,CAAa,MAAM,sDAAsD,CAAA;AAAA,EACjF;AAEA,EAAA,IAAI,WAAA,IAAe,aAAa,CAAC,aAAA,CAAc,SAAS,CAAA,IAAK,0BAAA,CAA2B,SAAS,CAAA,EAAG;AAElG,IAAA,MAAM,YAAA,CAAa,MAAM,4DAA4D,CAAA;AAAA,EACvF;AAEA,EAAA,OAAO;AAAA;AAAA,IAEL,GAAG,SAAA;AAAA,IACH,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF","file":"loadOptions.js","sourcesContent":["import type { ClerkRequest } from '@clerk/backend/internal';\nimport { apiUrlFromPublishableKey } from '@clerk/shared/apiUrlFromPublishableKey';\nimport { getEnvVariable } from '@clerk/shared/getEnvVariable';\nimport { isDevelopmentFromSecretKey } from '@clerk/shared/keys';\nimport { isHttpOrHttps, isProxyUrlRelative } from '@clerk/shared/proxy';\nimport { handleValueOrFn } from '@clerk/shared/utils';\n\nimport { errorThrower } from '../utils';\nimport { canUseKeyless } from '../utils/feature-flags';\nimport { commonEnvs } from './constants';\nimport type { LoaderOptions } from './types';\n\nexport const loadOptions = (request: ClerkRequest, overrides: LoaderOptions = {}) => {\n const commonEnv = commonEnvs();\n const secretKey = overrides.secretKey || commonEnv.SECRET_KEY;\n const machineSecretKey = overrides.machineSecretKey || commonEnv.MACHINE_SECRET_KEY;\n const publishableKey = overrides.publishableKey || commonEnv.PUBLISHABLE_KEY;\n const jwtKey = overrides.jwtKey || commonEnv.CLERK_JWT_KEY;\n const apiUrl = getEnvVariable('CLERK_API_URL') || apiUrlFromPublishableKey(publishableKey);\n const domain = handleValueOrFn(overrides.domain, new URL(request.url)) || commonEnv.DOMAIN;\n const isSatellite = handleValueOrFn(overrides.isSatellite, new URL(request.url)) || commonEnv.IS_SATELLITE;\n const relativeOrAbsoluteProxyUrl = handleValueOrFn(overrides?.proxyUrl, request.clerkUrl, commonEnv.PROXY_URL);\n const signInUrl = overrides.signInUrl || commonEnv.SIGN_IN_URL;\n const signUpUrl = overrides.signUpUrl || commonEnv.SIGN_UP_URL;\n\n let proxyUrl;\n if (!!relativeOrAbsoluteProxyUrl && isProxyUrlRelative(relativeOrAbsoluteProxyUrl)) {\n proxyUrl = new URL(relativeOrAbsoluteProxyUrl, request.clerkUrl).toString();\n } else {\n proxyUrl = relativeOrAbsoluteProxyUrl;\n }\n\n // In keyless mode, don't throw if secretKey is missing - ClerkProvider will handle it\n if (!secretKey && !canUseKeyless) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw errorThrower.throw('Clerk: no secret key provided');\n }\n\n if (isSatellite && !proxyUrl && !domain) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw errorThrower.throw('Clerk: satellite mode requires a proxy URL or domain');\n }\n\n if (isSatellite && secretKey && !isHttpOrHttps(signInUrl) && isDevelopmentFromSecretKey(secretKey)) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw errorThrower.throw('Clerk: satellite mode requires a sign-in URL in production');\n }\n\n return {\n // used to append options that are not initialized from env\n ...overrides,\n secretKey,\n machineSecretKey,\n publishableKey,\n jwtKey,\n apiUrl,\n domain,\n isSatellite,\n proxyUrl,\n signInUrl,\n signUpUrl,\n };\n};\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Whether keyless mode can be used in the current environment.
3
+ * Keyless mode is only available in development and when not explicitly disabled.
4
+ *
5
+ * To disable keyless mode, set either:
6
+ * - `VITE_CLERK_KEYLESS_DISABLED=1` (for Vite-based projects)
7
+ * - `CLERK_KEYLESS_DISABLED=1` (generic)
8
+ */
9
+ declare const canUseKeyless: boolean;
10
+
11
+ export { canUseKeyless };
@@ -0,0 +1,11 @@
1
+ import { getEnvVariable } from '@clerk/shared/getEnvVariable';
2
+ import { isTruthy } from '@clerk/shared/underscore';
3
+ import { isDevelopmentEnvironment } from '@clerk/shared/utils';
4
+
5
+ // src/utils/feature-flags.ts
6
+ var KEYLESS_DISABLED = isTruthy(getEnvVariable("VITE_CLERK_KEYLESS_DISABLED")) || isTruthy(getEnvVariable("CLERK_KEYLESS_DISABLED")) || false;
7
+ var canUseKeyless = isDevelopmentEnvironment() && !KEYLESS_DISABLED;
8
+
9
+ export { canUseKeyless };
10
+ //# sourceMappingURL=feature-flags.js.map
11
+ //# sourceMappingURL=feature-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,gBAAA,GACJ,QAAA,CAAS,cAAA,CAAe,6BAA6B,CAAC,KACtD,QAAA,CAAS,cAAA,CAAe,wBAAwB,CAAC,CAAA,IACjD,KAAA;AAUK,IAAM,aAAA,GAAgB,wBAAA,EAAyB,IAAK,CAAC","file":"feature-flags.js","sourcesContent":["import { getEnvVariable } from '@clerk/shared/getEnvVariable';\nimport { isTruthy } from '@clerk/shared/underscore';\nimport { isDevelopmentEnvironment } from '@clerk/shared/utils';\n\n// Support both Vite-style and generic env var names for disabling keyless mode\nconst KEYLESS_DISABLED =\n isTruthy(getEnvVariable('VITE_CLERK_KEYLESS_DISABLED')) ||\n isTruthy(getEnvVariable('CLERK_KEYLESS_DISABLED')) ||\n false;\n\n/**\n * Whether keyless mode can be used in the current environment.\n * Keyless mode is only available in development and when not explicitly disabled.\n *\n * To disable keyless mode, set either:\n * - `VITE_CLERK_KEYLESS_DISABLED=1` (for Vite-based projects)\n * - `CLERK_KEYLESS_DISABLED=1` (generic)\n */\nexport const canUseKeyless = isDevelopmentEnvironment() && !KEYLESS_DISABLED;\n"]}
@@ -1,7 +1,7 @@
1
- import * as _clerk_shared_index_D2EaVwjc from '@clerk/shared/index-D2EaVwjc';
1
+ import * as _clerk_shared_index_DXbd4cuv from '@clerk/shared/index-DXbd4cuv';
2
2
 
3
3
  declare const isClient: () => boolean;
4
4
  declare const isServer: () => boolean;
5
- declare const errorThrower: _clerk_shared_index_D2EaVwjc.Zn;
5
+ declare const errorThrower: _clerk_shared_index_DXbd4cuv.Zn;
6
6
 
7
7
  export { errorThrower, isClient, isServer };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clerk/tanstack-react-start",
3
- "version": "1.0.0-snapshot.v20260120164554",
3
+ "version": "1.0.0-snapshot.v20260121133427",
4
4
  "description": "Clerk SDK for TanStack React Start",
5
5
  "keywords": [
6
6
  "clerk",
@@ -64,9 +64,9 @@
64
64
  ],
65
65
  "dependencies": {
66
66
  "tslib": "2.8.1",
67
- "@clerk/react": "6.0.0-snapshot.v20260120164554",
68
- "@clerk/backend": "3.0.0-snapshot.v20260120164554",
69
- "@clerk/shared": "4.0.0-snapshot.v20260120164554"
67
+ "@clerk/backend": "3.0.0-snapshot.v20260121133427",
68
+ "@clerk/react": "6.0.0-snapshot.v20260121133427",
69
+ "@clerk/shared": "4.0.0-snapshot.v20260121133427"
70
70
  },
71
71
  "devDependencies": {
72
72
  "@tanstack/react-router": "1.132.0",