import { z } from 'zod'; import { FieldType, ReadStatus, RecipientRole, SendStatus, SigningStatus, } from '@documenso/prisma/client'; /** * Documents */ export const ZGetDocumentsQuerySchema = z.object({ page: z.number().min(1).optional().default(1), perPage: z.number().min(1).optional().default(1), }); export type TGetDocumentsQuerySchema = z.infer; export const ZDeleteDocumentMutationSchema = null; export type TDeleteDocumentMutationSchema = typeof ZDeleteDocumentMutationSchema; export const ZSuccessfulDocumentResponseSchema = z.object({ id: z.number(), userId: z.number(), title: z.string(), status: z.string(), documentDataId: z.string(), createdAt: z.date(), updatedAt: z.date(), completedAt: z.date().nullable(), }); export type TSuccessfulDocumentResponseSchema = z.infer; export const ZSendDocumentForSigningMutationSchema = null; export type TSendDocumentForSigningMutationSchema = typeof ZSendDocumentForSigningMutationSchema; export const ZUploadDocumentSuccessfulSchema = z.object({ url: z.string(), key: z.string(), }); export type TUploadDocumentSuccessfulSchema = z.infer; export const ZCreateDocumentMutationSchema = z.object({ title: z.string().min(1), recipients: z.array( z.object({ name: z.string().min(1), email: z.string().email().min(1), role: z.nativeEnum(RecipientRole).optional().default(RecipientRole.SIGNER), }), ), meta: z .object({ subject: z.string(), message: z.string(), timezone: z.string(), dateFormat: z.string(), redirectUrl: z.string(), }) .partial(), }); export type TCreateDocumentMutationSchema = z.infer; export const ZCreateDocumentMutationResponseSchema = z.object({ uploadUrl: z.string().min(1), documentId: z.number(), recipients: z.array( z.object({ recipientId: z.number(), token: z.string(), role: z.nativeEnum(RecipientRole), }), ), }); export type TCreateDocumentMutationResponseSchema = z.infer< typeof ZCreateDocumentMutationResponseSchema >; export const ZCreateRecipientMutationSchema = z.object({ name: z.string().min(1), email: z.string().email().min(1), role: z.nativeEnum(RecipientRole).optional().default(RecipientRole.SIGNER), }); /** * Recipients */ export type TCreateRecipientMutationSchema = z.infer; export const ZUpdateRecipientMutationSchema = ZCreateRecipientMutationSchema.partial(); export type TUpdateRecipientMutationSchema = z.infer; export const ZDeleteRecipientMutationSchema = null; export type TDeleteRecipientMutationSchema = typeof ZDeleteRecipientMutationSchema; export const ZSuccessfulRecipientResponseSchema = z.object({ id: z.number(), documentId: z.number(), email: z.string().email().min(1), name: z.string(), role: z.nativeEnum(RecipientRole), token: z.string(), // !: Not used for now // expired: z.string(), signedAt: z.date().nullable(), readStatus: z.nativeEnum(ReadStatus), signingStatus: z.nativeEnum(SigningStatus), sendStatus: z.nativeEnum(SendStatus), }); export type TSuccessfulRecipientResponseSchema = z.infer; /** * Fields */ export const ZCreateFieldMutationSchema = z.object({ recipientId: z.number(), type: z.nativeEnum(FieldType), pageNumber: z.number(), pageX: z.number(), pageY: z.number(), pageWidth: z.number(), pageHeight: z.number(), }); export type TCreateFieldMutationSchema = z.infer; export const ZUpdateFieldMutationSchema = ZCreateFieldMutationSchema.partial(); export type TUpdateFieldMutationSchema = z.infer; export const ZDeleteFieldMutationSchema = null; export type TDeleteFieldMutationSchema = typeof ZDeleteFieldMutationSchema; export const ZSuccessfulFieldResponseSchema = z.object({ id: z.number(), documentId: z.number(), recipientId: z.number(), type: z.nativeEnum(FieldType), pageNumber: z.number(), pageX: z.number(), pageY: z.number(), pageWidth: z.number(), pageHeight: z.number(), customText: z.string(), inserted: z.boolean(), }); export type TSuccessfulFieldResponseSchema = z.infer; export const ZSuccessfulResponseSchema = z.object({ documents: ZSuccessfulDocumentResponseSchema.array(), totalPages: z.number(), }); export type TSuccessfulResponseSchema = z.infer; export const ZSuccessfulSigningResponseSchema = z.object({ message: z.string(), }); export type TSuccessfulSigningResponseSchema = z.infer; /** * General */ export const ZAuthorizationHeadersSchema = z.object({ authorization: z.string(), }); export type TAuthorizationHeadersSchema = z.infer; export const ZUnsuccessfulResponseSchema = z.object({ message: z.string(), }); export type TUnsuccessfulResponseSchema = z.infer;