FRE-600: Fix code review blockers

- Consolidated duplicate UndoManagers to single instance
- Fixed connection promise to only resolve on 'connected' status
- Fixed WebSocketProvider import (WebsocketProvider)
- Added proper doc.destroy() cleanup
- Renamed isPresenceInitialized property to avoid conflict

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-04-25 00:08:01 -04:00
parent 65b552bb08
commit 7c684a42cc
48450 changed files with 5679671 additions and 383 deletions

View File

@@ -0,0 +1,9 @@
import { pd as PhoneCodeChannelData } from "./index-B4_BYgBX.mjs";
import "./moduleManager-BsmFyRrH.mjs";
//#region src/alternativePhoneCode.d.ts
declare const ALTERNATIVE_PHONE_CODE_PROVIDERS: PhoneCodeChannelData[];
declare const getAlternativePhoneCodeProviderData: (channel?: string) => PhoneCodeChannelData | null;
//#endregion
export { ALTERNATIVE_PHONE_CODE_PROVIDERS, getAlternativePhoneCodeProviderData };
//# sourceMappingURL=alternativePhoneCode.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"alternativePhoneCode.d.mts","names":[],"sources":["../../src/alternativePhoneCode.ts"],"sourcesContent":[],"mappings":";;;;cAEa,kCAAkC;cAOlC,2DAA0D"}

View File

@@ -0,0 +1,9 @@
import { pd as PhoneCodeChannelData } from "./index-gwPUTb24.js";
import "./moduleManager-WB15hU3T.js";
//#region src/alternativePhoneCode.d.ts
declare const ALTERNATIVE_PHONE_CODE_PROVIDERS: PhoneCodeChannelData[];
declare const getAlternativePhoneCodeProviderData: (channel?: string) => PhoneCodeChannelData | null;
//#endregion
export { ALTERNATIVE_PHONE_CODE_PROVIDERS, getAlternativePhoneCodeProviderData };
//# sourceMappingURL=alternativePhoneCode.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"alternativePhoneCode.d.ts","names":[],"sources":["../../src/alternativePhoneCode.ts"],"sourcesContent":[],"mappings":";;;;cAEa,kCAAkC;cAOlC,2DAA0D"}

View File

@@ -0,0 +1,15 @@
//#region src/alternativePhoneCode.ts
const ALTERNATIVE_PHONE_CODE_PROVIDERS = [{
channel: "whatsapp",
name: "WhatsApp"
}];
const getAlternativePhoneCodeProviderData = (channel) => {
if (!channel) return null;
return ALTERNATIVE_PHONE_CODE_PROVIDERS.find((p) => p.channel === channel) || null;
};
//#endregion
exports.ALTERNATIVE_PHONE_CODE_PROVIDERS = ALTERNATIVE_PHONE_CODE_PROVIDERS;
exports.getAlternativePhoneCodeProviderData = getAlternativePhoneCodeProviderData;
//# sourceMappingURL=alternativePhoneCode.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"alternativePhoneCode.js","names":["ALTERNATIVE_PHONE_CODE_PROVIDERS: PhoneCodeChannelData[]"],"sources":["../../src/alternativePhoneCode.ts"],"sourcesContent":["import type { PhoneCodeChannelData } from './types';\n\nexport const ALTERNATIVE_PHONE_CODE_PROVIDERS: PhoneCodeChannelData[] = [\n {\n channel: 'whatsapp',\n name: 'WhatsApp',\n },\n];\n\nexport const getAlternativePhoneCodeProviderData = (channel?: string): PhoneCodeChannelData | null => {\n if (!channel) {\n return null;\n }\n return ALTERNATIVE_PHONE_CODE_PROVIDERS.find(p => p.channel === channel) || null;\n};\n"],"mappings":";;AAEA,MAAaA,mCAA2D,CACtE;CACE,SAAS;CACT,MAAM;CACP,CACF;AAED,MAAa,uCAAuC,YAAkD;AACpG,KAAI,CAAC,QACH,QAAO;AAET,QAAO,iCAAiC,MAAK,MAAK,EAAE,YAAY,QAAQ,IAAI"}

View File

@@ -0,0 +1,13 @@
//#region src/alternativePhoneCode.ts
const ALTERNATIVE_PHONE_CODE_PROVIDERS = [{
channel: "whatsapp",
name: "WhatsApp"
}];
const getAlternativePhoneCodeProviderData = (channel) => {
if (!channel) return null;
return ALTERNATIVE_PHONE_CODE_PROVIDERS.find((p) => p.channel === channel) || null;
};
//#endregion
export { ALTERNATIVE_PHONE_CODE_PROVIDERS, getAlternativePhoneCodeProviderData };
//# sourceMappingURL=alternativePhoneCode.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"alternativePhoneCode.mjs","names":["ALTERNATIVE_PHONE_CODE_PROVIDERS: PhoneCodeChannelData[]"],"sources":["../../src/alternativePhoneCode.ts"],"sourcesContent":["import type { PhoneCodeChannelData } from './types';\n\nexport const ALTERNATIVE_PHONE_CODE_PROVIDERS: PhoneCodeChannelData[] = [\n {\n channel: 'whatsapp',\n name: 'WhatsApp',\n },\n];\n\nexport const getAlternativePhoneCodeProviderData = (channel?: string): PhoneCodeChannelData | null => {\n if (!channel) {\n return null;\n }\n return ALTERNATIVE_PHONE_CODE_PROVIDERS.find(p => p.channel === channel) || null;\n};\n"],"mappings":";AAEA,MAAaA,mCAA2D,CACtE;CACE,SAAS;CACT,MAAM;CACP,CACF;AAED,MAAa,uCAAuC,YAAkD;AACpG,KAAI,CAAC,QACH,QAAO;AAET,QAAO,iCAAiC,MAAK,MAAK,EAAE,YAAY,QAAQ,IAAI"}

View File

@@ -0,0 +1,11 @@
//#region src/apiUrlFromPublishableKey.d.ts
/**
* Get the correct API url based on the publishable key.
*
* @param publishableKey - The publishable key to parse.
* @returns One of Clerk's API URLs.
*/
declare const apiUrlFromPublishableKey: (publishableKey: string) => "https://api.clerk.com" | "https://api.lclclerk.com" | "https://api.clerkstage.dev";
//#endregion
export { apiUrlFromPublishableKey };
//# sourceMappingURL=apiUrlFromPublishableKey.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"apiUrlFromPublishableKey.d.mts","names":[],"sources":["../../src/apiUrlFromPublishableKey.ts"],"sourcesContent":[],"mappings":";;AAgBA;;;;;cAAa"}

View File

@@ -0,0 +1,11 @@
//#region src/apiUrlFromPublishableKey.d.ts
/**
* Get the correct API url based on the publishable key.
*
* @param publishableKey - The publishable key to parse.
* @returns One of Clerk's API URLs.
*/
declare const apiUrlFromPublishableKey: (publishableKey: string) => "https://api.clerk.com" | "https://api.lclclerk.com" | "https://api.clerkstage.dev";
//#endregion
export { apiUrlFromPublishableKey };
//# sourceMappingURL=apiUrlFromPublishableKey.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"apiUrlFromPublishableKey.d.ts","names":[],"sources":["../../src/apiUrlFromPublishableKey.ts"],"sourcesContent":[],"mappings":";;AAgBA;;;;;cAAa"}

View File

@@ -0,0 +1,23 @@
const require_constants = require('./constants-WYhx_umW.js');
require('./isomorphicAtob-Hkpnx2p8.js');
require('./isomorphicBtoa-_pSA92Q9.js');
const require_keys = require('./keys-BI9hmfja.js');
//#region src/apiUrlFromPublishableKey.ts
/**
* Get the correct API url based on the publishable key.
*
* @param publishableKey - The publishable key to parse.
* @returns One of Clerk's API URLs.
*/
const apiUrlFromPublishableKey = (publishableKey) => {
const frontendApi = require_keys.parsePublishableKey(publishableKey)?.frontendApi;
if (frontendApi?.startsWith("clerk.") && require_constants.LEGACY_DEV_INSTANCE_SUFFIXES.some((suffix) => frontendApi?.endsWith(suffix))) return require_constants.PROD_API_URL;
if (require_constants.LOCAL_ENV_SUFFIXES.some((suffix) => frontendApi?.endsWith(suffix))) return require_constants.LOCAL_API_URL;
if (require_constants.STAGING_ENV_SUFFIXES.some((suffix) => frontendApi?.endsWith(suffix))) return require_constants.STAGING_API_URL;
return require_constants.PROD_API_URL;
};
//#endregion
exports.apiUrlFromPublishableKey = apiUrlFromPublishableKey;
//# sourceMappingURL=apiUrlFromPublishableKey.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"apiUrlFromPublishableKey.js","names":["parsePublishableKey","LEGACY_DEV_INSTANCE_SUFFIXES","PROD_API_URL","LOCAL_ENV_SUFFIXES","LOCAL_API_URL","STAGING_ENV_SUFFIXES","STAGING_API_URL"],"sources":["../../src/apiUrlFromPublishableKey.ts"],"sourcesContent":["import {\n LEGACY_DEV_INSTANCE_SUFFIXES,\n LOCAL_API_URL,\n LOCAL_ENV_SUFFIXES,\n PROD_API_URL,\n STAGING_API_URL,\n STAGING_ENV_SUFFIXES,\n} from './constants';\nimport { parsePublishableKey } from './keys';\n\n/**\n * Get the correct API url based on the publishable key.\n *\n * @param publishableKey - The publishable key to parse.\n * @returns One of Clerk's API URLs.\n */\nexport const apiUrlFromPublishableKey = (publishableKey: string) => {\n const frontendApi = parsePublishableKey(publishableKey)?.frontendApi;\n\n if (frontendApi?.startsWith('clerk.') && LEGACY_DEV_INSTANCE_SUFFIXES.some(suffix => frontendApi?.endsWith(suffix))) {\n return PROD_API_URL;\n }\n\n if (LOCAL_ENV_SUFFIXES.some(suffix => frontendApi?.endsWith(suffix))) {\n return LOCAL_API_URL;\n }\n if (STAGING_ENV_SUFFIXES.some(suffix => frontendApi?.endsWith(suffix))) {\n return STAGING_API_URL;\n }\n return PROD_API_URL;\n};\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAa,4BAA4B,mBAA2B;CAClE,MAAM,cAAcA,iCAAoB,eAAe,EAAE;AAEzD,KAAI,aAAa,WAAW,SAAS,IAAIC,+CAA6B,MAAK,WAAU,aAAa,SAAS,OAAO,CAAC,CACjH,QAAOC;AAGT,KAAIC,qCAAmB,MAAK,WAAU,aAAa,SAAS,OAAO,CAAC,CAClE,QAAOC;AAET,KAAIC,uCAAqB,MAAK,WAAU,aAAa,SAAS,OAAO,CAAC,CACpE,QAAOC;AAET,QAAOJ"}

View File

@@ -0,0 +1,23 @@
import { a as LOCAL_API_URL, c as PROD_API_URL, d as STAGING_ENV_SUFFIXES, i as LEGACY_DEV_INSTANCE_SUFFIXES, o as LOCAL_ENV_SUFFIXES, u as STAGING_API_URL } from "./constants-Bta24VLk.mjs";
import "./isomorphicAtob-CoF80qYz.mjs";
import "./isomorphicBtoa-DWmLcIHi.mjs";
import { u as parsePublishableKey } from "./keys-DuxzP8MU.mjs";
//#region src/apiUrlFromPublishableKey.ts
/**
* Get the correct API url based on the publishable key.
*
* @param publishableKey - The publishable key to parse.
* @returns One of Clerk's API URLs.
*/
const apiUrlFromPublishableKey = (publishableKey) => {
const frontendApi = parsePublishableKey(publishableKey)?.frontendApi;
if (frontendApi?.startsWith("clerk.") && LEGACY_DEV_INSTANCE_SUFFIXES.some((suffix) => frontendApi?.endsWith(suffix))) return PROD_API_URL;
if (LOCAL_ENV_SUFFIXES.some((suffix) => frontendApi?.endsWith(suffix))) return LOCAL_API_URL;
if (STAGING_ENV_SUFFIXES.some((suffix) => frontendApi?.endsWith(suffix))) return STAGING_API_URL;
return PROD_API_URL;
};
//#endregion
export { apiUrlFromPublishableKey };
//# sourceMappingURL=apiUrlFromPublishableKey.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"apiUrlFromPublishableKey.mjs","names":[],"sources":["../../src/apiUrlFromPublishableKey.ts"],"sourcesContent":["import {\n LEGACY_DEV_INSTANCE_SUFFIXES,\n LOCAL_API_URL,\n LOCAL_ENV_SUFFIXES,\n PROD_API_URL,\n STAGING_API_URL,\n STAGING_ENV_SUFFIXES,\n} from './constants';\nimport { parsePublishableKey } from './keys';\n\n/**\n * Get the correct API url based on the publishable key.\n *\n * @param publishableKey - The publishable key to parse.\n * @returns One of Clerk's API URLs.\n */\nexport const apiUrlFromPublishableKey = (publishableKey: string) => {\n const frontendApi = parsePublishableKey(publishableKey)?.frontendApi;\n\n if (frontendApi?.startsWith('clerk.') && LEGACY_DEV_INSTANCE_SUFFIXES.some(suffix => frontendApi?.endsWith(suffix))) {\n return PROD_API_URL;\n }\n\n if (LOCAL_ENV_SUFFIXES.some(suffix => frontendApi?.endsWith(suffix))) {\n return LOCAL_API_URL;\n }\n if (STAGING_ENV_SUFFIXES.some(suffix => frontendApi?.endsWith(suffix))) {\n return STAGING_API_URL;\n }\n return PROD_API_URL;\n};\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAa,4BAA4B,mBAA2B;CAClE,MAAM,cAAc,oBAAoB,eAAe,EAAE;AAEzD,KAAI,aAAa,WAAW,SAAS,IAAI,6BAA6B,MAAK,WAAU,aAAa,SAAS,OAAO,CAAC,CACjH,QAAO;AAGT,KAAI,mBAAmB,MAAK,WAAU,aAAa,SAAS,OAAO,CAAC,CAClE,QAAO;AAET,KAAI,qBAAqB,MAAK,WAAU,aAAa,SAAS,OAAO,CAAC,CACpE,QAAO;AAET,QAAO"}

View File

