diff --git a/apps/api/lib/helpers/verifyApiKey.ts b/apps/api/lib/helpers/verifyApiKey.ts index 45df30e5ef..118faef649 100644 --- a/apps/api/lib/helpers/verifyApiKey.ts +++ b/apps/api/lib/helpers/verifyApiKey.ts @@ -17,7 +17,7 @@ export const dateNotInPast = function (date: Date) { export const verifyApiKey: NextMiddleware = async (req, res, next) => { const { prisma, isCustomPrisma, isAdmin } = req; const hasValidLicense = await checkLicense(prisma); - if (!hasValidLicense) + if (!hasValidLicense && process.env.NODE_ENV !== "development") return res.status(401).json({ error: "Invalid or missing CALCOM_LICENSE_KEY environment variable" }); // If the user is an admin and using a license key (from customPrisma), skip the apiKey check. if (isCustomPrisma && isAdmin) { diff --git a/apps/api/pages/api/teams/[teamId]/publish.ts b/apps/api/pages/api/teams/[teamId]/publish.ts index 4cf45e12fd..73b8e21f98 100644 --- a/apps/api/pages/api/teams/[teamId]/publish.ts +++ b/apps/api/pages/api/teams/[teamId]/publish.ts @@ -2,29 +2,36 @@ import type { NextApiRequest, NextApiResponse } from "next"; import { HttpError } from "@calcom/lib/http-error"; import { defaultHandler, defaultResponder } from "@calcom/lib/server"; -import { MembershipRole } from "@calcom/prisma/enums"; +import { MembershipRole, UserPermissionRole } from "@calcom/prisma/enums"; import { createContext } from "@calcom/trpc/server/createContext"; -import { publishHandler } from "@calcom/trpc/server/routers/viewer/teams/publish.handler"; +import { viewerTeamsRouter } from "@calcom/trpc/server/routers/viewer/teams/_router"; import { TRPCError } from "@trpc/server"; import { getHTTPStatusCodeFromError } from "@trpc/server/http"; import { withMiddleware } from "~/lib/helpers/withMiddleware"; -import { schemaQueryTeamId } from "~/lib/validations/shared/queryTeamId"; import authMiddleware, { checkPermissions } from "./_auth-middleware"; const patchHandler = async (req: NextApiRequest, res: NextApiResponse) => { await checkPermissions(req, { in: [MembershipRole.OWNER, MembershipRole.ADMIN] }); - /** @see https://trpc.io/docs/server-side-calls */ - const ctx = await createContext({ req, res }); - const user = ctx.user; - if (!user) { - throw new Error("Internal Error."); + async function sessionGetter() { + return { + user: { + id: req.userId, + username: "" /* Not used in this context */, + role: req.isAdmin ? UserPermissionRole.ADMIN : UserPermissionRole.USER, + }, + hasValidLicense: true /* To comply with TS signature */, + expires: "" /* Not used in this context */, + }; } + /** @see https://trpc.io/docs/server-side-calls */ + const ctx = await createContext({ req, res }, sessionGetter); try { - const { teamId } = schemaQueryTeamId.parse(req.query); - return await publishHandler({ input: { teamId }, ctx: { ...ctx, user } }); + const caller = viewerTeamsRouter.createCaller(ctx); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return await caller.publish(req.query as any /* Let tRPC handle this */); } catch (cause) { if (cause instanceof TRPCError) { const statusCode = getHTTPStatusCodeFromError(cause); diff --git a/packages/trpc/server/routers/viewer/teams/publish.schema.ts b/packages/trpc/server/routers/viewer/teams/publish.schema.ts index 4038cb7fc1..feb45a8372 100644 --- a/packages/trpc/server/routers/viewer/teams/publish.schema.ts +++ b/packages/trpc/server/routers/viewer/teams/publish.schema.ts @@ -1,7 +1,7 @@ import { z } from "zod"; export const ZPublishInputSchema = z.object({ - teamId: z.number(), + teamId: z.coerce.number(), }); export type TPublishInputSchema = z.infer;