@clerk/nextjs
Version:
Clerk SDK for NextJS
184 lines • 8.41 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var ClerkProvider_exports = {};
__export(ClerkProvider_exports, {
ClerkProvider: () => ClerkProvider
});
module.exports = __toCommonJS(ClerkProvider_exports);
var import_headers = require("next/headers");
var import_react = __toESM(require("react"));
var import_PromisifiedAuthProvider = require("../../client-boundary/PromisifiedAuthProvider");
var import_buildClerkProps = require("../../server/buildClerkProps");
var import_createClerkClient = require("../../server/createClerkClient");
var import_feature_flags = require("../../utils/feature-flags");
var import_mergeNextClerkPropsWithEnv = require("../../utils/mergeNextClerkPropsWithEnv");
var import_only_try = require("../../utils/only-try");
var import_sdk_versions = require("../../utils/sdk-versions");
var import_ClerkProvider = require("../client/ClerkProvider");
var import_keyless_actions = require("../keyless-actions");
var import_utils = require("./utils");
const getDynamicClerkState = import_react.default.cache(async function getDynamicClerkState2() {
const request = await (0, import_utils.buildRequestLike)();
const data = (0, import_buildClerkProps.getDynamicAuthData)(request);
return data;
});
const getNonceFromCSPHeader = import_react.default.cache(async function getNonceFromCSPHeader2() {
return (0, import_utils.getScriptNonceFromHeader)((await (0, import_headers.headers)()).get("Content-Security-Policy") || "") || "";
});
async function ClerkProvider(props) {
const { children, dynamic, ...rest } = props;
async function generateStatePromise() {
if (!dynamic) {
return Promise.resolve(null);
}
if (import_sdk_versions.isNext13) {
return Promise.resolve(await getDynamicClerkState());
}
return getDynamicClerkState();
}
async function generateNonce() {
if (!dynamic) {
return Promise.resolve("");
}
if (import_sdk_versions.isNext13) {
return Promise.resolve(await getNonceFromCSPHeader());
}
return getNonceFromCSPHeader();
}
const propsWithEnvs = (0, import_mergeNextClerkPropsWithEnv.mergeNextClerkPropsWithEnv)({
...rest
});
let output = /* @__PURE__ */ import_react.default.createElement(
import_ClerkProvider.ClientClerkProvider,
{
...(0, import_mergeNextClerkPropsWithEnv.mergeNextClerkPropsWithEnv)(rest),
nonce: await generateNonce(),
initialState: await generateStatePromise()
},
children
);
let [shouldRunAsKeyless, runningWithClaimedKeys] = [false, false];
if (import_feature_flags.canUseKeyless) {
const locallyStorePublishableKey = await import("../../server/keyless-node.js").then((mod) => {
var _a;
return (_a = mod.safeParseClerkFile()) == null ? void 0 : _a.publishableKey;
}).catch(() => void 0);
runningWithClaimedKeys = Boolean(propsWithEnvs.publishableKey) && propsWithEnvs.publishableKey === locallyStorePublishableKey;
shouldRunAsKeyless = !propsWithEnvs.publishableKey || runningWithClaimedKeys;
}
if (shouldRunAsKeyless) {
const newOrReadKeys = await import("../../server/keyless-node.js").then((mod) => mod.createOrReadKeyless()).catch(() => null);
const { clerkDevelopmentCache, createConfirmationMessage, createKeylessModeMessage } = await import("../../server/keyless-log-cache.js");
if (newOrReadKeys) {
const clientProvider = /* @__PURE__ */ import_react.default.createElement(
import_ClerkProvider.ClientClerkProvider,
{
...(0, import_mergeNextClerkPropsWithEnv.mergeNextClerkPropsWithEnv)({
...rest,
publishableKey: newOrReadKeys.publishableKey,
__internal_keyless_claimKeylessApplicationUrl: newOrReadKeys.claimUrl,
__internal_keyless_copyInstanceKeysUrl: newOrReadKeys.apiKeysUrl,
// Explicitly use `null` instead of `undefined` here to avoid persisting `deleteKeylessAction` during merging of options.
__internal_keyless_dismissPrompt: runningWithClaimedKeys ? import_keyless_actions.deleteKeylessAction : null
}),
nonce: await generateNonce(),
initialState: await generateStatePromise()
},
children
);
if (runningWithClaimedKeys) {
try {
const secretKey = await import("../../server/keyless-node.js").then(
(mod) => {
var _a;
return (_a = mod.safeParseClerkFile()) == null ? void 0 : _a.secretKey;
}
);
if (!secretKey) {
throw new Error(secretKey);
}
const client = (0, import_createClerkClient.createClerkClientWithOptions)({
secretKey
});
await (clerkDevelopmentCache == null ? void 0 : clerkDevelopmentCache.run(
() => client.__experimental_accountlessApplications.completeAccountlessApplicationOnboarding(),
{
cacheKey: `${newOrReadKeys.publishableKey}_complete`,
onSuccessStale: 24 * 60 * 60 * 1e3
// 24 hours
}
));
} catch {
}
clerkDevelopmentCache == null ? void 0 : clerkDevelopmentCache.log({
cacheKey: `${newOrReadKeys.publishableKey}_claimed`,
msg: createConfirmationMessage()
});
output = clientProvider;
} else {
const KeylessCookieSync = await import("../client/keyless-cookie-sync.js").then((mod) => mod.KeylessCookieSync);
const headerStore = await (0, import_headers.headers)();
const host = headerStore.get("x-forwarded-host");
const proto = headerStore.get("x-forwarded-proto");
const claimUrl = new URL(newOrReadKeys.claimUrl);
if (host && proto) {
(0, import_only_try.onlyTry)(() => claimUrl.searchParams.set("return_url", new URL(`${proto}://${host}`).href));
}
clerkDevelopmentCache == null ? void 0 : clerkDevelopmentCache.log({
cacheKey: newOrReadKeys.publishableKey,
msg: createKeylessModeMessage({ ...newOrReadKeys, claimUrl: claimUrl.href })
});
output = /* @__PURE__ */ import_react.default.createElement(KeylessCookieSync, { ...newOrReadKeys }, clientProvider);
}
} else {
output = /* @__PURE__ */ import_react.default.createElement(
import_ClerkProvider.ClientClerkProvider,
{
...(0, import_mergeNextClerkPropsWithEnv.mergeNextClerkPropsWithEnv)(rest),
nonce: await generateNonce(),
initialState: await generateStatePromise(),
disableKeyless: true
},
children
);
}
}
if (dynamic) {
return (
// TODO: fix types so AuthObject is compatible with InitialState
/* @__PURE__ */ import_react.default.createElement(import_PromisifiedAuthProvider.PromisifiedAuthProvider, { authPromise: generateStatePromise() }, output)
);
}
return output;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
ClerkProvider
});
//# sourceMappingURL=ClerkProvider.js.map
;