@clerk/nextjs
Version:
Clerk SDK for NextJS
107 lines • 3.76 kB
JavaScript
import "../chunk-BUSYA2B4.js";
import { canUseKeyless } from "../utils/feature-flags";
import { createClerkClientWithOptions } from "./createClerkClient";
import { nodeFsOrThrow, nodePathOrThrow } from "./fs/utils";
const EVENT_KEYLESS_ENV_DRIFT_DETECTED = "KEYLESS_ENV_DRIFT_DETECTED";
const EVENT_SAMPLING_RATE = 1;
const TELEMETRY_FLAG_FILE = ".clerk/.tmp/telemetry.json";
function getTelemetryFlagFilePath() {
const path = nodePathOrThrow();
return path.join(process.cwd(), TELEMETRY_FLAG_FILE);
}
function tryMarkTelemetryEventAsFired() {
try {
if (canUseKeyless) {
const { mkdirSync, writeFileSync } = nodeFsOrThrow();
const path = nodePathOrThrow();
const flagFilePath = getTelemetryFlagFilePath();
const flagDirectory = path.dirname(flagFilePath);
mkdirSync(flagDirectory, { recursive: true });
const flagData = {
firedAt: (/* @__PURE__ */ new Date()).toISOString(),
event: EVENT_KEYLESS_ENV_DRIFT_DETECTED
};
writeFileSync(flagFilePath, JSON.stringify(flagData, null, 2), { flag: "wx" });
return true;
} else {
return false;
}
} catch (error) {
if ((error == null ? void 0 : error.code) === "EEXIST") {
return false;
}
console.warn("Failed to create telemetry flag file:", error);
return false;
}
}
async function detectKeylessEnvDrift() {
var _a, _b;
if (!canUseKeyless) {
return;
}
if (typeof window !== "undefined") {
return;
}
try {
const { safeParseClerkFile } = await import("./keyless-node.js");
const keylessFile = safeParseClerkFile();
if (!keylessFile) {
return;
}
const envPublishableKey = process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY;
const envSecretKey = process.env.CLERK_SECRET_KEY;
const hasEnvVars = Boolean(envPublishableKey || envSecretKey);
const keylessFileHasKeys = Boolean((keylessFile == null ? void 0 : keylessFile.publishableKey) && (keylessFile == null ? void 0 : keylessFile.secretKey));
const envVarsMissing = !envPublishableKey && !envSecretKey;
if (!hasEnvVars && !keylessFileHasKeys) {
return;
}
if (envVarsMissing && keylessFileHasKeys) {
return;
}
if (!keylessFileHasKeys) {
return;
}
if (!hasEnvVars) {
return;
}
const publicKeyMatch = Boolean(
envPublishableKey && keylessFile.publishableKey && envPublishableKey === keylessFile.publishableKey
);
const secretKeyMatch = Boolean(envSecretKey && keylessFile.secretKey && envSecretKey === keylessFile.secretKey);
const hasActualDrift = envPublishableKey && keylessFile.publishableKey && !publicKeyMatch || envSecretKey && keylessFile.secretKey && !secretKeyMatch;
if (!hasActualDrift) {
return;
}
const payload = {
publicKeyMatch,
secretKeyMatch,
envVarsMissing,
keylessFileHasKeys,
keylessPublishableKey: (_a = keylessFile.publishableKey) != null ? _a : "",
envPublishableKey: envPublishableKey != null ? envPublishableKey : ""
};
const clerkClient = createClerkClientWithOptions({
publishableKey: keylessFile.publishableKey,
secretKey: keylessFile.secretKey,
telemetry: {
samplingRate: 1
}
});
const shouldFireEvent = tryMarkTelemetryEventAsFired();
if (shouldFireEvent) {
const driftDetectedEvent = {
event: EVENT_KEYLESS_ENV_DRIFT_DETECTED,
eventSamplingRate: EVENT_SAMPLING_RATE,
payload
};
(_b = clerkClient.telemetry) == null ? void 0 : _b.record(driftDetectedEvent);
}
} catch (error) {
console.warn("Failed to detect keyless environment drift:", error);
}
}
export {
detectKeylessEnvDrift
};
//# sourceMappingURL=keyless-telemetry.js.map