@clerk/shared 3.22.1-snapshot.v20250822161915 → 3.22.1

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.
@@ -1,12 +1,12 @@
1
1
  // src/versionSelector.ts
2
- var versionSelector = (clerkJSVersion, packageVersion = "5.88.1-snapshot.v20250822161915") => {
2
+ var versionSelector = (clerkJSVersion, packageVersion = "5.89.0") => {
3
3
  if (clerkJSVersion) {
4
4
  return clerkJSVersion;
5
5
  }
6
6
  const prereleaseTag = getPrereleaseTag(packageVersion);
7
7
  if (prereleaseTag) {
8
8
  if (prereleaseTag === "snapshot") {
9
- return "5.88.1-snapshot.v20250822161915";
9
+ return "5.89.0";
10
10
  }
11
11
  return prereleaseTag;
12
12
  }
@@ -19,4 +19,4 @@ export {
19
19
  versionSelector,
20
20
  getMajorVersion
21
21
  };
22
- //# sourceMappingURL=chunk-SA4NWAH7.mjs.map
22
+ //# sourceMappingURL=chunk-3WOXVFBV.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/versionSelector.ts"],"sourcesContent":["/**\n * This version selector is a bit complicated, so here is the flow:\n * 1. Use the clerkJSVersion prop on the provider\n * 2. Use the exact `@clerk/clerk-js` version if it is a `@snapshot` prerelease\n * 3. Use the prerelease tag of `@clerk/clerk-js` or the packageVersion provided\n * 4. Fallback to the major version of `@clerk/clerk-js` or the packageVersion provided\n * @param clerkJSVersion - The optional clerkJSVersion prop on the provider\n * @param packageVersion - The version of `@clerk/clerk-js` that will be used if an explicit version is not provided\n * @returns The npm tag, version or major version to use\n */\nexport const versionSelector = (clerkJSVersion: string | undefined, packageVersion = JS_PACKAGE_VERSION) => {\n if (clerkJSVersion) {\n return clerkJSVersion;\n }\n\n const prereleaseTag = getPrereleaseTag(packageVersion);\n if (prereleaseTag) {\n if (prereleaseTag === 'snapshot') {\n return JS_PACKAGE_VERSION;\n }\n\n return prereleaseTag;\n }\n\n return getMajorVersion(packageVersion);\n};\n\nconst getPrereleaseTag = (packageVersion: string) =>\n packageVersion\n .trim()\n .replace(/^v/, '')\n .match(/-(.+?)(\\.|$)/)?.[1];\n\nexport const getMajorVersion = (packageVersion: string) => packageVersion.trim().replace(/^v/, '').split('.')[0];\n"],"mappings":";AAUO,IAAM,kBAAkB,CAAC,gBAAoC,iBAAiB,sCAAuB;AAC1G,MAAI,gBAAgB;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,iBAAiB,cAAc;AACrD,MAAI,eAAe;AACjB,QAAI,kBAAkB,YAAY;AAChC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB,cAAc;AACvC;AAEA,IAAM,mBAAmB,CAAC,mBACxB,eACG,KAAK,EACL,QAAQ,MAAM,EAAE,EAChB,MAAM,cAAc,IAAI,CAAC;AAEvB,IAAM,kBAAkB,CAAC,mBAA2B,eAAe,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/versionSelector.ts"],"sourcesContent":["/**\n * This version selector is a bit complicated, so here is the flow:\n * 1. Use the clerkJSVersion prop on the provider\n * 2. Use the exact `@clerk/clerk-js` version if it is a `@snapshot` prerelease\n * 3. Use the prerelease tag of `@clerk/clerk-js` or the packageVersion provided\n * 4. Fallback to the major version of `@clerk/clerk-js` or the packageVersion provided\n * @param clerkJSVersion - The optional clerkJSVersion prop on the provider\n * @param packageVersion - The version of `@clerk/clerk-js` that will be used if an explicit version is not provided\n * @returns The npm tag, version or major version to use\n */\nexport const versionSelector = (clerkJSVersion: string | undefined, packageVersion = JS_PACKAGE_VERSION) => {\n if (clerkJSVersion) {\n return clerkJSVersion;\n }\n\n const prereleaseTag = getPrereleaseTag(packageVersion);\n if (prereleaseTag) {\n if (prereleaseTag === 'snapshot') {\n return JS_PACKAGE_VERSION;\n }\n\n return prereleaseTag;\n }\n\n return getMajorVersion(packageVersion);\n};\n\nconst getPrereleaseTag = (packageVersion: string) =>\n packageVersion\n .trim()\n .replace(/^v/, '')\n .match(/-(.+?)(\\.|$)/)?.[1];\n\nexport const getMajorVersion = (packageVersion: string) => packageVersion.trim().replace(/^v/, '').split('.')[0];\n"],"mappings":";AAUO,IAAM,kBAAkB,CAAC,gBAAoC,iBAAiB,aAAuB;AAC1G,MAAI,gBAAgB;AAClB,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,iBAAiB,cAAc;AACrD,MAAI,eAAe;AACjB,QAAI,kBAAkB,YAAY;AAChC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,SAAO,gBAAgB,cAAc;AACvC;AAEA,IAAM,mBAAmB,CAAC,mBACxB,eACG,KAAK,EACL,QAAQ,MAAM,EAAE,EAChB,MAAM,cAAc,IAAI,CAAC;AAEvB,IAAM,kBAAkB,CAAC,mBAA2B,eAAe,KAAK,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;","names":[]}
@@ -156,13 +156,17 @@ var TelemetryCollector = class {
156
156
  return __privateGet(this, _config).debug || typeof process !== "undefined" && process.env && isTruthy(process.env.CLERK_TELEMETRY_DEBUG);
157
157
  }
158
158
  record(event) {
159
- const preparedPayload = __privateMethod(this, _TelemetryCollector_instances, preparePayload_fn).call(this, event.event, event.payload);
160
- __privateMethod(this, _TelemetryCollector_instances, logEvent_fn).call(this, preparedPayload.event, preparedPayload);
161
- if (!__privateMethod(this, _TelemetryCollector_instances, shouldRecord_fn).call(this, preparedPayload, event.eventSamplingRate)) {
162
- return;
159
+ try {
160
+ const preparedPayload = __privateMethod(this, _TelemetryCollector_instances, preparePayload_fn).call(this, event.event, event.payload);
161
+ __privateMethod(this, _TelemetryCollector_instances, logEvent_fn).call(this, preparedPayload.event, preparedPayload);
162
+ if (!__privateMethod(this, _TelemetryCollector_instances, shouldRecord_fn).call(this, preparedPayload, event.eventSamplingRate)) {
163
+ return;
164
+ }
165
+ __privateGet(this, _buffer).push({ kind: "event", value: preparedPayload });
166
+ __privateMethod(this, _TelemetryCollector_instances, scheduleFlush_fn).call(this);
167
+ } catch (error) {
168
+ console.error("[clerk/telemetry] Error recording telemetry event", error);
163
169
  }
164
- __privateGet(this, _buffer).push({ kind: "event", value: preparedPayload });
165
- __privateMethod(this, _TelemetryCollector_instances, scheduleFlush_fn).call(this);
166
170
  }
167
171
  /**
168
172
  * Records a telemetry log entry if logging is enabled and not in debug mode.
@@ -170,42 +174,46 @@ var TelemetryCollector = class {
170
174
  * @param entry - The telemetry log entry to record.
171
175
  */
172
176
  recordLog(entry) {
173
- if (!__privateMethod(this, _TelemetryCollector_instances, shouldRecordLog_fn).call(this, entry)) {
174
- return;
175
- }
176
- const levelIsValid = typeof entry?.level === "string" && VALID_LOG_LEVELS.has(entry.level);
177
- const messageIsValid = typeof entry?.message === "string" && entry.message.trim().length > 0;
178
- let normalizedTimestamp = null;
179
- const timestampInput = entry?.timestamp;
180
- if (typeof timestampInput === "number" || typeof timestampInput === "string") {
181
- const candidate = new Date(timestampInput);
182
- if (!Number.isNaN(candidate.getTime())) {
183
- normalizedTimestamp = candidate;
177
+ try {
178
+ if (!__privateMethod(this, _TelemetryCollector_instances, shouldRecordLog_fn).call(this, entry)) {
179
+ return;
184
180
  }
185
- }
186
- if (!levelIsValid || !messageIsValid || normalizedTimestamp === null) {
187
- if (this.isDebug && typeof console !== "undefined") {
188
- console.warn("[clerk/telemetry] Dropping invalid telemetry log entry", {
189
- levelIsValid,
190
- messageIsValid,
191
- timestampIsValid: normalizedTimestamp !== null
192
- });
181
+ const levelIsValid = typeof entry?.level === "string" && VALID_LOG_LEVELS.has(entry.level);
182
+ const messageIsValid = typeof entry?.message === "string" && entry.message.trim().length > 0;
183
+ let normalizedTimestamp = null;
184
+ const timestampInput = entry?.timestamp;
185
+ if (typeof timestampInput === "number" || typeof timestampInput === "string") {
186
+ const candidate = new Date(timestampInput);
187
+ if (!Number.isNaN(candidate.getTime())) {
188
+ normalizedTimestamp = candidate;
189
+ }
193
190
  }
194
- return;
191
+ if (!levelIsValid || !messageIsValid || normalizedTimestamp === null) {
192
+ if (this.isDebug && typeof console !== "undefined") {
193
+ console.warn("[clerk/telemetry] Dropping invalid telemetry log entry", {
194
+ levelIsValid,
195
+ messageIsValid,
196
+ timestampIsValid: normalizedTimestamp !== null
197
+ });
198
+ }
199
+ return;
200
+ }
201
+ const sdkMetadata = __privateMethod(this, _TelemetryCollector_instances, getSDKMetadata_fn).call(this);
202
+ const logData = {
203
+ sdk: sdkMetadata.name,
204
+ sdkv: sdkMetadata.version,
205
+ cv: __privateGet(this, _metadata).clerkVersion ?? "",
206
+ lvl: entry.level,
207
+ msg: entry.message,
208
+ ts: normalizedTimestamp.toISOString(),
209
+ pk: __privateGet(this, _metadata).publishableKey || null,
210
+ payload: __privateMethod(this, _TelemetryCollector_instances, sanitizeContext_fn).call(this, entry.context)
211
+ };
212
+ __privateGet(this, _buffer).push({ kind: "log", value: logData });
213
+ __privateMethod(this, _TelemetryCollector_instances, scheduleFlush_fn).call(this);
214
+ } catch (error) {
215
+ console.error("[clerk/telemetry] Error recording telemetry log entry", error);
195
216
  }
196
- const sdkMetadata = __privateMethod(this, _TelemetryCollector_instances, getSDKMetadata_fn).call(this);
197
- const logData = {
198
- sdk: sdkMetadata.name,
199
- sdkv: sdkMetadata.version,
200
- cv: __privateGet(this, _metadata).clerkVersion ?? "",
201
- lvl: entry.level,
202
- msg: entry.message,
203
- ts: normalizedTimestamp.toISOString(),
204
- pk: __privateGet(this, _metadata).publishableKey || null,
205
- payload: __privateMethod(this, _TelemetryCollector_instances, sanitizeContext_fn).call(this, entry.context)
206
- };
207
- __privateGet(this, _buffer).push({ kind: "log", value: logData });
208
- __privateMethod(this, _TelemetryCollector_instances, scheduleFlush_fn).call(this);
209
217
  }
210
218
  };
211
219
  _config = new WeakMap();
@@ -443,4 +451,4 @@ export {
443
451
  eventMethodCalled,
444
452
  eventFrameworkMetadata
445
453
  };
446
- //# sourceMappingURL=chunk-CQ2MRYQI.mjs.map
454
+ //# sourceMappingURL=chunk-G3F72QR7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/telemetry/throttler.ts","../src/telemetry/collector.ts","../src/telemetry/events/component-mounted.ts","../src/telemetry/events/method-called.ts","../src/telemetry/events/framework-metadata.ts"],"sourcesContent":["import type { TelemetryEvent } from '@clerk/types';\n\ntype TtlInMilliseconds = number;\n\nconst DEFAULT_CACHE_TTL_MS = 86400000; // 24 hours\n\n/**\n * Manages throttling for telemetry events using the browser's localStorage to\n * mitigate event flooding in frequently executed code paths.\n */\nexport class TelemetryEventThrottler {\n #storageKey = 'clerk_telemetry_throttler';\n #cacheTtl = DEFAULT_CACHE_TTL_MS;\n\n isEventThrottled(payload: TelemetryEvent): boolean {\n if (!this.#isValidBrowser) {\n return false;\n }\n\n const now = Date.now();\n const key = this.#generateKey(payload);\n const entry = this.#cache?.[key];\n\n if (!entry) {\n const updatedCache = {\n ...this.#cache,\n [key]: now,\n };\n\n localStorage.setItem(this.#storageKey, JSON.stringify(updatedCache));\n }\n\n const shouldInvalidate = entry && now - entry > this.#cacheTtl;\n if (shouldInvalidate) {\n const updatedCache = this.#cache;\n delete updatedCache[key];\n\n localStorage.setItem(this.#storageKey, JSON.stringify(updatedCache));\n }\n\n return !!entry;\n }\n\n /**\n * Generates a consistent unique key for telemetry events by sorting payload properties.\n * This ensures that payloads with identical content in different orders produce the same key.\n */\n #generateKey(event: TelemetryEvent): string {\n const { sk: _sk, pk: _pk, payload, ...rest } = event;\n\n const sanitizedEvent: Omit<TelemetryEvent, 'sk' | 'pk' | 'payload'> & TelemetryEvent['payload'] = {\n ...payload,\n ...rest,\n };\n\n return JSON.stringify(\n Object.keys({\n ...payload,\n ...rest,\n })\n .sort()\n .map(key => sanitizedEvent[key]),\n );\n }\n\n get #cache(): Record<string, TtlInMilliseconds> | undefined {\n const cacheString = localStorage.getItem(this.#storageKey);\n\n if (!cacheString) {\n return {};\n }\n\n return JSON.parse(cacheString);\n }\n\n /**\n * Checks if the browser's localStorage is supported and writable.\n *\n * If any of these operations fail, it indicates that localStorage is either\n * not supported or not writable (e.g., in cases where the storage is full or\n * the browser is in a privacy mode that restricts localStorage usage).\n */\n get #isValidBrowser(): boolean {\n if (typeof window === 'undefined') {\n return false;\n }\n\n const storage = window.localStorage;\n if (!storage) {\n return false;\n }\n\n try {\n const testKey = 'test';\n storage.setItem(testKey, testKey);\n storage.removeItem(testKey);\n\n return true;\n } catch (err: unknown) {\n const isQuotaExceededError =\n err instanceof DOMException &&\n // Check error names for different browsers\n (err.name === 'QuotaExceededError' || err.name === 'NS_ERROR_DOM_QUOTA_REACHED');\n\n if (isQuotaExceededError && storage.length > 0) {\n storage.removeItem(this.#storageKey);\n }\n\n return false;\n }\n }\n}\n","/**\n * The `TelemetryCollector` class handles collection of telemetry events from Clerk SDKs. Telemetry is opt-out and can be disabled by setting a CLERK_TELEMETRY_DISABLED environment variable.\n * The `ClerkProvider` also accepts a `telemetry` prop that will be passed to the collector during initialization:.\n *\n * ```jsx\n * <ClerkProvider telemetry={false}>\n * ...\n * </ClerkProvider>\n * ```\n *\n * For more information, please see the telemetry documentation page: https://clerk.com/docs/telemetry.\n */\nimport type {\n InstanceType,\n SDKMetadata,\n TelemetryCollector as TelemetryCollectorInterface,\n TelemetryEvent,\n TelemetryEventRaw,\n TelemetryLogEntry,\n} from '@clerk/types';\n\nimport { parsePublishableKey } from '../keys';\nimport { isTruthy } from '../underscore';\nimport { TelemetryEventThrottler } from './throttler';\nimport type { TelemetryCollectorOptions } from './types';\n\n/**\n * Local interface for window.Clerk to avoid global type pollution.\n * This is only used within this module and doesn't affect other packages.\n */\ninterface WindowWithClerk extends Window {\n Clerk?: {\n constructor?: {\n sdkMetadata?: SDKMetadata;\n };\n };\n}\n\n/**\n * Type guard to check if window.Clerk exists and has the expected structure.\n */\nfunction isWindowClerkWithMetadata(clerk: unknown): clerk is { constructor: { sdkMetadata?: SDKMetadata } } {\n return (\n typeof clerk === 'object' && clerk !== null && 'constructor' in clerk && typeof clerk.constructor === 'function'\n );\n}\n\ntype TelemetryCollectorConfig = Pick<\n TelemetryCollectorOptions,\n 'samplingRate' | 'disabled' | 'debug' | 'maxBufferSize' | 'perEventSampling'\n> & {\n endpoint: string;\n};\n\ntype TelemetryMetadata = Required<\n Pick<TelemetryCollectorOptions, 'clerkVersion' | 'sdk' | 'sdkVersion' | 'publishableKey' | 'secretKey'>\n> & {\n /**\n * The instance type, derived from the provided publishableKey.\n */\n instanceType: InstanceType;\n};\n\n/**\n * Structure of log data sent to the telemetry endpoint.\n */\ntype TelemetryLogData = {\n /** Service that generated the log. */\n sdk: string;\n /** The version of the SDK where the event originated from. */\n sdkv: string;\n /** The version of Clerk where the event originated from. */\n cv: string;\n /** Log level (info, warn, error, debug, etc.). */\n lvl: TelemetryLogEntry['level'];\n /** Log message. */\n msg: string;\n /** Instance ID - optional. */\n iid?: string;\n /** Timestamp when log was generated. */\n ts: string;\n /** Primary key. */\n pk: string | null;\n /** Additional payload for the log. */\n payload: Record<string, unknown> | null;\n};\n\ntype TelemetryBufferItem = { kind: 'event'; value: TelemetryEvent } | { kind: 'log'; value: TelemetryLogData };\n\n// Accepted log levels for runtime validation\nconst VALID_LOG_LEVELS = new Set<string>(['error', 'warn', 'info', 'debug', 'trace']);\n\nconst DEFAULT_CONFIG: Partial<TelemetryCollectorConfig> = {\n samplingRate: 1,\n maxBufferSize: 5,\n // Production endpoint: https://clerk-telemetry.com\n // Staging endpoint: https://staging.clerk-telemetry.com\n // Local: http://localhost:8787\n endpoint: 'https://clerk-telemetry.com',\n};\n\nexport class TelemetryCollector implements TelemetryCollectorInterface {\n #config: Required<TelemetryCollectorConfig>;\n #eventThrottler: TelemetryEventThrottler;\n #metadata: TelemetryMetadata = {} as TelemetryMetadata;\n #buffer: TelemetryBufferItem[] = [];\n #pendingFlush: number | ReturnType<typeof setTimeout> | null = null;\n\n constructor(options: TelemetryCollectorOptions) {\n this.#config = {\n maxBufferSize: options.maxBufferSize ?? DEFAULT_CONFIG.maxBufferSize,\n samplingRate: options.samplingRate ?? DEFAULT_CONFIG.samplingRate,\n perEventSampling: options.perEventSampling ?? true,\n disabled: options.disabled ?? false,\n debug: options.debug ?? false,\n endpoint: DEFAULT_CONFIG.endpoint,\n } as Required<TelemetryCollectorConfig>;\n\n if (!options.clerkVersion && typeof window === 'undefined') {\n // N/A in a server environment\n this.#metadata.clerkVersion = '';\n } else {\n this.#metadata.clerkVersion = options.clerkVersion ?? '';\n }\n\n // We will try to grab the SDK data lazily when an event is triggered, so it should always be defined once the event is sent.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.#metadata.sdk = options.sdk!;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this.#metadata.sdkVersion = options.sdkVersion!;\n\n this.#metadata.publishableKey = options.publishableKey ?? '';\n\n const parsedKey = parsePublishableKey(options.publishableKey);\n if (parsedKey) {\n this.#metadata.instanceType = parsedKey.instanceType;\n }\n\n if (options.secretKey) {\n // Only send the first 16 characters of the secret key to to avoid sending the full key. We can still query against the partial key.\n this.#metadata.secretKey = options.secretKey.substring(0, 16);\n }\n\n this.#eventThrottler = new TelemetryEventThrottler();\n }\n\n get isEnabled(): boolean {\n if (this.#metadata.instanceType !== 'development') {\n return false;\n }\n\n // In browser or client environments, we most likely pass the disabled option to the collector, but in environments\n // where environment variables are available we also check for `CLERK_TELEMETRY_DISABLED`.\n if (\n this.#config.disabled ||\n (typeof process !== 'undefined' && process.env && isTruthy(process.env.CLERK_TELEMETRY_DISABLED))\n ) {\n return false;\n }\n\n // navigator.webdriver is a property generally set by headless browsers that are running in an automated testing environment.\n // Data from these environments is not meaningful for us and has the potential to produce a large volume of events, so we disable\n // collection in this case. (ref: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/webdriver)\n if (typeof window !== 'undefined' && !!window?.navigator?.webdriver) {\n return false;\n }\n\n return true;\n }\n\n get isDebug(): boolean {\n return (\n this.#config.debug ||\n (typeof process !== 'undefined' && process.env && isTruthy(process.env.CLERK_TELEMETRY_DEBUG))\n );\n }\n\n record(event: TelemetryEventRaw): void {\n try {\n const preparedPayload = this.#preparePayload(event.event, event.payload);\n\n this.#logEvent(preparedPayload.event, preparedPayload);\n\n if (!this.#shouldRecord(preparedPayload, event.eventSamplingRate)) {\n return;\n }\n\n this.#buffer.push({ kind: 'event', value: preparedPayload });\n\n this.#scheduleFlush();\n } catch (error) {\n console.error('[clerk/telemetry] Error recording telemetry event', error);\n }\n }\n\n /**\n * Records a telemetry log entry if logging is enabled and not in debug mode.\n *\n * @param entry - The telemetry log entry to record.\n */\n recordLog(entry: TelemetryLogEntry): void {\n try {\n if (!this.#shouldRecordLog(entry)) {\n return;\n }\n\n const levelIsValid = typeof entry?.level === 'string' && VALID_LOG_LEVELS.has(entry.level);\n const messageIsValid = typeof entry?.message === 'string' && entry.message.trim().length > 0;\n\n let normalizedTimestamp: Date | null = null;\n const timestampInput: unknown = (entry as unknown as { timestamp?: unknown })?.timestamp;\n if (typeof timestampInput === 'number' || typeof timestampInput === 'string') {\n const candidate = new Date(timestampInput);\n if (!Number.isNaN(candidate.getTime())) {\n normalizedTimestamp = candidate;\n }\n }\n\n if (!levelIsValid || !messageIsValid || normalizedTimestamp === null) {\n if (this.isDebug && typeof console !== 'undefined') {\n console.warn('[clerk/telemetry] Dropping invalid telemetry log entry', {\n levelIsValid,\n messageIsValid,\n timestampIsValid: normalizedTimestamp !== null,\n });\n }\n return;\n }\n\n const sdkMetadata = this.#getSDKMetadata();\n\n const logData: TelemetryLogData = {\n sdk: sdkMetadata.name,\n sdkv: sdkMetadata.version,\n cv: this.#metadata.clerkVersion ?? '',\n lvl: entry.level,\n msg: entry.message,\n ts: normalizedTimestamp.toISOString(),\n pk: this.#metadata.publishableKey || null,\n payload: this.#sanitizeContext(entry.context),\n };\n\n this.#buffer.push({ kind: 'log', value: logData });\n\n this.#scheduleFlush();\n } catch (error) {\n console.error('[clerk/telemetry] Error recording telemetry log entry', error);\n }\n }\n\n #shouldRecord(preparedPayload: TelemetryEvent, eventSamplingRate?: number) {\n return this.isEnabled && !this.isDebug && this.#shouldBeSampled(preparedPayload, eventSamplingRate);\n }\n\n #shouldRecordLog(_entry: TelemetryLogEntry): boolean {\n // Always allow logs from debug logger to be sent. Debug logger itself is already gated elsewhere.\n return true;\n }\n\n #shouldBeSampled(preparedPayload: TelemetryEvent, eventSamplingRate?: number) {\n const randomSeed = Math.random();\n\n const toBeSampled =\n randomSeed <= this.#config.samplingRate &&\n (this.#config.perEventSampling === false ||\n typeof eventSamplingRate === 'undefined' ||\n randomSeed <= eventSamplingRate);\n\n if (!toBeSampled) {\n return false;\n }\n\n return !this.#eventThrottler.isEventThrottled(preparedPayload);\n }\n\n #scheduleFlush(): void {\n // On the server, we want to flush immediately as we have less guarantees about the lifecycle of the process\n if (typeof window === 'undefined') {\n this.#flush();\n return;\n }\n const isBufferFull = this.#buffer.length >= this.#config.maxBufferSize;\n if (isBufferFull) {\n // If the buffer is full, flush immediately to make sure we minimize the chance of event loss.\n // Cancel any pending flushes as we're going to flush immediately\n if (this.#pendingFlush) {\n if (typeof cancelIdleCallback !== 'undefined') {\n cancelIdleCallback(Number(this.#pendingFlush));\n } else {\n clearTimeout(Number(this.#pendingFlush));\n }\n }\n this.#flush();\n return;\n }\n\n // If we have a pending flush, do nothing\n if (this.#pendingFlush) {\n return;\n }\n\n if ('requestIdleCallback' in window) {\n this.#pendingFlush = requestIdleCallback(() => {\n this.#flush();\n this.#pendingFlush = null;\n });\n } else {\n // This is not an ideal solution, but it at least waits until the next tick\n this.#pendingFlush = setTimeout(() => {\n this.#flush();\n this.#pendingFlush = null;\n }, 0);\n }\n }\n\n #flush(): void {\n // Capture the current buffer and clear it immediately to avoid closure references\n const itemsToSend = [...this.#buffer];\n this.#buffer = [];\n\n this.#pendingFlush = null;\n\n if (itemsToSend.length === 0) {\n return;\n }\n\n const eventsToSend = itemsToSend\n .filter(item => item.kind === 'event')\n .map(item => (item as { kind: 'event'; value: TelemetryEvent }).value);\n\n const logsToSend = itemsToSend\n .filter(item => item.kind === 'log')\n .map(item => (item as { kind: 'log'; value: TelemetryLogData }).value);\n\n if (eventsToSend.length > 0) {\n const eventsUrl = new URL('/v1/event', this.#config.endpoint);\n fetch(eventsUrl, {\n headers: {\n 'Content-Type': 'application/json',\n },\n keepalive: true,\n method: 'POST',\n // TODO: We send an array here with that idea that we can eventually send multiple events.\n body: JSON.stringify({ events: eventsToSend }),\n }).catch(() => void 0);\n }\n\n if (logsToSend.length > 0) {\n const logsUrl = new URL('/v1/logs', this.#config.endpoint);\n fetch(logsUrl, {\n headers: {\n 'Content-Type': 'application/json',\n },\n keepalive: true,\n method: 'POST',\n body: JSON.stringify({ logs: logsToSend }),\n }).catch(() => void 0);\n }\n }\n\n /**\n * If running in debug mode, log the event and its payload to the console.\n */\n #logEvent(event: TelemetryEvent['event'], payload: Record<string, any>) {\n if (!this.isDebug) {\n return;\n }\n\n if (typeof console.groupCollapsed !== 'undefined') {\n console.groupCollapsed('[clerk/telemetry]', event);\n console.log(payload);\n console.groupEnd();\n } else {\n console.log('[clerk/telemetry]', event, payload);\n }\n }\n\n /**\n * If in browser, attempt to lazily grab the SDK metadata from the Clerk singleton, otherwise fallback to the initially passed in values.\n *\n * This is necessary because the sdkMetadata can be set by the host SDK after the TelemetryCollector is instantiated.\n */\n #getSDKMetadata() {\n const sdkMetadata = {\n name: this.#metadata.sdk,\n version: this.#metadata.sdkVersion,\n };\n\n if (typeof window !== 'undefined') {\n const windowWithClerk = window as WindowWithClerk;\n\n if (windowWithClerk.Clerk) {\n const windowClerk = windowWithClerk.Clerk;\n\n if (isWindowClerkWithMetadata(windowClerk) && windowClerk.constructor.sdkMetadata) {\n const { name, version } = windowClerk.constructor.sdkMetadata;\n\n if (name !== undefined) {\n sdkMetadata.name = name;\n }\n if (version !== undefined) {\n sdkMetadata.version = version;\n }\n }\n }\n }\n\n return sdkMetadata;\n }\n\n /**\n * Append relevant metadata from the Clerk singleton to the event payload.\n */\n #preparePayload(event: TelemetryEvent['event'], payload: TelemetryEvent['payload']): TelemetryEvent {\n const sdkMetadata = this.#getSDKMetadata();\n\n return {\n event,\n cv: this.#metadata.clerkVersion ?? '',\n it: this.#metadata.instanceType ?? '',\n sdk: sdkMetadata.name,\n sdkv: sdkMetadata.version,\n ...(this.#metadata.publishableKey ? { pk: this.#metadata.publishableKey } : {}),\n ...(this.#metadata.secretKey ? { sk: this.#metadata.secretKey } : {}),\n payload,\n };\n }\n\n /**\n * Best-effort sanitization of the context payload. Returns a plain object with JSON-serializable\n * values or null when the input is missing or not serializable. Arrays are not accepted.\n */\n #sanitizeContext(context: unknown): Record<string, unknown> | null {\n if (context === null || typeof context === 'undefined') {\n return null;\n }\n if (typeof context !== 'object') {\n return null;\n }\n try {\n const cleaned = JSON.parse(JSON.stringify(context));\n if (cleaned && typeof cleaned === 'object' && !Array.isArray(cleaned)) {\n return cleaned as Record<string, unknown>;\n }\n return null;\n } catch {\n return null;\n }\n }\n}\n","import type { TelemetryEventRaw } from '@clerk/types';\n\nconst EVENT_COMPONENT_MOUNTED = 'COMPONENT_MOUNTED';\nconst EVENT_COMPONENT_OPENED = 'COMPONENT_OPENED';\nconst EVENT_SAMPLING_RATE = 0.1;\n\ntype ComponentMountedBase = {\n component: string;\n};\n\ntype EventPrebuiltComponent = ComponentMountedBase & {\n appearanceProp: boolean;\n elements: boolean;\n variables: boolean;\n baseTheme: boolean;\n};\n\ntype EventComponentMounted = ComponentMountedBase & TelemetryEventRaw['payload'];\n\n/**\n * @internal\n */\nfunction createPrebuiltComponentEvent(event: typeof EVENT_COMPONENT_MOUNTED | typeof EVENT_COMPONENT_OPENED) {\n return function (\n component: string,\n props?: Record<string, any>,\n additionalPayload?: TelemetryEventRaw['payload'],\n ): TelemetryEventRaw<EventPrebuiltComponent> {\n return {\n event,\n eventSamplingRate: EVENT_SAMPLING_RATE,\n payload: {\n component,\n appearanceProp: Boolean(props?.appearance),\n baseTheme: Boolean(props?.appearance?.baseTheme),\n elements: Boolean(props?.appearance?.elements),\n variables: Boolean(props?.appearance?.variables),\n ...additionalPayload,\n },\n };\n };\n}\n\n/**\n * Helper function for `telemetry.record()`. Create a consistent event object for when a prebuilt (AIO) component is mounted.\n *\n * @param component - The name of the component.\n * @param props - The props passed to the component. Will be filtered to a known list of props.\n * @param additionalPayload - Additional data to send with the event.\n * @example\n * telemetry.record(eventPrebuiltComponentMounted('SignUp', props));\n */\nexport function eventPrebuiltComponentMounted(\n component: string,\n props?: Record<string, any>,\n additionalPayload?: TelemetryEventRaw['payload'],\n): TelemetryEventRaw<EventPrebuiltComponent> {\n return createPrebuiltComponentEvent(EVENT_COMPONENT_MOUNTED)(component, props, additionalPayload);\n}\n\n/**\n * Helper function for `telemetry.record()`. Create a consistent event object for when a prebuilt (AIO) component is opened as a modal.\n *\n * @param component - The name of the component.\n * @param props - The props passed to the component. Will be filtered to a known list of props.\n * @param additionalPayload - Additional data to send with the event.\n * @example\n * telemetry.record(eventPrebuiltComponentOpened('GoogleOneTap', props));\n */\nexport function eventPrebuiltComponentOpened(\n component: string,\n props?: Record<string, any>,\n additionalPayload?: TelemetryEventRaw['payload'],\n): TelemetryEventRaw<EventPrebuiltComponent> {\n return createPrebuiltComponentEvent(EVENT_COMPONENT_OPENED)(component, props, additionalPayload);\n}\n\n/**\n * Helper function for `telemetry.record()`. Create a consistent event object for when a component is mounted. Use `eventPrebuiltComponentMounted` for prebuilt components.\n *\n * **Caution:** Filter the `props` you pass to this function to avoid sending too much data.\n *\n * @param component - The name of the component.\n * @param props - The props passed to the component. Ideally you only pass a handful of props here.\n * @example\n * telemetry.record(eventComponentMounted('SignUp', props));\n */\nexport function eventComponentMounted(\n component: string,\n props: TelemetryEventRaw['payload'] = {},\n): TelemetryEventRaw<EventComponentMounted> {\n return {\n event: EVENT_COMPONENT_MOUNTED,\n eventSamplingRate: EVENT_SAMPLING_RATE,\n payload: {\n component,\n ...props,\n },\n };\n}\n","import type { TelemetryEventRaw } from '@clerk/types';\n\nconst EVENT_METHOD_CALLED = 'METHOD_CALLED';\nconst EVENT_SAMPLING_RATE = 0.1;\n\ntype EventMethodCalled = {\n method: string;\n} & Record<string, string | number | boolean>;\n\n/**\n * Fired when a helper method is called from a Clerk SDK.\n */\nexport function eventMethodCalled(\n method: string,\n payload?: Record<string, unknown>,\n): TelemetryEventRaw<EventMethodCalled> {\n return {\n event: EVENT_METHOD_CALLED,\n eventSamplingRate: EVENT_SAMPLING_RATE,\n payload: {\n method,\n ...payload,\n },\n };\n}\n","import type { TelemetryEventRaw } from '@clerk/types';\n\nconst EVENT_FRAMEWORK_METADATA = 'FRAMEWORK_METADATA';\nconst EVENT_SAMPLING_RATE = 0.1;\n\ntype EventFrameworkMetadata = Record<string, string | number | boolean>;\n\n/**\n * Fired when a helper method is called from a Clerk SDK.\n */\nexport function eventFrameworkMetadata(payload: EventFrameworkMetadata): TelemetryEventRaw<EventFrameworkMetadata> {\n return {\n event: EVENT_FRAMEWORK_METADATA,\n eventSamplingRate: EVENT_SAMPLING_RATE,\n payload,\n };\n}\n"],"mappings":"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","names":["EVENT_SAMPLING_RATE","EVENT_SAMPLING_RATE"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  versionSelector
3
- } from "./chunk-SA4NWAH7.mjs";
3
+ } from "./chunk-3WOXVFBV.mjs";
4
4
  import {
5
5
  isValidProxyUrl,
6
6
  proxyUrlToAbsoluteURL
@@ -139,4 +139,4 @@ export {
139
139
  clerkJsScriptUrl,
140
140
  buildClerkJsScriptAttributes
141
141
  };
142
- //# sourceMappingURL=chunk-NDEKTWT7.mjs.map
142
+ //# sourceMappingURL=chunk-WNUQLZBG.mjs.map
package/dist/index.js CHANGED
@@ -1276,14 +1276,14 @@ var ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/;
1276
1276
  var isAbsoluteUrl = (url) => ABSOLUTE_URL_REGEX.test(url);
1277
1277
 
1278
1278
  // src/versionSelector.ts
1279
- var versionSelector = (clerkJSVersion, packageVersion = "5.88.1-snapshot.v20250822161915") => {
1279
+ var versionSelector = (clerkJSVersion, packageVersion = "5.89.0") => {
1280
1280
  if (clerkJSVersion) {
1281
1281
  return clerkJSVersion;
1282
1282
  }
1283
1283
  const prereleaseTag = getPrereleaseTag(packageVersion);
1284
1284
  if (prereleaseTag) {
1285
1285
  if (prereleaseTag === "snapshot") {
1286
- return "5.88.1-snapshot.v20250822161915";
1286
+ return "5.89.0";
1287
1287
  }
1288
1288
  return prereleaseTag;
1289
1289
  }