@clerk/chrome-extension 3.0.0-canary-core3.v20251203222607 → 3.0.0-canary-core3.v20251204085311

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,4 +1,4 @@
1
- import { createClerkClient, SCOPE } from '../chunk-BOFVWMUS.js';
1
+ import { createClerkClient, SCOPE } from '../chunk-TYQ2BGIZ.js';
2
2
 
3
3
  // src/background/clerk.ts
4
4
  async function createClerkClient2(opts) {
@@ -456,7 +456,7 @@ var BrowserStorageCache = createBrowserStorageCache();
456
456
  var clerk;
457
457
  Clerk.sdkMetadata = {
458
458
  name: "@clerk/chrome-extension",
459
- version: "3.0.0-canary-core3.v20251203222607"
459
+ version: "3.0.0-canary-core3.v20251204085311"
460
460
  };
461
461
  function createClerkClient({
462
462
  __experimental_syncHostListener = false,
@@ -502,11 +502,11 @@ function createClerkClient({
502
502
  const listener = jwt.listener();
503
503
  listener == null ? void 0 : listener.add();
504
504
  }
505
- clerk.__unstable__onAfterResponse(responseHandler(jwt, { isProd }));
506
- clerk.__unstable__onBeforeRequest(requestHandler(jwt, { isProd }));
505
+ clerk.__internal_onAfterResponse(responseHandler(jwt, { isProd }));
506
+ clerk.__internal_onBeforeRequest(requestHandler(jwt, { isProd }));
507
507
  return clerk;
508
508
  }
509
509
 
510
510
  export { ClerkRuntimeError, SCOPE, __export, buildErrorThrower, createClerkClient, createDevOrStagingUrlCache, isClerkAPIResponseError, parsePublishableKey };
511
- //# sourceMappingURL=chunk-BOFVWMUS.js.map
512
- //# sourceMappingURL=chunk-BOFVWMUS.js.map
511
+ //# sourceMappingURL=chunk-TYQ2BGIZ.js.map
512
+ //# sourceMappingURL=chunk-TYQ2BGIZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../shared/src/errors/clerkApiError.ts","../../../shared/src/errors/clerkError.ts","../../../shared/src/errors/clerkApiResponseError.ts","../../../shared/src/errors/errorThrower.ts","../../../shared/src/errors/clerkRuntimeError.ts","../../../shared/src/errors/helpers.ts","../../../shared/src/constants.ts","../../../shared/src/isomorphicAtob.ts","../../../shared/src/keys.ts","../../src/types.ts","../../../shared/src/devBrowser.ts","../../src/internal/constants.ts","../../src/internal/utils/errors.ts","../../src/internal/utils/cookies.ts","../../src/internal/utils/jwt-handler.ts","../../src/internal/utils/manifest.ts","../../src/internal/utils/request-handler.ts","../../src/internal/utils/response-handler.ts","../../src/internal/utils/storage.ts","../../src/internal/clerk.ts"],"names":["_a","packageName","customMessages","decodedFrontendApi: string","prodHandler","devHandler","browser"],"mappings":"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","file":"chunk-BOFVWMUS.js","sourcesContent":["import type { ClerkAPIError as ClerkAPIErrorInterface, ClerkAPIErrorJSON } from '../types';\nimport { createErrorTypeGuard } from './createErrorTypeGuard';\n\nexport type ClerkApiErrorMeta = Record<string, unknown>;\n\n/**\n * This error contains the specific error message, code, and any additional metadata that was returned by the Clerk API.\n */\nexport class ClerkAPIError<Meta extends ClerkApiErrorMeta = any> implements ClerkAPIErrorInterface {\n static kind = 'ClerkApiError';\n readonly code: string;\n readonly message: string;\n readonly longMessage: string | undefined;\n readonly meta: Meta;\n\n constructor(json: ClerkAPIErrorJSON) {\n const parsedError = {\n code: json.code,\n message: json.message,\n longMessage: json.long_message,\n meta: {\n paramName: json.meta?.param_name,\n sessionId: json.meta?.session_id,\n emailAddresses: json.meta?.email_addresses,\n identifiers: json.meta?.identifiers,\n zxcvbn: json.meta?.zxcvbn,\n plan: json.meta?.plan,\n isPlanUpgradePossible: json.meta?.is_plan_upgrade_possible,\n } as unknown as Meta,\n };\n this.code = parsedError.code;\n this.message = parsedError.message;\n this.longMessage = parsedError.longMessage;\n this.meta = parsedError.meta;\n }\n}\n\n/**\n * Type guard to check if a value is a ClerkApiError instance.\n */\nexport const isClerkApiError = createErrorTypeGuard(ClerkAPIError);\n","import { createErrorTypeGuard } from './createErrorTypeGuard';\n\nexport interface ClerkErrorParams {\n /**\n * A message that describes the error. This is typically intented to be showed to the developers.\n * It should not be shown to the user or parsed directly as the message contents are not guaranteed\n * to be stable - use the `code` property instead.\n */\n message: string;\n /**\n * A machine-stable code that identifies the error.\n */\n code: string;\n /**\n * A user-friendly message that describes the error and can be displayed to the user.\n * This message defaults to English but can be usually translated to the user's language\n * by matching the `code` property to a localized message.\n */\n longMessage?: string;\n /**\n * The cause of the error, typically an `Error` instance that was caught and wrapped by the Clerk error handler.\n */\n cause?: Error;\n /**\n * A URL to the documentation for the error.\n */\n docsUrl?: string;\n}\n\n/**\n * A temporary placeholder, this will eventually be replaced with a\n * build-time flag that will actually perform DCE.\n */\nconst __DEV__ = true;\n\nexport class ClerkError extends Error {\n static kind = 'ClerkError';\n readonly clerkError = true as const;\n readonly code: string;\n readonly longMessage: string | undefined;\n readonly docsUrl: string | undefined;\n readonly cause: Error | undefined;\n\n get name() {\n return this.constructor.name;\n }\n\n constructor(opts: ClerkErrorParams) {\n super(new.target.formatMessage(new.target.kind, opts.message, opts.code, opts.docsUrl), { cause: opts.cause });\n Object.setPrototypeOf(this, ClerkError.prototype);\n this.code = opts.code;\n this.docsUrl = opts.docsUrl;\n this.longMessage = opts.longMessage;\n this.cause = opts.cause;\n }\n\n public toString() {\n return `[${this.name}]\\nMessage:${this.message}`;\n }\n\n protected static formatMessage(name: string, msg: string, code: string, docsUrl: string | undefined) {\n // Keeping the Clerk prefix for backward compatibility\n // msg = `${name}: ${msg.trim()}\\n\\n(code=\"${code}\")\\n\\n`;\n // We can remove the Clerk prefix in the next major version\n const prefix = 'Clerk:';\n const regex = new RegExp(prefix.replace(' ', '\\\\s*'), 'i');\n msg = msg.replace(regex, '');\n msg = `${prefix} ${msg.trim()}\\n\\n(code=\"${code}\")\\n\\n`;\n if (__DEV__ && docsUrl) {\n msg += `\\n\\nDocs: ${docsUrl}`;\n }\n return msg;\n }\n}\n\n/**\n * Type guard to check if a value is a ClerkError instance.\n */\nexport function isClerkError(val: unknown): val is ClerkError {\n const typeguard = createErrorTypeGuard(ClerkError);\n // Ths is the base error so we're being more defensive about the type guard\n return typeguard(val) || (!!val && typeof val === 'object' && 'clerkError' in val && val.clerkError === true);\n}\n","import type { ClerkAPIErrorJSON, ClerkAPIResponseError as ClerkAPIResponseErrorInterface } from '../types';\nimport { ClerkAPIError } from './clerkApiError';\nimport type { ClerkErrorParams } from './clerkError';\nimport { ClerkError } from './clerkError';\nimport { createErrorTypeGuard } from './createErrorTypeGuard';\n\ninterface ClerkAPIResponseOptions extends Omit<ClerkErrorParams, 'message' | 'code'> {\n data: ClerkAPIErrorJSON[];\n status: number;\n clerkTraceId?: string;\n retryAfter?: number;\n}\n\nexport class ClerkAPIResponseError extends ClerkError implements ClerkAPIResponseErrorInterface {\n static kind = 'ClerkAPIResponseError';\n status: number;\n clerkTraceId?: string;\n retryAfter?: number;\n errors: ClerkAPIError[];\n\n constructor(message: string, options: ClerkAPIResponseOptions) {\n const { data: errorsJson, status, clerkTraceId, retryAfter } = options;\n super({ ...options, message, code: 'api_response_error' });\n Object.setPrototypeOf(this, ClerkAPIResponseError.prototype);\n this.status = status;\n this.clerkTraceId = clerkTraceId;\n this.retryAfter = retryAfter;\n this.errors = (errorsJson || []).map(e => new ClerkAPIError(e));\n }\n\n public toString() {\n let message = `[${this.name}]\\nMessage:${this.message}\\nStatus:${this.status}\\nSerialized errors: ${this.errors.map(\n e => JSON.stringify(e),\n )}`;\n\n if (this.clerkTraceId) {\n message += `\\nClerk Trace ID: ${this.clerkTraceId}`;\n }\n\n return message;\n }\n\n // Override formatMessage to keep it unformatted for backward compatibility\n protected static override formatMessage(name: string, msg: string, _: string, __: string | undefined) {\n return msg;\n }\n}\n\n/**\n * Type guard to check if an error is a ClerkApiResponseError.\n * Can be called as a standalone function or as a method on an error object.\n *\n * @example\n * // As a standalone function\n * if (isClerkApiResponseError(error)) { ... }\n *\n * // As a method (when attached to error object)\n * if (error.isClerkApiResponseError()) { ... }\n */\nexport const isClerkApiResponseError = createErrorTypeGuard(ClerkAPIResponseError);\n","const DefaultMessages = Object.freeze({\n InvalidProxyUrlErrorMessage: `The proxyUrl passed to Clerk is invalid. The expected value for proxyUrl is an absolute URL or a relative path with a leading '/'. (key={{url}})`,\n InvalidPublishableKeyErrorMessage: `The publishableKey passed to Clerk is invalid. You can get your Publishable key at https://dashboard.clerk.com/last-active?path=api-keys. (key={{key}})`,\n MissingPublishableKeyErrorMessage: `Missing publishableKey. You can get your key at https://dashboard.clerk.com/last-active?path=api-keys.`,\n MissingSecretKeyErrorMessage: `Missing secretKey. You can get your key at https://dashboard.clerk.com/last-active?path=api-keys.`,\n MissingClerkProvider: `{{source}} can only be used within the <ClerkProvider /> component. Learn more: https://clerk.com/docs/components/clerk-provider`,\n});\n\ntype MessageKeys = keyof typeof DefaultMessages;\n\ntype Messages = Record<MessageKeys, string>;\n\ntype CustomMessages = Partial<Messages>;\n\nexport type ErrorThrowerOptions = {\n packageName: string;\n customMessages?: CustomMessages;\n};\n\nexport interface ErrorThrower {\n setPackageName(options: ErrorThrowerOptions): ErrorThrower;\n\n setMessages(options: ErrorThrowerOptions): ErrorThrower;\n\n throwInvalidPublishableKeyError(params: { key?: string }): never;\n\n throwInvalidProxyUrl(params: { url?: string }): never;\n\n throwMissingPublishableKeyError(): never;\n\n throwMissingSecretKeyError(): never;\n\n throwMissingClerkProviderError(params: { source?: string }): never;\n\n throw(message: string): never;\n}\n\n/**\n * Builds an error thrower.\n *\n * @internal\n */\nexport function buildErrorThrower({ packageName, customMessages }: ErrorThrowerOptions): ErrorThrower {\n let pkg = packageName;\n\n /**\n * Builds a message from a raw message and replacements.\n *\n * @internal\n */\n function buildMessage(rawMessage: string, replacements?: Record<string, string | number>) {\n if (!replacements) {\n return `${pkg}: ${rawMessage}`;\n }\n\n let msg = rawMessage;\n const matches = rawMessage.matchAll(/{{([a-zA-Z0-9-_]+)}}/g);\n\n for (const match of matches) {\n const replacement = (replacements[match[1]] || '').toString();\n msg = msg.replace(`{{${match[1]}}}`, replacement);\n }\n\n return `${pkg}: ${msg}`;\n }\n\n const messages = {\n ...DefaultMessages,\n ...customMessages,\n };\n\n return {\n setPackageName({ packageName }: ErrorThrowerOptions): ErrorThrower {\n if (typeof packageName === 'string') {\n pkg = packageName;\n }\n return this;\n },\n\n setMessages({ customMessages }: ErrorThrowerOptions): ErrorThrower {\n Object.assign(messages, customMessages || {});\n return this;\n },\n\n throwInvalidPublishableKeyError(params: { key?: string }): never {\n throw new Error(buildMessage(messages.InvalidPublishableKeyErrorMessage, params));\n },\n\n throwInvalidProxyUrl(params: { url?: string }): never {\n throw new Error(buildMessage(messages.InvalidProxyUrlErrorMessage, params));\n },\n\n throwMissingPublishableKeyError(): never {\n throw new Error(buildMessage(messages.MissingPublishableKeyErrorMessage));\n },\n\n throwMissingSecretKeyError(): never {\n throw new Error(buildMessage(messages.MissingSecretKeyErrorMessage));\n },\n\n throwMissingClerkProviderError(params: { source?: string }): never {\n throw new Error(buildMessage(messages.MissingClerkProvider, params));\n },\n\n throw(message: string): never {\n throw new Error(buildMessage(message));\n },\n };\n}\n","import type { ClerkErrorParams } from './clerkError';\nimport { ClerkError } from './clerkError';\nimport { createErrorTypeGuard } from './createErrorTypeGuard';\n\ntype ClerkRuntimeErrorOptions = Omit<ClerkErrorParams, 'message'>;\n\n/**\n * Custom error class for representing Clerk runtime errors.\n *\n * @class ClerkRuntimeError\n *\n * @example\n * throw new ClerkRuntimeError('An error occurred', { code: 'password_invalid' });\n */\nexport class ClerkRuntimeError extends ClerkError {\n static kind = 'ClerkRuntimeError';\n /**\n * @deprecated Use `clerkError` property instead. This property is maintained for backward compatibility.\n */\n readonly clerkRuntimeError = true as const;\n\n constructor(message: string, options: ClerkRuntimeErrorOptions) {\n super({ ...options, message });\n Object.setPrototypeOf(this, ClerkRuntimeError.prototype);\n }\n}\n\n/**\n * Type guard to check if an error is a ClerkRuntimeError.\n * Can be called as a standalone function or as a method on an error object.\n *\n * @example\n * // As a standalone function\n * if (isClerkRuntimeError(error)) { ... }\n *\n * // As a method (when attached to error object)\n * if (error.isClerkRuntimeError()) { ... }\n */\nexport const isClerkRuntimeError = createErrorTypeGuard(ClerkRuntimeError);\n","import type { ClerkAPIResponseError } from './clerkApiResponseError';\nimport type { ClerkRuntimeError } from './clerkRuntimeError';\nimport type { EmailLinkError } from './emailLinkError';\nimport type { MetamaskError } from './metamaskError';\n\n/**\n * Checks if the provided error object is an unauthorized error.\n *\n * @internal\n *\n * @deprecated This is no longer used, and will be removed in the next major version.\n */\nexport function isUnauthorizedError(e: any): boolean {\n const status = e?.status;\n const code = e?.errors?.[0]?.code;\n return code === 'authentication_invalid' && status === 401;\n}\n\n/**\n * Checks if the provided error object is a captcha error.\n *\n * @internal\n */\nexport function isCaptchaError(e: ClerkAPIResponseError): boolean {\n return ['captcha_invalid', 'captcha_not_enabled', 'captcha_missing_token'].includes(e.errors[0].code);\n}\n\n/**\n * Checks if the provided error is a 4xx error.\n *\n * @internal\n */\nexport function is4xxError(e: any): boolean {\n const status = e?.status;\n return !!status && status >= 400 && status < 500;\n}\n\n/**\n * Checks if the provided error is a network error.\n *\n * @internal\n */\nexport function isNetworkError(e: any): boolean {\n // TODO: revise during error handling epic\n const message = (`${e.message}${e.name}` || '').toLowerCase().replace(/\\s+/g, '');\n return message.includes('networkerror');\n}\n\n/**\n * Checks if the provided error is either a ClerkAPIResponseError, a ClerkRuntimeError, or a MetamaskError.\n *\n * @internal\n */\nexport function isKnownError(error: any): error is ClerkAPIResponseError | ClerkRuntimeError | MetamaskError {\n return isClerkAPIResponseError(error) || isMetamaskError(error) || isClerkRuntimeError(error);\n}\n\n/**\n * Checks if the provided error is a ClerkAPIResponseError.\n *\n * @internal\n */\nexport function isClerkAPIResponseError(err: any): err is ClerkAPIResponseError {\n return err && 'clerkError' in err;\n}\n\n/**\n * Checks if the provided error object is an instance of ClerkRuntimeError.\n *\n * @param err - The error object to check.\n * @returns True if the error is a ClerkRuntimeError, false otherwise.\n *\n * @example\n * const error = new ClerkRuntimeError('An error occurred');\n * if (isClerkRuntimeError(error)) {\n * // Handle ClerkRuntimeError\n * console.error('ClerkRuntimeError:', error.message);\n * } else {\n * // Handle other errors\n * console.error('Other error:', error.message);\n * }\n */\nexport function isClerkRuntimeError(err: any): err is ClerkRuntimeError {\n return 'clerkRuntimeError' in err;\n}\n\n/**\n * Checks if the provided error is a Clerk runtime error indicating a reverification was cancelled.\n *\n * @internal\n */\nexport function isReverificationCancelledError(err: any) {\n return isClerkRuntimeError(err) && err.code === 'reverification_cancelled';\n}\n\n/**\n * Checks if the provided error is a Metamask error.\n *\n * @internal\n */\nexport function isMetamaskError(err: any): err is MetamaskError {\n return 'code' in err && [4001, 32602, 32603].includes(err.code) && 'message' in err;\n}\n\n/**\n * Checks if the provided error is clerk api response error indicating a user is locked.\n *\n * @internal\n */\nexport function isUserLockedError(err: any) {\n return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'user_locked';\n}\n\n/**\n * Checks if the provided error is a clerk api response error indicating a password was pwned.\n *\n * @internal\n */\nexport function isPasswordPwnedError(err: any) {\n return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_pwned';\n}\n\n/**\n * Checks if the provided error is a clerk api response error indicating a password was compromised.\n *\n * @internal\n */\nexport function isPasswordCompromisedError(err: any) {\n return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_compromised';\n}\n\n/**\n * Checks if the provided error is an EmailLinkError.\n *\n * @internal\n */\nexport function isEmailLinkError(err: Error): err is EmailLinkError {\n return err.name === 'EmailLinkError';\n}\n","export const LEGACY_DEV_INSTANCE_SUFFIXES = ['.lcl.dev', '.lclstage.dev', '.lclclerk.com'];\nexport const CURRENT_DEV_INSTANCE_SUFFIXES = ['.accounts.dev', '.accountsstage.dev', '.accounts.lclclerk.com'];\nexport const DEV_OR_STAGING_SUFFIXES = [\n '.lcl.dev',\n '.stg.dev',\n '.lclstage.dev',\n '.stgstage.dev',\n '.dev.lclclerk.com',\n '.stg.lclclerk.com',\n '.accounts.lclclerk.com',\n 'accountsstage.dev',\n 'accounts.dev',\n];\nexport const LOCAL_ENV_SUFFIXES = ['.lcl.dev', 'lclstage.dev', '.lclclerk.com', '.accounts.lclclerk.com'];\nexport const STAGING_ENV_SUFFIXES = ['.accountsstage.dev'];\nexport const LOCAL_API_URL = 'https://api.lclclerk.com';\nexport const STAGING_API_URL = 'https://api.clerkstage.dev';\nexport const PROD_API_URL = 'https://api.clerk.com';\n\n/**\n * Returns the URL for a static image\n * using the new img.clerk.com service\n */\nexport function iconImageUrl(id: string, format: 'svg' | 'jpeg' = 'svg'): string {\n return `https://img.clerk.com/static/${id}.${format}`;\n}\n","/**\n * A function that decodes a string of data which has been encoded using base-64 encoding.\n * Uses `atob` if available, otherwise uses `Buffer` from `global`. If neither are available, returns the data as-is.\n */\nexport const isomorphicAtob = (data: string) => {\n if (typeof atob !== 'undefined' && typeof atob === 'function') {\n return atob(data);\n } else if (typeof global !== 'undefined' && global.Buffer) {\n return new global.Buffer(data, 'base64').toString();\n }\n return data;\n};\n","import { DEV_OR_STAGING_SUFFIXES, LEGACY_DEV_INSTANCE_SUFFIXES } from './constants';\nimport { isomorphicAtob } from './isomorphicAtob';\nimport { isomorphicBtoa } from './isomorphicBtoa';\nimport type { PublishableKey } from './types';\n\n/**\n * Configuration options for parsing publishable keys.\n */\ntype ParsePublishableKeyOptions = {\n /** Whether to throw an error if parsing fails */\n fatal?: boolean;\n /** Custom domain to use for satellite instances */\n domain?: string;\n /** Proxy URL to use instead of the decoded frontend API */\n proxyUrl?: string;\n /** Whether this is a satellite instance */\n isSatellite?: boolean;\n};\n\n/** Prefix used for production publishable keys */\nconst PUBLISHABLE_KEY_LIVE_PREFIX = 'pk_live_';\n\n/** Prefix used for development publishable keys */\nconst PUBLISHABLE_KEY_TEST_PREFIX = 'pk_test_';\n\n/**\n * Regular expression that matches development frontend API keys.\n * Matches patterns like: foo-bar-13.clerk.accounts.dev.\n */\nconst PUBLISHABLE_FRONTEND_API_DEV_REGEX = /^(([a-z]+)-){2}([0-9]{1,2})\\.clerk\\.accounts([a-z.]*)(dev|com)$/i;\n\n/**\n * Converts a frontend API URL into a base64-encoded publishable key.\n *\n * @param frontendApi - The frontend API URL (e.g., 'clerk.example.com').\n * @returns A base64-encoded publishable key with appropriate prefix (pk_live_ or pk_test_).\n */\nexport function buildPublishableKey(frontendApi: string): string {\n const isDevKey =\n PUBLISHABLE_FRONTEND_API_DEV_REGEX.test(frontendApi) ||\n (frontendApi.startsWith('clerk.') && LEGACY_DEV_INSTANCE_SUFFIXES.some(s => frontendApi.endsWith(s)));\n const keyPrefix = isDevKey ? PUBLISHABLE_KEY_TEST_PREFIX : PUBLISHABLE_KEY_LIVE_PREFIX;\n return `${keyPrefix}${isomorphicBtoa(`${frontendApi}$`)}`;\n}\n\n/**\n * Validates that a decoded publishable key has the correct format.\n * The decoded value should be a frontend API followed by exactly one '$' at the end.\n *\n * @param decoded - The decoded publishable key string to validate.\n * @returns `true` if the decoded key has valid format, `false` otherwise.\n */\nfunction isValidDecodedPublishableKey(decoded: string): boolean {\n if (!decoded.endsWith('$')) {\n return false;\n }\n\n const withoutTrailing = decoded.slice(0, -1);\n if (withoutTrailing.includes('$')) {\n return false;\n }\n\n return withoutTrailing.includes('.');\n}\n\nexport function parsePublishableKey(\n key: string | undefined,\n options: ParsePublishableKeyOptions & { fatal: true },\n): PublishableKey;\nexport function parsePublishableKey(\n key: string | undefined,\n options?: ParsePublishableKeyOptions,\n): PublishableKey | null;\n/**\n * Parses and validates a publishable key, extracting the frontend API and instance type.\n *\n * @param key - The publishable key to parse.\n * @param options - Configuration options for parsing.\n * @param options.fatal\n * @param options.domain\n * @param options.proxyUrl\n * @param options.isSatellite\n * @returns Parsed publishable key object with instanceType and frontendApi, or null if invalid.\n *\n * @throws {Error} When options.fatal is true and key is missing or invalid.\n */\nexport function parsePublishableKey(\n key: string | undefined,\n options: { fatal?: boolean; domain?: string; proxyUrl?: string; isSatellite?: boolean } = {},\n): PublishableKey | null {\n key = key || '';\n\n if (!key || !isPublishableKey(key)) {\n if (options.fatal && !key) {\n throw new Error(\n 'Publishable key is missing. Ensure that your publishable key is correctly configured. Double-check your environment configuration for your keys, or access them here: https://dashboard.clerk.com/last-active?path=api-keys',\n );\n }\n if (options.fatal && !isPublishableKey(key)) {\n throw new Error('Publishable key not valid.');\n }\n return null;\n }\n\n const instanceType = key.startsWith(PUBLISHABLE_KEY_LIVE_PREFIX) ? 'production' : 'development';\n\n let decodedFrontendApi: string;\n try {\n decodedFrontendApi = isomorphicAtob(key.split('_')[2]);\n } catch {\n if (options.fatal) {\n throw new Error('Publishable key not valid: Failed to decode key.');\n }\n return null;\n }\n\n if (!isValidDecodedPublishableKey(decodedFrontendApi)) {\n if (options.fatal) {\n throw new Error('Publishable key not valid: Decoded key has invalid format.');\n }\n return null;\n }\n\n let frontendApi = decodedFrontendApi.slice(0, -1);\n\n if (options.proxyUrl) {\n frontendApi = options.proxyUrl;\n } else if (instanceType !== 'development' && options.domain && options.isSatellite) {\n frontendApi = `clerk.${options.domain}`;\n }\n\n return {\n instanceType,\n frontendApi,\n };\n}\n\n/**\n * Checks if the provided key is a valid publishable key.\n *\n * @param key - The key to be checked. Defaults to an empty string if not provided.\n * @returns `true` if 'key' is a valid publishable key, `false` otherwise.\n */\nexport function isPublishableKey(key: string = '') {\n try {\n const hasValidPrefix = key.startsWith(PUBLISHABLE_KEY_LIVE_PREFIX) || key.startsWith(PUBLISHABLE_KEY_TEST_PREFIX);\n\n if (!hasValidPrefix) {\n return false;\n }\n\n const parts = key.split('_');\n if (parts.length !== 3) {\n return false;\n }\n\n const encodedPart = parts[2];\n if (!encodedPart) {\n return false;\n }\n\n const decoded = isomorphicAtob(encodedPart);\n return isValidDecodedPublishableKey(decoded);\n } catch {\n return false;\n }\n}\n\n/**\n * Creates a memoized cache for checking if URLs are development or staging environments.\n * Uses a Map to cache results for better performance on repeated checks.\n *\n * @returns An object with an isDevOrStagingUrl method that checks if a URL is dev/staging.\n */\nexport function createDevOrStagingUrlCache() {\n const devOrStagingUrlCache = new Map<string, boolean>();\n\n return {\n /**\n * Checks if a URL is a development or staging environment.\n *\n * @param url - The URL to check (string or URL object).\n * @returns `true` if the URL is a development or staging environment, `false` otherwise.\n */\n isDevOrStagingUrl: (url: string | URL): boolean => {\n if (!url) {\n return false;\n }\n\n const hostname = typeof url === 'string' ? url : url.hostname;\n let res = devOrStagingUrlCache.get(hostname);\n if (res === undefined) {\n res = DEV_OR_STAGING_SUFFIXES.some(s => hostname.endsWith(s));\n devOrStagingUrlCache.set(hostname, res);\n }\n return res;\n },\n };\n}\n\n/**\n * Checks if a publishable key is for a development environment.\n * Supports both legacy format (test_) and new format (pk_test_).\n *\n * @param apiKey - The API key to check.\n * @returns `true` if the key is for development, `false` otherwise.\n */\nexport function isDevelopmentFromPublishableKey(apiKey: string): boolean {\n return apiKey.startsWith('test_') || apiKey.startsWith('pk_test_');\n}\n\n/**\n * Checks if a publishable key is for a production environment.\n * Supports both legacy format (live_) and new format (pk_live_).\n *\n * @param apiKey - The API key to check.\n * @returns `true` if the key is for production, `false` otherwise.\n */\nexport function isProductionFromPublishableKey(apiKey: string): boolean {\n return apiKey.startsWith('live_') || apiKey.startsWith('pk_live_');\n}\n\n/**\n * Checks if a secret key is for a development environment.\n * Supports both legacy format (test_) and new format (sk_test_).\n *\n * @param apiKey - The secret key to check.\n * @returns `true` if the key is for development, `false` otherwise.\n */\nexport function isDevelopmentFromSecretKey(apiKey: string): boolean {\n return apiKey.startsWith('test_') || apiKey.startsWith('sk_test_');\n}\n\n/**\n * Checks if a secret key is for a production environment.\n * Supports both legacy format (live_) and new format (sk_live_).\n *\n * @param apiKey - The secret key to check.\n * @returns `true` if the key is for production, `false` otherwise.\n */\nexport function isProductionFromSecretKey(apiKey: string): boolean {\n return apiKey.startsWith('live_') || apiKey.startsWith('sk_live_');\n}\n\n/**\n * Generates a unique cookie suffix based on the publishable key using SHA-1 hashing.\n * The suffix is base64-encoded and URL-safe (+ and / characters are replaced).\n *\n * @param publishableKey - The publishable key to generate suffix from.\n * @param subtle - The SubtleCrypto interface to use for hashing (defaults to globalThis.crypto.subtle).\n * @returns A promise that resolves to an 8-character URL-safe base64 string.\n */\nexport async function getCookieSuffix(\n publishableKey: string,\n subtle: SubtleCrypto = globalThis.crypto.subtle,\n): Promise<string> {\n const data = new TextEncoder().encode(publishableKey);\n const digest = await subtle.digest('sha-1', data);\n const stringDigest = String.fromCharCode(...new Uint8Array(digest));\n // Base 64 Encoding with URL and Filename Safe Alphabet: https://datatracker.ietf.org/doc/html/rfc4648#section-5\n return isomorphicBtoa(stringDigest).replace(/\\+/gi, '-').replace(/\\//gi, '_').substring(0, 8);\n}\n\n/**\n * Creates a suffixed cookie name by appending the cookie suffix to the base name.\n * Used to create unique cookie names based on the publishable key.\n *\n * @param cookieName - The base cookie name.\n * @param cookieSuffix - The suffix to append (typically generated by getCookieSuffix).\n * @returns The suffixed cookie name in format: `${cookieName}_${cookieSuffix}`.\n */\nexport const getSuffixedCookieName = (cookieName: string, cookieSuffix: string): string => {\n return `${cookieName}_${cookieSuffix}`;\n};\n","export const SCOPE = {\n BACKGROUND: 'background',\n} as const;\n\nexport type Scope = (typeof SCOPE)[keyof typeof SCOPE];\n\nexport interface ClerkClientExtensionFeatures {\n background?: boolean;\n sync?: boolean;\n}\n","export const DEV_BROWSER_JWT_KEY = '__clerk_db_jwt';\nexport const DEV_BROWSER_JWT_HEADER = 'Clerk-Db-Jwt';\n\n// Sets the dev_browser JWT in the hash or the search\n/**\n *\n */\nexport function setDevBrowserJWTInURL(url: URL, jwt: string): URL {\n const resultURL = new URL(url);\n\n // extract & strip existing jwt from search\n const jwtFromSearch = resultURL.searchParams.get(DEV_BROWSER_JWT_KEY);\n resultURL.searchParams.delete(DEV_BROWSER_JWT_KEY);\n\n // Existing jwt takes precedence\n const jwtToSet = jwtFromSearch || jwt;\n\n if (jwtToSet) {\n resultURL.searchParams.set(DEV_BROWSER_JWT_KEY, jwtToSet);\n }\n\n return resultURL;\n}\n\n/**\n * Gets the __clerk_db_jwt JWT from either the hash or the search\n * Side effect:\n * Removes __clerk_db_jwt JWT from the URL (hash and searchParams) and updates the browser history\n */\nexport function extractDevBrowserJWTFromURL(url: URL): string {\n const jwt = readDevBrowserJwtFromSearchParams(url);\n const cleanUrl = removeDevBrowserJwt(url);\n if (cleanUrl.href !== url.href && typeof globalThis.history !== 'undefined') {\n globalThis.history.replaceState(null, '', removeDevBrowserJwt(url));\n }\n return jwt;\n}\n\nconst readDevBrowserJwtFromSearchParams = (url: URL) => {\n return url.searchParams.get(DEV_BROWSER_JWT_KEY) || '';\n};\n\nconst removeDevBrowserJwt = (url: URL) => {\n return removeDevBrowserJwtFromURLSearchParams(removeLegacyDevBrowserJwt(url));\n};\n\nconst removeDevBrowserJwtFromURLSearchParams = (_url: URL) => {\n const url = new URL(_url);\n url.searchParams.delete(DEV_BROWSER_JWT_KEY);\n return url;\n};\n\n/**\n * Removes the __clerk_db_jwt JWT from the URL hash, as well as\n * the legacy __dev_session JWT from the URL searchParams\n * We no longer need to use this value, however, we should remove it from the URL\n * Existing v4 apps will write the JWT to the hash and the search params in order to ensure\n * backwards compatibility with older v4 apps.\n * The only use case where this is needed now is when a user upgrades to clerk@5 locally\n * without changing the component's version on their dashboard.\n * In this scenario, the AP@4 -> localhost@5 redirect will still have the JWT in the hash,\n * in which case we need to remove it.\n */\nconst removeLegacyDevBrowserJwt = (_url: URL) => {\n const DEV_BROWSER_JWT_MARKER_REGEXP = /__clerk_db_jwt\\[(.*)\\]/;\n const DEV_BROWSER_JWT_LEGACY_KEY = '__dev_session';\n const url = new URL(_url);\n url.searchParams.delete(DEV_BROWSER_JWT_LEGACY_KEY);\n url.hash = decodeURI(url.hash).replace(DEV_BROWSER_JWT_MARKER_REGEXP, '');\n if (url.href.endsWith('#')) {\n url.hash = '';\n }\n return url;\n};\n","export const AUTH_HEADER = {\n PRODUCTION: 'Authorization',\n DEVELOPMENT: 'Clerk-Db-Jwt',\n};\n\nexport const CLIENT_JWT_KEY = '__client';\nexport const CLIENT_UAT_KEY = '__clerk_uat';\nexport const DEFAULT_LOCAL_HOST_PERMISSION = 'http://localhost';\nexport const STORAGE_KEY_CLIENT_JWT = '__clerk_client_jwt';\n","import { buildErrorThrower } from '@clerk/shared/error';\n\nexport type HostPermissionHintOpts = {\n hostHint: string;\n};\n\nexport const errorLogger = (err: Error) => console.error(err, err.stack);\nexport const errorThrower = buildErrorThrower({ packageName: '@clerk/chrome-extension' });\n\nexport const missingManifestKeyError = (key: string) => `Missing \\`${key}\\` entry in manifest.json`;\n\nexport function assertPublishableKey(publishableKey: unknown): asserts publishableKey {\n if (!publishableKey) {\n errorThrower.throwMissingPublishableKeyError();\n }\n}\n","import browser from 'webextension-polyfill';\n\nexport type FormattedUrl = `http${string}`;\n\nexport type GetClientCookieParams = {\n name: string;\n url: string;\n callback: (changeInfo: ChangeInfo) => Promise<void>;\n onListenerCallback?: () => void;\n};\n\nexport type ChangeInfo = {\n cookie: browser.Cookies.Cookie;\n cause: browser.Cookies.OnChangedCause;\n removed: boolean;\n};\n\nfunction ensureFormattedUrl(url: string): FormattedUrl {\n return url.startsWith('http') ? (url as FormattedUrl) : `https://${url}`;\n}\n\nexport async function getClientCookie({ url, name }: GetClientCookieParams) {\n return await browser.cookies.get({ name, url: ensureFormattedUrl(url) });\n}\n\nexport function createClientCookieListener({ url, name, callback }: GetClientCookieParams) {\n const domain = new URL(url).hostname;\n const cookieDomain = domain.startsWith('www.') ? domain.slice(4) : domain;\n\n const listener = (changeInfo: ChangeInfo) => {\n if (changeInfo.cookie.domain === cookieDomain && changeInfo.cookie.name === name) {\n void callback(changeInfo);\n }\n };\n\n return {\n add: () => browser.cookies.onChanged.addListener(listener),\n has: () => browser.cookies.onChanged.hasListener(listener),\n remove: () => browser.cookies.onChanged.removeListener(listener),\n };\n}\n","import { CLIENT_UAT_KEY, STORAGE_KEY_CLIENT_JWT } from '../constants';\nimport type { ChangeInfo, GetClientCookieParams } from './cookies';\nimport { createClientCookieListener, getClientCookie } from './cookies';\nimport { errorLogger } from './errors';\nimport type { StorageCache } from './storage';\n\nexport type JWTHandlerParams = { frontendApi: string } & (\n | {\n sync?: false;\n }\n | ({ sync: true } & GetClientCookieParams)\n);\n\nexport type JWTHandler = ReturnType<typeof JWTHandler>;\n\nfunction shouldSync(sync: boolean | undefined, _params: unknown): _params is GetClientCookieParams {\n return Boolean(sync);\n}\n\nexport function JWTHandler(store: StorageCache, params: JWTHandlerParams) {\n const { sync, frontendApi, ...cookieParams } = params;\n\n const CACHE_KEY = store.createKey(frontendApi, STORAGE_KEY_CLIENT_JWT, 'v2');\n\n /**\n * Sets the JWT value to the active\n * @param value: JWT generally from the cookie or authorization header\n */\n const set = async (value: string): Promise<void> => {\n return await store.set(CACHE_KEY, value).catch(errorLogger);\n };\n\n /**\n * Remove the JWT value\n */\n const remove = async (): Promise<void> => {\n return await store.remove(CACHE_KEY).catch(errorLogger);\n };\n\n /**\n * Gets the JWT value to the active store.\n * If not set, attempt to get it from the synced session and save for later use.\n */\n const get = async () => {\n if (shouldSync(sync, cookieParams)) {\n // Get client cookie from browser\n const syncedJWT = await getClientCookie(cookieParams).catch(errorLogger);\n\n if (syncedJWT) {\n // Set client cookie in StorageCache\n await set(syncedJWT.value);\n return syncedJWT.value;\n }\n }\n\n // Get current JWT from StorageCache\n return await store.get<string>(CACHE_KEY);\n };\n\n const listener = () => {\n if (!shouldSync(sync, cookieParams)) {\n return;\n }\n\n const { onListenerCallback, ...restCookieParams } = cookieParams;\n\n return createClientCookieListener({\n ...restCookieParams,\n callback: async (changeInfo: ChangeInfo) => {\n const existingJWT = await get();\n\n if (existingJWT === changeInfo.cookie.value) {\n const syncedUAT = await getClientCookie({ ...restCookieParams, name: CLIENT_UAT_KEY }).catch(errorLogger);\n\n if (!syncedUAT || syncedUAT?.value === '0') {\n onListenerCallback?.();\n }\n\n return;\n }\n\n await set(changeInfo.cookie.value);\n onListenerCallback?.();\n },\n });\n };\n\n return { get, listener, set, remove };\n}\n","import type { SetRequired } from 'type-fest';\nimport type { Manifest } from 'webextension-polyfill';\n\nimport type { ClerkClientExtensionFeatures } from '../../types';\nimport { errorThrower, missingManifestKeyError } from './errors';\n\nexport type ValidatedManifest = SetRequired<Manifest.WebExtensionManifest, 'permissions' | 'host_permissions'>;\nexport type ManifestKeys = keyof Manifest.WebExtensionManifest;\n\nfunction validateRootManifestKey(manifest: Manifest.WebExtensionManifest, key: ManifestKeys): void {\n if (!manifest[key]) {\n errorThrower.throw(missingManifestKeyError(key));\n }\n}\n\nfunction validateManifestPermission(manifest: Manifest.WebExtensionManifest, key: Manifest.Permission): void {\n if (!manifest.permissions?.includes(key)) {\n errorThrower.throw(missingManifestKeyError(`permissions.${key}`));\n }\n}\n\nfunction hasAdditionalFeatures(features: ClerkClientExtensionFeatures): boolean {\n return Boolean(features) && Object.keys(features).length > 0;\n}\n\nexport function validateManifest(\n manifest: Manifest.WebExtensionManifest,\n features: ClerkClientExtensionFeatures,\n): asserts manifest is ValidatedManifest {\n validateRootManifestKey(manifest, 'permissions');\n validateManifestPermission(manifest, 'storage');\n\n // If no additional features are provided, we can return success early\n if (!hasAdditionalFeatures(features)) {\n return;\n }\n\n if (features.background) {\n validateRootManifestKey(manifest, 'background');\n }\n\n if (features.sync) {\n validateManifestPermission(manifest, 'cookies');\n validateRootManifestKey(manifest, 'host_permissions');\n }\n}\n","import type { Clerk } from '@clerk/clerk-js';\n\nimport { AUTH_HEADER } from '../constants';\nimport type { JWTHandler } from './jwt-handler';\n\ntype Handler = Parameters<Clerk['__unstable__onBeforeRequest']>[0];\ntype Req = Parameters<Handler>[0];\n\n/** Append the JWT to the FAPI request */\nexport function requestHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) {\n const handler: Handler = async requestInit => {\n requestInit.credentials = 'omit';\n\n const currentJWT = await jwtHandler.get();\n\n if (!currentJWT) {\n return;\n }\n\n if (isProd) {\n prodHandler(requestInit, currentJWT);\n } else {\n devHandler(requestInit, currentJWT);\n }\n };\n\n return handler;\n}\n\n/** Append the JWT to the FAPI request, per development instances */\nfunction devHandler(requestInit: Req, jwt: string) {\n requestInit.url?.searchParams.append('__clerk_db_jwt', jwt);\n}\n\n/** Append the JWT to the FAPI request, per production instances */\nfunction prodHandler(requestInit: Req, jwt: string) {\n requestInit.url?.searchParams.append('_is_native', '1');\n (requestInit.headers as Headers).set(AUTH_HEADER.PRODUCTION, `Bearer ${jwt}`);\n}\n","import type { Clerk } from '@clerk/clerk-js';\n\nimport { AUTH_HEADER } from '../constants';\nimport type { JWTHandler } from './jwt-handler';\n\ntype Handler = Parameters<Clerk['__unstable__onAfterResponse']>[0];\ntype Res = Parameters<Handler>[1];\n\n/** Retrieve the JWT to the FAPI response */\nexport function responseHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) {\n const handler: Handler = async (_, response) => {\n if (isProd) {\n await prodHandler(response, jwtHandler);\n } else {\n await devHandler(response, jwtHandler);\n }\n };\n return handler;\n}\n\n/** Retrieve the JWT to the FAPI response, per development instances */\nasync function devHandler(response: Res, jwtHandler: JWTHandler) {\n const header = response?.headers.get(AUTH_HEADER.DEVELOPMENT);\n\n if (header) {\n await jwtHandler.set(header);\n } else {\n await jwtHandler.remove();\n }\n}\n\n/** Retrieve the JWT to the FAPI response, per production instances */\nasync function prodHandler(response: Res, jwtHandler: JWTHandler) {\n const header = response?.headers.get(AUTH_HEADER.PRODUCTION);\n\n if (header?.startsWith('Bearer')) {\n const jwt = header.split(' ')[1] || undefined;\n\n if (jwt) {\n await jwtHandler.set(jwt);\n } else {\n await jwtHandler.remove();\n }\n } else if (header) {\n await jwtHandler.set(header);\n }\n}\n","import browser from 'webextension-polyfill';\n\ntype StorageCacheOptions = {\n storageArea?: 'local' | 'sync';\n};\n\nexport type StorageCache = {\n createKey: (...keys: string[]) => string;\n get: <T = any>(key: string) => Promise<T | undefined>;\n remove: (key: string) => Promise<void>;\n set: (key: string, value: string) => Promise<void>;\n};\n\nconst createKey: StorageCache['createKey'] = (...keys: string[]) => keys.filter(Boolean).join('|');\n\n// Use browser.storage (local or sync) to persist Clerk client JWT.\n// More information at https://developer.chrome.com/docs/extensions/reference/storage\nconst createBrowserStorageCache = (opts: StorageCacheOptions = {}): StorageCache => {\n const __storageArea = opts.storageArea || 'local';\n\n return {\n createKey,\n get: <T>(key: string) => browser.storage[__storageArea].get(key).then(result => (result[key] as T) || undefined),\n remove: (key: string) => browser.storage[__storageArea].remove(key),\n set: (key: string, value: string) => browser.storage[__storageArea].set({ [key]: value }),\n };\n};\n\nconst createMemoryStorageCache = (): StorageCache => {\n const cache: Map<string, any> = new Map();\n\n return {\n createKey,\n get: (key: string) => Promise.resolve(cache.get(key)),\n remove: (key: string) => {\n cache.delete(key);\n return Promise.resolve();\n },\n set: (key: string, value: string) => {\n cache.set(key, value);\n return Promise.resolve();\n },\n };\n};\n\nexport const BrowserStorageCache = createBrowserStorageCache();\nexport const MemoryStorageCache = createMemoryStorageCache();\n","import { Clerk } from '@clerk/clerk-js/no-rhc';\nimport { DEV_BROWSER_JWT_KEY } from '@clerk/shared/devBrowser';\nimport { parsePublishableKey } from '@clerk/shared/keys';\nimport browser from 'webextension-polyfill';\n\nimport { SCOPE, type Scope } from '../types';\nimport { CLIENT_JWT_KEY, DEFAULT_LOCAL_HOST_PERMISSION } from './constants';\nimport { assertPublishableKey } from './utils/errors';\nimport type { JWTHandlerParams } from './utils/jwt-handler';\nimport { JWTHandler } from './utils/jwt-handler';\nimport { validateManifest } from './utils/manifest';\nimport { requestHandler } from './utils/request-handler';\nimport { responseHandler } from './utils/response-handler';\nimport { BrowserStorageCache, type StorageCache } from './utils/storage';\n\nexport let clerk: Clerk;\n\nClerk.sdkMetadata = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nexport type CreateClerkClientOptions = {\n __experimental_syncHostListener?: boolean;\n publishableKey: string;\n scope?: Scope;\n storageCache?: StorageCache;\n syncHost?: string;\n};\n\nexport function createClerkClient({\n __experimental_syncHostListener = false,\n publishableKey,\n scope,\n storageCache = BrowserStorageCache,\n syncHost,\n}: CreateClerkClientOptions) {\n if (scope === SCOPE.BACKGROUND) {\n // TODO @nikos\n // @ts-expect-error will be replaced by clerk ui\n Clerk.mountComponentRenderer = undefined;\n }\n\n // Don't cache background scripts as it can result in out-of-sync client information.\n if (clerk && scope !== SCOPE.BACKGROUND) {\n return clerk;\n }\n\n // Sync is enabled if a `syncHost` is provided\n const sync = Boolean(syncHost);\n\n // Parse publishableKey and assert it's present/valid, throw if not\n const key = parsePublishableKey(publishableKey);\n assertPublishableKey(key);\n\n const isProd = key.instanceType === 'production';\n const manifest = browser.runtime.getManifest();\n\n // Will throw if manifest is invalid\n validateManifest(manifest, {\n background: scope === SCOPE.BACKGROUND,\n sync,\n });\n\n // Set up JWT handler and attempt to get JWT from storage on initialization\n const url = syncHost ? syncHost : DEFAULT_LOCAL_HOST_PERMISSION;\n\n // Create Clerk instance\n clerk = new Clerk(publishableKey, {});\n\n // @ts-expect-error - TODO: sync is evaluating to true vs boolean\n const jwtOptions: JWTHandlerParams = {\n frontendApi: key.frontendApi,\n name: isProd ? CLIENT_JWT_KEY : DEV_BROWSER_JWT_KEY,\n url,\n sync: sync,\n };\n\n if (jwtOptions.sync && __experimental_syncHostListener) {\n jwtOptions.onListenerCallback = () => {\n if (clerk.user) {\n clerk.user.reload();\n } else {\n window.location.reload();\n }\n };\n }\n\n const jwt = JWTHandler(storageCache, jwtOptions);\n\n // Add listener to sync host cookies if enabled\n if (jwtOptions.sync && __experimental_syncHostListener) {\n const listener = jwt.listener();\n listener?.add();\n }\n\n clerk.__unstable__onAfterResponse(responseHandler(jwt, { isProd }));\n clerk.__unstable__onBeforeRequest(requestHandler(jwt, { isProd }));\n\n return clerk;\n}\n"]}
1
+ {"version":3,"sources":["../../../shared/src/errors/clerkApiError.ts","../../../shared/src/errors/clerkError.ts","../../../shared/src/errors/clerkApiResponseError.ts","../../../shared/src/errors/errorThrower.ts","../../../shared/src/errors/clerkRuntimeError.ts","../../../shared/src/errors/helpers.ts","../../../shared/src/constants.ts","../../../shared/src/isomorphicAtob.ts","../../../shared/src/keys.ts","../../src/types.ts","../../../shared/src/devBrowser.ts","../../src/internal/constants.ts","../../src/internal/utils/errors.ts","../../src/internal/utils/cookies.ts","../../src/internal/utils/jwt-handler.ts","../../src/internal/utils/manifest.ts","../../src/internal/utils/request-handler.ts","../../src/internal/utils/response-handler.ts","../../src/internal/utils/storage.ts","../../src/internal/clerk.ts"],"names":["_a","packageName","customMessages","decodedFrontendApi: string","prodHandler","devHandler","browser"],"mappings":"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","file":"chunk-TYQ2BGIZ.js","sourcesContent":["import type { ClerkAPIError as ClerkAPIErrorInterface, ClerkAPIErrorJSON } from '../types';\nimport { createErrorTypeGuard } from './createErrorTypeGuard';\n\nexport type ClerkApiErrorMeta = Record<string, unknown>;\n\n/**\n * This error contains the specific error message, code, and any additional metadata that was returned by the Clerk API.\n */\nexport class ClerkAPIError<Meta extends ClerkApiErrorMeta = any> implements ClerkAPIErrorInterface {\n static kind = 'ClerkApiError';\n readonly code: string;\n readonly message: string;\n readonly longMessage: string | undefined;\n readonly meta: Meta;\n\n constructor(json: ClerkAPIErrorJSON) {\n const parsedError = {\n code: json.code,\n message: json.message,\n longMessage: json.long_message,\n meta: {\n paramName: json.meta?.param_name,\n sessionId: json.meta?.session_id,\n emailAddresses: json.meta?.email_addresses,\n identifiers: json.meta?.identifiers,\n zxcvbn: json.meta?.zxcvbn,\n plan: json.meta?.plan,\n isPlanUpgradePossible: json.meta?.is_plan_upgrade_possible,\n } as unknown as Meta,\n };\n this.code = parsedError.code;\n this.message = parsedError.message;\n this.longMessage = parsedError.longMessage;\n this.meta = parsedError.meta;\n }\n}\n\n/**\n * Type guard to check if a value is a ClerkApiError instance.\n */\nexport const isClerkApiError = createErrorTypeGuard(ClerkAPIError);\n","import { createErrorTypeGuard } from './createErrorTypeGuard';\n\nexport interface ClerkErrorParams {\n /**\n * A message that describes the error. This is typically intented to be showed to the developers.\n * It should not be shown to the user or parsed directly as the message contents are not guaranteed\n * to be stable - use the `code` property instead.\n */\n message: string;\n /**\n * A machine-stable code that identifies the error.\n */\n code: string;\n /**\n * A user-friendly message that describes the error and can be displayed to the user.\n * This message defaults to English but can be usually translated to the user's language\n * by matching the `code` property to a localized message.\n */\n longMessage?: string;\n /**\n * The cause of the error, typically an `Error` instance that was caught and wrapped by the Clerk error handler.\n */\n cause?: Error;\n /**\n * A URL to the documentation for the error.\n */\n docsUrl?: string;\n}\n\n/**\n * A temporary placeholder, this will eventually be replaced with a\n * build-time flag that will actually perform DCE.\n */\nconst __DEV__ = true;\n\nexport class ClerkError extends Error {\n static kind = 'ClerkError';\n readonly clerkError = true as const;\n readonly code: string;\n readonly longMessage: string | undefined;\n readonly docsUrl: string | undefined;\n readonly cause: Error | undefined;\n\n get name() {\n return this.constructor.name;\n }\n\n constructor(opts: ClerkErrorParams) {\n super(new.target.formatMessage(new.target.kind, opts.message, opts.code, opts.docsUrl), { cause: opts.cause });\n Object.setPrototypeOf(this, ClerkError.prototype);\n this.code = opts.code;\n this.docsUrl = opts.docsUrl;\n this.longMessage = opts.longMessage;\n this.cause = opts.cause;\n }\n\n public toString() {\n return `[${this.name}]\\nMessage:${this.message}`;\n }\n\n protected static formatMessage(name: string, msg: string, code: string, docsUrl: string | undefined) {\n // Keeping the Clerk prefix for backward compatibility\n // msg = `${name}: ${msg.trim()}\\n\\n(code=\"${code}\")\\n\\n`;\n // We can remove the Clerk prefix in the next major version\n const prefix = 'Clerk:';\n const regex = new RegExp(prefix.replace(' ', '\\\\s*'), 'i');\n msg = msg.replace(regex, '');\n msg = `${prefix} ${msg.trim()}\\n\\n(code=\"${code}\")\\n\\n`;\n if (__DEV__ && docsUrl) {\n msg += `\\n\\nDocs: ${docsUrl}`;\n }\n return msg;\n }\n}\n\n/**\n * Type guard to check if a value is a ClerkError instance.\n */\nexport function isClerkError(val: unknown): val is ClerkError {\n const typeguard = createErrorTypeGuard(ClerkError);\n // Ths is the base error so we're being more defensive about the type guard\n return typeguard(val) || (!!val && typeof val === 'object' && 'clerkError' in val && val.clerkError === true);\n}\n","import type { ClerkAPIErrorJSON, ClerkAPIResponseError as ClerkAPIResponseErrorInterface } from '../types';\nimport { ClerkAPIError } from './clerkApiError';\nimport type { ClerkErrorParams } from './clerkError';\nimport { ClerkError } from './clerkError';\nimport { createErrorTypeGuard } from './createErrorTypeGuard';\n\ninterface ClerkAPIResponseOptions extends Omit<ClerkErrorParams, 'message' | 'code'> {\n data: ClerkAPIErrorJSON[];\n status: number;\n clerkTraceId?: string;\n retryAfter?: number;\n}\n\nexport class ClerkAPIResponseError extends ClerkError implements ClerkAPIResponseErrorInterface {\n static kind = 'ClerkAPIResponseError';\n status: number;\n clerkTraceId?: string;\n retryAfter?: number;\n errors: ClerkAPIError[];\n\n constructor(message: string, options: ClerkAPIResponseOptions) {\n const { data: errorsJson, status, clerkTraceId, retryAfter } = options;\n super({ ...options, message, code: 'api_response_error' });\n Object.setPrototypeOf(this, ClerkAPIResponseError.prototype);\n this.status = status;\n this.clerkTraceId = clerkTraceId;\n this.retryAfter = retryAfter;\n this.errors = (errorsJson || []).map(e => new ClerkAPIError(e));\n }\n\n public toString() {\n let message = `[${this.name}]\\nMessage:${this.message}\\nStatus:${this.status}\\nSerialized errors: ${this.errors.map(\n e => JSON.stringify(e),\n )}`;\n\n if (this.clerkTraceId) {\n message += `\\nClerk Trace ID: ${this.clerkTraceId}`;\n }\n\n return message;\n }\n\n // Override formatMessage to keep it unformatted for backward compatibility\n protected static override formatMessage(name: string, msg: string, _: string, __: string | undefined) {\n return msg;\n }\n}\n\n/**\n * Type guard to check if an error is a ClerkApiResponseError.\n * Can be called as a standalone function or as a method on an error object.\n *\n * @example\n * // As a standalone function\n * if (isClerkApiResponseError(error)) { ... }\n *\n * // As a method (when attached to error object)\n * if (error.isClerkApiResponseError()) { ... }\n */\nexport const isClerkApiResponseError = createErrorTypeGuard(ClerkAPIResponseError);\n","const DefaultMessages = Object.freeze({\n InvalidProxyUrlErrorMessage: `The proxyUrl passed to Clerk is invalid. The expected value for proxyUrl is an absolute URL or a relative path with a leading '/'. (key={{url}})`,\n InvalidPublishableKeyErrorMessage: `The publishableKey passed to Clerk is invalid. You can get your Publishable key at https://dashboard.clerk.com/last-active?path=api-keys. (key={{key}})`,\n MissingPublishableKeyErrorMessage: `Missing publishableKey. You can get your key at https://dashboard.clerk.com/last-active?path=api-keys.`,\n MissingSecretKeyErrorMessage: `Missing secretKey. You can get your key at https://dashboard.clerk.com/last-active?path=api-keys.`,\n MissingClerkProvider: `{{source}} can only be used within the <ClerkProvider /> component. Learn more: https://clerk.com/docs/components/clerk-provider`,\n});\n\ntype MessageKeys = keyof typeof DefaultMessages;\n\ntype Messages = Record<MessageKeys, string>;\n\ntype CustomMessages = Partial<Messages>;\n\nexport type ErrorThrowerOptions = {\n packageName: string;\n customMessages?: CustomMessages;\n};\n\nexport interface ErrorThrower {\n setPackageName(options: ErrorThrowerOptions): ErrorThrower;\n\n setMessages(options: ErrorThrowerOptions): ErrorThrower;\n\n throwInvalidPublishableKeyError(params: { key?: string }): never;\n\n throwInvalidProxyUrl(params: { url?: string }): never;\n\n throwMissingPublishableKeyError(): never;\n\n throwMissingSecretKeyError(): never;\n\n throwMissingClerkProviderError(params: { source?: string }): never;\n\n throw(message: string): never;\n}\n\n/**\n * Builds an error thrower.\n *\n * @internal\n */\nexport function buildErrorThrower({ packageName, customMessages }: ErrorThrowerOptions): ErrorThrower {\n let pkg = packageName;\n\n /**\n * Builds a message from a raw message and replacements.\n *\n * @internal\n */\n function buildMessage(rawMessage: string, replacements?: Record<string, string | number>) {\n if (!replacements) {\n return `${pkg}: ${rawMessage}`;\n }\n\n let msg = rawMessage;\n const matches = rawMessage.matchAll(/{{([a-zA-Z0-9-_]+)}}/g);\n\n for (const match of matches) {\n const replacement = (replacements[match[1]] || '').toString();\n msg = msg.replace(`{{${match[1]}}}`, replacement);\n }\n\n return `${pkg}: ${msg}`;\n }\n\n const messages = {\n ...DefaultMessages,\n ...customMessages,\n };\n\n return {\n setPackageName({ packageName }: ErrorThrowerOptions): ErrorThrower {\n if (typeof packageName === 'string') {\n pkg = packageName;\n }\n return this;\n },\n\n setMessages({ customMessages }: ErrorThrowerOptions): ErrorThrower {\n Object.assign(messages, customMessages || {});\n return this;\n },\n\n throwInvalidPublishableKeyError(params: { key?: string }): never {\n throw new Error(buildMessage(messages.InvalidPublishableKeyErrorMessage, params));\n },\n\n throwInvalidProxyUrl(params: { url?: string }): never {\n throw new Error(buildMessage(messages.InvalidProxyUrlErrorMessage, params));\n },\n\n throwMissingPublishableKeyError(): never {\n throw new Error(buildMessage(messages.MissingPublishableKeyErrorMessage));\n },\n\n throwMissingSecretKeyError(): never {\n throw new Error(buildMessage(messages.MissingSecretKeyErrorMessage));\n },\n\n throwMissingClerkProviderError(params: { source?: string }): never {\n throw new Error(buildMessage(messages.MissingClerkProvider, params));\n },\n\n throw(message: string): never {\n throw new Error(buildMessage(message));\n },\n };\n}\n","import type { ClerkErrorParams } from './clerkError';\nimport { ClerkError } from './clerkError';\nimport { createErrorTypeGuard } from './createErrorTypeGuard';\n\ntype ClerkRuntimeErrorOptions = Omit<ClerkErrorParams, 'message'>;\n\n/**\n * Custom error class for representing Clerk runtime errors.\n *\n * @class ClerkRuntimeError\n *\n * @example\n * throw new ClerkRuntimeError('An error occurred', { code: 'password_invalid' });\n */\nexport class ClerkRuntimeError extends ClerkError {\n static kind = 'ClerkRuntimeError';\n /**\n * @deprecated Use `clerkError` property instead. This property is maintained for backward compatibility.\n */\n readonly clerkRuntimeError = true as const;\n\n constructor(message: string, options: ClerkRuntimeErrorOptions) {\n super({ ...options, message });\n Object.setPrototypeOf(this, ClerkRuntimeError.prototype);\n }\n}\n\n/**\n * Type guard to check if an error is a ClerkRuntimeError.\n * Can be called as a standalone function or as a method on an error object.\n *\n * @example\n * // As a standalone function\n * if (isClerkRuntimeError(error)) { ... }\n *\n * // As a method (when attached to error object)\n * if (error.isClerkRuntimeError()) { ... }\n */\nexport const isClerkRuntimeError = createErrorTypeGuard(ClerkRuntimeError);\n","import type { ClerkAPIResponseError } from './clerkApiResponseError';\nimport type { ClerkRuntimeError } from './clerkRuntimeError';\nimport type { EmailLinkError } from './emailLinkError';\nimport type { MetamaskError } from './metamaskError';\n\n/**\n * Checks if the provided error object is an unauthorized error.\n *\n * @internal\n *\n * @deprecated This is no longer used, and will be removed in the next major version.\n */\nexport function isUnauthorizedError(e: any): boolean {\n const status = e?.status;\n const code = e?.errors?.[0]?.code;\n return code === 'authentication_invalid' && status === 401;\n}\n\n/**\n * Checks if the provided error object is a captcha error.\n *\n * @internal\n */\nexport function isCaptchaError(e: ClerkAPIResponseError): boolean {\n return ['captcha_invalid', 'captcha_not_enabled', 'captcha_missing_token'].includes(e.errors[0].code);\n}\n\n/**\n * Checks if the provided error is a 4xx error.\n *\n * @internal\n */\nexport function is4xxError(e: any): boolean {\n const status = e?.status;\n return !!status && status >= 400 && status < 500;\n}\n\n/**\n * Checks if the provided error is a network error.\n *\n * @internal\n */\nexport function isNetworkError(e: any): boolean {\n // TODO: revise during error handling epic\n const message = (`${e.message}${e.name}` || '').toLowerCase().replace(/\\s+/g, '');\n return message.includes('networkerror');\n}\n\n/**\n * Checks if the provided error is either a ClerkAPIResponseError, a ClerkRuntimeError, or a MetamaskError.\n *\n * @internal\n */\nexport function isKnownError(error: any): error is ClerkAPIResponseError | ClerkRuntimeError | MetamaskError {\n return isClerkAPIResponseError(error) || isMetamaskError(error) || isClerkRuntimeError(error);\n}\n\n/**\n * Checks if the provided error is a ClerkAPIResponseError.\n *\n * @internal\n */\nexport function isClerkAPIResponseError(err: any): err is ClerkAPIResponseError {\n return err && 'clerkError' in err;\n}\n\n/**\n * Checks if the provided error object is an instance of ClerkRuntimeError.\n *\n * @param err - The error object to check.\n * @returns True if the error is a ClerkRuntimeError, false otherwise.\n *\n * @example\n * const error = new ClerkRuntimeError('An error occurred');\n * if (isClerkRuntimeError(error)) {\n * // Handle ClerkRuntimeError\n * console.error('ClerkRuntimeError:', error.message);\n * } else {\n * // Handle other errors\n * console.error('Other error:', error.message);\n * }\n */\nexport function isClerkRuntimeError(err: any): err is ClerkRuntimeError {\n return 'clerkRuntimeError' in err;\n}\n\n/**\n * Checks if the provided error is a Clerk runtime error indicating a reverification was cancelled.\n *\n * @internal\n */\nexport function isReverificationCancelledError(err: any) {\n return isClerkRuntimeError(err) && err.code === 'reverification_cancelled';\n}\n\n/**\n * Checks if the provided error is a Metamask error.\n *\n * @internal\n */\nexport function isMetamaskError(err: any): err is MetamaskError {\n return 'code' in err && [4001, 32602, 32603].includes(err.code) && 'message' in err;\n}\n\n/**\n * Checks if the provided error is clerk api response error indicating a user is locked.\n *\n * @internal\n */\nexport function isUserLockedError(err: any) {\n return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'user_locked';\n}\n\n/**\n * Checks if the provided error is a clerk api response error indicating a password was pwned.\n *\n * @internal\n */\nexport function isPasswordPwnedError(err: any) {\n return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_pwned';\n}\n\n/**\n * Checks if the provided error is a clerk api response error indicating a password was compromised.\n *\n * @internal\n */\nexport function isPasswordCompromisedError(err: any) {\n return isClerkAPIResponseError(err) && err.errors?.[0]?.code === 'form_password_compromised';\n}\n\n/**\n * Checks if the provided error is an EmailLinkError.\n *\n * @internal\n */\nexport function isEmailLinkError(err: Error): err is EmailLinkError {\n return err.name === 'EmailLinkError';\n}\n","export const LEGACY_DEV_INSTANCE_SUFFIXES = ['.lcl.dev', '.lclstage.dev', '.lclclerk.com'];\nexport const CURRENT_DEV_INSTANCE_SUFFIXES = ['.accounts.dev', '.accountsstage.dev', '.accounts.lclclerk.com'];\nexport const DEV_OR_STAGING_SUFFIXES = [\n '.lcl.dev',\n '.stg.dev',\n '.lclstage.dev',\n '.stgstage.dev',\n '.dev.lclclerk.com',\n '.stg.lclclerk.com',\n '.accounts.lclclerk.com',\n 'accountsstage.dev',\n 'accounts.dev',\n];\nexport const LOCAL_ENV_SUFFIXES = ['.lcl.dev', 'lclstage.dev', '.lclclerk.com', '.accounts.lclclerk.com'];\nexport const STAGING_ENV_SUFFIXES = ['.accountsstage.dev'];\nexport const LOCAL_API_URL = 'https://api.lclclerk.com';\nexport const STAGING_API_URL = 'https://api.clerkstage.dev';\nexport const PROD_API_URL = 'https://api.clerk.com';\n\n/**\n * Returns the URL for a static image\n * using the new img.clerk.com service\n */\nexport function iconImageUrl(id: string, format: 'svg' | 'jpeg' = 'svg'): string {\n return `https://img.clerk.com/static/${id}.${format}`;\n}\n","/**\n * A function that decodes a string of data which has been encoded using base-64 encoding.\n * Uses `atob` if available, otherwise uses `Buffer` from `global`. If neither are available, returns the data as-is.\n */\nexport const isomorphicAtob = (data: string) => {\n if (typeof atob !== 'undefined' && typeof atob === 'function') {\n return atob(data);\n } else if (typeof global !== 'undefined' && global.Buffer) {\n return new global.Buffer(data, 'base64').toString();\n }\n return data;\n};\n","import { DEV_OR_STAGING_SUFFIXES, LEGACY_DEV_INSTANCE_SUFFIXES } from './constants';\nimport { isomorphicAtob } from './isomorphicAtob';\nimport { isomorphicBtoa } from './isomorphicBtoa';\nimport type { PublishableKey } from './types';\n\n/**\n * Configuration options for parsing publishable keys.\n */\ntype ParsePublishableKeyOptions = {\n /** Whether to throw an error if parsing fails */\n fatal?: boolean;\n /** Custom domain to use for satellite instances */\n domain?: string;\n /** Proxy URL to use instead of the decoded frontend API */\n proxyUrl?: string;\n /** Whether this is a satellite instance */\n isSatellite?: boolean;\n};\n\n/** Prefix used for production publishable keys */\nconst PUBLISHABLE_KEY_LIVE_PREFIX = 'pk_live_';\n\n/** Prefix used for development publishable keys */\nconst PUBLISHABLE_KEY_TEST_PREFIX = 'pk_test_';\n\n/**\n * Regular expression that matches development frontend API keys.\n * Matches patterns like: foo-bar-13.clerk.accounts.dev.\n */\nconst PUBLISHABLE_FRONTEND_API_DEV_REGEX = /^(([a-z]+)-){2}([0-9]{1,2})\\.clerk\\.accounts([a-z.]*)(dev|com)$/i;\n\n/**\n * Converts a frontend API URL into a base64-encoded publishable key.\n *\n * @param frontendApi - The frontend API URL (e.g., 'clerk.example.com').\n * @returns A base64-encoded publishable key with appropriate prefix (pk_live_ or pk_test_).\n */\nexport function buildPublishableKey(frontendApi: string): string {\n const isDevKey =\n PUBLISHABLE_FRONTEND_API_DEV_REGEX.test(frontendApi) ||\n (frontendApi.startsWith('clerk.') && LEGACY_DEV_INSTANCE_SUFFIXES.some(s => frontendApi.endsWith(s)));\n const keyPrefix = isDevKey ? PUBLISHABLE_KEY_TEST_PREFIX : PUBLISHABLE_KEY_LIVE_PREFIX;\n return `${keyPrefix}${isomorphicBtoa(`${frontendApi}$`)}`;\n}\n\n/**\n * Validates that a decoded publishable key has the correct format.\n * The decoded value should be a frontend API followed by exactly one '$' at the end.\n *\n * @param decoded - The decoded publishable key string to validate.\n * @returns `true` if the decoded key has valid format, `false` otherwise.\n */\nfunction isValidDecodedPublishableKey(decoded: string): boolean {\n if (!decoded.endsWith('$')) {\n return false;\n }\n\n const withoutTrailing = decoded.slice(0, -1);\n if (withoutTrailing.includes('$')) {\n return false;\n }\n\n return withoutTrailing.includes('.');\n}\n\nexport function parsePublishableKey(\n key: string | undefined,\n options: ParsePublishableKeyOptions & { fatal: true },\n): PublishableKey;\nexport function parsePublishableKey(\n key: string | undefined,\n options?: ParsePublishableKeyOptions,\n): PublishableKey | null;\n/**\n * Parses and validates a publishable key, extracting the frontend API and instance type.\n *\n * @param key - The publishable key to parse.\n * @param options - Configuration options for parsing.\n * @param options.fatal\n * @param options.domain\n * @param options.proxyUrl\n * @param options.isSatellite\n * @returns Parsed publishable key object with instanceType and frontendApi, or null if invalid.\n *\n * @throws {Error} When options.fatal is true and key is missing or invalid.\n */\nexport function parsePublishableKey(\n key: string | undefined,\n options: { fatal?: boolean; domain?: string; proxyUrl?: string; isSatellite?: boolean } = {},\n): PublishableKey | null {\n key = key || '';\n\n if (!key || !isPublishableKey(key)) {\n if (options.fatal && !key) {\n throw new Error(\n 'Publishable key is missing. Ensure that your publishable key is correctly configured. Double-check your environment configuration for your keys, or access them here: https://dashboard.clerk.com/last-active?path=api-keys',\n );\n }\n if (options.fatal && !isPublishableKey(key)) {\n throw new Error('Publishable key not valid.');\n }\n return null;\n }\n\n const instanceType = key.startsWith(PUBLISHABLE_KEY_LIVE_PREFIX) ? 'production' : 'development';\n\n let decodedFrontendApi: string;\n try {\n decodedFrontendApi = isomorphicAtob(key.split('_')[2]);\n } catch {\n if (options.fatal) {\n throw new Error('Publishable key not valid: Failed to decode key.');\n }\n return null;\n }\n\n if (!isValidDecodedPublishableKey(decodedFrontendApi)) {\n if (options.fatal) {\n throw new Error('Publishable key not valid: Decoded key has invalid format.');\n }\n return null;\n }\n\n let frontendApi = decodedFrontendApi.slice(0, -1);\n\n if (options.proxyUrl) {\n frontendApi = options.proxyUrl;\n } else if (instanceType !== 'development' && options.domain && options.isSatellite) {\n frontendApi = `clerk.${options.domain}`;\n }\n\n return {\n instanceType,\n frontendApi,\n };\n}\n\n/**\n * Checks if the provided key is a valid publishable key.\n *\n * @param key - The key to be checked. Defaults to an empty string if not provided.\n * @returns `true` if 'key' is a valid publishable key, `false` otherwise.\n */\nexport function isPublishableKey(key: string = '') {\n try {\n const hasValidPrefix = key.startsWith(PUBLISHABLE_KEY_LIVE_PREFIX) || key.startsWith(PUBLISHABLE_KEY_TEST_PREFIX);\n\n if (!hasValidPrefix) {\n return false;\n }\n\n const parts = key.split('_');\n if (parts.length !== 3) {\n return false;\n }\n\n const encodedPart = parts[2];\n if (!encodedPart) {\n return false;\n }\n\n const decoded = isomorphicAtob(encodedPart);\n return isValidDecodedPublishableKey(decoded);\n } catch {\n return false;\n }\n}\n\n/**\n * Creates a memoized cache for checking if URLs are development or staging environments.\n * Uses a Map to cache results for better performance on repeated checks.\n *\n * @returns An object with an isDevOrStagingUrl method that checks if a URL is dev/staging.\n */\nexport function createDevOrStagingUrlCache() {\n const devOrStagingUrlCache = new Map<string, boolean>();\n\n return {\n /**\n * Checks if a URL is a development or staging environment.\n *\n * @param url - The URL to check (string or URL object).\n * @returns `true` if the URL is a development or staging environment, `false` otherwise.\n */\n isDevOrStagingUrl: (url: string | URL): boolean => {\n if (!url) {\n return false;\n }\n\n const hostname = typeof url === 'string' ? url : url.hostname;\n let res = devOrStagingUrlCache.get(hostname);\n if (res === undefined) {\n res = DEV_OR_STAGING_SUFFIXES.some(s => hostname.endsWith(s));\n devOrStagingUrlCache.set(hostname, res);\n }\n return res;\n },\n };\n}\n\n/**\n * Checks if a publishable key is for a development environment.\n * Supports both legacy format (test_) and new format (pk_test_).\n *\n * @param apiKey - The API key to check.\n * @returns `true` if the key is for development, `false` otherwise.\n */\nexport function isDevelopmentFromPublishableKey(apiKey: string): boolean {\n return apiKey.startsWith('test_') || apiKey.startsWith('pk_test_');\n}\n\n/**\n * Checks if a publishable key is for a production environment.\n * Supports both legacy format (live_) and new format (pk_live_).\n *\n * @param apiKey - The API key to check.\n * @returns `true` if the key is for production, `false` otherwise.\n */\nexport function isProductionFromPublishableKey(apiKey: string): boolean {\n return apiKey.startsWith('live_') || apiKey.startsWith('pk_live_');\n}\n\n/**\n * Checks if a secret key is for a development environment.\n * Supports both legacy format (test_) and new format (sk_test_).\n *\n * @param apiKey - The secret key to check.\n * @returns `true` if the key is for development, `false` otherwise.\n */\nexport function isDevelopmentFromSecretKey(apiKey: string): boolean {\n return apiKey.startsWith('test_') || apiKey.startsWith('sk_test_');\n}\n\n/**\n * Checks if a secret key is for a production environment.\n * Supports both legacy format (live_) and new format (sk_live_).\n *\n * @param apiKey - The secret key to check.\n * @returns `true` if the key is for production, `false` otherwise.\n */\nexport function isProductionFromSecretKey(apiKey: string): boolean {\n return apiKey.startsWith('live_') || apiKey.startsWith('sk_live_');\n}\n\n/**\n * Generates a unique cookie suffix based on the publishable key using SHA-1 hashing.\n * The suffix is base64-encoded and URL-safe (+ and / characters are replaced).\n *\n * @param publishableKey - The publishable key to generate suffix from.\n * @param subtle - The SubtleCrypto interface to use for hashing (defaults to globalThis.crypto.subtle).\n * @returns A promise that resolves to an 8-character URL-safe base64 string.\n */\nexport async function getCookieSuffix(\n publishableKey: string,\n subtle: SubtleCrypto = globalThis.crypto.subtle,\n): Promise<string> {\n const data = new TextEncoder().encode(publishableKey);\n const digest = await subtle.digest('sha-1', data);\n const stringDigest = String.fromCharCode(...new Uint8Array(digest));\n // Base 64 Encoding with URL and Filename Safe Alphabet: https://datatracker.ietf.org/doc/html/rfc4648#section-5\n return isomorphicBtoa(stringDigest).replace(/\\+/gi, '-').replace(/\\//gi, '_').substring(0, 8);\n}\n\n/**\n * Creates a suffixed cookie name by appending the cookie suffix to the base name.\n * Used to create unique cookie names based on the publishable key.\n *\n * @param cookieName - The base cookie name.\n * @param cookieSuffix - The suffix to append (typically generated by getCookieSuffix).\n * @returns The suffixed cookie name in format: `${cookieName}_${cookieSuffix}`.\n */\nexport const getSuffixedCookieName = (cookieName: string, cookieSuffix: string): string => {\n return `${cookieName}_${cookieSuffix}`;\n};\n","export const SCOPE = {\n BACKGROUND: 'background',\n} as const;\n\nexport type Scope = (typeof SCOPE)[keyof typeof SCOPE];\n\nexport interface ClerkClientExtensionFeatures {\n background?: boolean;\n sync?: boolean;\n}\n","export const DEV_BROWSER_JWT_KEY = '__clerk_db_jwt';\nexport const DEV_BROWSER_JWT_HEADER = 'Clerk-Db-Jwt';\n\n// Sets the dev_browser JWT in the hash or the search\n/**\n *\n */\nexport function setDevBrowserJWTInURL(url: URL, jwt: string): URL {\n const resultURL = new URL(url);\n\n // extract & strip existing jwt from search\n const jwtFromSearch = resultURL.searchParams.get(DEV_BROWSER_JWT_KEY);\n resultURL.searchParams.delete(DEV_BROWSER_JWT_KEY);\n\n // Existing jwt takes precedence\n const jwtToSet = jwtFromSearch || jwt;\n\n if (jwtToSet) {\n resultURL.searchParams.set(DEV_BROWSER_JWT_KEY, jwtToSet);\n }\n\n return resultURL;\n}\n\n/**\n * Gets the __clerk_db_jwt JWT from either the hash or the search\n * Side effect:\n * Removes __clerk_db_jwt JWT from the URL (hash and searchParams) and updates the browser history\n */\nexport function extractDevBrowserJWTFromURL(url: URL): string {\n const jwt = readDevBrowserJwtFromSearchParams(url);\n const cleanUrl = removeDevBrowserJwt(url);\n if (cleanUrl.href !== url.href && typeof globalThis.history !== 'undefined') {\n globalThis.history.replaceState(null, '', removeDevBrowserJwt(url));\n }\n return jwt;\n}\n\nconst readDevBrowserJwtFromSearchParams = (url: URL) => {\n return url.searchParams.get(DEV_BROWSER_JWT_KEY) || '';\n};\n\nconst removeDevBrowserJwt = (url: URL) => {\n return removeDevBrowserJwtFromURLSearchParams(removeLegacyDevBrowserJwt(url));\n};\n\nconst removeDevBrowserJwtFromURLSearchParams = (_url: URL) => {\n const url = new URL(_url);\n url.searchParams.delete(DEV_BROWSER_JWT_KEY);\n return url;\n};\n\n/**\n * Removes the __clerk_db_jwt JWT from the URL hash, as well as\n * the legacy __dev_session JWT from the URL searchParams\n * We no longer need to use this value, however, we should remove it from the URL\n * Existing v4 apps will write the JWT to the hash and the search params in order to ensure\n * backwards compatibility with older v4 apps.\n * The only use case where this is needed now is when a user upgrades to clerk@5 locally\n * without changing the component's version on their dashboard.\n * In this scenario, the AP@4 -> localhost@5 redirect will still have the JWT in the hash,\n * in which case we need to remove it.\n */\nconst removeLegacyDevBrowserJwt = (_url: URL) => {\n const DEV_BROWSER_JWT_MARKER_REGEXP = /__clerk_db_jwt\\[(.*)\\]/;\n const DEV_BROWSER_JWT_LEGACY_KEY = '__dev_session';\n const url = new URL(_url);\n url.searchParams.delete(DEV_BROWSER_JWT_LEGACY_KEY);\n url.hash = decodeURI(url.hash).replace(DEV_BROWSER_JWT_MARKER_REGEXP, '');\n if (url.href.endsWith('#')) {\n url.hash = '';\n }\n return url;\n};\n","export const AUTH_HEADER = {\n PRODUCTION: 'Authorization',\n DEVELOPMENT: 'Clerk-Db-Jwt',\n};\n\nexport const CLIENT_JWT_KEY = '__client';\nexport const CLIENT_UAT_KEY = '__clerk_uat';\nexport const DEFAULT_LOCAL_HOST_PERMISSION = 'http://localhost';\nexport const STORAGE_KEY_CLIENT_JWT = '__clerk_client_jwt';\n","import { buildErrorThrower } from '@clerk/shared/error';\n\nexport type HostPermissionHintOpts = {\n hostHint: string;\n};\n\nexport const errorLogger = (err: Error) => console.error(err, err.stack);\nexport const errorThrower = buildErrorThrower({ packageName: '@clerk/chrome-extension' });\n\nexport const missingManifestKeyError = (key: string) => `Missing \\`${key}\\` entry in manifest.json`;\n\nexport function assertPublishableKey(publishableKey: unknown): asserts publishableKey {\n if (!publishableKey) {\n errorThrower.throwMissingPublishableKeyError();\n }\n}\n","import browser from 'webextension-polyfill';\n\nexport type FormattedUrl = `http${string}`;\n\nexport type GetClientCookieParams = {\n name: string;\n url: string;\n callback: (changeInfo: ChangeInfo) => Promise<void>;\n onListenerCallback?: () => void;\n};\n\nexport type ChangeInfo = {\n cookie: browser.Cookies.Cookie;\n cause: browser.Cookies.OnChangedCause;\n removed: boolean;\n};\n\nfunction ensureFormattedUrl(url: string): FormattedUrl {\n return url.startsWith('http') ? (url as FormattedUrl) : `https://${url}`;\n}\n\nexport async function getClientCookie({ url, name }: GetClientCookieParams) {\n return await browser.cookies.get({ name, url: ensureFormattedUrl(url) });\n}\n\nexport function createClientCookieListener({ url, name, callback }: GetClientCookieParams) {\n const domain = new URL(url).hostname;\n const cookieDomain = domain.startsWith('www.') ? domain.slice(4) : domain;\n\n const listener = (changeInfo: ChangeInfo) => {\n if (changeInfo.cookie.domain === cookieDomain && changeInfo.cookie.name === name) {\n void callback(changeInfo);\n }\n };\n\n return {\n add: () => browser.cookies.onChanged.addListener(listener),\n has: () => browser.cookies.onChanged.hasListener(listener),\n remove: () => browser.cookies.onChanged.removeListener(listener),\n };\n}\n","import { CLIENT_UAT_KEY, STORAGE_KEY_CLIENT_JWT } from '../constants';\nimport type { ChangeInfo, GetClientCookieParams } from './cookies';\nimport { createClientCookieListener, getClientCookie } from './cookies';\nimport { errorLogger } from './errors';\nimport type { StorageCache } from './storage';\n\nexport type JWTHandlerParams = { frontendApi: string } & (\n | {\n sync?: false;\n }\n | ({ sync: true } & GetClientCookieParams)\n);\n\nexport type JWTHandler = ReturnType<typeof JWTHandler>;\n\nfunction shouldSync(sync: boolean | undefined, _params: unknown): _params is GetClientCookieParams {\n return Boolean(sync);\n}\n\nexport function JWTHandler(store: StorageCache, params: JWTHandlerParams) {\n const { sync, frontendApi, ...cookieParams } = params;\n\n const CACHE_KEY = store.createKey(frontendApi, STORAGE_KEY_CLIENT_JWT, 'v2');\n\n /**\n * Sets the JWT value to the active\n * @param value: JWT generally from the cookie or authorization header\n */\n const set = async (value: string): Promise<void> => {\n return await store.set(CACHE_KEY, value).catch(errorLogger);\n };\n\n /**\n * Remove the JWT value\n */\n const remove = async (): Promise<void> => {\n return await store.remove(CACHE_KEY).catch(errorLogger);\n };\n\n /**\n * Gets the JWT value to the active store.\n * If not set, attempt to get it from the synced session and save for later use.\n */\n const get = async () => {\n if (shouldSync(sync, cookieParams)) {\n // Get client cookie from browser\n const syncedJWT = await getClientCookie(cookieParams).catch(errorLogger);\n\n if (syncedJWT) {\n // Set client cookie in StorageCache\n await set(syncedJWT.value);\n return syncedJWT.value;\n }\n }\n\n // Get current JWT from StorageCache\n return await store.get<string>(CACHE_KEY);\n };\n\n const listener = () => {\n if (!shouldSync(sync, cookieParams)) {\n return;\n }\n\n const { onListenerCallback, ...restCookieParams } = cookieParams;\n\n return createClientCookieListener({\n ...restCookieParams,\n callback: async (changeInfo: ChangeInfo) => {\n const existingJWT = await get();\n\n if (existingJWT === changeInfo.cookie.value) {\n const syncedUAT = await getClientCookie({ ...restCookieParams, name: CLIENT_UAT_KEY }).catch(errorLogger);\n\n if (!syncedUAT || syncedUAT?.value === '0') {\n onListenerCallback?.();\n }\n\n return;\n }\n\n await set(changeInfo.cookie.value);\n onListenerCallback?.();\n },\n });\n };\n\n return { get, listener, set, remove };\n}\n","import type { SetRequired } from 'type-fest';\nimport type { Manifest } from 'webextension-polyfill';\n\nimport type { ClerkClientExtensionFeatures } from '../../types';\nimport { errorThrower, missingManifestKeyError } from './errors';\n\nexport type ValidatedManifest = SetRequired<Manifest.WebExtensionManifest, 'permissions' | 'host_permissions'>;\nexport type ManifestKeys = keyof Manifest.WebExtensionManifest;\n\nfunction validateRootManifestKey(manifest: Manifest.WebExtensionManifest, key: ManifestKeys): void {\n if (!manifest[key]) {\n errorThrower.throw(missingManifestKeyError(key));\n }\n}\n\nfunction validateManifestPermission(manifest: Manifest.WebExtensionManifest, key: Manifest.Permission): void {\n if (!manifest.permissions?.includes(key)) {\n errorThrower.throw(missingManifestKeyError(`permissions.${key}`));\n }\n}\n\nfunction hasAdditionalFeatures(features: ClerkClientExtensionFeatures): boolean {\n return Boolean(features) && Object.keys(features).length > 0;\n}\n\nexport function validateManifest(\n manifest: Manifest.WebExtensionManifest,\n features: ClerkClientExtensionFeatures,\n): asserts manifest is ValidatedManifest {\n validateRootManifestKey(manifest, 'permissions');\n validateManifestPermission(manifest, 'storage');\n\n // If no additional features are provided, we can return success early\n if (!hasAdditionalFeatures(features)) {\n return;\n }\n\n if (features.background) {\n validateRootManifestKey(manifest, 'background');\n }\n\n if (features.sync) {\n validateManifestPermission(manifest, 'cookies');\n validateRootManifestKey(manifest, 'host_permissions');\n }\n}\n","import type { Clerk } from '@clerk/clerk-js';\n\nimport { AUTH_HEADER } from '../constants';\nimport type { JWTHandler } from './jwt-handler';\n\ntype Handler = Parameters<Clerk['__internal_onBeforeRequest']>[0];\ntype Req = Parameters<Handler>[0];\n\n/** Append the JWT to the FAPI request */\nexport function requestHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) {\n const handler: Handler = async requestInit => {\n requestInit.credentials = 'omit';\n\n const currentJWT = await jwtHandler.get();\n\n if (!currentJWT) {\n return;\n }\n\n if (isProd) {\n prodHandler(requestInit, currentJWT);\n } else {\n devHandler(requestInit, currentJWT);\n }\n };\n\n return handler;\n}\n\n/** Append the JWT to the FAPI request, per development instances */\nfunction devHandler(requestInit: Req, jwt: string) {\n requestInit.url?.searchParams.append('__clerk_db_jwt', jwt);\n}\n\n/** Append the JWT to the FAPI request, per production instances */\nfunction prodHandler(requestInit: Req, jwt: string) {\n requestInit.url?.searchParams.append('_is_native', '1');\n (requestInit.headers as Headers).set(AUTH_HEADER.PRODUCTION, `Bearer ${jwt}`);\n}\n","import type { Clerk } from '@clerk/clerk-js';\n\nimport { AUTH_HEADER } from '../constants';\nimport type { JWTHandler } from './jwt-handler';\n\ntype Handler = Parameters<Clerk['__internal_onAfterResponse']>[0];\ntype Res = Parameters<Handler>[1];\n\n/** Retrieve the JWT to the FAPI response */\nexport function responseHandler(jwtHandler: JWTHandler, { isProd }: { isProd: boolean }) {\n const handler: Handler = async (_, response) => {\n if (isProd) {\n await prodHandler(response, jwtHandler);\n } else {\n await devHandler(response, jwtHandler);\n }\n };\n return handler;\n}\n\n/** Retrieve the JWT to the FAPI response, per development instances */\nasync function devHandler(response: Res, jwtHandler: JWTHandler) {\n const header = response?.headers.get(AUTH_HEADER.DEVELOPMENT);\n\n if (header) {\n await jwtHandler.set(header);\n } else {\n await jwtHandler.remove();\n }\n}\n\n/** Retrieve the JWT to the FAPI response, per production instances */\nasync function prodHandler(response: Res, jwtHandler: JWTHandler) {\n const header = response?.headers.get(AUTH_HEADER.PRODUCTION);\n\n if (header?.startsWith('Bearer')) {\n const jwt = header.split(' ')[1] || undefined;\n\n if (jwt) {\n await jwtHandler.set(jwt);\n } else {\n await jwtHandler.remove();\n }\n } else if (header) {\n await jwtHandler.set(header);\n }\n}\n","import browser from 'webextension-polyfill';\n\ntype StorageCacheOptions = {\n storageArea?: 'local' | 'sync';\n};\n\nexport type StorageCache = {\n createKey: (...keys: string[]) => string;\n get: <T = any>(key: string) => Promise<T | undefined>;\n remove: (key: string) => Promise<void>;\n set: (key: string, value: string) => Promise<void>;\n};\n\nconst createKey: StorageCache['createKey'] = (...keys: string[]) => keys.filter(Boolean).join('|');\n\n// Use browser.storage (local or sync) to persist Clerk client JWT.\n// More information at https://developer.chrome.com/docs/extensions/reference/storage\nconst createBrowserStorageCache = (opts: StorageCacheOptions = {}): StorageCache => {\n const __storageArea = opts.storageArea || 'local';\n\n return {\n createKey,\n get: <T>(key: string) => browser.storage[__storageArea].get(key).then(result => (result[key] as T) || undefined),\n remove: (key: string) => browser.storage[__storageArea].remove(key),\n set: (key: string, value: string) => browser.storage[__storageArea].set({ [key]: value }),\n };\n};\n\nconst createMemoryStorageCache = (): StorageCache => {\n const cache: Map<string, any> = new Map();\n\n return {\n createKey,\n get: (key: string) => Promise.resolve(cache.get(key)),\n remove: (key: string) => {\n cache.delete(key);\n return Promise.resolve();\n },\n set: (key: string, value: string) => {\n cache.set(key, value);\n return Promise.resolve();\n },\n };\n};\n\nexport const BrowserStorageCache = createBrowserStorageCache();\nexport const MemoryStorageCache = createMemoryStorageCache();\n","import { Clerk } from '@clerk/clerk-js/no-rhc';\nimport { DEV_BROWSER_JWT_KEY } from '@clerk/shared/devBrowser';\nimport { parsePublishableKey } from '@clerk/shared/keys';\nimport browser from 'webextension-polyfill';\n\nimport { SCOPE, type Scope } from '../types';\nimport { CLIENT_JWT_KEY, DEFAULT_LOCAL_HOST_PERMISSION } from './constants';\nimport { assertPublishableKey } from './utils/errors';\nimport type { JWTHandlerParams } from './utils/jwt-handler';\nimport { JWTHandler } from './utils/jwt-handler';\nimport { validateManifest } from './utils/manifest';\nimport { requestHandler } from './utils/request-handler';\nimport { responseHandler } from './utils/response-handler';\nimport { BrowserStorageCache, type StorageCache } from './utils/storage';\n\nexport let clerk: Clerk;\n\nClerk.sdkMetadata = {\n name: PACKAGE_NAME,\n version: PACKAGE_VERSION,\n};\n\nexport type CreateClerkClientOptions = {\n __experimental_syncHostListener?: boolean;\n publishableKey: string;\n scope?: Scope;\n storageCache?: StorageCache;\n syncHost?: string;\n};\n\nexport function createClerkClient({\n __experimental_syncHostListener = false,\n publishableKey,\n scope,\n storageCache = BrowserStorageCache,\n syncHost,\n}: CreateClerkClientOptions) {\n if (scope === SCOPE.BACKGROUND) {\n // TODO @nikos\n // @ts-expect-error will be replaced by clerk ui\n Clerk.mountComponentRenderer = undefined;\n }\n\n // Don't cache background scripts as it can result in out-of-sync client information.\n if (clerk && scope !== SCOPE.BACKGROUND) {\n return clerk;\n }\n\n // Sync is enabled if a `syncHost` is provided\n const sync = Boolean(syncHost);\n\n // Parse publishableKey and assert it's present/valid, throw if not\n const key = parsePublishableKey(publishableKey);\n assertPublishableKey(key);\n\n const isProd = key.instanceType === 'production';\n const manifest = browser.runtime.getManifest();\n\n // Will throw if manifest is invalid\n validateManifest(manifest, {\n background: scope === SCOPE.BACKGROUND,\n sync,\n });\n\n // Set up JWT handler and attempt to get JWT from storage on initialization\n const url = syncHost ? syncHost : DEFAULT_LOCAL_HOST_PERMISSION;\n\n // Create Clerk instance\n clerk = new Clerk(publishableKey, {});\n\n // @ts-expect-error - TODO: sync is evaluating to true vs boolean\n const jwtOptions: JWTHandlerParams = {\n frontendApi: key.frontendApi,\n name: isProd ? CLIENT_JWT_KEY : DEV_BROWSER_JWT_KEY,\n url,\n sync: sync,\n };\n\n if (jwtOptions.sync && __experimental_syncHostListener) {\n jwtOptions.onListenerCallback = () => {\n if (clerk.user) {\n clerk.user.reload();\n } else {\n window.location.reload();\n }\n };\n }\n\n const jwt = JWTHandler(storageCache, jwtOptions);\n\n // Add listener to sync host cookies if enabled\n if (jwtOptions.sync && __experimental_syncHostListener) {\n const listener = jwt.listener();\n listener?.add();\n }\n\n clerk.__internal_onAfterResponse(responseHandler(jwt, { isProd }));\n clerk.__internal_onBeforeRequest(requestHandler(jwt, { isProd }));\n\n return clerk;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { __export, buildErrorThrower, createDevOrStagingUrlCache, ClerkRuntimeError, parsePublishableKey, createClerkClient, isClerkAPIResponseError } from './chunk-BOFVWMUS.js';
1
+ import { __export, buildErrorThrower, createDevOrStagingUrlCache, ClerkRuntimeError, parsePublishableKey, createClerkClient, isClerkAPIResponseError } from './chunk-TYQ2BGIZ.js';
2
2
  import React7, { createContext, useContext, useState, useRef, useEffect, createElement, useCallback, useMemo, useSyncExternalStore, useLayoutEffect, useDebugValue } from 'react';
3
3
  import { useSyncExternalStore as useSyncExternalStore$1 } from 'use-sync-external-store/shim/index.js';
4
4
  import { createPortal } from 'react-dom';
@@ -200,7 +200,7 @@ function getCurrentOrganizationMembership(organizationMemberships, organizationI
200
200
  var noop = (..._args) => {
201
201
  };
202
202
 
203
- // ../shared/dist/runtime/telemetry-B4xKE_qs.mjs
203
+ // ../shared/dist/runtime/telemetry-DnVD78JJ.mjs
204
204
  var EVENT_METHOD_CALLED = "METHOD_CALLED";
205
205
  var EVENT_SAMPLING_RATE$2 = 0.1;
206
206
  function eventMethodCalled(method, payload) {
@@ -2751,7 +2751,7 @@ function handleValueOrFn(value, url, defaultValue) {
2751
2751
  if (typeof defaultValue !== "undefined") return defaultValue;
2752
2752
  }
2753
2753
 
2754
- // ../shared/dist/runtime/utils-D2Tq-GIn.mjs
2754
+ // ../shared/dist/runtime/utils-DIVknyRo.mjs
2755
2755
  var logErrorInDevMode = (message) => {
2756
2756
  if (isDevelopmentEnvironment()) console.error(`Clerk: ${message}`);
2757
2757
  };
@@ -3265,7 +3265,7 @@ var SignIn = withClerk(
3265
3265
  component,
3266
3266
  mount: clerk.mountSignIn,
3267
3267
  unmount: clerk.unmountSignIn,
3268
- updateProps: clerk.__unstable__updateProps,
3268
+ updateProps: clerk.__internal_updateProps,
3269
3269
  props,
3270
3270
  rootProps: rendererRootProps
3271
3271
  }
@@ -3286,7 +3286,7 @@ var SignUp = withClerk(
3286
3286
  component,
3287
3287
  mount: clerk.mountSignUp,
3288
3288
  unmount: clerk.unmountSignUp,
3289
- updateProps: clerk.__unstable__updateProps,
3289
+ updateProps: clerk.__internal_updateProps,
3290
3290
  props,
3291
3291
  rootProps: rendererRootProps
3292
3292
  }
@@ -3321,7 +3321,7 @@ var _UserProfile = withClerk(
3321
3321
  component,
3322
3322
  mount: clerk.mountUserProfile,
3323
3323
  unmount: clerk.unmountUserProfile,
3324
- updateProps: clerk.__unstable__updateProps,
3324
+ updateProps: clerk.__internal_updateProps,
3325
3325
  props: { ...props, customPages },
3326
3326
  rootProps: rendererRootProps
3327
3327
  },
@@ -3365,7 +3365,7 @@ var _UserButton = withClerk(
3365
3365
  const passableProps = {
3366
3366
  mount: clerk.mountUserButton,
3367
3367
  unmount: clerk.unmountUserButton,
3368
- updateProps: clerk.__unstable__updateProps,
3368
+ updateProps: clerk.__internal_updateProps,
3369
3369
  props: { ...props, userProfileProps, customMenuItems }
3370
3370
  };
3371
3371
  const portalProps = {
@@ -3444,7 +3444,7 @@ var _OrganizationProfile = withClerk(
3444
3444
  component,
3445
3445
  mount: clerk.mountOrganizationProfile,
3446
3446
  unmount: clerk.unmountOrganizationProfile,
3447
- updateProps: clerk.__unstable__updateProps,
3447
+ updateProps: clerk.__internal_updateProps,
3448
3448
  props: { ...props, customPages },
3449
3449
  rootProps: rendererRootProps
3450
3450
  },
@@ -3470,7 +3470,7 @@ var CreateOrganization = withClerk(
3470
3470
  component,
3471
3471
  mount: clerk.mountCreateOrganization,
3472
3472
  unmount: clerk.unmountCreateOrganization,
3473
- updateProps: clerk.__unstable__updateProps,
3473
+ updateProps: clerk.__internal_updateProps,
3474
3474
  props,
3475
3475
  rootProps: rendererRootProps
3476
3476
  }
@@ -3506,7 +3506,7 @@ var _OrganizationSwitcher = withClerk(
3506
3506
  const passableProps = {
3507
3507
  mount: clerk.mountOrganizationSwitcher,
3508
3508
  unmount: clerk.unmountOrganizationSwitcher,
3509
- updateProps: clerk.__unstable__updateProps,
3509
+ updateProps: clerk.__internal_updateProps,
3510
3510
  props: { ...props, organizationProfileProps },
3511
3511
  rootProps: rendererRootProps,
3512
3512
  component
@@ -3553,7 +3553,7 @@ var OrganizationList = withClerk(
3553
3553
  component,
3554
3554
  mount: clerk.mountOrganizationList,
3555
3555
  unmount: clerk.unmountOrganizationList,
3556
- updateProps: clerk.__unstable__updateProps,
3556
+ updateProps: clerk.__internal_updateProps,
3557
3557
  props,
3558
3558
  rootProps: rendererRootProps
3559
3559
  }
@@ -3574,7 +3574,7 @@ withClerk(
3574
3574
  component,
3575
3575
  open: clerk.openGoogleOneTap,
3576
3576
  close: clerk.closeGoogleOneTap,
3577
- updateProps: clerk.__unstable__updateProps,
3577
+ updateProps: clerk.__internal_updateProps,
3578
3578
  props,
3579
3579
  rootProps: rendererRootProps
3580
3580
  }
@@ -3595,7 +3595,7 @@ var Waitlist = withClerk(
3595
3595
  component,
3596
3596
  mount: clerk.mountWaitlist,
3597
3597
  unmount: clerk.unmountWaitlist,
3598
- updateProps: clerk.__unstable__updateProps,
3598
+ updateProps: clerk.__internal_updateProps,
3599
3599
  props,
3600
3600
  rootProps: rendererRootProps
3601
3601
  }
@@ -3619,7 +3619,7 @@ var PricingTable = withClerk(
3619
3619
  component,
3620
3620
  mount: clerk.mountPricingTable,
3621
3621
  unmount: clerk.unmountPricingTable,
3622
- updateProps: clerk.__unstable__updateProps,
3622
+ updateProps: clerk.__internal_updateProps,
3623
3623
  props,
3624
3624
  rootProps: rendererRootProps
3625
3625
  }
@@ -3640,7 +3640,7 @@ var APIKeys = withClerk(
3640
3640
  component,
3641
3641
  mount: clerk.mountAPIKeys,
3642
3642
  unmount: clerk.unmountAPIKeys,
3643
- updateProps: clerk.__unstable__updateProps,
3643
+ updateProps: clerk.__internal_updateProps,
3644
3644
  props,
3645
3645
  rootProps: rendererRootProps
3646
3646
  }
@@ -3661,7 +3661,7 @@ var UserAvatar = withClerk(
3661
3661
  component,
3662
3662
  mount: clerk.mountUserAvatar,
3663
3663
  unmount: clerk.unmountUserAvatar,
3664
- updateProps: clerk.__unstable__updateProps,
3664
+ updateProps: clerk.__internal_updateProps,
3665
3665
  props,
3666
3666
  rootProps: rendererRootProps
3667
3667
  }
@@ -3682,7 +3682,7 @@ withClerk(
3682
3682
  component,
3683
3683
  mount: clerk.mountTaskChooseOrganization,
3684
3684
  unmount: clerk.unmountTaskChooseOrganization,
3685
- updateProps: clerk.__unstable__updateProps,
3685
+ updateProps: clerk.__internal_updateProps,
3686
3686
  props,
3687
3687
  rootProps: rendererRootProps
3688
3688
  }
@@ -3813,12 +3813,12 @@ function addClerkPrefix(str) {
3813
3813
  return `clerk.${str.replace(regex, "")}`;
3814
3814
  }
3815
3815
 
3816
- // ../shared/dist/runtime/versionSelector-DCF4KVYM.mjs
3817
- var versionSelector = (clerkJSVersion, packageVersion = "6.0.0-canary-core3.v20251203222607") => {
3816
+ // ../shared/dist/runtime/versionSelector-CSGB3nrK.mjs
3817
+ var versionSelector = (clerkJSVersion, packageVersion = "6.0.0-canary-core3.v20251204085311") => {
3818
3818
  if (clerkJSVersion) return clerkJSVersion;
3819
3819
  const prereleaseTag = getPrereleaseTag(packageVersion);
3820
3820
  if (prereleaseTag) {
3821
- if (prereleaseTag === "snapshot") return "6.0.0-canary-core3.v20251203222607";
3821
+ if (prereleaseTag === "snapshot") return "6.0.0-canary-core3.v20251204085311";
3822
3822
  return prereleaseTag;
3823
3823
  }
3824
3824
  return getMajorVersion(packageVersion);
@@ -3836,7 +3836,7 @@ function isClerkGlobalProperlyLoaded(prop) {
3836
3836
  if (typeof window === "undefined" || !window[prop]) return false;
3837
3837
  return !!window[prop];
3838
3838
  }
3839
- var isClerkUiProperlyLoaded = () => isClerkGlobalProperlyLoaded("__unstable_ClerkUiCtor");
3839
+ var isClerkUiProperlyLoaded = () => isClerkGlobalProperlyLoaded("__internal_ClerkUiCtor");
3840
3840
  var loadClerkUiScript = async (opts) => {
3841
3841
  var _a;
3842
3842
  const timeout = (_a = opts == null ? void 0 : opts.scriptLoadTimeout) != null ? _a : 15e3;
@@ -4510,7 +4510,7 @@ if (typeof globalThis.__BUILD_DISABLE_RHC__ === "undefined") {
4510
4510
  }
4511
4511
  var SDK_METADATA = {
4512
4512
  name: "@clerk/react",
4513
- version: "6.0.0-canary-core3.v20251203222607",
4513
+ version: "6.0.0-canary-core3.v20251204085311",
4514
4514
  environment: process.env.NODE_ENV
4515
4515
  };
4516
4516
  var _status;
@@ -4840,10 +4840,10 @@ var _IsomorphicClerk = class _IsomorphicClerk2 {
4840
4840
  this.__experimental_checkout = (...args) => {
4841
4841
  return this.loaded && this.clerkjs ? this.clerkjs.__experimental_checkout(...args) : __privateGet2(this, _stateProxy).checkoutSignal(...args);
4842
4842
  };
4843
- this.__unstable__updateProps = async (props) => {
4843
+ this.__internal_updateProps = async (props) => {
4844
4844
  const clerkjs = await __privateMethod2(this, _IsomorphicClerk_instances, waitForClerkJS_fn).call(this);
4845
- if (clerkjs && "__unstable__updateProps" in clerkjs) {
4846
- return clerkjs.__unstable__updateProps(props);
4845
+ if (clerkjs && "__internal_updateProps" in clerkjs) {
4846
+ return clerkjs.__internal_updateProps(props);
4847
4847
  }
4848
4848
  };
4849
4849
  this.setActive = (params) => {
@@ -5691,10 +5691,10 @@ var _IsomorphicClerk = class _IsomorphicClerk2 {
5691
5691
  domain: this.domain,
5692
5692
  nonce: this.options.nonce
5693
5693
  });
5694
- if (!global.__unstable_ClerkUiCtor) {
5694
+ if (!global.__internal_ClerkUiCtor) {
5695
5695
  throw new Error("Failed to download latest Clerk UI. Contact support@clerk.com.");
5696
5696
  }
5697
- return global.__unstable_ClerkUiCtor;
5697
+ return global.__internal_ClerkUiCtor;
5698
5698
  }
5699
5699
  get version() {
5700
5700
  var _a;
@@ -5735,9 +5735,9 @@ var _IsomorphicClerk = class _IsomorphicClerk2 {
5735
5735
  return void 0;
5736
5736
  }
5737
5737
  }
5738
- get __unstable__environment() {
5738
+ get __internal_environment() {
5739
5739
  if (this.clerkjs) {
5740
- return this.clerkjs.__unstable__environment;
5740
+ return this.clerkjs.__internal_environment;
5741
5741
  } else {
5742
5742
  return void 0;
5743
5743
  }
@@ -5760,9 +5760,9 @@ var _IsomorphicClerk = class _IsomorphicClerk2 {
5760
5760
  var _a;
5761
5761
  return (_a = this.clerkjs) == null ? void 0 : _a.apiKeys;
5762
5762
  }
5763
- __unstable__setEnvironment(...args) {
5764
- if (this.clerkjs && "__unstable__setEnvironment" in this.clerkjs) {
5765
- this.clerkjs.__unstable__setEnvironment(args);
5763
+ __internal_setEnvironment(...args) {
5764
+ if (this.clerkjs && "__internal_setEnvironment" in this.clerkjs) {
5765
+ this.clerkjs.__internal_setEnvironment(args);
5766
5766
  } else {
5767
5767
  return void 0;
5768
5768
  }
@@ -5857,10 +5857,10 @@ var useLoadedIsomorphicClerk = (options) => {
5857
5857
  const isomorphicClerkRef = React7.useRef(IsomorphicClerk.getOrCreateInstance(options));
5858
5858
  const [clerkStatus, setClerkStatus] = React7.useState(isomorphicClerkRef.current.status);
5859
5859
  React7.useEffect(() => {
5860
- void isomorphicClerkRef.current.__unstable__updateProps({ appearance: options.appearance });
5860
+ void isomorphicClerkRef.current.__internal_updateProps({ appearance: options.appearance });
5861
5861
  }, [options.appearance]);
5862
5862
  React7.useEffect(() => {
5863
- void isomorphicClerkRef.current.__unstable__updateProps({ options });
5863
+ void isomorphicClerkRef.current.__internal_updateProps({ options });
5864
5864
  }, [options.localization]);
5865
5865
  React7.useEffect(() => {
5866
5866
  isomorphicClerkRef.current.on("status", setClerkStatus);
@@ -5915,5 +5915,5 @@ function ClerkProvider2(props) {
5915
5915
  var GoogleOneTap2 = () => null;
5916
5916
 
5917
5917
  export { APIKeys, AuthenticateWithRedirectCallback, ClerkDegraded, ClerkFailed, ClerkLoaded, ClerkLoading, ClerkProvider2 as ClerkProvider, CreateOrganization, GoogleOneTap2 as GoogleOneTap, OrganizationList, OrganizationProfile, OrganizationSwitcher, PricingTable, Protect, RedirectToCreateOrganization, RedirectToOrganizationProfile, RedirectToSignIn, RedirectToSignUp, RedirectToUserProfile, SignIn, SignInButton, SignInWithMetamaskButton, SignOutButton, SignUp, SignUpButton, SignedIn, SignedOut, UserAvatar, UserButton, UserProfile, Waitlist, setErrorThrowerOptions, useAuth, useClerk, useEmailLink, useOrganization, useOrganizationList, useReverification, useSession, useSessionList, useSignIn, useSignUp, useUser };
5918
- //# sourceMappingURL=chunk-I4S4LPUK.js.map
5919
- //# sourceMappingURL=chunk-I4S4LPUK.js.map
5918
+ //# sourceMappingURL=chunk-Y56DU6XD.js.map
5919
+ //# sourceMappingURL=chunk-Y56DU6XD.js.map