Skip to content

Commit 91341cb

Browse files
authored
cleanup(webhooks): remove instant meeting trigger support (calcom#29022)
* cleanup(webhooks): remove instant meeting trigger support * remove dead code * remove instant meeting from prisma enums and related cleanup * fix(webhooks): make instant meeting enum migration atomic
1 parent 1591a50 commit 91341cb

15 files changed

Lines changed: 35 additions & 163 deletions

File tree

apps/web/modules/webhooks/components/WebhookForm.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ const WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP_V2: Record<string, WebhookTriggerEve
5656
{ value: WebhookTriggerEvents.MEETING_ENDED, label: "meeting_ended" },
5757
{ value: WebhookTriggerEvents.MEETING_STARTED, label: "meeting_started" },
5858
{ value: WebhookTriggerEvents.RECORDING_READY, label: "recording_ready" },
59-
{ value: WebhookTriggerEvents.INSTANT_MEETING, label: "instant_meeting" },
6059
{ value: WebhookTriggerEvents.OOO_CREATED, label: "ooo_created" },
6160
{
6261
value: WebhookTriggerEvents.RECORDING_TRANSCRIPTION_GENERATED,
@@ -248,13 +247,12 @@ const WebhookForm = (props: {
248247
overrideTriggerOptions?: (typeof WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP_V2)["core"];
249248
onSubmit: (event: WebhookFormSubmitData) => void;
250249
onCancel?: () => void;
251-
selectOnlyInstantMeetingOption?: boolean;
252250
headerWrapper?: (
253251
formMethods: ReturnType<typeof useForm<WebhookFormValues>>,
254252
children: React.ReactNode
255253
) => React.ReactNode;
256254
}) => {
257-
const { apps = [], selectOnlyInstantMeetingOption = false, overrideTriggerOptions } = props;
255+
const { apps = [], overrideTriggerOptions } = props;
258256
const { t } = useLocale();
259257
const webhookVariables = getWebhookVariables(t);
260258

@@ -273,11 +271,7 @@ const WebhookForm = (props: {
273271
const getEventTriggers = () => {
274272
if (props.webhook) return props.webhook.eventTriggers;
275273

276-
return (
277-
selectOnlyInstantMeetingOption
278-
? translatedTriggerOptions.filter((option) => option.value === WebhookTriggerEvents.INSTANT_MEETING)
279-
: translatedTriggerOptions.filter((option) => option.value !== WebhookTriggerEvents.INSTANT_MEETING)
280-
).map((option) => option.value);
274+
return translatedTriggerOptions.map((option) => option.value);
281275
};
282276

283277
const formMethods = useForm<WebhookFormValues>({

packages/features/webhooks/lib/constants.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ export const WEBHOOK_TRIGGER_EVENTS_GROUPED_BY_APP = {
5454
WebhookTriggerEvents.BOOKING_REQUESTED,
5555
WebhookTriggerEvents.BOOKING_REJECTED,
5656
WebhookTriggerEvents.RECORDING_READY,
57-
WebhookTriggerEvents.INSTANT_MEETING,
5857
WebhookTriggerEvents.RECORDING_TRANSCRIPTION_GENERATED,
5958
WebhookTriggerEvents.BOOKING_NO_SHOW_UPDATED,
6059
WebhookTriggerEvents.OOO_CREATED,

packages/features/webhooks/lib/dto/types.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -301,17 +301,6 @@ export interface MeetingEndedDTO extends BaseEventDTO {
301301
};
302302
}
303303

304-
export interface InstantMeetingDTO extends BaseEventDTO {
305-
triggerEvent: typeof WebhookTriggerEvents.INSTANT_MEETING;
306-
title: string;
307-
body: string;
308-
icon?: string;
309-
url?: string;
310-
actions?: { action: string; title: string; type: string; image: string | null }[];
311-
requireInteraction?: boolean;
312-
type: string;
313-
}
314-
315304
export interface AfterHostsNoShowDTO extends BaseEventDTO {
316305
triggerEvent: typeof WebhookTriggerEvents.AFTER_HOSTS_CAL_VIDEO_NO_SHOW;
317306
bookingId: number;
@@ -350,7 +339,6 @@ export type WebhookEventDTO =
350339
| TranscriptionGeneratedDTO
351340
| MeetingStartedDTO
352341
| MeetingEndedDTO
353-
| InstantMeetingDTO
354342
| AfterHostsNoShowDTO
355343
| AfterGuestsNoShowDTO;
356344

packages/features/webhooks/lib/factory/base/BaseInstantMeetingBuilder.test.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.

packages/features/webhooks/lib/factory/base/BaseInstantMeetingBuilder.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

packages/features/webhooks/lib/factory/base/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,4 @@ export { BaseBookingPayloadBuilder } from "./BaseBookingPayloadBuilder";
1515
export { BaseMeetingPayloadBuilder } from "./BaseMeetingPayloadBuilder";
1616
export { BaseRecordingPayloadBuilder } from "./BaseRecordingPayloadBuilder";
1717
export { BaseOOOPayloadBuilder } from "./BaseOOOPayloadBuilder";
18-
export { BaseInstantMeetingBuilder } from "./BaseInstantMeetingBuilder";
1918
export type { BookingExtraDataMap, BookingPayloadParams } from "./BaseBookingPayloadBuilder";

packages/features/webhooks/lib/factory/types.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,6 @@ export interface MeetingPayload {
6363
}[];
6464
}
6565

66-
export interface InstantMeetingPayload {
67-
title: string;
68-
body: string;
69-
icon?: string;
70-
url?: string;
71-
actions?: { action: string; title: string; type: string; image: string | null }[];
72-
requireInteraction?: boolean;
73-
type: string;
74-
}
75-
7666
export interface NoShowWebhookPayload {
7767
bookingId: number;
7868
webhook: {
@@ -93,6 +83,5 @@ export interface WebhookPayload {
9383
| FormSubmittedPayload
9484
| RecordingPayload
9585
| MeetingPayload
96-
| InstantMeetingPayload
9786
| NoShowWebhookPayload;
9887
}

packages/features/webhooks/lib/factory/versioned/PayloadBuilderFactory.test.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ describe("PayloadBuilderFactory", () => {
1616
ooo: new V2021_10_20.OOOPayloadBuilder(),
1717
recording: new V2021_10_20.RecordingPayloadBuilder(),
1818
meeting: new V2021_10_20.MeetingPayloadBuilder(),
19-
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
2019
};
2120

2221
factory = new PayloadBuilderFactory(WebhookVersionEnum.V_2021_10_20, defaultBuilders);
@@ -42,7 +41,6 @@ describe("PayloadBuilderFactory", () => {
4241
ooo: new V2021_10_20.OOOPayloadBuilder(),
4342
recording: new V2021_10_20.RecordingPayloadBuilder(),
4443
meeting: new V2021_10_20.MeetingPayloadBuilder(),
45-
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
4644
};
4745

4846
factory.registerVersion("2024-12-01", newVersionBuilders);
@@ -57,7 +55,6 @@ describe("PayloadBuilderFactory", () => {
5755
ooo: new V2021_10_20.OOOPayloadBuilder(),
5856
recording: new V2021_10_20.RecordingPayloadBuilder(),
5957
meeting: new V2021_10_20.MeetingPayloadBuilder(),
60-
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
6158
};
6259

6360
factory.registerVersion(WebhookVersionEnum.V_2021_10_20, newBuilders);
@@ -111,13 +108,6 @@ describe("PayloadBuilderFactory", () => {
111108
});
112109
});
113110

114-
it("should route instant meeting events to instant meeting builder", () => {
115-
const builder = factory.getBuilder(
116-
WebhookVersionEnum.V_2021_10_20,
117-
WebhookTriggerEvents.INSTANT_MEETING
118-
);
119-
expect(builder).toBe(defaultBuilders.instantMeeting);
120-
});
121111
});
122112

123113
describe("Fallback Behavior", () => {
@@ -166,17 +156,12 @@ describe("PayloadBuilderFactory", () => {
166156
WebhookVersionEnum.V_2021_10_20,
167157
WebhookTriggerEvents.MEETING_STARTED
168158
);
169-
const instantBuilder = factory.getBuilder(
170-
WebhookVersionEnum.V_2021_10_20,
171-
WebhookTriggerEvents.INSTANT_MEETING
172-
);
173159

174160
// Runtime verification
175161
expect(bookingBuilder).toBeDefined();
176162
expect(oooBuilder).toBeDefined();
177163
expect(recordingBuilder).toBeDefined();
178164
expect(meetingBuilder).toBeDefined();
179-
expect(instantBuilder).toBeDefined();
180165
});
181166

182167
it("should build valid payload with correctly typed DTO", () => {
@@ -244,7 +229,6 @@ describe("PayloadBuilderFactory", () => {
244229
ooo: new V2021_10_20.OOOPayloadBuilder(),
245230
recording: new V2021_10_20.RecordingPayloadBuilder(),
246231
meeting: new V2021_10_20.MeetingPayloadBuilder(),
247-
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
248232
};
249233

250234
factory.registerVersion(WebhookVersionEnum.V_2024_12_01, v2Builders);

packages/features/webhooks/lib/factory/versioned/PayloadBuilderFactory.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type {
44
AfterGuestsNoShowDTO,
55
AfterHostsNoShowDTO,
66
BookingWebhookEventDTO,
7-
InstantMeetingDTO,
87
MeetingEndedDTO,
98
MeetingStartedDTO,
109
OOOCreatedDTO,
@@ -44,16 +43,11 @@ export interface IMeetingPayloadBuilder
4443
): WebhookPayload;
4544
}
4645

47-
export interface IInstantMeetingBuilder extends IPayloadBuilder<InstantMeetingDTO> {
48-
build(dto: InstantMeetingDTO): WebhookPayload;
49-
}
50-
5146
export interface PayloadBuilderSet {
5247
booking: IBookingPayloadBuilder;
5348
ooo: IOOOPayloadBuilder;
5449
recording: IRecordingPayloadBuilder;
5550
meeting: IMeetingPayloadBuilder;
56-
instantMeeting: IInstantMeetingBuilder;
5751
}
5852

5953
type BuilderCategory = keyof PayloadBuilderSet;
@@ -92,9 +86,6 @@ const TRIGGER_TO_BUILDER_CATEGORY: Record<WebhookTriggerEvents, BuilderCategory>
9286
[WebhookTriggerEvents.AFTER_HOSTS_CAL_VIDEO_NO_SHOW]: "meeting",
9387
[WebhookTriggerEvents.AFTER_GUESTS_CAL_VIDEO_NO_SHOW]: "meeting",
9488

95-
// Instant meeting events
96-
[WebhookTriggerEvents.INSTANT_MEETING]: "instantMeeting",
97-
9889
// Delegation events (enterprise feature removed, mapped to booking as fallback)
9990
[WebhookTriggerEvents.DELEGATION_CREDENTIAL_ERROR]: "booking",
10091

@@ -128,8 +119,6 @@ export type MeetingTriggerEvents =
128119
| typeof WebhookTriggerEvents.AFTER_HOSTS_CAL_VIDEO_NO_SHOW
129120
| typeof WebhookTriggerEvents.AFTER_GUESTS_CAL_VIDEO_NO_SHOW;
130121

131-
export type InstantMeetingTriggerEvents = typeof WebhookTriggerEvents.INSTANT_MEETING;
132-
133122
/**
134123
* Factory that routes to version-specific payload builders
135124
*
@@ -192,7 +181,6 @@ export class PayloadBuilderFactory {
192181
getBuilder(version: WebhookVersion, triggerEvent: OOOTriggerEvents): IOOOPayloadBuilder;
193182
getBuilder(version: WebhookVersion, triggerEvent: RecordingTriggerEvents): IRecordingPayloadBuilder;
194183
getBuilder(version: WebhookVersion, triggerEvent: MeetingTriggerEvents): IMeetingPayloadBuilder;
195-
getBuilder(version: WebhookVersion, triggerEvent: InstantMeetingTriggerEvents): IInstantMeetingBuilder;
196184
getBuilder(version: WebhookVersion, triggerEvent: WebhookTriggerEvents): IPayloadBuilder<WebhookEventDTO>;
197185
getBuilder(version: WebhookVersion, triggerEvent: WebhookTriggerEvents): IPayloadBuilder<WebhookEventDTO> {
198186
const builderSet = this.getBuilderSet(version);

packages/features/webhooks/lib/factory/versioned/registry.test.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,11 @@ describe("Payload Builder Registry", () => {
3131
DEFAULT_WEBHOOK_VERSION,
3232
WebhookTriggerEvents.MEETING_STARTED
3333
);
34-
const instantBuilder = factory.getBuilder(
35-
DEFAULT_WEBHOOK_VERSION,
36-
WebhookTriggerEvents.INSTANT_MEETING
37-
);
3834

3935
expect(bookingBuilder).toBeDefined();
4036
expect(oooBuilder).toBeDefined();
4137
expect(recordingBuilder).toBeDefined();
4238
expect(meetingBuilder).toBeDefined();
43-
expect(instantBuilder).toBeDefined();
4439
});
4540

4641
it("should register v2021-10-20 builders", () => {
@@ -92,7 +87,6 @@ describe("Payload Builder Registry", () => {
9287
ooo: new V2021_10_20.OOOPayloadBuilder(),
9388
recording: new V2021_10_20.RecordingPayloadBuilder(),
9489
meeting: new V2021_10_20.MeetingPayloadBuilder(),
95-
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
9690
};
9791

9892
factory.registerVersion(NEW_VERSION, newVersionBuilders);
@@ -111,7 +105,6 @@ describe("Payload Builder Registry", () => {
111105
ooo: new V2021_10_20.OOOPayloadBuilder(),
112106
recording: new V2021_10_20.RecordingPayloadBuilder(),
113107
meeting: new V2021_10_20.MeetingPayloadBuilder(),
114-
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
115108
};
116109

117110
factory.registerVersion(NEW_VERSION, v2Builders);
@@ -140,7 +133,6 @@ describe("Payload Builder Registry", () => {
140133
ooo: new V2021_10_20.OOOPayloadBuilder(),
141134
recording: new V2021_10_20.RecordingPayloadBuilder(),
142135
meeting: new V2021_10_20.MeetingPayloadBuilder(),
143-
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
144136
});
145137

146138
expect(factory1.getRegisteredVersions()).not.toEqual(factory2.getRegisteredVersions());

0 commit comments

Comments
 (0)