1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
3 import { HttpStatusCode } from '@shared/core-utils'
4 import { AccountBlock, ResultList, ServerBlock } from '@shared/models'
5 import { AbstractCommand, OverrideCommandOptions } from '../shared'
7 type ListBlocklistOptions = OverrideCommandOptions & {
10 sort: string // default -createdAt
13 export class BlocklistCommand extends AbstractCommand {
15 listMyAccountBlocklist (options: ListBlocklistOptions) {
16 const path = '/api/v1/users/me/blocklist/accounts'
18 return this.listBlocklist<AccountBlock>(options, path)
21 listMyServerBlocklist (options: ListBlocklistOptions) {
22 const path = '/api/v1/users/me/blocklist/servers'
24 return this.listBlocklist<ServerBlock>(options, path)
27 listServerAccountBlocklist (options: ListBlocklistOptions) {
28 const path = '/api/v1/server/blocklist/accounts'
30 return this.listBlocklist<AccountBlock>(options, path)
33 listServerServerBlocklist (options: ListBlocklistOptions) {
34 const path = '/api/v1/server/blocklist/servers'
36 return this.listBlocklist<ServerBlock>(options, path)
39 // ---------------------------------------------------------------------------
41 addToMyBlocklist (options: OverrideCommandOptions & {
45 const { account, server } = options
48 ? '/api/v1/users/me/blocklist/accounts'
49 : '/api/v1/users/me/blocklist/servers'
51 return this.postBodyRequest({
60 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
64 addToServerBlocklist (options: OverrideCommandOptions & {
68 const { account, server } = options
71 ? '/api/v1/server/blocklist/accounts'
72 : '/api/v1/server/blocklist/servers'
74 return this.postBodyRequest({
83 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
87 // ---------------------------------------------------------------------------
89 removeFromMyBlocklist (options: OverrideCommandOptions & {
93 const { account, server } = options
96 ? '/api/v1/users/me/blocklist/accounts/' + account
97 : '/api/v1/users/me/blocklist/servers/' + server
99 return this.deleteRequest({
104 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
108 removeFromServerBlocklist (options: OverrideCommandOptions & {
112 const { account, server } = options
115 ? '/api/v1/server/blocklist/accounts/' + account
116 : '/api/v1/server/blocklist/servers/' + server
118 return this.deleteRequest({
123 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
127 private listBlocklist <T> (options: ListBlocklistOptions, path: string) {
128 const { start, count, sort = '-createdAt' } = options
130 return this.getRequestBody<ResultList<T>>({
134 query: { start, count, sort },
136 defaultExpectedStatus: HttpStatusCode.OK_200