Files
calendar/packages/features/webhooks/lib/factory/versioned/registry.ts
T
Syed Ali ShahbazandGitHub 056922b6ee feat: add webhook versioning (#23861)
* add webhook version schema

* version the code

* update version from numeric to date val

* migration

* update schema and build factory

* update string

* move version picker

* tooltip instead of infobadge

* --

* fix type

* --

* fix type

* fix type

* --

* fix messed up merge

* improvements to payloadfactory

* extract version off of DB and instead keep it in IWebhookRepository

* fix webhookform

* fix type safety and routing ambiguity

* scalable with easier factory extensions and base definition

* fix types

* --

* --

* clean up prisma/client type imports

* fix

* type fix

* type fix

* cleanup

* add tests and registry changes

* unintended file inclusion

* type-fix

* select in repo

* --

* explicit return type

* --

* fix type

* fixes

* feedback 1

* feedback 2

* use enum instead of string

* fixes
2025-12-18 09:36:22 +02:00

50 lines
1.8 KiB
TypeScript

import { DEFAULT_WEBHOOK_VERSION } from "../../interface/IWebhookRepository";
import { PayloadBuilderFactory } from "./PayloadBuilderFactory";
import * as V2021_10_20 from "./v2021-10-20";
// Re-export for consumers
export { DEFAULT_WEBHOOK_VERSION } from "../../interface/IWebhookRepository";
/**
* Create and initialize a PayloadBuilderFactory with all registered versions.
*
* This is the central registry (composition root) for all webhook versions.
* The factory is fully configured here - consumers just use it.
*
* @returns Fully configured PayloadBuilderFactory instance
*
* @example Adding a new webhook version
* 1. Create directory: versioned/v2024-12-01/
* 2. Implement builders in that directory
* 3. Import and register here:
* ```ts
*
* import * as V2024_12_01 from "./v2024-12-01";
*
* factory.registerVersion(WebhookVersion.V_2024_12_01, {
* booking: new V2024_12_01.BookingPayloadBuilder(),
* form: new V2024_12_01.FormPayloadBuilder(),
* ooo: new V2024_12_01.OOOPayloadBuilder(),
* recording: new V2024_12_01.RecordingPayloadBuilder(),
* meeting: new V2024_12_01.MeetingPayloadBuilder(),
* instantMeeting: new V2024_12_01.InstantMeetingBuilder(),
* delegation: new V2024_12_01.DelegationPayloadBuilder(),
* });
* ```
*/
export function createPayloadBuilderFactory(): PayloadBuilderFactory {
const defaultBuilders = {
booking: new V2021_10_20.BookingPayloadBuilder(),
form: new V2021_10_20.FormPayloadBuilder(),
ooo: new V2021_10_20.OOOPayloadBuilder(),
recording: new V2021_10_20.RecordingPayloadBuilder(),
meeting: new V2021_10_20.MeetingPayloadBuilder(),
instantMeeting: new V2021_10_20.InstantMeetingBuilder(),
delegation: new V2021_10_20.DelegationPayloadBuilder(),
};
const factory = new PayloadBuilderFactory(DEFAULT_WEBHOOK_VERSION, defaultBuilders);
return factory;
}