From a5fd814fbc6ccec98c0d0d458c5ca00df71e9d5e Mon Sep 17 00:00:00 2001 From: VIVEK TIWARI <63796877+vivek-tiwari-vt@users.noreply.github.com> Date: Wed, 11 Mar 2026 22:46:17 -0400 Subject: [PATCH] fix: handle invalid qr share tokens without 500 (#2597) --- packages/app-tests/e2e/pdf-viewer/pdf-viewer.spec.ts | 9 +++++++++ .../document/get-document-by-access-token.ts | 10 +++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/app-tests/e2e/pdf-viewer/pdf-viewer.spec.ts b/packages/app-tests/e2e/pdf-viewer/pdf-viewer.spec.ts index a5c12854d..3ffce7e77 100644 --- a/packages/app-tests/e2e/pdf-viewer/pdf-viewer.spec.ts +++ b/packages/app-tests/e2e/pdf-viewer/pdf-viewer.spec.ts @@ -202,6 +202,15 @@ test.describe('PDF Viewer Rendering', () => { await page.getByRole('button', { name: /Page 2/ }).click(); await expect(page.locator(PDF_PAGE_SELECTOR).first()).toBeVisible({ timeout: 30_000 }); }); + + test('should not return 500 for invalid QR share token', async ({ page }) => { + const response = await page.request.get('/share/qr_invalid_token_for_regression_check', { + maxRedirects: 0, + }); + + expect(response.status()).toBe(302); + expect(response.headers().location).toBe('/'); + }); }); test.describe('Embed Pages', () => { diff --git a/packages/lib/server-only/document/get-document-by-access-token.ts b/packages/lib/server-only/document/get-document-by-access-token.ts index 444d7d678..c35f0d932 100644 --- a/packages/lib/server-only/document/get-document-by-access-token.ts +++ b/packages/lib/server-only/document/get-document-by-access-token.ts @@ -13,7 +13,7 @@ export const getDocumentByAccessToken = async ({ token }: GetDocumentByAccessTok throw new Error('Missing token'); } - const result = await prisma.envelope.findFirstOrThrow({ + const result = await prisma.envelope.findFirst({ where: { type: EnvelopeType.DOCUMENT, status: DocumentStatus.COMPLETED, @@ -56,6 +56,14 @@ export const getDocumentByAccessToken = async ({ token }: GetDocumentByAccessTok }, }); + if (!result) { + return null; + } + + if (result.envelopeItems.length === 0) { + throw new Error('Completed envelope has no items'); + } + const firstDocumentData = result.envelopeItems[0].documentData; if (!firstDocumentData) {