Skip to main content

parseWebhookPayload()

function parseWebhookPayload(raw: unknown):
| {
eventData: | {
content: string;
fileAttachment: | {
fileDuration?: number | null;
fileName?: string | null;
fileSize?: number | null;
fileType?: string | null;
fileUrl?: string | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
resourceType: string;
title?: string | null;
uploadState?: "completed" | "pending" | null;
url?: string | null;
}
| null;
id: string;
isDeleted: boolean;
item: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
postedAt: Date | null;
postedUid: string | null;
reactions: Record<string, string[]> | null;
taskId: string;
uidsToNotify: string[] | null;
url: string;
}
| {
content: string;
fileAttachment: | {
fileDuration?: number | null;
fileName?: string | null;
fileSize?: number | null;
fileType?: string | null;
fileUrl?: string | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
resourceType: string;
title?: string | null;
uploadState?: "completed" | "pending" | null;
url?: string | null;
}
| null;
id: string;
isDeleted: boolean;
postedAt: Date | null;
postedUid: string | null;
projectId: string;
reactions: Record<string, string[]> | null;
uidsToNotify: string[] | null;
};
eventName: "note:added";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: | {
content: string;
fileAttachment: | {
fileDuration?: number | null;
fileName?: string | null;
fileSize?: number | null;
fileType?: string | null;
fileUrl?: string | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
resourceType: string;
title?: string | null;
uploadState?: "completed" | "pending" | null;
url?: string | null;
}
| null;
id: string;
isDeleted: boolean;
item: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
postedAt: Date | null;
postedUid: string | null;
reactions: Record<string, string[]> | null;
taskId: string;
uidsToNotify: string[] | null;
url: string;
}
| {
content: string;
fileAttachment: | {
fileDuration?: number | null;
fileName?: string | null;
fileSize?: number | null;
fileType?: string | null;
fileUrl?: string | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
resourceType: string;
title?: string | null;
uploadState?: "completed" | "pending" | null;
url?: string | null;
}
| null;
id: string;
isDeleted: boolean;
postedAt: Date | null;
postedUid: string | null;
projectId: string;
reactions: Record<string, string[]> | null;
uidsToNotify: string[] | null;
};
eventName: "note:updated";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: | {
content: string;
fileAttachment: | {
fileDuration?: number | null;
fileName?: string | null;
fileSize?: number | null;
fileType?: string | null;
fileUrl?: string | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
resourceType: string;
title?: string | null;
uploadState?: "completed" | "pending" | null;
url?: string | null;
}
| null;
id: string;
isDeleted: boolean;
item: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
postedAt: Date | null;
postedUid: string | null;
reactions: Record<string, string[]> | null;
taskId: string;
uidsToNotify: string[] | null;
url: string;
}
| {
content: string;
fileAttachment: | {
fileDuration?: number | null;
fileName?: string | null;
fileSize?: number | null;
fileType?: string | null;
fileUrl?: string | null;
image?: string | null;
imageHeight?: number | null;
imageWidth?: number | null;
resourceType: string;
title?: string | null;
uploadState?: "completed" | "pending" | null;
url?: string | null;
}
| null;
id: string;
isDeleted: boolean;
postedAt: Date | null;
postedUid: string | null;
projectId: string;
reactions: Record<string, string[]> | null;
uidsToNotify: string[] | null;
};
eventName: "note:deleted";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
[key: string]: unknown;
color: string;
id: string;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
itemOrder: number;
name: string;
query: string;
};
eventName: "filter:added";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
[key: string]: unknown;
color: string;
id: string;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
itemOrder: number;
name: string;
query: string;
};
eventName: "filter:updated";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
[key: string]: unknown;
color: string;
id: string;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
itemOrder: number;
name: string;
query: string;
};
eventName: "filter:deleted";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
color: string;
id: string;
isDeleted: boolean;
isFavorite: boolean;
name: string;
order: number | null;
};
eventName: "label:added";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
color: string;
id: string;
isDeleted: boolean;
isFavorite: boolean;
name: string;
order: number | null;
};
eventName: "label:updated";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
color: string;
id: string;
isDeleted: boolean;
isFavorite: boolean;
name: string;
order: number | null;
};
eventName: "label:deleted";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: | {
canAssignTasks: boolean;
childOrder: number;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
id: string;
inboxProject: boolean;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isShared: boolean;
name: string;
parentId: string | null;
updatedAt: Date | null;
url: string;
viewStyle: string;
}
| {
access?: {
visibility: "restricted" | "team" | "public";
};
canAssignTasks: boolean;
childOrder: number;
collaboratorRoleDefault: string;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
folderId: string | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isInviteOnly: boolean | null;
isLinkSharingEnabled: boolean;
isShared: boolean;
name: string;
role: string | null;
status: string;
updatedAt: Date | null;
url: string;
viewStyle: string;
workspaceId: string;
};
eventName: "project:added";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: | {
canAssignTasks: boolean;
childOrder: number;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
id: string;
inboxProject: boolean;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isShared: boolean;
name: string;
parentId: string | null;
updatedAt: Date | null;
url: string;
viewStyle: string;
}
| {
access?: {
visibility: "restricted" | "team" | "public";
};
canAssignTasks: boolean;
childOrder: number;
collaboratorRoleDefault: string;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
folderId: string | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isInviteOnly: boolean | null;
isLinkSharingEnabled: boolean;
isShared: boolean;
name: string;
role: string | null;
status: string;
updatedAt: Date | null;
url: string;
viewStyle: string;
workspaceId: string;
};
eventName: "project:updated";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: | {
canAssignTasks: boolean;
childOrder: number;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
id: string;
inboxProject: boolean;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isShared: boolean;
name: string;
parentId: string | null;
updatedAt: Date | null;
url: string;
viewStyle: string;
}
| {
access?: {
visibility: "restricted" | "team" | "public";
};
canAssignTasks: boolean;
childOrder: number;
collaboratorRoleDefault: string;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
folderId: string | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isInviteOnly: boolean | null;
isLinkSharingEnabled: boolean;
isShared: boolean;
name: string;
role: string | null;
status: string;
updatedAt: Date | null;
url: string;
viewStyle: string;
workspaceId: string;
};
eventName: "project:deleted";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: | {
canAssignTasks: boolean;
childOrder: number;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
id: string;
inboxProject: boolean;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isShared: boolean;
name: string;
parentId: string | null;
updatedAt: Date | null;
url: string;
viewStyle: string;
}
| {
access?: {
visibility: "restricted" | "team" | "public";
};
canAssignTasks: boolean;
childOrder: number;
collaboratorRoleDefault: string;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
folderId: string | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isInviteOnly: boolean | null;
isLinkSharingEnabled: boolean;
isShared: boolean;
name: string;
role: string | null;
status: string;
updatedAt: Date | null;
url: string;
viewStyle: string;
workspaceId: string;
};
eventName: "project:archived";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: | {
canAssignTasks: boolean;
childOrder: number;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
id: string;
inboxProject: boolean;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isShared: boolean;
name: string;
parentId: string | null;
updatedAt: Date | null;
url: string;
viewStyle: string;
}
| {
access?: {
visibility: "restricted" | "team" | "public";
};
canAssignTasks: boolean;
childOrder: number;
collaboratorRoleDefault: string;
color: string;
createdAt: Date | null;
defaultOrder: number;
description: string;
folderId: string | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
isFavorite: boolean;
isFrozen: boolean;
isInviteOnly: boolean | null;
isLinkSharingEnabled: boolean;
isShared: boolean;
name: string;
role: string | null;
status: string;
updatedAt: Date | null;
url: string;
viewStyle: string;
workspaceId: string;
};
eventName: "project:unarchived";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
[key: string]: unknown;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
id: string;
isDeleted: boolean;
isUrgent: boolean;
itemId: string;
minuteOffset: number | null;
notifyUid: string;
projectId?: string;
type: "relative" | "absolute" | "location";
};
eventName: "reminder:fired";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date;
archivedAt: Date | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
name: string;
projectId: string;
sectionOrder: number;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "section:added";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date;
archivedAt: Date | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
name: string;
projectId: string;
sectionOrder: number;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "section:updated";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date;
archivedAt: Date | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
name: string;
projectId: string;
sectionOrder: number;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "section:deleted";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date;
archivedAt: Date | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
name: string;
projectId: string;
sectionOrder: number;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "section:archived";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date;
archivedAt: Date | null;
id: string;
isArchived: boolean;
isCollapsed: boolean;
isDeleted: boolean;
name: string;
projectId: string;
sectionOrder: number;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "section:unarchived";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "item:added";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
eventDataExtra?: {
oldItem: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
updateIntent: | "item_updated"
| "item_completed"
| "item_uncompleted"
| "responsible_uid_changed";
};
eventName: "item:updated";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "item:completed";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "item:uncompleted";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
}
| {
eventData: {
addedAt: Date | null;
addedByUid: string | null;
assignedByUid: string | null;
checked: boolean;
childOrder: number;
completedAt: Date | null;
content: string;
dayOrder: number;
deadline: | {
date: string;
lang: string;
}
| null;
description: string;
due: | {
date: string;
datetime?: string | null;
isRecurring: boolean;
lang?: string | null;
string: string;
timezone?: string | null;
}
| null;
duration: | {
amount: number;
unit: "minute" | "day";
}
| null;
id: string;
isCollapsed: boolean;
isDeleted: boolean;
isUncompletable: boolean;
labels: string[];
parentId: string | null;
priority: number;
projectId: string;
responsibleUid: string | null;
sectionId: string | null;
updatedAt: Date | null;
url: string;
userId: string;
};
eventName: "item:deleted";
initiator: {
email: string;
fullName: string;
id: string;
imageId: string | null;
isPremium: boolean;
};
triggeredAt: Date;
userId: string;
version: "1";
};