@@ -0,0 +1,269 @@
//#region src/authorization.ts
const TYPES_TO_OBJECTS = {
strict_mfa: {
afterMinutes: 10,
level: "multi_factor"
},
strict: {
afterMinutes: 10,
level: "second_factor"
},
moderate: {
afterMinutes: 60,
level: "second_factor"
},
lax: {
afterMinutes: 1440,
level: "second_factor"
}
};
const ALLOWED_LEVELS = new Set([
"first_factor",
"second_factor",
"multi_factor"
]);
const ALLOWED_TYPES = new Set([
"strict_mfa",
"strict",
"moderate",
"lax"
]);
const ORG_SCOPES = new Set([
"o",
"org",
"organization"
]);
const USER_SCOPES = new Set(["u", "user"]);
const isValidMaxAge = (maxAge) => typeof maxAge === "number" && maxAge > 0;
const isValidLevel = (level) => ALLOWED_LEVELS.has(level);
const isValidVerificationType = (type) => ALLOWED_TYPES.has(type);
const isValidFactorAge = (x) => typeof x === "number" && Number.isFinite(x) && (x === -1 || x >= 0);
const prefixWithOrg = (value) => value.replace(/^(org:)*/, "org:");
/**
* Checks if a user has the required organization-level authorization.
* If both role and permission are provided, both must match (AND).
*/
const checkOrgAuthorization = (params, options) => {
const { orgId, orgRole, orgPermissions } = options;
const roleAsked = params.role !== void 0;
const permissionAsked = params.permission !== void 0;
if (!roleAsked && !permissionAsked) return "skip";
if (roleAsked && typeof params.role !== "string") return "fail";
if (permissionAsked && typeof params.permission !== "string") return "fail";
if (!orgId) return "fail";
if (roleAsked) {
if (typeof orgRole !== "string" || !orgRole) return "fail";
if (prefixWithOrg(orgRole) !== prefixWithOrg(params.role)) return "fail";
}
if (permissionAsked) {
if (!Array.isArray(orgPermissions)) return "fail";
if (!orgPermissions.includes(prefixWithOrg(params.permission))) return "fail";
}
return "pass";
};
const checkForFeatureOrPlan = (claim, featureOrPlan) => {
const { org: orgFeatures, user: userFeatures } = splitByScope(claim);
const [rawScope, rawId] = featureOrPlan.split(":");
const hasExplicitScope = rawId !== void 0;
const scope = rawScope;
const id = rawId || rawScope;
if (hasExplicitScope && !ORG_SCOPES.has(scope) && !USER_SCOPES.has(scope)) throw new Error(`Invalid scope: ${scope}`);
if (hasExplicitScope) {
if (ORG_SCOPES.has(scope)) return orgFeatures.includes(id);
if (USER_SCOPES.has(scope)) return userFeatures.includes(id);
}
return [...orgFeatures, ...userFeatures].includes(id);
};
/**
* Checks if a user is entitled to the requested feature or plan.
* If both feature and plan are provided, both must match (AND).
*/
const checkBillingAuthorization = (params, options) => {
const { features, plans } = options;
const featureAsked = params.feature !== void 0;
const planAsked = params.plan !== void 0;
if (!featureAsked && !planAsked) return "skip";
if (featureAsked && typeof params.feature !== "string") return "fail";
if (planAsked && typeof params.plan !== "string") return "fail";
if (featureAsked) {
if (typeof features !== "string" || !features) return "fail";
try {
if (!checkForFeatureOrPlan(features, params.feature)) return "fail";
} catch {
return "fail";
}
}
if (planAsked) {
if (typeof plans !== "string" || !plans) return "fail";
try {
if (!checkForFeatureOrPlan(plans, params.plan)) return "fail";
} catch {
return "fail";
}
}
return "pass";
};
const splitByScope = (fea) => {
const org = [];
const user = [];
if (!fea) return {
org,
user
};
const parts = fea.split(",");
for (let i = 0; i < parts.length; i++) {
const part = parts[i].trim();
const colonIndex = part.indexOf(":");
if (colonIndex === -1) throw new Error(`Invalid claim element (missing colon): ${part}`);
const scope = part.slice(0, colonIndex);
const value = part.slice(colonIndex + 1);
if (scope === "o") org.push(value);
else if (scope === "u") user.push(value);
else if (scope === "ou" || scope === "uo") {
org.push(value);
user.push(value);
}
}
return {
org,
user
};
};
const validateReverificationConfig = (config) => {
if (!config) return false;
const convertConfigToObject = (config$1) => {
if (typeof config$1 === "string") return TYPES_TO_OBJECTS[config$1];
return config$1;
};
const isValidStringValue = typeof config === "string" && isValidVerificationType(config);
const isValidObjectValue = typeof config === "object" && isValidLevel(config.level) && isValidMaxAge(config.afterMinutes);
if (isValidStringValue || isValidObjectValue) return convertConfigToObject.bind(null, config);
return false;
};
/**
* Evaluates if the user meets re-verification authentication requirements.
* Handles different verification levels (first factor, second factor, multi-factor).
*/
const checkReverificationAuthorization = (params, { factorVerificationAge }) => {
if (params.reverification === void 0) return "skip";
if (!factorVerificationAge) return "fail";
if (!Array.isArray(factorVerificationAge) || factorVerificationAge.length !== 2 || !isValidFactorAge(factorVerificationAge[0]) || !isValidFactorAge(factorVerificationAge[1])) return "fail";
const getConfig = validateReverificationConfig(params.reverification);
if (!getConfig) return "fail";
const { level, afterMinutes } = getConfig();
const [factor1Age, factor2Age] = factorVerificationAge;
if (factor1Age === -1 && factor2Age === -1) return "fail";
const factor1FreshEnough = factor1Age !== -1 && afterMinutes > factor1Age;
const factor2FreshEnough = factor2Age !== -1 && afterMinutes > factor2Age;
switch (level) {
case "first_factor": return factor1FreshEnough ? "pass" : "fail";
case "second_factor":
if (factor2Age === -1) return factor1FreshEnough ? "pass" : "fail";
if (factor1Age === -1) return factor2FreshEnough ? "pass" : "fail";
return factor2FreshEnough ? "pass" : "fail";
case "multi_factor":
if (factor2Age === -1) return factor1FreshEnough ? "pass" : "fail";
if (factor1Age === -1) return "fail";
return factor1FreshEnough && factor2FreshEnough ? "pass" : "fail";
}
};
const combine = (results) => results.some((r) => r === "pass") && results.every((r) => r === "pass" || r === "skip");
/**
* Creates a function for comprehensive user authorization checks.
* Combines organization, billing, and reverification checks. The returned function
* authorizes only when every requested dimension passes; any requested dimension
* that cannot be satisfied (including missing or malformed session data) denies
* the request. Fails if `userId` is missing.
*/
const createCheckAuthorization = (options) => {
return (params) => {
if (!options.userId) return false;
return combine([
checkOrgAuthorization(params, options),
checkBillingAuthorization(params, options),
checkReverificationAuthorization(params, options)
]);
};
};
/**
* Shared utility function that centralizes auth state resolution logic,
* preventing duplication across different packages.
*
* @internal
*/
const resolveAuthState = ({ authObject: { sessionId, sessionStatus, userId, actor, orgId, orgRole, orgSlug, signOut, getToken, has, sessionClaims }, options: { treatPendingAsSignedOut = true } }) => {
if (sessionId === void 0 && userId === void 0) return {
actor: void 0,
getToken,
has: () => false,
isLoaded: false,
isSignedIn: void 0,
orgId: void 0,
orgRole: void 0,
orgSlug: void 0,
sessionClaims: void 0,
sessionId,
signOut,
userId
};
if (sessionId === null && userId === null) return {
actor: null,
getToken,
has: () => false,
isLoaded: true,
isSignedIn: false,
orgId: null,
orgRole: null,
orgSlug: null,
sessionClaims: null,
sessionId,
signOut,
userId
};
if (treatPendingAsSignedOut && sessionStatus === "pending") return {
actor: null,
getToken,
has: () => false,
isLoaded: true,
isSignedIn: false,
orgId: null,
orgRole: null,
orgSlug: null,
sessionClaims: null,
sessionId: null,
signOut,
userId: null
};
if (!!sessionId && !!sessionClaims && !!userId && !!orgId && !!orgRole) return {
actor: actor || null,
getToken,
has,
isLoaded: true,
isSignedIn: true,
orgId,
orgRole,
orgSlug: orgSlug || null,
sessionClaims,
sessionId,
signOut,
userId
};
if (!!sessionId && !!sessionClaims && !!userId && !orgId) return {
actor: actor || null,
getToken,
has,
isLoaded: true,
isSignedIn: true,
orgId: null,
orgRole: null,
orgSlug: null,
sessionClaims,
sessionId,
signOut,
userId
};
};
//#endregion
export { validateReverificationConfig as i, resolveAuthState as n, splitByScope as r, createCheckAuthorization as t };
//# sourceMappingURL=authorization-Bayl2soX.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,293 @@
//#region src/authorization.ts
const TYPES_TO_OBJECTS = {
strict_mfa: {
afterMinutes: 10,
level: "multi_factor"
},
strict: {
afterMinutes: 10,
level: "second_factor"
},
moderate: {
afterMinutes: 60,
level: "second_factor"
},
lax: {
afterMinutes: 1440,
level: "second_factor"
}
};
const ALLOWED_LEVELS = new Set([
"first_factor",
"second_factor",
"multi_factor"
]);
const ALLOWED_TYPES = new Set([
"strict_mfa",
"strict",
"moderate",
"lax"
]);
const ORG_SCOPES = new Set([
"o",
"org",
"organization"
]);
const USER_SCOPES = new Set(["u", "user"]);
const isValidMaxAge = (maxAge) => typeof maxAge === "number" && maxAge > 0;
const isValidLevel = (level) => ALLOWED_LEVELS.has(level);
const isValidVerificationType = (type) => ALLOWED_TYPES.has(type);
const isValidFactorAge = (x) => typeof x === "number" && Number.isFinite(x) && (x === -1 || x >= 0);
const prefixWithOrg = (value) => value.replace(/^(org:)*/, "org:");
/**
* Checks if a user has the required organization-level authorization.
* If both role and permission are provided, both must match (AND).
*/
const checkOrgAuthorization = (params, options) => {
const { orgId, orgRole, orgPermissions } = options;
const roleAsked = params.role !== void 0;
const permissionAsked = params.permission !== void 0;
if (!roleAsked && !permissionAsked) return "skip";
if (roleAsked && typeof params.role !== "string") return "fail";
if (permissionAsked && typeof params.permission !== "string") return "fail";
if (!orgId) return "fail";
if (roleAsked) {
if (typeof orgRole !== "string" || !orgRole) return "fail";
if (prefixWithOrg(orgRole) !== prefixWithOrg(params.role)) return "fail";
}
if (permissionAsked) {
if (!Array.isArray(orgPermissions)) return "fail";
if (!orgPermissions.includes(prefixWithOrg(params.permission))) return "fail";
}
return "pass";
};
const checkForFeatureOrPlan = (claim, featureOrPlan) => {
const { org: orgFeatures, user: userFeatures } = splitByScope(claim);
const [rawScope, rawId] = featureOrPlan.split(":");
const hasExplicitScope = rawId !== void 0;
const scope = rawScope;
const id = rawId || rawScope;
if (hasExplicitScope && !ORG_SCOPES.has(scope) && !USER_SCOPES.has(scope)) throw new Error(`Invalid scope: ${scope}`);
if (hasExplicitScope) {
if (ORG_SCOPES.has(scope)) return orgFeatures.includes(id);
if (USER_SCOPES.has(scope)) return userFeatures.includes(id);
}
return [...orgFeatures, ...userFeatures].includes(id);
};
/**
* Checks if a user is entitled to the requested feature or plan.
* If both feature and plan are provided, both must match (AND).
*/
const checkBillingAuthorization = (params, options) => {
const { features, plans } = options;
const featureAsked = params.feature !== void 0;
const planAsked = params.plan !== void 0;
if (!featureAsked && !planAsked) return "skip";
if (featureAsked && typeof params.feature !== "string") return "fail";
if (planAsked && typeof params.plan !== "string") return "fail";
if (featureAsked) {
if (typeof features !== "string" || !features) return "fail";
try {
if (!checkForFeatureOrPlan(features, params.feature)) return "fail";
} catch {
return "fail";
}
}
if (planAsked) {
if (typeof plans !== "string" || !plans) return "fail";
try {
if (!checkForFeatureOrPlan(plans, params.plan)) return "fail";
} catch {
return "fail";
}
}
return "pass";
};
const splitByScope = (fea) => {
const org = [];
const user = [];
if (!fea) return {
org,
user
};
const parts = fea.split(",");
for (let i = 0; i < parts.length; i++) {
const part = parts[i].trim();
const colonIndex = part.indexOf(":");
if (colonIndex === -1) throw new Error(`Invalid claim element (missing colon): ${part}`);
const scope = part.slice(0, colonIndex);
const value = part.slice(colonIndex + 1);
if (scope === "o") org.push(value);
else if (scope === "u") user.push(value);
else if (scope === "ou" || scope === "uo") {
org.push(value);
user.push(value);
}
}
return {
org,
user
};
};
const validateReverificationConfig = (config) => {
if (!config) return false;
const convertConfigToObject = (config$1) => {
if (typeof config$1 === "string") return TYPES_TO_OBJECTS[config$1];
return config$1;
};
const isValidStringValue = typeof config === "string" && isValidVerificationType(config);
const isValidObjectValue = typeof config === "object" && isValidLevel(config.level) && isValidMaxAge(config.afterMinutes);
if (isValidStringValue || isValidObjectValue) return convertConfigToObject.bind(null, config);
return false;
};
/**
* Evaluates if the user meets re-verification authentication requirements.
* Handles different verification levels (first factor, second factor, multi-factor).
*/
const checkReverificationAuthorization = (params, { factorVerificationAge }) => {
if (params.reverification === void 0) return "skip";
if (!factorVerificationAge) return "fail";
if (!Array.isArray(factorVerificationAge) || factorVerificationAge.length !== 2 || !isValidFactorAge(factorVerificationAge[0]) || !isValidFactorAge(factorVerificationAge[1])) return "fail";
const getConfig = validateReverificationConfig(params.reverification);
if (!getConfig) return "fail";
const { level, afterMinutes } = getConfig();
const [factor1Age, factor2Age] = factorVerificationAge;
if (factor1Age === -1 && factor2Age === -1) return "fail";
const factor1FreshEnough = factor1Age !== -1 && afterMinutes > factor1Age;
const factor2FreshEnough = factor2Age !== -1 && afterMinutes > factor2Age;
switch (level) {
case "first_factor": return factor1FreshEnough ? "pass" : "fail";
case "second_factor":
if (factor2Age === -1) return factor1FreshEnough ? "pass" : "fail";
if (factor1Age === -1) return factor2FreshEnough ? "pass" : "fail";
return factor2FreshEnough ? "pass" : "fail";
case "multi_factor":
if (factor2Age === -1) return factor1FreshEnough ? "pass" : "fail";
if (factor1Age === -1) return "fail";
return factor1FreshEnough && factor2FreshEnough ? "pass" : "fail";
}
};
const combine = (results) => results.some((r) => r === "pass") && results.every((r) => r === "pass" || r === "skip");
/**
* Creates a function for comprehensive user authorization checks.
* Combines organization, billing, and reverification checks. The returned function
* authorizes only when every requested dimension passes; any requested dimension
* that cannot be satisfied (including missing or malformed session data) denies
* the request. Fails if `userId` is missing.
*/
const createCheckAuthorization = (options) => {
return (params) => {
if (!options.userId) return false;
return combine([
checkOrgAuthorization(params, options),
checkBillingAuthorization(params, options),
checkReverificationAuthorization(params, options)
]);
};
};
/**
* Shared utility function that centralizes auth state resolution logic,
* preventing duplication across different packages.
*
* @internal
*/
const resolveAuthState = ({ authObject: { sessionId, sessionStatus, userId, actor, orgId, orgRole, orgSlug, signOut, getToken, has, sessionClaims }, options: { treatPendingAsSignedOut = true } }) => {
if (sessionId === void 0 && userId === void 0) return {
actor: void 0,
getToken,
has: () => false,
isLoaded: false,
isSignedIn: void 0,
orgId: void 0,
orgRole: void 0,
orgSlug: void 0,
sessionClaims: void 0,
sessionId,
signOut,
userId
};
if (sessionId === null && userId === null) return {
actor: null,
getToken,
has: () => false,
isLoaded: true,
isSignedIn: false,
orgId: null,
orgRole: null,
orgSlug: null,
sessionClaims: null,
sessionId,
signOut,
userId
};
if (treatPendingAsSignedOut && sessionStatus === "pending") return {
actor: null,
getToken,
has: () => false,
isLoaded: true,
isSignedIn: false,
orgId: null,
orgRole: null,
orgSlug: null,
sessionClaims: null,
sessionId: null,
signOut,
userId: null
};
if (!!sessionId && !!sessionClaims && !!userId && !!orgId && !!orgRole) return {
actor: actor || null,
getToken,
has,
isLoaded: true,
isSignedIn: true,
orgId,
orgRole,
orgSlug: orgSlug || null,
sessionClaims,
sessionId,
signOut,
userId
};
if (!!sessionId && !!sessionClaims && !!userId && !orgId) return {
actor: actor || null,
getToken,
has,
isLoaded: true,
isSignedIn: true,
orgId: null,
orgRole: null,
orgSlug: null,
sessionClaims,
sessionId,
signOut,
userId
};
};
//#endregion
Object.defineProperty(exports, 'createCheckAuthorization', {
enumerable: true,
get: function () {
return createCheckAuthorization;
}
});
Object.defineProperty(exports, 'resolveAuthState', {
enumerable: true,
get: function () {
return resolveAuthState;
}
});
Object.defineProperty(exports, 'splitByScope', {
enumerable: true,
get: function () {
return splitByScope;
}
});
Object.defineProperty(exports, 'validateReverificationConfig', {
enumerable: true,
get: function () {
return validateReverificationConfig;
}
});
//# sourceMappingURL=authorization-Dj1hHJtO.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,33 @@
//#region src/authorization-errors.ts
const REVERIFICATION_REASON = "reverification-error";
const reverificationError = (missingConfig) => ({ clerk_error: {
type: "forbidden",
reason: REVERIFICATION_REASON,
metadata: { reverification: missingConfig }
} });
const reverificationErrorResponse = (...args) => new Response(JSON.stringify(reverificationError(...args)), { status: 403 });
const isReverificationHint = (result) => {
return result && typeof result === "object" && "clerk_error" in result && result.clerk_error?.type === "forbidden" && result.clerk_error?.reason === REVERIFICATION_REASON;
};
//#endregion
Object.defineProperty(exports, 'isReverificationHint', {
enumerable: true,
get: function () {
return isReverificationHint;
}
});
Object.defineProperty(exports, 'reverificationError', {
enumerable: true,
get: function () {
return reverificationError;
}
});
Object.defineProperty(exports, 'reverificationErrorResponse', {
enumerable: true,
get: function () {
return reverificationErrorResponse;
}
});
//# sourceMappingURL=authorization-errors-B7aH39AU.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"authorization-errors-B7aH39AU.js","names":[],"sources":["../../src/authorization-errors.ts"],"sourcesContent":["import type { ReverificationConfig } from './types';\n\ntype ClerkError<T> = {\n clerk_error: T;\n};\n\nconst REVERIFICATION_REASON = 'reverification-error';\n\ntype ReverificationError<M extends { metadata?: any } = { metadata: unknown }> = ClerkError<\n {\n type: 'forbidden';\n reason: typeof REVERIFICATION_REASON;\n } & M\n>;\n\nconst reverificationError = <MC extends ReverificationConfig>(\n missingConfig?: MC,\n): ReverificationError<{\n metadata?: {\n reverification?: MC;\n };\n}> => ({\n clerk_error: {\n type: 'forbidden',\n reason: REVERIFICATION_REASON,\n metadata: {\n reverification: missingConfig,\n },\n },\n});\n\nconst reverificationErrorResponse = (...args: Parameters<typeof reverificationError>) =>\n new Response(JSON.stringify(reverificationError(...args)), {\n status: 403,\n });\n\nconst isReverificationHint = (result: any): result is ReturnType<typeof reverificationError> => {\n return (\n result &&\n typeof result === 'object' &&\n 'clerk_error' in result &&\n result.clerk_error?.type === 'forbidden' &&\n result.clerk_error?.reason === REVERIFICATION_REASON\n );\n};\n\nexport { isReverificationHint, reverificationError, reverificationErrorResponse };\n"],"mappings":";;AAMA,MAAM,wBAAwB;AAS9B,MAAM,uBACJ,mBAKK,EACL,aAAa;CACX,MAAM;CACN,QAAQ;CACR,UAAU,EACR,gBAAgB,eACjB;CACF,EACF;AAED,MAAM,+BAA+B,GAAG,SACtC,IAAI,SAAS,KAAK,UAAU,oBAAoB,GAAG,KAAK,CAAC,EAAE,EACzD,QAAQ,KACT,CAAC;AAEJ,MAAM,wBAAwB,WAAkE;AAC9F,QACE,UACA,OAAO,WAAW,YAClB,iBAAiB,UACjB,OAAO,aAAa,SAAS,eAC7B,OAAO,aAAa,WAAW"}

View File

@@ -0,0 +1,15 @@
//#region src/authorization-errors.ts
const REVERIFICATION_REASON = "reverification-error";
const reverificationError = (missingConfig) => ({ clerk_error: {
type: "forbidden",
reason: REVERIFICATION_REASON,
metadata: { reverification: missingConfig }
} });
const reverificationErrorResponse = (...args) => new Response(JSON.stringify(reverificationError(...args)), { status: 403 });
const isReverificationHint = (result) => {
return result && typeof result === "object" && "clerk_error" in result && result.clerk_error?.type === "forbidden" && result.clerk_error?.reason === REVERIFICATION_REASON;
};
//#endregion
export { reverificationError as n, reverificationErrorResponse as r, isReverificationHint as t };
//# sourceMappingURL=authorization-errors-CBHAr6Ld.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"authorization-errors-CBHAr6Ld.mjs","names":[],"sources":["../../src/authorization-errors.ts"],"sourcesContent":["import type { ReverificationConfig } from './types';\n\ntype ClerkError<T> = {\n clerk_error: T;\n};\n\nconst REVERIFICATION_REASON = 'reverification-error';\n\ntype ReverificationError<M extends { metadata?: any } = { metadata: unknown }> = ClerkError<\n {\n type: 'forbidden';\n reason: typeof REVERIFICATION_REASON;\n } & M\n>;\n\nconst reverificationError = <MC extends ReverificationConfig>(\n missingConfig?: MC,\n): ReverificationError<{\n metadata?: {\n reverification?: MC;\n };\n}> => ({\n clerk_error: {\n type: 'forbidden',\n reason: REVERIFICATION_REASON,\n metadata: {\n reverification: missingConfig,\n },\n },\n});\n\nconst reverificationErrorResponse = (...args: Parameters<typeof reverificationError>) =>\n new Response(JSON.stringify(reverificationError(...args)), {\n status: 403,\n });\n\nconst isReverificationHint = (result: any): result is ReturnType<typeof reverificationError> => {\n return (\n result &&\n typeof result === 'object' &&\n 'clerk_error' in result &&\n result.clerk_error?.type === 'forbidden' &&\n result.clerk_error?.reason === REVERIFICATION_REASON\n );\n};\n\nexport { isReverificationHint, reverificationError, reverificationErrorResponse };\n"],"mappings":";AAMA,MAAM,wBAAwB;AAS9B,MAAM,uBACJ,mBAKK,EACL,aAAa;CACX,MAAM;CACN,QAAQ;CACR,UAAU,EACR,gBAAgB,eACjB;CACF,EACF;AAED,MAAM,+BAA+B,GAAG,SACtC,IAAI,SAAS,KAAK,UAAU,oBAAoB,GAAG,KAAK,CAAC,EAAE,EACzD,QAAQ,KACT,CAAC;AAEJ,MAAM,wBAAwB,WAAkE;AAC9F,QACE,UACA,OAAO,WAAW,YAClB,iBAAiB,UACjB,OAAO,aAAa,SAAS,eAC7B,OAAO,aAAa,WAAW"}

View File

@@ -0,0 +1,26 @@
import { Hs as ReverificationConfig } from "./index-B4_BYgBX.mjs";
import "./moduleManager-BsmFyRrH.mjs";
//#region src/authorization-errors.d.ts
type ClerkError<T> = {
clerk_error: T;
};
declare const REVERIFICATION_REASON = "reverification-error";
type ReverificationError<M extends {
metadata?: any;
} = {
metadata: unknown;
}> = ClerkError<{
type: 'forbidden';
reason: typeof REVERIFICATION_REASON;
} & M>;
declare const reverificationError: <MC extends ReverificationConfig>(missingConfig?: MC) => ReverificationError<{
metadata?: {
reverification?: MC;
};
}>;
declare const reverificationErrorResponse: (...args: Parameters<typeof reverificationError>) => Response;
declare const isReverificationHint: (result: any) => result is ReturnType<typeof reverificationError>;
//#endregion
export { isReverificationHint, reverificationError, reverificationErrorResponse };
//# sourceMappingURL=authorization-errors.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"authorization-errors.d.mts","names":[],"sources":["../../src/authorization-errors.ts"],"sourcesContent":[],"mappings":";;;;KAEK;eACU;;AAHqC,cAM9C,qBAAA,GAHU,sBAAA;AAAA,KAKX,mBAFC,CAAA,UAAqB;EAEtB,QAAA,CAAA,EAAA,GAAA;CAGc,GAAA;EACb,QAAA,EAAA,OAAA;CAJ2E,CAAA,GAAA,UAAA,CAAA;EAAU,IAAA,EAAA,WAAA;EAOrF,MAAA,EAAA,OAJa,qBAkBjB;CAdsC,GAHlC,CAGkC,CAAA;cAAlC,mBACY,EAAA,CAAA,WADsB,oBACtB,CAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,GACf,mBADe,CAAA;EAGG,QAAA,CAAA,EAAA;IAFlB,cAAA,CAAA,EAEkB,EAFlB;EAAmB,CAAA;AAAA,CAAA,CAAA;cAchB,2BAA0D,EAAA,CAAA,GAAA,IAAA,EAAlB,UAAkB,CAAA,OAAA,mBAAA,CAAA,EAAA,GAAoB,QAApB;cAK1D,oBALwC,EAAA,CAAA,MAAA,EAAA,GAAA,EAAA,GAAA,MAAA,IAKQ,UALR,CAAA,OAK0B,mBAL1B,CAAA"}

