f1011ddd08
* feat(booking-audit): extract core audit system changes from PR 25125 This PR extracts core audit infrastructure changes without integration changes: 1. New action services introduced: - SeatBookedAuditActionService - SeatRescheduledAuditActionService 2. Simplification of ActionService interface: - Streamlined IAuditActionService interface - Reduced TypeScript burden with cleaner type definitions 3. ActionSource support: - Added BookingAuditSource enum (API_V1, API_V2, WEBAPP, WEBHOOK, UNKNOWN) - Added source and operationId fields to BookingAudit model 4. New AuditAction types: - SEAT_BOOKED - SEAT_RESCHEDULED - APP actor type 5. New BookingAuditAccessService: - Permission-based access control for audit logs - Added readTeamAuditLogs and readOrgAuditLogs permissions 6. Fixes in the logs viewer flow: - Enhanced BookingAuditViewerService with improved filtering - Local AttendeeRepository for actor enrichment Changes are contained within packages/features/booking-audit with minimal outside changes (permission registry only). Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * refactor(booking-audit): streamline action handling and enhance localization - Replaced action icon retrieval with a mapping object for improved clarity and performance. - Introduced constants for actor role labels to simplify role retrieval. - Added new localization strings for audit log permission errors and organization requirements. - Updated various service and repository interfaces to enhance type safety and clarity. - Removed deprecated architecture documentation and adjusted related imports for consistency. These changes aim to improve code maintainability and user experience in the booking audit system. * fix(booking-audit): enhance actor role localization and operation ID tracking - Updated actor role labels in the booking logs view to use lowercase for consistency. - Improved localization by wrapping actor role display in a translation function. - Added operationId field to audit logs for better correlation of actions across multiple bookings. - Enhanced BookingAuditViewerService to include operationId in enriched audit logs. - Updated integration tests to verify consistent operationId across related audit logs. These changes aim to improve localization accuracy and facilitate better tracking of user actions in the booking audit system. * feat: integrate credential repository and enhance app actor handling - Added CredentialRepository to manage app credentials, including a method to find credentials by ID. - Updated BookingAudit system to support app actors identified by credential ID, improving actor attribution and audit clarity. - Introduced a new utility function to map app slugs to display names, enhancing the user experience in audit logs. - Modified relevant interfaces and types to accommodate the new credential handling and app actor structure. - Enhanced BookingAuditViewerService to display app names based on credentials, ensuring accurate representation in audit logs. --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
45 lines
1.8 KiB
TypeScript
45 lines
1.8 KiB
TypeScript
import logger from "@calcom/lib/logger";
|
|
import { safeStringify } from "@calcom/lib/safeStringify";
|
|
import { getBookingAuditTaskConsumer } from "@calcom/features/booking-audit/di/BookingAuditTaskConsumer.container";
|
|
import { BookingAuditTaskConsumerSchema } from "@calcom/features/booking-audit/lib/types/bookingAuditTask";
|
|
|
|
const log = logger.getSubLogger({ prefix: ["[tasker] bookingAudit"] });
|
|
|
|
/**
|
|
* Booking Audit Task Handler
|
|
*
|
|
* Thin wrapper that parses JSON and delegates to BookingAuditTaskConsumer.
|
|
* Routes to processAuditTask or processBulkAuditTask based on isBulk field.
|
|
*
|
|
*/
|
|
export async function bookingAudit(payload: string, taskId?: string): Promise<void> {
|
|
try {
|
|
if (!taskId) {
|
|
throw new Error("Task ID is required for booking audit consumer");
|
|
}
|
|
const parsedPayload: unknown = JSON.parse(payload);
|
|
|
|
const parseResult = BookingAuditTaskConsumerSchema.safeParse(parsedPayload);
|
|
|
|
if (!parseResult.success) {
|
|
const errorMsg = `Invalid booking audit payload: ${safeStringify(parseResult.error.errors)} | TaskId: ${taskId}`;
|
|
log.error(errorMsg);
|
|
throw new Error(errorMsg);
|
|
}
|
|
|
|
const validatedPayload = parseResult.data;
|
|
const bookingAuditTaskConsumer = getBookingAuditTaskConsumer();
|
|
|
|
if (validatedPayload.isBulk) {
|
|
await bookingAuditTaskConsumer.processBulkAuditTask(validatedPayload, taskId);
|
|
} else {
|
|
await bookingAuditTaskConsumer.processAuditTask(validatedPayload, taskId);
|
|
}
|
|
} catch (error) {
|
|
const errorMsg = `Error processing booking audit: ${safeStringify(error)} | TaskId: ${taskId}`;
|
|
log.error(errorMsg);
|
|
// Rethrow to trigger retry via Tasker
|
|
throw error;
|
|
}
|
|
}
|