@clerk/shared
Version:
Internal package utils used by the Clerk SDKs
63 lines (61 loc) • 2.47 kB
JavaScript
const require_runtimeEnvironment = require('../utils/runtimeEnvironment.js');
//#region src/keyless/devCache.ts
const THROTTLE_DURATION_MS = 600 * 1e3;
/**
* Creates a development-only cache for keyless mode logging and API calls.
* This prevents console spam and duplicate API requests.
*
* @returns The cache instance or undefined in non-development environments
*/
function createClerkDevCache() {
if (!require_runtimeEnvironment.isDevelopmentEnvironment()) return;
if (!globalThis.__clerk_internal_keyless_logger) globalThis.__clerk_internal_keyless_logger = {
__cache: /* @__PURE__ */ new Map(),
log: function({ cacheKey, msg }) {
if (this.__cache.has(cacheKey) && Date.now() < (this.__cache.get(cacheKey)?.expiresAt || 0)) return;
console.log(msg);
this.__cache.set(cacheKey, { expiresAt: Date.now() + THROTTLE_DURATION_MS });
},
run: async function(callback, { cacheKey, onSuccessStale = THROTTLE_DURATION_MS, onErrorStale = THROTTLE_DURATION_MS }) {
if (this.__cache.has(cacheKey) && Date.now() < (this.__cache.get(cacheKey)?.expiresAt || 0)) return this.__cache.get(cacheKey)?.data;
try {
const result = await callback();
this.__cache.set(cacheKey, {
expiresAt: Date.now() + onSuccessStale,
data: result
});
return result;
} catch (e) {
this.__cache.set(cacheKey, { expiresAt: Date.now() + onErrorStale });
throw e;
}
}
};
return globalThis.__clerk_internal_keyless_logger;
}
/**
* Creates the console message shown when running in keyless mode.
*
* @param keys - The keyless application keys
* @returns Formatted console message
*/
function createKeylessModeMessage(keys) {
return `\n\x1b[35m\n[Clerk]:\x1b[0m You are running in keyless mode.\nYou can \x1b[35mclaim your keys\x1b[0m by visiting ${keys.claimUrl}\n`;
}
/**
* Creates the console message shown when keys have been claimed.
*
* @returns Formatted console message
*/
function createConfirmationMessage() {
return `\n\x1b[35m\n[Clerk]:\x1b[0m Your application is running with your claimed keys.\nYou can safely remove the \x1b[35m.clerk/\x1b[0m from your project.\n`;
}
/**
* Shared singleton instance of the development cache.
*/
const clerkDevelopmentCache = createClerkDevCache();
//#endregion
exports.clerkDevelopmentCache = clerkDevelopmentCache;
exports.createClerkDevCache = createClerkDevCache;
exports.createConfirmationMessage = createConfirmationMessage;
exports.createKeylessModeMessage = createKeylessModeMessage;