View File

@@ -0,0 +1,26 @@
import { Hs as ReverificationConfig } from "./index-gwPUTb24.js";
import "./moduleManager-WB15hU3T.js";
//#region src/authorization-errors.d.ts
type ClerkError<T> = {
clerk_error: T;
};
declare const REVERIFICATION_REASON = "reverification-error";
type ReverificationError<M extends {
metadata?: any;
} = {
metadata: unknown;
}> = ClerkError<{
type: 'forbidden';
reason: typeof REVERIFICATION_REASON;
} & M>;
declare const reverificationError: <MC extends ReverificationConfig>(missingConfig?: MC) => ReverificationError<{
metadata?: {
reverification?: MC;
};
}>;
declare const reverificationErrorResponse: (...args: Parameters<typeof reverificationError>) => Response;
declare const isReverificationHint: (result: any) => result is ReturnType<typeof reverificationError>;
//#endregion
export { isReverificationHint, reverificationError, reverificationErrorResponse };
//# sourceMappingURL=authorization-errors.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"authorization-errors.d.ts","names":[],"sources":["../../src/authorization-errors.ts"],"sourcesContent":[],"mappings":";;;;KAEK;eACU;;AAHqC,cAM9C,qBAAA,GAHU,sBAAA;AAAA,KAKX,mBAFC,CAAA,UAAqB;EAEtB,QAAA,CAAA,EAAA,GAAA;CAGc,GAAA;EACb,QAAA,EAAA,OAAA;CAJ2E,CAAA,GAAA,UAAA,CAAA;EAAU,IAAA,EAAA,WAAA;EAOrF,MAAA,EAAA,OAJa,qBAkBjB;CAdsC,GAHlC,CAGkC,CAAA;cAAlC,mBACY,EAAA,CAAA,WADsB,oBACtB,CAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,GACf,mBADe,CAAA;EAGG,QAAA,CAAA,EAAA;IAFlB,cAAA,CAAA,EAEkB,EAFlB;EAAmB,CAAA;AAAA,CAAA,CAAA;cAchB,2BAA0D,EAAA,CAAA,GAAA,IAAA,EAAlB,UAAkB,CAAA,OAAA,mBAAA,CAAA,EAAA,GAAoB,QAApB;cAK1D,oBALwC,EAAA,CAAA,MAAA,EAAA,GAAA,EAAA,GAAA,MAAA,IAKQ,UALR,CAAA,OAK0B,mBAL1B,CAAA"}

View File

@@ -0,0 +1,5 @@
const require_authorization_errors = require('./authorization-errors-B7aH39AU.js');
exports.isReverificationHint = require_authorization_errors.isReverificationHint;
exports.reverificationError = require_authorization_errors.reverificationError;
exports.reverificationErrorResponse = require_authorization_errors.reverificationErrorResponse;

View File

@@ -0,0 +1,3 @@
import { n as reverificationError, r as reverificationErrorResponse, t as isReverificationHint } from "./authorization-errors-CBHAr6Ld.mjs";
export { isReverificationHint, reverificationError, reverificationErrorResponse };

View File

