UNPKG

clerk-solidjs

Version:
1,214 lines (1,188 loc) 35.3 kB
import { ClerkInstanceContext, ClerkProvider, assertSingleChild, errorThrower, normalizeWithDefaultValue, organizationProfileLinkRenderedError, organizationProfilePageRenderedError, safeExecute, setErrorThrowerOptions, useAuthContext, useAuthHasRequiresRoleOrPermission, useClerkInstanceContext, useClientContext, useIsomorphicClerkContext, useOrganizationContext, useSessionContext, useUserContext, userProfileLinkRenderedError, userProfilePageRenderedError } from "../chunk/7ARPN5DO.jsx"; // src/polyfills.ts if (typeof window !== "undefined" && !window.global) { window.global = typeof global === "undefined" ? window : global; } // src/components/control-components.tsx import { createEffect as createEffect2, createMemo as createMemo2, Match, Show as Show2, splitProps, Switch } from "solid-js"; // src/hooks/use-assert-wrapped-by-clerk-provider.tsx import { useContext } from "solid-js"; function useAssertWrappedByClerkProvider(displayNameOrFn) { const ctx = useContext(ClerkInstanceContext); if (!ctx) { if (typeof displayNameOrFn === "function") { displayNameOrFn(); return; } throw new Error( `${displayNameOrFn} can only be used within the <ClerkProvider /> component. Learn more: https://clerk.com/docs/components/clerk-provider` ); } } // src/hooks/use-auth.ts import { createMemo } from "solid-js"; // src/hooks/utils.ts var clerkLoaded = (isomorphicClerk) => { return new Promise((resolve) => { const clerk = isomorphicClerk(); if (clerk.loaded) { resolve(); } clerk.addOnLoaded(resolve); }); }; var createGetToken = (isomorphicClerk) => { return async (options) => { const clerk = isomorphicClerk(); await clerkLoaded(isomorphicClerk); if (!clerk.session) { return null; } return clerk.session.getToken(options); }; }; var createSignOut = (isomorphicClerk) => { return async (...args) => { await clerkLoaded(isomorphicClerk); return isomorphicClerk().signOut(...args); }; }; // src/hooks/use-auth.ts var useAuth = () => { useAssertWrappedByClerkProvider("useAuth"); const { sessionId, userId, actor, orgId, orgRole, orgPermissions } = useAuthContext(); const isomorphicClerk = useIsomorphicClerkContext(); const getToken = createGetToken(isomorphicClerk); const signOut = createSignOut(isomorphicClerk); const has = (params) => { if (!params?.permission && !params?.role) { errorThrower.throw(useAuthHasRequiresRoleOrPermission); } if (!orgId() || !userId() || !orgRole() || !orgPermissions()) { return false; } if (params.permission) { return orgPermissions().includes(params.permission); } if (params.role) { return orgRole() === params.role; } return false; }; const isLoaded = createMemo( () => sessionId() !== void 0 && userId() !== void 0 ); const isSignedIn = createMemo(() => { if (!isLoaded()) { return void 0; } return sessionId() !== null && userId() !== null; }); return { isLoaded, isSignedIn, sessionId, userId, actor, orgId, orgRole, orgPermissions, has, signOut, getToken }; }; // src/components/with-clerk.tsx import { createEffect, Show } from "solid-js"; var withClerk = (Component3, displayName) => { displayName = displayName || Component3.name || "Component"; return (props) => { useAssertWrappedByClerkProvider(displayName || "withClerk"); const clerk = useIsomorphicClerkContext(); const isLoaded = () => clerk().loaded; return <Show when={isLoaded()}> <Component3 {...props} clerk={clerk} /> </Show>; }; }; // src/components/control-components.tsx var SignedIn = (props) => { useAssertWrappedByClerkProvider("SignedIn"); const { userId } = useAuthContext(); return <Show2 when={userId()}>{props.children}</Show2>; }; var SignedOut = (props) => { useAssertWrappedByClerkProvider("SignedOut"); const { userId } = useAuthContext(); return <Show2 when={userId() === null}>{props.children}</Show2>; }; var ClerkLoaded = (props) => { useAssertWrappedByClerkProvider("ClerkLoaded"); const isomorphicClerk = useIsomorphicClerkContext(); const isLoaded = () => isomorphicClerk().loaded; return <Show2 when={isLoaded()}>{props.children}</Show2>; }; var ClerkLoading = (props) => { useAssertWrappedByClerkProvider("ClerkLoading"); const isomorphicClerk = useIsomorphicClerkContext(); const isLoaded = () => isomorphicClerk().loaded; return <Show2 when={!isLoaded()}>{props.children}</Show2>; }; var Protect = (props) => { useAssertWrappedByClerkProvider("Protect"); const [local, restAuthorizedParams] = splitProps(props, [ "children", "fallback" ]); const { isLoaded, has, userId } = useAuth(); const unauthorized = <>{local.fallback ?? null}</>; const authorized = <>{local.children}</>; return <Switch fallback={unauthorized}> <Match when={!isLoaded()}>{unauthorized}</Match> <Match when={!userId()}>{unauthorized}</Match> <Match when={typeof restAuthorizedParams.condition === "function" && restAuthorizedParams.condition(has)} > {authorized} </Match> <Match when={(restAuthorizedParams.role || restAuthorizedParams.permission) && has(restAuthorizedParams)} > {authorized} </Match> </Switch>; }; var RedirectToSignIn = withClerk( (props) => { const [local, redirectToSignInProps] = splitProps(props, ["clerk"]); const hasActiveSessions = createMemo2( () => local.clerk().client.activeSessions && local.clerk().client.activeSessions.length > 0 ); createEffect2(() => { if (local.clerk().session === null && hasActiveSessions()) { void local.clerk().redirectToAfterSignOut(); } else { void local.clerk().redirectToSignIn(redirectToSignInProps); } }); return null; }, "RedirectToSignIn" ); var RedirectToSignUp = withClerk( (props) => { const [local, redirectToSignUpProps] = splitProps(props, ["clerk"]); createEffect2(() => { void local.clerk().redirectToSignUp(redirectToSignUpProps); }); return null; }, "RedirectToSignUp" ); var RedirectToUserProfile = withClerk((props) => { createEffect2(() => { void props.clerk().redirectToUserProfile(); }); return null; }, "RedirectToUserProfile"); var RedirectToOrganizationProfile = withClerk((props) => { createEffect2(() => { void props.clerk().redirectToOrganizationProfile(); }); return null; }, "RedirectToOrganizationProfile"); var RedirectToCreateOrganization = withClerk((props) => { createEffect2(() => { void props.clerk().redirectToCreateOrganization(); }); return null; }, "RedirectToCreateOrganization"); var AuthenticateWithRedirectCallback = withClerk( (props) => { const [local, handleRedirectCallbackParams] = splitProps(props, ["clerk"]); createEffect2(() => { void local.clerk().handleRedirectCallback(handleRedirectCallbackParams); }); return null; }, "AuthenticateWithRedirectCallback" ); // src/components/sign-in-button.tsx import { children as childrenFn, createMemo as createMemo3, splitProps as splitProps2 } from "solid-js"; var SignInButton = withClerk( (props) => { const [local, clerkProps, rest] = splitProps2( props, ["children"], [ "clerk", "signUpFallbackRedirectUrl", "signUpForceRedirectUrl", "forceRedirectUrl", "fallbackRedirectUrl", "mode", "onClick" ] ); const children2 = childrenFn( () => normalizeWithDefaultValue(local.children, "Sign in") ); const child = createMemo3( () => assertSingleChild(children2())("SignInButton") ); const clickHandler = async () => { const { onClick, mode, clerk, ...opts } = clerkProps; if (onClick) { await safeExecute(onClick)(); } if (mode === "modal") { return clerk().openSignIn(opts); } return clerk().redirectToSignIn({ ...opts, signInFallbackRedirectUrl: clerkProps.fallbackRedirectUrl, signInForceRedirectUrl: clerkProps.forceRedirectUrl }); }; return <button {...rest} onClick={clickHandler}> {child()} </button>; }, "SignInButton" ); // src/components/sign-in-with-metamask-button.tsx import { children as childrenFn2, createMemo as createMemo4, splitProps as splitProps3 } from "solid-js"; var SignInWithMetamaskButton = withClerk( (props) => { const [local, clerkProps, rest] = splitProps3( props, ["children"], ["clerk", "redirectUrl", "onClick"] ); const children2 = childrenFn2( () => normalizeWithDefaultValue(local.children, "Sign in with Metamask") ); const child = createMemo4( () => assertSingleChild(children2())("SignInWithMetamaskButton") ); const clickHandler = async () => { const { onClick, clerk, ...opts } = clerkProps; if (onClick) { await safeExecute(onClick)(); } async function authenticate() { await clerk().authenticateWithMetamask({ ...opts, redirectUrl: opts.redirectUrl || void 0 }); } void authenticate(); }; return <button {...rest} onClick={clickHandler}> {child()} </button>; }, "SignInWithMetamask" ); // src/components/sign-out-button.tsx import { children as childrenFn3, createMemo as createMemo5, splitProps as splitProps4 } from "solid-js"; var SignOutButton = withClerk( (props) => { const [local, clerk, rest] = splitProps4( props, ["children"], ["clerk", "redirectUrl", "sessionId", "onClick"] ); const children2 = childrenFn3( () => normalizeWithDefaultValue(local.children, "Sign out") ); const child = createMemo5( () => assertSingleChild(children2())("SignOutButton") ); const clickHandler = async () => { if (clerk.onClick) { await safeExecute(clerk.onClick)(); } clerk.clerk().signOut({ redirectUrl: clerk.redirectUrl, sessionId: clerk.sessionId }); }; return <button {...rest} onClick={clickHandler}> {child()} </button>; }, "SignOutButton" ); // src/components/sign-up-button.tsx import { children as childrenFn4, createMemo as createMemo6, splitProps as splitProps5 } from "solid-js"; var SignUpButton = withClerk( (props) => { const [local, clerkProps, rest] = splitProps5( props, ["children"], ["clerk", "mode", "fallbackRedirectUrl", "forceRedirectUrl", "onClick"] ); const children2 = childrenFn4( () => normalizeWithDefaultValue(local.children, "Sign up") ); const child = createMemo6( () => assertSingleChild(children2())("SignUpButton") ); const clickHandler = async () => { const { onClick, mode, clerk, ...opts } = clerkProps; if (onClick) { await safeExecute(clerkProps.onClick)(); } if (mode === "modal") { return clerk().openSignUp(opts); } return clerk().redirectToSignUp({ ...opts, signUpFallbackRedirectUrl: clerkProps.fallbackRedirectUrl, signUpForceRedirectUrl: clerkProps.forceRedirectUrl }); }; return <button {...rest} onClick={clickHandler}> {child()} </button>; }, "SignUpButton" ); // src/components/ui-components.tsx import { logErrorInDevMode } from "@clerk/shared"; import { children, createEffect as createEffect3, createSignal, onCleanup, onMount, splitProps as splitProps6 } from "solid-js"; var isMountProps = (props) => { return "mount" in props; }; var isOpenProps = (props) => { return "open" in props; }; var Portal = (props) => { const [portalRef, setPortalRef] = createSignal(); const componentProps = () => props.props; createEffect3(() => { const ref = portalRef(); if (ref && isMountProps(props)) { props.updateProps({ node: ref, props: componentProps() }); } }); onMount(() => { const ref = portalRef(); if (ref) { if (isMountProps(props)) { props.mount(ref, componentProps()); } else if (isOpenProps(props)) { props.open(componentProps()); } } }); onCleanup(() => { const ref = portalRef(); if (ref) { if (isMountProps(props)) { props.unmount(ref); } else if (isOpenProps(props)) { props.close(); } } }); return <div ref={setPortalRef} />; }; var SignIn = withClerk((props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountSignIn} unmount={local.clerk().unmountSignIn} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "SignIn"); var SignUp = withClerk((props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountSignUp} unmount={local.clerk().unmountSignUp} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "SignUp"); function UserProfilePage(props) { logErrorInDevMode(userProfilePageRenderedError); return children(() => props.children); } function UserProfileLink(props) { logErrorInDevMode(userProfileLinkRenderedError); return children(() => props.children); } var _UserProfile = withClerk( (props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountUserProfile} unmount={local.clerk().unmountUserProfile} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "UserProfile" ); var UserProfile = Object.assign(_UserProfile, { Page: UserProfilePage, Link: UserProfileLink }); var _UserButton = withClerk( (props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountUserButton} unmount={local.clerk().unmountUserButton} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "UserButton" ); var UserButton = Object.assign(_UserButton, { UserProfilePage, UserProfileLink }); function OrganizationProfilePage(props) { logErrorInDevMode(organizationProfilePageRenderedError); return children(() => props.children); } function OrganizationProfileLink(props) { logErrorInDevMode(organizationProfileLinkRenderedError); return children(() => props.children); } var _OrganizationProfile = withClerk( (props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountOrganizationProfile} unmount={local.clerk().unmountOrganizationProfile} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "OrganizationProfile" ); var OrganizationProfile = Object.assign( _OrganizationProfile, { Page: OrganizationProfilePage, Link: OrganizationProfileLink } ); var CreateOrganization = withClerk( (props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountCreateOrganization} unmount={local.clerk().unmountCreateOrganization} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "CreateOrganization" ); var _OrganizationSwitcher = withClerk( (props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountOrganizationSwitcher} unmount={local.clerk().unmountOrganizationSwitcher} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "OrganizationSwitcher" ); var OrganizationSwitcher = Object.assign(_OrganizationSwitcher, { OrganizationProfilePage, OrganizationProfileLink }); var OrganizationList = withClerk( (props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal mount={local.clerk().mountOrganizationList} unmount={local.clerk().unmountOrganizationList} updateProps={local.clerk().__unstable__updateProps} props={rest} />; }, "OrganizationList" ); var GoogleOneTap = withClerk( (props) => { const [local, rest] = splitProps6(props, ["clerk"]); return <Portal open={local.clerk().openGoogleOneTap} close={local.clerk().closeGoogleOneTap} props={rest} />; }, "GoogleOneTap" ); // src/hooks/use-clerk.ts var useClerk = () => { useAssertWrappedByClerkProvider("useClerk"); return useClerkInstanceContext(); }; // src/hooks/use-email-link.ts import { destructure } from "@solid-primitives/destructure"; import { createEffect as createEffect4, createMemo as createMemo7, onCleanup as onCleanup2 } from "solid-js"; function useEmailLink(resource) { const linkFlows = createMemo7(() => resource().createEmailLinkFlow()); createEffect4(() => { onCleanup2(linkFlows().cancelEmailLinkFlow); }); return destructure(linkFlows); } // src/hooks/use-organization.ts import { eventMethodCalled } from "@clerk/shared/telemetry"; import { createEffect as createEffect5, createMemo as createMemo9 } from "solid-js"; // src/hooks/use-pages-or-infinite.ts import { createWritableMemo } from "@solid-primitives/memo"; import { createInfiniteQuery, createQuery, QueryClient } from "@tanstack/solid-query"; import { createMemo as createMemo8, createSignal as createSignal2 } from "solid-js"; function getDifferentKeys(obj1, obj2) { const keysSet = new Set(Object.keys(obj2)); const differentKeysObject = {}; for (const key1 of Object.keys(obj1)) { if (!keysSet.has(key1)) { differentKeysObject[key1] = obj1[key1]; } } return differentKeysObject; } var convertToSafeValues = (params, defaultValues) => { const shouldUseDefaults = typeof params === "boolean" && params; const initialPageRef = shouldUseDefaults ? defaultValues.initialPage : params?.initialPage ?? defaultValues.initialPage; const pageSizeRef = shouldUseDefaults ? defaultValues.pageSize : params?.pageSize ?? defaultValues.pageSize; const newObj = {}; for (const key of Object.keys(defaultValues)) { newObj[key] = shouldUseDefaults ? ( // @ts-ignore defaultValues[key] ) : ( // @ts-ignore params?.[key] ?? defaultValues[key] ); } return { ...newObj, initialPage: initialPageRef, pageSize: pageSizeRef }; }; var usePagesOrInfinite = (options) => { const [paginatedPage, setPaginatedPage] = createWritableMemo( () => options().params.initialPage ?? 1 ); const initialPage = createMemo8(() => options().params.initialPage ?? 1); const pageSize = createMemo8(() => options().params.pageSize ?? 10); const enabled = createMemo8(() => options().config.enabled ?? true); const triggerInfinite = createMemo8(() => options().config.infinite ?? false); const [queryClient] = createSignal2(new QueryClient()); const pagesCacheKey = createMemo8(() => ({ ...options().cacheKeys, ...options().params, initialPage: paginatedPage(), pageSize: pageSize() })); const query = createQuery( () => ({ queryKey: [pagesCacheKey()], queryFn: ({ queryKey: [cacheKeyParams] }) => { const requestParams = getDifferentKeys(cacheKeyParams, cacheKeys); return fetcher?.(requestParams); }, enabled: !triggerInfinite() && !!options().fetcher && enabled }), queryClient ); const infiniteQueryKey = createMemo8(() => ({ ...options().cacheKeys, ...options().params, pageSize: pageSize() })); const infiniteQuery = createInfiniteQuery( () => ({ queryKey: [infiniteQueryKey()], queryFn: ({ pageParam, queryKey: [cacheKeyParams] }) => { const requestParams = getDifferentKeys( { initialPage: initialPage() + pageParam, ...cacheKeyParams }, // @ts-ignore cacheKeys ); return fetcher?.(requestParams); }, initialPageParam: initialPage(), getNextPageParam: (lastPage) => { if (lastPage && !lastPage.length) { return null; } }, enabled: triggerInfinite() && enabled }), queryClient ); const page = createMemo8(() => { if (triggerInfinite()) { return infiniteQuery.data?.pages.length ?? 0; } return paginatedPage(); }); const data = createMemo8(() => { if (triggerInfinite()) { return infiniteQuery.data?.pages.flat() ?? []; } return query.data?.data ?? []; }); const count = createMemo8(() => { if (triggerInfinite()) { return infiniteQuery.data?.pages?.[infiniteQuery.data?.pages.length - 1]?.total_count || 0; } return query.data?.total_count ?? 0; }); const isLoading = createMemo8( () => triggerInfinite() ? infiniteQuery.isLoading : query.isLoading ); const isFetching = createMemo8( () => triggerInfinite() ? infiniteQuery.isFetching : query.isFetching ); const error = createMemo8( () => triggerInfinite() ? infiniteQuery.error : query.error ); const isError = createMemo8(() => !!error()); const fetchNext = () => { if (triggerInfinite()) { void infiniteQuery.fetchNextPage(); return; } return setPaginatedPage((n) => n + 1); }; const fetchPrevious = () => { if (triggerInfinite()) { void infiniteQuery.fetchPreviousPage(); return; } return setPaginatedPage((n) => n - 1); }; const offsetCount = createMemo8(() => (initialPage() - 1) * pageSize()); const pageCount = createMemo8( () => Math.ceil((count() - offsetCount()) / pageSize()) ); const hasNextPage = createMemo8( () => count() - offsetCount() * pageSize() > page() * pageSize() ); const hasPreviousPage = createMemo8( () => (page() - 1) * pageSize() > offsetCount() * pageSize() ); const setData = triggerInfinite() ? (value) => queryClient().setQueryData([infiniteQueryKey], value) : (value) => queryClient().setQueryData([pagesCacheKey()], value); const revalidate = triggerInfinite() ? () => infiniteQuery.refetch() : () => query.refetch(); return { data, count, error, isLoading, isFetching, isError, page, pageCount, fetchNext, fetchPrevious, hasNextPage, hasPreviousPage, // Let the hook return type define this type setData, // Let the hook return type define this type revalidate }; }; // src/hooks/use-organization.ts var useOrganization = (params) => { useAssertWrappedByClerkProvider("useOrganization"); const organization = useOrganizationContext(); const session = useSessionContext(); const domainSafeValues = createMemo9( () => convertToSafeValues(params?.().domains, { initialPage: 1, pageSize: 10, keepPreviousData: false, infinite: false, enrollmentMode: void 0 }) ); const membershipRequestSafeValues = createMemo9( () => convertToSafeValues(params?.().membershipRequests, { initialPage: 1, pageSize: 10, status: "pending", keepPreviousData: false, infinite: false }) ); const membersSafeValues = createMemo9( () => convertToSafeValues(params?.().memberships, { initialPage: 1, pageSize: 10, role: void 0, keepPreviousData: false, infinite: false }) ); const invitationsSafeValues = createMemo9( () => convertToSafeValues(params?.().invitations, { initialPage: 1, pageSize: 10, status: ["pending"], keepPreviousData: false, infinite: false }) ); const clerk = useClerkInstanceContext(); createEffect5(() => { clerk().telemetry?.record(eventMethodCalled("useOrganization")); }); const domainParams = createMemo9( () => typeof params?.().domains === "undefined" ? void 0 : { initialPage: domainSafeValues().initialPage, pageSize: domainSafeValues().pageSize, enrollmentMode: domainSafeValues().enrollmentMode } ); const membershipRequestParams = createMemo9( () => typeof params?.().membershipRequests === "undefined" ? void 0 : { initialPage: membershipRequestSafeValues().initialPage, pageSize: membershipRequestSafeValues().pageSize, status: membershipRequestSafeValues().status } ); const membersParams = createMemo9( () => typeof params?.().memberships === "undefined" ? void 0 : { initialPage: membersSafeValues().initialPage, pageSize: membersSafeValues().pageSize, role: membersSafeValues().role } ); const invitationsParams = createMemo9( () => typeof params?.().invitations === "undefined" ? void 0 : { initialPage: invitationsSafeValues().initialPage, pageSize: invitationsSafeValues().pageSize, status: invitationsSafeValues().status } ); const domains = usePagesOrInfinite(() => ({ params: { ...domainParams() }, fetcher: organization()?.getDomains, config: { keepPreviousData: domainSafeValues().keepPreviousData, infinite: domainSafeValues().infinite, enabled: !!domainParams() }, cacheKeys: { type: "domains", organizationId: organization()?.id } })); const membershipRequests = usePagesOrInfinite(() => ({ params: { ...membershipRequestParams() }, fetcher: organization()?.getMembershipRequests, config: { keepPreviousData: membershipRequestSafeValues().keepPreviousData, infinite: membershipRequestSafeValues().infinite, enabled: !!membershipRequestParams() }, cacheKeys: { type: "membershipRequests", organizationId: organization()?.id } })); const memberships = usePagesOrInfinite(() => ({ params: membersParams() || {}, fetcher: organization()?.getMemberships, config: { keepPreviousData: membersSafeValues().keepPreviousData, infinite: membersSafeValues().infinite, enabled: !!membersParams() }, cacheKeys: { type: "members", organizationId: organization()?.id } })); const invitations = usePagesOrInfinite(() => ({ params: { ...invitationsParams() }, fetcher: organization()?.getInvitations, config: { keepPreviousData: invitationsSafeValues().keepPreviousData, infinite: invitationsSafeValues().infinite, enabled: !!invitationsParams() }, cacheKeys: { type: "invitations", organizationId: organization()?.id } })); const isLoaded = createMemo9(() => organization() === void 0); return { isLoaded, organization, membership: createMemo9(() => { if (isLoaded()) { if (organization()) { return getCurrentOrganizationMembership( session().user.organizationMemberships, organization().id ); } else { return null; } } return void 0; }), domains: createMemo9(() => { if (isLoaded()) { if (organization()) { return domains; } else { return null; } } return void 0; }), membershipRequests: createMemo9(() => { if (isLoaded()) { if (organization()) { return membershipRequests; } else { return null; } } return void 0; }), memberships: createMemo9(() => { if (isLoaded()) { if (organization()) { return memberships; } else { return null; } } return void 0; }), invitations: createMemo9(() => { if (isLoaded()) { if (organization()) { return invitations; } else { return null; } } return void 0; }) }; }; function getCurrentOrganizationMembership(organizationMemberships, activeOrganizationId) { return organizationMemberships.find( (organizationMembership) => organizationMembership.organization.id === activeOrganizationId ); } // src/hooks/use-organization-list.ts import { eventMethodCalled as eventMethodCalled2 } from "@clerk/shared/telemetry"; import { createEffect as createEffect6, createMemo as createMemo10 } from "solid-js"; var useOrganizationList = (params) => { useAssertWrappedByClerkProvider("useOrganizationList"); const userMembershipsSafeValues = createMemo10( () => convertToSafeValues(params?.().userMemberships, { initialPage: 1, pageSize: 10, keepPreviousData: false, infinite: false }) ); const userInvitationsSafeValues = createMemo10( () => convertToSafeValues(params?.().userInvitations, { initialPage: 1, pageSize: 10, status: "pending", keepPreviousData: false, infinite: false }) ); const userSuggestionsSafeValues = createMemo10( () => convertToSafeValues(params?.().userSuggestions, { initialPage: 1, pageSize: 10, status: "pending", keepPreviousData: false, infinite: false }) ); const clerk = useClerkInstanceContext(); const user = useUserContext(); createEffect6(() => { clerk().telemetry?.record(eventMethodCalled2("useOrganizationList")); }); const userMembershipsParams = createMemo10( () => typeof params?.().userMemberships === "undefined" ? void 0 : { initialPage: userMembershipsSafeValues().initialPage, pageSize: userMembershipsSafeValues().pageSize } ); const userInvitationsParams = createMemo10( () => typeof params?.().userInvitations === "undefined" ? void 0 : { initialPage: userInvitationsSafeValues().initialPage, pageSize: userInvitationsSafeValues().pageSize, status: userInvitationsSafeValues().status } ); const userSuggestionsParams = createMemo10( () => typeof params?.().userSuggestions === "undefined" ? void 0 : { initialPage: userSuggestionsSafeValues().initialPage, pageSize: userSuggestionsSafeValues().pageSize, status: userSuggestionsSafeValues().status } ); const isClerkLoaded = createMemo10(() => !!(clerk().loaded && user())); const memberships = usePagesOrInfinite(() => ({ params: userMembershipsParams() || {}, fetcher: user()?.getOrganizationMemberships, config: { keepPreviousData: userMembershipsSafeValues().keepPreviousData, infinite: userMembershipsSafeValues().infinite, enabled: !!userMembershipsParams() }, cacheKeys: { type: "userMemberships", userId: user()?.id } })); const invitations = usePagesOrInfinite(() => ({ params: { ...userInvitationsParams() }, fetcher: user()?.getOrganizationInvitations, config: { keepPreviousData: userInvitationsSafeValues().keepPreviousData, infinite: userInvitationsSafeValues().infinite, enabled: !!userInvitationsParams() }, cacheKeys: { type: "userInvitations", userId: user()?.id } })); const suggestions = usePagesOrInfinite(() => ({ params: { ...userSuggestionsParams() }, fetcher: user()?.getOrganizationSuggestions, config: { keepPreviousData: userSuggestionsSafeValues().keepPreviousData, infinite: userSuggestionsSafeValues().infinite, enabled: !!userSuggestionsParams() }, cacheKeys: { type: "userSuggestions", userId: user()?.id } })); const createOrganization = (params2) => { return clerk().createOrganization(params2); }; const setActive = (params2) => { return clerk().setActive(params2); }; return { isLoaded: isClerkLoaded, createOrganization, setActive, userMemberships: createMemo10( () => isClerkLoaded() ? memberships : void 0 ), userInvitations: createMemo10( () => isClerkLoaded() ? invitations : void 0 ), userSuggestions: createMemo10( () => isClerkLoaded() ? suggestions : void 0 ) }; }; // src/hooks/use-session.ts import { createMemo as createMemo11 } from "solid-js"; var useSession = () => { useAssertWrappedByClerkProvider("useSession"); const session = useSessionContext(); const isLoaded = createMemo11(() => session() !== void 0); const isSignedIn = createMemo11(() => session() !== null); return { isLoaded, isSignedIn, session }; }; // src/hooks/use-session-list.ts import { createMemo as createMemo12 } from "solid-js"; var useSessionList = () => { useAssertWrappedByClerkProvider("useSessionList"); const isomorphicClerk = useClerkInstanceContext(); const client = useClientContext(); const isLoaded = createMemo12(() => !!client()); const sessions = createMemo12(() => client()?.sessions); const setActive = (params) => { return isomorphicClerk()?.setActive(params); }; return { isLoaded, sessions, setActive }; }; // src/hooks/use-sign-in.ts import { eventMethodCalled as eventMethodCalled3 } from "@clerk/shared/telemetry"; import { createEffect as createEffect7, createMemo as createMemo13 } from "solid-js"; var useSignIn = () => { useAssertWrappedByClerkProvider("useSignIn"); const isomorphicClerk = useIsomorphicClerkContext(); const client = useClientContext(); createEffect7(() => { isomorphicClerk().telemetry?.record(eventMethodCalled3("useSignIn")); }); const isLoaded = createMemo13(() => !!client()); const signIn = createMemo13(() => client()?.signIn); const setActive = (params) => { return isomorphicClerk()?.setActive(params); }; return { isLoaded, signIn, setActive }; }; // src/hooks/use-sign-up.ts import { eventMethodCalled as eventMethodCalled4 } from "@clerk/shared/telemetry"; import { createEffect as createEffect8, createMemo as createMemo14 } from "solid-js"; var useSignUp = () => { useAssertWrappedByClerkProvider("useSignUp"); const isomorphicClerk = useIsomorphicClerkContext(); const client = useClientContext(); createEffect8(() => { isomorphicClerk().telemetry?.record(eventMethodCalled4("useSignUp")); }); const isLoaded = createMemo14(() => !!client()); const signUp = createMemo14(() => client()?.signUp); const setActive = (params) => { return isomorphicClerk()?.setActive(params); }; return { isLoaded, signUp, setActive }; }; // src/hooks/use-user.ts import { createMemo as createMemo15 } from "solid-js"; function useUser() { useAssertWrappedByClerkProvider("useUser"); const user = useUserContext(); const isLoaded = createMemo15(() => user() !== void 0); const isSignedIn = createMemo15(() => user() !== null); return { isLoaded, isSignedIn, user }; } // src/index.tsx setErrorThrowerOptions({ packageName: "clerk-solidjs" }); export { AuthenticateWithRedirectCallback, ClerkLoaded, ClerkLoading, ClerkProvider, CreateOrganization, GoogleOneTap, OrganizationList, OrganizationProfile, OrganizationSwitcher, Protect, RedirectToCreateOrganization, RedirectToOrganizationProfile, RedirectToSignIn, RedirectToSignUp, RedirectToUserProfile, SignIn, SignInButton, SignInWithMetamaskButton, SignOutButton, SignUp, SignUpButton, SignedIn, SignedOut, UserButton, UserProfile, useAuth, useClerk, useEmailLink, useOrganization, useOrganizationList, useSession, useSessionList, useSignIn, useSignUp, useUser };