Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/lovely-tools-sleep.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@clerk/backend': minor
---

Add `external_id` field to `user.deleted` webhook events; Add `user` field to `SessionWebhookEventJSON`

- Adds `external_id` field to `user.deleted` webhook events by creating a new `UserDeletedJSON` interface that extends `DeletedObjectJSON` to include an optional `external_id` string.
- Creates a new `SessionWebhookEventJSON` interface that extends `SessionJSON` to include a nullable `user` field as the `UserJSON` interface, and updates the webhook event types to use this new interface for `session.created`, `session.ended`, `session.removed`, and `session.revoked` events.
23 changes: 23 additions & 0 deletions packages/backend/src/api/resources/JSON.ts
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,17 @@ export interface SessionJSON extends ClerkResourceJSON {
updated_at: number;
}

/**
* Session webhook event payload extending `SessionJSON` interface with associated `User` information.
* Used for `session.created`, `session.ended`, `session.removed`, and `session.revoked` webhook events.
*/
export interface SessionWebhookEventJSON extends SessionJSON {
/**
* The user associated with the session, or null if not available.
*/
user: UserJSON | null;
}

export interface SignInJSON extends ClerkResourceJSON {
object: typeof ObjectType.SignInToken;
status: SignInStatus;
Expand Down Expand Up @@ -649,6 +660,18 @@ export interface DeletedObjectJSON {
deleted: boolean;
}

/**
* User deletion webhook event payload that extends `DeletedObjectJSON`.
* Includes the `external_id` field to identify the deleted user in external systems.
* Used for `user.deleted` webhook events.
*/
export interface UserDeletedJSON extends DeletedObjectJSON {
/**
* The external identifier associated with the deleted user, if one was set.
*/
external_id?: string;
}

export interface PaginatedResponseJSON {
data: object[];
total_count?: number;
Expand Down
7 changes: 4 additions & 3 deletions packages/backend/src/api/resources/Webhooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ import type {
OrganizationMembershipJSON,
PermissionJSON,
RoleJSON,
SessionJSON,
SessionWebhookEventJSON,
SMSMessageJSON,
UserDeletedJSON,
UserJSON,
WaitlistEntryJSON,
} from './JSON';
Expand All @@ -28,15 +29,15 @@ type Webhook<EvtType, Data> = { type: EvtType; object: 'event'; data: Data; even

export type UserWebhookEvent =
| Webhook<'user.created' | 'user.updated', UserJSON>
| Webhook<'user.deleted', DeletedObjectJSON>;
| Webhook<'user.deleted', UserDeletedJSON>;

export type EmailWebhookEvent = Webhook<'email.created', EmailJSON>;

export type SMSWebhookEvent = Webhook<'sms.created', SMSMessageJSON>;

export type SessionWebhookEvent = Webhook<
'session.created' | 'session.ended' | 'session.removed' | 'session.revoked',
SessionJSON
SessionWebhookEventJSON
>;

export type OrganizationWebhookEvent =
Expand Down
Loading