@@ -0,0 +1,73 @@
import { $a as SessionStatusClaim, Gs as SessionVerificationLevel, Hs as ReverificationConfig, Mo as GetToken, Po as PendingSessionOptions, Pt as SignOut, Qa as JwtPayload, Us as SessionVerificationAfterMinutes, g as UseAuthReturn, jo as CheckAuthorizationWithCustomPermissions, no as OrganizationCustomRoleKey, qa as ActClaim, to as OrganizationCustomPermissionKey } from "./index-B4_BYgBX.mjs";
import "./moduleManager-BsmFyRrH.mjs";
//#region src/authorization.d.ts
type AuthorizationOptions = {
userId: string | null | undefined;
orgId: string | null | undefined;
orgRole: string | null | undefined;
orgPermissions: string[] | null | undefined;
factorVerificationAge: [number, number] | null;
features: string | null | undefined;
plans: string | null | undefined;
};
declare const splitByScope: (fea: string | null | undefined) => {
org: string[];
user: string[];
};
declare const validateReverificationConfig: (config: ReverificationConfig | undefined | null) => false | (() => {
level: SessionVerificationLevel;
afterMinutes: SessionVerificationAfterMinutes;
});
/**
* Creates a function for comprehensive user authorization checks.
* Combines organization, billing, and reverification checks. The returned function
* authorizes only when every requested dimension passes; any requested dimension
* that cannot be satisfied (including missing or malformed session data) denies
* the request. Fails if `userId` is missing.
*/
declare const createCheckAuthorization: (options: AuthorizationOptions) => CheckAuthorizationWithCustomPermissions;
type AuthStateOptions = {
authObject: {
userId?: string | null;
sessionId?: string | null;
sessionStatus?: SessionStatusClaim | null;
sessionClaims?: JwtPayload | null;
actor?: ActClaim | null;
orgId?: string | null;
orgRole?: OrganizationCustomRoleKey | null;
orgSlug?: string | null;
orgPermissions?: OrganizationCustomPermissionKey[] | null;
getToken: GetToken;
signOut: SignOut;
has: (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => boolean;
};
options: PendingSessionOptions;
};
/**
* Shared utility function that centralizes auth state resolution logic,
* preventing duplication across different packages.
*
* @internal
*/
declare const resolveAuthState: ({
authObject: {
sessionId,
sessionStatus,
userId,
actor,
orgId,
orgRole,
orgSlug,
signOut,
getToken,
has,
sessionClaims
},
options: {
treatPendingAsSignedOut
}
}: AuthStateOptions) => UseAuthReturn | undefined;
//#endregion
export { createCheckAuthorization, resolveAuthState, splitByScope, validateReverificationConfig };
//# sourceMappingURL=authorization.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"authorization.d.mts","names":[],"sources":["../../src/authorization.ts"],"sourcesContent":[],"mappings":";;;;KAiBK,oBAAA;;;EAAA,OAAA,EAAA,MAAA,GAAA,IAAA,GAAoB,SAAA;EA6LnB,cAAA,EA6BL,MAAA,EAAA,GAAA,IAAA,GAAA,SAAA;EAEK,qBAAA,EAAA,CAAA,MAAA,EAqBL,MAAA,CAAA,GAAA,IAAA;EArB6C,QAAA,EAAA,MAAA,GAAA,IAAA,GAAA,SAAA;;;cA/BxC;EAyIA,GAAA,EAAA,MAAA,EAAA;EAcD,IAAA,EAAA,MAAA,EAAA;CAIe;cA5Hd,4BA6Hc,EAAA,CAAA,MAAA,EA7H0B,oBA6H1B,GAAA,SAAA,GAAA,IAAA,EAAA,GAAA,KAAA,GAAA,CAAA,GAAA,GAAA;EACR,KAAA,0BAAA;EAEE,YAAA,iCAAA;CAEO,CAAA;;;;;;;AAKW;cA7B1B,wBAsCoB,EAAA,CAAA,OAAA,EAtCiB,oBAsCjB,EAAA,GAtCwC,uCAsCxC;KAxBrB,gBAAA,GAwBqB;EAAA,UAAA,EAAA;IAAA,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,SAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,aAAA,CAAA,EApBN,kBAoBM,GAAA,IAAA;IAAA,aAAA,CAAA,EAnBN,UAmBM,GAAA,IAAA;IAAA,KAAA,CAAA,EAlBd,QAkBc,GAAA,IAAA;IAAA,KAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,OAAA,CAAA,EAhBZ,yBAgBY,GAAA,IAAA;IAAA,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,cAAA,CAAA,EAdL,+BAcK,EAAA,GAAA,IAAA;IAevB,QAAA,EA5BW,QA4BX;IAAmB,OAAA,EA3BT,OA2BS;IAAa,GAAA,EAAA,CAAA,MAAA,EA1BjB,UA0BiB,CA1BN,uCA0BM,CAAA,CAAA,CAAA,CAAA,EAAA,GAAA,OAAA;;WAxBxB;;;;;;;;cASL;;;;;;;;;;;;;;;;;GAeH,qBAAmB"}

View File

@@ -0,0 +1,73 @@
import { $a as SessionStatusClaim, Gs as SessionVerificationLevel, Hs as ReverificationConfig, Mo as GetToken, Po as PendingSessionOptions, Pt as SignOut, Qa as JwtPayload, Us as SessionVerificationAfterMinutes, g as UseAuthReturn, jo as CheckAuthorizationWithCustomPermissions, no as OrganizationCustomRoleKey, qa as ActClaim, to as OrganizationCustomPermissionKey } from "./index-gwPUTb24.js";
import "./moduleManager-WB15hU3T.js";
//#region src/authorization.d.ts
type AuthorizationOptions = {
userId: string | null | undefined;
orgId: string | null | undefined;
orgRole: string | null | undefined;
orgPermissions: string[] | null | undefined;
factorVerificationAge: [number, number] | null;
features: string | null | undefined;
plans: string | null | undefined;
};
declare const splitByScope: (fea: string | null | undefined) => {
org: string[];
user: string[];
};
declare const validateReverificationConfig: (config: ReverificationConfig | undefined | null) => false | (() => {
level: SessionVerificationLevel;
afterMinutes: SessionVerificationAfterMinutes;
});
/**
* Creates a function for comprehensive user authorization checks.
* Combines organization, billing, and reverification checks. The returned function
* authorizes only when every requested dimension passes; any requested dimension
* that cannot be satisfied (including missing or malformed session data) denies
* the request. Fails if `userId` is missing.
*/
declare const createCheckAuthorization: (options: AuthorizationOptions) => CheckAuthorizationWithCustomPermissions;
type AuthStateOptions = {
authObject: {
userId?: string | null;
sessionId?: string | null;
sessionStatus?: SessionStatusClaim | null;
sessionClaims?: JwtPayload | null;
actor?: ActClaim | null;
orgId?: string | null;
orgRole?: OrganizationCustomRoleKey | null;
orgSlug?: string | null;
orgPermissions?: OrganizationCustomPermissionKey[] | null;
getToken: GetToken;
signOut: SignOut;
has: (params: Parameters<CheckAuthorizationWithCustomPermissions>[0]) => boolean;
};
options: PendingSessionOptions;
};
/**
* Shared utility function that centralizes auth state resolution logic,
* preventing duplication across different packages.
*
* @internal
*/
declare const resolveAuthState: ({
authObject: {
sessionId,
sessionStatus,
userId,
actor,
orgId,
orgRole,
orgSlug,
signOut,
getToken,
has,
sessionClaims
},
options: {
treatPendingAsSignedOut
}
}: AuthStateOptions) => UseAuthReturn | undefined;
//#endregion
export { createCheckAuthorization, resolveAuthState, splitByScope, validateReverificationConfig };
//# sourceMappingURL=authorization.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"authorization.d.ts","names":[],"sources":["../../src/authorization.ts"],"sourcesContent":[],"mappings":";;;;KAiBK,oBAAA;;;EAAA,OAAA,EAAA,MAAA,GAAA,IAAA,GAAoB,SAAA;EA6LnB,cAAA,EA6BL,MAAA,EAAA,GAAA,IAAA,GAAA,SAAA;EAEK,qBAAA,EAAA,CAAA,MAAA,EAqBL,MAAA,CAAA,GAAA,IAAA;EArB6C,QAAA,EAAA,MAAA,GAAA,IAAA,GAAA,SAAA;;;cA/BxC;EAyIA,GAAA,EAAA,MAAA,EAAA;EAcD,IAAA,EAAA,MAAA,EAAA;CAIe;cA5Hd,4BA6Hc,EAAA,CAAA,MAAA,EA7H0B,oBA6H1B,GAAA,SAAA,GAAA,IAAA,EAAA,GAAA,KAAA,GAAA,CAAA,GAAA,GAAA;EACR,KAAA,0BAAA;EAEE,YAAA,iCAAA;CAEO,CAAA;;;;;;;AAKW;cA7B1B,wBAsCoB,EAAA,CAAA,OAAA,EAtCiB,oBAsCjB,EAAA,GAtCwC,uCAsCxC;KAxBrB,gBAAA,GAwBqB;EAAA,UAAA,EAAA;IAAA,MAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,SAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,aAAA,CAAA,EApBN,kBAoBM,GAAA,IAAA;IAAA,aAAA,CAAA,EAnBN,UAmBM,GAAA,IAAA;IAAA,KAAA,CAAA,EAlBd,QAkBc,GAAA,IAAA;IAAA,KAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,OAAA,CAAA,EAhBZ,yBAgBY,GAAA,IAAA;IAAA,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;IAAA,cAAA,CAAA,EAdL,+BAcK,EAAA,GAAA,IAAA;IAevB,QAAA,EA5BW,QA4BX;IAAmB,OAAA,EA3BT,OA2BS;IAAa,GAAA,EAAA,CAAA,MAAA,EA1BjB,UA0BiB,CA1BN,uCA0BM,CAAA,CAAA,CAAA,CAAA,EAAA,GAAA,OAAA;;WAxBxB;;;;;;;;cASL;;;;;;;;;;;;;;;;;GAeH,qBAAmB"}

View File

@@ -0,0 +1,6 @@
const require_authorization = require('./authorization-Dj1hHJtO.js');
exports.createCheckAuthorization = require_authorization.createCheckAuthorization;
exports.resolveAuthState = require_authorization.resolveAuthState;
exports.splitByScope = require_authorization.splitByScope;
exports.validateReverificationConfig = require_authorization.validateReverificationConfig;

View File

@@ -0,0 +1,3 @@
import { i as validateReverificationConfig, n as resolveAuthState, r as splitByScope, t as createCheckAuthorization } from "./authorization-Bayl2soX.mjs";
export { createCheckAuthorization, resolveAuthState, splitByScope, validateReverificationConfig };

View File

@@ -0,0 +1,81 @@
//#region src/browser.ts
/**
* Checks if the window object is defined. You can also use this to check if something is happening on the client side.
*
* @returns
*/
function inBrowser() {
return typeof window !== "undefined";
}
const botAgentRegex = new RegExp([
"bot",
"spider",
"crawl",
"APIs-Google",
"AdsBot",
"Googlebot",
"mediapartners",
"Google Favicon",
"FeedFetcher",
"Google-Read-Aloud",
"DuplexWeb-Google",
"googleweblight",
"bing",
"yandex",
"baidu",
"duckduck",
"yahoo",
"ecosia",
"ia_archiver",
"facebook",
"instagram",
"pinterest",
"reddit",
"slack",
"twitter",
"whatsapp",
"youtube",
"semrush"
].join("|"), "i");
/**
* Checks if the user agent is a bot.
*
* @param userAgent - Any user agent string
* @returns
*/
function userAgentIsRobot(userAgent) {
return !userAgent ? false : botAgentRegex.test(userAgent);
}
/**
* Checks if the current environment is a browser and the user agent is not a bot.
*
* @returns
*/
function isValidBrowser() {
const navigator = inBrowser() ? window?.navigator : null;
if (!navigator) return false;
return !userAgentIsRobot(navigator?.userAgent) && !navigator?.webdriver;
}
/**
* Checks if the current environment is a browser and if the navigator is online.
*
* @returns
*/
function isBrowserOnline() {
const navigator = inBrowser() ? window?.navigator : null;
if (!navigator) return false;
if (typeof navigator.onLine !== "boolean") return true;
return !!navigator.onLine;
}
/**
* Runs `isBrowserOnline` and `isValidBrowser` to check if the current environment is a valid browser and if the navigator is online.
*
* @returns
*/
function isValidBrowserOnline() {
return isBrowserOnline() && isValidBrowser();
}
//#endregion
export { userAgentIsRobot as a, isValidBrowserOnline as i, isBrowserOnline as n, isValidBrowser as r, inBrowser as t };
//# sourceMappingURL=browser-CMFCxUv7.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"browser-CMFCxUv7.mjs","names":[],"sources":["../../src/browser.ts"],"sourcesContent":["/**\n * Checks if the window object is defined. You can also use this to check if something is happening on the client side.\n *\n * @returns\n */\nexport function inBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\nconst botAgents = [\n 'bot',\n 'spider',\n 'crawl',\n 'APIs-Google',\n 'AdsBot',\n 'Googlebot',\n 'mediapartners',\n 'Google Favicon',\n 'FeedFetcher',\n 'Google-Read-Aloud',\n 'DuplexWeb-Google',\n 'googleweblight',\n 'bing',\n 'yandex',\n 'baidu',\n 'duckduck',\n 'yahoo',\n 'ecosia',\n 'ia_archiver',\n 'facebook',\n 'instagram',\n 'pinterest',\n 'reddit',\n 'slack',\n 'twitter',\n 'whatsapp',\n 'youtube',\n 'semrush',\n];\nconst botAgentRegex = new RegExp(botAgents.join('|'), 'i');\n\n/**\n * Checks if the user agent is a bot.\n *\n * @param userAgent - Any user agent string\n * @returns\n */\nexport function userAgentIsRobot(userAgent: string): boolean {\n return !userAgent ? false : botAgentRegex.test(userAgent);\n}\n\n/**\n * Checks if the current environment is a browser and the user agent is not a bot.\n *\n * @returns\n */\nexport function isValidBrowser(): boolean {\n const navigator = inBrowser() ? window?.navigator : null;\n if (!navigator) {\n return false;\n }\n return !userAgentIsRobot(navigator?.userAgent) && !navigator?.webdriver;\n}\n\n/**\n * Checks if the current environment is a browser and if the navigator is online.\n *\n * @returns\n */\nexport function isBrowserOnline(): boolean {\n const navigator = inBrowser() ? window?.navigator : null;\n if (!navigator) {\n return false;\n }\n\n // Some environments (e.g. React Native) define a Navigator object but do not\n // implement navigator.onLine as a boolean. Default to online in those cases.\n if (typeof navigator.onLine !== 'boolean') {\n return true;\n }\n\n // navigator.onLine is the standard API and is reliable for detecting\n // complete disconnection (airplane mode, WiFi off, etc.).\n // The experimental navigator.connection API (rtt/downlink) was previously\n // used as a secondary signal, but it reports zero values in headless browsers\n // and CI environments even when connected, causing false offline detection.\n return !!navigator.onLine;\n}\n\n/**\n * Runs `isBrowserOnline` and `isValidBrowser` to check if the current environment is a valid browser and if the navigator is online.\n *\n * @returns\n */\nexport function isValidBrowserOnline(): boolean {\n return isBrowserOnline() && isValidBrowser();\n}\n"],"mappings":";;;;;;AAKA,SAAgB,YAAqB;AACnC,QAAO,OAAO,WAAW;;AAiC3B,MAAM,gBAAgB,IAAI,OA9BR;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAC0C,KAAK,IAAI,EAAE,IAAI;;;;;;;AAQ1D,SAAgB,iBAAiB,WAA4B;AAC3D,QAAO,CAAC,YAAY,QAAQ,cAAc,KAAK,UAAU;;;;;;;AAQ3D,SAAgB,iBAA0B;CACxC,MAAM,YAAY,WAAW,GAAG,QAAQ,YAAY;AACpD,KAAI,CAAC,UACH,QAAO;AAET,QAAO,CAAC,iBAAiB,WAAW,UAAU,IAAI,CAAC,WAAW;;;;;;;AAQhE,SAAgB,kBAA2B;CACzC,MAAM,YAAY,WAAW,GAAG,QAAQ,YAAY;AACpD,KAAI,CAAC,UACH,QAAO;AAKT,KAAI,OAAO,UAAU,WAAW,UAC9B,QAAO;AAQT,QAAO,CAAC,CAAC,UAAU;;;;;;;AAQrB,SAAgB,uBAAgC;AAC9C,QAAO,iBAAiB,IAAI,gBAAgB"}

View File

@@ -0,0 +1,111 @@
//#region src/browser.ts
/**
* Checks if the window object is defined. You can also use this to check if something is happening on the client side.
*
* @returns
*/
function inBrowser() {
return typeof window !== "undefined";
}
const botAgentRegex = new RegExp([
"bot",
"spider",
"crawl",
"APIs-Google",
"AdsBot",
"Googlebot",
"mediapartners",
"Google Favicon",
"FeedFetcher",
"Google-Read-Aloud",
"DuplexWeb-Google",
"googleweblight",
"bing",
"yandex",
"baidu",
"duckduck",
"yahoo",
"ecosia",
"ia_archiver",
"facebook",
"instagram",
"pinterest",
"reddit",
"slack",
"twitter",
"whatsapp",
"youtube",
"semrush"
].join("|"), "i");
/**
* Checks if the user agent is a bot.
*
* @param userAgent - Any user agent string
* @returns
*/
function userAgentIsRobot(userAgent) {
return !userAgent ? false : botAgentRegex.test(userAgent);
}
/**
* Checks if the current environment is a browser and the user agent is not a bot.
*
* @returns
*/
function isValidBrowser() {
const navigator = inBrowser() ? window?.navigator : null;
if (!navigator) return false;
return !userAgentIsRobot(navigator?.userAgent) && !navigator?.webdriver;
}
/**
* Checks if the current environment is a browser and if the navigator is online.
*
* @returns
*/
function isBrowserOnline() {
const navigator = inBrowser() ? window?.navigator : null;
if (!navigator) return false;
if (typeof navigator.onLine !== "boolean") return true;
return !!navigator.onLine;
}
/**
* Runs `isBrowserOnline` and `isValidBrowser` to check if the current environment is a valid browser and if the navigator is online.
*
* @returns
*/
function isValidBrowserOnline() {
return isBrowserOnline() && isValidBrowser();
}
//#endregion
Object.defineProperty(exports, 'inBrowser', {
enumerable: true,
get: function () {
return inBrowser;
}
});
Object.defineProperty(exports, 'isBrowserOnline', {
enumerable: true,
get: function () {
return isBrowserOnline;
}
});
Object.defineProperty(exports, 'isValidBrowser', {
enumerable: true,
get: function () {
return isValidBrowser;
}
});
Object.defineProperty(exports, 'isValidBrowserOnline', {
enumerable: true,
get: function () {
return isValidBrowserOnline;
}
});
Object.defineProperty(exports, 'userAgentIsRobot', {
enumerable: true,
get: function () {
return userAgentIsRobot;
}
});
//# sourceMappingURL=browser-CaHqvEp1.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"browser-CaHqvEp1.js","names":[],"sources":["../../src/browser.ts"],"sourcesContent":["/**\n * Checks if the window object is defined. You can also use this to check if something is happening on the client side.\n *\n * @returns\n */\nexport function inBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\nconst botAgents = [\n 'bot',\n 'spider',\n 'crawl',\n 'APIs-Google',\n 'AdsBot',\n 'Googlebot',\n 'mediapartners',\n 'Google Favicon',\n 'FeedFetcher',\n 'Google-Read-Aloud',\n 'DuplexWeb-Google',\n 'googleweblight',\n 'bing',\n 'yandex',\n 'baidu',\n 'duckduck',\n 'yahoo',\n 'ecosia',\n 'ia_archiver',\n 'facebook',\n 'instagram',\n 'pinterest',\n 'reddit',\n 'slack',\n 'twitter',\n 'whatsapp',\n 'youtube',\n 'semrush',\n];\nconst botAgentRegex = new RegExp(botAgents.join('|'), 'i');\n\n/**\n * Checks if the user agent is a bot.\n *\n * @param userAgent - Any user agent string\n * @returns\n */\nexport function userAgentIsRobot(userAgent: string): boolean {\n return !userAgent ? false : botAgentRegex.test(userAgent);\n}\n\n/**\n * Checks if the current environment is a browser and the user agent is not a bot.\n *\n * @returns\n */\nexport function isValidBrowser(): boolean {\n const navigator = inBrowser() ? window?.navigator : null;\n if (!navigator) {\n return false;\n }\n return !userAgentIsRobot(navigator?.userAgent) && !navigator?.webdriver;\n}\n\n/**\n * Checks if the current environment is a browser and if the navigator is online.\n *\n * @returns\n */\nexport function isBrowserOnline(): boolean {\n const navigator = inBrowser() ? window?.navigator : null;\n if (!navigator) {\n return false;\n }\n\n // Some environments (e.g. React Native) define a Navigator object but do not\n // implement navigator.onLine as a boolean. Default to online in those cases.\n if (typeof navigator.onLine !== 'boolean') {\n return true;\n }\n\n // navigator.onLine is the standard API and is reliable for detecting\n // complete disconnection (airplane mode, WiFi off, etc.).\n // The experimental navigator.connection API (rtt/downlink) was previously\n // used as a secondary signal, but it reports zero values in headless browsers\n // and CI environments even when connected, causing false offline detection.\n return !!navigator.onLine;\n}\n\n/**\n * Runs `isBrowserOnline` and `isValidBrowser` to check if the current environment is a valid browser and if the navigator is online.\n *\n * @returns\n */\nexport function isValidBrowserOnline(): boolean {\n return isBrowserOnline() && isValidBrowser();\n}\n"],"mappings":";;;;;;;AAKA,SAAgB,YAAqB;AACnC,QAAO,OAAO,WAAW;;AAiC3B,MAAM,gBAAgB,IAAI,OA9BR;CAChB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAC0C,KAAK,IAAI,EAAE,IAAI;;;;;;;AAQ1D,SAAgB,iBAAiB,WAA4B;AAC3D,QAAO,CAAC,YAAY,QAAQ,cAAc,KAAK,UAAU;;;;;;;AAQ3D,SAAgB,iBAA0B;CACxC,MAAM,YAAY,WAAW,GAAG,QAAQ,YAAY;AACpD,KAAI,CAAC,UACH,QAAO;AAET,QAAO,CAAC,iBAAiB,WAAW,UAAU,IAAI,CAAC,WAAW;;;;;;;AAQhE,SAAgB,kBAA2B;CACzC,MAAM,YAAY,WAAW,GAAG,QAAQ,YAAY;AACpD,KAAI,CAAC,UACH,QAAO;AAKT,KAAI,OAAO,UAAU,WAAW,UAC9B,QAAO;AAQT,QAAO,CAAC,CAAC,UAAU;;;;;;;AAQrB,SAAgB,uBAAgC;AAC9C,QAAO,iBAAiB,IAAI,gBAAgB"}

35
node_modules/@clerk/shared/dist/runtime/browser.d.mts generated vendored Normal file
View File

@@ -0,0 +1,35 @@
//#region src/browser.d.ts
/**
* Checks if the window object is defined. You can also use this to check if something is happening on the client side.
*
* @returns
*/
declare function inBrowser(): boolean;
/**
* Checks if the user agent is a bot.
*
* @param userAgent - Any user agent string
* @returns
*/
declare function userAgentIsRobot(userAgent: string): boolean;
/**
* Checks if the current environment is a browser and the user agent is not a bot.
*
* @returns
*/
declare function isValidBrowser(): boolean;
/**
* Checks if the current environment is a browser and if the navigator is online.
*
* @returns
*/
declare function isBrowserOnline(): boolean;
/**
* Runs `isBrowserOnline` and `isValidBrowser` to check if the current environment is a valid browser and if the navigator is online.
*
* @returns
*/
declare function isValidBrowserOnline(): boolean;
//#endregion
export { inBrowser, isBrowserOnline, isValidBrowser, isValidBrowserOnline, userAgentIsRobot };
//# sourceMappingURL=browser.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"browser.d.mts","names":[],"sources":["../../src/browser.ts"],"sourcesContent":[],"mappings":";;AAKA;AA0CA;AASA;AAaA;AAyBgB,iBAzFA,SAAA,CAAA,CAyFoB,EAAA,OAAA;;;;;;;iBA/CpB,gBAAA;;;;;;iBASA,cAAA,CAAA;;;;;;iBAaA,eAAA,CAAA;;;;;;iBAyBA,oBAAA,CAAA"}

35
node_modules/@clerk/shared/dist/runtime/browser.d.ts generated vendored Normal file
View File

@@ -0,0 +1,35 @@
//#region src/browser.d.ts
/**
* Checks if the window object is defined. You can also use this to check if something is happening on the client side.
*
* @returns
*/
declare function inBrowser(): boolean;
/**
* Checks if the user agent is a bot.
*
* @param userAgent - Any user agent string
* @returns
*/
declare function userAgentIsRobot(userAgent: string): boolean;
/**
* Checks if the current environment is a browser and the user agent is not a bot.
*
* @returns
*/
declare function isValidBrowser(): boolean;
/**
* Checks if the current environment is a browser and if the navigator is online.
*
* @returns
*/
declare function isBrowserOnline(): boolean;
/**
* Runs `isBrowserOnline` and `isValidBrowser` to check if the current environment is a valid browser and if the navigator is online.
*
* @returns
*/
declare function isValidBrowserOnline(): boolean;
//#endregion
export { inBrowser, isBrowserOnline, isValidBrowser, isValidBrowserOnline, userAgentIsRobot };
//# sourceMappingURL=browser.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"browser.d.ts","names":[],"sources":["../../src/browser.ts"],"sourcesContent":[],"mappings":";;AAKA;AA0CA;AASA;AAaA;AAyBgB,iBAzFA,SAAA,CAAA,CAyFoB,EAAA,OAAA;;;;;;;iBA/CpB,gBAAA;;;;;;iBASA,cAAA,CAAA;;;;;;iBAaA,eAAA,CAAA;;;;;;iBAyBA,oBAAA,CAAA"}

7
node_modules/@clerk/shared/dist/runtime/browser.js generated vendored Normal file
View File

@@ -0,0 +1,7 @@
const require_browser = require('./browser-CaHqvEp1.js');
exports.inBrowser = require_browser.inBrowser;
exports.isBrowserOnline = require_browser.isBrowserOnline;
exports.isValidBrowser = require_browser.isValidBrowser;
exports.isValidBrowserOnline = require_browser.isValidBrowserOnline;
exports.userAgentIsRobot = require_browser.userAgentIsRobot;

3
node_modules/@clerk/shared/dist/runtime/browser.mjs generated vendored Normal file
View File

@@ -0,0 +1,3 @@
import { a as userAgentIsRobot, i as isValidBrowserOnline, n as isBrowserOnline, r as isValidBrowser, t as inBrowser } from "./browser-CMFCxUv7.mjs";
export { inBrowser, isBrowserOnline, isValidBrowser, isValidBrowserOnline, userAgentIsRobot };

View File

@@ -0,0 +1,8 @@
//#region src/buildAccountsBaseUrl.d.ts
/**
* Builds a full origin string pointing to the Account Portal for the given frontend API.
*/
declare function buildAccountsBaseUrl(frontendApi?: string): string;
//#endregion
export { buildAccountsBaseUrl };
//# sourceMappingURL=buildAccountsBaseUrl.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"buildAccountsBaseUrl.d.mts","names":[],"sources":["../../src/buildAccountsBaseUrl.ts"],"sourcesContent":[],"mappings":";;AAGA;;iBAAgB,oBAAA"}

View File

@@ -0,0 +1,8 @@
//#region src/buildAccountsBaseUrl.d.ts
/**
* Builds a full origin string pointing to the Account Portal for the given frontend API.
*/
declare function buildAccountsBaseUrl(frontendApi?: string): string;
//#endregion
export { buildAccountsBaseUrl };
//# sourceMappingURL=buildAccountsBaseUrl.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"buildAccountsBaseUrl.d.ts","names":[],"sources":["../../src/buildAccountsBaseUrl.ts"],"sourcesContent":[],"mappings":";;AAGA;;iBAAgB,oBAAA"}

View File

@@ -0,0 +1,13 @@
//#region src/buildAccountsBaseUrl.ts
/**
* Builds a full origin string pointing to the Account Portal for the given frontend API.
*/
function buildAccountsBaseUrl(frontendApi) {
if (!frontendApi) return "";
return `https://${frontendApi.replace(/clerk\.accountsstage\./, "accountsstage.").replace(/clerk\.accounts\.|clerk\./, "accounts.")}`;
}
//#endregion
exports.buildAccountsBaseUrl = buildAccountsBaseUrl;
//# sourceMappingURL=buildAccountsBaseUrl.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"buildAccountsBaseUrl.js","names":[],"sources":["../../src/buildAccountsBaseUrl.ts"],"sourcesContent":["/**\n * Builds a full origin string pointing to the Account Portal for the given frontend API.\n */\nexport function buildAccountsBaseUrl(frontendApi?: string): string {\n if (!frontendApi) {\n return '';\n }\n\n // convert url from FAPI to accounts for Kima and legacy (prod & dev) instances\n const accountsBaseUrl = frontendApi\n // staging accounts\n .replace(/clerk\\.accountsstage\\./, 'accountsstage.')\n .replace(/clerk\\.accounts\\.|clerk\\./, 'accounts.');\n return `https://${accountsBaseUrl}`;\n}\n"],"mappings":";;;;;AAGA,SAAgB,qBAAqB,aAA8B;AACjE,KAAI,CAAC,YACH,QAAO;AAQT,QAAO,WAJiB,YAErB,QAAQ,0BAA0B,iBAAiB,CACnD,QAAQ,6BAA6B,YAAY"}

View File

@@ -0,0 +1,12 @@
//#region src/buildAccountsBaseUrl.ts
/**
* Builds a full origin string pointing to the Account Portal for the given frontend API.
*/
function buildAccountsBaseUrl(frontendApi) {
if (!frontendApi) return "";
return `https://${frontendApi.replace(/clerk\.accountsstage\./, "accountsstage.").replace(/clerk\.accounts\.|clerk\./, "accounts.")}`;
}
//#endregion
export { buildAccountsBaseUrl };
//# sourceMappingURL=buildAccountsBaseUrl.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"buildAccountsBaseUrl.mjs","names":[],"sources":["../../src/buildAccountsBaseUrl.ts"],"sourcesContent":["/**\n * Builds a full origin string pointing to the Account Portal for the given frontend API.\n */\nexport function buildAccountsBaseUrl(frontendApi?: string): string {\n if (!frontendApi) {\n return '';\n }\n\n // convert url from FAPI to accounts for Kima and legacy (prod & dev) instances\n const accountsBaseUrl = frontendApi\n // staging accounts\n .replace(/clerk\\.accountsstage\\./, 'accountsstage.')\n .replace(/clerk\\.accounts\\.|clerk\\./, 'accounts.');\n return `https://${accountsBaseUrl}`;\n}\n"],"mappings":";;;;AAGA,SAAgB,qBAAqB,aAA8B;AACjE,KAAI,CAAC,YACH,QAAO;AAQT,QAAO,WAJiB,YAErB,QAAQ,0BAA0B,iBAAiB,CACnD,QAAQ,6BAA6B,YAAY"}

View File

@@ -0,0 +1,30 @@
//#region rolldown:runtime
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
Object.defineProperty(exports, '__toESM', {
enumerable: true,
get: function () {
return __toESM;
}
});

View File

@@ -0,0 +1,22 @@
import { W as ClerkEventPayload } from "./index-B4_BYgBX.mjs";
import "./moduleManager-BsmFyRrH.mjs";
//#region src/clerkEventBus.d.ts
declare const clerkEvents: {
Status: "status";
};
declare const createClerkEventBus: () => {
on: <Event extends "status">(event: Event, handler: (payload: ClerkEventPayload[Event]) => void, opts?: {
notify?: boolean;
}) => void;
prioritizedOn: <Event extends "status">(event: Event, handler: (payload: ClerkEventPayload[Event]) => void) => void;
emit: <Event extends "status">(event: Event, payload: ClerkEventPayload[Event]) => void;
off: <Event extends "status">(event: Event, handler?: ((payload: ClerkEventPayload[Event]) => void) | undefined) => void;
prioritizedOff: <Event extends "status">(event: Event, handler?: ((payload: ClerkEventPayload[Event]) => void) | undefined) => void;
internal: {
retrieveListeners: <Event extends "status">(event: Event) => Array<(...args: any[]) => void>;
};
};
//#endregion
export { clerkEvents, createClerkEventBus };
//# sourceMappingURL=clerkEventBus.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"clerkEventBus.d.mts","names":[],"sources":["../../src/clerkEventBus.ts"],"sourcesContent":[],"mappings":";;;;cAGa;;;AAAA,cAIA,mBAFsC,EAAA,GAAA,GAAA;EAEtC,EAAA,EAAA,CAAA,cAAA,QAEZ,CAAA,CAAA,KAAA,OAAA,EAAA,OAAA,EAAA,CAAA,OAAA,mBAAA,MAAA,CAAA,EAAA,GAAA,IAAA,EAAA,KAAA,EAAA"}

View File

@@ -0,0 +1,22 @@
import { W as ClerkEventPayload } from "./index-gwPUTb24.js";
import "./moduleManager-WB15hU3T.js";
//#region src/clerkEventBus.d.ts
declare const clerkEvents: {
Status: "status";
};
declare const createClerkEventBus: () => {
on: <Event extends "status">(event: Event, handler: (payload: ClerkEventPayload[Event]) => void, opts?: {
notify?: boolean;
}) => void;
prioritizedOn: <Event extends "status">(event: Event, handler: (payload: ClerkEventPayload[Event]) => void) => void;
emit: <Event extends "status">(event: Event, payload: ClerkEventPayload[Event]) => void;
off: <Event extends "status">(event: Event, handler?: ((payload: ClerkEventPayload[Event]) => void) | undefined) => void;
prioritizedOff: <Event extends "status">(event: Event, handler?: ((payload: ClerkEventPayload[Event]) => void) | undefined) => void;
internal: {
retrieveListeners: <Event extends "status">(event: Event) => Array<(...args: any[]) => void>;
};
};
//#endregion
export { clerkEvents, createClerkEventBus };
//# sourceMappingURL=clerkEventBus.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"clerkEventBus.d.ts","names":[],"sources":["../../src/clerkEventBus.ts"],"sourcesContent":[],"mappings":";;;;cAGa;;;AAAA,cAIA,mBAFsC,EAAA,GAAA,GAAA;EAEtC,EAAA,EAAA,CAAA,cAAA,QAEZ,CAAA,CAAA,KAAA,OAAA,EAAA,OAAA,EAAA,CAAA,OAAA,mBAAA,MAAA,CAAA,EAAA,GAAA,IAAA,EAAA,KAAA,EAAA"}

View File

@@ -0,0 +1,12 @@
const require_eventBus = require('./eventBus-mLhN9dkg.js');
//#region src/clerkEventBus.ts
const clerkEvents = { Status: "status" };
const createClerkEventBus = () => {
return require_eventBus.createEventBus();
};
//#endregion
exports.clerkEvents = clerkEvents;
exports.createClerkEventBus = createClerkEventBus;
//# sourceMappingURL=clerkEventBus.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"clerkEventBus.js","names":["createEventBus"],"sources":["../../src/clerkEventBus.ts"],"sourcesContent":["import { createEventBus } from './eventBus';\nimport type { ClerkEventPayload } from './types';\n\nexport const clerkEvents = {\n Status: 'status',\n} satisfies Record<string, keyof ClerkEventPayload>;\n\nexport const createClerkEventBus = () => {\n return createEventBus<ClerkEventPayload>();\n};\n"],"mappings":";;;AAGA,MAAa,cAAc,EACzB,QAAQ,UACT;AAED,MAAa,4BAA4B;AACvC,QAAOA,iCAAmC"}

View File

@@ -0,0 +1,11 @@
import { t as createEventBus } from "./eventBus-TFTcHo0F.mjs";
//#region src/clerkEventBus.ts
const clerkEvents = { Status: "status" };
const createClerkEventBus = () => {
return createEventBus();
};
//#endregion
export { clerkEvents, createClerkEventBus };
//# sourceMappingURL=clerkEventBus.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"clerkEventBus.mjs","names":[],"sources":["../../src/clerkEventBus.ts"],"sourcesContent":["import { createEventBus } from './eventBus';\nimport type { ClerkEventPayload } from './types';\n\nexport const clerkEvents = {\n Status: 'status',\n} satisfies Record<string, keyof ClerkEventPayload>;\n\nexport const createClerkEventBus = () => {\n return createEventBus<ClerkEventPayload>();\n};\n"],"mappings":";;;AAGA,MAAa,cAAc,EACzB,QAAQ,UACT;AAED,MAAa,4BAA4B;AACvC,QAAO,gBAAmC"}

View File

@@ -0,0 +1,138 @@
//#region src/errors/createErrorTypeGuard.ts
/**
* Creates a type guard function for any error class.
* The returned function can be called as a standalone function or as a method on an error object.
*
* @example
* ```typescript
* class MyError extends Error {}
* const isMyError = createErrorTypeGuard(MyError);
*
* // As a standalone function
* if (isMyError(error)) { ... }
*
* // As a method (when attached to error object)
* if (error.isMyError()) { ... }
* ```
*/
function createErrorTypeGuard(ErrorClass) {
function typeGuard(error) {
const target = error ?? this;
if (!target) throw new TypeError(`${ErrorClass.kind || ErrorClass.name} type guard requires an error object`);
if (ErrorClass.kind && typeof target === "object" && target !== null && "constructor" in target) {
if (target.constructor?.kind === ErrorClass.kind) return true;
}
return target instanceof ErrorClass;
}
return typeGuard;
}
//#endregion
//#region src/errors/clerkError.ts
var ClerkError = class ClerkError extends Error {
static kind = "ClerkError";
clerkError = true;
code;
longMessage;
docsUrl;
cause;
get name() {
return this.constructor.name;
}
constructor(opts) {
super(new.target.formatMessage(new.target.kind, opts.message, opts.code, opts.docsUrl), { cause: opts.cause });
Object.setPrototypeOf(this, ClerkError.prototype);
this.code = opts.code;
this.docsUrl = opts.docsUrl;
this.longMessage = opts.longMessage;
this.cause = opts.cause;
}
toString() {
return `[${this.name}]\nMessage:${this.message}`;
}
static formatMessage(name, msg, code, docsUrl) {
const prefix = "Clerk:";
const regex = new RegExp(prefix.replace(" ", "\\s*"), "i");
msg = msg.replace(regex, "");
msg = `${prefix} ${msg.trim()}\n\n(code="${code}")\n\n`;
if (docsUrl) msg += `\n\nDocs: ${docsUrl}`;
return msg;
}
};
/**
* Type guard to check if a value is a ClerkError instance.
*/
function isClerkError(val) {
return createErrorTypeGuard(ClerkError)(val) || !!val && typeof val === "object" && "clerkError" in val && val.clerkError === true;
}
//#endregion
//#region src/errors/clerkRuntimeError.ts
/**
* Custom error class for representing Clerk runtime errors.
*
* @class ClerkRuntimeError
*
* @example
* throw new ClerkRuntimeError('An error occurred', { code: 'password_invalid' });
*/
var ClerkRuntimeError = class ClerkRuntimeError extends ClerkError {
static kind = "ClerkRuntimeError";
/**
* @deprecated Use `clerkError` property instead. This property is maintained for backward compatibility.
*/
clerkRuntimeError = true;
constructor(message, options) {
super({
...options,
message
});
Object.setPrototypeOf(this, ClerkRuntimeError.prototype);
}
};
/**
* Type guard to check if an error is a ClerkRuntimeError.
* Can be called as a standalone function or as a method on an error object.
*
* @example
* // As a standalone function
* if (isClerkRuntimeError(error)) { ... }
*
* // As a method (when attached to error object)
* if (error.isClerkRuntimeError()) { ... }
*/
const isClerkRuntimeError = createErrorTypeGuard(ClerkRuntimeError);
//#endregion
Object.defineProperty(exports, 'ClerkError', {
enumerable: true,
get: function () {
return ClerkError;
}
});
Object.defineProperty(exports, 'ClerkRuntimeError', {
enumerable: true,
get: function () {
return ClerkRuntimeError;
}
});
Object.defineProperty(exports, 'createErrorTypeGuard', {
enumerable: true,
get: function () {
return createErrorTypeGuard;
}
});
Object.defineProperty(exports, 'isClerkError', {
enumerable: true,
get: function () {
return isClerkError;
}
});
Object.defineProperty(exports, 'isClerkRuntimeError', {
enumerable: true,
get: function () {
return isClerkRuntimeError;
}
});
//# sourceMappingURL=clerkRuntimeError-CaS4sM5w.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,108 @@
//#region src/errors/createErrorTypeGuard.ts
/**
* Creates a type guard function for any error class.
* The returned function can be called as a standalone function or as a method on an error object.
*
* @example
* ```typescript
* class MyError extends Error {}
* const isMyError = createErrorTypeGuard(MyError);
*
* // As a standalone function
* if (isMyError(error)) { ... }
*
* // As a method (when attached to error object)
* if (error.isMyError()) { ... }
* ```
*/
function createErrorTypeGuard(ErrorClass) {
function typeGuard(error) {
const target = error ?? this;
if (!target) throw new TypeError(`${ErrorClass.kind || ErrorClass.name} type guard requires an error object`);
if (ErrorClass.kind && typeof target === "object" && target !== null && "constructor" in target) {
if (target.constructor?.kind === ErrorClass.kind) return true;
}
return target instanceof ErrorClass;
}
return typeGuard;
}
//#endregion
//#region src/errors/clerkError.ts
var ClerkError = class ClerkError extends Error {
static kind = "ClerkError";
clerkError = true;
code;
longMessage;
docsUrl;
cause;
get name() {
return this.constructor.name;
}
constructor(opts) {
super(new.target.formatMessage(new.target.kind, opts.message, opts.code, opts.docsUrl), { cause: opts.cause });
Object.setPrototypeOf(this, ClerkError.prototype);
this.code = opts.code;
this.docsUrl = opts.docsUrl;
this.longMessage = opts.longMessage;
this.cause = opts.cause;
}
toString() {
return `[${this.name}]\nMessage:${this.message}`;
}
static formatMessage(name, msg, code, docsUrl) {
const prefix = "Clerk:";
const regex = new RegExp(prefix.replace(" ", "\\s*"), "i");
msg = msg.replace(regex, "");
msg = `${prefix} ${msg.trim()}\n\n(code="${code}")\n\n`;
if (docsUrl) msg += `\n\nDocs: ${docsUrl}`;
return msg;
}
};
/**
* Type guard to check if a value is a ClerkError instance.
*/
function isClerkError(val) {
return createErrorTypeGuard(ClerkError)(val) || !!val && typeof val === "object" && "clerkError" in val && val.clerkError === true;
}
//#endregion
//#region src/errors/clerkRuntimeError.ts
/**
* Custom error class for representing Clerk runtime errors.
*
* @class ClerkRuntimeError
*
* @example
* throw new ClerkRuntimeError('An error occurred', { code: 'password_invalid' });
*/
var ClerkRuntimeError = class ClerkRuntimeError extends ClerkError {
static kind = "ClerkRuntimeError";
/**
* @deprecated Use `clerkError` property instead. This property is maintained for backward compatibility.
*/
clerkRuntimeError = true;
constructor(message, options) {
super({
...options,
message
});
Object.setPrototypeOf(this, ClerkRuntimeError.prototype);
}
};
/**
* Type guard to check if an error is a ClerkRuntimeError.
* Can be called as a standalone function or as a method on an error object.
*
* @example
* // As a standalone function
* if (isClerkRuntimeError(error)) { ... }
*
* // As a method (when attached to error object)
* if (error.isClerkRuntimeError()) { ... }
*/
const isClerkRuntimeError = createErrorTypeGuard(ClerkRuntimeError);
//#endregion
export { createErrorTypeGuard as a, isClerkError as i, isClerkRuntimeError as n, ClerkError as r, ClerkRuntimeError as t };
//# sourceMappingURL=clerkRuntimeError-DqAmLuLY.mjs.map

File diff suppressed because one or more lines are too long

18
node_modules/@clerk/shared/dist/runtime/color.d.mts generated vendored Normal file
View File

@@ -0,0 +1,18 @@
import { Ea as RgbaColor, Oa as TransparentColor, va as Color, wa as HslaColor } from "./index-B4_BYgBX.mjs";
import "./moduleManager-BsmFyRrH.mjs";
//#region src/color.d.ts
declare const isValidHexString: (s: string) => boolean;
declare const isValidRgbaString: (s: string) => boolean;
declare const isValidHslaString: (s: string) => boolean;
declare const isRGBColor: (c: Color) => c is RgbaColor;
declare const isHSLColor: (c: Color) => c is HslaColor;
declare const isTransparent: (c: Color) => c is TransparentColor;
declare const hasAlpha: (color: Color) => boolean;
declare const stringToHslaColor: (value: string) => HslaColor | null;
declare const stringToSameTypeColor: (value: string) => Color;
declare const colorToSameTypeString: (color: Color) => string | TransparentColor;
declare const hexStringToRgbaColor: (hex: string) => RgbaColor;
//#endregion
export { colorToSameTypeString, hasAlpha, hexStringToRgbaColor, isHSLColor, isRGBColor, isTransparent, isValidHexString, isValidHslaString, isValidRgbaString, stringToHslaColor, stringToSameTypeColor };
//# sourceMappingURL=color.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"color.d.mts","names":[],"sources":["../../src/color.ts"],"sourcesContent":[],"mappings":";;;;cAUa;cAIA;cAIA;AARA,cAYA,UAVZ,EAAA,CAAA,CAAA,EAU6B,KAV7B,EAAA,GAAA,CAAA,IAU0C,SAV1C;AAEY,cAYA,UAVZ,EAAA,CAAA,CAAA,EAU6B,KAV7B,EAAA,GAAA,CAAA,IAU0C,SAV1C;AAEY,cAYA,aAVZ,EAAA,CAAA,CAAA,EAUgC,KAVhC,EAAA,GAAA,CAAA,IAU6C,gBAV7C;AAEY,cAYA,QAVZ,EAF6B,CAAA,KAAa,EAYX,KAZW,EAAA,GAE1C,OAAA;AAEY,cAeA,iBAf8B,EAAA,CAAA,KAAA,EAE1C,MAAA,EAAA,GAaiD,SAbjD,GAAA,IAAA;AAEY,cA+BA,qBA/BiC,EAAA,CAAA,KAAA,EAAA,MAE7C,EAAA,GA6BqD,KA7BrD;AAEY,cA+CA,qBA/CwB,EAAA,CAAA,KAAA,EA+CQ,KA/CR,EAAA,GAAA,MAAA,GA+CyB,gBA/CzB;AAOxB,cAwDA,oBAxDqC,EAAA,CAAA,GAAS,EAAA,MAAA,EAAA,GAwDR,SAxDQ"}

18
node_modules/@clerk/shared/dist/runtime/color.d.ts generated vendored Normal file
View File

@@ -0,0 +1,18 @@
import { Ea as RgbaColor, Oa as TransparentColor, va as Color, wa as HslaColor } from "./index-gwPUTb24.js";
import "./moduleManager-WB15hU3T.js";
//#region src/color.d.ts
declare const isValidHexString: (s: string) => boolean;
declare const isValidRgbaString: (s: string) => boolean;
declare const isValidHslaString: (s: string) => boolean;
declare const isRGBColor: (c: Color) => c is RgbaColor;
declare const isHSLColor: (c: Color) => c is HslaColor;
declare const isTransparent: (c: Color) => c is TransparentColor;
declare const hasAlpha: (color: Color) => boolean;
declare const stringToHslaColor: (value: string) => HslaColor | null;
declare const stringToSameTypeColor: (value: string) => Color;
declare const colorToSameTypeString: (color: Color) => string | TransparentColor;
declare const hexStringToRgbaColor: (hex: string) => RgbaColor;
//#endregion
export { colorToSameTypeString, hasAlpha, hexStringToRgbaColor, isHSLColor, isRGBColor, isTransparent, isValidHexString, isValidHslaString, isValidRgbaString, stringToHslaColor, stringToSameTypeColor };
//# sourceMappingURL=color.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"color.d.ts","names":[],"sources":["../../src/color.ts"],"sourcesContent":[],"mappings":";;;;cAUa;cAIA;cAIA;AARA,cAYA,UAVZ,EAAA,CAAA,CAAA,EAU6B,KAV7B,EAAA,GAAA,CAAA,IAU0C,SAV1C;AAEY,cAYA,UAVZ,EAAA,CAAA,CAAA,EAU6B,KAV7B,EAAA,GAAA,CAAA,IAU0C,SAV1C;AAEY,cAYA,aAVZ,EAAA,CAAA,CAAA,EAUgC,KAVhC,EAAA,GAAA,CAAA,IAU6C,gBAV7C;AAEY,cAYA,QAZiB,EAAA,CAAA,KAAa,EAYX,KAZW,EAE1C,GAAA,OAAA;AAEY,cAeA,iBAf8B,EAAA,CAAA,KAE1C,EAAA,MAAA,EAAA,GAaiD,SAbjD,GAAA,IAAA;AAEY,cA+BA,qBA/BiC,EAAA,CAAA,KAAA,EAAA,MAE7C,EAAA,GA6BqD,KA7BrD;AAEY,cA+CA,qBA/CwB,EAAA,CAAA,KAAA,EA+CQ,KA/CR,EAAA,GAAA,MAAA,GA+CyB,gBA/CzB;AAOxB,cAwDA,oBAxDqC,EAAA,CAAA,GAAS,EAAA,MAAA,EAAA,GAwDR,SAxDQ"}

142
node_modules/@clerk/shared/dist/runtime/color.js generated vendored Normal file
View File

@@ -0,0 +1,142 @@
//#region src/color.ts
const IS_HEX_COLOR_REGEX = /^#?([A-F0-9]{6}|[A-F0-9]{3})$/i;
const IS_RGB_COLOR_REGEX = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/i;
const IS_RGBA_COLOR_REGEX = /^rgba\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+(\.\d+)?)\)$/i;
const IS_HSL_COLOR_REGEX = /^hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)$/i;
const IS_HSLA_COLOR_REGEX = /^hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%(,\s*\d+(\.\d+)?)*\)$/i;
const isValidHexString = (s) => {
return !!s.match(IS_HEX_COLOR_REGEX);
};
const isValidRgbaString = (s) => {
return !!(s.match(IS_RGB_COLOR_REGEX) || s.match(IS_RGBA_COLOR_REGEX));
};
const isValidHslaString = (s) => {
return !!s.match(IS_HSL_COLOR_REGEX) || !!s.match(IS_HSLA_COLOR_REGEX);
};
const isRGBColor = (c) => {
return typeof c !== "string" && "r" in c;
};
const isHSLColor = (c) => {
return typeof c !== "string" && "h" in c;
};
const isTransparent = (c) => {
return c === "transparent";
};
const hasAlpha = (color) => {
return typeof color !== "string" && color.a != void 0 && color.a < 1;
};
const CLEAN_HSLA_REGEX = /[hsla()]/g;
const CLEAN_RGBA_REGEX = /[rgba()]/g;
const stringToHslaColor = (value) => {
if (value === "transparent") return {
h: 0,
s: 0,
l: 0,
a: 0
};
if (isValidHexString(value)) return hexStringToHslaColor(value);
if (isValidHslaString(value)) return parseHslaString(value);
if (isValidRgbaString(value)) return rgbaStringToHslaColor(value);
return null;
};
const stringToSameTypeColor = (value) => {
value = value.trim();
if (isValidHexString(value)) return value.startsWith("#") ? value : `#${value}`;
if (isValidRgbaString(value)) return parseRgbaString(value);
if (isValidHslaString(value)) return parseHslaString(value);
if (isTransparent(value)) return value;
return "";
};
const colorToSameTypeString = (color) => {
if (typeof color === "string" && (isValidHexString(color) || isTransparent(color))) return color;
if (isRGBColor(color)) return rgbaColorToRgbaString(color);
if (isHSLColor(color)) return hslaColorToHslaString(color);
return "";
};
const hexStringToRgbaColor = (hex) => {
hex = hex.replace("#", "");
return {
r: parseInt(hex.substring(0, 2), 16),
g: parseInt(hex.substring(2, 4), 16),
b: parseInt(hex.substring(4, 6), 16)
};
};
const rgbaColorToRgbaString = (color) => {
const { a, b, g, r } = color;
return color.a === 0 ? "transparent" : color.a != void 0 ? `rgba(${r},${g},${b},${a})` : `rgb(${r},${g},${b})`;
};
const hslaColorToHslaString = (color) => {
const { h, s, l, a } = color;
const sPerc = Math.round(s * 100);
const lPerc = Math.round(l * 100);
return color.a === 0 ? "transparent" : color.a != void 0 ? `hsla(${h},${sPerc}%,${lPerc}%,${a})` : `hsl(${h},${sPerc}%,${lPerc}%)`;
};
const hexStringToHslaColor = (hex) => {
return rgbaStringToHslaColor(colorToSameTypeString(hexStringToRgbaColor(hex)));
};
const rgbaStringToHslaColor = (rgba) => {
const rgbaColor = parseRgbaString(rgba);
const r = rgbaColor.r / 255;
const g = rgbaColor.g / 255;
const b = rgbaColor.b / 255;
const max = Math.max(r, g, b), min = Math.min(r, g, b);
let h, s;
const l = (max + min) / 2;
if (max == min) h = s = 0;
else {
const d = max - min;
s = l >= .5 ? d / (2 - (max + min)) : d / (max + min);
switch (max) {
case r:
h = (g - b) / d * 60;
break;
case g:
h = ((b - r) / d + 2) * 60;
break;
default:
h = ((r - g) / d + 4) * 60;
break;
}
}
const res = {
h: Math.round(h),
s,
l
};
const a = rgbaColor.a;
if (a != void 0) res.a = a;
return res;
};
const parseRgbaString = (str) => {
const [r, g, b, a] = str.replace(CLEAN_RGBA_REGEX, "").split(",").map((c) => Number.parseFloat(c));
return {
r,
g,
b,
a
};
};
const parseHslaString = (str) => {
const [h, s, l, a] = str.replace(CLEAN_HSLA_REGEX, "").split(",").map((c) => Number.parseFloat(c));
return {
h,
s: s / 100,
l: l / 100,
a
};
};
//#endregion
exports.colorToSameTypeString = colorToSameTypeString;
exports.hasAlpha = hasAlpha;
exports.hexStringToRgbaColor = hexStringToRgbaColor;
exports.isHSLColor = isHSLColor;
exports.isRGBColor = isRGBColor;
exports.isTransparent = isTransparent;
exports.isValidHexString = isValidHexString;
exports.isValidHslaString = isValidHslaString;
exports.isValidRgbaString = isValidRgbaString;
exports.stringToHslaColor = stringToHslaColor;
exports.stringToSameTypeColor = stringToSameTypeColor;
//# sourceMappingURL=color.js.map

