From b3c524da51434c6897a1cc52eb77c4e6ec2fa022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Wed, 28 Jun 2023 21:49:14 +0200 Subject: [PATCH] Add HttpManager (Axios interceptors) --- ExpressAPI/src/app.ts | 3 ++ ExpressAPI/src/managers/HttpManager.ts | 54 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 ExpressAPI/src/managers/HttpManager.ts diff --git a/ExpressAPI/src/app.ts b/ExpressAPI/src/app.ts index 9ac8a09..938043e 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 0000000..bd6af93 --- /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; + -- GitLab