diff --git a/apps/frontend/app/lib/utilities.server.ts b/apps/frontend/app/lib/utilities.server.ts index 6b44bf03ab..832e96610f 100644 --- a/apps/frontend/app/lib/utilities.server.ts +++ b/apps/frontend/app/lib/utilities.server.ts @@ -100,16 +100,14 @@ export const serverGqlService = new AuthenticatedGraphQLClient( { headers: { Connection: "keep-alive" } }, ); -export const getCookieValue = (request: Request, cookieName: string) => { - return parse(request.headers.get("cookie") || "")[cookieName]; -}; +export const getCookieValue = (request: Request, cookieName: string) => + parse(request.headers.get("cookie") || "")[cookieName]; -export const getAuthorizationCookie = (request: Request) => { - return getCookieValue(request, AUTH_COOKIE_NAME); -}; +export const getAuthorizationCookie = (request: Request) => + getCookieValue(request, AUTH_COOKIE_NAME); export const redirectIfNotAuthenticatedOrUpdated = async (request: Request) => { - const { userDetails } = await getCachedUserDetails(request); + const userDetails = await getCachedUserDetails(request); if (!userDetails || userDetails.__typename === "UserDetailsError") { const nextUrl = withoutHost(request.url); throw redirect($path("/auth", { [redirectToQueryParam]: nextUrl }), { @@ -126,20 +124,6 @@ export const redirectIfNotAuthenticatedOrUpdated = async (request: Request) => { return userDetails; }; -const expectedServerVariables = z.object({ - DISABLE_TELEMETRY: z - .string() - .optional() - .transform((v) => v === "true"), - FRONTEND_UMAMI_SCRIPT_URL: z.string().optional(), - FRONTEND_UMAMI_WEBSITE_ID: z.string().optional(), - FRONTEND_UMAMI_DOMAINS: z.string().optional(), - FRONTEND_OIDC_BUTTON_LABEL: z - .string() - .default("Continue with OpenID Connect"), - FRONTEND_DASHBOARD_MESSAGE: z.string().optional(), -}); - /** * Combine multiple header objects into one (uses append so headers are not overridden) */ @@ -169,7 +153,8 @@ export const MetadataSpecificsSchema = z.object({ export const getCachedCoreDetails = async () => { return await queryClient.ensureQueryData({ queryKey: queryFactory.miscellaneous.coreDetails().queryKey, - queryFn: () => serverGqlService.request(CoreDetailsDocument), + queryFn: () => + serverGqlService.request(CoreDetailsDocument).then((d) => d.coreDetails), }); }; @@ -178,11 +163,9 @@ export const getCachedUserDetails = async (request: Request) => { return await queryClient.ensureQueryData({ queryKey: queryFactory.users.details(token ?? "").queryKey, queryFn: () => - serverGqlService.authenticatedRequest( - request, - UserDetailsDocument, - undefined, - ), + serverGqlService + .authenticatedRequest(request, UserDetailsDocument, undefined) + .then((d) => d.userDetails), }); }; @@ -294,8 +277,6 @@ export const s3FileUploader = (prefix: string) => return undefined; }, unstable_createMemoryUploadHandler()); -export const serverVariables = expectedServerVariables.parse(process.env); - export const toastSessionStorage = createCookieSessionStorage({ cookie: { sameSite: "lax", @@ -363,7 +344,7 @@ export const getCookiesForApplication = async ( token: string, tokenValidForDays?: number, ) => { - const [{ coreDetails }] = await Promise.all([getCachedCoreDetails()]); + const [coreDetails] = await Promise.all([getCachedCoreDetails()]); const maxAge = (tokenValidForDays || coreDetails.tokenValidForDays) * 24 * 60 * 60; const options = { maxAge, path: "/" } satisfies SerializeOptions; @@ -422,9 +403,9 @@ export const redirectToFirstPageIfOnInvalidPage = async ( totalResults: number, currentPage: number, ) => { - const { coreDetails } = await getCachedCoreDetails(); + const coreDetails = await getCachedCoreDetails(); const { searchParams } = new URL(request.url); - const totalPages = Math.ceil(totalResults / coreDetails.pageLimit); + const totalPages = Math.ceil(totalResults / coreDetails.frontend.pageSize); if (currentPage > totalPages && currentPage !== 1) { searchParams.set(pageQueryParam, "1"); throw redirect(`?${searchParams.toString()}`); diff --git a/apps/frontend/app/routes/_dashboard._index.tsx b/apps/frontend/app/routes/_dashboard._index.tsx index dfdd0a9cb9..16e74c9754 100644 --- a/apps/frontend/app/routes/_dashboard._index.tsx +++ b/apps/frontend/app/routes/_dashboard._index.tsx @@ -178,9 +178,9 @@ export default function Page() { return ( - {dashboardLayoutData.envData.FRONTEND_DASHBOARD_MESSAGE ? ( + {dashboardLayoutData.coreDetails.frontend.dashboardMessage ? ( }> - {dashboardLayoutData.envData.FRONTEND_DASHBOARD_MESSAGE} + {dashboardLayoutData.coreDetails.frontend.dashboardMessage} ) : null} {userPreferences.general.dashboard.map((de) => diff --git a/apps/frontend/app/routes/_dashboard.tsx b/apps/frontend/app/routes/_dashboard.tsx index f686c5bbd2..04fc27c855 100644 --- a/apps/frontend/app/routes/_dashboard.tsx +++ b/apps/frontend/app/routes/_dashboard.tsx @@ -134,7 +134,6 @@ import { useReviewEntity, } from "~/lib/state/media"; import { - serverVariables as envData, getAuthorizationCookie, getCachedCoreDetails, getCachedUserCollectionsList, @@ -152,13 +151,11 @@ const discordLink = "https://discord.gg/D9XTg2a7R8"; export const loader = async ({ request }: LoaderFunctionArgs) => { const userDetails = await redirectIfNotAuthenticatedOrUpdated(request); - const [userPreferences, userCollections, { coreDetails }] = await Promise.all( - [ - getCachedUserPreferences(request), - getCachedUserCollectionsList(request), - getCachedCoreDetails(), - ], - ); + const [userPreferences, userCollections, coreDetails] = await Promise.all([ + getCachedUserPreferences(request), + getCachedUserCollectionsList(request), + getCachedCoreDetails(), + ]); const mediaLinks = [ ...(Object.entries(userPreferences.featuresEnabled.media || {}) @@ -250,16 +247,15 @@ export const loader = async ({ request }: LoaderFunctionArgs) => { const isDemo = Boolean(decodedCookie?.access_link?.is_demo); const shouldHaveUmami = - envData.FRONTEND_UMAMI_SCRIPT_URL && - envData.FRONTEND_UMAMI_WEBSITE_ID && - !envData.DISABLE_TELEMETRY && + coreDetails.frontend.umami.scriptUrl && + coreDetails.frontend.umami.websiteId && + !coreDetails.disableTelemetry && !isDemo; const workoutInProgress = isWorkoutActive(request); return { isDemo, - envData, mediaLinks, userDetails, coreDetails, @@ -762,9 +758,9 @@ export default function Layout() { {loaderData.shouldHaveUmami ? (