export enum UserOperation {
- Login, Register, CreateCommunity, CreatePost, ListCommunities, ListCategories, GetPost, GetCommunity, CreateComment, EditComment, SaveComment, CreateCommentLike, GetPosts, CreatePostLike, EditPost, SavePost, EditCommunity, FollowCommunity, GetFollowedCommunities, GetUserDetails, GetReplies, GetModlog, BanFromCommunity, AddModToCommunity, CreateSite, EditSite, GetSite, AddAdmin, BanUser, Search, MarkAllAsRead, SaveUserSettings
+ Login,
+ Register,
+ CreateCommunity,
+ CreatePost,
+ ListCommunities,
+ ListCategories,
+ GetPost,
+ GetCommunity,
+ CreateComment,
+ EditComment,
+ SaveComment,
+ CreateCommentLike,
+ GetPosts,
+ CreatePostLike,
+ EditPost,
+ SavePost,
+ EditCommunity,
+ FollowCommunity,
+ GetFollowedCommunities,
+ GetUserDetails,
+ GetReplies,
+ GetUserMentions,
+ EditUserMention,
+ GetModlog,
+ BanFromCommunity,
+ AddModToCommunity,
+ CreateSite,
+ EditSite,
+ GetSite,
+ AddAdmin,
+ BanUser,
+ Search,
+ MarkAllAsRead,
+ SaveUserSettings,
+ TransferCommunity,
+ TransferSite,
+ DeleteAccount,
+ PasswordReset,
+ PasswordChange,
+ CreatePrivateMessage,
+ EditPrivateMessage,
+ GetPrivateMessages,
+ UserJoin,
+ GetComments,
+ GetSiteConfig,
+ SaveSiteConfig,
}
export enum CommentSortType {
- Hot, Top, New
+ Hot,
+ Top,
+ New,
+ Old,
}
export enum ListingType {
- All, Subscribed, Community
+ All,
+ Subscribed,
+ Community,
+}
+
+export enum DataType {
+ Post,
+ Comment,
}
export enum SortType {
- Hot, New, TopDay, TopWeek, TopMonth, TopYear, TopAll
+ Hot,
+ New,
+ TopDay,
+ TopWeek,
+ TopMonth,
+ TopYear,
+ TopAll,
}
export enum SearchType {
- All, Comments, Posts, Communities, Users, Url
+ All,
+ Comments,
+ Posts,
+ Communities,
+ Users,
+ Url,
}
export interface User {
iss: string;
username: string;
show_nsfw: boolean;
+ theme: string;
+ default_sort_type: SortType;
+ default_listing_type: ListingType;
+ lang: string;
+ avatar?: string;
+ show_avatars: boolean;
+ unreadCount?: number;
}
export interface UserView {
id: number;
+ actor_id: string;
name: string;
- fedi_name: string;
+ avatar?: string;
+ email?: string;
+ matrix_user_id?: string;
+ bio?: string;
+ local: boolean;
published: string;
number_of_posts: number;
post_score: number;
number_of_comments: number;
comment_score: number;
+ banned: boolean;
+ show_avatars: boolean;
+ send_notifications_to_email: boolean;
}
export interface CommunityUser {
id: number;
user_id: number;
+ user_actor_id: string;
+ user_local: boolean;
user_name: string;
+ avatar?: string;
community_id: number;
+ community_actor_id: string;
+ community_local: boolean;
community_name: string;
published: string;
}
export interface Community {
id: number;
+ actor_id: string;
+ local: boolean;
name: string;
title: string;
description?: string;
nsfw: boolean;
published: string;
updated?: string;
+ creator_actor_id: string;
+ creator_local: boolean;
+ last_refreshed_at: string;
creator_name: string;
+ creator_avatar?: string;
category_name: string;
number_of_subscribers: number;
number_of_posts: number;
removed: boolean;
deleted: boolean;
locked: boolean;
+ stickied: boolean;
+ embed_title?: string;
+ embed_description?: string;
+ embed_html?: string;
+ thumbnail_url?: string;
+ ap_id: string;
+ local: boolean;
nsfw: boolean;
+ banned: boolean;
+ banned_from_community: boolean;
published: string;
updated?: string;
+ creator_actor_id: string;
+ creator_local: boolean;
creator_name: string;
+ creator_avatar?: string;
+ community_actor_id: string;
+ community_local: boolean;
community_name: string;
community_removed: boolean;
community_deleted: boolean;
upvotes: number;
downvotes: number;
hot_rank: number;
+ newest_activity_time: string;
user_id?: number;
my_vote?: number;
subscribed?: boolean;
read?: boolean;
saved?: boolean;
+ duplicates?: Array<Post>;
}
export interface Comment {
id: number;
+ ap_id: string;
+ local: boolean;
creator_id: number;
- post_id: number,
+ post_id: number;
parent_id?: number;
content: string;
removed: boolean;
read: boolean;
published: string;
updated?: string;
- community_id: number,
+ community_id: number;
+ community_actor_id: string;
+ community_local: boolean;
+ community_name: string;
banned: boolean;
banned_from_community: boolean;
+ creator_actor_id: string;
+ creator_local: boolean;
creator_name: string;
+ creator_avatar?: string;
score: number;
upvotes: number;
downvotes: number;
+ hot_rank: number;
user_id?: number;
my_vote?: number;
+ subscribed?: number;
saved?: boolean;
+ user_mention_id?: number; // For mention type
+ recipient_id?: number;
+ recipient_actor_id?: string;
+ recipient_local?: boolean;
+ depth?: number;
}
export interface Category {
number_of_users: number;
number_of_posts: number;
number_of_comments: number;
+ number_of_communities: number;
+ enable_downvotes: boolean;
+ open_registration: boolean;
+ enable_nsfw: boolean;
+}
+
+export interface PrivateMessage {
+ id: number;
+ creator_id: number;
+ recipient_id: number;
+ content: string;
+ deleted: boolean;
+ read: boolean;
+ published: string;
+ updated?: string;
+ creator_name: string;
+ creator_avatar?: string;
+ recipient_name: string;
+ recipient_avatar?: string;
+}
+
+export enum BanType {
+ Community,
+ Site,
}
export interface FollowCommunityForm {
auth?: string;
}
+export interface GetFollowedCommunitiesForm {
+ auth: string;
+}
+
export interface GetFollowedCommunitiesResponse {
- op: string;
communities: Array<CommunityUser>;
}
}
export interface UserDetailsResponse {
- op: string;
user: UserView;
follows: Array<CommunityUser>;
moderates: Array<CommunityUser>;
comments: Array<Comment>;
posts: Array<Post>;
+ admins: Array<UserView>;
}
export interface GetRepliesForm {
- sort: string; // TODO figure this one out
+ sort: string;
page?: number;
limit?: number;
unread_only: boolean;
}
export interface GetRepliesResponse {
- op: string;
replies: Array<Comment>;
}
+export interface GetUserMentionsForm {
+ sort: string;
+ page?: number;
+ limit?: number;
+ unread_only: boolean;
+ auth?: string;
+}
+
+export interface GetUserMentionsResponse {
+ mentions: Array<Comment>;
+}
+
+export interface EditUserMentionForm {
+ user_mention_id: number;
+ read?: boolean;
+ auth?: string;
+}
+
+export interface UserMentionResponse {
+ mention: Comment;
+}
+
export interface BanFromCommunityForm {
community_id: number;
user_id: number;
ban: boolean;
- reason?: string,
- expires?: number,
+ reason?: string;
+ expires?: number;
auth?: string;
}
export interface BanFromCommunityResponse {
- op: string;
- user: UserView,
- banned: boolean,
+ user: UserView;
+ banned: boolean;
}
export interface AddModToCommunityForm {
auth?: string;
}
+export interface TransferCommunityForm {
+ community_id: number;
+ user_id: number;
+ auth?: string;
+}
+
+export interface TransferSiteForm {
+ user_id: number;
+ auth?: string;
+}
+
export interface AddModToCommunityResponse {
- op: string;
moderators: Array<CommunityUser>;
}
}
export interface GetModlogResponse {
- op: string;
- removed_posts: Array<ModRemovePost>,
- locked_posts: Array<ModLockPost>,
- removed_comments: Array<ModRemoveComment>,
- removed_communities: Array<ModRemoveCommunity>,
- banned_from_community: Array<ModBanFromCommunity>,
- banned: Array<ModBan>,
- added_to_community: Array<ModAddCommunity>,
- added: Array<ModAdd>,
+ removed_posts: Array<ModRemovePost>;
+ locked_posts: Array<ModLockPost>;
+ stickied_posts: Array<ModStickyPost>;
+ removed_comments: Array<ModRemoveComment>;
+ removed_communities: Array<ModRemoveCommunity>;
+ banned_from_community: Array<ModBanFromCommunity>;
+ banned: Array<ModBan>;
+ added_to_community: Array<ModAddCommunity>;
+ added: Array<ModAdd>;
}
export interface ModRemovePost {
post_id: number;
reason?: string;
removed?: boolean;
- when_: string
+ when_: string;
mod_user_name: string;
post_name: string;
community_id: number;
}
export interface ModLockPost {
- id: number,
- mod_user_id: number,
- post_id: number,
- locked?: boolean,
- when_: string,
- mod_user_name: string,
- post_name: string,
- community_id: number,
- community_name: string,
+ id: number;
+ mod_user_id: number;
+ post_id: number;
+ locked?: boolean;
+ when_: string;
+ mod_user_name: string;
+ post_name: string;
+ community_id: number;
+ community_name: string;
+}
+
+export interface ModStickyPost {
+ id: number;
+ mod_user_id: number;
+ post_id: number;
+ stickied?: boolean;
+ when_: string;
+ mod_user_name: string;
+ post_name: string;
+ community_id: number;
+ community_name: string;
}
export interface ModRemoveComment {
- id: number,
- mod_user_id: number,
- comment_id: number,
- reason?: string,
- removed?: boolean,
- when_: string,
- mod_user_name: string,
- comment_user_id: number,
- comment_user_name: string,
- comment_content: string,
- post_id: number,
- post_name: string,
- community_id: number,
- community_name: string,
+ id: number;
+ mod_user_id: number;
+ comment_id: number;
+ reason?: string;
+ removed?: boolean;
+ when_: string;
+ mod_user_name: string;
+ comment_user_id: number;
+ comment_user_name: string;
+ comment_content: string;
+ post_id: number;
+ post_name: string;
+ community_id: number;
+ community_name: string;
}
export interface ModRemoveCommunity {
- id: number,
- mod_user_id: number,
- community_id: number,
- reason?: string,
- removed?: boolean,
- expires?: number,
- when_: string,
- mod_user_name: string,
- community_name: string,
+ id: number;
+ mod_user_id: number;
+ community_id: number;
+ reason?: string;
+ removed?: boolean;
+ expires?: number;
+ when_: string;
+ mod_user_name: string;
+ community_name: string;
}
export interface ModBanFromCommunity {
- id: number,
- mod_user_id: number,
- other_user_id: number,
- community_id: number,
- reason?: string,
- banned?: boolean,
- expires?: number,
- when_: string,
- mod_user_name: string,
- other_user_name: string,
- community_name: string,
+ id: number;
+ mod_user_id: number;
+ other_user_id: number;
+ community_id: number;
+ reason?: string;
+ banned?: boolean;
+ expires?: number;
+ when_: string;
+ mod_user_name: string;
+ other_user_name: string;
+ community_name: string;
}
export interface ModBan {
- id: number,
- mod_user_id: number,
- other_user_id: number,
- reason?: string,
- banned?: boolean,
- expires?: number,
- when_: string,
- mod_user_name: string,
- other_user_name: string,
+ id: number;
+ mod_user_id: number;
+ other_user_id: number;
+ reason?: string;
+ banned?: boolean;
+ expires?: number;
+ when_: string;
+ mod_user_name: string;
+ other_user_name: string;
}
export interface ModAddCommunity {
- id: number,
- mod_user_id: number,
- other_user_id: number,
- community_id: number,
- removed?: boolean,
- when_: string,
- mod_user_name: string,
- other_user_name: string,
- community_name: string,
+ id: number;
+ mod_user_id: number;
+ other_user_id: number;
+ community_id: number;
+ removed?: boolean;
+ when_: string;
+ mod_user_name: string;
+ other_user_name: string;
+ community_name: string;
}
export interface ModAdd {
- id: number,
- mod_user_id: number,
- other_user_id: number,
- removed?: boolean,
- when_: string,
- mod_user_name: string,
- other_user_name: string,
+ id: number;
+ mod_user_id: number;
+ other_user_id: number;
+ removed?: boolean;
+ when_: string;
+ mod_user_name: string;
+ other_user_name: string;
}
export interface LoginForm {
}
export interface LoginResponse {
- op: string;
jwt: string;
}
export interface UserSettingsForm {
show_nsfw: boolean;
+ theme: string;
+ default_sort_type: SortType;
+ default_listing_type: ListingType;
+ lang: string;
+ avatar?: string;
+ email?: string;
+ matrix_user_id?: string;
+ new_password?: string;
+ new_password_verify?: string;
+ old_password?: string;
+ show_avatars: boolean;
+ send_notifications_to_email: boolean;
auth: string;
}
export interface CommunityForm {
name: string;
title: string;
- description?: string,
- category_id: number,
+ description?: string;
+ category_id: number;
edit_id?: number;
removed?: boolean;
deleted?: boolean;
auth?: string;
}
+export interface GetCommunityForm {
+ id?: number;
+ name?: string;
+ auth?: string;
+}
+
export interface GetCommunityResponse {
- op: string;
community: Community;
moderators: Array<CommunityUser>;
admins: Array<UserView>;
+ online: number;
}
-
export interface CommunityResponse {
- op: string;
community: Community;
}
}
export interface ListCommunitiesResponse {
- op: string;
communities: Array<Community>;
}
export interface ListCategoriesResponse {
- op: string;
categories: Array<Category>;
}
deleted?: boolean;
nsfw: boolean;
locked?: boolean;
+ stickied?: boolean;
reason?: string;
auth: string;
}
+export interface PostFormParams {
+ name: string;
+ url?: string;
+ body?: string;
+ community?: string;
+}
+
+export interface GetPostForm {
+ id: number;
+ auth?: string;
+}
+
export interface GetPostResponse {
- op: string;
post: Post;
comments: Array<Comment>;
community: Community;
moderators: Array<CommunityUser>;
admins: Array<UserView>;
+ online: number;
}
export interface SavePostForm {
}
export interface PostResponse {
- op: string;
post: Post;
}
}
export interface CommentResponse {
- op: string;
comment: Comment;
+ recipient_ids: Array<number>;
}
export interface CommentLikeForm {
}
export interface GetPostsResponse {
- op: string;
posts: Array<Post>;
}
+export interface GetCommentsForm {
+ type_: string;
+ sort: string;
+ page?: number;
+ limit: number;
+ community_id?: number;
+ auth?: string;
+}
+
+export interface GetCommentsResponse {
+ comments: Array<Comment>;
+}
+
export interface CreatePostLikeForm {
post_id: number;
score: number;
auth?: string;
}
-export interface CreatePostLikeResponse {
- op: string;
- post: Post;
-}
-
export interface SiteForm {
name: string;
- description?: string,
- removed?: boolean;
- reason?: string;
- expires?: number;
+ description?: string;
+ enable_downvotes: boolean;
+ open_registration: boolean;
+ enable_nsfw: boolean;
+ auth?: string;
+}
+
+export interface GetSiteConfig {
+ auth?: string;
+}
+
+export interface GetSiteConfigResponse {
+ config_hjson: string;
+}
+
+export interface SiteConfigForm {
+ config_hjson: string;
auth?: string;
}
export interface GetSiteResponse {
- op: string;
site: Site;
admins: Array<UserView>;
banned: Array<UserView>;
+ online: number;
}
-
export interface SiteResponse {
- op: string;
site: Site;
}
export interface BanUserForm {
user_id: number;
ban: boolean;
- reason?: string,
- expires?: number,
+ reason?: string;
+ expires?: number;
auth?: string;
}
export interface BanUserResponse {
- op: string;
- user: UserView,
- banned: boolean,
+ user: UserView;
+ banned: boolean;
}
export interface AddAdminForm {
}
export interface AddAdminResponse {
- op: string;
admins: Array<UserView>;
}
sort: string;
page?: number;
limit?: number;
+ auth?: string;
}
export interface SearchResponse {
- op: string;
type_: string;
posts?: Array<Post>;
comments?: Array<Comment>;
- communities: Array<Community>;
+ communities: Array<Community>;
users: Array<UserView>;
}
+
+export interface DeleteAccountForm {
+ password: string;
+}
+
+export interface PasswordResetForm {
+ email: string;
+}
+
+// export interface PasswordResetResponse {
+// }
+
+export interface PasswordChangeForm {
+ token: string;
+ password: string;
+ password_verify: string;
+}
+
+export interface PrivateMessageForm {
+ content: string;
+ recipient_id: number;
+ auth?: string;
+}
+
+export interface PrivateMessageFormParams {
+ recipient_id: number;
+}
+
+export interface EditPrivateMessageForm {
+ edit_id: number;
+ content?: string;
+ deleted?: boolean;
+ read?: boolean;
+ auth?: string;
+}
+
+export interface GetPrivateMessagesForm {
+ unread_only: boolean;
+ page?: number;
+ limit?: number;
+ auth?: string;
+}
+
+export interface PrivateMessagesResponse {
+ messages: Array<PrivateMessage>;
+}
+
+export interface PrivateMessageResponse {
+ message: PrivateMessage;
+}
+
+export interface UserJoinForm {
+ auth: string;
+}
+
+export interface UserJoinResponse {
+ user_id: number;
+}
+
+export type MessageType =
+ | EditPrivateMessageForm
+ | LoginForm
+ | RegisterForm
+ | CommunityForm
+ | FollowCommunityForm
+ | ListCommunitiesForm
+ | GetFollowedCommunitiesForm
+ | PostForm
+ | GetPostForm
+ | GetPostsForm
+ | GetCommunityForm
+ | CommentForm
+ | CommentLikeForm
+ | SaveCommentForm
+ | CreatePostLikeForm
+ | BanFromCommunityForm
+ | AddAdminForm
+ | AddModToCommunityForm
+ | TransferCommunityForm
+ | TransferSiteForm
+ | SaveCommentForm
+ | BanUserForm
+ | AddAdminForm
+ | GetUserDetailsForm
+ | GetRepliesForm
+ | GetUserMentionsForm
+ | EditUserMentionForm
+ | GetModlogForm
+ | SiteForm
+ | SearchForm
+ | UserSettingsForm
+ | DeleteAccountForm
+ | PasswordResetForm
+ | PasswordChangeForm
+ | PrivateMessageForm
+ | EditPrivateMessageForm
+ | GetPrivateMessagesForm
+ | SiteConfigForm;
+
+type ResponseType =
+ | SiteResponse
+ | GetFollowedCommunitiesResponse
+ | ListCommunitiesResponse
+ | GetPostsResponse
+ | PostResponse
+ | GetRepliesResponse
+ | GetUserMentionsResponse
+ | ListCategoriesResponse
+ | CommunityResponse
+ | CommentResponse
+ | UserMentionResponse
+ | LoginResponse
+ | GetModlogResponse
+ | SearchResponse
+ | BanFromCommunityResponse
+ | AddModToCommunityResponse
+ | BanUserResponse
+ | AddAdminResponse
+ | PrivateMessageResponse
+ | PrivateMessagesResponse
+ | GetSiteConfigResponse;
+
+export interface WebSocketResponse {
+ op: UserOperation;
+ data: ResponseType;
+}
+
+export interface WebSocketJsonResponse {
+ op?: string;
+ data?: ResponseType;
+ error?: string;
+ reconnect?: boolean;
+}