diff --git a/packages/api/v1/implementation.ts b/packages/api/v1/implementation.ts index b0f2ce150..289b97c57 100644 --- a/packages/api/v1/implementation.ts +++ b/packages/api/v1/implementation.ts @@ -19,6 +19,7 @@ import { updateDocument } from '@documenso/lib/server-only/document/update-docum import { updateDocumentSettings } from '@documenso/lib/server-only/document/update-document-settings'; import { deleteField } from '@documenso/lib/server-only/field/delete-field'; import { getFieldById } from '@documenso/lib/server-only/field/get-field-by-id'; +import { getFieldsForDocument } from '@documenso/lib/server-only/field/get-fields-for-document'; import { updateField } from '@documenso/lib/server-only/field/update-field'; import { insertFormValuesInPdf } from '@documenso/lib/server-only/pdf/insert-form-values-in-pdf'; import { deleteRecipient } from '@documenso/lib/server-only/recipient/delete-recipient'; @@ -98,6 +99,30 @@ export const ApiContractV1Implementation = createNextRoute(ApiContractV1, { userId: user.id, }); + const fields = await getFieldsForDocument({ + documentId: Number(documentId), + userId: user.id, + }); + + const parsedMetaFields = fields.map((field) => { + let parsedMetaOrNull = null; + + if (field.fieldMeta) { + const result = ZFieldMetaSchema.safeParse(field.fieldMeta); + + if (!result.success) { + throw new Error('Field meta parsing failed for field ' + field.id); + } + + parsedMetaOrNull = result.data; + } + + return { + ...field, + fieldMeta: parsedMetaOrNull, + }; + }); + return { status: 200, body: { @@ -106,6 +131,7 @@ export const ApiContractV1Implementation = createNextRoute(ApiContractV1, { ...recipient, signingUrl: `${NEXT_PUBLIC_WEBAPP_URL()}/sign/${recipient.token}`, })), + fields: parsedMetaFields, }, }; } catch (err) { diff --git a/packages/api/v1/schema.ts b/packages/api/v1/schema.ts index 142c3dd39..980687356 100644 --- a/packages/api/v1/schema.ts +++ b/packages/api/v1/schema.ts @@ -58,6 +58,22 @@ export const ZSuccessfulDocumentResponseSchema = z.object({ export const ZSuccessfulGetDocumentResponseSchema = ZSuccessfulDocumentResponseSchema.extend({ recipients: z.lazy(() => z.array(ZSuccessfulRecipientResponseSchema)), + fields: z.lazy(() => + ZFieldSchema.pick({ + id: true, + recipientId: true, + type: true, + page: true, + positionX: true, + positionY: true, + width: true, + height: true, + }) + .extend({ + fieldMeta: ZFieldMetaSchema.nullish(), + }) + .array(), + ), }); export type TSuccessfulGetDocumentResponseSchema = z.infer< @@ -424,7 +440,7 @@ export const ZSuccessfulSigningResponseSchema = z .object({ message: z.string(), }) - .and(ZSuccessfulGetDocumentResponseSchema); + .and(ZSuccessfulGetDocumentResponseSchema.omit({ fields: true })); export type TSuccessfulSigningResponseSchema = z.infer;