1 import { HttpStatusCode } from '@shared/core-utils'
2 import { makeGetRequest, makePostBodyRequest, makePutBodyRequest, unwrap } from '../requests/requests'
3 import { ServerInfo } from '../server/servers'
5 export interface OverrideCommandOptions {
7 expectedStatus?: number
10 interface CommonCommandOptions extends OverrideCommandOptions {
12 defaultExpectedStatus: number
15 abstract class AbstractCommand {
17 private expectedStatus: HttpStatusCode
20 protected server: ServerInfo
25 setServer (server: ServerInfo) {
29 setExpectedStatus (status: HttpStatusCode) {
30 this.expectedStatus = status
33 protected getRequestBody <T> (options: CommonCommandOptions) {
34 return unwrap<T>(makeGetRequest(this.buildCommonRequestOptions(options)))
37 protected putBodyRequest (options: CommonCommandOptions & {
38 fields?: { [ fieldName: string ]: any }
40 const { fields } = options
42 return makePutBodyRequest({
43 ...this.buildCommonRequestOptions(options),
49 protected postBodyRequest (options: CommonCommandOptions & {
50 fields?: { [ fieldName: string ]: any }
52 const { fields } = options
54 return makePostBodyRequest({
55 ...this.buildCommonRequestOptions(options),
61 private buildCommonRequestOptions (options: CommonCommandOptions) {
62 const { token, expectedStatus, defaultExpectedStatus, path } = options
67 token: token ?? this.server.accessToken,
68 statusCodeExpected: expectedStatus ?? this.expectedStatus ?? defaultExpectedStatus