documenso/packages/lib/server-only/webhooks/create-webhook.ts

51 lines
1.1 KiB
TypeScript
Raw Normal View History

2025-01-02 04:33:37 +00:00
import type { WebhookTriggerEvents } from '@prisma/client';
2024-02-09 14:07:33 +00:00
import { prisma } from '@documenso/prisma';
2025-06-10 01:49:52 +00:00
import { TEAM_MEMBER_ROLE_PERMISSIONS_MAP } from '../../constants/teams';
import { AppError, AppErrorCode } from '../../errors/app-error';
import { buildTeamWhereQuery } from '../../utils/teams';
2024-02-09 14:07:33 +00:00
export interface CreateWebhookOptions {
webhookUrl: string;
eventTriggers: WebhookTriggerEvents[];
secret: string | null;
enabled: boolean;
userId: number;
2025-06-10 01:49:52 +00:00
teamId: number;
2024-02-09 14:07:33 +00:00
}
export const createWebhook = async ({
webhookUrl,
eventTriggers,
secret,
enabled,
userId,
2024-02-27 05:56:32 +00:00
teamId,
2024-02-09 14:07:33 +00:00
}: CreateWebhookOptions) => {
2025-06-10 01:49:52 +00:00
const team = await prisma.team.findFirst({
where: buildTeamWhereQuery({
teamId,
userId,
roles: TEAM_MEMBER_ROLE_PERMISSIONS_MAP['MANAGE_TEAM'],
}),
});
if (!team) {
throw new AppError(AppErrorCode.NOT_FOUND, {
message: 'Team not found',
2024-02-27 05:56:32 +00:00
});
}
2024-02-09 14:07:33 +00:00
return await prisma.webhook.create({
data: {
webhookUrl,
eventTriggers,
secret,
enabled,
userId,
2024-02-27 05:56:32 +00:00
teamId,
2024-02-09 14:07:33 +00:00
},
});
};