import { isPrivateUrl } from '@documenso/lib/server-only/webhooks/is-private-url'; import { URL_PATTERN } from '@documenso/lib/types/name'; import { WebhookTriggerEvents } from '@prisma/client'; import { z } from 'zod'; export const ZWebhookUrlSchema = z .string() .url() .refine((url) => !isPrivateUrl(url), { message: 'Webhook URL cannot point to a private or loopback address', }) /* * Without this, values like "foo: bar" would be valid URLs. * Keep the same error message as the zod url() validator. */ .refine((value) => URL_PATTERN.test(value), { message: 'Invalid url', }); export const ZCreateWebhookRequestSchema = z.object({ webhookUrl: ZWebhookUrlSchema, eventTriggers: z .array(z.nativeEnum(WebhookTriggerEvents)) .min(1, { message: 'At least one event trigger is required' }), secret: z.string().nullable(), enabled: z.boolean(), }); export type TCreateWebhookFormSchema = z.infer; export const ZGetWebhookByIdRequestSchema = z.object({ id: z.string(), }); export type TGetWebhookByIdRequestSchema = z.infer; export const ZEditWebhookRequestSchema = ZCreateWebhookRequestSchema.extend({ id: z.string(), }); export type TEditWebhookRequestSchema = z.infer; export const ZDeleteWebhookRequestSchema = z.object({ id: z.string(), }); export type TDeleteWebhookRequestSchema = z.infer; export const ZTriggerTestWebhookRequestSchema = z.object({ id: z.string(), event: z.nativeEnum(WebhookTriggerEvents), }); export type TTriggerTestWebhookRequestSchema = z.infer;