Skip to content

Commit 50e630a

Browse files
authored
feat(backend): Add external_id to user.deleted; Add user to SessionWebhookEventJSON (#7209)
Signed-off-by: Kenton Duprey <[email protected]>
1 parent 0017b53 commit 50e630a

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

.changeset/lovely-tools-sleep.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@clerk/backend': minor
3+
---
4+
5+
Add `external_id` field to `user.deleted` webhook events; Add `user` field to `SessionWebhookEventJSON`
6+
7+
- 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.
8+
- 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.

packages/backend/src/api/resources/JSON.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,17 @@ export interface SessionJSON extends ClerkResourceJSON {
498498
updated_at: number;
499499
}
500500

501+
/**
502+
* Session webhook event payload extending `SessionJSON` interface with associated `User` information.
503+
* Used for `session.created`, `session.ended`, `session.removed`, and `session.revoked` webhook events.
504+
*/
505+
export interface SessionWebhookEventJSON extends SessionJSON {
506+
/**
507+
* The user associated with the session, or null if not available.
508+
*/
509+
user: UserJSON | null;
510+
}
511+
501512
export interface SignInJSON extends ClerkResourceJSON {
502513
object: typeof ObjectType.SignInToken;
503514
status: SignInStatus;
@@ -649,6 +660,18 @@ export interface DeletedObjectJSON {
649660
deleted: boolean;
650661
}
651662

663+
/**
664+
* User deletion webhook event payload that extends `DeletedObjectJSON`.
665+
* Includes the `external_id` field to identify the deleted user in external systems.
666+
* Used for `user.deleted` webhook events.
667+
*/
668+
export interface UserDeletedJSON extends DeletedObjectJSON {
669+
/**
670+
* The external identifier associated with the deleted user, if one was set.
671+
*/
672+
external_id?: string;
673+
}
674+
652675
export interface PaginatedResponseJSON {
653676
data: object[];
654677
total_count?: number;

packages/backend/src/api/resources/Webhooks.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import type {
1111
OrganizationMembershipJSON,
1212
PermissionJSON,
1313
RoleJSON,
14-
SessionJSON,
14+
SessionWebhookEventJSON,
1515
SMSMessageJSON,
16+
UserDeletedJSON,
1617
UserJSON,
1718
WaitlistEntryJSON,
1819
} from './JSON';
@@ -28,15 +29,15 @@ type Webhook<EvtType, Data> = { type: EvtType; object: 'event'; data: Data; even
2829

2930
export type UserWebhookEvent =
3031
| Webhook<'user.created' | 'user.updated', UserJSON>
31-
| Webhook<'user.deleted', DeletedObjectJSON>;
32+
| Webhook<'user.deleted', UserDeletedJSON>;
3233

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

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

3738
export type SessionWebhookEvent = Webhook<
3839
'session.created' | 'session.ended' | 'session.removed' | 'session.revoked',
39-
SessionJSON
40+
SessionWebhookEventJSON
4041
>;
4142

4243
export type OrganizationWebhookEvent =

0 commit comments

Comments
 (0)