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 & {
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 getStatus (options: OverrideCommandOptions & {
44 const { accounts, hosts } = options
46 const path = '/api/v1/blocklist/status'
48 return this.getRequestBody<BlockStatus>({
57 defaultExpectedStatus: HttpStatusCode.OK_200
61 // ---------------------------------------------------------------------------
63 addToMyBlocklist (options: OverrideCommandOptions & {
67 const { account, server } = options
70 ? '/api/v1/users/me/blocklist/accounts'
71 : '/api/v1/users/me/blocklist/servers'
73 return this.postBodyRequest({
82 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
86 addToServerBlocklist (options: OverrideCommandOptions & {
90 const { account, server } = options
93 ? '/api/v1/server/blocklist/accounts'
94 : '/api/v1/server/blocklist/servers'
96 return this.postBodyRequest({
101 accountName: account,
105 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
109 // ---------------------------------------------------------------------------
111 removeFromMyBlocklist (options: OverrideCommandOptions & {
115 const { account, server } = options
118 ? '/api/v1/users/me/blocklist/accounts/' + account
119 : '/api/v1/users/me/blocklist/servers/' + server
121 return this.deleteRequest({
126 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
130 removeFromServerBlocklist (options: OverrideCommandOptions & {
134 const { account, server } = options
137 ? '/api/v1/server/blocklist/accounts/' + account
138 : '/api/v1/server/blocklist/servers/' + server
140 return this.deleteRequest({
145 defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
149 private listBlocklist <T> (options: ListBlocklistOptions, path: string) {
150 const { start, count, sort = '-createdAt' } = options
152 return this.getRequestBody<ResultList<T>>({
156 query: { start, count, sort },
158 defaultExpectedStatus: HttpStatusCode.OK_200