import { AccountBlock , BlockStatus , HttpStatusCode , ResultList , ServerBlock } from '@shared/models' ; import { AbstractCommand , OverrideCommandOptions } from '../shared' ; type ListBlocklistOptions = OverrideCommandOptions & { start : number ; count : number ; sort : string ; } ; export class BlocklistCommand extends AbstractCommand { listMyAccountBlocklist ( options ) { const path = '/api/v1/users/me/blocklist/accounts' ; return this . listBlocklist < AccountBlock > ( options , path ) ; } listMyServerBlocklist ( options ) { const path = '/api/v1/users/me/blocklist/servers' ; return this . listBlocklist < ServerBlock > ( options , path ) ; } listServerAccountBlocklist ( options ) { const path = '/api/v1/server/blocklist/accounts' ; return this . listBlocklist < AccountBlock > ( options , path ) ; } listServerServerBlocklist ( options ) { const path = '/api/v1/server/blocklist/servers' ; return this . listBlocklist < ServerBlock > ( options , path ) ; } getStatus ( options ) { const { accounts , hosts } = options ; const path = '/api/v1/blocklist/status' ; return this . getRequestBody < BlockStatus > ( { ... options , path , query : { accounts , hosts } , implicitToken : false , defaultExpectedStatus : HttpStatusCode . OK_200 } ) ; } addToMyBlocklist ( options ) { const { account , server } = options ; const path = account ? '/api/v1/users/me/blocklist/accounts' : '/api/v1/users/me/blocklist/servers' ; return this . postBodyRequest ( { ... options , path , fields : { accountName : account , host : server } , implicitToken : true , defaultExpectedStatus : HttpStatusCode . NO_CONTENT_204 } ) ; } addToServerBlocklist ( options ) { const { account , server } = options ; const path = account ? '/api/v1/server/blocklist/accounts' : '/api/v1/server/blocklist/servers' ; return this . postBodyRequest ( { ... options , path , fields : { accountName : account , host : server } , implicitToken : true , defaultExpectedStatus : HttpStatusCode . NO_CONTENT_204 } ) ; } removeFromMyBlocklist ( options ) { const { account , server } = options ; const path = account ? '/api/v1/users/me/blocklist/accounts/' + account : '/api/v1/users/me/blocklist/servers/' + server ; return this . deleteRequest ( { ... options , path , implicitToken : true , defaultExpectedStatus : HttpStatusCode . NO_CONTENT_204 } ) ; } removeFromServerBlocklist ( options ) { const { account , server } = options ; const path = account ? '/api/v1/server/blocklist/accounts/' + account : '/api/v1/server/blocklist/servers/' + server ; return this . deleteRequest ( { ... options , path , implicitToken : true , defaultExpectedStatus : HttpStatusCode . NO_CONTENT_204 } ) ; } private listBlocklist < T > ( options , path ) { const { start , count , sort = '-createdAt' } = options ; return this . getRequestBody < ResultList < T > > ( { ... options , path , query : { start , count , sort } , implicitToken : true , defaultExpectedStatus : HttpStatusCode . OK_200 } ) ; } }