1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
3 import { AccountBlock, HttpStatusCode, ResultList, ServerBlock } from '@shared/models'
4 import { AbstractCommand, OverrideCommandOptions } from '../shared'
6 type ListBlocklistOptions = OverrideCommandOptions & {
9 sort: string // default -createdAt
12 export class BlocklistCommand extends AbstractCommand {
14 listMyAccountBlocklist (options: ListBlocklistOptions) {
15 const path = '/api/v1/users/me/blocklist/accounts'
17 return this.listBlocklist<AccountBlock>(options, path)
20 listMyServerBlocklist (options: ListBlocklistOptions) {
21 const path = '/api/v1/users/me/blocklist/servers'
23 return this.listBlocklist<ServerBlock>(options, path)
26 listServerAccountBlocklist (options: ListBlocklistOptions) {
27 const path = '/api/v1/server/blocklist/accounts'
29 return this.listBlocklist<AccountBlock>(options, path)
32 listServerServerBlocklist (options: ListBlocklistOptions) {
33 const path = '/api/v1/server/blocklist/servers'
35 return this.listBlocklist<ServerBlock>(options, path)
38 // ---------------------------------------------------------------------------
40 addToMyBlocklist (options: OverrideCommandOptions & {
44 const { account, server } = options
47 ? '/api/v1/users/me/blocklist/accounts'
48 : '/api/v1/users/me/blocklist/servers'
50 return this.postBodyRequest({
59 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
63 addToServerBlocklist (options: OverrideCommandOptions & {
67 const { account, server } = options
70 ? '/api/v1/server/blocklist/accounts'
71 : '/api/v1/server/blocklist/servers'
73 return this.postBodyRequest({
82 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
86 // ---------------------------------------------------------------------------
88 removeFromMyBlocklist (options: OverrideCommandOptions & {
92 const { account, server } = options
95 ? '/api/v1/users/me/blocklist/accounts/' + account
96 : '/api/v1/users/me/blocklist/servers/' + server
98 return this.deleteRequest({
103 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
107 removeFromServerBlocklist (options: OverrideCommandOptions & {
111 const { account, server } = options
114 ? '/api/v1/server/blocklist/accounts/' + account
115 : '/api/v1/server/blocklist/servers/' + server
117 return this.deleteRequest({
122 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
126 private listBlocklist <T> (options: ListBlocklistOptions, path: string) {
127 const { start, count, sort = '-createdAt' } = options
129 return this.getRequestBody<ResultList<T>>({
133 query: { start, count, sort },
135 defaultExpectedStatus: HttpStatusCode.OK_200