diff --git a/ExpressAPI/src/app.ts b/ExpressAPI/src/app.ts index 9ac8a0989d073e63e5ab1e160d3c889ff6d26dde..938043eccf882fe6b17e880e6eba87783060e8f0 100644 --- a/ExpressAPI/src/app.ts +++ b/ExpressAPI/src/app.ts @@ -5,8 +5,11 @@ require('dotenv').config(); import WorkerRole from './process/WorkerRole'; import ClusterManager from './process/ClusterManager'; import API from './express/API'; +import HttpManager from './managers/HttpManager'; +HttpManager.registerAxiosInterceptor(); + (new ClusterManager([ { role : WorkerRole.API, quantity : ClusterManager.CORES, diff --git a/ExpressAPI/src/managers/HttpManager.ts b/ExpressAPI/src/managers/HttpManager.ts new file mode 100644 index 0000000000000000000000000000000000000000..bd6af9397e56104fd444b9a7f7a60e1f7bde0514 --- /dev/null +++ b/ExpressAPI/src/managers/HttpManager.ts @@ -0,0 +1,54 @@ +import axios, { AxiosRequestHeaders } from 'axios'; +import Config from '../config/Config'; +import FormData from 'form-data'; +import logger from '../shared/logging/WinstonLogger'; + + +class HttpManager { + public handleCommandErrors: boolean = true; + + private static _instance: HttpManager; + + public static get instance(): HttpManager { + if ( !HttpManager._instance ) { + HttpManager._instance = new HttpManager(); + } + + return HttpManager._instance; + } + + private constructor() { } + + registerAxiosInterceptor() { + this.registerRequestInterceptor(); + this.registerResponseInterceptor(); + } + + private registerRequestInterceptor() { + axios.interceptors.request.use((config) => { + if ( config.data instanceof FormData ) { + config.headers = { ...config.headers, ...(config.data as FormData).getHeaders() } as AxiosRequestHeaders; + } + + if ( config.url && config.url.indexOf(Config.gitlab.apiURL) !== -1 ) { + config.headers['PRIVATE-TOKEN'] = Config.gitlab.account.token; + } + + return config; + }); + } + + private registerResponseInterceptor() { + axios.interceptors.response.use((response) => { + return response; + }, (error) => { + logger.error(`${ JSON.stringify(error) }`); + + return Promise.reject(error); + }); + } +} + + +export default HttpManager.instance; +