From 99ad2eb64532591c7f5bed29ae73b4c7fd5bf654 Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Wed, 14 May 2025 08:22:11 +1000 Subject: [PATCH] fix: allow download of original document via api (#1788) --- packages/api/v1/contract.ts | 2 ++ packages/api/v1/implementation.ts | 7 +++++-- packages/api/v1/schema.ts | 9 +++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/api/v1/contract.ts b/packages/api/v1/contract.ts index c21358c28..370a3b9a0 100644 --- a/packages/api/v1/contract.ts +++ b/packages/api/v1/contract.ts @@ -11,6 +11,7 @@ import { ZDeleteDocumentMutationSchema, ZDeleteFieldMutationSchema, ZDeleteRecipientMutationSchema, + ZDownloadDocumentQuerySchema, ZDownloadDocumentSuccessfulSchema, ZFindTeamMembersResponseSchema, ZGenerateDocumentFromTemplateMutationResponseSchema, @@ -71,6 +72,7 @@ export const ApiContractV1 = c.router( downloadSignedDocument: { method: 'GET', path: '/api/v1/documents/:id/download', + query: ZDownloadDocumentQuerySchema, responses: { 200: ZDownloadDocumentSuccessfulSchema, 401: ZUnsuccessfulResponseSchema, diff --git a/packages/api/v1/implementation.ts b/packages/api/v1/implementation.ts index 375ea76d7..5b3f5820f 100644 --- a/packages/api/v1/implementation.ts +++ b/packages/api/v1/implementation.ts @@ -142,6 +142,7 @@ export const ApiContractV1Implementation = tsr.router(ApiContractV1, { downloadSignedDocument: authenticatedMiddleware(async (args, user, team) => { const { id: documentId } = args.params; + const { downloadOriginalDocument } = args.query; try { if (process.env.NEXT_PUBLIC_UPLOAD_TRANSPORT !== 's3') { @@ -177,7 +178,7 @@ export const ApiContractV1Implementation = tsr.router(ApiContractV1, { }; } - if (!isDocumentCompleted(document.status)) { + if (!downloadOriginalDocument && !isDocumentCompleted(document.status)) { return { status: 400, body: { @@ -186,7 +187,9 @@ export const ApiContractV1Implementation = tsr.router(ApiContractV1, { }; } - const { url } = await getPresignGetUrl(document.documentData.data); + const { url } = await getPresignGetUrl( + downloadOriginalDocument ? document.documentData.data : document.documentData.initialData, + ); return { status: 200, diff --git a/packages/api/v1/schema.ts b/packages/api/v1/schema.ts index 8b4c27187..be8675808 100644 --- a/packages/api/v1/schema.ts +++ b/packages/api/v1/schema.ts @@ -119,6 +119,15 @@ export const ZUploadDocumentSuccessfulSchema = z.object({ key: z.string(), }); +export const ZDownloadDocumentQuerySchema = z.object({ + downloadOriginalDocument: z + .preprocess((val) => String(val) === 'true' || String(val) === '1', z.boolean()) + .optional() + .default(false), +}); + +export type TDownloadDocumentQuerySchema = z.infer; + export const ZDownloadDocumentSuccessfulSchema = z.object({ downloadUrl: z.string(), });