import {AuditEvent, AuditEventContext, AuditEventDetails, AuditEventName, AuditEventUser} from 'app/common/AuditEvent'; import {RequestOrSession} from 'app/server/lib/sessionUtils'; export interface IAuditLogger { /** * Logs an audit event. */ logEvent( requestOrSession: RequestOrSession, properties: AuditEventProperties ): void; /** * Logs an audit event. * * Throws a `LogAuditEventError` on failure. */ logEventAsync( requestOrSession: RequestOrSession, properties: AuditEventProperties ): Promise; } export interface AuditEventProperties { event: { /** * The name of the event. */ name: Name; /** * Event-specific details (e.g. properties of affected resources). */ details?: AuditEventDetails[Name]; /** * The context that the event occurred in (e.g. workspace, document). */ context?: AuditEventContext; /** * The user that triggered the event. */ user?: AuditEventUser; }; /** * ISO 8601 timestamp (e.g. `2024-09-04T14:54:50Z`) of when the event occurred. * * Defaults to now. */ timestamp?: string; } export class LogAuditEventError extends Error { public name = 'LogAuditEventError'; constructor(public auditEvent: AuditEvent, ...params: any[]) { super(...params); if (Error.captureStackTrace) { Error.captureStackTrace(this, LogAuditEventError); } } }