Files
outline/server/types.ts
Tom Moor 15b1069bcc chore: Move to Typescript (#2783)
This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously.

closes #1282
2021-11-29 06:40:55 -08:00

254 lines
5.2 KiB
TypeScript

import { Context } from "koa";
import { User } from "./models";
export type ContextWithState = Context & {
state: {
// @ts-expect-error ts-migrate(2749) FIXME: 'User' refers to a value, but is being used as a t... Remove this comment to see the full error message
user: User;
token: string;
authType: "app" | "api";
};
};
export type UserEvent =
| {
name: "users.create" // eslint-disable-line
| "users.signin"
| "users.update"
| "users.suspend"
| "users.activate"
| "users.delete";
userId: string;
teamId: string;
actorId: string;
ip: string;
}
| {
name: "users.invite";
teamId: string;
actorId: string;
data: {
email: string;
name: string;
};
ip: string;
};
export type DocumentEvent =
| {
name: "documents.create" // eslint-disable-line
| "documents.publish"
| "documents.delete"
| "documents.permanent_delete"
| "documents.pin"
| "documents.unpin"
| "documents.archive"
| "documents.unarchive"
| "documents.restore"
| "documents.star"
| "documents.unstar";
documentId: string;
collectionId: string;
teamId: string;
actorId: string;
ip: string;
data: {
title: string;
source?: "import";
};
}
| {
name: "documents.move";
documentId: string;
collectionId: string;
teamId: string;
actorId: string;
data: {
collectionIds: string[];
documentIds: string[];
};
ip: string;
}
| {
name: "documents.update" // eslint-disable-line
| "documents.update.delayed"
| "documents.update.debounced";
documentId: string;
collectionId: string;
createdAt: string;
teamId: string;
actorId: string;
data: {
title: string;
autosave: boolean;
done: boolean;
};
ip: string;
}
| {
name: "documents.title_change";
documentId: string;
collectionId: string;
createdAt: string;
teamId: string;
actorId: string;
data: {
title: string;
previousTitle: string;
};
ip: string;
};
export type RevisionEvent = {
name: "revisions.create";
documentId: string;
collectionId: string;
teamId: string;
};
export type CollectionImportEvent = {
name: "collections.import";
modelId: string;
teamId: string;
actorId: string;
data: {
type: "outline";
};
ip: string;
};
export type CollectionExportEvent = {
name: "collections.export";
teamId: string;
actorId: string;
collectionId: string;
modelId: string;
};
export type CollectionExportAllEvent = {
name: "collections.export_all";
teamId: string;
actorId: string;
modelId: string;
};
export type FileOperationEvent = {
name: "fileOperations.update" | "fileOperation.delete";
teamId: string;
actorId: string;
data: {
type: string;
state: string;
id: string;
size: number;
createdAt: string;
collectionId: string;
};
};
export type CollectionEvent =
| {
name: "collections.create" // eslint-disable-line
| "collections.update"
| "collections.delete";
collectionId: string;
teamId: string;
actorId: string;
data: {
name: string;
};
ip: string;
}
| {
name: "collections.add_user" | "collections.remove_user";
userId: string;
collectionId: string;
teamId: string;
actorId: string;
ip: string;
}
| {
name: "collections.add_group" | "collections.remove_group";
collectionId: string;
teamId: string;
actorId: string;
data: {
name: string;
groupId: string;
};
ip: string;
}
| {
name: "collections.move";
collectionId: string;
teamId: string;
actorId: string;
data: {
index: string;
};
ip: string;
}
| {
name: "collections.permission_changed";
collectionId: string;
teamId: string;
actorId: string;
data: {
privacyChanged: boolean;
sharingChanged: boolean;
};
ip: string;
}
| CollectionExportEvent;
export type GroupEvent =
| {
name: "groups.create" | "groups.delete" | "groups.update";
actorId: string;
modelId: string;
teamId: string;
data: {
name: string;
};
ip: string;
}
| {
name: "groups.add_user" | "groups.remove_user";
actorId: string;
userId: string;
modelId: string;
teamId: string;
data: {
name: string;
};
ip: string;
};
export type IntegrationEvent = {
name: "integrations.create" | "integrations.update";
modelId: string;
teamId: string;
actorId: string;
ip: string;
};
export type TeamEvent = {
name: "teams.update";
teamId: string;
actorId: string;
data: Record<string, any>;
ip: string;
};
export type Event =
| UserEvent
| DocumentEvent
| CollectionEvent
| CollectionImportEvent
| CollectionExportAllEvent
| FileOperationEvent
| IntegrationEvent
| GroupEvent
| RevisionEvent
| TeamEvent;