diff --git a/packages/trpc/server/document-router/create-document-formdata.ts b/packages/trpc/server/document-router/create-document-formdata.ts index 8a3baa8ed..3fb0a21f1 100644 --- a/packages/trpc/server/document-router/create-document-formdata.ts +++ b/packages/trpc/server/document-router/create-document-formdata.ts @@ -7,6 +7,7 @@ import { putPdfFileServerSide } from '@documenso/lib/universal/upload/put-file.s import { mapSecondaryIdToDocumentId } from '@documenso/lib/utils/envelope'; import { prisma } from '@documenso/prisma'; +import { insertFormValuesInPdf } from '../../../lib/server-only/pdf/insert-form-values-in-pdf'; import { authenticatedProcedure } from '../trpc'; import { ZCreateDocumentFormDataRequestSchema, @@ -38,6 +39,7 @@ export const createDocumentFormDataRoute = authenticatedProcedure meta, folderId, attachments, + formValues, } = payload; const { remaining } = await getServerLimits({ userId: user.id, teamId }); @@ -49,7 +51,21 @@ export const createDocumentFormDataRoute = authenticatedProcedure }); } - const documentData = await putPdfFileServerSide(file); + let pdf = Buffer.from(await file.arrayBuffer()); + + if (formValues) { + // eslint-disable-next-line require-atomic-updates + pdf = await insertFormValuesInPdf({ + pdf, + formValues, + }); + } + + const documentData = await putPdfFileServerSide({ + name: file.name, + type: 'application/pdf', + arrayBuffer: async () => Promise.resolve(pdf), + }); const createdEnvelope = await createEnvelope({ userId: ctx.user.id, diff --git a/packages/trpc/server/envelope-router/create-envelope.ts b/packages/trpc/server/envelope-router/create-envelope.ts index 74b98fd42..dfb7927f3 100644 --- a/packages/trpc/server/envelope-router/create-envelope.ts +++ b/packages/trpc/server/envelope-router/create-envelope.ts @@ -3,6 +3,7 @@ import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import { createEnvelope } from '@documenso/lib/server-only/envelope/create-envelope'; import { putNormalizedPdfFileServerSide } from '@documenso/lib/universal/upload/put-file.server'; +import { insertFormValuesInPdf } from '../../../lib/server-only/pdf/insert-form-values-in-pdf'; import { authenticatedProcedure } from '../trpc'; import { ZCreateEnvelopeRequestSchema, @@ -58,10 +59,31 @@ export const createEnvelopeRoute = authenticatedProcedure }); } + if (files.some((file) => !file.type.startsWith('application/pdf'))) { + throw new AppError('INVALID_DOCUMENT_FILE', { + message: 'You cannot upload non-PDF files', + statusCode: 400, + }); + } + // For each file, stream to s3 and create the document data. const envelopeItems = await Promise.all( files.map(async (file) => { - const { id: documentDataId } = await putNormalizedPdfFileServerSide(file); + let pdf = Buffer.from(await file.arrayBuffer()); + + if (formValues) { + // eslint-disable-next-line require-atomic-updates + pdf = await insertFormValuesInPdf({ + pdf, + formValues, + }); + } + + const { id: documentDataId } = await putNormalizedPdfFileServerSide({ + name: file.name, + type: 'application/pdf', + arrayBuffer: async () => Promise.resolve(pdf), + }); return { title: file.name,