From e7affea05354e3c46da970615d63e4d4480e2e3a Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Sat, 22 Nov 2025 01:24:13 +0000 Subject: [PATCH] feat: filter by audit log event type --- .../document/find-document-audit-logs.ts | 19 ++++++++++++++++--- .../find-document-audit-logs.ts | 2 ++ .../find-document-audit-logs.types.ts | 1 + .../find-envelope-audit-logs.ts | 2 ++ .../find-envelope-audit-logs.types.ts | 4 ++++ 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/lib/server-only/document/find-document-audit-logs.ts b/packages/lib/server-only/document/find-document-audit-logs.ts index 33f9de25f..d23e99761 100644 --- a/packages/lib/server-only/document/find-document-audit-logs.ts +++ b/packages/lib/server-only/document/find-document-audit-logs.ts @@ -20,6 +20,7 @@ export interface FindDocumentAuditLogsOptions { }; cursor?: string; filterForRecentActivity?: boolean; + eventTypes?: string[]; } export const findDocumentAuditLogs = async ({ @@ -31,6 +32,7 @@ export const findDocumentAuditLogs = async ({ orderBy, cursor, filterForRecentActivity, + eventTypes, }: FindDocumentAuditLogsOptions) => { const orderByColumn = orderBy?.column ?? 'createdAt'; const orderByDirection = orderBy?.direction ?? 'desc'; @@ -57,7 +59,12 @@ export const findDocumentAuditLogs = async ({ envelopeId: envelope.id, }; - // Filter events down to what we consider recent activity. + if (eventTypes && eventTypes.length > 0) { + whereClause.type = { + in: eventTypes, + }; + } + if (filterForRecentActivity) { whereClause.OR = [ { @@ -130,6 +137,7 @@ export interface FindEnvelopeAuditLogsOptions { }; cursor?: string; filterForRecentActivity?: boolean; + eventTypes?: string[]; } export const findEnvelopeAuditLogs = async ({ @@ -141,11 +149,11 @@ export const findEnvelopeAuditLogs = async ({ orderBy, cursor, filterForRecentActivity, + eventTypes, }: FindEnvelopeAuditLogsOptions) => { const orderByColumn = orderBy?.column ?? 'createdAt'; const orderByDirection = orderBy?.direction ?? 'desc'; - // Auto-detect ID type: if it's a numeric string, treat as documentId const isNumericId = /^\d+$/.test(envelopeId); const { envelopeWhereInput } = await getEnvelopeWhereInput({ @@ -175,7 +183,12 @@ export const findEnvelopeAuditLogs = async ({ envelopeId: envelope.id, }; - // Filter events down to what we consider recent activity. + if (eventTypes && eventTypes.length > 0) { + whereClause.type = { + in: eventTypes, + }; + } + if (filterForRecentActivity) { whereClause.OR = [ { diff --git a/packages/trpc/server/document-router/find-document-audit-logs.ts b/packages/trpc/server/document-router/find-document-audit-logs.ts index 17de388a3..17a2d9e7c 100644 --- a/packages/trpc/server/document-router/find-document-audit-logs.ts +++ b/packages/trpc/server/document-router/find-document-audit-logs.ts @@ -18,6 +18,7 @@ export const findDocumentAuditLogsRoute = authenticatedProcedure documentId, cursor, filterForRecentActivity, + eventTypes, orderByColumn, orderByDirection, } = input; @@ -36,6 +37,7 @@ export const findDocumentAuditLogsRoute = authenticatedProcedure documentId, cursor, filterForRecentActivity, + eventTypes, orderBy: orderByColumn ? { column: orderByColumn, direction: orderByDirection } : undefined, }); }); diff --git a/packages/trpc/server/document-router/find-document-audit-logs.types.ts b/packages/trpc/server/document-router/find-document-audit-logs.types.ts index 6e8991667..05ea21cf2 100644 --- a/packages/trpc/server/document-router/find-document-audit-logs.types.ts +++ b/packages/trpc/server/document-router/find-document-audit-logs.types.ts @@ -7,6 +7,7 @@ export const ZFindDocumentAuditLogsRequestSchema = ZFindSearchParamsSchema.exten documentId: z.number().min(1), cursor: z.string().optional(), filterForRecentActivity: z.boolean().optional(), + eventTypes: z.array(z.string()).optional(), orderByColumn: z.enum(['createdAt', 'type']).optional(), orderByDirection: z.enum(['asc', 'desc']).default('desc'), }); diff --git a/packages/trpc/server/envelope-router/find-envelope-audit-logs.ts b/packages/trpc/server/envelope-router/find-envelope-audit-logs.ts index 13427ac7e..ed6d6b0ad 100644 --- a/packages/trpc/server/envelope-router/find-envelope-audit-logs.ts +++ b/packages/trpc/server/envelope-router/find-envelope-audit-logs.ts @@ -20,6 +20,7 @@ export const findEnvelopeAuditLogsRoute = authenticatedProcedure envelopeId, cursor, filterForRecentActivity, + eventTypes, orderByColumn, orderByDirection, } = input; @@ -38,6 +39,7 @@ export const findEnvelopeAuditLogsRoute = authenticatedProcedure envelopeId, cursor, filterForRecentActivity, + eventTypes, orderBy: orderByColumn ? { column: orderByColumn, direction: orderByDirection } : undefined, }); }); diff --git a/packages/trpc/server/envelope-router/find-envelope-audit-logs.types.ts b/packages/trpc/server/envelope-router/find-envelope-audit-logs.types.ts index 732cf74d3..5ed42e8fe 100644 --- a/packages/trpc/server/envelope-router/find-envelope-audit-logs.types.ts +++ b/packages/trpc/server/envelope-router/find-envelope-audit-logs.types.ts @@ -22,6 +22,10 @@ export const ZFindEnvelopeAuditLogsRequestSchema = ZFindSearchParamsSchema.exten .describe('Envelope ID (e.g., envelope_xxx) or legacy document ID (e.g., 12345)'), cursor: z.string().optional(), filterForRecentActivity: z.boolean().optional(), + eventTypes: z + .array(z.string()) + .optional() + .describe('Filter by specific event types (e.g., ["DOCUMENT_CREATED", "DOCUMENT_SENT"])'), orderByColumn: z.enum(['createdAt', 'type']).optional(), orderByDirection: z.enum(['asc', 'desc']).default('desc'), });