Skip to content

Commit

Permalink
feat(*): Introduce WebhookEventPayload<TWebhookEventType> for extract…
Browse files Browse the repository at this point in the history
…ing typed webhook payloads
  • Loading branch information
MlNl-PEKKA committed Feb 26, 2025
1 parent 54a3b5b commit cb6533b
Show file tree
Hide file tree
Showing 9 changed files with 40 additions and 0 deletions.
23 changes: 23 additions & 0 deletions .changeset/thirty-tomatoes-brush.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
'@clerk/tanstack-start': minor
'@clerk/react-router': minor
'@clerk/backend': minor
'@clerk/nextjs': minor
'@clerk/astro': minor
'@clerk/remix': minor
'@clerk/express': minor
'@clerk/fastify': minor
'@clerk/nuxt': minor
---

Introduces `WebhookEventPayload<TWebhookEventType>`, a utility type that allows to infer webhook payloads based on event types.

Usage:
```ts
type UserCreatedPayload = WebhookEventPayload<"user.created">;
// ^? {
// object: "event";
// data: UserJSON;
// type: "user.created";
// }
```
1 change: 1 addition & 0 deletions packages/astro/src/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export type {
OrganizationMembershipRole,
// Webhook event types
WebhookEvent,
WebhookEventPayload,
WebhookEventType,
// Resources
AllowlistIdentifier,
Expand Down
10 changes: 10 additions & 0 deletions packages/backend/src/api/resources/Webhooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,14 @@ export type WebhookEvent =
| RoleWebhookEvent
| PermissionWebhookEvent;

export type WebhookEventPayload<T extends WebhookEventType> = WebhookEvent extends infer U
? U extends { type: infer K }
? T extends K
? Simplify<Omit<U, 'type'> & { type: T }>
: never
: never
: never;

export type WebhookEventType = WebhookEvent['type'];

type Simplify<T> = { [KeyType in keyof T]: T[KeyType] } & {};
1 change: 1 addition & 0 deletions packages/backend/src/api/resources/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export type {
SMSWebhookEvent,
UserWebhookEvent,
WebhookEvent,
WebhookEventPayload,
WebhookEventType,
} from './Webhooks';

Expand Down
1 change: 1 addition & 0 deletions packages/backend/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ export type {
SMSWebhookEvent,
UserWebhookEvent,
WebhookEvent,
WebhookEventPayload,
WebhookEventType,
} from './api/resources/Webhooks';

Expand Down
1 change: 1 addition & 0 deletions packages/nextjs/src/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export type {
SMSMessageJSON,
UserJSON,
WebhookEvent,
WebhookEventPayload,
WebhookEventType,
UserWebhookEvent,
EmailWebhookEvent,
Expand Down
1 change: 1 addition & 0 deletions packages/react-router/src/ssr/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type {
OrganizationMembershipRole,
// Webhook event types
WebhookEvent,
WebhookEventPayload,
WebhookEventType,
// Resources
AllowlistIdentifier,
Expand Down
1 change: 1 addition & 0 deletions packages/remix/src/ssr/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type {
OrganizationMembershipRole,
// Webhook event types
WebhookEvent,
WebhookEventPayload,
WebhookEventType,
// Resources
AllowlistIdentifier,
Expand Down
1 change: 1 addition & 0 deletions packages/tanstack-start/src/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export type {
OrganizationMembershipRole,
// Webhook event types
WebhookEvent,
WebhookEventPayload,
WebhookEventType,
// Resources
AllowlistIdentifier,
Expand Down

0 comments on commit cb6533b

Please sign in to comment.