UNPKG

clerk-solidjs

Version:
1,259 lines (1,243 loc) 40.4 kB
'use strict'; var web = require('solid-js/web'); var destructure = require('@solid-primitives/destructure'); var solidJs = require('solid-js'); var keys = require('@clerk/shared/keys'); var error = require('@clerk/shared/error'); var context = require('@solid-primitives/context'); require('@clerk/shared/loadScript'); require('@clerk/shared/proxy'); require('@clerk/shared/url'); var shared = require('@clerk/shared'); var browser = require('@clerk/shared/browser'); var loadClerkJsScript = require('@clerk/shared/loadClerkJsScript'); var utils = require('@clerk/shared/utils'); var router = require('@solidjs/router'); var underscore = require('@clerk/shared/underscore'); var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null; // src/start/client/clerk-provider.tsx var errorThrower = error.buildErrorThrower({ packageName: "clerk-solidjs" }); // src/errors/messages.ts var multipleClerkProvidersError = "You've added multiple <ClerkProvider> components in your SolidJS component tree. Wrap your components in a single <ClerkProvider>."; var unsupportedNonBrowserDomainOrProxyUrlFunction = "Unsupported usage of isSatellite, domain or proxyUrl. The usage of isSatellite, domain or proxyUrl as function is not supported in non-browser environments."; function createContextProviderAndHook(name, factoryFn) { const [ContextProvider, useContextUnsafe] = context.createContextProvider(factoryFn); const useContext2 = () => { const ctx = useContextUnsafe(); if (ctx === undefined) { throw new Error(`${name} not found`); } return ctx; }; return [ContextProvider, useContext2, useContextUnsafe]; } // src/utils/is-constructor.ts function isConstructor(f) { return typeof f === "function"; } keys.createDevOrStagingUrlCache(); var counts = /* @__PURE__ */ new Map(); function useMaxAllowedInstancesGuard(props) { solidJs.createEffect(() => { const count = counts.get(props().name) || 0; if (count == (props().maxCount ?? 1)) { return errorThrower.throw(props().error); } counts.set(props().name, count + 1); solidJs.onCleanup(() => { counts.set(props().name, (counts.get(props().name) || 1) - 1); }); }); } function withMaxAllowedInstancesGuard(WrappedComponent, name, error) { const HOC = (props) => { useMaxAllowedInstancesGuard(() => ({ name, error })); return web.createComponent(WrappedComponent, props); }; return HOC; } if (typeof __BUILD_DISABLE_RHC__ === "undefined") { globalThis.__BUILD_DISABLE_RHC__ = false; } var SDK_METADATA = { name: "clerk-solidjs", version: "2.0.10", environment: "production" }; var IsomorphicClerk = class _IsomorphicClerk { mode; options; Clerk; clerkjs = null; preopenOneTap = null; preopenUserVerification = null; preopenSignIn = null; preopenSignUp = null; preopenUserProfile = null; preopenOrganizationProfile = null; preopenCreateOrganization = null; preOpenWaitlist = null; premountSignInNodes = /* @__PURE__ */ new Map(); premountSignUpNodes = /* @__PURE__ */ new Map(); premountUserProfileNodes = /* @__PURE__ */ new Map(); premountUserButtonNodes = /* @__PURE__ */ new Map(); premountOrganizationProfileNodes = /* @__PURE__ */ new Map(); premountCreateOrganizationNodes = /* @__PURE__ */ new Map(); premountOrganizationSwitcherNodes = /* @__PURE__ */ new Map(); premountOrganizationListNodes = /* @__PURE__ */ new Map(); premountMethodCalls = /* @__PURE__ */ new Map(); premountWaitlistNodes = /* @__PURE__ */ new Map(); // A separate Map of `addListener` method calls to handle multiple listeners. premountAddListenerCalls = /* @__PURE__ */ new Map(); loadedListeners = []; #loaded = false; #domain; #proxyUrl; #publishableKey; get publishableKey() { return this.#publishableKey; } get loaded() { return this.#loaded; } static #instance; static getOrCreateInstance(options) { if (!browser.inBrowser() || !this.#instance || options.Clerk && this.#instance.Clerk !== options.Clerk || // Allow hot swapping PKs on the client this.#instance.publishableKey !== options.publishableKey) { this.#instance = new _IsomorphicClerk(options); } return this.#instance; } static clearInstance() { this.#instance = null; } get domain() { if (typeof window !== "undefined" && window.location) { return utils.handleValueOrFn(this.#domain, new URL(window.location.href), ""); } if (typeof this.#domain === "function") { return errorThrower.throw(unsupportedNonBrowserDomainOrProxyUrlFunction); } return this.#domain || ""; } get proxyUrl() { if (typeof window !== "undefined" && window.location) { return utils.handleValueOrFn(this.#proxyUrl, new URL(window.location.href), ""); } if (typeof this.#proxyUrl === "function") { return errorThrower.throw(unsupportedNonBrowserDomainOrProxyUrlFunction); } return this.#proxyUrl || ""; } __internal_getOption(key) { return this.clerkjs?.__internal_getOption(key); } constructor(options) { const { Clerk = null, publishableKey } = options || {}; this.#publishableKey = publishableKey; this.#proxyUrl = options?.proxyUrl; this.#domain = options?.domain; this.options = options; this.Clerk = Clerk; this.mode = browser.inBrowser() ? "browser" : "server"; if (!this.options.sdkMetadata) { this.options.sdkMetadata = SDK_METADATA; } if (this.#publishableKey) { void this.loadClerkJS(); } } get sdkMetadata() { return this.clerkjs?.sdkMetadata || this.options.sdkMetadata || undefined; } get instanceType() { return this.clerkjs?.instanceType; } get frontendApi() { return this.clerkjs?.frontendApi || ""; } get isStandardBrowser() { return this.clerkjs?.isStandardBrowser || this.options.standardBrowser || false; } get isSatellite() { if (typeof window !== "undefined" && window.location) { return utils.handleValueOrFn( this.options.isSatellite, new URL(window.location.href), false ); } if (typeof this.options.isSatellite === "function") { return errorThrower.throw(unsupportedNonBrowserDomainOrProxyUrlFunction); } return false; } buildSignInUrl = (opts) => { const callback = () => this.clerkjs?.buildSignInUrl(opts) || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildSignInUrl", callback); } }; buildSignUpUrl = (opts) => { const callback = () => this.clerkjs?.buildSignUpUrl(opts) || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildSignUpUrl", callback); } }; buildAfterSignInUrl = () => { const callback = () => this.clerkjs?.buildAfterSignInUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildAfterSignInUrl", callback); } }; buildAfterSignUpUrl = () => { const callback = () => this.clerkjs?.buildAfterSignUpUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildAfterSignUpUrl", callback); } }; buildAfterSignOutUrl = () => { const callback = () => this.clerkjs?.buildAfterSignOutUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildAfterSignOutUrl", callback); } }; buildAfterMultiSessionSingleSignOutUrl = () => { const callback = () => this.clerkjs?.buildAfterMultiSessionSingleSignOutUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set( "buildAfterMultiSessionSingleSignOutUrl", callback ); } }; buildUserProfileUrl = () => { const callback = () => this.clerkjs?.buildUserProfileUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildUserProfileUrl", callback); } }; buildCreateOrganizationUrl = () => { const callback = () => this.clerkjs?.buildCreateOrganizationUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildCreateOrganizationUrl", callback); } }; buildOrganizationProfileUrl = () => { const callback = () => this.clerkjs?.buildOrganizationProfileUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildOrganizationProfileUrl", callback); } }; buildWaitlistUrl = () => { const callback = () => this.clerkjs?.buildWaitlistUrl() || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildWaitlistUrl", callback); } }; buildUrlWithAuth = (to) => { const callback = () => this.clerkjs?.buildUrlWithAuth(to) || ""; if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("buildUrlWithAuth", callback); } }; handleUnauthenticated = () => { const callback = () => this.clerkjs?.handleUnauthenticated(); if (this.clerkjs && this.#loaded) { void callback(); } else { this.premountMethodCalls.set("handleUnauthenticated", callback); } }; #waitForClerkJS() { return new Promise((resolve) => { this.addOnLoaded(() => resolve(this.clerkjs)); }); } async loadClerkJS() { if (this.mode !== "browser" || this.#loaded) { return; } if (typeof window !== "undefined") { window.__clerk_publishable_key = this.#publishableKey; window.__clerk_proxy_url = this.proxyUrl; window.__clerk_domain = this.domain; } try { if (this.Clerk) { let c; if (isConstructor(this.Clerk)) { c = new this.Clerk(this.#publishableKey, { proxyUrl: this.proxyUrl, domain: this.domain }); await c.load(this.options); } else { c = this.Clerk; if (!c.loaded) { await c.load(this.options); } } globalThis.Clerk = c; } else if (!__BUILD_DISABLE_RHC__) { if (!globalThis.Clerk) { await loadClerkJsScript.loadClerkJsScript({ ...this.options, publishableKey: this.#publishableKey, proxyUrl: this.proxyUrl, domain: this.domain, nonce: this.options.nonce }); } if (!globalThis.Clerk) { throw new Error( "Failed to download latest ClerkJS. Contact support@clerk.com." ); } await globalThis.Clerk.load(this.options); } if (globalThis.Clerk?.loaded) { return this.hydrateClerkJS(globalThis.Clerk); } return; } catch (err) { return; } } addOnLoaded = (cb) => { this.loadedListeners.push(cb); if (this.loaded) { this.emitLoaded(); } }; emitLoaded = () => { this.loadedListeners.forEach((cb) => cb()); this.loadedListeners = []; }; hydrateClerkJS = (clerkjs) => { if (!clerkjs) { throw new Error("Failed to hydrate latest Clerk JS"); } this.clerkjs = clerkjs; this.premountMethodCalls.forEach((cb) => cb()); this.premountAddListenerCalls.forEach((listenerHandlers, listener) => { listenerHandlers.nativeUnsubscribe = clerkjs.addListener(listener); }); if (this.preopenSignIn !== null) { clerkjs.openSignIn(this.preopenSignIn); } if (this.preopenSignUp !== null) { clerkjs.openSignUp(this.preopenSignUp); } if (this.preopenUserProfile !== null) { clerkjs.openUserProfile(this.preopenUserProfile); } if (this.preopenUserVerification !== null) { clerkjs.__internal_openReverification(this.preopenUserVerification); } if (this.preopenOneTap !== null) { clerkjs.openGoogleOneTap(this.preopenOneTap); } if (this.preopenOrganizationProfile !== null) { clerkjs.openOrganizationProfile(this.preopenOrganizationProfile); } if (this.preopenCreateOrganization !== null) { clerkjs.openCreateOrganization(this.preopenCreateOrganization); } if (this.preOpenWaitlist !== null) { clerkjs.openWaitlist(this.preOpenWaitlist); } this.premountSignInNodes.forEach( (props, node) => { clerkjs.mountSignIn(node, props); } ); this.premountSignUpNodes.forEach( (props, node) => { clerkjs.mountSignUp(node, props); } ); this.premountUserProfileNodes.forEach( (props, node) => { clerkjs.mountUserProfile(node, props); } ); this.premountUserButtonNodes.forEach( (props, node) => { clerkjs.mountUserButton(node, props); } ); this.premountOrganizationListNodes.forEach( (props, node) => { clerkjs.mountOrganizationList(node, props); } ); this.premountWaitlistNodes.forEach( (props, node) => { clerkjs.mountWaitlist(node, props); } ); this.#loaded = true; this.emitLoaded(); return this.clerkjs; }; get version() { return this.clerkjs?.version; } get client() { if (this.clerkjs) { return this.clerkjs.client; } else { return undefined; } } get session() { if (this.clerkjs) { return this.clerkjs.session; } else { return undefined; } } get user() { if (this.clerkjs) { return this.clerkjs.user; } else { return undefined; } } get organization() { if (this.clerkjs) { return this.clerkjs.organization; } else { return undefined; } } get telemetry() { if (this.clerkjs) { return this.clerkjs.telemetry; } else { return undefined; } } get __unstable__environment() { if (this.clerkjs) { return this.clerkjs.__unstable__environment; } else { return undefined; } } __unstable__setEnvironment(...args) { if (this.clerkjs && "__unstable__setEnvironment" in this.clerkjs) { this.clerkjs.__unstable__setEnvironment(args); } else { return undefined; } } __unstable__updateProps = async (props) => { const clerkjs = await this.#waitForClerkJS(); if (clerkjs && "__unstable__updateProps" in clerkjs) { return clerkjs.__unstable__updateProps(props); } }; /** * `setActive` can be used to set the active session and/or organization. */ setActive = ({ session, organization, beforeEmit, redirectUrl }) => { if (this.clerkjs) { return this.clerkjs.setActive({ session, organization, beforeEmit, redirectUrl }); } else { return Promise.reject(); } }; openSignIn = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.openSignIn(props); } else { this.preopenSignIn = props; } }; closeSignIn = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.closeSignIn(); } else { this.preopenSignIn = null; } }; __internal_openReverification = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.__internal_openReverification(props); } else { this.preopenUserVerification = props; } }; __internal_closeReverification = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.__internal_closeReverification(); } else { this.preopenUserVerification = null; } }; openGoogleOneTap = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.openGoogleOneTap(props); } else { this.preopenOneTap = props; } }; closeGoogleOneTap = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.closeGoogleOneTap(); } else { this.preopenOneTap = null; } }; openUserProfile = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.openUserProfile(props); } else { this.preopenUserProfile = props; } }; closeUserProfile = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.closeUserProfile(); } else { this.preopenUserProfile = null; } }; openOrganizationProfile = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.openOrganizationProfile(props); } else { this.preopenOrganizationProfile = props; } }; closeOrganizationProfile = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.closeOrganizationProfile(); } else { this.preopenOrganizationProfile = null; } }; openCreateOrganization = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.openCreateOrganization(props); } else { this.preopenCreateOrganization = props; } }; closeCreateOrganization = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.closeCreateOrganization(); } else { this.preopenCreateOrganization = null; } }; openWaitlist = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.openWaitlist(props); } else { this.preOpenWaitlist = props; } }; closeWaitlist = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.closeWaitlist(); } else { this.preOpenWaitlist = null; } }; openSignUp = (props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.openSignUp(props); } else { this.preopenSignUp = props; } }; closeSignUp = () => { if (this.clerkjs && this.#loaded) { this.clerkjs.closeSignUp(); } else { this.preopenSignUp = null; } }; mountSignIn = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountSignIn(node, props); } else { this.premountSignInNodes.set(node, props); } }; unmountSignIn = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountSignIn(node); } else { this.premountSignInNodes.delete(node); } }; mountSignUp = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountSignUp(node, props); } else { this.premountSignUpNodes.set(node, props); } }; unmountSignUp = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountSignUp(node); } else { this.premountSignUpNodes.delete(node); } }; mountUserProfile = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountUserProfile(node, props); } else { this.premountUserProfileNodes.set(node, props); } }; unmountUserProfile = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountUserProfile(node); } else { this.premountUserProfileNodes.delete(node); } }; mountOrganizationProfile = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountOrganizationProfile(node, props); } else { this.premountOrganizationProfileNodes.set(node, props); } }; unmountOrganizationProfile = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountOrganizationProfile(node); } else { this.premountOrganizationProfileNodes.delete(node); } }; mountCreateOrganization = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountCreateOrganization(node, props); } else { this.premountCreateOrganizationNodes.set(node, props); } }; unmountCreateOrganization = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountCreateOrganization(node); } else { this.premountCreateOrganizationNodes.delete(node); } }; mountOrganizationSwitcher = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountOrganizationSwitcher(node, props); } else { this.premountOrganizationSwitcherNodes.set(node, props); } }; unmountOrganizationSwitcher = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountOrganizationSwitcher(node); } else { this.premountOrganizationSwitcherNodes.delete(node); } }; __experimental_prefetchOrganizationSwitcher = () => { const callback = () => this.clerkjs?.__experimental_prefetchOrganizationSwitcher(); if (this.clerkjs && this.#loaded) { void callback(); } else { this.premountMethodCalls.set( "__experimental_prefetchOrganizationSwitcher", callback ); } }; mountOrganizationList = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountOrganizationList(node, props); } else { this.premountOrganizationListNodes.set(node, props); } }; unmountOrganizationList = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountOrganizationList(node); } else { this.premountOrganizationListNodes.delete(node); } }; mountUserButton = (node, userButtonProps) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountUserButton(node, userButtonProps); } else { this.premountUserButtonNodes.set(node, userButtonProps); } }; unmountUserButton = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountUserButton(node); } else { this.premountUserButtonNodes.delete(node); } }; mountWaitlist = (node, props) => { if (this.clerkjs && this.#loaded) { this.clerkjs.mountWaitlist(node, props); } else { this.premountWaitlistNodes.set(node, props); } }; unmountWaitlist = (node) => { if (this.clerkjs && this.#loaded) { this.clerkjs.unmountWaitlist(node); } else { this.premountWaitlistNodes.delete(node); } }; addListener = (listener) => { if (this.clerkjs) { return this.clerkjs.addListener(listener); } else { const unsubscribe = () => { const listenerHandlers = this.premountAddListenerCalls.get(listener); if (listenerHandlers) { listenerHandlers.nativeUnsubscribe?.(); this.premountAddListenerCalls.delete(listener); } }; this.premountAddListenerCalls.set(listener, { unsubscribe, nativeUnsubscribe: undefined }); return unsubscribe; } }; navigate = (to) => { const callback = () => this.clerkjs?.navigate(to); if (this.clerkjs && this.#loaded) { void callback(); } else { this.premountMethodCalls.set("navigate", callback); } }; redirectWithAuth = async (...args) => { const callback = () => this.clerkjs?.redirectWithAuth(...args); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectWithAuth", callback); return; } }; redirectToSignIn = async (opts) => { const callback = () => this.clerkjs?.redirectToSignIn(opts); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectToSignIn", callback); return; } }; redirectToSignUp = async (opts) => { const callback = () => this.clerkjs?.redirectToSignUp(opts); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectToSignUp", callback); return; } }; redirectToUserProfile = async () => { const callback = () => this.clerkjs?.redirectToUserProfile(); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectToUserProfile", callback); return; } }; redirectToAfterSignUp = () => { const callback = () => this.clerkjs?.redirectToAfterSignUp(); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectToAfterSignUp", callback); } }; redirectToAfterSignIn = () => { const callback = () => this.clerkjs?.redirectToAfterSignIn(); if (this.clerkjs && this.#loaded) { callback(); } else { this.premountMethodCalls.set("redirectToAfterSignIn", callback); } }; redirectToAfterSignOut = () => { const callback = () => this.clerkjs?.redirectToAfterSignOut(); if (this.clerkjs && this.#loaded) { callback(); } else { this.premountMethodCalls.set("redirectToAfterSignOut", callback); } }; redirectToOrganizationProfile = async () => { const callback = () => this.clerkjs?.redirectToOrganizationProfile(); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectToOrganizationProfile", callback); return; } }; redirectToCreateOrganization = async () => { const callback = () => this.clerkjs?.redirectToCreateOrganization(); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectToCreateOrganization", callback); return; } }; redirectToWaitlist = async () => { const callback = () => this.clerkjs?.redirectToWaitlist(); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("redirectToWaitlist", callback); return; } }; handleRedirectCallback = (params) => { const callback = () => this.clerkjs?.handleRedirectCallback(params); if (this.clerkjs && this.#loaded) { void callback()?.catch(() => { }); } else { this.premountMethodCalls.set("handleRedirectCallback", callback); } }; handleGoogleOneTapCallback = (signInOrUp, params) => { const callback = () => this.clerkjs?.handleGoogleOneTapCallback(signInOrUp, params); if (this.clerkjs && this.#loaded) { void callback()?.catch(() => { }); } else { this.premountMethodCalls.set("handleGoogleOneTapCallback", callback); } }; handleEmailLinkVerification = async (params) => { const callback = () => this.clerkjs?.handleEmailLinkVerification(params); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("handleEmailLinkVerification", callback); } }; authenticateWithMetamask = async (params) => { const callback = () => this.clerkjs?.authenticateWithMetamask(params); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("authenticateWithMetamask", callback); } }; authenticateWithCoinbaseWallet = async (params) => { const callback = () => this.clerkjs?.authenticateWithCoinbaseWallet(params); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("authenticateWithCoinbaseWallet", callback); } }; authenticateWithOKXWallet = async (params) => { const callback = () => this.clerkjs?.authenticateWithOKXWallet(params); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("authenticateWithOKXWallet", callback); } }; authenticateWithWeb3 = async (params) => { const callback = () => this.clerkjs?.authenticateWithWeb3(params); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("authenticateWithWeb3", callback); } }; authenticateWithGoogleOneTap = async (params) => { const clerkjs = await this.#waitForClerkJS(); return clerkjs.authenticateWithGoogleOneTap(params); }; createOrganization = async (params) => { const callback = () => this.clerkjs?.createOrganization(params); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("createOrganization", callback); } }; getOrganization = async (organizationId) => { const callback = () => this.clerkjs?.getOrganization(organizationId); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("getOrganization", callback); } }; joinWaitlist = async (params) => { const callback = () => this.clerkjs?.joinWaitlist(params); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("joinWaitlist", callback); } }; signOut = async (signOutCallbackOrOptions, options) => { const callback = () => this.clerkjs?.signOut(signOutCallbackOrOptions, options); if (this.clerkjs && this.#loaded) { return callback(); } else { this.premountMethodCalls.set("signOut", callback); } }; }; // src/contexts/auth.tsx var [AuthContextProvider, useAuthContext] = createContextProviderAndHook("AuthContext", (props) => { return { userId: props.userId, sessionId: props.sessionId, actor: props.actor, orgId: props.orgId, orgRole: props.orgRole, orgSlug: props.orgSlug, orgPermissions: props.orgPermissions }; }); // src/contexts/client.tsx var [ClientContextProvider, useClientContext] = createContextProviderAndHook("ClientProvider", (props) => { return props.client; }); var ClerkInstanceContext = solidJs.createContext(); var ClerkInstanceContextProvider = (props) => { return web.createComponent(ClerkInstanceContext.Provider, { get value() { return props.clerk; }, get children() { return props.children; } }); }; // src/contexts/isomorphic-clerk.tsx var IsomorphicClerkContextProvider = ClerkInstanceContextProvider; // src/contexts/organization.tsx var [OrganizationContextProvider, useOrganizationContext] = createContextProviderAndHook("OrganizationProvider", (props) => { return props.organization; }); // src/contexts/session.tsx var [SessionContextProvider, useSessionContext] = createContextProviderAndHook("SessionProvider", (props) => { return props.session; }); // src/contexts/user.tsx var [UserContextProvider, useUserContext] = createContextProviderAndHook("UserProvider", (props) => { return props.user; }); // src/contexts/clerk-context.tsx function ClerkContextProvider(props) { const { isomorphicClerk: clerk, loaded: clerkLoaded } = useLoadedIsomorphicClerk(() => props.isomorphicClerkOptions); const [state, setState] = solidJs.createSignal({ client: clerk().client, session: clerk().session, user: clerk().user, organization: clerk().organization }); solidJs.createEffect(() => { const fn = clerk().addListener((e) => setState({ ...e })); solidJs.onCleanup(fn); }); const derivedState = solidJs.createMemo(() => shared.deriveState(clerkLoaded(), state(), props.initialState)); const clerkCtx = () => clerkLoaded() ? clerk() : clerk(); return web.createComponent(IsomorphicClerkContextProvider, { clerk: clerkCtx, get children() { return web.createComponent(ClientContextProvider, { client: () => state().client, get children() { return web.createComponent(SessionContextProvider, { session: () => derivedState().session, get children() { return web.createComponent(OrganizationContextProvider, { organization: () => derivedState().organization, get children() { return web.createComponent(AuthContextProvider, { userId: () => derivedState().userId, sessionId: () => derivedState().sessionId, actor: () => derivedState().actor, orgId: () => derivedState().orgId, orgRole: () => derivedState().orgRole, orgSlug: () => derivedState().orgSlug, orgPermissions: () => derivedState().orgPermissions, get children() { return web.createComponent(UserContextProvider, { user: () => derivedState().user, get children() { return props.children; } }); } }); } }); } }); } }); } }); } var useLoadedIsomorphicClerk = (options) => { const [loaded, setLoaded] = solidJs.createSignal(false); const isomorphicClerk = solidJs.createMemo(() => IsomorphicClerk.getOrCreateInstance(solidJs.untrack(options))); solidJs.createEffect(solidJs.on(() => options().appearance, (appearance) => { void isomorphicClerk().__unstable__updateProps({ appearance }); })); solidJs.createEffect(solidJs.on(() => options().localization, (localization) => { void isomorphicClerk().__unstable__updateProps({ options: { localization } }); })); solidJs.createEffect(() => { isomorphicClerk().addOnLoaded(() => { setLoaded(true); }); }); solidJs.onCleanup(() => { IsomorphicClerk.clearInstance(); }); return { isomorphicClerk, loaded }; }; // src/contexts/clerk.tsx function ClerkProviderBase(props) { const [local, restIsomorphicClerkOptions] = solidJs.splitProps(props, ["initialState", "children"]); solidJs.createEffect(() => { if (!restIsomorphicClerkOptions.Clerk) { if (!restIsomorphicClerkOptions.publishableKey) { errorThrower.throwMissingPublishableKeyError(); } else if (restIsomorphicClerkOptions.publishableKey && !keys.isPublishableKey(restIsomorphicClerkOptions.publishableKey)) { errorThrower.throwInvalidPublishableKeyError({ key: restIsomorphicClerkOptions.publishableKey }); } } }); return web.createComponent(ClerkContextProvider, { get initialState() { return local.initialState; }, isomorphicClerkOptions: restIsomorphicClerkOptions, get children() { return local.children; } }); } var ClerkProvider = withMaxAllowedInstancesGuard(ClerkProviderBase, "ClerkProvider", multipleClerkProvidersError); var useAwaitableNavigate = () => { const navigate = router.useNavigate(); const location = router.useLocation(); const resolveFunctionsRef = []; const resolveAll = () => { resolveFunctionsRef.forEach((resolve) => resolve()); resolveFunctionsRef.splice(0, resolveFunctionsRef.length); }; const [, startTransition] = solidJs.useTransition(); solidJs.createEffect( solidJs.on( () => location, () => { resolveAll(); } ) ); return (to, options) => { return new Promise((res) => { startTransition(() => { resolveFunctionsRef.push(res); res(navigate(to, options)); }); }); }; }; var getEnvVariable = (name, defaultVaue = "") => { if (typeof process !== "undefined" && process.env && typeof process.env[name] === "string") { return process.env[name] || defaultVaue; } if (typeof ({ url: (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('server.cjs', document.baseURI).href)) }) !== "undefined" && // @ts-expect-error - Vite specific undefined && // @ts-expect-error - Vite specific typeof undefined[name] === "string") { return undefined[name]; } return defaultVaue; }; var getPublicEnvVariables = () => { return { publishableKey: getEnvVariable("VITE_CLERK_PUBLISHABLE_KEY") || getEnvVariable("CLERK_PUBLISHABLE_KEY"), domain: getEnvVariable("VITE_CLERK_DOMAIN") || getEnvVariable("CLERK_DOMAIN"), isSatellite: underscore.isTruthy(getEnvVariable("VITE_CLERK_IS_SATELLITE")) || underscore.isTruthy(getEnvVariable("CLERK_IS_SATELLITE")), proxyUrl: getEnvVariable("VITE_CLERK_PROXY_URL") || getEnvVariable("CLERK_PROXY_URL"), pk: getEnvVariable("VITE_CLERK_PUBLISHABLE_KEY") || getEnvVariable("CLERK_PUBLISHABLE_KEY"), signInUrl: getEnvVariable("VITE_CLERK_SIGN_IN_URL") || getEnvVariable("CLERK_SIGN_IN_URL"), signUpUrl: getEnvVariable("VITE_CLERK_SIGN_UP_URL") || getEnvVariable("CLERK_SIGN_UP_URL"), clerkJsUrl: getEnvVariable("VITE_CLERK_JS_URL") || getEnvVariable("CLERK_JS"), clerkJsVariant: getEnvVariable("VITE_CLERK_JS_VARIANT") || getEnvVariable("CLERK_JS_VARIANT"), clerkJsVersion: getEnvVariable("VITE_CLERK_JS_VERSION") || getEnvVariable("CLERK_JS_VERSION"), telemetryDisabled: underscore.isTruthy(getEnvVariable("VITE_CLERK_TELEMETRY_DISABLED")) || underscore.isTruthy(getEnvVariable("CLERK_TELEMETRY_DISABLED")), telemetryDebug: underscore.isTruthy(getEnvVariable("VITE_CLERK_TELEMETRY_DEBUG")) || underscore.isTruthy(getEnvVariable("CLERK_TELEMETRY_DEBUG")), afterSignInUrl: getEnvVariable("VITE_CLERK_AFTER_SIGN_IN_URL") || getEnvVariable("CLERK_AFTER_SIGN_IN_URL"), afterSignUpUrl: getEnvVariable("VITE_CLERK_AFTER_SIGN_UP_URL") || getEnvVariable("CLERK_AFTER_SIGN_UP_URL") }; }; // src/start/client/utils.ts var pickFromClerkInitState = (clerkInitState) => { const { __clerk_ssr_state, __publishableKey, __proxyUrl, __domain, __isSatellite, __signInUrl, __signUpUrl, __afterSignInUrl, __afterSignUpUrl, __clerkJSUrl, __clerkJSVersion, __telemetryDisabled, __telemetryDebug, __signInForceRedirectUrl, __signUpForceRedirectUrl, __signInFallbackRedirectUrl, __signUpFallbackRedirectUrl } = clerkInitState || {}; return { clerkSsrState: __clerk_ssr_state, publishableKey: __publishableKey, proxyUrl: __proxyUrl, domain: __domain, isSatellite: !!__isSatellite, signInUrl: __signInUrl, signUpUrl: __signUpUrl, afterSignInUrl: __afterSignInUrl, afterSignUpUrl: __afterSignUpUrl, clerkJSUrl: __clerkJSUrl, clerkJSVersion: __clerkJSVersion, telemetry: { disabled: __telemetryDisabled, debug: __telemetryDebug }, signInForceRedirectUrl: __signInForceRedirectUrl, signUpForceRedirectUrl: __signUpForceRedirectUrl, signInFallbackRedirectUrl: __signInFallbackRedirectUrl, signUpFallbackRedirectUrl: __signUpFallbackRedirectUrl }; }; var mergeWithPublicEnvs = (restInitState) => { const publicEnvVariables = getPublicEnvVariables(); return { ...restInitState, publishableKey: restInitState.publishableKey || publicEnvVariables.publishableKey, domain: restInitState.domain || publicEnvVariables.domain, isSatellite: restInitState.isSatellite || publicEnvVariables.isSatellite, signInUrl: restInitState.signInUrl || publicEnvVariables.signInUrl, signUpUrl: restInitState.signUpUrl || publicEnvVariables.signUpUrl, afterSignInUrl: restInitState.afterSignInUrl || publicEnvVariables.afterSignInUrl, afterSignUpUrl: restInitState.afterSignUpUrl || publicEnvVariables.afterSignUpUrl, clerkJSUrl: restInitState.clerkJSUrl || publicEnvVariables.clerkJsUrl, clerkJSVersion: restInitState.clerkJSVersion || publicEnvVariables.clerkJsVersion, signInForceRedirectUrl: restInitState.signInForceRedirectUrl, clerkJSVariant: restInitState.clerkJSVariant || publicEnvVariables.clerkJsVariant }; }; // src/start/client/clerk-provider.tsx function ClerkProvider2(props) { const [local, providerProps] = solidJs.splitProps(props, ["children"]); const awaitableNavigate = useAwaitableNavigate(); const clerkInitState = () => web.isServer ? web.getRequestEvent()?.locals.clerkInitialState : window.__clerk_init_state; const states = solidJs.createMemo(() => pickFromClerkInitState(clerkInitState()?.__internal_clerk_state)); const { clerkSsrState } = destructure.destructure(states); const mergedProps = () => ({ ...mergeWithPublicEnvs(states()), ...providerProps }); solidJs.onMount(() => { window.__clerk_init_state = clerkInitState(); }); return web.createComponent(ClerkProvider, web.mergeProps({ get initialState() { return clerkSsrState(); }, routerPush: (to) => awaitableNavigate(to, { replace: false }), routerReplace: (to) => awaitableNavigate(to, { replace: true }) }, mergedProps, { get children() { return local.children; } })); } exports.ClerkProvider = ClerkProvider2;