import { type Session } from "@auth/core"; import { getSession } from "@solid-auth/next"; import { Component, Show } from "solid-js"; import { useRouteData } from "solid-start"; import { createServerData$, redirect } from "solid-start/server"; import { authOpts } from "~/routes/api/auth/[...solidauth]"; const Protected = (Comp: IProtectedComponent) => { const routeData = () => { return createServerData$( async (_, event) => { const session = await getSession(event.request, authOpts); if (!session || !session.user) { throw redirect("/"); } return session; }, { key: () => ["auth_user"] } ); }; return { routeData, Page: () => { const session = useRouteData(); return ( {(sess) => } ); }, }; }; type IProtectedComponent = Component; export default Protected;