feat: include audit logs

This commit is contained in:
Catalin Pit
2025-02-14 14:03:39 +02:00
parent 8b1b0de935
commit 080bb405f0
3 changed files with 52 additions and 14 deletions

View File

@ -13,6 +13,7 @@ import { signPdf } from '@documenso/signing';
import { sendCompletedEmail } from '../../../server-only/document/send-completed-email';
import PostHogServerClient from '../../../server-only/feature-flags/get-post-hog-server-client';
import { getAuditLogsPdf } from '../../../server-only/htmltopdf/get-audit-logs-pdf';
import { getCertificatePdf } from '../../../server-only/htmltopdf/get-certificate-pdf';
import { flattenAnnotations } from '../../../server-only/pdf/flatten-annotations';
import { flattenForm } from '../../../server-only/pdf/flatten-form';
@ -129,6 +130,11 @@ export const run = async ({
}).catch(() => null)
: null;
const auditLogData = await getAuditLogsPdf({
documentId,
language: document.documentMeta?.language,
}).catch(() => null);
const newDataId = await io.runTask('decorate-and-sign-pdf', async () => {
const pdfDoc = await PDFDocument.load(pdfData);
@ -150,6 +156,16 @@ export const run = async ({
});
}
if (auditLogData) {
const auditLog = await PDFDocument.load(auditLogData);
const auditLogPages = await pdfDoc.copyPages(auditLog, auditLog.getPageIndices());
auditLogPages.forEach((page) => {
pdfDoc.addPage(page);
});
}
for (const field of fields) {
if (field.inserted) {
await insertFieldInPDF(pdfDoc, field);

View File

@ -118,9 +118,10 @@ export const sealDocument = async ({
}).catch(() => null)
: null;
const auditLogData = await getAuditLogsPdf({ documentId }).catch(() => null);
console.log({ auditLogData });
const auditLogData = await getAuditLogsPdf({
documentId,
language: document.documentMeta?.language,
}).catch(() => null);
const doc = await PDFDocument.load(pdfData);

View File

@ -2,13 +2,16 @@ import { DateTime } from 'luxon';
import type { Browser } from 'playwright';
import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app';
import { type SupportedLanguageCodes, isValidLanguageCode } from '../../constants/i18n';
import { encryptSecondaryData } from '../crypto/encrypt';
export type GetAuditLogsPdfParams = {
documentId: number;
// eslint-disable-next-line @typescript-eslint/ban-types
language?: SupportedLanguageCodes | (string & {});
};
export const getAuditLogsPdf = async ({ documentId }: GetAuditLogsPdfParams) => {
export const getAuditLogsPdf = async ({ documentId, language }: GetAuditLogsPdfParams) => {
const { chromium } = await import('playwright');
const encryptedId = encryptSecondaryData({
@ -36,18 +39,36 @@ export const getAuditLogsPdf = async ({ documentId }: GetAuditLogsPdfParams) =>
const page = await browserContext.newPage();
await page.goto(`${NEXT_PUBLIC_WEBAPP_URL()}/__htmltopdf/audit-log?d=${encryptedId}`, {
waitUntil: 'networkidle',
timeout: 10_000,
});
const lang = isValidLanguageCode(language) ? language : 'en';
const result = await page.pdf({
format: 'A4',
});
await page.context().addCookies([
{
name: 'language',
value: lang,
url: NEXT_PUBLIC_WEBAPP_URL(),
},
]);
await browserContext.close();
try {
await page.goto(`${NEXT_PUBLIC_WEBAPP_URL()}/__htmltopdf/audit-log?d=${encryptedId}`, {
waitUntil: 'networkidle',
timeout: 10_000,
});
void browser.close();
const result = await page.pdf({
format: 'A4',
});
return result;
await browserContext.close();
void browser.close();
return result;
} catch (error) {
await browserContext.close();
void browser.close();
throw error;
}
};