import { z } from 'zod' import { validateHTMLMessage } from './helpers' export const regexPatternTemplateMessage = 'https?:\\/\\/[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}(?:\\/[^/\\s]*)?' export const regexLinkImageTemplateMessage = /^(|https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)\/\S+\.(png|jpe?g))$/ export const maxLengthButtons = 9 export const maxLengthMessage = 3500 export const TemplateMessageButtonsSchema = z.object({ link: z.string() .regex(new RegExp(regexPatternTemplateMessage), 'Invalid link format') .max(250), name: z.string() .min(3) .max(18), id: z.string() .min(1) .max(36) }) export const TemplateSchema = z.object({ link: z.string() .max(250) .regex(new RegExp(regexLinkImageTemplateMessage), 'Link must end with .png, .jpg, or .jpeg') .optional() .default(''), template: z.string() .min(1) .max(maxLengthMessage) .refine(value => validateHTMLMessage(value), { message: 'Template content is not valid for Telegram' }), buttons: z.array(TemplateMessageButtonsSchema) .max(maxLengthButtons) }) export const TemplateMessageSchema = z.object({ id: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER), name: z.string().min(1).max(50), sequenceNumber: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER), userId: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER), templateMessage: TemplateSchema, createdAt: z.date(), updatedAt: z.date() })