import axios, { AxiosInstance, AxiosRequestConfig, CancelToken } from 'axios'; import * as HttpFunctions from './http.functions'; import { IHttpFunctionsConfig } from './http.functions'; import { IResponse, IHttpDeleteQueryCall, IHttpGetQueryCall, IHttpPatchQueryCall, IHttpPostQueryCall, IHttpPutQueryCall, IHttpQueryOptions, IHttpCancelRequestToken } from './http.models'; import { IHttpService } from './ihttp.service'; export class HttpService implements IHttpService { private readonly axiosInstance: AxiosInstance; private readonly functionsConfig: IHttpFunctionsConfig; constructor( private opts?: { axiosRequestConfig?: AxiosRequestConfig; logErrorsToConsole?: boolean; } ) { this.axiosInstance = axios.create(opts?.axiosRequestConfig); this.functionsConfig = this.getFunctionsConfig(); } async getAsync( call: IHttpGetQueryCall, options?: IHttpQueryOptions ): Promise> { return await HttpFunctions.getWithRetryAsync(this.axiosInstance, call, this.functionsConfig, options); } async postAsync( call: IHttpPostQueryCall, options?: IHttpQueryOptions ): Promise> { return await HttpFunctions.postWithRetryAsync( this.axiosInstance, call, this.functionsConfig, options ); } async putAsync( call: IHttpPutQueryCall, options?: IHttpQueryOptions ): Promise> { return await HttpFunctions.putWithRetryAsync(this.axiosInstance, call, this.functionsConfig, options); } async patchAsync( call: IHttpPatchQueryCall, options?: IHttpQueryOptions ): Promise> { return await HttpFunctions.patchWithRetryAsync( this.axiosInstance, call, this.functionsConfig, options ); } async deleteAsync( call: IHttpDeleteQueryCall, options?: IHttpQueryOptions ): Promise> { return await HttpFunctions.deletehWithRetryAsync( this.axiosInstance, call, this.functionsConfig, options ); } createCancelToken(): IHttpCancelRequestToken { return HttpFunctions.createCancelToken(); } private getFunctionsConfig(): IHttpFunctionsConfig { return { logErrorsToConsole: this.opts?.logErrorsToConsole ?? true }; } }