UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

63 lines (61 loc) 2.47 kB
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;