1
node_modules/@clerk/shared/dist/runtime/color.js.map generated vendored Normal file

File diff suppressed because one or more lines are too long

131
node_modules/@clerk/shared/dist/runtime/color.mjs generated vendored Normal file
View File

@@ -0,0 +1,131 @@
//#region src/color.ts
const IS_HEX_COLOR_REGEX = /^#?([A-F0-9]{6}|[A-F0-9]{3})$/i;
const IS_RGB_COLOR_REGEX = /^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/i;
const IS_RGBA_COLOR_REGEX = /^rgba\((\d+),\s*(\d+),\s*(\d+)(,\s*\d+(\.\d+)?)\)$/i;
const IS_HSL_COLOR_REGEX = /^hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)$/i;
const IS_HSLA_COLOR_REGEX = /^hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%(,\s*\d+(\.\d+)?)*\)$/i;
const isValidHexString = (s) => {
return !!s.match(IS_HEX_COLOR_REGEX);
};
const isValidRgbaString = (s) => {
return !!(s.match(IS_RGB_COLOR_REGEX) || s.match(IS_RGBA_COLOR_REGEX));
};
const isValidHslaString = (s) => {
return !!s.match(IS_HSL_COLOR_REGEX) || !!s.match(IS_HSLA_COLOR_REGEX);
};
const isRGBColor = (c) => {
return typeof c !== "string" && "r" in c;
};
const isHSLColor = (c) => {
return typeof c !== "string" && "h" in c;
};
const isTransparent = (c) => {
return c === "transparent";
};
const hasAlpha = (color) => {
return typeof color !== "string" && color.a != void 0 && color.a < 1;
};
const CLEAN_HSLA_REGEX = /[hsla()]/g;
const CLEAN_RGBA_REGEX = /[rgba()]/g;
const stringToHslaColor = (value) => {
if (value === "transparent") return {
h: 0,
s: 0,
l: 0,
a: 0
};
if (isValidHexString(value)) return hexStringToHslaColor(value);
if (isValidHslaString(value)) return parseHslaString(value);
if (isValidRgbaString(value)) return rgbaStringToHslaColor(value);
return null;
};
const stringToSameTypeColor = (value) => {
value = value.trim();
if (isValidHexString(value)) return value.startsWith("#") ? value : `#${value}`;
if (isValidRgbaString(value)) return parseRgbaString(value);
if (isValidHslaString(value)) return parseHslaString(value);
if (isTransparent(value)) return value;
return "";
};
const colorToSameTypeString = (color) => {
if (typeof color === "string" && (isValidHexString(color) || isTransparent(color))) return color;
if (isRGBColor(color)) return rgbaColorToRgbaString(color);
if (isHSLColor(color)) return hslaColorToHslaString(color);
return "";
};
const hexStringToRgbaColor = (hex) => {
hex = hex.replace("#", "");
return {
r: parseInt(hex.substring(0, 2), 16),
g: parseInt(hex.substring(2, 4), 16),
b: parseInt(hex.substring(4, 6), 16)
};
};
const rgbaColorToRgbaString = (color) => {
const { a, b, g, r } = color;
return color.a === 0 ? "transparent" : color.a != void 0 ? `rgba(${r},${g},${b},${a})` : `rgb(${r},${g},${b})`;
};
const hslaColorToHslaString = (color) => {
const { h, s, l, a } = color;
const sPerc = Math.round(s * 100);
const lPerc = Math.round(l * 100);
return color.a === 0 ? "transparent" : color.a != void 0 ? `hsla(${h},${sPerc}%,${lPerc}%,${a})` : `hsl(${h},${sPerc}%,${lPerc}%)`;
};
const hexStringToHslaColor = (hex) => {
return rgbaStringToHslaColor(colorToSameTypeString(hexStringToRgbaColor(hex)));
};
const rgbaStringToHslaColor = (rgba) => {
const rgbaColor = parseRgbaString(rgba);
const r = rgbaColor.r / 255;
const g = rgbaColor.g / 255;
const b = rgbaColor.b / 255;
const max = Math.max(r, g, b), min = Math.min(r, g, b);
let h, s;
const l = (max + min) / 2;
if (max == min) h = s = 0;
else {
const d = max - min;
s = l >= .5 ? d / (2 - (max + min)) : d / (max + min);
switch (max) {
case r:
h = (g - b) / d * 60;
break;
case g:
h = ((b - r) / d + 2) * 60;
break;
default:
h = ((r - g) / d + 4) * 60;
break;
}
}
const res = {
h: Math.round(h),
s,
l
};
const a = rgbaColor.a;
if (a != void 0) res.a = a;
return res;
};
const parseRgbaString = (str) => {
const [r, g, b, a] = str.replace(CLEAN_RGBA_REGEX, "").split(",").map((c) => Number.parseFloat(c));
return {
r,
g,
b,
a
};
};
const parseHslaString = (str) => {
const [h, s, l, a] = str.replace(CLEAN_HSLA_REGEX, "").split(",").map((c) => Number.parseFloat(c));
return {
h,
s: s / 100,
l: l / 100,
a
};
};
//#endregion
export { colorToSameTypeString, hasAlpha, hexStringToRgbaColor, isHSLColor, isRGBColor, isTransparent, isValidHexString, isValidHslaString, isValidRgbaString, stringToHslaColor, stringToSameTypeColor };
//# sourceMappingURL=color.mjs.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,60 @@
//#region src/internal/clerk-js/passwords/complexity.ts
const createTestComplexityCases = (config) => {
let specialCharsRegex;
if (config.allowed_special_characters) {
let escaped = config.allowed_special_characters.replace("[", "\\[");
escaped = escaped.replace("]", "\\]");
specialCharsRegex = /* @__PURE__ */ new RegExp(`[${escaped}]`);
} else specialCharsRegex = /[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/;
return (password, { minLength, maxLength }) => {
return {
max_length: password.length < maxLength,
min_length: password.length >= minLength,
require_numbers: /\d/.test(password),
require_lowercase: /[a-z]/.test(password),
require_uppercase: /[A-Z]/.test(password),
require_special_char: specialCharsRegex.test(password)
};
};
};
const validate = (password, config) => {
const { max_length, min_length, require_special_char, require_lowercase, require_numbers, require_uppercase } = config;
const testCases = createTestComplexityCases(config)(password, {
maxLength: config.max_length,
minLength: config.min_length
});
const keys = {
max_length,
min_length,
require_special_char,
require_lowercase,
require_numbers,
require_uppercase
};
const _validationsFailedMap = /* @__PURE__ */ new Map();
for (const k in keys) {
const key = k;
if (!keys[key]) continue;
if (!testCases[key]) _validationsFailedMap.set(key, true);
}
return Object.freeze(Object.fromEntries(_validationsFailedMap));
};
const createValidateComplexity = (config) => {
return (password) => validate(password, config);
};
//#endregion
Object.defineProperty(exports, 'createValidateComplexity', {
enumerable: true,
get: function () {
return createValidateComplexity;
}
});
Object.defineProperty(exports, 'validate', {
enumerable: true,
get: function () {
return validate;
}
});
//# sourceMappingURL=complexity-DEun2UD2.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"complexity-DEun2UD2.js","names":["specialCharsRegex: RegExp"],"sources":["../../src/internal/clerk-js/passwords/complexity.ts"],"sourcesContent":["import type { PasswordSettingsData } from '@/types';\n\nexport type ComplexityErrors = {\n [key in keyof Partial<Omit<PasswordSettingsData, 'disable_hibp' | 'min_zxcvbn_strength' | 'show_zxcvbn'>>]?: boolean;\n};\n\nexport type UsePasswordComplexityConfig = Omit<\n PasswordSettingsData,\n 'disable_hibp' | 'min_zxcvbn_strength' | 'show_zxcvbn'\n>;\n\nconst createTestComplexityCases = (config: Pick<UsePasswordComplexityConfig, 'allowed_special_characters'>) => {\n let specialCharsRegex: RegExp;\n if (config.allowed_special_characters) {\n // Avoid a nested group by escaping the `[]` characters\n let escaped = config.allowed_special_characters.replace('[', '\\\\[');\n escaped = escaped.replace(']', '\\\\]');\n specialCharsRegex = new RegExp(`[${escaped}]`);\n } else {\n specialCharsRegex = /[!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]/;\n }\n\n return (\n password: string,\n {\n minLength,\n maxLength,\n }: {\n minLength: number;\n maxLength: number;\n },\n ) => {\n return {\n max_length: password.length < maxLength,\n min_length: password.length >= minLength,\n require_numbers: /\\d/.test(password),\n require_lowercase: /[a-z]/.test(password),\n require_uppercase: /[A-Z]/.test(password),\n require_special_char: specialCharsRegex.test(password),\n };\n };\n};\n\nexport const validate = (password: string, config: UsePasswordComplexityConfig): ComplexityErrors => {\n const { max_length, min_length, require_special_char, require_lowercase, require_numbers, require_uppercase } =\n config;\n const testComplexityCases = createTestComplexityCases(config);\n const testCases = testComplexityCases(password, {\n maxLength: config.max_length,\n minLength: config.min_length,\n });\n\n const keys = {\n max_length,\n min_length,\n require_special_char,\n require_lowercase,\n require_numbers,\n require_uppercase,\n };\n\n const _validationsFailedMap = new Map();\n for (const k in keys) {\n const key = k as keyof typeof keys;\n\n if (!keys[key]) {\n continue;\n }\n\n if (!testCases[key]) {\n _validationsFailedMap.set(key, true);\n }\n }\n\n return Object.freeze(Object.fromEntries(_validationsFailedMap));\n};\n\nexport const createValidateComplexity = (config: UsePasswordComplexityConfig) => {\n return (password: string) => validate(password, config);\n};\n"],"mappings":";;AAWA,MAAM,6BAA6B,WAA4E;CAC7G,IAAIA;AACJ,KAAI,OAAO,4BAA4B;EAErC,IAAI,UAAU,OAAO,2BAA2B,QAAQ,KAAK,MAAM;AACnE,YAAU,QAAQ,QAAQ,KAAK,MAAM;AACrC,sCAAoB,IAAI,OAAO,IAAI,QAAQ,GAAG;OAE9C,qBAAoB;AAGtB,SACE,UACA,EACE,WACA,gBAKC;AACH,SAAO;GACL,YAAY,SAAS,SAAS;GAC9B,YAAY,SAAS,UAAU;GAC/B,iBAAiB,KAAK,KAAK,SAAS;GACpC,mBAAmB,QAAQ,KAAK,SAAS;GACzC,mBAAmB,QAAQ,KAAK,SAAS;GACzC,sBAAsB,kBAAkB,KAAK,SAAS;GACvD;;;AAIL,MAAa,YAAY,UAAkB,WAA0D;CACnG,MAAM,EAAE,YAAY,YAAY,sBAAsB,mBAAmB,iBAAiB,sBACxF;CAEF,MAAM,YADsB,0BAA0B,OAAO,CACvB,UAAU;EAC9C,WAAW,OAAO;EAClB,WAAW,OAAO;EACnB,CAAC;CAEF,MAAM,OAAO;EACX;EACA;EACA;EACA;EACA;EACA;EACD;CAED,MAAM,wCAAwB,IAAI,KAAK;AACvC,MAAK,MAAM,KAAK,MAAM;EACpB,MAAM,MAAM;AAEZ,MAAI,CAAC,KAAK,KACR;AAGF,MAAI,CAAC,UAAU,KACb,uBAAsB,IAAI,KAAK,KAAK;;AAIxC,QAAO,OAAO,OAAO,OAAO,YAAY,sBAAsB,CAAC;;AAGjE,MAAa,4BAA4B,WAAwC;AAC/E,SAAQ,aAAqB,SAAS,UAAU,OAAO"}

View File

@@ -0,0 +1,48 @@
//#region src/internal/clerk-js/passwords/complexity.ts
const createTestComplexityCases = (config) => {
let specialCharsRegex;
if (config.allowed_special_characters) {
let escaped = config.allowed_special_characters.replace("[", "\\[");
escaped = escaped.replace("]", "\\]");
specialCharsRegex = /* @__PURE__ */ new RegExp(`[${escaped}]`);
} else specialCharsRegex = /[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]/;
return (password, { minLength, maxLength }) => {
return {
max_length: password.length < maxLength,
min_length: password.length >= minLength,
require_numbers: /\d/.test(password),
require_lowercase: /[a-z]/.test(password),
require_uppercase: /[A-Z]/.test(password),
require_special_char: specialCharsRegex.test(password)
};
};
};
const validate = (password, config) => {
const { max_length, min_length, require_special_char, require_lowercase, require_numbers, require_uppercase } = config;
const testCases = createTestComplexityCases(config)(password, {
maxLength: config.max_length,
minLength: config.min_length
});
const keys = {
max_length,
min_length,
require_special_char,
require_lowercase,
require_numbers,
require_uppercase
};
const _validationsFailedMap = /* @__PURE__ */ new Map();
for (const k in keys) {
const key = k;
if (!keys[key]) continue;
if (!testCases[key]) _validationsFailedMap.set(key, true);
}
return Object.freeze(Object.fromEntries(_validationsFailedMap));
};
const createValidateComplexity = (config) => {
return (password) => validate(password, config);
};
//#endregion
export { validate as n, createValidateComplexity as t };
//# sourceMappingURL=complexity-DydNJOmy.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"complexity-DydNJOmy.mjs","names":["specialCharsRegex: RegExp"],"sources":["../../src/internal/clerk-js/passwords/complexity.ts"],"sourcesContent":["import type { PasswordSettingsData } from '@/types';\n\nexport type ComplexityErrors = {\n [key in keyof Partial<Omit<PasswordSettingsData, 'disable_hibp' | 'min_zxcvbn_strength' | 'show_zxcvbn'>>]?: boolean;\n};\n\nexport type UsePasswordComplexityConfig = Omit<\n PasswordSettingsData,\n 'disable_hibp' | 'min_zxcvbn_strength' | 'show_zxcvbn'\n>;\n\nconst createTestComplexityCases = (config: Pick<UsePasswordComplexityConfig, 'allowed_special_characters'>) => {\n let specialCharsRegex: RegExp;\n if (config.allowed_special_characters) {\n // Avoid a nested group by escaping the `[]` characters\n let escaped = config.allowed_special_characters.replace('[', '\\\\[');\n escaped = escaped.replace(']', '\\\\]');\n specialCharsRegex = new RegExp(`[${escaped}]`);\n } else {\n specialCharsRegex = /[!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~]/;\n }\n\n return (\n password: string,\n {\n minLength,\n maxLength,\n }: {\n minLength: number;\n maxLength: number;\n },\n ) => {\n return {\n max_length: password.length < maxLength,\n min_length: password.length >= minLength,\n require_numbers: /\\d/.test(password),\n require_lowercase: /[a-z]/.test(password),\n require_uppercase: /[A-Z]/.test(password),\n require_special_char: specialCharsRegex.test(password),\n };\n };\n};\n\nexport const validate = (password: string, config: UsePasswordComplexityConfig): ComplexityErrors => {\n const { max_length, min_length, require_special_char, require_lowercase, require_numbers, require_uppercase } =\n config;\n const testComplexityCases = createTestComplexityCases(config);\n const testCases = testComplexityCases(password, {\n maxLength: config.max_length,\n minLength: config.min_length,\n });\n\n const keys = {\n max_length,\n min_length,\n require_special_char,\n require_lowercase,\n require_numbers,\n require_uppercase,\n };\n\n const _validationsFailedMap = new Map();\n for (const k in keys) {\n const key = k as keyof typeof keys;\n\n if (!keys[key]) {\n continue;\n }\n\n if (!testCases[key]) {\n _validationsFailedMap.set(key, true);\n }\n }\n\n return Object.freeze(Object.fromEntries(_validationsFailedMap));\n};\n\nexport const createValidateComplexity = (config: UsePasswordComplexityConfig) => {\n return (password: string) => validate(password, config);\n};\n"],"mappings":";AAWA,MAAM,6BAA6B,WAA4E;CAC7G,IAAIA;AACJ,KAAI,OAAO,4BAA4B;EAErC,IAAI,UAAU,OAAO,2BAA2B,QAAQ,KAAK,MAAM;AACnE,YAAU,QAAQ,QAAQ,KAAK,MAAM;AACrC,sCAAoB,IAAI,OAAO,IAAI,QAAQ,GAAG;OAE9C,qBAAoB;AAGtB,SACE,UACA,EACE,WACA,gBAKC;AACH,SAAO;GACL,YAAY,SAAS,SAAS;GAC9B,YAAY,SAAS,UAAU;GAC/B,iBAAiB,KAAK,KAAK,SAAS;GACpC,mBAAmB,QAAQ,KAAK,SAAS;GACzC,mBAAmB,QAAQ,KAAK,SAAS;GACzC,sBAAsB,kBAAkB,KAAK,SAAS;GACvD;;;AAIL,MAAa,YAAY,UAAkB,WAA0D;CACnG,MAAM,EAAE,YAAY,YAAY,sBAAsB,mBAAmB,iBAAiB,sBACxF;CAEF,MAAM,YADsB,0BAA0B,OAAO,CACvB,UAAU;EAC9C,WAAW,OAAO;EAClB,WAAW,OAAO;EACnB,CAAC;CAEF,MAAM,OAAO;EACX;EACA;EACA;EACA;EACA;EACA;EACD;CAED,MAAM,wCAAwB,IAAI,KAAK;AACvC,MAAK,MAAM,KAAK,MAAM;EACpB,MAAM,MAAM;AAEZ,MAAI,CAAC,KAAK,KACR;AAGF,MAAI,CAAC,UAAU,KACb,uBAAsB,IAAI,KAAK,KAAK;;AAIxC,QAAO,OAAO,OAAO,OAAO,YAAY,sBAAsB,CAAC;;AAGjE,MAAa,4BAA4B,WAAwC;AAC/E,SAAQ,aAAqB,SAAS,UAAU,OAAO"}

View File

@@ -0,0 +1,155 @@
//#region src/internal/clerk-js/constants.ts
const PRESERVED_QUERYSTRING_PARAMS = [
"redirect_url",
"after_sign_in_url",
"after_sign_up_url",
"sign_in_force_redirect_url",
"sign_in_fallback_redirect_url",
"sign_up_force_redirect_url",
"sign_up_fallback_redirect_url"
];
const CLERK_MODAL_STATE = "__clerk_modal_state";
const CLERK_SYNCED = "__clerk_synced";
const CLERK_SYNCED_STATUS = {
NeedsSync: "false",
Completed: "true"
};
const CLERK_SUFFIXED_COOKIES = "suffixed_cookies";
const CLERK_SATELLITE_URL = "__clerk_satellite_url";
const ERROR_CODES = {
FORM_IDENTIFIER_NOT_FOUND: "form_identifier_not_found",
FORM_PASSWORD_INCORRECT: "form_password_incorrect",
FORM_PASSWORD_PWNED: "form_password_pwned",
INVALID_STRATEGY_FOR_USER: "strategy_for_user_invalid",
NOT_ALLOWED_TO_SIGN_UP: "not_allowed_to_sign_up",
OAUTH_ACCESS_DENIED: "oauth_access_denied",
OAUTH_EMAIL_DOMAIN_RESERVED_BY_SAML: "oauth_email_domain_reserved_by_saml",
NOT_ALLOWED_ACCESS: "not_allowed_access",
SAML_USER_ATTRIBUTE_MISSING: "saml_user_attribute_missing",
USER_LOCKED: "user_locked",
EXTERNAL_ACCOUNT_NOT_FOUND: "external_account_not_found",
SESSION_EXISTS: "session_exists",
SIGN_UP_MODE_RESTRICTED: "sign_up_mode_restricted",
SIGN_UP_MODE_RESTRICTED_WAITLIST: "sign_up_restricted_waitlist",
ENTERPRISE_SSO_USER_ATTRIBUTE_MISSING: "enterprise_sso_user_attribute_missing",
ENTERPRISE_SSO_EMAIL_ADDRESS_DOMAIN_MISMATCH: "enterprise_sso_email_address_domain_mismatch",
ENTERPRISE_SSO_HOSTED_DOMAIN_MISMATCH: "enterprise_sso_hosted_domain_mismatch",
SAML_EMAIL_ADDRESS_DOMAIN_MISMATCH: "saml_email_address_domain_mismatch",
INVITATION_ACCOUNT_NOT_EXISTS: "invitation_account_not_exists",
ORGANIZATION_MEMBERSHIP_QUOTA_EXCEEDED_FOR_SSO: "organization_membership_quota_exceeded_for_sso",
CAPTCHA_INVALID: "captcha_invalid",
FRAUD_DEVICE_BLOCKED: "device_blocked",
FRAUD_ACTION_BLOCKED: "action_blocked",
SIGNUP_RATE_LIMIT_EXCEEDED: "signup_rate_limit_exceeded",
USER_BANNED: "user_banned",
USER_DEACTIVATED: "user_deactivated"
};
const SIGN_IN_INITIAL_VALUE_KEYS = [
"email_address",
"phone_number",
"username"
];
const SIGN_UP_INITIAL_VALUE_KEYS = [
"email_address",
"phone_number",
"username",
"first_name",
"last_name"
];
const DEBOUNCE_MS = 350;
const SIGN_UP_MODES = {
PUBLIC: "public",
RESTRICTED: "restricted",
WAITLIST: "waitlist"
};
const SUPPORTED_FAPI_VERSION = "2025-11-10";
const CAPTCHA_ELEMENT_ID = "clerk-captcha";
const CAPTCHA_INVISIBLE_CLASSNAME = "clerk-invisible-captcha";
//#endregion
Object.defineProperty(exports, 'CAPTCHA_ELEMENT_ID', {
enumerable: true,
get: function () {
return CAPTCHA_ELEMENT_ID;
}
});
Object.defineProperty(exports, 'CAPTCHA_INVISIBLE_CLASSNAME', {
enumerable: true,
get: function () {
return CAPTCHA_INVISIBLE_CLASSNAME;
}
});
Object.defineProperty(exports, 'CLERK_MODAL_STATE', {
enumerable: true,
get: function () {
return CLERK_MODAL_STATE;
}
});
Object.defineProperty(exports, 'CLERK_SATELLITE_URL', {
enumerable: true,
get: function () {
return CLERK_SATELLITE_URL;
}
});
Object.defineProperty(exports, 'CLERK_SUFFIXED_COOKIES', {
enumerable: true,
get: function () {
return CLERK_SUFFIXED_COOKIES;
}
});
Object.defineProperty(exports, 'CLERK_SYNCED', {
enumerable: true,
get: function () {
return CLERK_SYNCED;
}
});
Object.defineProperty(exports, 'CLERK_SYNCED_STATUS', {
enumerable: true,
get: function () {
return CLERK_SYNCED_STATUS;
}
});
Object.defineProperty(exports, 'DEBOUNCE_MS', {
enumerable: true,
get: function () {
return DEBOUNCE_MS;
}
});
Object.defineProperty(exports, 'ERROR_CODES', {
enumerable: true,
get: function () {
return ERROR_CODES;
}
});
Object.defineProperty(exports, 'PRESERVED_QUERYSTRING_PARAMS', {
enumerable: true,
get: function () {
return PRESERVED_QUERYSTRING_PARAMS;
}
});
Object.defineProperty(exports, 'SIGN_IN_INITIAL_VALUE_KEYS', {
enumerable: true,
get: function () {
return SIGN_IN_INITIAL_VALUE_KEYS;
}
});
Object.defineProperty(exports, 'SIGN_UP_INITIAL_VALUE_KEYS', {
enumerable: true,
get: function () {
return SIGN_UP_INITIAL_VALUE_KEYS;
}
});
Object.defineProperty(exports, 'SIGN_UP_MODES', {
enumerable: true,
get: function () {
return SIGN_UP_MODES;
}
});
Object.defineProperty(exports, 'SUPPORTED_FAPI_VERSION', {
enumerable: true,
get: function () {
return SUPPORTED_FAPI_VERSION;
}
});
//# sourceMappingURL=constants-BUzkV8jh.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants-BUzkV8jh.js","names":[],"sources":["../../src/internal/clerk-js/constants.ts"],"sourcesContent":["import type { SignUpModes } from '../../types';\n\n// TODO: Do we still have a use for this or can we simply preserve all params?\nexport const PRESERVED_QUERYSTRING_PARAMS = [\n 'redirect_url',\n 'after_sign_in_url',\n 'after_sign_up_url',\n 'sign_in_force_redirect_url',\n 'sign_in_fallback_redirect_url',\n 'sign_up_force_redirect_url',\n 'sign_up_fallback_redirect_url',\n];\n\nexport const CLERK_MODAL_STATE = '__clerk_modal_state';\nexport const CLERK_SYNCED = '__clerk_synced';\nexport const CLERK_SYNCED_STATUS = {\n /** Not synced - satellite needs handshake after returning from primary sign-in */\n NeedsSync: 'false',\n /** Sync completed - prevents re-sync loop after handshake completes */\n Completed: 'true',\n} as const;\nexport const CLERK_SUFFIXED_COOKIES = 'suffixed_cookies';\nexport const CLERK_SATELLITE_URL = '__clerk_satellite_url';\nexport const ERROR_CODES = {\n FORM_IDENTIFIER_NOT_FOUND: 'form_identifier_not_found',\n FORM_PASSWORD_INCORRECT: 'form_password_incorrect',\n FORM_PASSWORD_PWNED: 'form_password_pwned',\n INVALID_STRATEGY_FOR_USER: 'strategy_for_user_invalid',\n NOT_ALLOWED_TO_SIGN_UP: 'not_allowed_to_sign_up',\n OAUTH_ACCESS_DENIED: 'oauth_access_denied',\n OAUTH_EMAIL_DOMAIN_RESERVED_BY_SAML: 'oauth_email_domain_reserved_by_saml',\n NOT_ALLOWED_ACCESS: 'not_allowed_access',\n SAML_USER_ATTRIBUTE_MISSING: 'saml_user_attribute_missing',\n USER_LOCKED: 'user_locked',\n EXTERNAL_ACCOUNT_NOT_FOUND: 'external_account_not_found',\n SESSION_EXISTS: 'session_exists',\n SIGN_UP_MODE_RESTRICTED: 'sign_up_mode_restricted',\n SIGN_UP_MODE_RESTRICTED_WAITLIST: 'sign_up_restricted_waitlist',\n ENTERPRISE_SSO_USER_ATTRIBUTE_MISSING: 'enterprise_sso_user_attribute_missing',\n ENTERPRISE_SSO_EMAIL_ADDRESS_DOMAIN_MISMATCH: 'enterprise_sso_email_address_domain_mismatch',\n ENTERPRISE_SSO_HOSTED_DOMAIN_MISMATCH: 'enterprise_sso_hosted_domain_mismatch',\n SAML_EMAIL_ADDRESS_DOMAIN_MISMATCH: 'saml_email_address_domain_mismatch',\n INVITATION_ACCOUNT_NOT_EXISTS: 'invitation_account_not_exists',\n ORGANIZATION_MEMBERSHIP_QUOTA_EXCEEDED_FOR_SSO: 'organization_membership_quota_exceeded_for_sso',\n CAPTCHA_INVALID: 'captcha_invalid',\n FRAUD_DEVICE_BLOCKED: 'device_blocked',\n FRAUD_ACTION_BLOCKED: 'action_blocked',\n SIGNUP_RATE_LIMIT_EXCEEDED: 'signup_rate_limit_exceeded',\n USER_BANNED: 'user_banned',\n USER_DEACTIVATED: 'user_deactivated',\n} as const;\n\nexport const SIGN_IN_INITIAL_VALUE_KEYS = ['email_address', 'phone_number', 'username'];\nexport const SIGN_UP_INITIAL_VALUE_KEYS = ['email_address', 'phone_number', 'username', 'first_name', 'last_name'];\n\nexport const DEBOUNCE_MS = 350;\n\nexport const SIGN_UP_MODES = {\n PUBLIC: 'public',\n RESTRICTED: 'restricted',\n WAITLIST: 'waitlist',\n} satisfies Record<string, SignUpModes>;\n\n// This is the currently supported version of the Frontend API\nexport const SUPPORTED_FAPI_VERSION = '2025-11-10';\n\nexport const CAPTCHA_ELEMENT_ID = 'clerk-captcha';\nexport const CAPTCHA_INVISIBLE_CLASSNAME = 'clerk-invisible-captcha';\n"],"mappings":";;AAGA,MAAa,+BAA+B;CAC1C;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,oBAAoB;AACjC,MAAa,eAAe;AAC5B,MAAa,sBAAsB;CAEjC,WAAW;CAEX,WAAW;CACZ;AACD,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AACnC,MAAa,cAAc;CACzB,2BAA2B;CAC3B,yBAAyB;CACzB,qBAAqB;CACrB,2BAA2B;CAC3B,wBAAwB;CACxB,qBAAqB;CACrB,qCAAqC;CACrC,oBAAoB;CACpB,6BAA6B;CAC7B,aAAa;CACb,4BAA4B;CAC5B,gBAAgB;CAChB,yBAAyB;CACzB,kCAAkC;CAClC,uCAAuC;CACvC,8CAA8C;CAC9C,uCAAuC;CACvC,oCAAoC;CACpC,+BAA+B;CAC/B,gDAAgD;CAChD,iBAAiB;CACjB,sBAAsB;CACtB,sBAAsB;CACtB,4BAA4B;CAC5B,aAAa;CACb,kBAAkB;CACnB;AAED,MAAa,6BAA6B;CAAC;CAAiB;CAAgB;CAAW;AACvF,MAAa,6BAA6B;CAAC;CAAiB;CAAgB;CAAY;CAAc;CAAY;AAElH,MAAa,cAAc;AAE3B,MAAa,gBAAgB;CAC3B,QAAQ;CACR,YAAY;CACZ,UAAU;CACX;AAGD,MAAa,yBAAyB;AAEtC,MAAa,qBAAqB;AAClC,MAAa,8BAA8B"}

View File

@@ -0,0 +1,47 @@
//#region src/constants.ts
const LEGACY_DEV_INSTANCE_SUFFIXES = [
".lcl.dev",
".lclstage.dev",
".lclclerk.com"
];
const CURRENT_DEV_INSTANCE_SUFFIXES = [
".accounts.dev",
".accountsstage.dev",
".accounts.lclclerk.com"
];
const DEV_OR_STAGING_SUFFIXES = [
".lcl.dev",
".stg.dev",
".lclstage.dev",
".stgstage.dev",
".dev.lclclerk.com",
".stg.lclclerk.com",
".accounts.lclclerk.com",
"accountsstage.dev",
"accounts.dev"
];
const LOCAL_ENV_SUFFIXES = [
".lcl.dev",
"lclstage.dev",
".lclclerk.com",
".accounts.lclclerk.com"
];
const STAGING_ENV_SUFFIXES = [".accountsstage.dev"];
const LOCAL_API_URL = "https://api.lclclerk.com";
const STAGING_API_URL = "https://api.clerkstage.dev";
const PROD_API_URL = "https://api.clerk.com";
const LOCAL_FAPI_URL = "https://frontend-api.lclclerk.com";
const STAGING_FAPI_URL = "https://frontend-api.clerkstage.dev";
const PROD_FAPI_URL = "https://frontend-api.clerk.dev";
const DEFAULT_PROXY_PATH = "/__clerk";
/**
* Returns the URL for a static image
* using the new img.clerk.com service
*/
function iconImageUrl(id, format = "svg") {
return `https://img.clerk.com/static/${id}.${format}`;
}
//#endregion
export { LOCAL_API_URL as a, PROD_API_URL as c, STAGING_ENV_SUFFIXES as d, STAGING_FAPI_URL as f, LEGACY_DEV_INSTANCE_SUFFIXES as i, PROD_FAPI_URL as l, DEFAULT_PROXY_PATH as n, LOCAL_ENV_SUFFIXES as o, iconImageUrl as p, DEV_OR_STAGING_SUFFIXES as r, LOCAL_FAPI_URL as s, CURRENT_DEV_INSTANCE_SUFFIXES as t, STAGING_API_URL as u };
//# sourceMappingURL=constants-Bta24VLk.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants-Bta24VLk.mjs","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["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\nexport const LOCAL_FAPI_URL = 'https://frontend-api.lclclerk.com';\nexport const STAGING_FAPI_URL = 'https://frontend-api.clerkstage.dev';\nexport const PROD_FAPI_URL = 'https://frontend-api.clerk.dev';\n\nexport const DEFAULT_PROXY_PATH = '/__clerk';\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"],"mappings":";AAAA,MAAa,+BAA+B;CAAC;CAAY;CAAiB;CAAgB;AAC1F,MAAa,gCAAgC;CAAC;CAAiB;CAAsB;CAAyB;AAC9G,MAAa,0BAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAa,qBAAqB;CAAC;CAAY;CAAgB;CAAiB;CAAyB;AACzG,MAAa,uBAAuB,CAAC,qBAAqB;AAC1D,MAAa,gBAAgB;AAC7B,MAAa,kBAAkB;AAC/B,MAAa,eAAe;AAE5B,MAAa,iBAAiB;AAC9B,MAAa,mBAAmB;AAChC,MAAa,gBAAgB;AAE7B,MAAa,qBAAqB;;;;;AAMlC,SAAgB,aAAa,IAAY,SAAyB,OAAe;AAC/E,QAAO,gCAAgC,GAAG,GAAG"}

View File

@@ -0,0 +1,71 @@
//#region src/internal/clerk-js/constants.ts
const PRESERVED_QUERYSTRING_PARAMS = [
"redirect_url",
"after_sign_in_url",
"after_sign_up_url",
"sign_in_force_redirect_url",
"sign_in_fallback_redirect_url",
"sign_up_force_redirect_url",
"sign_up_fallback_redirect_url"
];
const CLERK_MODAL_STATE = "__clerk_modal_state";
const CLERK_SYNCED = "__clerk_synced";
const CLERK_SYNCED_STATUS = {
NeedsSync: "false",
Completed: "true"
};
const CLERK_SUFFIXED_COOKIES = "suffixed_cookies";
const CLERK_SATELLITE_URL = "__clerk_satellite_url";
const ERROR_CODES = {
FORM_IDENTIFIER_NOT_FOUND: "form_identifier_not_found",
FORM_PASSWORD_INCORRECT: "form_password_incorrect",
FORM_PASSWORD_PWNED: "form_password_pwned",
INVALID_STRATEGY_FOR_USER: "strategy_for_user_invalid",
NOT_ALLOWED_TO_SIGN_UP: "not_allowed_to_sign_up",
OAUTH_ACCESS_DENIED: "oauth_access_denied",
OAUTH_EMAIL_DOMAIN_RESERVED_BY_SAML: "oauth_email_domain_reserved_by_saml",
NOT_ALLOWED_ACCESS: "not_allowed_access",
SAML_USER_ATTRIBUTE_MISSING: "saml_user_attribute_missing",
USER_LOCKED: "user_locked",
EXTERNAL_ACCOUNT_NOT_FOUND: "external_account_not_found",
SESSION_EXISTS: "session_exists",
SIGN_UP_MODE_RESTRICTED: "sign_up_mode_restricted",
SIGN_UP_MODE_RESTRICTED_WAITLIST: "sign_up_restricted_waitlist",
ENTERPRISE_SSO_USER_ATTRIBUTE_MISSING: "enterprise_sso_user_attribute_missing",
ENTERPRISE_SSO_EMAIL_ADDRESS_DOMAIN_MISMATCH: "enterprise_sso_email_address_domain_mismatch",
ENTERPRISE_SSO_HOSTED_DOMAIN_MISMATCH: "enterprise_sso_hosted_domain_mismatch",
SAML_EMAIL_ADDRESS_DOMAIN_MISMATCH: "saml_email_address_domain_mismatch",
INVITATION_ACCOUNT_NOT_EXISTS: "invitation_account_not_exists",
ORGANIZATION_MEMBERSHIP_QUOTA_EXCEEDED_FOR_SSO: "organization_membership_quota_exceeded_for_sso",
CAPTCHA_INVALID: "captcha_invalid",
FRAUD_DEVICE_BLOCKED: "device_blocked",
FRAUD_ACTION_BLOCKED: "action_blocked",
SIGNUP_RATE_LIMIT_EXCEEDED: "signup_rate_limit_exceeded",
USER_BANNED: "user_banned",
USER_DEACTIVATED: "user_deactivated"
};
const SIGN_IN_INITIAL_VALUE_KEYS = [
"email_address",
"phone_number",
"username"
];
const SIGN_UP_INITIAL_VALUE_KEYS = [
"email_address",
"phone_number",
"username",
"first_name",
"last_name"
];
const DEBOUNCE_MS = 350;
const SIGN_UP_MODES = {
PUBLIC: "public",
RESTRICTED: "restricted",
WAITLIST: "waitlist"
};
const SUPPORTED_FAPI_VERSION = "2025-11-10";
const CAPTCHA_ELEMENT_ID = "clerk-captcha";
const CAPTCHA_INVISIBLE_CLASSNAME = "clerk-invisible-captcha";
//#endregion
export { CLERK_SUFFIXED_COOKIES as a, DEBOUNCE_MS as c, SIGN_IN_INITIAL_VALUE_KEYS as d, SIGN_UP_INITIAL_VALUE_KEYS as f, CLERK_SATELLITE_URL as i, ERROR_CODES as l, SUPPORTED_FAPI_VERSION as m, CAPTCHA_INVISIBLE_CLASSNAME as n, CLERK_SYNCED as o, SIGN_UP_MODES as p, CLERK_MODAL_STATE as r, CLERK_SYNCED_STATUS as s, CAPTCHA_ELEMENT_ID as t, PRESERVED_QUERYSTRING_PARAMS as u };
//# sourceMappingURL=constants-BulbbNR9.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants-BulbbNR9.mjs","names":[],"sources":["../../src/internal/clerk-js/constants.ts"],"sourcesContent":["import type { SignUpModes } from '../../types';\n\n// TODO: Do we still have a use for this or can we simply preserve all params?\nexport const PRESERVED_QUERYSTRING_PARAMS = [\n 'redirect_url',\n 'after_sign_in_url',\n 'after_sign_up_url',\n 'sign_in_force_redirect_url',\n 'sign_in_fallback_redirect_url',\n 'sign_up_force_redirect_url',\n 'sign_up_fallback_redirect_url',\n];\n\nexport const CLERK_MODAL_STATE = '__clerk_modal_state';\nexport const CLERK_SYNCED = '__clerk_synced';\nexport const CLERK_SYNCED_STATUS = {\n /** Not synced - satellite needs handshake after returning from primary sign-in */\n NeedsSync: 'false',\n /** Sync completed - prevents re-sync loop after handshake completes */\n Completed: 'true',\n} as const;\nexport const CLERK_SUFFIXED_COOKIES = 'suffixed_cookies';\nexport const CLERK_SATELLITE_URL = '__clerk_satellite_url';\nexport const ERROR_CODES = {\n FORM_IDENTIFIER_NOT_FOUND: 'form_identifier_not_found',\n FORM_PASSWORD_INCORRECT: 'form_password_incorrect',\n FORM_PASSWORD_PWNED: 'form_password_pwned',\n INVALID_STRATEGY_FOR_USER: 'strategy_for_user_invalid',\n NOT_ALLOWED_TO_SIGN_UP: 'not_allowed_to_sign_up',\n OAUTH_ACCESS_DENIED: 'oauth_access_denied',\n OAUTH_EMAIL_DOMAIN_RESERVED_BY_SAML: 'oauth_email_domain_reserved_by_saml',\n NOT_ALLOWED_ACCESS: 'not_allowed_access',\n SAML_USER_ATTRIBUTE_MISSING: 'saml_user_attribute_missing',\n USER_LOCKED: 'user_locked',\n EXTERNAL_ACCOUNT_NOT_FOUND: 'external_account_not_found',\n SESSION_EXISTS: 'session_exists',\n SIGN_UP_MODE_RESTRICTED: 'sign_up_mode_restricted',\n SIGN_UP_MODE_RESTRICTED_WAITLIST: 'sign_up_restricted_waitlist',\n ENTERPRISE_SSO_USER_ATTRIBUTE_MISSING: 'enterprise_sso_user_attribute_missing',\n ENTERPRISE_SSO_EMAIL_ADDRESS_DOMAIN_MISMATCH: 'enterprise_sso_email_address_domain_mismatch',\n ENTERPRISE_SSO_HOSTED_DOMAIN_MISMATCH: 'enterprise_sso_hosted_domain_mismatch',\n SAML_EMAIL_ADDRESS_DOMAIN_MISMATCH: 'saml_email_address_domain_mismatch',\n INVITATION_ACCOUNT_NOT_EXISTS: 'invitation_account_not_exists',\n ORGANIZATION_MEMBERSHIP_QUOTA_EXCEEDED_FOR_SSO: 'organization_membership_quota_exceeded_for_sso',\n CAPTCHA_INVALID: 'captcha_invalid',\n FRAUD_DEVICE_BLOCKED: 'device_blocked',\n FRAUD_ACTION_BLOCKED: 'action_blocked',\n SIGNUP_RATE_LIMIT_EXCEEDED: 'signup_rate_limit_exceeded',\n USER_BANNED: 'user_banned',\n USER_DEACTIVATED: 'user_deactivated',\n} as const;\n\nexport const SIGN_IN_INITIAL_VALUE_KEYS = ['email_address', 'phone_number', 'username'];\nexport const SIGN_UP_INITIAL_VALUE_KEYS = ['email_address', 'phone_number', 'username', 'first_name', 'last_name'];\n\nexport const DEBOUNCE_MS = 350;\n\nexport const SIGN_UP_MODES = {\n PUBLIC: 'public',\n RESTRICTED: 'restricted',\n WAITLIST: 'waitlist',\n} satisfies Record<string, SignUpModes>;\n\n// This is the currently supported version of the Frontend API\nexport const SUPPORTED_FAPI_VERSION = '2025-11-10';\n\nexport const CAPTCHA_ELEMENT_ID = 'clerk-captcha';\nexport const CAPTCHA_INVISIBLE_CLASSNAME = 'clerk-invisible-captcha';\n"],"mappings":";AAGA,MAAa,+BAA+B;CAC1C;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,oBAAoB;AACjC,MAAa,eAAe;AAC5B,MAAa,sBAAsB;CAEjC,WAAW;CAEX,WAAW;CACZ;AACD,MAAa,yBAAyB;AACtC,MAAa,sBAAsB;AACnC,MAAa,cAAc;CACzB,2BAA2B;CAC3B,yBAAyB;CACzB,qBAAqB;CACrB,2BAA2B;CAC3B,wBAAwB;CACxB,qBAAqB;CACrB,qCAAqC;CACrC,oBAAoB;CACpB,6BAA6B;CAC7B,aAAa;CACb,4BAA4B;CAC5B,gBAAgB;CAChB,yBAAyB;CACzB,kCAAkC;CAClC,uCAAuC;CACvC,8CAA8C;CAC9C,uCAAuC;CACvC,oCAAoC;CACpC,+BAA+B;CAC/B,gDAAgD;CAChD,iBAAiB;CACjB,sBAAsB;CACtB,sBAAsB;CACtB,4BAA4B;CAC5B,aAAa;CACb,kBAAkB;CACnB;AAED,MAAa,6BAA6B;CAAC;CAAiB;CAAgB;CAAW;AACvF,MAAa,6BAA6B;CAAC;CAAiB;CAAgB;CAAY;CAAc;CAAY;AAElH,MAAa,cAAc;AAE3B,MAAa,gBAAgB;CAC3B,QAAQ;CACR,YAAY;CACZ,UAAU;CACX;AAGD,MAAa,yBAAyB;AAEtC,MAAa,qBAAqB;AAClC,MAAa,8BAA8B"}

View File

@@ -0,0 +1,125 @@
//#region src/constants.ts
const LEGACY_DEV_INSTANCE_SUFFIXES = [
".lcl.dev",
".lclstage.dev",
".lclclerk.com"
];
const CURRENT_DEV_INSTANCE_SUFFIXES = [
".accounts.dev",
".accountsstage.dev",
".accounts.lclclerk.com"
];
const DEV_OR_STAGING_SUFFIXES = [
".lcl.dev",
".stg.dev",
".lclstage.dev",
".stgstage.dev",
".dev.lclclerk.com",
".stg.lclclerk.com",
".accounts.lclclerk.com",
"accountsstage.dev",
"accounts.dev"
];
const LOCAL_ENV_SUFFIXES = [
".lcl.dev",
"lclstage.dev",
".lclclerk.com",
".accounts.lclclerk.com"
];
const STAGING_ENV_SUFFIXES = [".accountsstage.dev"];
const LOCAL_API_URL = "https://api.lclclerk.com";
const STAGING_API_URL = "https://api.clerkstage.dev";
const PROD_API_URL = "https://api.clerk.com";
const LOCAL_FAPI_URL = "https://frontend-api.lclclerk.com";
const STAGING_FAPI_URL = "https://frontend-api.clerkstage.dev";
const PROD_FAPI_URL = "https://frontend-api.clerk.dev";
const DEFAULT_PROXY_PATH = "/__clerk";
/**
* Returns the URL for a static image
* using the new img.clerk.com service
*/
function iconImageUrl(id, format = "svg") {
return `https://img.clerk.com/static/${id}.${format}`;
}
//#endregion
Object.defineProperty(exports, 'CURRENT_DEV_INSTANCE_SUFFIXES', {
enumerable: true,
get: function () {
return CURRENT_DEV_INSTANCE_SUFFIXES;
}
});
Object.defineProperty(exports, 'DEFAULT_PROXY_PATH', {
enumerable: true,
get: function () {
return DEFAULT_PROXY_PATH;
}
});
Object.defineProperty(exports, 'DEV_OR_STAGING_SUFFIXES', {
enumerable: true,
get: function () {
return DEV_OR_STAGING_SUFFIXES;
}
});
Object.defineProperty(exports, 'LEGACY_DEV_INSTANCE_SUFFIXES', {
enumerable: true,
get: function () {
return LEGACY_DEV_INSTANCE_SUFFIXES;
}
});
Object.defineProperty(exports, 'LOCAL_API_URL', {
enumerable: true,
get: function () {
return LOCAL_API_URL;
}
});
Object.defineProperty(exports, 'LOCAL_ENV_SUFFIXES', {
enumerable: true,
get: function () {
return LOCAL_ENV_SUFFIXES;
}
});
Object.defineProperty(exports, 'LOCAL_FAPI_URL', {
enumerable: true,
get: function () {
return LOCAL_FAPI_URL;
}
});
Object.defineProperty(exports, 'PROD_API_URL', {
enumerable: true,
get: function () {
return PROD_API_URL;
}
});
Object.defineProperty(exports, 'PROD_FAPI_URL', {
enumerable: true,
get: function () {
return PROD_FAPI_URL;
}
});
Object.defineProperty(exports, 'STAGING_API_URL', {
enumerable: true,
get: function () {
return STAGING_API_URL;
}
});
Object.defineProperty(exports, 'STAGING_ENV_SUFFIXES', {
enumerable: true,
get: function () {
return STAGING_ENV_SUFFIXES;
}
});
Object.defineProperty(exports, 'STAGING_FAPI_URL', {
enumerable: true,
get: function () {
return STAGING_FAPI_URL;
}
});
Object.defineProperty(exports, 'iconImageUrl', {
enumerable: true,
get: function () {
return iconImageUrl;
}
});
//# sourceMappingURL=constants-WYhx_umW.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants-WYhx_umW.js","names":[],"sources":["../../src/constants.ts"],"sourcesContent":["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\nexport const LOCAL_FAPI_URL = 'https://frontend-api.lclclerk.com';\nexport const STAGING_FAPI_URL = 'https://frontend-api.clerkstage.dev';\nexport const PROD_FAPI_URL = 'https://frontend-api.clerk.dev';\n\nexport const DEFAULT_PROXY_PATH = '/__clerk';\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"],"mappings":";;AAAA,MAAa,+BAA+B;CAAC;CAAY;CAAiB;CAAgB;AAC1F,MAAa,gCAAgC;CAAC;CAAiB;CAAsB;CAAyB;AAC9G,MAAa,0BAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAa,qBAAqB;CAAC;CAAY;CAAgB;CAAiB;CAAyB;AACzG,MAAa,uBAAuB,CAAC,qBAAqB;AAC1D,MAAa,gBAAgB;AAC7B,MAAa,kBAAkB;AAC/B,MAAa,eAAe;AAE5B,MAAa,iBAAiB;AAC9B,MAAa,mBAAmB;AAChC,MAAa,gBAAgB;AAE7B,MAAa,qBAAqB;;;;;AAMlC,SAAgB,aAAa,IAAY,SAAyB,OAAe;AAC/E,QAAO,gCAAgC,GAAG,GAAG"}

View File

@@ -0,0 +1,21 @@
//#region src/constants.d.ts
declare const LEGACY_DEV_INSTANCE_SUFFIXES: string[];
declare const CURRENT_DEV_INSTANCE_SUFFIXES: string[];
declare const DEV_OR_STAGING_SUFFIXES: string[];
declare const LOCAL_ENV_SUFFIXES: string[];
declare const STAGING_ENV_SUFFIXES: string[];
declare const LOCAL_API_URL = "https://api.lclclerk.com";
declare const STAGING_API_URL = "https://api.clerkstage.dev";
declare const PROD_API_URL = "https://api.clerk.com";
declare const LOCAL_FAPI_URL = "https://frontend-api.lclclerk.com";
declare const STAGING_FAPI_URL = "https://frontend-api.clerkstage.dev";
declare const PROD_FAPI_URL = "https://frontend-api.clerk.dev";
declare const DEFAULT_PROXY_PATH = "/__clerk";
/**
* Returns the URL for a static image
* using the new img.clerk.com service
*/
declare function iconImageUrl(id: string, format?: 'svg' | 'jpeg'): string;
//#endregion
export { CURRENT_DEV_INSTANCE_SUFFIXES, DEFAULT_PROXY_PATH, DEV_OR_STAGING_SUFFIXES, LEGACY_DEV_INSTANCE_SUFFIXES, LOCAL_API_URL, LOCAL_ENV_SUFFIXES, LOCAL_FAPI_URL, PROD_API_URL, PROD_FAPI_URL, STAGING_API_URL, STAGING_ENV_SUFFIXES, STAGING_FAPI_URL, iconImageUrl };
//# sourceMappingURL=constants.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants.d.mts","names":[],"sources":["../../src/constants.ts"],"sourcesContent":[],"mappings":";cAAa;AAAA,cACA,6BAD6E,EAAA,MAAA,EAAA;AAC7E,cACA,uBADiG,EAAA,MAAA,EAAA;AACjG,cAWA,kBADZ,EAAA,MAAA,EAAA;AACY,cACA,oBAD4F,EAAA,MAAA,EAAA;AAC5F,cACA,aAAA,GAD6C,0BAAA;AAC7C,cACA,eAAA,GADa,4BAAA;AACb,cACA,YAAA,GADe,uBAAA;AACf,cAEA,cAAA,GAFY,mCAAA;AAEZ,cACA,gBAAA,GADc,qCAAA;AACd,cACA,aAAA,GADgB,gCAAA;AAChB,cAEA,kBAAA,GAFa,UAAA;AAE1B;AAMA;;;iBAAgB,YAAA"}

21
node_modules/@clerk/shared/dist/runtime/constants.d.ts generated vendored Normal file
View File

@@ -0,0 +1,21 @@
//#region src/constants.d.ts
declare const LEGACY_DEV_INSTANCE_SUFFIXES: string[];
declare const CURRENT_DEV_INSTANCE_SUFFIXES: string[];
declare const DEV_OR_STAGING_SUFFIXES: string[];
declare const LOCAL_ENV_SUFFIXES: string[];
declare const STAGING_ENV_SUFFIXES: string[];
declare const LOCAL_API_URL = "https://api.lclclerk.com";
declare const STAGING_API_URL = "https://api.clerkstage.dev";
declare const PROD_API_URL = "https://api.clerk.com";
declare const LOCAL_FAPI_URL = "https://frontend-api.lclclerk.com";
declare const STAGING_FAPI_URL = "https://frontend-api.clerkstage.dev";
declare const PROD_FAPI_URL = "https://frontend-api.clerk.dev";
declare const DEFAULT_PROXY_PATH = "/__clerk";
/**
* Returns the URL for a static image
* using the new img.clerk.com service
*/
declare function iconImageUrl(id: string, format?: 'svg' | 'jpeg'): string;
//#endregion
export { CURRENT_DEV_INSTANCE_SUFFIXES, DEFAULT_PROXY_PATH, DEV_OR_STAGING_SUFFIXES, LEGACY_DEV_INSTANCE_SUFFIXES, LOCAL_API_URL, LOCAL_ENV_SUFFIXES, LOCAL_FAPI_URL, PROD_API_URL, PROD_FAPI_URL, STAGING_API_URL, STAGING_ENV_SUFFIXES, STAGING_FAPI_URL, iconImageUrl };
//# sourceMappingURL=constants.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants.d.ts","names":[],"sources":["../../src/constants.ts"],"sourcesContent":[],"mappings":";cAAa;AAAA,cACA,6BAD6E,EAAA,MAAA,EAAA;AAC7E,cACA,uBADiG,EAAA,MAAA,EAAA;AACjG,cAWA,kBADZ,EAAA,MAAA,EAAA;AACY,cACA,oBAD4F,EAAA,MAAA,EAAA;AAC5F,cACA,aAAA,GAD6C,0BAAA;AAC7C,cACA,eAAA,GADa,4BAAA;AACb,cACA,YAAA,GADe,uBAAA;AACf,cAEA,cAAA,GAFY,mCAAA;AAEZ,cACA,gBAAA,GADc,qCAAA;AACd,cACA,aAAA,GADgB,gCAAA;AAChB,cAEA,kBAAA,GAFa,UAAA;AAE1B;AAMA;;;iBAAgB,YAAA"}

15
node_modules/@clerk/shared/dist/runtime/constants.js generated vendored Normal file
View File

@@ -0,0 +1,15 @@
const require_constants = require('./constants-WYhx_umW.js');
exports.CURRENT_DEV_INSTANCE_SUFFIXES = require_constants.CURRENT_DEV_INSTANCE_SUFFIXES;
exports.DEFAULT_PROXY_PATH = require_constants.DEFAULT_PROXY_PATH;
exports.DEV_OR_STAGING_SUFFIXES = require_constants.DEV_OR_STAGING_SUFFIXES;
exports.LEGACY_DEV_INSTANCE_SUFFIXES = require_constants.LEGACY_DEV_INSTANCE_SUFFIXES;
exports.LOCAL_API_URL = require_constants.LOCAL_API_URL;
exports.LOCAL_ENV_SUFFIXES = require_constants.LOCAL_ENV_SUFFIXES;
exports.LOCAL_FAPI_URL = require_constants.LOCAL_FAPI_URL;
exports.PROD_API_URL = require_constants.PROD_API_URL;
exports.PROD_FAPI_URL = require_constants.PROD_FAPI_URL;
exports.STAGING_API_URL = require_constants.STAGING_API_URL;
exports.STAGING_ENV_SUFFIXES = require_constants.STAGING_ENV_SUFFIXES;
exports.STAGING_FAPI_URL = require_constants.STAGING_FAPI_URL;
exports.iconImageUrl = require_constants.iconImageUrl;

View File

@@ -0,0 +1,3 @@
import { a as LOCAL_API_URL, c as PROD_API_URL, d as STAGING_ENV_SUFFIXES, f as STAGING_FAPI_URL, i as LEGACY_DEV_INSTANCE_SUFFIXES, l as PROD_FAPI_URL, n as DEFAULT_PROXY_PATH, o as LOCAL_ENV_SUFFIXES, p as iconImageUrl, r as DEV_OR_STAGING_SUFFIXES, s as LOCAL_FAPI_URL, t as CURRENT_DEV_INSTANCE_SUFFIXES, u as STAGING_API_URL } from "./constants-Bta24VLk.mjs";
export { CURRENT_DEV_INSTANCE_SUFFIXES, DEFAULT_PROXY_PATH, DEV_OR_STAGING_SUFFIXES, LEGACY_DEV_INSTANCE_SUFFIXES, LOCAL_API_URL, LOCAL_ENV_SUFFIXES, LOCAL_FAPI_URL, PROD_API_URL, PROD_FAPI_URL, STAGING_API_URL, STAGING_ENV_SUFFIXES, STAGING_FAPI_URL, iconImageUrl };

30
node_modules/@clerk/shared/dist/runtime/cookie.d.mts generated vendored Normal file
View File

@@ -0,0 +1,30 @@
//#region src/cookie.d.ts
/**
* Creates helper methods for dealing with a specific cookie.
*
* @example
* ```ts
* const cookie = createCookieHandler('my_cookie')
*
* cookie.set('my_value');
* cookie.get() // 'my_value';
* cookie.remove()
* ```
*/
declare function createCookieHandler(cookieName: string): {
get(): string | undefined;
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options?: Cookies.CookieAttributes): void;
/**
* On removing a cookie, you have to pass the exact same path/domain attributes used to set it initially
* > IMPORTANT! When deleting a cookie and you're not relying on the default attributes, you must pass the exact same path, domain, secure and sameSite attributes that were used to set the cookie.
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes): void;
};
//#endregion
export { createCookieHandler };
//# sourceMappingURL=cookie.d.mts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cookie.d.mts","names":[],"sources":["../../src/cookie.ts"],"sourcesContent":[],"mappings":";;AAcA;;;;;;;;;;;iBAAgB,mBAAA;;;;;kCAQmB,OAAA,CAAQ;;;;;;;4BASb,OAAA,CAAQ"}

30
node_modules/@clerk/shared/dist/runtime/cookie.d.ts generated vendored Normal file
View File

@@ -0,0 +1,30 @@
//#region src/cookie.d.ts
/**
* Creates helper methods for dealing with a specific cookie.
*
* @example
* ```ts
* const cookie = createCookieHandler('my_cookie')
*
* cookie.set('my_value');
* cookie.get() // 'my_value';
* cookie.remove()
* ```
*/
declare function createCookieHandler(cookieName: string): {
get(): string | undefined;
/**
* Setting a cookie will use some defaults such as path being set to "/".
*/
set(newValue: string, options?: Cookies.CookieAttributes): void;
/**
* On removing a cookie, you have to pass the exact same path/domain attributes used to set it initially
* > IMPORTANT! When deleting a cookie and you're not relying on the default attributes, you must pass the exact same path, domain, secure and sameSite attributes that were used to set the cookie.
*
* @see https://github.com/js-cookie/js-cookie#basic-usage
*/
remove(cookieAttributes?: Cookies.CookieAttributes): void;
};
//#endregion
export { createCookieHandler };
//# sourceMappingURL=cookie.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cookie.d.ts","names":[],"sources":["../../src/cookie.ts"],"sourcesContent":[],"mappings":";;AAcA;;;;;;;;;;;iBAAgB,mBAAA;;;;;kCAQmB,OAAA,CAAQ;;;;;;;4BASb,OAAA,CAAQ"}

34
node_modules/@clerk/shared/dist/runtime/cookie.js generated vendored Normal file
View File

@@ -0,0 +1,34 @@
const require_chunk = require('./chunk-nOFOJqeH.js');
let js_cookie = require("js-cookie");
js_cookie = require_chunk.__toESM(js_cookie);
//#region src/cookie.ts
/**
* Creates helper methods for dealing with a specific cookie.
*
* @example
* ```ts
* const cookie = createCookieHandler('my_cookie')
*
* cookie.set('my_value');
* cookie.get() // 'my_value';
* cookie.remove()
* ```
*/
function createCookieHandler(cookieName) {
return {
get() {
return js_cookie.default.get(cookieName);
},
set(newValue, options = {}) {
js_cookie.default.set(cookieName, newValue, options);
},
remove(cookieAttributes) {
js_cookie.default.remove(cookieName, cookieAttributes);
}
};
}
//#endregion
exports.createCookieHandler = createCookieHandler;
//# sourceMappingURL=cookie.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cookie.js","names":["Cookies"],"sources":["../../src/cookie.ts"],"sourcesContent":["import Cookies from 'js-cookie';\n\n/**\n * Creates helper methods for dealing with a specific cookie.\n *\n * @example\n * ```ts\n * const cookie = createCookieHandler('my_cookie')\n *\n * cookie.set('my_value');\n * cookie.get() // 'my_value';\n * cookie.remove()\n * ```\n */\nexport function createCookieHandler(cookieName: string) {\n return {\n get() {\n return Cookies.get(cookieName);\n },\n /**\n * Setting a cookie will use some defaults such as path being set to \"/\".\n */\n set(newValue: string, options: Cookies.CookieAttributes = {}): void {\n Cookies.set(cookieName, newValue, options);\n },\n /**\n * On removing a cookie, you have to pass the exact same path/domain attributes used to set it initially\n * > IMPORTANT! When deleting a cookie and you're not relying on the default attributes, you must pass the exact same path, domain, secure and sameSite attributes that were used to set the cookie.\n *\n * @see https://github.com/js-cookie/js-cookie#basic-usage\n */\n remove(cookieAttributes?: Cookies.CookieAttributes) {\n Cookies.remove(cookieName, cookieAttributes);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAcA,SAAgB,oBAAoB,YAAoB;AACtD,QAAO;EACL,MAAM;AACJ,UAAOA,kBAAQ,IAAI,WAAW;;EAKhC,IAAI,UAAkB,UAAoC,EAAE,EAAQ;AAClE,qBAAQ,IAAI,YAAY,UAAU,QAAQ;;EAQ5C,OAAO,kBAA6C;AAClD,qBAAQ,OAAO,YAAY,iBAAiB;;EAE/C"}

32
node_modules/@clerk/shared/dist/runtime/cookie.mjs generated vendored Normal file
View File

@@ -0,0 +1,32 @@
import Cookies from "js-cookie";
//#region src/cookie.ts
/**
* Creates helper methods for dealing with a specific cookie.
*
* @example
* ```ts
* const cookie = createCookieHandler('my_cookie')
*
* cookie.set('my_value');
* cookie.get() // 'my_value';
* cookie.remove()
* ```
*/
function createCookieHandler(cookieName) {
return {
get() {
return Cookies.get(cookieName);
},
set(newValue, options = {}) {
Cookies.set(cookieName, newValue, options);
},
remove(cookieAttributes) {
Cookies.remove(cookieName, cookieAttributes);
}
};
}
//#endregion
export { createCookieHandler };
//# sourceMappingURL=cookie.mjs.map

Some files were not shown because too many files have changed in this diff Show More