diff --git a/apps/web/app/(use-page-wrapper)/apps/[slug]/setup/page.tsx b/apps/web/app/(use-page-wrapper)/apps/[slug]/setup/page.tsx index 338fadcf5c..bbe46b0d7f 100644 --- a/apps/web/app/(use-page-wrapper)/apps/[slug]/setup/page.tsx +++ b/apps/web/app/(use-page-wrapper)/apps/[slug]/setup/page.tsx @@ -29,7 +29,7 @@ const getData = withAppDirSsr(getServerSideProps); const ServerPage = async ({ params, searchParams }: ServerPageProps) => { const context = buildLegacyCtx(await headers(), await cookies(), await params, await searchParams); - const { dehydratedState, ...props } = await getData(context); + const props = await getData(context); return ; }; diff --git a/apps/web/app/WithAppDirSsr.tsx b/apps/web/app/WithAppDirSsr.tsx index 110c3ce2df..edb1457a28 100644 --- a/apps/web/app/WithAppDirSsr.tsx +++ b/apps/web/app/WithAppDirSsr.tsx @@ -17,9 +17,5 @@ export const withAppDirSsr = return { ...props, - // includes dehydratedState required for future page trpcPropvider - ...("trpcState" in props && { - dehydratedState: props.trpcState, - }), }; }; diff --git a/apps/web/app/WithEmbedSSR.tsx b/apps/web/app/WithEmbedSSR.tsx index 80e41e1fd8..41af9868bc 100644 --- a/apps/web/app/WithEmbedSSR.tsx +++ b/apps/web/app/WithEmbedSSR.tsx @@ -42,9 +42,6 @@ const withEmbedSsrAppDir = return { ...ssrResponse.props, - ...("trpcState" in ssrResponse.props && { - dehydratedState: ssrResponse.props.trpcState, - }), isEmbed: true, }; }; diff --git a/apps/web/app/_trpc/context.ts b/apps/web/app/_trpc/context.ts new file mode 100644 index 0000000000..5763675022 --- /dev/null +++ b/apps/web/app/_trpc/context.ts @@ -0,0 +1,11 @@ +import { cookies, headers } from "next/headers"; + +import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; +import { createContext } from "@calcom/trpc/server/createContext"; + +import { buildLegacyRequest } from "@lib/buildLegacyCtx"; + +export const getTRPCContext = async () => { + const legacyReq = buildLegacyRequest(await headers(), await cookies()); + return await createContext({ req: legacyReq, res: {} as any }, getServerSession); +}; diff --git a/apps/web/lib/apps/categories/getServerSideProps.tsx b/apps/web/lib/apps/categories/getServerSideProps.tsx index b8d9a058de..8b001f33c8 100644 --- a/apps/web/lib/apps/categories/getServerSideProps.tsx +++ b/apps/web/lib/apps/categories/getServerSideProps.tsx @@ -25,7 +25,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return { props: { categories: Object.entries(categories).map(([name, count]) => ({ name, count })), - trpcState: undefined, }, }; }; diff --git a/apps/web/lib/apps/getServerSideProps.tsx b/apps/web/lib/apps/getServerSideProps.tsx index bf2cffa4c5..e2c60ffbff 100644 --- a/apps/web/lib/apps/getServerSideProps.tsx +++ b/apps/web/lib/apps/getServerSideProps.tsx @@ -42,7 +42,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => }), appStore, userAdminTeams: userAdminTeamsIds, - trpcState: undefined, }, }; }; diff --git a/apps/web/lib/apps/routing-forms/[...pages]/getServerSideProps.ts b/apps/web/lib/apps/routing-forms/[...pages]/getServerSideProps.ts index a4c7392014..7be7b1a553 100644 --- a/apps/web/lib/apps/routing-forms/[...pages]/getServerSideProps.ts +++ b/apps/web/lib/apps/routing-forms/[...pages]/getServerSideProps.ts @@ -7,8 +7,6 @@ import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; import prisma from "@calcom/prisma"; import type { AppGetServerSidePropsContext } from "@calcom/types/AppGetServerSideProps"; -import { ssrInit } from "@server/lib/ssr"; - const paramsSchema = z.object({ pages: z.array(z.string()), }); @@ -43,7 +41,7 @@ export async function getServerSideProps( }; } - const result = await getServerSideProps(context as AppGetServerSidePropsContext, prisma, user, ssrInit); + const result = await getServerSideProps(context as AppGetServerSidePropsContext, prisma, user); if (result.notFound) { return { notFound: true }; diff --git a/apps/web/lib/d/[link]/[slug]/getServerSideProps.tsx b/apps/web/lib/d/[link]/[slug]/getServerSideProps.tsx index ba2c1fd590..261e8028d3 100644 --- a/apps/web/lib/d/[link]/[slug]/getServerSideProps.tsx +++ b/apps/web/lib/d/[link]/[slug]/getServerSideProps.tsx @@ -1,4 +1,5 @@ import type { EmbedProps } from "app/WithEmbedSSR"; +import { getTRPCContext } from "app/_trpc/context"; import type { GetServerSidePropsContext } from "next"; import { z } from "zod"; @@ -10,6 +11,8 @@ import { UserRepository } from "@calcom/lib/server/repository/user"; import slugify from "@calcom/lib/slugify"; import prisma from "@calcom/prisma"; import { RedirectType } from "@calcom/prisma/enums"; +import { publicViewerRouter } from "@calcom/trpc/server/routers/publicViewer/_router"; +import { createCallerFactory } from "@calcom/trpc/server/trpc"; import { getTemporaryOrgRedirect } from "@lib/getTemporaryOrgRedirect"; import type { inferSSRProps } from "@lib/types/inferSSRProps"; @@ -23,9 +26,6 @@ async function getUserPageProps(context: GetServerSidePropsContext) { const { currentOrgDomain, isValidOrgDomain } = orgDomainConfig(context.req); const org = isValidOrgDomain ? currentOrgDomain : null; - const { ssrInit } = await import("@server/lib/ssr"); - const ssr = await ssrInit(context); - const hashedLink = await prisma.hashedLink.findUnique({ where: { link, @@ -115,7 +115,10 @@ async function getUserPageProps(context: GetServerSidePropsContext) { // We use this to both prefetch the query on the server, // as well as to check if the event exist, so we c an show a 404 otherwise. - const eventData = await ssr.viewer.public.event.fetch({ + const trpcContext = await getTRPCContext(); + const createCaller = createCallerFactory(publicViewerRouter); + const caller = createCaller(trpcContext); + const eventData = await caller.event({ username: name, eventSlug: slug, isTeamEvent, @@ -140,7 +143,6 @@ async function getUserPageProps(context: GetServerSidePropsContext) { booking, user: name, slug, - trpcState: ssr.dehydrate(), isBrandingHidden: hideBranding, // Sending the team event from the server, because this template file // is reused for both team and user events. diff --git a/apps/web/lib/event-types/[type]/getServerSideProps.ts b/apps/web/lib/event-types/[type]/getServerSideProps.ts index 9510b4c745..414752775a 100644 --- a/apps/web/lib/event-types/[type]/getServerSideProps.ts +++ b/apps/web/lib/event-types/[type]/getServerSideProps.ts @@ -1,14 +1,15 @@ +import { getTRPCContext } from "app/_trpc/context"; import type { GetServerSidePropsContext } from "next"; import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; import logger from "@calcom/lib/logger"; import { safeStringify } from "@calcom/lib/safeStringify"; +import { eventTypesRouter } from "@calcom/trpc/server/routers/viewer/eventTypes/_router"; +import { createCallerFactory } from "@calcom/trpc/server/trpc"; import { asStringOrThrow } from "@lib/asStringOrNull"; import type { inferSSRProps } from "@lib/types/inferSSRProps"; -import { ssrInit } from "@server/lib/ssr"; - export type PageProps = inferSSRProps; export const getServerSideProps = async (context: GetServerSidePropsContext) => { @@ -17,7 +18,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => const session = await getServerSession({ req }); const typeParam = parseInt(asStringOrThrow(query.type)); - const ssr = await ssrInit(context); if (Number.isNaN(typeParam)) { const notFound = { @@ -37,9 +37,11 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return redirect; } const getEventTypeById = async (eventTypeId: number) => { - await ssr.viewer.eventTypes.get.prefetch({ id: eventTypeId }); + const trpcContext = await getTRPCContext(); + const createCaller = createCallerFactory(eventTypesRouter); + const caller = createCaller(trpcContext); try { - const { eventType } = await ssr.viewer.eventTypes.get.fetch({ id: eventTypeId }); + const { eventType } = await caller.get({ id: eventTypeId }); return eventType; } catch (e: unknown) { logger.error(safeStringify(e)); @@ -61,7 +63,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => props: { eventType, type: typeParam, - trpcState: ssr.dehydrate(), }, }; }; diff --git a/apps/web/lib/getting-started/[[...step]]/getServerSideProps.tsx b/apps/web/lib/getting-started/[[...step]]/getServerSideProps.tsx index c64231bcea..a65419b9fe 100644 --- a/apps/web/lib/getting-started/[[...step]]/getServerSideProps.tsx +++ b/apps/web/lib/getting-started/[[...step]]/getServerSideProps.tsx @@ -1,11 +1,8 @@ import type { GetServerSidePropsContext } from "next"; -import { getLocale } from "@calcom/features/auth/lib/getLocale"; import { getServerSession } from "@calcom/features/auth/lib/getServerSession"; import { UserRepository } from "@calcom/lib/server/repository/user"; -import { ssrInit } from "@server/lib/ssr"; - export const getServerSideProps = async (context: GetServerSidePropsContext) => { const { req } = context; @@ -15,10 +12,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return { redirect: { permanent: false, destination: "/auth/login" } }; } - const ssr = await ssrInit(context); - - await ssr.viewer.me.get.prefetch(); - const user = await UserRepository.findUserTeams({ id: session.user.id, }); @@ -27,10 +20,8 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => throw new Error("User from session not found"); } - const locale = await getLocale(context.req); return { props: { - trpcState: ssr.dehydrate(), hasPendingInvites: user.teams.find((team) => team.accepted === false) ?? false, }, }; diff --git a/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts b/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts index 3d16f2c179..215f31a94a 100644 --- a/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts +++ b/apps/web/lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps.ts @@ -1,3 +1,4 @@ +import { getTRPCContext } from "app/_trpc/context"; import type { GetServerSidePropsContext } from "next"; import { z } from "zod"; @@ -6,6 +7,8 @@ import { getSlugOrRequestedSlug } from "@calcom/features/ee/organizations/lib/or import { orgDomainConfig } from "@calcom/features/ee/organizations/lib/orgDomains"; import slugify from "@calcom/lib/slugify"; import prisma from "@calcom/prisma"; +import { publicViewerRouter } from "@calcom/trpc/server/routers/publicViewer/_router"; +import { createCallerFactory } from "@calcom/trpc/server/trpc"; const paramsSchema = z.object({ type: z.string().transform((s) => slugify(s)), @@ -36,10 +39,10 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => } const org = isValidOrgDomain ? currentOrgDomain : null; - - const { ssrInit } = await import("@server/lib/ssr"); - const ssr = await ssrInit(context); - const eventData = await ssr.viewer.public.event.fetch({ + const trpcContext = await getTRPCContext(); + const createCaller = createCallerFactory(publicViewerRouter); + const caller = createCaller(trpcContext); + const eventData = await caller.event({ username: teamSlug, eventSlug: meetingSlug, isTeamEvent: true, @@ -67,7 +70,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => user: teamSlug, teamId: team.id, slug: meetingSlug, - trpcState: ssr.dehydrate(), isBrandingHidden: team?.hideBranding, themeBasis: null, }, diff --git a/apps/web/lib/signup/getServerSideProps.tsx b/apps/web/lib/signup/getServerSideProps.tsx index 64cd1c06a6..5329ce60e8 100644 --- a/apps/web/lib/signup/getServerSideProps.tsx +++ b/apps/web/lib/signup/getServerSideProps.tsx @@ -11,7 +11,6 @@ import slugify from "@calcom/lib/slugify"; import { teamMetadataSchema } from "@calcom/prisma/zod-utils"; import { IS_GOOGLE_LOGIN_ENABLED } from "@server/lib/constants"; -import { ssrInit } from "@server/lib/ssr"; const checkValidEmail = (email: string) => emailSchema.safeParse(email).success; @@ -26,7 +25,7 @@ const querySchema = z.object({ export const getServerSideProps = async (ctx: GetServerSidePropsContext) => { const prisma = await import("@calcom/prisma").then((mod) => mod.default); const emailVerificationEnabled = await getFeatureFlag(prisma, "email-verification"); - await ssrInit(ctx); + const signupDisabled = await getFeatureFlag(prisma, "disable-signup"); const token = z.string().optional().parse(ctx.query.token); diff --git a/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx b/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx index 52f2e3ea71..970ac41684 100644 --- a/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx +++ b/apps/web/lib/team/[slug]/[type]/getServerSideProps.tsx @@ -14,8 +14,6 @@ import { EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils"; import { getTemporaryOrgRedirect } from "@lib/getTemporaryOrgRedirect"; -import { ssrInit } from "@server/lib/ssr"; - const paramsSchema = z.object({ type: z.string().transform((s) => slugify(s)), slug: z.string().transform((s) => slugify(s)), @@ -59,7 +57,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => const name = team.parent?.name ?? team.name ?? null; const booking = rescheduleUid ? await getBookingForReschedule(`${rescheduleUid}`, session?.user?.id) : null; - const ssr = await ssrInit(context); + const fromRedirectOfNonOrgLink = context.query.orgRedirection === "true"; const isUnpublished = team.parent ? !team.parent.slug : !team.slug; @@ -125,7 +123,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => user: teamSlug, teamId: team.id, slug: meetingSlug, - trpcState: ssr.dehydrate(), isBrandingHidden: team?.hideBranding, isInstantMeeting: eventData && queryIsInstantMeeting ? true : false, themeBasis: null, diff --git a/apps/web/lib/team/[slug]/getServerSideProps.tsx b/apps/web/lib/team/[slug]/getServerSideProps.tsx index 082230fd8c..62d2763cfc 100644 --- a/apps/web/lib/team/[slug]/getServerSideProps.tsx +++ b/apps/web/lib/team/[slug]/getServerSideProps.tsx @@ -21,8 +21,6 @@ import { teamMetadataSchema } from "@calcom/prisma/zod-utils"; import { getTemporaryOrgRedirect } from "@lib/getTemporaryOrgRedirect"; -import { ssrInit } from "@server/lib/ssr"; - const log = logger.getSubLogger({ prefix: ["team/[slug]"] }); function getOrgProfileRedirectToVerifiedDomain( @@ -103,7 +101,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => } } - const ssr = await ssrInit(context); const metadata = teamMetadataSchema.parse(team?.metadata ?? {}); // Taking care of sub-teams and orgs @@ -149,7 +146,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => parent: teamParent, createdAt: null, }, - trpcState: ssr.dehydrate(), }, } as const; } @@ -215,7 +211,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => props: { considerUnpublished: true, team: { ...serializableTeam }, - trpcState: ssr.dehydrate(), }, } as const; } @@ -230,7 +225,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => children: isTeamOrParentOrgPrivate ? [] : team.children, }, themeBasis: serializableTeam.slug, - trpcState: ssr.dehydrate(), markdownStrippedBio, isValidOrgDomain, currentOrgDomain, diff --git a/apps/web/lib/video/[uid]/getServerSideProps.ts b/apps/web/lib/video/[uid]/getServerSideProps.ts index 6942c11e71..136f5f2155 100644 --- a/apps/web/lib/video/[uid]/getServerSideProps.ts +++ b/apps/web/lib/video/[uid]/getServerSideProps.ts @@ -15,15 +15,11 @@ import { OrganizationRepository } from "@calcom/lib/server/repository/organizati import { UserRepository } from "@calcom/lib/server/repository/user"; import prisma from "@calcom/prisma"; -import { ssrInit } from "@server/lib/ssr"; - const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true }); export async function getServerSideProps(context: GetServerSidePropsContext) { const { req } = context; - const ssr = await ssrInit(context); - const booking = await BookingRepository.findBookingForMeetingPage({ bookingUid: context.query.uid as string, }); @@ -153,7 +149,6 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { }, hasTeamPlan: !!hasTeamPlan, calVideoLogo, - trpcState: ssr.dehydrate(), }, }; } diff --git a/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx b/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx index c6eaec63b3..b5af7d953f 100644 --- a/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx +++ b/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx @@ -1,3 +1,4 @@ +import { getTRPCContext } from "app/_trpc/context"; import type { GetServerSidePropsContext } from "next"; import { z } from "zod"; @@ -11,11 +12,11 @@ import { maybeGetBookingUidFromSeat } from "@calcom/lib/server/maybeGetBookingUi import { BookingRepository } from "@calcom/lib/server/repository/booking"; import prisma from "@calcom/prisma"; import { customInputSchema, EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils"; +import { meRouter } from "@calcom/trpc/server/routers/viewer/me/_router"; +import { createCallerFactory } from "@calcom/trpc/server/trpc"; import type { inferSSRProps } from "@lib/types/inferSSRProps"; -import { ssrInit } from "@server/lib/ssr"; - const stringToBoolean = z .string() .optional() @@ -45,13 +46,15 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { "@lib/booking" ); - const ssr = await ssrInit(context); const session = await getServerSession({ req: context.req }); let tz: string | null = null; let userTimeFormat: number | null = null; let requiresLoginToUpdate = false; if (session) { - const user = await ssr.viewer.me.get.fetch(); + const trpcContext = await getTRPCContext(); + const createCaller = createCallerFactory(meRouter); + const caller = createCaller(trpcContext); + const user = await caller.get(); tz = user.timeZone; userTimeFormat = user.timeFormat; } @@ -218,7 +221,6 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { profile, eventType, recurringBookings: await getRecurringBookings(bookingInfo.recurringEventId), - trpcState: ssr.dehydrate(), dynamicEventName: bookingInfo?.eventType?.eventName || "", bookingInfo, paymentStatus: payment, diff --git a/apps/web/modules/users/views/users-public-view.test.tsx b/apps/web/modules/users/views/users-public-view.test.tsx index b4ddb9a530..466122ff75 100644 --- a/apps/web/modules/users/views/users-public-view.test.tsx +++ b/apps/web/modules/users/views/users-public-view.test.tsx @@ -12,10 +12,6 @@ vi.mock("@calcom/lib/constants", async () => { function mockedUserPageComponentProps(props: Partial>) { return { - trpcState: { - mutations: [], - queries: [], - }, themeBasis: "dark", safeBio: "My Bio", profile: { diff --git a/apps/web/server/lib/[user]/[type]/getServerSideProps.ts b/apps/web/server/lib/[user]/[type]/getServerSideProps.ts index 0405e79510..13f51b1a83 100644 --- a/apps/web/server/lib/[user]/[type]/getServerSideProps.ts +++ b/apps/web/server/lib/[user]/[type]/getServerSideProps.ts @@ -1,4 +1,4 @@ -import type { DehydratedState } from "@tanstack/react-query"; +import { getTRPCContext } from "app/_trpc/context"; import { type GetServerSidePropsContext } from "next"; import type { Session } from "next-auth"; import { z } from "zod"; @@ -13,6 +13,8 @@ import { UserRepository } from "@calcom/lib/server/repository/user"; import slugify from "@calcom/lib/slugify"; import prisma from "@calcom/prisma"; import { RedirectType } from "@calcom/prisma/client"; +import { publicViewerRouter } from "@calcom/trpc/server/routers/publicViewer/_router"; +import { createCallerFactory } from "@calcom/trpc/server/trpc"; import { getTemporaryOrgRedirect } from "@lib/getTemporaryOrgRedirect"; @@ -40,7 +42,6 @@ type Props = { bookingUid: string | null; user: string; slug: string; - trpcState: DehydratedState; isBrandingHidden: boolean; isSEOIndexable: boolean | null; themeBasis: null | string; @@ -103,8 +104,6 @@ async function getDynamicGroupPageProps(context: GetServerSidePropsContext) { const { user: usernames, type: slug } = paramsSchema.parse(context.params); const { rescheduleUid, bookingUid } = context.query; - const { ssrInit } = await import("@server/lib/ssr"); - const ssr = await ssrInit(context); const { currentOrgDomain, isValidOrgDomain } = orgDomainConfig(context.req, context.params?.orgSlug); const org = isValidOrgDomain ? currentOrgDomain : null; if (!org) { @@ -135,7 +134,10 @@ async function getDynamicGroupPageProps(context: GetServerSidePropsContext) { // We use this to both prefetch the query on the server, // as well as to check if the event exist, so we c an show a 404 otherwise. - const eventData = await ssr.viewer.public.event.fetch({ + const trpcContext = await getTRPCContext(); + const createCaller = createCallerFactory(publicViewerRouter); + const caller = createCaller(trpcContext); + const eventData = await caller.event({ username: usernames.join("+"), eventSlug: slug, org, @@ -171,7 +173,6 @@ async function getDynamicGroupPageProps(context: GetServerSidePropsContext) { }, user: usernames.join("+"), slug, - trpcState: ssr.dehydrate(), isBrandingHidden: false, isSEOIndexable: true, themeBasis: null, @@ -215,8 +216,6 @@ async function getUserPageProps(context: GetServerSidePropsContext) { } } - const { ssrInit } = await import("@server/lib/ssr"); - const ssr = await ssrInit(context); const [user] = await UserRepository.findUsersByUsername({ usernameList: [username], orgSlug: isValidOrgDomain ? currentOrgDomain : null, @@ -231,7 +230,10 @@ async function getUserPageProps(context: GetServerSidePropsContext) { const org = isValidOrgDomain ? currentOrgDomain : null; // We use this to both prefetch the query on the server, // as well as to check if the event exist, so we can show a 404 otherwise. - const eventData = await ssr.viewer.public.event.fetch({ + const trpcContext = await getTRPCContext(); + const createCaller = createCallerFactory(publicViewerRouter); + const caller = createCaller(trpcContext); + const eventData = await caller.event({ username, eventSlug: slug, org, @@ -270,7 +272,6 @@ async function getUserPageProps(context: GetServerSidePropsContext) { }, user: username, slug, - trpcState: ssr.dehydrate(), isBrandingHidden: user?.hideBranding, isSEOIndexable: allowSEOIndexing, themeBasis: username, diff --git a/apps/web/server/lib/[user]/getServerSideProps.ts b/apps/web/server/lib/[user]/getServerSideProps.ts index 9dfd12a818..bf65feca62 100644 --- a/apps/web/server/lib/[user]/getServerSideProps.ts +++ b/apps/web/server/lib/[user]/getServerSideProps.ts @@ -1,4 +1,3 @@ -import type { DehydratedState } from "@tanstack/react-query"; import type { EmbedProps } from "app/WithEmbedSSR"; import type { GetServerSideProps } from "next"; import { encode } from "querystring"; @@ -20,11 +19,8 @@ import type { UserProfile } from "@calcom/types/UserProfile"; import { getTemporaryOrgRedirect } from "@lib/getTemporaryOrgRedirect"; -import { ssrInit } from "@server/lib/ssr"; - const log = logger.getSubLogger({ prefix: ["[[pages/[user]]]"] }); type UserPageProps = { - trpcState: DehydratedState; profile: { name: string; image: string; @@ -74,7 +70,6 @@ type UserPageProps = { } & EmbedProps; export const getServerSideProps: GetServerSideProps = async (context) => { - const ssr = await ssrInit(context); const { currentOrgDomain, isValidOrgDomain } = orgDomainConfig(context.req, context.params?.orgSlug); const usernameList = getUsernameList(context.query.user as string); @@ -197,7 +192,6 @@ export const getServerSideProps: GetServerSideProps = async (cont profile, // Dynamic group has no theme preference right now. It uses system theme. themeBasis: user.username, - trpcState: ssr.dehydrate(), markdownStrippedBio, isOrgSEOIndexable: org?.organizationSettings?.allowSEOIndexing ?? false, }, diff --git a/apps/web/server/lib/auth/login/getServerSideProps.tsx b/apps/web/server/lib/auth/login/getServerSideProps.tsx index 24175c8a51..ad8914e718 100644 --- a/apps/web/server/lib/auth/login/getServerSideProps.tsx +++ b/apps/web/server/lib/auth/login/getServerSideProps.tsx @@ -9,13 +9,11 @@ import { getSafeRedirectUrl } from "@calcom/lib/getSafeRedirectUrl"; import prisma from "@calcom/prisma"; import { IS_GOOGLE_LOGIN_ENABLED } from "@server/lib/constants"; -import { ssrInit } from "@server/lib/ssr"; export async function getServerSideProps(context: GetServerSidePropsContext) { const { req, query } = context; const session = await getServerSession({ req }); - const ssr = await ssrInit(context); const verifyJwt = (jwt: string) => { const secret = new TextEncoder().encode(process.env.CALENDSO_ENCRYPTION_KEY); @@ -91,7 +89,6 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { return { props: { csrfToken: await getCsrfToken(context), - trpcState: ssr.dehydrate(), isGoogleLoginEnabled: IS_GOOGLE_LOGIN_ENABLED, isSAMLLoginEnabled, samlTenantID, diff --git a/apps/web/server/lib/auth/sso/[provider]/getServerSideProps.tsx b/apps/web/server/lib/auth/sso/[provider]/getServerSideProps.tsx index 239fd701aa..d8738df100 100644 --- a/apps/web/server/lib/auth/sso/[provider]/getServerSideProps.tsx +++ b/apps/web/server/lib/auth/sso/[provider]/getServerSideProps.tsx @@ -12,8 +12,6 @@ import prisma from "@calcom/prisma"; import { asStringOrNull } from "@lib/asStringOrNull"; -import { ssrInit } from "@server/lib/ssr"; - export const getServerSideProps = async (context: GetServerSidePropsContext) => { // get query params and typecast them to string // (would be even better to assert them instead of typecasting) @@ -28,7 +26,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => const { req } = context; const session = await getServerSession({ req }); - const ssr = await ssrInit(context); + const { currentOrgDomain } = orgDomainConfig(context.req); if (session) { @@ -93,7 +91,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => return { props: { - trpcState: ssr.dehydrate(), provider: providerParam, isSAMLLoginEnabled, hostedCal, diff --git a/apps/web/server/lib/setup/getServerSideProps.tsx b/apps/web/server/lib/setup/getServerSideProps.tsx index 1813c7985a..2ba7a4c782 100644 --- a/apps/web/server/lib/setup/getServerSideProps.tsx +++ b/apps/web/server/lib/setup/getServerSideProps.tsx @@ -5,12 +5,9 @@ import { getDeploymentKey } from "@calcom/features/ee/deployment/lib/getDeployme import prisma from "@calcom/prisma"; import { UserPermissionRole } from "@calcom/prisma/enums"; -import { ssrInit } from "@server/lib/ssr"; - export async function getServerSideProps(context: GetServerSidePropsContext) { const { req } = context; - const ssr = await ssrInit(context); const userCount = await prisma.user.count(); const session = await getServerSession({ req }); @@ -45,7 +42,6 @@ export async function getServerSideProps(context: GetServerSidePropsContext) { return { props: { - trpcState: ssr.dehydrate(), isFreeLicense, userCount, }, diff --git a/apps/web/server/lib/ssr.ts b/apps/web/server/lib/ssr.ts deleted file mode 100644 index 42bc111b70..0000000000 --- a/apps/web/server/lib/ssr.ts +++ /dev/null @@ -1,72 +0,0 @@ -import type { GetServerSidePropsContext } from "next"; -import superjson from "superjson"; - -import { forms } from "@calcom/app-store/routing-forms/trpc/procedures/forms"; -import { getLocale } from "@calcom/features/auth/lib/getLocale"; -import { map } from "@calcom/features/flags/server/procedures/map"; -import { createContext } from "@calcom/trpc/server/createContext"; -import { teamsAndUserProfilesQuery } from "@calcom/trpc/server/routers/loggedInViewer/procedures/teamsAndUserProfilesQuery"; -import { event } from "@calcom/trpc/server/routers/publicViewer/procedures/event"; -import { session } from "@calcom/trpc/server/routers/publicViewer/procedures/session"; -import { get } from "@calcom/trpc/server/routers/viewer/eventTypes/procedures/get"; -import { meRouter } from "@calcom/trpc/server/routers/viewer/me/_router"; -import { hasTeamPlan } from "@calcom/trpc/server/routers/viewer/teams/procedures/hasTeamPlan"; -import { mergeRouters, router } from "@calcom/trpc/server/trpc"; - -import { createServerSideHelpers } from "@trpc/react-query/server"; - -// Temporary workaround for OOM issue, import only procedures that are called on the server side -const routerSlice = router({ - viewer: mergeRouters( - router({ - me: meRouter, - features: router({ - map, - }), - public: router({ - session, - event, - }), - teams: router({ - hasTeamPlan, - }), - appRoutingForms: router({ - forms, - }), - teamsAndUserProfilesQuery: router({ - teamsAndUserProfilesQuery, - }), - eventTypes: router({ - get, - }), - }) - ), -}); - -/** - * Initialize server-side rendering tRPC helpers. - * Provides a method to prefetch tRPC-queries in a `getServerSideProps`-function. - * Automatically prefetches i18n based on the passed in `context`-object to prevent i18n-flickering. - * Make sure to `return { props: { trpcState: ssr.dehydrate() } }` at the end. - */ -export async function ssrInit(context: GetServerSidePropsContext, options?: { noI18nPreload: boolean }) { - const ctx = await createContext(context); - const locale = await getLocale(context.req); - - const ssr = createServerSideHelpers({ - router: routerSlice, - transformer: superjson, - ctx: { ...ctx, locale }, - }); - - await Promise.allSettled([ - // So feature flags are available on first render - ssr.viewer.features.map.prefetch(), - // Provides a better UX to the users who have already upgraded. - ssr.viewer.teams.hasTeamPlan.prefetch(), - ssr.viewer.public.session.prefetch(), - ssr.viewer.me.get.prefetch(), - ]); - - return ssr; -} diff --git a/packages/app-store/routing-forms/components/getServerSidePropsSingleForm.ts b/packages/app-store/routing-forms/components/getServerSidePropsSingleForm.ts index b65bc23ca1..1b90a4f4de 100644 --- a/packages/app-store/routing-forms/components/getServerSidePropsSingleForm.ts +++ b/packages/app-store/routing-forms/components/getServerSidePropsSingleForm.ts @@ -1,9 +1,4 @@ -import type { - AppGetServerSidePropsContext, - AppPrisma, - AppSsrInit, - AppUser, -} from "@calcom/types/AppGetServerSideProps"; +import type { AppGetServerSidePropsContext, AppPrisma, AppUser } from "@calcom/types/AppGetServerSideProps"; import { enrichFormWithMigrationData } from "../enrichFormWithMigrationData"; import { getSerializableForm } from "../lib/getSerializableForm"; @@ -11,11 +6,8 @@ import { getSerializableForm } from "../lib/getSerializableForm"; export const getServerSidePropsForSingleFormView = async function getServerSidePropsForSingleFormView( context: AppGetServerSidePropsContext, prisma: AppPrisma, - user: AppUser, - ssrInit: AppSsrInit + user: AppUser ) { - const ssr = await ssrInit(context); - if (!user) { return { redirect: { diff --git a/packages/app-store/routing-forms/pages/forms/getServerSideProps.ts b/packages/app-store/routing-forms/pages/forms/getServerSideProps.ts index 725b220a3b..a737dedc94 100644 --- a/packages/app-store/routing-forms/pages/forms/getServerSideProps.ts +++ b/packages/app-store/routing-forms/pages/forms/getServerSideProps.ts @@ -1,16 +1,9 @@ -import { getTeamsFiltersFromQuery } from "@calcom/features/filters/lib/getTeamsFiltersFromQuery"; -import type { - AppGetServerSidePropsContext, - AppPrisma, - AppSsrInit, - AppUser, -} from "@calcom/types/AppGetServerSideProps"; +import type { AppGetServerSidePropsContext, AppPrisma, AppUser } from "@calcom/types/AppGetServerSideProps"; export const getServerSideProps = async function getServerSideProps( context: AppGetServerSidePropsContext, prisma: AppPrisma, - user: AppUser, - ssrInit: AppSsrInit + user: AppUser ) { if (!user) { return { @@ -20,15 +13,7 @@ export const getServerSideProps = async function getServerSideProps( }, }; } - const ssr = await ssrInit(context); - const filters = getTeamsFiltersFromQuery(context.query); - - await ssr.viewer.appRoutingForms.forms.prefetch({ - filters, - }); - // Prefetch this so that New Button is immediately available - await ssr.viewer.teamsAndUserProfilesQuery.prefetch(); return { props: {}, }; diff --git a/packages/features/ee/payments/pages/payment.tsx b/packages/features/ee/payments/pages/payment.tsx index 7ab1f8ce71..c18b7e0c86 100644 --- a/packages/features/ee/payments/pages/payment.tsx +++ b/packages/features/ee/payments/pages/payment.tsx @@ -8,8 +8,6 @@ import { paymentDataSelect } from "@calcom/prisma/selects/payment"; import { EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils"; import type { inferSSRProps } from "@calcom/types/inferSSRProps"; -import { ssrInit } from "../../../../../apps/web/server/lib/ssr"; - export type PaymentPageProps = inferSSRProps; const querySchema = z.object({ @@ -17,8 +15,6 @@ const querySchema = z.object({ }); export const getServerSideProps = async (context: GetServerSidePropsContext) => { - const ssr = await ssrInit(context); - const { uid } = querySchema.parse(context.query); const rawPayment = await prisma.payment.findFirst({ where: { @@ -79,7 +75,6 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) => metadata: EventTypeMetaDataSchema.parse(eventType.metadata), }, booking, - trpcState: ssr.dehydrate(), payment, clientSecret: getClientSecretFromPayment(payment), profile, diff --git a/packages/platform/atoms/event-types/hooks/useAtomEventTypePaymentInfo.ts b/packages/platform/atoms/event-types/hooks/useAtomEventTypePaymentInfo.ts index 4b7de5b97e..e9db242be6 100644 --- a/packages/platform/atoms/event-types/hooks/useAtomEventTypePaymentInfo.ts +++ b/packages/platform/atoms/event-types/hooks/useAtomEventTypePaymentInfo.ts @@ -23,7 +23,7 @@ export const useAtomsEventTypePaymentInfo = ({ return useQuery({ queryKey: [QUERY_KEY, uid], queryFn: () => { - return http?.get>>(pathname).then((res) => { + return http?.get>(pathname).then((res) => { if (res.data.status === SUCCESS_STATUS) { onEventTypePaymentInfoSuccess?.(); return res.data.data; diff --git a/packages/platform/atoms/event-types/payments/PaymentForm.tsx b/packages/platform/atoms/event-types/payments/PaymentForm.tsx index 2c108ca9e9..e1ede70621 100644 --- a/packages/platform/atoms/event-types/payments/PaymentForm.tsx +++ b/packages/platform/atoms/event-types/payments/PaymentForm.tsx @@ -26,8 +26,8 @@ export const PaymentForm = ({ onEventTypePaymentInfoFailure, }: { paymentUid: string; - onPaymentSuccess?: (input: Omit) => void; - onPaymentCancellation?: (input: Omit) => void; + onPaymentSuccess?: (input: PaymentPageProps) => void; + onPaymentCancellation?: (input: PaymentPageProps) => void; onEventTypePaymentInfoSuccess?: () => void; onEventTypePaymentInfoFailure?: () => void; }) => { diff --git a/packages/platform/atoms/event-types/payments/StripePaymentForm.tsx b/packages/platform/atoms/event-types/payments/StripePaymentForm.tsx index 73c08111d7..0203b8be24 100644 --- a/packages/platform/atoms/event-types/payments/StripePaymentForm.tsx +++ b/packages/platform/atoms/event-types/payments/StripePaymentForm.tsx @@ -11,8 +11,8 @@ import { useLocale } from "@calcom/lib/hooks/useLocale"; const StripePaymentComponent = ( props: Props & { - onPaymentSuccess?: (input: Omit) => void; - onPaymentCancellation?: (input: Omit) => void; + onPaymentSuccess?: (input: PaymentPageProps) => void; + onPaymentCancellation?: (input: PaymentPageProps) => void; } ) => { const { t } = useLocale(); @@ -82,7 +82,7 @@ const StripePaymentComponent = ( }); } else { setState({ status: "idle" }); - props.onPaymentSuccess?.(props as unknown as Omit); + props.onPaymentSuccess?.(props as unknown as PaymentPageProps); if (props.location) { if (props.location.includes("integration")) { params.location = t("web_conferencing_details_to_follow"); @@ -93,7 +93,7 @@ const StripePaymentComponent = ( } }} onCancel={() => { - props.onPaymentCancellation?.(props as unknown as Omit); + props.onPaymentCancellation?.(props as unknown as PaymentPageProps); }} onPaymentElementChange={() => { setState({ status: "idle" }); @@ -105,8 +105,8 @@ const StripePaymentComponent = ( const StripePaymentForm = ( props: Props & { uid: string; - onPaymentSuccess?: (input: Omit) => void; - onPaymentCancellation?: (input: Omit) => void; + onPaymentSuccess?: (input: PaymentPageProps) => void; + onPaymentCancellation?: (input: PaymentPageProps) => void; } ) => { const stripePromise = getStripe(props.payment.data.stripe_publishable_key as any); diff --git a/packages/types/AppGetServerSideProps.d.ts b/packages/types/AppGetServerSideProps.d.ts index c1750803c6..685d5202a9 100644 --- a/packages/types/AppGetServerSideProps.d.ts +++ b/packages/types/AppGetServerSideProps.d.ts @@ -3,17 +3,14 @@ import type { CalendsoSessionUser } from "next-auth"; import type prisma from "@calcom/prisma"; -import type { ssrInit } from "@server/lib/ssr"; - export type AppUser = CalendsoSessionUser | undefined; export type AppPrisma = typeof prisma; export type AppGetServerSidePropsContext = GetServerSidePropsContext<{ pages: string[]; }>; -export type AppSsrInit = ssrInit; + export type AppGetServerSideProps = ( context: AppGetServerSidePropsContext, prisma: AppPrisma, - user: AppUser, - ssrInit: AppSsrInit + user: AppUser ) => GetServerSidePropsResult;