import { axiosGet, buildUrl } from '@tesler-ui/core' import { LoginResponse } from '@tesler-ui/core/interfaces/session' import axios, { AxiosRequestConfig } from 'axios' import { keycloak, KEYCLOAK_MIN_VALIDITY } from '../keycloak' import { __API__ } from '../constants/constants' const __AJAX_TIMEOUT__ = 900000 const __CLIENT_ID__: number = Date.now() export const HEADERS = { 'Pragma': 'no-cache', 'Cache-Control': 'no-cache, no-store, must-revalidate' } export function getBasicAuthRequest(login?: string, password?: string) { const hash = login && new Buffer(`${login}:${password}`).toString('base64') //TODO delete? const tzOffset = -(new Date()).getTimezoneOffset() * 60 const entrypointUrl = `/${window.location.hash}` return axiosGet( buildUrl`login?_tzoffset=${tzOffset}&_entrypointUrl=${entrypointUrl}`, (hash) ? { headers: { Authorization: `Basic ${hash}` } } : {headers: { Authorization: `Bearer ${keycloak.token}` }} ) } function tokenInterceptor(rqConfig: AxiosRequestConfig) { return keycloak.updateToken(KEYCLOAK_MIN_VALIDITY).then(() => { return { ...rqConfig, headers: { ...rqConfig.headers, Authorization: `Bearer ${keycloak.token}` } } }) } export function axiosInstance() { const instance = axios.create({ baseURL: __API__, timeout: __AJAX_TIMEOUT__, responseType: 'json', headers: { ...HEADERS, ...{ ClientId: __CLIENT_ID__ }, } }) instance.interceptors.request.use(tokenInterceptor, () => Promise.reject()) return instance }