diff --git a/src/endpoints.ts b/src/endpoints.ts index f1f141e4d..b969db895 100644 --- a/src/endpoints.ts +++ b/src/endpoints.ts @@ -1,8 +1,105 @@ -import { Instance, User } from './types'; +import { ID, Instance, Note, OriginType, Page, ServerInfo, Stats, User, UserSorting } from './types'; type TODO = Record; +type ShowUserReq = { username: string; host?: string; } | { userId: ID; }; + export type Endpoints = { + // admin + + // announcements + 'announcements': { req: { limit?: number; withUnreads?: boolean; sinceId?: ID; untilId?: ID; }; res: TODO; }; + + // antennas + 'antennas/create': { req: TODO; res: TODO; }; + + // ap + + // app + + // auth + + // blocking + + // channnels + + // charts + + // clips + + // drive + 'drive': { req: null; res: { capacity: number; usage: number; }; }; + + // federation + + // following + + // gallery + + // games + + // get-online-users-count + + // hashtags + + // i 'i': { req: TODO; res: User; }; + + // messaging + + // meta 'meta': { req: { detail?: boolean; }; res: Instance; }; + + // miauth + + // mute + + // my + + // notes + 'notes': { req: { limit?: number; sinceId?: ID; untilId?: ID; }; res: Note[]; }; + 'notes/create': { req: TODO; res: { createdNote: Note }; }; + 'notes/delete': { req: { noteId: ID; }; res: null; }; + 'notes/show': { req: { noteId: ID; }; res: Note; }; + + // notifications + + // page-push + 'page-push': { req: { pageId: ID; event: string; var?: any; }; res: null; }; + + // pages + 'pages/create': { req: TODO; res: Page; }; + 'pages/delete': { req: { pageId: ID; }; res: null; }; + 'pages/featured': { req: null; res: Page[]; }; + 'pages/like': { req: { pageId: ID; }; res: null; }; + 'pages/show': { req: { pageId?: ID; name?: string; username?: string; }; res: Page; }; + 'pages/unlike': { req: { pageId: ID; }; res: null; }; + 'pages/update': { req: TODO; res: null; }; + + // ping + + // pinned-users + + // promo + + // request-reset-password + + // reset-password + 'reset-password': { req: { token: string; password: string; }; res: null; }; + + // room + + // stats + 'stats': { req: null; res: Stats; }; + + // server-info + 'server-info': { req: null; res: ServerInfo; }; + + // sw + + // username + + // users + 'users': { req: { limit?: number; offset?: number; sort?: UserSorting; origin?: OriginType; }; res: User[]; }; + 'users/show': { req: ShowUserReq; res: User; } | { req: { userIds: ID[]; }; res: User[]; }; }; diff --git a/src/types.ts b/src/types.ts index 7dd671d31..56f998dca 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -type ID = string; +export type ID = string; export type User = { id: ID; @@ -71,3 +71,53 @@ export type Instance = { imageUrl: string; }[]; }; + +export type ServerInfo = { + machine: string; + cpu: { + model: string; + cores: number; + }; + mem: { + total: number; + }; + fs: { + total: number; + used: number; + }; +}; + +export type Stats = { + notesCount: number; + originalNotesCount: number; + usersCount: number; + originalUsersCount: number; + instances: number; + driveUsageLocal: number; + driveUsageRemote: number; +}; + +export type Page = { + id: ID; + createdAt: Date; + updatedAt: Date; + userId: User['id']; + user: User; + content: Record[]; + variables: Record[]; + title: string; + name: string; + summary: string | null; + hideTitleWhenPinned: boolean; + alignCenter: boolean; + font: string; + script: string; + eyeCatchingImageId: DriveFile['id'] | null; + eyeCatchingImage: DriveFile | null; + attachedFiles: any; + likedCount: number; + isLiked?: boolean; +}; + +export type UserSorting = '+follower' | '-follower' | '+createdAt' | '-createdAt' | '+updatedAt' | '-updatedAt'; +export type OriginType = 'combined' | 'local' | 'remote';