diff --git a/src/interfaces/api/comment.ts b/src/interfaces/api/comment.ts index 2c37220..5f2f78c 100644 --- a/src/interfaces/api/comment.ts +++ b/src/interfaces/api/comment.ts @@ -11,6 +11,10 @@ export class CreateComment { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() parent_id: Option; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + language_id: Option; post_id: number; /** * An optional front end ID, to tell which is comment is coming back. @@ -27,8 +31,22 @@ export class CreateComment { } export class EditComment { - content: string; comment_id: number; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + content: Option; + /** + * "Distinguishes" a comment, or speak officially. Only doable by community mods or admins. + */ + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + distinguished: Option; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + language_id: Option; /** * An optional front end ID, to tell which is comment is coming back. */ diff --git a/src/interfaces/api/person.ts b/src/interfaces/api/person.ts index 147d62d..7d2b2e4 100644 --- a/src/interfaces/api/person.ts +++ b/src/interfaces/api/person.ts @@ -136,7 +136,7 @@ export class SaveUserSettings { @Transform(({ value }) => toOption(value), { toClassOnly: true }) @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() - lang: Option; + interface_language: Option; @Transform(({ value }) => toOption(value), { toClassOnly: true }) @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() @@ -189,6 +189,10 @@ export class SaveUserSettings { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() show_new_post_notifs: Option; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + discussion_languages: Option; auth: string; constructor(init: SaveUserSettings) { diff --git a/src/interfaces/api/post.ts b/src/interfaces/api/post.ts index 48abf55..fbbf2bb 100644 --- a/src/interfaces/api/post.ts +++ b/src/interfaces/api/post.ts @@ -24,6 +24,10 @@ export class CreatePost { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() nsfw: Option; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + language_id: Option; community_id: number; @Transform(({ value }) => toOption(value), { toClassOnly: true }) @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @@ -149,6 +153,10 @@ export class EditPost { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() nsfw: Option; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + language_id: Option; auth: string; constructor(init: EditPost) { diff --git a/src/interfaces/api/site.ts b/src/interfaces/api/site.ts index 9b75573..ba7c10e 100644 --- a/src/interfaces/api/site.ts +++ b/src/interfaces/api/site.ts @@ -2,7 +2,8 @@ import { Option } from "@sniptt/monads"; import { Expose, Transform, Type } from "class-transformer"; import "reflect-metadata"; import { toOption, toUndefined } from "../../utils"; -import { ListingType, SearchType, SortType } from "../others"; +import { ListingType, ModlogActionType, SearchType, SortType } from "../others"; +import { Language } from "../source"; import { AdminPurgeCommentView, AdminPurgeCommunityView, @@ -117,7 +118,11 @@ export class GetModlog { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() auth: Option; - + type_: ModlogActionType; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + other_person_id: Option; constructor(init: GetModlog) { Object.assign(this, init); } @@ -216,8 +221,8 @@ export class CreateSite { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() application_email_admins: Option; + hide_modlog_mod_names: Option; auth: string; - constructor(init: CreateSite) { Object.assign(this, init); } @@ -292,6 +297,7 @@ export class EditSite { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() application_email_admins: Option; + hide_modlog_mod_names: Option; auth: string; constructor(init: EditSite) { @@ -341,6 +347,8 @@ export class GetSiteResponse { @Expose() @Type(() => FederatedInstances) federated_instances: Option; + @Type(() => Language) + all_languages: Language[]; } /** @@ -357,6 +365,8 @@ export class MyUserInfo { community_blocks: CommunityBlockView[]; @Type(() => PersonBlockView) person_blocks: PersonBlockView[]; + @Type(() => Language) + discussion_languages: Language[]; } export class LeaveAdmin { diff --git a/src/interfaces/others.ts b/src/interfaces/others.ts index 58d07f9..ee83480 100644 --- a/src/interfaces/others.ts +++ b/src/interfaces/others.ts @@ -182,6 +182,28 @@ export enum SearchType { Url = "Url", } +/** + * Mod log action types + */ +export enum ModlogActionType { + All = "All", + ModRemovePost = "ModRemovePost", + ModLockPost = "ModLockPost", + ModStickyPost = "ModStickyPost", + ModRemoveComment = "ModRemoveComment", + ModRemoveCommunity = "ModRemoveCommunity", + ModBanFromCommunity = "ModBanFromCommunity", + ModAddCommunity = "ModAddCommunity", + ModTransferCommunity = "ModTransferCommunity", + ModAdd = "ModAdd", + ModBan = "ModBan", + ModHideCommunity = "ModHideCommunity", + AdminPurgePerson = "AdminPurgePerson", + AdminPurgeCommunity = "AdminPurgeCommunity", + AdminPurgePost = "AdminPurgePost", + AdminPurgeComment = "AdminPurgeComment", +} + /** * Different Subscribed states */ diff --git a/src/interfaces/source.ts b/src/interfaces/source.ts index b38743f..68ddd1e 100644 --- a/src/interfaces/source.ts +++ b/src/interfaces/source.ts @@ -13,7 +13,7 @@ export class LocalUserSettings { theme: string; default_sort_type: number; default_listing_type: number; - lang: string; + interface_language: string; show_avatars: boolean; send_notifications_to_email: boolean; show_bot_accounts: boolean; @@ -112,6 +112,10 @@ export class Site { @Expose() legal_information: Option; application_email_admins: boolean; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() + hide_modlog_mod_names: Option; } export class PrivateMessage { @@ -190,13 +194,14 @@ export class Post { @Transform(({ value }) => toOption(value), { toClassOnly: true }) @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() - embed_html: Option; + embed_video_url: Option; @Transform(({ value }) => toOption(value), { toClassOnly: true }) @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() thumbnail_url: Option; ap_id: string; local: boolean; + language_id: number; } export class PasswordResetRequest { @@ -455,6 +460,8 @@ export class Comment { ap_id: string; local: boolean; path: string; + distinguished: boolean; + language_id: number; } export class PersonMention { @@ -487,3 +494,9 @@ export class RegistrationApplication { deny_reason: Option; published: string; } + +export class Language { + id: number; + code: string; + name: string; +} diff --git a/src/interfaces/views.ts b/src/interfaces/views.ts index 159f220..b3646fe 100644 --- a/src/interfaces/views.ts +++ b/src/interfaces/views.ts @@ -109,6 +109,7 @@ export class PostView { @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) @Expose() my_vote: Option; + unread_comments: number; } export class PostReportView { @@ -208,8 +209,11 @@ export class CommentReportView { export class ModAddCommunityView { @Type(() => ModAddCommunity) mod_add_community: ModAddCommunity; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => CommunitySafe) community: CommunitySafe; @Type(() => PersonSafe) @@ -219,8 +223,11 @@ export class ModAddCommunityView { export class ModTransferCommunityView { @Type(() => ModTransferCommunity) mod_transfer_community: ModTransferCommunity; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => CommunitySafe) community: CommunitySafe; @Type(() => PersonSafe) @@ -230,8 +237,11 @@ export class ModTransferCommunityView { export class ModAddView { @Type(() => ModAdd) mod_add: ModAdd; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => PersonSafe) modded_person: PersonSafe; } @@ -239,8 +249,11 @@ export class ModAddView { export class ModBanFromCommunityView { @Type(() => ModBanFromCommunity) mod_ban_from_community: ModBanFromCommunity; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => CommunitySafe) community: CommunitySafe; @Type(() => PersonSafe) @@ -250,8 +263,11 @@ export class ModBanFromCommunityView { export class ModBanView { @Type(() => ModBan) mod_ban: ModBan; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => PersonSafe) banned_person: PersonSafe; } @@ -259,8 +275,11 @@ export class ModBanView { export class ModLockPostView { @Type(() => ModLockPost) mod_lock_post: ModLockPost; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => Post) post: Post; @Type(() => CommunitySafe) @@ -270,8 +289,11 @@ export class ModLockPostView { export class ModRemoveCommentView { @Type(() => ModRemoveComment) mod_remove_comment: ModRemoveComment; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => Comment) comment: Comment; @Type(() => PersonSafe) @@ -285,8 +307,11 @@ export class ModRemoveCommentView { export class ModRemoveCommunityView { @Type(() => ModRemoveCommunity) mod_remove_community: ModRemoveCommunity; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => CommunitySafe) community: CommunitySafe; } @@ -294,8 +319,11 @@ export class ModRemoveCommunityView { export class ModRemovePostView { @Type(() => ModRemovePost) mod_remove_post: ModRemovePost; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => Post) post: Post; @Type(() => CommunitySafe) @@ -305,8 +333,11 @@ export class ModRemovePostView { export class ModStickyPostView { @Type(() => ModStickyPost) mod_sticky_post: ModStickyPost; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - moderator: PersonSafe; + moderator: Option; @Type(() => Post) post: Post; @Type(() => CommunitySafe) @@ -316,22 +347,31 @@ export class ModStickyPostView { export class AdminPurgeCommunityView { @Type(() => AdminPurgeCommunity) admin_purge_community: AdminPurgeCommunity; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - admin: PersonSafe; + admin: Option; } export class AdminPurgePersonView { @Type(() => AdminPurgePerson) admin_purge_person: AdminPurgePerson; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - admin: PersonSafe; + admin: Option; } export class AdminPurgePostView { @Type(() => AdminPurgePost) admin_purge_post: AdminPurgePost; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - admin: PersonSafe; + admin: Option; @Type(() => CommunitySafe) community: CommunitySafe; } @@ -339,8 +379,11 @@ export class AdminPurgePostView { export class AdminPurgeCommentView { @Type(() => AdminPurgeComment) admin_purge_comment: AdminPurgeComment; + @Transform(({ value }) => toOption(value), { toClassOnly: true }) + @Transform(({ value }) => toUndefined(value), { toPlainOnly: true }) + @Expose() @Type(() => PersonSafe) - admin: PersonSafe; + admin: Option; @Type(() => Post) post: Post; }