File size: 1,504 Bytes
94193b5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | // lib/webhooks/types.ts
export type WebhookEventType =
| 'user.created'
| 'user.updated'
| 'user.deactivated'
| 'workspace.created'
| 'workspace.updated'
| 'workspace.deleted'
| 'workspace.access_granted'
| 'workspace.access_revoked';
export interface WebhookEvent {
id: number;
event_type: WebhookEventType;
payload: string; // JSON
created_at: string;
delivered: boolean;
delivered_at: string | null;
attempts: number;
last_attempted_at: string | null;
}
export interface UserCreatedPayload {
userId: string;
email: string;
displayName: string | null;
}
export interface UserUpdatedPayload {
userId: string;
email: string;
displayName: string | null;
}
export interface UserDeactivatedPayload {
userId: string;
}
export interface WorkspaceCreatedPayload {
workspaceId: string;
name: string;
ownerId: string;
}
export interface WorkspaceUpdatedPayload {
workspaceId: string;
name: string;
}
export interface WorkspaceDeletedPayload {
workspaceId: string;
}
export interface WorkspaceAccessGrantedPayload {
workspaceId: string;
email: string;
role: 'owner' | 'editor' | 'viewer';
}
export interface WorkspaceAccessRevokedPayload {
workspaceId: string;
email: string;
}
export type WebhookPayload =
| UserCreatedPayload
| UserUpdatedPayload
| UserDeactivatedPayload
| WorkspaceCreatedPayload
| WorkspaceUpdatedPayload
| WorkspaceDeletedPayload
| WorkspaceAccessGrantedPayload
| WorkspaceAccessRevokedPayload;
|