@clerk/react-router 3.4.1 → 3.4.2-canary.v20260610190754
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.
- package/dist/ReactRouterClerkProvider-trOD2EJy.d.ts +17 -0
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.js +3 -3
- package/dist/client/ReactRouterClerkProvider.d.ts +2 -13
- package/dist/client/ReactRouterClerkProvider.js +75 -121
- package/dist/client/ReactRouterClerkProvider.js.map +1 -1
- package/dist/client/ReactRouterOptionsContext.d.ts +6 -7
- package/dist/client/ReactRouterOptionsContext.js +11 -12
- package/dist/client/ReactRouterOptionsContext.js.map +1 -1
- package/dist/client/index.d.ts +4 -9
- package/dist/client/index.js +4 -12
- package/dist/client/types.d.ts +2 -56
- package/dist/client/types.js +1 -1
- package/dist/client/uiComponents.d.ts +2 -10
- package/dist/client/uiComponents.js +21 -34
- package/dist/client/uiComponents.js.map +1 -1
- package/dist/client/useAwaitableNavigate.d.ts +4 -2
- package/dist/client/useAwaitableNavigate.js +22 -21
- package/dist/client/useAwaitableNavigate.js.map +1 -1
- package/dist/client/usePathnameWithoutSplatRouteParams.d.ts +3 -1
- package/dist/client/usePathnameWithoutSplatRouteParams.js +10 -12
- package/dist/client/usePathnameWithoutSplatRouteParams.js.map +1 -1
- package/dist/errorThrower.d.ts +4 -4
- package/dist/errorThrower.js +6 -5
- package/dist/errorThrower.js.map +1 -1
- package/dist/errors.d.ts +2 -4
- package/dist/errors.js +3 -28
- package/dist/global.d.ts +1 -0
- package/dist/index.d.ts +6 -9
- package/dist/index.js +12 -9
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +2 -1
- package/dist/legacy.js +2 -6
- package/dist/loadOptions-DNSRkrk0.d.ts +63 -0
- package/dist/server/clerkClient.d.ts +6 -8
- package/dist/server/clerkClient.js +19 -19
- package/dist/server/clerkClient.js.map +1 -1
- package/dist/server/clerkMiddleware.d.ts +12 -11
- package/dist/server/clerkMiddleware.js +83 -90
- package/dist/server/clerkMiddleware.js.map +1 -1
- package/dist/server/getAuth.d.ts +5 -3
- package/dist/server/getAuth.js +16 -23
- package/dist/server/getAuth.js.map +1 -1
- package/dist/server/index.d.ts +6 -10
- package/dist/server/index.js +5 -10
- package/dist/server/keyless/fileStorage.d.ts +6 -5
- package/dist/server/keyless/fileStorage.js +12 -11
- package/dist/server/keyless/fileStorage.js.map +1 -1
- package/dist/server/keyless/index.d.ts +6 -9
- package/dist/server/keyless/index.js +34 -40
- package/dist/server/keyless/index.js.map +1 -1
- package/dist/server/keyless/utils.d.ts +8 -11
- package/dist/server/keyless/utils.js +10 -12
- package/dist/server/keyless/utils.js.map +1 -1
- package/dist/server/loadOptions.d.ts +2 -64
- package/dist/server/loadOptions.js +50 -63
- package/dist/server/loadOptions.js.map +1 -1
- package/dist/server/rootAuthLoader.d.ts +17 -16
- package/dist/server/rootAuthLoader.js +45 -71
- package/dist/server/rootAuthLoader.js.map +1 -1
- package/dist/server/types.d.ts +2 -84
- package/dist/server/types.js +1 -1
- package/dist/server/utils.d.ts +13 -13
- package/dist/server/utils.js +93 -83
- package/dist/server/utils.js.map +1 -1
- package/dist/ssr/index.d.ts +4 -7
- package/dist/ssr/index.js +5 -5
- package/dist/ssr/index.js.map +1 -1
- package/dist/types/index.d.ts +4 -9
- package/dist/types/index.js +1 -1
- package/dist/types-C3uAu7q3.d.ts +58 -0
- package/dist/types-CkBFvMvW.d.ts +86 -0
- package/dist/uiComponents-CuYpqdGX.d.ts +12 -0
- package/dist/utils/assert.d.ts +4 -6
- package/dist/utils/assert.js +20 -29
- package/dist/utils/assert.js.map +1 -1
- package/dist/utils/env.d.ts +25 -23
- package/dist/utils/env.js +32 -33
- package/dist/utils/env.js.map +1 -1
- package/dist/utils/errors.d.ts +3 -1
- package/dist/utils/errors.js +15 -24
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/feature-flags.d.ts +3 -1
- package/dist/utils/feature-flags.js +7 -6
- package/dist/utils/feature-flags.js.map +1 -1
- package/dist/webhooks.d.ts +1 -1
- package/dist/webhooks.js +3 -3
- package/package.json +6 -6
- package/dist/api/index.js.map +0 -1
- package/dist/client/index.js.map +0 -1
- package/dist/client/types.js.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/global.d.d.ts +0 -2
- package/dist/global.d.js +0 -1
- package/dist/global.d.js.map +0 -1
- package/dist/legacy.js.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server/types.js.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/webhooks.js.map +0 -1
|
@@ -1,77 +1,51 @@
|
|
|
1
|
-
// src/server/rootAuthLoader.ts
|
|
2
1
|
import { invalidRootLoaderCallbackReturn } from "../utils/errors.js";
|
|
2
|
+
import { IsOptIntoMiddleware, getResponseClerkState, injectRequestStateIntoResponse, isDataWithResponseInit, isRedirect, isResponse } from "./utils.js";
|
|
3
3
|
import { authFnContext, requestStateContext } from "./clerkMiddleware.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
isRedirect,
|
|
10
|
-
isResponse
|
|
11
|
-
} from "./utils.js";
|
|
4
|
+
|
|
5
|
+
//#region src/server/rootAuthLoader.ts
|
|
6
|
+
/**
|
|
7
|
+
* Shared logic for processing the root auth loader with a given request state
|
|
8
|
+
*/
|
|
12
9
|
async function processRootAuthLoader(args, requestState, additionalState, handler) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
);
|
|
39
|
-
} catch {
|
|
40
|
-
throw new Error(invalidRootLoaderCallbackReturn);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (isDataWithResponseInit(handlerResult)) {
|
|
44
|
-
try {
|
|
45
|
-
return injectRequestStateIntoResponse(
|
|
46
|
-
new Response(JSON.stringify(handlerResult.data), (_a = handlerResult.init) != null ? _a : void 0),
|
|
47
|
-
requestState,
|
|
48
|
-
args.context,
|
|
49
|
-
additionalState,
|
|
50
|
-
includeClerkHeaders
|
|
51
|
-
);
|
|
52
|
-
} catch {
|
|
53
|
-
throw new Error(invalidRootLoaderCallbackReturn);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const { clerkState } = getResponseClerkState(requestState, args.context, additionalState);
|
|
57
|
-
return {
|
|
58
|
-
...handlerResult != null ? handlerResult : {},
|
|
59
|
-
...clerkState
|
|
60
|
-
};
|
|
10
|
+
const includeClerkHeaders = !(IsOptIntoMiddleware(args.context) && !!args.context.get(authFnContext));
|
|
11
|
+
if (!handler) {
|
|
12
|
+
const { clerkState } = getResponseClerkState(requestState, args.context, additionalState);
|
|
13
|
+
return { ...clerkState };
|
|
14
|
+
}
|
|
15
|
+
const handlerResult = await handler({
|
|
16
|
+
...args,
|
|
17
|
+
request: Object.assign(args.request, { auth: requestState.toAuth() })
|
|
18
|
+
});
|
|
19
|
+
if (isResponse(handlerResult)) try {
|
|
20
|
+
if (isRedirect(handlerResult)) return handlerResult;
|
|
21
|
+
return injectRequestStateIntoResponse(handlerResult, requestState, args.context, additionalState, includeClerkHeaders);
|
|
22
|
+
} catch {
|
|
23
|
+
throw new Error(invalidRootLoaderCallbackReturn);
|
|
24
|
+
}
|
|
25
|
+
if (isDataWithResponseInit(handlerResult)) try {
|
|
26
|
+
return injectRequestStateIntoResponse(new Response(JSON.stringify(handlerResult.data), handlerResult.init ?? void 0), requestState, args.context, additionalState, includeClerkHeaders);
|
|
27
|
+
} catch {
|
|
28
|
+
throw new Error(invalidRootLoaderCallbackReturn);
|
|
29
|
+
}
|
|
30
|
+
const { clerkState } = getResponseClerkState(requestState, args.context, additionalState);
|
|
31
|
+
return {
|
|
32
|
+
...handlerResult ?? {},
|
|
33
|
+
...clerkState
|
|
34
|
+
};
|
|
61
35
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
74
|
-
export {
|
|
75
|
-
rootAuthLoader
|
|
36
|
+
/**
|
|
37
|
+
* Makes authorization state available in your application by wrapping the root loader.
|
|
38
|
+
*
|
|
39
|
+
* @see https://clerk.com/docs/references/react-router/root-auth-loader
|
|
40
|
+
*/
|
|
41
|
+
const rootAuthLoader = async (args, handlerOrOptions) => {
|
|
42
|
+
const handler = typeof handlerOrOptions === "function" ? handlerOrOptions : void 0;
|
|
43
|
+
const contextValue = IsOptIntoMiddleware(args.context) && args.context.get(requestStateContext);
|
|
44
|
+
if (!contextValue) throw new Error("Clerk: clerkMiddleware() not detected. Make sure you have installed the clerkMiddleware in your root route.");
|
|
45
|
+
const { requestState, additionalState } = contextValue;
|
|
46
|
+
return processRootAuthLoader(args, requestState, additionalState, handler);
|
|
76
47
|
};
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
export { rootAuthLoader };
|
|
77
51
|
//# sourceMappingURL=rootAuthLoader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/rootAuthLoader.ts"],"sourcesContent":["import type { RequestState } from '@clerk/backend/internal';\nimport type { LoaderFunctionArgs } from 'react-router';\n\nimport { invalidRootLoaderCallbackReturn } from '../utils/errors';\nimport { authFnContext, requestStateContext } from './clerkMiddleware';\nimport type {\n AdditionalStateOptions,\n LoaderFunctionArgsWithAuth,\n LoaderFunctionReturn,\n RootAuthLoaderCallback,\n RootAuthLoaderOptions,\n} from './types';\nimport {\n getResponseClerkState,\n injectRequestStateIntoResponse,\n isDataWithResponseInit,\n IsOptIntoMiddleware,\n isRedirect,\n isResponse,\n} from './utils';\n\ninterface RootAuthLoader {\n <Options extends RootAuthLoaderOptions, Callback extends RootAuthLoaderCallback<Options>>(\n /**\n * Arguments passed to the loader function.\n */\n args: LoaderFunctionArgs,\n /**\n * A loader function with authentication state made available to it. Allows you to fetch route data based on the user's authentication state.\n */\n callback: Callback,\n options?: Options,\n ): Promise<ReturnType<Callback>>;\n\n (args: LoaderFunctionArgs, options?: RootAuthLoaderOptions): Promise<LoaderFunctionReturn>;\n}\n\n/**\n * Shared logic for processing the root auth loader with a given request state\n */\nasync function processRootAuthLoader(\n args: LoaderFunctionArgs,\n requestState: RequestState,\n additionalState: AdditionalStateOptions,\n handler?: RootAuthLoaderCallback<any>,\n): Promise<LoaderFunctionReturn> {\n const hasMiddleware = IsOptIntoMiddleware(args.context) && !!args.context.get(authFnContext);\n const includeClerkHeaders = !hasMiddleware;\n\n if (!handler) {\n // if the user did not provide a handler, simply inject requestState into an empty response\n const { clerkState } = getResponseClerkState(requestState, args.context, additionalState);\n return {\n ...clerkState,\n };\n }\n\n // Create args that has the auth object in the request for backward compatibility\n const argsWithAuth = {\n ...args,\n request: Object.assign(args.request, { auth: requestState.toAuth() }),\n } as LoaderFunctionArgsWithAuth<any>;\n\n const handlerResult = await handler(argsWithAuth);\n\n if (isResponse(handlerResult)) {\n try {\n // respect and pass-through any redirects without modifying them\n if (isRedirect(handlerResult)) {\n return handlerResult;\n }\n // clone and try to inject requestState into all json-like responses\n // if this fails, the user probably didn't return a json object or a valid json string\n return injectRequestStateIntoResponse(\n handlerResult,\n requestState,\n args.context,\n additionalState,\n includeClerkHeaders,\n );\n } catch {\n throw new Error(invalidRootLoaderCallbackReturn);\n }\n }\n\n if (isDataWithResponseInit(handlerResult)) {\n try {\n // clone and try to inject requestState into all json-like responses\n // if this fails, the user probably didn't return a json object or a valid json string\n return injectRequestStateIntoResponse(\n new Response(JSON.stringify(handlerResult.data), handlerResult.init ?? undefined),\n requestState,\n args.context,\n additionalState,\n includeClerkHeaders,\n );\n } catch {\n throw new Error(invalidRootLoaderCallbackReturn);\n }\n }\n\n // If the return value of the user's handler is null or a plain object, return plain object with streaming support\n const { clerkState } = getResponseClerkState(requestState, args.context, additionalState);\n\n return {\n ...(handlerResult ?? {}),\n ...clerkState,\n };\n}\n\n/**\n * Makes authorization state available in your application by wrapping the root loader.\n *\n * @see https://clerk.com/docs/references/react-router/root-auth-loader\n */\nexport const rootAuthLoader: RootAuthLoader = async (\n args: LoaderFunctionArgs,\n handlerOrOptions: any,\n): Promise<LoaderFunctionReturn> => {\n const handler = typeof handlerOrOptions === 'function' ? handlerOrOptions : undefined;\n\n const hasMiddlewareFlag = IsOptIntoMiddleware(args.context);\n const contextValue = hasMiddlewareFlag && args.context.get(requestStateContext);\n\n if (!contextValue) {\n throw new Error(\n 'Clerk: clerkMiddleware() not detected. Make sure you have installed the clerkMiddleware in your root route.',\n );\n }\n\n const { requestState, additionalState } = contextValue;\n return processRootAuthLoader(args, requestState, additionalState, handler);\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"rootAuthLoader.js","names":[],"sources":["../../src/server/rootAuthLoader.ts"],"sourcesContent":["import type { RequestState } from '@clerk/backend/internal';\nimport type { LoaderFunctionArgs } from 'react-router';\n\nimport { invalidRootLoaderCallbackReturn } from '../utils/errors';\nimport { authFnContext, requestStateContext } from './clerkMiddleware';\nimport type {\n AdditionalStateOptions,\n LoaderFunctionArgsWithAuth,\n LoaderFunctionReturn,\n RootAuthLoaderCallback,\n RootAuthLoaderOptions,\n} from './types';\nimport {\n getResponseClerkState,\n injectRequestStateIntoResponse,\n isDataWithResponseInit,\n IsOptIntoMiddleware,\n isRedirect,\n isResponse,\n} from './utils';\n\ninterface RootAuthLoader {\n <Options extends RootAuthLoaderOptions, Callback extends RootAuthLoaderCallback<Options>>(\n /**\n * Arguments passed to the loader function.\n */\n args: LoaderFunctionArgs,\n /**\n * A loader function with authentication state made available to it. Allows you to fetch route data based on the user's authentication state.\n */\n callback: Callback,\n options?: Options,\n ): Promise<ReturnType<Callback>>;\n\n (args: LoaderFunctionArgs, options?: RootAuthLoaderOptions): Promise<LoaderFunctionReturn>;\n}\n\n/**\n * Shared logic for processing the root auth loader with a given request state\n */\nasync function processRootAuthLoader(\n args: LoaderFunctionArgs,\n requestState: RequestState,\n additionalState: AdditionalStateOptions,\n handler?: RootAuthLoaderCallback<any>,\n): Promise<LoaderFunctionReturn> {\n const hasMiddleware = IsOptIntoMiddleware(args.context) && !!args.context.get(authFnContext);\n const includeClerkHeaders = !hasMiddleware;\n\n if (!handler) {\n // if the user did not provide a handler, simply inject requestState into an empty response\n const { clerkState } = getResponseClerkState(requestState, args.context, additionalState);\n return {\n ...clerkState,\n };\n }\n\n // Create args that has the auth object in the request for backward compatibility\n const argsWithAuth = {\n ...args,\n request: Object.assign(args.request, { auth: requestState.toAuth() }),\n } as LoaderFunctionArgsWithAuth<any>;\n\n const handlerResult = await handler(argsWithAuth);\n\n if (isResponse(handlerResult)) {\n try {\n // respect and pass-through any redirects without modifying them\n if (isRedirect(handlerResult)) {\n return handlerResult;\n }\n // clone and try to inject requestState into all json-like responses\n // if this fails, the user probably didn't return a json object or a valid json string\n return injectRequestStateIntoResponse(\n handlerResult,\n requestState,\n args.context,\n additionalState,\n includeClerkHeaders,\n );\n } catch {\n throw new Error(invalidRootLoaderCallbackReturn);\n }\n }\n\n if (isDataWithResponseInit(handlerResult)) {\n try {\n // clone and try to inject requestState into all json-like responses\n // if this fails, the user probably didn't return a json object or a valid json string\n return injectRequestStateIntoResponse(\n new Response(JSON.stringify(handlerResult.data), handlerResult.init ?? undefined),\n requestState,\n args.context,\n additionalState,\n includeClerkHeaders,\n );\n } catch {\n throw new Error(invalidRootLoaderCallbackReturn);\n }\n }\n\n // If the return value of the user's handler is null or a plain object, return plain object with streaming support\n const { clerkState } = getResponseClerkState(requestState, args.context, additionalState);\n\n return {\n ...(handlerResult ?? {}),\n ...clerkState,\n };\n}\n\n/**\n * Makes authorization state available in your application by wrapping the root loader.\n *\n * @see https://clerk.com/docs/references/react-router/root-auth-loader\n */\nexport const rootAuthLoader: RootAuthLoader = async (\n args: LoaderFunctionArgs,\n handlerOrOptions: any,\n): Promise<LoaderFunctionReturn> => {\n const handler = typeof handlerOrOptions === 'function' ? handlerOrOptions : undefined;\n\n const hasMiddlewareFlag = IsOptIntoMiddleware(args.context);\n const contextValue = hasMiddlewareFlag && args.context.get(requestStateContext);\n\n if (!contextValue) {\n throw new Error(\n 'Clerk: clerkMiddleware() not detected. Make sure you have installed the clerkMiddleware in your root route.',\n );\n }\n\n const { requestState, additionalState } = contextValue;\n return processRootAuthLoader(args, requestState, additionalState, handler);\n};\n"],"mappings":";;;;;;;;AAwCA,eAAe,sBACb,MACA,cACA,iBACA,SAC+B;CAE/B,MAAM,sBAAsB,EADN,oBAAoB,KAAK,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,IAAI,aAAa;CAG3F,IAAI,CAAC,SAAS;EAEZ,MAAM,EAAE,eAAe,sBAAsB,cAAc,KAAK,SAAS,eAAe;EACxF,OAAO,EACL,GAAG,WACL;CACF;CAQA,MAAM,gBAAgB,MAAM,QAAQ;EAJlC,GAAG;EACH,SAAS,OAAO,OAAO,KAAK,SAAS,EAAE,MAAM,aAAa,OAAO,EAAE,CAAC;CAGvB,CAAC;CAEhD,IAAI,WAAW,aAAa,GAC1B,IAAI;EAEF,IAAI,WAAW,aAAa,GAC1B,OAAO;EAIT,OAAO,+BACL,eACA,cACA,KAAK,SACL,iBACA,mBACF;CACF,QAAQ;EACN,MAAM,IAAI,MAAM,+BAA+B;CACjD;CAGF,IAAI,uBAAuB,aAAa,GACtC,IAAI;EAGF,OAAO,+BACL,IAAI,SAAS,KAAK,UAAU,cAAc,IAAI,GAAG,cAAc,QAAQ,MAAS,GAChF,cACA,KAAK,SACL,iBACA,mBACF;CACF,QAAQ;EACN,MAAM,IAAI,MAAM,+BAA+B;CACjD;CAIF,MAAM,EAAE,eAAe,sBAAsB,cAAc,KAAK,SAAS,eAAe;CAExF,OAAO;EACL,GAAI,iBAAiB,CAAC;EACtB,GAAG;CACL;AACF;;;;;;AAOA,MAAa,iBAAiC,OAC5C,MACA,qBACkC;CAClC,MAAM,UAAU,OAAO,qBAAqB,aAAa,mBAAmB;CAG5E,MAAM,eADoB,oBAAoB,KAAK,OACd,KAAK,KAAK,QAAQ,IAAI,mBAAmB;CAE9E,IAAI,CAAC,cACH,MAAM,IAAI,MACR,6GACF;CAGF,MAAM,EAAE,cAAc,oBAAoB;CAC1C,OAAO,sBAAsB,MAAM,cAAc,iBAAiB,OAAO;AAC3E"}
|
package/dist/server/types.d.ts
CHANGED
|
@@ -1,84 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { MultiDomainAndOrProxy, SignInForceRedirectUrl, SignInFallbackRedirectUrl, SignUpForceRedirectUrl, SignUpFallbackRedirectUrl } from '@clerk/shared/types';
|
|
4
|
-
import { LoaderFunctionArgs, UNSAFE_DataWithResponseInit, LoaderFunction } from 'react-router';
|
|
5
|
-
|
|
6
|
-
type GetAuthReturn = Promise<SignedInAuthObject | SignedOutAuthObject>;
|
|
7
|
-
type ClerkMiddlewareOptions = {
|
|
8
|
-
/**
|
|
9
|
-
* Used to override the default VITE_CLERK_PUBLISHABLE_KEY env variable if needed.
|
|
10
|
-
*/
|
|
11
|
-
publishableKey?: string;
|
|
12
|
-
/**
|
|
13
|
-
* Used to override the CLERK_JWT_KEY env variable if needed.
|
|
14
|
-
*/
|
|
15
|
-
jwtKey?: string;
|
|
16
|
-
/**
|
|
17
|
-
* Used to override the CLERK_SECRET_KEY env variable if needed.
|
|
18
|
-
*/
|
|
19
|
-
secretKey?: string;
|
|
20
|
-
/**
|
|
21
|
-
* Used to override the CLERK_MACHINE_SECRET_KEY env variable if needed.
|
|
22
|
-
*/
|
|
23
|
-
machineSecretKey?: string;
|
|
24
|
-
signInUrl?: string;
|
|
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;
|
|
32
|
-
} & Pick<VerifyTokenOptions, 'audience' | 'authorizedParties'> & MultiDomainAndOrProxy & SignInForceRedirectUrl & SignInFallbackRedirectUrl & SignUpForceRedirectUrl & SignUpFallbackRedirectUrl;
|
|
33
|
-
type RootAuthLoaderOptions = ClerkMiddlewareOptions & {
|
|
34
|
-
/**
|
|
35
|
-
* @deprecated Use [session token claims](https://clerk.com/docs/backend-requests/making/custom-session-token) instead.
|
|
36
|
-
*/
|
|
37
|
-
loadUser?: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* @deprecated Use [session token claims](https://clerk.com/docs/backend-requests/making/custom-session-token) instead.
|
|
40
|
-
*/
|
|
41
|
-
loadSession?: boolean;
|
|
42
|
-
/**
|
|
43
|
-
* @deprecated Use [session token claims](https://clerk.com/docs/backend-requests/making/custom-session-token) instead.
|
|
44
|
-
*/
|
|
45
|
-
loadOrganization?: boolean;
|
|
46
|
-
};
|
|
47
|
-
interface KeylessUrls {
|
|
48
|
-
__keylessClaimUrl?: string;
|
|
49
|
-
__keylessApiKeysUrl?: string;
|
|
50
|
-
}
|
|
51
|
-
type AdditionalStateOptions = SignInFallbackRedirectUrl & SignUpFallbackRedirectUrl & SignInForceRedirectUrl & SignUpForceRedirectUrl & KeylessUrls;
|
|
52
|
-
/**
|
|
53
|
-
* @deprecated This type is no longer used internally. Use `AdditionalStateOptions` instead.
|
|
54
|
-
*/
|
|
55
|
-
type RequestStateWithRedirectUrls = RequestState & SignInForceRedirectUrl & SignInFallbackRedirectUrl & SignUpForceRedirectUrl & SignUpFallbackRedirectUrl & KeylessUrls;
|
|
56
|
-
type RootAuthLoaderCallback<Options extends RootAuthLoaderOptions> = (args: LoaderFunctionArgsWithAuth<Options>) => RootAuthLoaderCallbackReturn;
|
|
57
|
-
type ObjectLike = Record<string, unknown> | null;
|
|
58
|
-
/**
|
|
59
|
-
* We are not using `LoaderFunctionReturn` here because we can't support non-object return values. We need to be able to decorate the return value with authentication state, and so we need something object-like.
|
|
60
|
-
*
|
|
61
|
-
* In the case of `null`, we will return an object containing only the authentication state.
|
|
62
|
-
*/
|
|
63
|
-
type RootAuthLoaderCallbackReturn = Promise<Response> | Response | Promise<ObjectLike> | ObjectLike | UNSAFE_DataWithResponseInit<unknown> | Promise<UNSAFE_DataWithResponseInit<unknown>>;
|
|
64
|
-
type LoaderFunctionReturn = ReturnType<LoaderFunction>;
|
|
65
|
-
type LoaderFunctionArgsWithAuth<Options extends RootAuthLoaderOptions = any> = LoaderFunctionArgs & {
|
|
66
|
-
request: RequestWithAuth<Options>;
|
|
67
|
-
};
|
|
68
|
-
type RequestWithAuth<Options extends RootAuthLoaderOptions = any> = LoaderFunctionArgs['request'] & {
|
|
69
|
-
auth: Omit<SignedInAuthObject | SignedOutAuthObject, 'session' | 'user' | 'organization'>;
|
|
70
|
-
} & (Options extends {
|
|
71
|
-
loadSession: true;
|
|
72
|
-
} ? {
|
|
73
|
-
session: Session | null;
|
|
74
|
-
} : object) & (Options extends {
|
|
75
|
-
loadUser: true;
|
|
76
|
-
} ? {
|
|
77
|
-
user: User | null;
|
|
78
|
-
} : object) & (Options extends {
|
|
79
|
-
loadOrganization: true;
|
|
80
|
-
} ? {
|
|
81
|
-
organization: Organization | null;
|
|
82
|
-
} : object);
|
|
83
|
-
|
|
84
|
-
export type { AdditionalStateOptions, ClerkMiddlewareOptions, GetAuthReturn, KeylessUrls, LoaderFunctionArgsWithAuth, LoaderFunctionReturn, RequestStateWithRedirectUrls, RequestWithAuth, RootAuthLoaderCallback, RootAuthLoaderOptions };
|
|
1
|
+
import { a as LoaderFunctionArgsWithAuth, c as RequestWithAuth, i as KeylessUrls, l as RootAuthLoaderCallback, n as ClerkMiddlewareOptions, o as LoaderFunctionReturn, r as GetAuthReturn, s as RequestStateWithRedirectUrls, t as AdditionalStateOptions, u as RootAuthLoaderOptions } from "../types-CkBFvMvW.js";
|
|
2
|
+
export { AdditionalStateOptions, ClerkMiddlewareOptions, GetAuthReturn, KeylessUrls, LoaderFunctionArgsWithAuth, LoaderFunctionReturn, RequestStateWithRedirectUrls, RequestWithAuth, RootAuthLoaderCallback, RootAuthLoaderOptions };
|
package/dist/server/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { };
|
package/dist/server/utils.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AppLoadContext, UNSAFE_DataWithResponseInit } from
|
|
3
|
-
import {
|
|
4
|
-
import '@clerk/backend';
|
|
5
|
-
import '@clerk/shared/types';
|
|
1
|
+
import { t as AdditionalStateOptions } from "../types-CkBFvMvW.js";
|
|
2
|
+
import { AppLoadContext, UNSAFE_DataWithResponseInit } from "react-router";
|
|
3
|
+
import { RequestState } from "@clerk/backend/internal";
|
|
6
4
|
|
|
5
|
+
//#region src/server/utils.d.ts
|
|
7
6
|
declare function isResponse(value: any): value is Response;
|
|
8
7
|
declare function isDataWithResponseInit(value: any): value is UNSAFE_DataWithResponseInit<unknown>;
|
|
9
8
|
declare function isRedirect(res: Response): boolean;
|
|
@@ -21,12 +20,12 @@ declare const injectRequestStateIntoResponse: (response: Response, requestState:
|
|
|
21
20
|
* @internal
|
|
22
21
|
*/
|
|
23
22
|
declare function getResponseClerkState(requestState: RequestState, context: AppLoadContext, additionalStateOptions?: AdditionalStateOptions): {
|
|
23
|
+
clerkState: {
|
|
24
24
|
clerkState: {
|
|
25
|
-
|
|
26
|
-
__internal_clerk_state: any;
|
|
27
|
-
};
|
|
25
|
+
__internal_clerk_state: any;
|
|
28
26
|
};
|
|
29
|
-
|
|
27
|
+
};
|
|
28
|
+
headers: Headers;
|
|
30
29
|
};
|
|
31
30
|
/**
|
|
32
31
|
* Wraps obscured clerk internals with a readable `clerkState` key.
|
|
@@ -35,9 +34,9 @@ declare function getResponseClerkState(requestState: RequestState, context: AppL
|
|
|
35
34
|
* @internal
|
|
36
35
|
*/
|
|
37
36
|
declare const wrapWithClerkState: (data: any) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
clerkState: {
|
|
38
|
+
__internal_clerk_state: any;
|
|
39
|
+
};
|
|
41
40
|
};
|
|
42
41
|
/**
|
|
43
42
|
* Patches request to avoid duplex issues with unidici
|
|
@@ -47,5 +46,6 @@ declare const wrapWithClerkState: (data: any) => {
|
|
|
47
46
|
* @internal
|
|
48
47
|
*/
|
|
49
48
|
declare const patchRequest: (request: Request) => Request;
|
|
50
|
-
|
|
49
|
+
//#endregion
|
|
51
50
|
export { IsOptIntoMiddleware, assertValidHandlerResult, getResponseClerkState, injectRequestStateIntoResponse, isDataWithResponseInit, isRedirect, isResponse, parseCookies, patchRequest, wrapWithClerkState };
|
|
51
|
+
//# sourceMappingURL=utils.d.ts.map
|
package/dist/server/utils.js
CHANGED
|
@@ -1,101 +1,111 @@
|
|
|
1
|
-
// src/server/utils.ts
|
|
2
|
-
import { constants, debugRequestState } from "@clerk/backend/internal";
|
|
3
|
-
import { parse as parseCookie } from "cookie";
|
|
4
1
|
import { getPublicEnvVariables } from "../utils/env.js";
|
|
5
2
|
import { canUseKeyless } from "../utils/feature-flags.js";
|
|
3
|
+
import { constants, debugRequestState } from "@clerk/backend/internal";
|
|
4
|
+
import { parse } from "cookie";
|
|
5
|
+
|
|
6
|
+
//#region src/server/utils.ts
|
|
6
7
|
function isResponse(value) {
|
|
7
|
-
|
|
8
|
+
return value != null && typeof value.status === "number" && typeof value.statusText === "string" && typeof value.headers === "object" && typeof value.body !== "undefined";
|
|
8
9
|
}
|
|
9
10
|
function isDataWithResponseInit(value) {
|
|
10
|
-
|
|
11
|
+
return typeof value === "object" && value != null && "type" in value && "data" in value && "init" in value && value.type === "DataWithResponseInit";
|
|
11
12
|
}
|
|
12
13
|
function isRedirect(res) {
|
|
13
|
-
|
|
14
|
+
return res.status >= 300 && res.status < 400;
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
const parseCookies = (req) => {
|
|
17
|
+
return parse(req.headers.get("cookie") || "");
|
|
17
18
|
};
|
|
18
19
|
function assertValidHandlerResult(val, error) {
|
|
19
|
-
|
|
20
|
-
throw new Error(error || "");
|
|
21
|
-
}
|
|
20
|
+
if (val !== null && typeof val !== "object" || Array.isArray(val)) throw new Error(error || "");
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
/**
|
|
23
|
+
* `get` and `set` properties will only be available if v8_middleware flag is enabled
|
|
24
|
+
* See: https://reactrouter.com/upgrading/future#futurev8_middleware
|
|
25
|
+
*/
|
|
26
|
+
const IsOptIntoMiddleware = (context) => {
|
|
27
|
+
return "get" in context && "set" in context;
|
|
25
28
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
const injectRequestStateIntoResponse = async (response, requestState, context, additionalStateOptions = {}, includeClerkHeaders = false) => {
|
|
30
|
+
const clone = new Response(response.body, response);
|
|
31
|
+
const data = await clone.json();
|
|
32
|
+
const { clerkState, headers } = getResponseClerkState(requestState, context, additionalStateOptions);
|
|
33
|
+
clone.headers.set(constants.Headers.ContentType, constants.ContentTypes.Json);
|
|
34
|
+
if (includeClerkHeaders) headers.forEach((value, key) => {
|
|
35
|
+
clone.headers.append(key, value);
|
|
36
|
+
});
|
|
37
|
+
return Response.json({
|
|
38
|
+
...data || {},
|
|
39
|
+
...clerkState
|
|
40
|
+
}, clone);
|
|
37
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* Returns the clerk state object and observability headers to be injected into a loader response.
|
|
44
|
+
*
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
38
47
|
function getResponseClerkState(requestState, context, additionalStateOptions = {}) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
48
|
+
const { reason, message, isSignedIn, ...rest } = requestState;
|
|
49
|
+
const envVars = getPublicEnvVariables(context);
|
|
50
|
+
const { __keylessClaimUrl, __keylessApiKeysUrl, ...redirectUrlOptions } = additionalStateOptions;
|
|
51
|
+
const baseState = {
|
|
52
|
+
__clerk_ssr_state: rest.toAuth(),
|
|
53
|
+
__publishableKey: requestState.publishableKey,
|
|
54
|
+
__proxyUrl: requestState.proxyUrl,
|
|
55
|
+
__domain: requestState.domain,
|
|
56
|
+
__isSatellite: requestState.isSatellite,
|
|
57
|
+
__signInUrl: requestState.signInUrl,
|
|
58
|
+
__signUpUrl: requestState.signUpUrl,
|
|
59
|
+
__signInForceRedirectUrl: redirectUrlOptions.signInForceRedirectUrl,
|
|
60
|
+
__signUpForceRedirectUrl: redirectUrlOptions.signUpForceRedirectUrl,
|
|
61
|
+
__signInFallbackRedirectUrl: redirectUrlOptions.signInFallbackRedirectUrl,
|
|
62
|
+
__signUpFallbackRedirectUrl: redirectUrlOptions.signUpFallbackRedirectUrl,
|
|
63
|
+
__clerk_debug: debugRequestState(requestState),
|
|
64
|
+
__clerkJSUrl: envVars.clerkJsUrl,
|
|
65
|
+
__clerkJSVersion: envVars.clerkJsVersion,
|
|
66
|
+
__clerkUIUrl: envVars.clerkUIUrl,
|
|
67
|
+
__clerkUIVersion: envVars.clerkUIVersion,
|
|
68
|
+
__prefetchUI: envVars.prefetchUI,
|
|
69
|
+
__telemetryDisabled: envVars.telemetryDisabled,
|
|
70
|
+
__telemetryDebug: envVars.telemetryDebug,
|
|
71
|
+
__unsafeDisableDevelopmentModeConsoleWarning: envVars.unsafeDisableDevelopmentModeConsoleWarning
|
|
72
|
+
};
|
|
73
|
+
if (canUseKeyless && __keylessClaimUrl) {
|
|
74
|
+
baseState.__keylessClaimUrl = __keylessClaimUrl;
|
|
75
|
+
baseState.__keylessApiKeysUrl = __keylessApiKeysUrl;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
clerkState: wrapWithClerkState(baseState),
|
|
79
|
+
headers: requestState.headers
|
|
80
|
+
};
|
|
73
81
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
cache: request.cache
|
|
83
|
-
});
|
|
84
|
-
if (clonedRequest.method !== "GET" && clonedRequest.body !== null && !("duplex" in clonedRequest)) {
|
|
85
|
-
clonedRequest.duplex = "half";
|
|
86
|
-
}
|
|
87
|
-
return clonedRequest;
|
|
82
|
+
/**
|
|
83
|
+
* Wraps obscured clerk internals with a readable `clerkState` key.
|
|
84
|
+
* This is intended to be passed by the user into <ClerkProvider>
|
|
85
|
+
*
|
|
86
|
+
* @internal
|
|
87
|
+
*/
|
|
88
|
+
const wrapWithClerkState = (data) => {
|
|
89
|
+
return { clerkState: { __internal_clerk_state: { ...data } } };
|
|
88
90
|
};
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Patches request to avoid duplex issues with unidici
|
|
93
|
+
* For more information, see:
|
|
94
|
+
* https://github.com/nodejs/node/issues/46221
|
|
95
|
+
* https://github.com/whatwg/fetch/pull/1457
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
const patchRequest = (request) => {
|
|
99
|
+
const clonedRequest = new Request(request.url, {
|
|
100
|
+
headers: request.headers,
|
|
101
|
+
method: request.method,
|
|
102
|
+
redirect: request.redirect,
|
|
103
|
+
cache: request.cache
|
|
104
|
+
});
|
|
105
|
+
if (clonedRequest.method !== "GET" && clonedRequest.body !== null && !("duplex" in clonedRequest)) clonedRequest.duplex = "half";
|
|
106
|
+
return clonedRequest;
|
|
100
107
|
};
|
|
108
|
+
|
|
109
|
+
//#endregion
|
|
110
|
+
export { IsOptIntoMiddleware, assertValidHandlerResult, getResponseClerkState, injectRequestStateIntoResponse, isDataWithResponseInit, isRedirect, isResponse, parseCookies, patchRequest, wrapWithClerkState };
|
|
101
111
|
//# sourceMappingURL=utils.js.map
|
package/dist/server/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/utils.ts"],"sourcesContent":["import type { RequestState } from '@clerk/backend/internal';\nimport { constants, debugRequestState } from '@clerk/backend/internal';\nimport { parse as parseCookie } from 'cookie';\nimport type { AppLoadContext, UNSAFE_DataWithResponseInit } from 'react-router';\n\nimport { getPublicEnvVariables } from '../utils/env';\nimport { canUseKeyless } from '../utils/feature-flags';\nimport type { AdditionalStateOptions } from './types';\n\nexport function isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === 'number' &&\n typeof value.statusText === 'string' &&\n typeof value.headers === 'object' &&\n typeof value.body !== 'undefined'\n );\n}\n\nexport function isDataWithResponseInit(value: any): value is UNSAFE_DataWithResponseInit<unknown> {\n return (\n typeof value === 'object' &&\n value != null &&\n 'type' in value &&\n 'data' in value &&\n 'init' in value &&\n value.type === 'DataWithResponseInit'\n );\n}\n\nexport function isRedirect(res: Response): boolean {\n return res.status >= 300 && res.status < 400;\n}\n\nexport const parseCookies = (req: Request) => {\n return parseCookie(req.headers.get('cookie') || '');\n};\n\nexport function assertValidHandlerResult(val: any, error?: string): asserts val is Record<string, unknown> | null {\n if ((val !== null && typeof val !== 'object') || Array.isArray(val)) {\n throw new Error(error || '');\n }\n}\n\n/**\n * `get` and `set` properties will only be available if v8_middleware flag is enabled\n * See: https://reactrouter.com/upgrading/future#futurev8_middleware\n */\nexport const IsOptIntoMiddleware = (context: AppLoadContext) => {\n return 'get' in context && 'set' in context;\n};\n\nexport const injectRequestStateIntoResponse = async (\n response: Response,\n requestState: RequestState,\n context: AppLoadContext,\n additionalStateOptions: AdditionalStateOptions = {},\n includeClerkHeaders = false,\n) => {\n const clone = new Response(response.body, response);\n const data = await clone.json();\n\n const { clerkState, headers } = getResponseClerkState(requestState, context, additionalStateOptions);\n\n // set the correct content-type header in case the user returned a `Response` directly\n clone.headers.set(constants.Headers.ContentType, constants.ContentTypes.Json);\n\n // Only add Clerk headers if requested\n if (includeClerkHeaders) {\n headers.forEach((value, key) => {\n clone.headers.append(key, value);\n });\n }\n\n return Response.json({ ...(data || {}), ...clerkState }, clone);\n};\n\n/**\n * Returns the clerk state object and observability headers to be injected into a loader response.\n *\n * @internal\n */\nexport function getResponseClerkState(\n requestState: RequestState,\n context: AppLoadContext,\n additionalStateOptions: AdditionalStateOptions = {},\n) {\n const { reason, message, isSignedIn, ...rest } = requestState;\n const envVars = getPublicEnvVariables(context);\n const { __keylessClaimUrl, __keylessApiKeysUrl, ...redirectUrlOptions } = additionalStateOptions;\n\n const baseState: Record<string, unknown> = {\n __clerk_ssr_state: rest.toAuth(),\n __publishableKey: requestState.publishableKey,\n __proxyUrl: requestState.proxyUrl,\n __domain: requestState.domain,\n __isSatellite: requestState.isSatellite,\n __signInUrl: requestState.signInUrl,\n __signUpUrl: requestState.signUpUrl,\n __signInForceRedirectUrl: redirectUrlOptions.signInForceRedirectUrl,\n __signUpForceRedirectUrl: redirectUrlOptions.signUpForceRedirectUrl,\n __signInFallbackRedirectUrl: redirectUrlOptions.signInFallbackRedirectUrl,\n __signUpFallbackRedirectUrl: redirectUrlOptions.signUpFallbackRedirectUrl,\n __clerk_debug: debugRequestState(requestState),\n __clerkJSUrl: envVars.clerkJsUrl,\n __clerkJSVersion: envVars.clerkJsVersion,\n __clerkUIUrl: envVars.clerkUIUrl,\n __clerkUIVersion: envVars.clerkUIVersion,\n __prefetchUI: envVars.prefetchUI,\n __telemetryDisabled: envVars.telemetryDisabled,\n __telemetryDebug: envVars.telemetryDebug,\n __unsafeDisableDevelopmentModeConsoleWarning: envVars.unsafeDisableDevelopmentModeConsoleWarning,\n };\n\n if (canUseKeyless && __keylessClaimUrl) {\n baseState.__keylessClaimUrl = __keylessClaimUrl;\n baseState.__keylessApiKeysUrl = __keylessApiKeysUrl;\n }\n\n const clerkState = wrapWithClerkState(baseState);\n\n return {\n clerkState,\n headers: requestState.headers,\n };\n}\n\n/**\n * Wraps obscured clerk internals with a readable `clerkState` key.\n * This is intended to be passed by the user into <ClerkProvider>\n *\n * @internal\n */\nexport const wrapWithClerkState = (data: any) => {\n return { clerkState: { __internal_clerk_state: { ...data } } };\n};\n\n/**\n * Patches request to avoid duplex issues with unidici\n * For more information, see:\n * https://github.com/nodejs/node/issues/46221\n * https://github.com/whatwg/fetch/pull/1457\n * @internal\n */\nexport const patchRequest = (request: Request) => {\n // Omit `signal` from the clone: Node 24's bundled undici tightened the\n // instanceof AbortSignal check, which rejects cross-realm signals (e.g.\n // those carried by framework Request subclasses).\n const clonedRequest = new Request(request.url, {\n headers: request.headers,\n method: request.method,\n redirect: request.redirect,\n cache: request.cache,\n });\n\n // If duplex is not set, set it to 'half' to avoid duplex issues with unidici\n if (clonedRequest.method !== 'GET' && clonedRequest.body !== null && !('duplex' in clonedRequest)) {\n (clonedRequest as unknown as { duplex: 'half' }).duplex = 'half';\n }\n\n return clonedRequest;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","names":["parseCookie"],"sources":["../../src/server/utils.ts"],"sourcesContent":["import type { RequestState } from '@clerk/backend/internal';\nimport { constants, debugRequestState } from '@clerk/backend/internal';\nimport { parse as parseCookie } from 'cookie';\nimport type { AppLoadContext, UNSAFE_DataWithResponseInit } from 'react-router';\n\nimport { getPublicEnvVariables } from '../utils/env';\nimport { canUseKeyless } from '../utils/feature-flags';\nimport type { AdditionalStateOptions } from './types';\n\nexport function isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === 'number' &&\n typeof value.statusText === 'string' &&\n typeof value.headers === 'object' &&\n typeof value.body !== 'undefined'\n );\n}\n\nexport function isDataWithResponseInit(value: any): value is UNSAFE_DataWithResponseInit<unknown> {\n return (\n typeof value === 'object' &&\n value != null &&\n 'type' in value &&\n 'data' in value &&\n 'init' in value &&\n value.type === 'DataWithResponseInit'\n );\n}\n\nexport function isRedirect(res: Response): boolean {\n return res.status >= 300 && res.status < 400;\n}\n\nexport const parseCookies = (req: Request) => {\n return parseCookie(req.headers.get('cookie') || '');\n};\n\nexport function assertValidHandlerResult(val: any, error?: string): asserts val is Record<string, unknown> | null {\n if ((val !== null && typeof val !== 'object') || Array.isArray(val)) {\n throw new Error(error || '');\n }\n}\n\n/**\n * `get` and `set` properties will only be available if v8_middleware flag is enabled\n * See: https://reactrouter.com/upgrading/future#futurev8_middleware\n */\nexport const IsOptIntoMiddleware = (context: AppLoadContext) => {\n return 'get' in context && 'set' in context;\n};\n\nexport const injectRequestStateIntoResponse = async (\n response: Response,\n requestState: RequestState,\n context: AppLoadContext,\n additionalStateOptions: AdditionalStateOptions = {},\n includeClerkHeaders = false,\n) => {\n const clone = new Response(response.body, response);\n const data = await clone.json();\n\n const { clerkState, headers } = getResponseClerkState(requestState, context, additionalStateOptions);\n\n // set the correct content-type header in case the user returned a `Response` directly\n clone.headers.set(constants.Headers.ContentType, constants.ContentTypes.Json);\n\n // Only add Clerk headers if requested\n if (includeClerkHeaders) {\n headers.forEach((value, key) => {\n clone.headers.append(key, value);\n });\n }\n\n return Response.json({ ...(data || {}), ...clerkState }, clone);\n};\n\n/**\n * Returns the clerk state object and observability headers to be injected into a loader response.\n *\n * @internal\n */\nexport function getResponseClerkState(\n requestState: RequestState,\n context: AppLoadContext,\n additionalStateOptions: AdditionalStateOptions = {},\n) {\n const { reason, message, isSignedIn, ...rest } = requestState;\n const envVars = getPublicEnvVariables(context);\n const { __keylessClaimUrl, __keylessApiKeysUrl, ...redirectUrlOptions } = additionalStateOptions;\n\n const baseState: Record<string, unknown> = {\n __clerk_ssr_state: rest.toAuth(),\n __publishableKey: requestState.publishableKey,\n __proxyUrl: requestState.proxyUrl,\n __domain: requestState.domain,\n __isSatellite: requestState.isSatellite,\n __signInUrl: requestState.signInUrl,\n __signUpUrl: requestState.signUpUrl,\n __signInForceRedirectUrl: redirectUrlOptions.signInForceRedirectUrl,\n __signUpForceRedirectUrl: redirectUrlOptions.signUpForceRedirectUrl,\n __signInFallbackRedirectUrl: redirectUrlOptions.signInFallbackRedirectUrl,\n __signUpFallbackRedirectUrl: redirectUrlOptions.signUpFallbackRedirectUrl,\n __clerk_debug: debugRequestState(requestState),\n __clerkJSUrl: envVars.clerkJsUrl,\n __clerkJSVersion: envVars.clerkJsVersion,\n __clerkUIUrl: envVars.clerkUIUrl,\n __clerkUIVersion: envVars.clerkUIVersion,\n __prefetchUI: envVars.prefetchUI,\n __telemetryDisabled: envVars.telemetryDisabled,\n __telemetryDebug: envVars.telemetryDebug,\n __unsafeDisableDevelopmentModeConsoleWarning: envVars.unsafeDisableDevelopmentModeConsoleWarning,\n };\n\n if (canUseKeyless && __keylessClaimUrl) {\n baseState.__keylessClaimUrl = __keylessClaimUrl;\n baseState.__keylessApiKeysUrl = __keylessApiKeysUrl;\n }\n\n const clerkState = wrapWithClerkState(baseState);\n\n return {\n clerkState,\n headers: requestState.headers,\n };\n}\n\n/**\n * Wraps obscured clerk internals with a readable `clerkState` key.\n * This is intended to be passed by the user into <ClerkProvider>\n *\n * @internal\n */\nexport const wrapWithClerkState = (data: any) => {\n return { clerkState: { __internal_clerk_state: { ...data } } };\n};\n\n/**\n * Patches request to avoid duplex issues with unidici\n * For more information, see:\n * https://github.com/nodejs/node/issues/46221\n * https://github.com/whatwg/fetch/pull/1457\n * @internal\n */\nexport const patchRequest = (request: Request) => {\n // Omit `signal` from the clone: Node 24's bundled undici tightened the\n // instanceof AbortSignal check, which rejects cross-realm signals (e.g.\n // those carried by framework Request subclasses).\n const clonedRequest = new Request(request.url, {\n headers: request.headers,\n method: request.method,\n redirect: request.redirect,\n cache: request.cache,\n });\n\n // If duplex is not set, set it to 'half' to avoid duplex issues with unidici\n if (clonedRequest.method !== 'GET' && clonedRequest.body !== null && !('duplex' in clonedRequest)) {\n (clonedRequest as unknown as { duplex: 'half' }).duplex = 'half';\n }\n\n return clonedRequest;\n};\n"],"mappings":";;;;;;AASA,SAAgB,WAAW,OAA+B;CACxD,OACE,SAAS,QACT,OAAO,MAAM,WAAW,YACxB,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,YAAY,YACzB,OAAO,MAAM,SAAS;AAE1B;AAEA,SAAgB,uBAAuB,OAA2D;CAChG,OACE,OAAO,UAAU,YACjB,SAAS,QACT,UAAU,SACV,UAAU,SACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAgB,WAAW,KAAwB;CACjD,OAAO,IAAI,UAAU,OAAO,IAAI,SAAS;AAC3C;AAEA,MAAa,gBAAgB,QAAiB;CAC5C,OAAOA,MAAY,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE;AACpD;AAEA,SAAgB,yBAAyB,KAAU,OAA+D;CAChH,IAAK,QAAQ,QAAQ,OAAO,QAAQ,YAAa,MAAM,QAAQ,GAAG,GAChE,MAAM,IAAI,MAAM,SAAS,EAAE;AAE/B;;;;;AAMA,MAAa,uBAAuB,YAA4B;CAC9D,OAAO,SAAS,WAAW,SAAS;AACtC;AAEA,MAAa,iCAAiC,OAC5C,UACA,cACA,SACA,yBAAiD,CAAC,GAClD,sBAAsB,UACnB;CACH,MAAM,QAAQ,IAAI,SAAS,SAAS,MAAM,QAAQ;CAClD,MAAM,OAAO,MAAM,MAAM,KAAK;CAE9B,MAAM,EAAE,YAAY,YAAY,sBAAsB,cAAc,SAAS,sBAAsB;CAGnG,MAAM,QAAQ,IAAI,UAAU,QAAQ,aAAa,UAAU,aAAa,IAAI;CAG5E,IAAI,qBACF,QAAQ,SAAS,OAAO,QAAQ;EAC9B,MAAM,QAAQ,OAAO,KAAK,KAAK;CACjC,CAAC;CAGH,OAAO,SAAS,KAAK;EAAE,GAAI,QAAQ,CAAC;EAAI,GAAG;CAAW,GAAG,KAAK;AAChE;;;;;;AAOA,SAAgB,sBACd,cACA,SACA,yBAAiD,CAAC,GAClD;CACA,MAAM,EAAE,QAAQ,SAAS,YAAY,GAAG,SAAS;CACjD,MAAM,UAAU,sBAAsB,OAAO;CAC7C,MAAM,EAAE,mBAAmB,qBAAqB,GAAG,uBAAuB;CAE1E,MAAM,YAAqC;EACzC,mBAAmB,KAAK,OAAO;EAC/B,kBAAkB,aAAa;EAC/B,YAAY,aAAa;EACzB,UAAU,aAAa;EACvB,eAAe,aAAa;EAC5B,aAAa,aAAa;EAC1B,aAAa,aAAa;EAC1B,0BAA0B,mBAAmB;EAC7C,0BAA0B,mBAAmB;EAC7C,6BAA6B,mBAAmB;EAChD,6BAA6B,mBAAmB;EAChD,eAAe,kBAAkB,YAAY;EAC7C,cAAc,QAAQ;EACtB,kBAAkB,QAAQ;EAC1B,cAAc,QAAQ;EACtB,kBAAkB,QAAQ;EAC1B,cAAc,QAAQ;EACtB,qBAAqB,QAAQ;EAC7B,kBAAkB,QAAQ;EAC1B,8CAA8C,QAAQ;CACxD;CAEA,IAAI,iBAAiB,mBAAmB;EACtC,UAAU,oBAAoB;EAC9B,UAAU,sBAAsB;CAClC;CAIA,OAAO;EACL,YAHiB,mBAAmB,SAG3B;EACT,SAAS,aAAa;CACxB;AACF;;;;;;;AAQA,MAAa,sBAAsB,SAAc;CAC/C,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,GAAG,KAAK,EAAE,EAAE;AAC/D;;;;;;;;AASA,MAAa,gBAAgB,YAAqB;CAIhD,MAAM,gBAAgB,IAAI,QAAQ,QAAQ,KAAK;EAC7C,SAAS,QAAQ;EACjB,QAAQ,QAAQ;EAChB,UAAU,QAAQ;EAClB,OAAO,QAAQ;CACjB,CAAC;CAGD,IAAI,cAAc,WAAW,SAAS,cAAc,SAAS,QAAQ,EAAE,YAAY,gBACjF,AAAC,cAAgD,SAAS;CAG5D,OAAO;AACT"}
|
package/dist/ssr/index.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import '../server/types.js';
|
|
6
|
-
import '@clerk/backend/internal';
|
|
7
|
-
import '@clerk/shared/types';
|
|
1
|
+
import { getAuth } from "../server/getAuth.js";
|
|
2
|
+
import { rootAuthLoader } from "../server/rootAuthLoader.js";
|
|
3
|
+
import { AllowlistIdentifier, Client, EmailAddress, ExternalAccount, Invitation, OauthAccessToken, Organization, OrganizationDomain, OrganizationInvitation, OrganizationMembership, OrganizationMembershipPublicUserData, OrganizationMembershipRole, PhoneNumber, SMSMessage, Session, SignInToken, Token, User, WebhookEvent, WebhookEventType } from "@clerk/backend";
|
|
4
|
+
export { type AllowlistIdentifier, type Client, type EmailAddress, type ExternalAccount, type Invitation, type OauthAccessToken, type Organization, type OrganizationDomain, type OrganizationInvitation, type OrganizationMembership, type OrganizationMembershipPublicUserData, type OrganizationMembershipRole, type PhoneNumber, type SMSMessage, type Session, type SignInToken, type Token, type User, type WebhookEvent, type WebhookEventType, getAuth, rootAuthLoader };
|
package/dist/ssr/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// src/ssr/index.ts
|
|
2
1
|
import { rootAuthLoader } from "../server/rootAuthLoader.js";
|
|
3
2
|
import { getAuth } from "../server/getAuth.js";
|
|
4
3
|
import { logger } from "@clerk/shared/logger";
|
|
4
|
+
|
|
5
|
+
//#region src/ssr/index.ts
|
|
5
6
|
logger.warnOnce(`
|
|
6
7
|
Clerk - DEPRECATION WARNING: \`@clerk/react-router/ssr.server\` has been deprecated and will be removed in the next major version.
|
|
7
8
|
|
|
@@ -13,8 +14,7 @@ Before:
|
|
|
13
14
|
After:
|
|
14
15
|
import { getAuth, clerkMiddleware, rootAuthLoader } from '@clerk/react-router/server';
|
|
15
16
|
`);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
};
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { getAuth, rootAuthLoader };
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
package/dist/ssr/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ssr/index.ts"],"sourcesContent":["export { rootAuthLoader } from '../server/rootAuthLoader';\nexport { getAuth } from '../server/getAuth';\nimport { logger } from '@clerk/shared/logger';\n\nlogger.warnOnce(`\nClerk - DEPRECATION WARNING: \\`@clerk/react-router/ssr.server\\` has been deprecated and will be removed in the next major version.\n\nImport from \\`@clerk/react-router/server\\` instead.\n\nBefore:\n import { getAuth, clerkMiddleware, rootAuthLoader } from '@clerk/react-router/ssr.server';\n\nAfter:\n import { getAuth, clerkMiddleware, rootAuthLoader } from '@clerk/react-router/server';\n`);\n\n/**\n * Re-export resource types from @clerk/backend\n */\nexport type {\n OrganizationMembershipRole,\n // Webhook event types\n WebhookEvent,\n WebhookEventType,\n // Resources\n AllowlistIdentifier,\n Client,\n EmailAddress,\n ExternalAccount,\n Invitation,\n OauthAccessToken,\n Organization,\n OrganizationDomain,\n OrganizationInvitation,\n OrganizationMembership,\n OrganizationMembershipPublicUserData,\n PhoneNumber,\n Session,\n SignInToken,\n SMSMessage,\n Token,\n User,\n} from '@clerk/backend';\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/ssr/index.ts"],"sourcesContent":["export { rootAuthLoader } from '../server/rootAuthLoader';\nexport { getAuth } from '../server/getAuth';\nimport { logger } from '@clerk/shared/logger';\n\nlogger.warnOnce(`\nClerk - DEPRECATION WARNING: \\`@clerk/react-router/ssr.server\\` has been deprecated and will be removed in the next major version.\n\nImport from \\`@clerk/react-router/server\\` instead.\n\nBefore:\n import { getAuth, clerkMiddleware, rootAuthLoader } from '@clerk/react-router/ssr.server';\n\nAfter:\n import { getAuth, clerkMiddleware, rootAuthLoader } from '@clerk/react-router/server';\n`);\n\n/**\n * Re-export resource types from @clerk/backend\n */\nexport type {\n OrganizationMembershipRole,\n // Webhook event types\n WebhookEvent,\n WebhookEventType,\n // Resources\n AllowlistIdentifier,\n Client,\n EmailAddress,\n ExternalAccount,\n Invitation,\n OauthAccessToken,\n Organization,\n OrganizationDomain,\n OrganizationInvitation,\n OrganizationMembership,\n OrganizationMembershipPublicUserData,\n PhoneNumber,\n Session,\n SignInToken,\n SMSMessage,\n Token,\n User,\n} from '@clerk/backend';\n"],"mappings":";;;;;AAIA,OAAO,SAAS;;;;;;;;;;CAUf"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
import '@clerk/react/internal';
|
|
6
|
-
import 'react';
|
|
7
|
-
import '@clerk/backend';
|
|
8
|
-
import '@clerk/backend/internal';
|
|
9
|
-
import 'react-router';
|
|
1
|
+
import { n as ReactRouterClerkProviderProps, r as WithClerkState, t as ClerkState } from "../types-C3uAu7q3.js";
|
|
2
|
+
import { a as LoaderFunctionArgsWithAuth, c as RequestWithAuth, l as RootAuthLoaderCallback, n as ClerkMiddlewareOptions, o as LoaderFunctionReturn, r as GetAuthReturn, s as RequestStateWithRedirectUrls, u as RootAuthLoaderOptions } from "../types-CkBFvMvW.js";
|
|
3
|
+
export type * from "@clerk/shared/types";
|
|
4
|
+
export type { ClerkMiddlewareOptions, ClerkState, GetAuthReturn, LoaderFunctionArgsWithAuth, LoaderFunctionReturn, ReactRouterClerkProviderProps, RequestStateWithRedirectUrls, RequestWithAuth, RootAuthLoaderCallback, RootAuthLoaderOptions, WithClerkState };
|
package/dist/types/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { };
|