import axios, { AxiosRequestConfig, AxiosInstance } from 'axios'; export interface ApiClientConfig { gatewayUrl: string, apiKey: string, opstracksKey: string, timeout?: number } const axiosConfig = (config: ApiClientConfig): AxiosRequestConfig => ({ baseURL: config.gatewayUrl, timeout: config.timeout || 0, responseType: 'json', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'x-api-key': config.apiKey, 'x-opstracks-key': config.opstracksKey, } }); /** * Base api client wrapper that provides an axios client for api calls. * Call init() user credentials and api key. * Does not work with two factor authenication */ class ApiClient { client: AxiosInstance; constructor() { this.client = axios.create() } /** * Initialize the api client * @param crendentials object { username, password } * @param apiKey string */ init(config: ApiClientConfig) { this.client = axios.create(axiosConfig(config)); } } export const apiClient = new ApiClient();