feat: add envelope audit logs endpoint

This commit is contained in:
Ephraim Atta-Duncan
2025-11-22 01:12:56 +00:00
parent 17c6098638
commit 1a577e55a9
4 changed files with 200 additions and 0 deletions

View File

@ -0,0 +1,43 @@
import { findEnvelopeAuditLogs } from '@documenso/lib/server-only/document/find-document-audit-logs';
import { authenticatedProcedure } from '../trpc';
import {
ZFindEnvelopeAuditLogsRequestSchema,
ZFindEnvelopeAuditLogsResponseSchema,
findEnvelopeAuditLogsMeta,
} from './find-envelope-audit-logs.types';
export const findEnvelopeAuditLogsRoute = authenticatedProcedure
.meta(findEnvelopeAuditLogsMeta)
.input(ZFindEnvelopeAuditLogsRequestSchema)
.output(ZFindEnvelopeAuditLogsResponseSchema)
.query(async ({ input, ctx }) => {
const { teamId } = ctx;
const {
page,
perPage,
envelopeId,
cursor,
filterForRecentActivity,
orderByColumn,
orderByDirection,
} = input;
ctx.logger.info({
input: {
envelopeId,
},
});
return await findEnvelopeAuditLogs({
userId: ctx.user.id,
teamId,
page,
perPage,
envelopeId,
cursor,
filterForRecentActivity,
orderBy: orderByColumn ? { column: orderByColumn, direction: orderByDirection } : undefined,
});
});

View File

@ -0,0 +1,35 @@
import { z } from 'zod';
import { ZDocumentAuditLogSchema } from '@documenso/lib/types/document-audit-logs';
import { ZFindResultResponse, ZFindSearchParamsSchema } from '@documenso/lib/types/search-params';
import type { TrpcRouteMeta } from '../trpc';
export const findEnvelopeAuditLogsMeta: TrpcRouteMeta = {
openapi: {
method: 'GET',
path: '/envelope/{envelopeId}/audit-log',
summary: 'Get envelope audit logs',
description:
'Returns paginated audit logs for an envelope given an ID. Accepts both envelope IDs (string) and legacy document IDs (number).',
tags: ['Envelope'],
},
};
export const ZFindEnvelopeAuditLogsRequestSchema = ZFindSearchParamsSchema.extend({
envelopeId: z
.string()
.describe('Envelope ID (e.g., envelope_xxx) or legacy document ID (e.g., 12345)'),
cursor: z.string().optional(),
filterForRecentActivity: z.boolean().optional(),
orderByColumn: z.enum(['createdAt', 'type']).optional(),
orderByDirection: z.enum(['asc', 'desc']).default('desc'),
});
export const ZFindEnvelopeAuditLogsResponseSchema = ZFindResultResponse.extend({
data: ZDocumentAuditLogSchema.array(),
nextCursor: z.string().optional(),
});
export type TFindEnvelopeAuditLogsRequest = z.infer<typeof ZFindEnvelopeAuditLogsRequestSchema>;
export type TFindEnvelopeAuditLogsResponse = z.infer<typeof ZFindEnvelopeAuditLogsResponseSchema>;

View File

@ -18,6 +18,7 @@ import { createEnvelopeRecipientsRoute } from './envelope-recipients/create-enve
import { deleteEnvelopeRecipientRoute } from './envelope-recipients/delete-envelope-recipient';
import { getEnvelopeRecipientRoute } from './envelope-recipients/get-envelope-recipient';
import { updateEnvelopeRecipientsRoute } from './envelope-recipients/update-envelope-recipients';
import { findEnvelopeAuditLogsRoute } from './find-envelope-audit-logs';
import { getEnvelopeRoute } from './get-envelope';
import { getEnvelopeItemsRoute } from './get-envelope-items';
import { getEnvelopeItemsByTokenRoute } from './get-envelope-items-by-token';
@ -65,6 +66,9 @@ export const envelopeRouter = router({
set: setEnvelopeFieldsRoute,
sign: signEnvelopeFieldRoute,
},
auditLog: {
find: findEnvelopeAuditLogsRoute,
},
get: getEnvelopeRoute,
create: createEnvelopeRoute,
use: useEnvelopeRoute,