import { PermissionCheckService } from "@calcom/features/pbac/services/permission-check.service"; import { prisma } from "@calcom/prisma"; import { MembershipRole } from "@calcom/prisma/enums"; import type { TrpcSessionUser } from "@calcom/trpc/server/types"; import { TRPCError } from "@trpc/server"; import type { TDeleteInviteInputSchema } from "./deleteInvite.schema"; type DeleteInviteOptions = { ctx: { user: NonNullable; }; input: TDeleteInviteInputSchema; }; export const deleteInviteHandler = async ({ ctx, input }: DeleteInviteOptions) => { const { token } = input; const verificationToken = await prisma.verificationToken.findUnique({ where: { token: token, }, select: { teamId: true, id: true, team: { select: { isOrganization: true }, }, }, }); if (!verificationToken) throw new TRPCError({ code: "NOT_FOUND" }); if (!verificationToken.teamId) throw new TRPCError({ code: "UNAUTHORIZED" }); const permissionCheckService = new PermissionCheckService(); const isOrgContext = !!verificationToken.team?.isOrganization; const permission = isOrgContext ? "organization.invite" : "team.invite"; const hasInvitePermission = await permissionCheckService.checkPermission({ userId: ctx.user.id, teamId: verificationToken.teamId, permission, fallbackRoles: [MembershipRole.OWNER, MembershipRole.ADMIN], }); if (!hasInvitePermission) throw new TRPCError({ code: "UNAUTHORIZED" }); await prisma.verificationToken.delete({ where: { id: verificationToken.id } }); }; export default deleteInviteHandler;