import { withSentry } from '@sentry/nextjs' import { CollaborationType } from 'db' import prisma from 'libs/prisma' import { NextApiRequest, NextApiResponse } from 'next' import { getAuthenticatedUser } from 'services/api/utils' import { badRequest, forbidden, methodNotAllowed, notAuthenticated, } from 'utils' const handler = async (req: NextApiRequest, res: NextApiResponse) => { const user = await getAuthenticatedUser(req) if (!user) return notAuthenticated(res) const webhookId = req.query.webhookId as string if (req.method === 'GET') { const webhook = await prisma.webhook.findFirst({ where: { id: webhookId, typebot: { OR: [ { ownerId: user.id }, { collaborators: { some: { userId: user.id, }, }, }, ], }, }, }) return res.send({ webhook }) } if (req.method === 'PUT') { const data = req.body if (!('typebotId' in data)) return badRequest(res) const typebot = await prisma.typebot.findFirst({ where: { OR: [ { id: data.typebotId, ownerId: user.id }, { collaborators: { some: { userId: user.id, type: CollaborationType.WRITE, }, }, }, ], }, }) if (!typebot) return forbidden(res) const webhook = await prisma.webhook.upsert({ where: { id: webhookId, }, create: data, update: data, }) return res.send({ webhook }) } methodNotAllowed(res) } export default withSentry(handler)