import { WebhookTriggerEvents } from "@calcom/prisma/enums"; import { WebhookVersion } from "./interface/IWebhookRepository"; // this is exported as we can't use `WebhookTriggerEvents` in the frontend straight-off /** * Version label map - transforms version enum values to display labels. * Since our version values ARE date strings (e.g., "2021-10-20"), labels match values. * This map allows for custom labels if needed in the future. */ export const WEBHOOK_VERSION_LABELS: Record = { [WebhookVersion.V_2021_10_20]: "2021-10-20", // Add new versions here: [WebhookVersion.V_YYYY_MM_DD]: "YYYY-MM-DD", }; /** * Pre-built options for Select components - automatically generated from all versions */ export const WEBHOOK_VERSION_OPTIONS = Object.values(WebhookVersion).map((version) => ({ value: version, label: WEBHOOK_VERSION_LABELS[version] ?? version, })); /** * Get display label for a version */ export const getWebhookVersionLabel = (version: WebhookVersion): string => WEBHOOK_VERSION_LABELS[version] ?? version; /** * Documentation URLs for each webhook version. * Links to the specific version's payload documentation. */ export const WEBHOOK_VERSION_DOCS: Record = { [WebhookVersion.V_2021_10_20]: "https://cal.com/docs/developing/guides/automation/webhooks#2021-10-20", // Add new versions here: [WebhookVersion.V_YYYY_MM_DD]: "https://cal.com/docs/webhooks/v-yyyy-mm-dd", }; /** * Get documentation URL for a specific webhook version */ export const getWebhookVersionDocsUrl = (version: WebhookVersion): string => WEBHOOK_VERSION_DOCS[version] ?? "https://cal.com/docs/developing/guides/automation/webhooks"; export const WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP = { core: [ WebhookTriggerEvents.BOOKING_CANCELLED, WebhookTriggerEvents.BOOKING_CREATED, WebhookTriggerEvents.BOOKING_RESCHEDULED, WebhookTriggerEvents.BOOKING_PAID, WebhookTriggerEvents.BOOKING_PAYMENT_INITIATED, WebhookTriggerEvents.MEETING_ENDED, WebhookTriggerEvents.MEETING_STARTED, WebhookTriggerEvents.BOOKING_REQUESTED, WebhookTriggerEvents.BOOKING_REJECTED, WebhookTriggerEvents.RECORDING_READY, WebhookTriggerEvents.INSTANT_MEETING, WebhookTriggerEvents.RECORDING_TRANSCRIPTION_GENERATED, WebhookTriggerEvents.BOOKING_NO_SHOW_UPDATED, WebhookTriggerEvents.OOO_CREATED, WebhookTriggerEvents.AFTER_HOSTS_CAL_VIDEO_NO_SHOW, WebhookTriggerEvents.AFTER_GUESTS_CAL_VIDEO_NO_SHOW, WebhookTriggerEvents.DELEGATION_CREDENTIAL_ERROR, WebhookTriggerEvents.WRONG_ASSIGNMENT_REPORT, ] as const, "routing-forms": [ WebhookTriggerEvents.FORM_SUBMITTED, WebhookTriggerEvents.FORM_SUBMITTED_NO_EVENT, WebhookTriggerEvents.ROUTING_FORM_FALLBACK_HIT, ] as const, }; export const WEBHOOK_TRIGGER_EVENTS = [ ...WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP.core, ...WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP["routing-forms"], ] as const;