1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
3 import { AccountBlock, BlockStatus, HttpStatusCode, ResultList, ServerBlock } from '@shared/models'
4 import { AbstractCommand, OverrideCommandOptions } from '../shared'
6 type ListBlocklistOptions = OverrideCommandOptions & {
10 sort?: string // default -createdAt
15 export class BlocklistCommand extends AbstractCommand {
17 listMyAccountBlocklist (options: ListBlocklistOptions) {
18 const path = '/api/v1/users/me/blocklist/accounts'
20 return this.listBlocklist<AccountBlock>(options, path)
23 listMyServerBlocklist (options: ListBlocklistOptions) {
24 const path = '/api/v1/users/me/blocklist/servers'
26 return this.listBlocklist<ServerBlock>(options, path)
29 listServerAccountBlocklist (options: ListBlocklistOptions) {
30 const path = '/api/v1/server/blocklist/accounts'
32 return this.listBlocklist<AccountBlock>(options, path)
35 listServerServerBlocklist (options: ListBlocklistOptions) {
36 const path = '/api/v1/server/blocklist/servers'
38 return this.listBlocklist<ServerBlock>(options, path)
41 // ---------------------------------------------------------------------------
43 getStatus (options: OverrideCommandOptions & {
47 const { accounts, hosts } = options
49 const path = '/api/v1/blocklist/status'
51 return this.getRequestBody<BlockStatus>({
60 defaultExpectedStatus: HttpStatusCode.OK_200
64 // ---------------------------------------------------------------------------
66 addToMyBlocklist (options: OverrideCommandOptions & {
70 const { account, server } = options
73 ? '/api/v1/users/me/blocklist/accounts'
74 : '/api/v1/users/me/blocklist/servers'
76 return this.postBodyRequest({
85 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
89 addToServerBlocklist (options: OverrideCommandOptions & {
93 const { account, server } = options
96 ? '/api/v1/server/blocklist/accounts'
97 : '/api/v1/server/blocklist/servers'
99 return this.postBodyRequest({
104 accountName: account,
108 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
112 // ---------------------------------------------------------------------------
114 removeFromMyBlocklist (options: OverrideCommandOptions & {
118 const { account, server } = options
121 ? '/api/v1/users/me/blocklist/accounts/' + account
122 : '/api/v1/users/me/blocklist/servers/' + server
124 return this.deleteRequest({
129 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
133 removeFromServerBlocklist (options: OverrideCommandOptions & {
137 const { account, server } = options
140 ? '/api/v1/server/blocklist/accounts/' + account
141 : '/api/v1/server/blocklist/servers/' + server
143 return this.deleteRequest({
148 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
152 private listBlocklist <T> (options: ListBlocklistOptions, path: string) {
153 const { start, count, search, sort = '-createdAt' } = options
155 return this.getRequestBody<ResultList<T>>({
159 query: { start, count, sort, search },
161 defaultExpectedStatus: HttpStatusCode.OK_200