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;