Parses an incoming webhook request body into a typed payload.

The backend sends snake_case keys (e.g. event_name, user_id, added_at); this converts them to camelCase and validates against WebhookPayloadSchema. Event-specific eventData is returned as unknown for events that are not yet narrowed per-resource.

Pass the parsed JSON body (or any unknown value) — validation throws on unexpected shape.

Parameters

ParameterType
rawunknown

Returns

| { eventData: | { content: string; fileAttachment: | { fileDuration?: number | null; fileName?: string | null; fileSize?: number | null; fileType?: string | null; fileUrl?: string | null; image?: string | null; imageHeight?: number | null; imageWidth?: number | null; resourceType: string; title?: string | null; uploadState?: "completed" | "pending" | null; url?: string | null; } | null; id: string; isDeleted: boolean; item: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; postedAt: Date | null; postedUid: string | null; reactions: Record<string, string[]> | null; taskId: string; uidsToNotify: string[] | null; url: string; } | { content: string; fileAttachment: | { fileDuration?: number | null; fileName?: string | null; fileSize?: number | null; fileType?: string | null; fileUrl?: string | null; image?: string | null; imageHeight?: number | null; imageWidth?: number | null; resourceType: string; title?: string | null; uploadState?: "completed" | "pending" | null; url?: string | null; } | null; id: string; isDeleted: boolean; postedAt: Date | null; postedUid: string | null; projectId: string; reactions: Record<string, string[]> | null; uidsToNotify: string[] | null; }; eventName: "note:added"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: | { content: string; fileAttachment: | { fileDuration?: number | null; fileName?: string | null; fileSize?: number | null; fileType?: string | null; fileUrl?: string | null; image?: string | null; imageHeight?: number | null; imageWidth?: number | null; resourceType: string; title?: string | null; uploadState?: "completed" | "pending" | null; url?: string | null; } | null; id: string; isDeleted: boolean; item: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; postedAt: Date | null; postedUid: string | null; reactions: Record<string, string[]> | null; taskId: string; uidsToNotify: string[] | null; url: string; } | { content: string; fileAttachment: | { fileDuration?: number | null; fileName?: string | null; fileSize?: number | null; fileType?: string | null; fileUrl?: string | null; image?: string | null; imageHeight?: number | null; imageWidth?: number | null; resourceType: string; title?: string | null; uploadState?: "completed" | "pending" | null; url?: string | null; } | null; id: string; isDeleted: boolean; postedAt: Date | null; postedUid: string | null; projectId: string; reactions: Record<string, string[]> | null; uidsToNotify: string[] | null; }; eventName: "note:updated"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: | { content: string; fileAttachment: | { fileDuration?: number | null; fileName?: string | null; fileSize?: number | null; fileType?: string | null; fileUrl?: string | null; image?: string | null; imageHeight?: number | null; imageWidth?: number | null; resourceType: string; title?: string | null; uploadState?: "completed" | "pending" | null; url?: string | null; } | null; id: string; isDeleted: boolean; item: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; postedAt: Date | null; postedUid: string | null; reactions: Record<string, string[]> | null; taskId: string; uidsToNotify: string[] | null; url: string; } | { content: string; fileAttachment: | { fileDuration?: number | null; fileName?: string | null; fileSize?: number | null; fileType?: string | null; fileUrl?: string | null; image?: string | null; imageHeight?: number | null; imageWidth?: number | null; resourceType: string; title?: string | null; uploadState?: "completed" | "pending" | null; url?: string | null; } | null; id: string; isDeleted: boolean; postedAt: Date | null; postedUid: string | null; projectId: string; reactions: Record<string, string[]> | null; uidsToNotify: string[] | null; }; eventName: "note:deleted"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { [key: string]: unknown; color: string; id: string; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; itemOrder: number; name: string; query: string; }; eventName: "filter:added"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { [key: string]: unknown; color: string; id: string; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; itemOrder: number; name: string; query: string; }; eventName: "filter:updated"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { [key: string]: unknown; color: string; id: string; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; itemOrder: number; name: string; query: string; }; eventName: "filter:deleted"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { color: string; id: string; isDeleted: boolean; isFavorite: boolean; name: string; order: number | null; }; eventName: "label:added"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { color: string; id: string; isDeleted: boolean; isFavorite: boolean; name: string; order: number | null; }; eventName: "label:updated"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { color: string; id: string; isDeleted: boolean; isFavorite: boolean; name: string; order: number | null; }; eventName: "label:deleted"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: | { canAssignTasks: boolean; childOrder: number; color: string; createdAt: Date | null; defaultOrder: number; description: string; id: string; inboxProject: boolean; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isShared: boolean; name: string; parentId: string | null; updatedAt: Date | null; url: string; viewStyle: string; } | { access?: { visibility: "restricted" | "team" | "public"; }; canAssignTasks: boolean; childOrder: number; collaboratorRoleDefault: string; color: string; createdAt: Date | null; defaultOrder: number; description: string; folderId: string | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isInviteOnly: boolean | null; isLinkSharingEnabled: boolean; isShared: boolean; name: string; role: string | null; status: string; updatedAt: Date | null; url: string; viewStyle: string; workspaceId: string; }; eventName: "project:added"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: | { canAssignTasks: boolean; childOrder: number; color: string; createdAt: Date | null; defaultOrder: number; description: string; id: string; inboxProject: boolean; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isShared: boolean; name: string; parentId: string | null; updatedAt: Date | null; url: string; viewStyle: string; } | { access?: { visibility: "restricted" | "team" | "public"; }; canAssignTasks: boolean; childOrder: number; collaboratorRoleDefault: string; color: string; createdAt: Date | null; defaultOrder: number; description: string; folderId: string | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isInviteOnly: boolean | null; isLinkSharingEnabled: boolean; isShared: boolean; name: string; role: string | null; status: string; updatedAt: Date | null; url: string; viewStyle: string; workspaceId: string; }; eventName: "project:updated"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: | { canAssignTasks: boolean; childOrder: number; color: string; createdAt: Date | null; defaultOrder: number; description: string; id: string; inboxProject: boolean; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isShared: boolean; name: string; parentId: string | null; updatedAt: Date | null; url: string; viewStyle: string; } | { access?: { visibility: "restricted" | "team" | "public"; }; canAssignTasks: boolean; childOrder: number; collaboratorRoleDefault: string; color: string; createdAt: Date | null; defaultOrder: number; description: string; folderId: string | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isInviteOnly: boolean | null; isLinkSharingEnabled: boolean; isShared: boolean; name: string; role: string | null; status: string; updatedAt: Date | null; url: string; viewStyle: string; workspaceId: string; }; eventName: "project:deleted"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: | { canAssignTasks: boolean; childOrder: number; color: string; createdAt: Date | null; defaultOrder: number; description: string; id: string; inboxProject: boolean; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isShared: boolean; name: string; parentId: string | null; updatedAt: Date | null; url: string; viewStyle: string; } | { access?: { visibility: "restricted" | "team" | "public"; }; canAssignTasks: boolean; childOrder: number; collaboratorRoleDefault: string; color: string; createdAt: Date | null; defaultOrder: number; description: string; folderId: string | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isInviteOnly: boolean | null; isLinkSharingEnabled: boolean; isShared: boolean; name: string; role: string | null; status: string; updatedAt: Date | null; url: string; viewStyle: string; workspaceId: string; }; eventName: "project:archived"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: | { canAssignTasks: boolean; childOrder: number; color: string; createdAt: Date | null; defaultOrder: number; description: string; id: string; inboxProject: boolean; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isShared: boolean; name: string; parentId: string | null; updatedAt: Date | null; url: string; viewStyle: string; } | { access?: { visibility: "restricted" | "team" | "public"; }; canAssignTasks: boolean; childOrder: number; collaboratorRoleDefault: string; color: string; createdAt: Date | null; defaultOrder: number; description: string; folderId: string | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; isFavorite: boolean; isFrozen: boolean; isInviteOnly: boolean | null; isLinkSharingEnabled: boolean; isShared: boolean; name: string; role: string | null; status: string; updatedAt: Date | null; url: string; viewStyle: string; workspaceId: string; }; eventName: "project:unarchived"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { [key: string]: unknown; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; id: string; isDeleted: boolean; isUrgent: boolean; itemId: string; minuteOffset: number | null; notifyUid: string; projectId?: string; type: "relative" | "absolute" | "location"; }; eventName: "reminder:fired"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date; archivedAt: Date | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; name: string; projectId: string; sectionOrder: number; updatedAt: Date | null; url: string; userId: string; }; eventName: "section:added"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date; archivedAt: Date | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; name: string; projectId: string; sectionOrder: number; updatedAt: Date | null; url: string; userId: string; }; eventName: "section:updated"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date; archivedAt: Date | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; name: string; projectId: string; sectionOrder: number; updatedAt: Date | null; url: string; userId: string; }; eventName: "section:deleted"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date; archivedAt: Date | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; name: string; projectId: string; sectionOrder: number; updatedAt: Date | null; url: string; userId: string; }; eventName: "section:archived"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date; archivedAt: Date | null; id: string; isArchived: boolean; isCollapsed: boolean; isDeleted: boolean; name: string; projectId: string; sectionOrder: number; updatedAt: Date | null; url: string; userId: string; }; eventName: "section:unarchived"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; eventName: "item:added"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; eventDataExtra?: { oldItem: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; updateIntent: | "item_updated" | "item_completed" | "item_uncompleted" | "responsible_uid_changed"; }; eventName: "item:updated"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; eventName: "item:completed"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; eventName: "item:uncompleted"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; } | { eventData: { addedAt: Date | null; addedByUid: string | null; assignedByUid: string | null; checked: boolean; childOrder: number; completedAt: Date | null; content: string; dayOrder: number; deadline: | { date: string; lang: string; } | null; description: string; due: | { date: string; datetime?: string | null; isRecurring: boolean; lang?: string | null; string: string; timezone?: string | null; } | null; duration: | { amount: number; unit: "minute" | "day"; } | null; id: string; isCollapsed: boolean; isDeleted: boolean; isUncompletable: boolean; labels: string[]; parentId: string | null; priority: number; projectId: string; responsibleUid: string | null; sectionId: string | null; updatedAt: Date | null; url: string; userId: string; }; eventName: "item:deleted"; initiator: { email: string; fullName: string; id: string; imageId: string | null; isPremium: boolean; }; triggeredAt: Date; userId: string; version: "1"; }