58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import { MembershipRole, UserPermissionRole } from "@prisma/client";
|
|
import { NextApiRequest, NextApiResponse } from "next";
|
|
|
|
import { HttpError } from "@calcom/lib/http-error";
|
|
import { defaultHandler, defaultResponder } from "@calcom/lib/server";
|
|
import { createContext } from "@calcom/trpc/server/createContext";
|
|
import { viewerRouter } from "@calcom/trpc/server/routers/viewer";
|
|
|
|
import { withMiddleware } from "@lib/helpers/withMiddleware";
|
|
import { schemaQueryTeamId } from "@lib/validations/shared/queryTeamId";
|
|
|
|
import { TRPCError } from "@trpc/server";
|
|
import { getHTTPStatusCodeFromError } from "@trpc/server/http";
|
|
|
|
import authMiddleware, { checkPermissions } from "./_auth-middleware";
|
|
|
|
const patchHandler = async (req: NextApiRequest, res: NextApiResponse) => {
|
|
const { isAdmin } = req;
|
|
await checkPermissions(req, { in: [MembershipRole.OWNER, MembershipRole.ADMIN] });
|
|
|
|
/** We shape the session as required by tRPC rounter */
|
|
async function sessionGetter() {
|
|
return {
|
|
user: {
|
|
id: req.userId,
|
|
username: "" /* Not used in this context */,
|
|
role: isAdmin ? UserPermissionRole.ADMIN : UserPermissionRole.USER,
|
|
},
|
|
hasValidLicense: true,
|
|
expires: "" /* Not used in this context */,
|
|
};
|
|
}
|
|
|
|
/** @see https://trpc.io/docs/server-side-calls */
|
|
const ctx = await createContext({ req, res }, sessionGetter);
|
|
const caller = viewerRouter.createCaller(ctx);
|
|
try {
|
|
const { teamId } = schemaQueryTeamId.parse(req.query);
|
|
const success_url = req.url?.replace("/publish", "");
|
|
return await caller.teams.publish({ teamId, success_url });
|
|
} catch (cause) {
|
|
if (cause instanceof TRPCError) {
|
|
const statusCode = getHTTPStatusCodeFromError(cause);
|
|
throw new HttpError({ statusCode, message: cause.message });
|
|
}
|
|
throw cause;
|
|
}
|
|
};
|
|
|
|
export default withMiddleware()(
|
|
defaultResponder(async (req: NextApiRequest, res: NextApiResponse) => {
|
|
await authMiddleware(req);
|
|
return defaultHandler({
|
|
PATCH: Promise.resolve({ default: defaultResponder(patchHandler) }),
|
|
})(req, res);
|
|
})
|
|
);
|