import type { WebhookTriggerEvents } from "@calcom/prisma/enums"; import type { WebhookSubscriber } from "../dto/types"; import type { WebhookPayload } from "../factory/types"; import type { BookingPaymentInitiatedParams, BookingCreatedParams, BookingCancelledParams, BookingRequestedParams, BookingRescheduledParams, BookingPaidParams, BookingNoShowParams, BookingRejectedParams, ScheduleMeetingWebhooksParams, CancelScheduledMeetingWebhooksParams, ScheduleNoShowWebhooksParams, } from "../types/params"; export interface GetSubscribersOptions { userId?: number | null; eventTypeId?: number | null; triggerEvent: WebhookTriggerEvents; teamId?: number | number[] | null; orgId?: number | null; oAuthClientId?: string | null; } // Repository Interface - Data access operations export interface IWebhookRepository { getSubscribers(options: GetSubscribersOptions): Promise; } // Processing Interface - Webhook processing operations export interface IWebhookProcessor { processWebhooks( trigger: WebhookTriggerEvents, payload: WebhookPayload, subscribers: WebhookSubscriber[] ): Promise; } // Scheduling Interface - Webhook scheduling operations export interface IWebhookScheduler { scheduleTimeBasedWebhook( trigger: WebhookTriggerEvents, scheduledAt: Date, bookingData: Record, subscriber: WebhookSubscriber, evt: Record, isDryRun?: boolean ): Promise; cancelScheduledWebhooks( bookingId: number, triggers: WebhookTriggerEvents[], isDryRun?: boolean ): Promise; scheduleDelayedWebhooks( trigger: WebhookTriggerEvents, payload: WebhookPayload, scheduledAt: Date, options?: { teamId?: number | number[] | null; orgId?: number | null }, subscribers?: WebhookSubscriber[], isDryRun?: boolean ): Promise; } // Combined interface for backward compatibility (can be removed later) export interface IWebhookService extends IWebhookRepository, IWebhookProcessor, IWebhookScheduler {} // Event Emission Interface - Direct parameter-based methods export interface IBookingEventEmitter { emitBookingPaymentInitiated(params: BookingPaymentInitiatedParams): Promise; emitBookingCreated(params: BookingCreatedParams): Promise; emitBookingCancelled(params: BookingCancelledParams): Promise; emitBookingRequested(params: BookingRequestedParams): Promise; emitBookingRescheduled(params: BookingRescheduledParams): Promise; emitBookingPaid(params: BookingPaidParams): Promise; emitBookingNoShow(params: BookingNoShowParams): Promise; emitBookingRejected(params: BookingRejectedParams): Promise; } // Scheduling Interface - Webhook scheduling operations export interface IBookingScheduler { scheduleMeetingWebhooks(params: ScheduleMeetingWebhooksParams): Promise; cancelScheduledMeetingWebhooks(params: CancelScheduledMeetingWebhooksParams): Promise; scheduleNoShowWebhooks(params: ScheduleNoShowWebhooksParams): Promise; } // Combined interface for backward compatibility (can be removed later) export interface IBookingWebhookService extends IBookingEventEmitter, IBookingScheduler {} // Form Event Emission Interface - Form event emission operations export interface IFormEventEmitter { emitFormSubmitted(params: { form: { id: string; name: string }; response: { id: number; data: Record }; eventTypeId?: number | null; userId?: number | null; teamId?: number | null; orgId?: number | null; platformClientId?: string; isDryRun?: boolean; }): Promise; emitFormSubmittedNoEvent(params: { form: { id: string; name: string }; response: { id: number; data: Record }; userId?: number | null; teamId?: number | null; orgId?: number | null; platformClientId?: string; isDryRun?: boolean; }): Promise; } // Form Scheduling Interface - Form webhook scheduling operations export interface IFormScheduler { scheduleDelayedFormWebhooks(params: { responseId: number; form: { id: string; name: string; teamId?: number | null; }; responses: Record; redirect?: Record; teamId?: number | null; orgId?: number | null; delayMinutes?: number; }): Promise; } // Combined interface for backward compatibility (can be removed later) export interface IFormWebhookService extends IFormEventEmitter, IFormScheduler {} export interface IRecordingWebhookService { emitRecordingReady(params: { evt: import("@calcom/types/Calendar").CalendarEvent; downloadLink: string; booking?: { id: number; eventTypeId?: number | null; userId?: number | null; }; teamId?: number | null; orgId?: number | null; platformClientId?: string; isDryRun?: boolean; }): Promise; emitTranscriptionGenerated(params: { evt: import("@calcom/types/Calendar").CalendarEvent; downloadLinks?: { transcription?: Array<{ format: string; link: string; }>; recording?: string; }; booking?: { id: number; eventTypeId?: number | null; userId?: number | null; }; teamId?: number | null; orgId?: number | null; platformClientId?: string; isDryRun?: boolean; }): Promise; }