1 import { HttpStatusCode } from '@shared/core-utils'
10 } from '../requests/requests'
11 import { ServerInfo } from '../server/servers'
13 export interface OverrideCommandOptions {
15 expectedStatus?: number
18 interface InternalCommonCommandOptions extends OverrideCommandOptions {
20 // If we automatically send the server token if the token is not provided
21 implicitToken: boolean
22 defaultExpectedStatus: number
25 interface InternalGetCommandOptions extends InternalCommonCommandOptions {
26 query?: { [ id: string ]: any }
32 abstract class AbstractCommand {
34 private expectedStatus: HttpStatusCode
37 protected server: ServerInfo
42 setServer (server: ServerInfo) {
46 setExpectedStatus (status: HttpStatusCode) {
47 this.expectedStatus = status
50 protected getRequestBody <T> (options: InternalGetCommandOptions) {
51 return unwrapBody<T>(this.getRequest(options))
54 protected getRequestText (options: InternalGetCommandOptions) {
55 return unwrapText(this.getRequest(options))
58 protected getRequest (options: InternalGetCommandOptions) {
59 const { redirects, query, contentType, accept } = options
61 return makeGetRequest({
62 ...this.buildCommonRequestOptions(options),
71 protected deleteRequest (options: InternalCommonCommandOptions) {
72 return makeDeleteRequest(this.buildCommonRequestOptions(options))
75 protected putBodyRequest (options: InternalCommonCommandOptions & {
76 fields?: { [ fieldName: string ]: any }
78 const { fields } = options
80 return makePutBodyRequest({
81 ...this.buildCommonRequestOptions(options),
87 protected postBodyRequest (options: InternalCommonCommandOptions & {
88 fields?: { [ fieldName: string ]: any }
90 const { fields } = options
92 return makePostBodyRequest({
93 ...this.buildCommonRequestOptions(options),
99 protected postUploadRequest (options: InternalCommonCommandOptions & {
100 fields?: { [ fieldName: string ]: any }
103 const { fields, attaches } = options
105 return makeUploadRequest({
106 ...this.buildCommonRequestOptions(options),
114 protected putUploadRequest (options: InternalCommonCommandOptions & {
115 fields?: { [ fieldName: string ]: any }
118 const { fields, attaches } = options
120 return makeUploadRequest({
121 ...this.buildCommonRequestOptions(options),
129 private buildCommonRequestOptions (options: InternalCommonCommandOptions) {
130 const { token, expectedStatus, defaultExpectedStatus, path } = options
132 const fallbackToken = options.implicitToken
133 ? this.server.accessToken
137 url: this.server.url,
140 token: token !== undefined ? token : fallbackToken,
142 statusCodeExpected: expectedStatus ?? this.expectedStatus ?? defaultExpectedStatus